gworkspace-1.1.0/0000755000175000001440000000000014753500006013117 5ustar multixusersgworkspace-1.1.0/.cvsignore0000644000175000001440000000014613214346535015126 0ustar multixusers config.status config.log autom4te*.cache *obj *.app *.debug *.bundle *.service *.viewer *.inspector gworkspace-1.1.0/.git-blame-ignore-revs0000644000175000001440000000046414751433006017226 0ustar multixusers#code style reformat 41514e0d34ddab499a9d3e8833cc89494787b105 6edf050c984acdf063703d0df62e2346f7df4312 0519af3bc52f9b7eaad165a6daff86f830428a52 9f3d5c1ce9b7260aff76da328b68bd23ab0ede2e b436fc5ecc0306d6149a07ce931f788774025390 619ef6a99589b445939fcb69109d656e7f38a7d4 1c24b8754758528ecec056de3b4e9277d18b86ed gworkspace-1.1.0/.gitignore0000644000175000001440000000065013757223211015113 0ustar multixusers# .gitignore - List of filenames git should ignore # Filenames that should be ignored wherever they appear *~ *.rej *.orig *.pyc *.log *.pyo TAGS tags ID .DS_Store* # Vim swap files. .*.sw[a-z] # User files that may appear at the root configure config.cache config.log config.status config.h GNUmakefile # Build directories obj derived_src # Build results *.inspector *.app *.thumb *.mdm *.finder *.framework *.extinfo gworkspace-1.1.0/Apps_wrappers/0000755000175000001440000000000013214346535015753 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/Acrobat.app/0000755000175000001440000000000013214346535020105 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/Acrobat.app/Resources/0000755000175000001440000000000013214346535022057 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/Acrobat.app/Resources/Acrobat.tiff0000644000175000001440000001624013214346535024307 0ustar multixusersII* $h!B &lX4B "]`,H 2ƏT޼%Oq2z(#^"K2%N<H瓎7O<'~Xrfɔ-SF1`΀zt=x)]:LfDCZѢɘ&mi8ˌ 4h0Aͧ4i0‚&-ִhɎ6]tisMsK0I` P`$! $2H /ƒX`t"F8a >LapXB`+ Vw!=CP@#/rl!3C>L!(D:d$"H@& #iC RX!Ȉ!h!QHA!)D$RWD @" Q =-8h?-L `k6 G7a 6rE4y.iG# H̒F=A*bf6D"rH$b HB³p#|d]8;A00 3X B`ޓ/p"CD$K(q+JŅEP~E|L8-iC6*ӅRd HD<d# ABH$!QHMR0$ B|x= FȈ@!VaGx B vЂXZIV>]kQg!(E8BQJl"(F P %'%FUqH$fqGv۔# ej3QV#6∇XAD@`!"D<yk9Fp,!X=Ba' Έ3 7" B4*b D!CQN<{GA|,JArR#Hi<bX!#c1F4R?DQ S Lh ? C@KȲs= xyhA*Ї auG03aOX-a .ǃhĢ*fF4WHT#ar?*RҢ@&<(" B*$䕸kjdDB]C u( B| /mcxHWx d (BPԸ VЇ) + g"f%'jrkF_\wL#sD3#GUvwgmG#AGt!; 7@""%@ޯj ), ް!PkϚjfH(, ȉ CPD:43 όpؒE( erPB(Myj30D"kHsᏘ|]4ġb|(C׿>Z C;Ѓ!`xX1pvcx#1&x`}Bu![$H iHB~⌈l EEPUPYPY/H@@dhȁhhT`H0x5D7$Uk zD{J *:$h$1FphpZO'wHAm15HHd(dgg3P-`RXs9P9r_ǃHLooH:HD(DpPw?UXp pKdOpF8h1hXFPPOu5H r5iPt(7 (5m7]ȆXYcUP6?` GDHȄHHRH4h dB0{J505`T;0nspspPpfSpp`(pLF HfHXhèXhXFq(ueHwp(pqGHrHT(1($HH?0PHP-PX]p ς|HJHd(d܀3{>p`;0pGp0WHWWpwcLR:DhMH,֘&_P_WHHw'piЎttHrXD(@ȊH,,ee09P9M??XLd(H Hx(rM PCC0MK{''x`H )u57p3:dhmhURh h;h0tB4pW׌WPPLLȀjȀ4L̆$(MdOq#pqs]HP2$0v؇PHl K])t́(C+;;[ph/;"KS:TTHvQQ|_R_(vbpTpwwP[P,h,ȀzȀt 5Ԃ$(IV(HJH  HІb߄VMM?\]0'0Z^^ȇȇ*=HGgpt?pxHxH Hoq? CHN.uhZo2(ub(+/c+K%ȄzjHtH*HMMH.OH3V T D(DtCiCpF=pdqq؀]؀ ؁ yj4?pw(qqi%XFqdăx$80~誆ҬqC 2/(C6(Jpb(^rHmaHH+gHuHR5T ȇ n:H,XHKKXiXi؂=F`F0{HT. hu)h&Lh HhhoX>\@؀Yu8h|ȞBȁ)]TM 8 ^\L9X9؃S؛v;p;0W0FFYm8m؁]n؅3]>؅ff(N(""(v(BhB(.( $H~QHDJX. hgmhuyhP][?-(nbb؁ ؁5850w0GAXA؃K؃FF`~`YY%[ 8}cЁH~'؅s[JVV`~`H(>(RR(N(*自AHdk8`Bgh7h(hoP_PBB؁+؁Y؆Y3UU0(0,,؅h1$;h``{Ђ""h h}}8K8vv"rr݃v?(a(RR(Q(  1 ͫ]45P@@݁ 4/(hS5hh޻}`ЅЅllȅQȅ]^s[DI؆I؃ ؃2h2``""((^X^8+8YXYA K ȀZȀ=>66*2:>nJiZZyaH6^MnznzN  U8{؅IXI`~`LLȆ!Ȇ==]‚u8.~C ~(^(8 h  >n˥+66(Q(rrɫzY::FX mM4H>zsi^--}u(F(~~&ȁAȁX)X)`A`5A}}XO?H:z>&RX÷+84ȃ4ЃJJQZZ؇K؇rhr`A`2:jy<B6ց1%Q߄!A]q}nn@@ЄPЄU83?>-5ȁ>ȁ\\XcX\s1!B~ׁ@聒28k8÷o**v׃ [ЅJ}w*Iy|;Рɼ&5k$,Ÿ $1"&QFE4*R!! _ ucǕ6pA &훴ڞZ=jI4'[rlɁkfmRN:8ЍC +DL! VmDAq X`z6Zͩ`.EMZhfM[:_ )RLIhBXb[LqQB dP8H!SS6L鳤ϢSSY6hUNb㊵[*9&Fqȵ#Ǯ뵤WQV6rKzHZ czY&ciaDMa:١ dLR&I!H`"#PF%>?ŸgqYaaFt03h x1& cL3"1Ü(̱&k1C;}!bhRAstE zy6gMB.Rh&zUAYLd6:٦v)Є#ErHc4Ҙ%TH%Y#'"×| f`Z٦5X!ꡅZ\)2tleX"DFHҘ$t&I'I2 `</"Y)dBh  '"azئ#8"xB@ X5ؠV6i-nv馏}e޲'ed!Ib$!0#aBğnV`\jE H"Z HfdR v"lf&re.ɧy(aJYYNucAXyNg5B .|H&eU6i霗^ءo| YɩT%h&qc0蕒N `ָdU\ŋdI^yI`tUIeTҘ L&$iev3'(%(gr{X59c#1&ЄVF2Tc6dbH2ҐE$#G4&"!'zP!=AЀ<y@7*v!Hbs^Юu1m!CQ`K[(QeTp? -@1<`fl(VD+ t [ qя]c1d|c 2 db H2R)ĒE?B^" C4 @,a y( FmbB;^Fv$a3](Ѝ}SXD*`5HARrD(A36ьVl[ :. 43`;01l|ayHւT,#XHq H6AD"b^͡OFUa# D0uGa},f(x&a uh:Јu42G).Sxˮ0]`5>r$bH)%$j8DaQ,: ݅GЉx$aIA*R1Td`x@r0a:)yJ5T`  2)Gnl;HN\$8} vc#!0}W \u0S"ӈC $F 1hY5A␈V_k-6}dc ٍjLz}P ˨*KZ2 4DBcLsy>&o1 c m1L2cCІ>ak?\00b  !h8/usr/home/fatal/pascal//pdf.tiffCreated with The GIMPgworkspace-1.1.0/Apps_wrappers/Acrobat.app/Resources/FileIcon_.pdf.tiff0000644000175000001440000000772213214346535025340 0ustar multixusersII* vvv\v vv9 v "v" v vvv9f C \-\\-\\\-vv9- C999-fv\vCC 9Av\9vv9v \--99Ov9v C"v 9\ 9p\ \v\vC \v99vf\vv9vC 9v9v9999\\\)))CCC ffff---XXX999\\\\))))CCC fff----XXX99\\\\?gLXC))))C C ff-f-X-XXX9999\\\}[X)CCCC ffff---XXX99999\\\dp2))CCC fff---XX99\\\\gczAf) C fff---X-XXX999\\\MJs72f fff---XXXX29999\\\\e <[2 fffff---XX299\\\\7b'q r2f7r-f---XXX29999\\\rPt" frf---XXX229999\\57 f0A- -r7XXXXX222r99\\\\[))XII`-ff-fXXX22r999\\\\ CCCi ff-XXX22r2r9999\7C))CC{'K'3X----XX2222rr99\\\\\CCCC$KK,`X--XX<<2r2rrr99\\\)CCCCCI @KK,`-XX<222r2r\\\)) CCCC%'HD7_U!!*r2222rrr\\\\)CC `c'P7I7iEKvr2r2rr\\\)) fC jYk~]4B 7hmo/rrr\))))C72fC ? wl p&nI7To.A2rr)))C2[2 fK;<p=Z+MHAr<\))CC)Cffa'yNu7FYHr<))))C C 87|YuAXXX2AA<rr<)))C)C C8]x 7G;XXrrr<<)))C)CC1Vn@vX` rrrr<<`))))CC W6:R#`XX7`rr`r2rrr<<`<`))CCCCC g^ns`[<`22rrrr<<<<``))C)CC fSQIi(Hr<`r`rrrrr<`<```))CC f /AXXX2>ffڦ**~~ھVVvvƦFFֶⶶzzrr22vvVV^^^^ffjj**::ަBB::ަBBNNbb>>BBBBbbRRff&&66vv&&BBvv""VVRRvvbbnn66**22 NNꚚffrr..ZZffFFffzznn>>RRVVJJ^^..**bb>>**ZZnn66zz**FF~~RRvvff66VVnnNNNN&&rrNN..ZZff::FFffzzΪjjzz^^zzrr22jjVV::VV^^ZZ&&NNNN^^VVvvRRJJ>>&&NNffvv&&66JJjj>>ff..BB66JJjj..>>ff"" 66..LLdd44DD<<\\TTdd$$44tt$$DDttTTTTtt\\ll44,,<< LL씔ddll,,\\ddDDddttll<<\\TTLL\\,,,,\\<<44 \\dd,,tt,,LL||TTlldd<@#8*ccc###CCCooo///OOO),?_oQkσ^_pbB2 #}Yu(u(M)ev `#Z@ ###CCCooo///OOOggg),g?3 oSM2oa޸0??oL|KKlXy)(DGXZ@CCC///)?/_gkAoVe,4o__?j?:??p??ߪ/M-0T;t*qqq===CCC}}}///www'''O___) &/ͲioѬ__?:?:R0bp??j? =x90Z@wwwGGGoo/]*oq X4_߶߶6Zn?vp?pǤe|ǤZ@111]]]===OOOwww,$?oo=߷_)ﳎύ!~7Z@Nh.X^TT΄_ߦ8_n_ߦ8P OZ@lll111===www777WWW),?/?OU_ߗi#F/MDhn ?._tTTt_ߖX??j2pM D+*lll}}}===]]]www777WWW,L?_?_?o_m_e{ZO bq_'_&XT>>6x?FR0?2p?-82lllQQQ===]]]www777WWW{{{BTT8h!ؠ 6* z`F`V0606060F&z `z z` <r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.gif.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.jpg.tiff0000644000175000001440000002245513214346535024160 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUUUUUUUUUUGGG888GGGGGGUUUUUUcccGGGcccUUUUUUUUUUUUUUUUUUUUUGGGUUUUUUUUUUUUGGGccc888UUUGGGUUUUUUUUUGGG888UUUUUUUUUUUUUUUUUUUUUccc???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDD```---+++KKKVVV***|||ffftttFFFrrrVVVFFFhh8AAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzXXDUUUKKK sss  @@2@@B@@llD8@@(8@@Dt@@t@@ t@@DD(@@0eee #s5ɿEҿ D?_ +e9-m _ggs Q%" 333cヿM]ֿѺ D?}2jvaaIUayeb|||333___]ſ͡ѺN0J,l<B*~q I 1qvzyURiiisss333SSS???___-3#Mٿ5]՞VIf:vN^iYYYyYyf.2\\\iiiccc333SSS???___www-ÿcUEѺܿg9v6vF~~)yy% =YAq|\\\###SSS???___meʤP9^v*|,LL:N.q)vyy|\\\)))SSSccc???ooo7773Ϳ9-Iƿ>zPn6:|\Zz8 N&Z1y|CCCoooWWWc]]HC~22yeLz4,8x<*EIII###ooo#//텿5ɿ]:CSy1&v1M,:TLV K###ooo///OOOcsՉ]aK8SC YQN&&Z:j>KK*ccc###CCCooo///OOOCÿuſ塿οʿ4h? ,4 K}YuuM)ev #pZ ###CCCooo///OOOgggCkӿýE՞z$KKPKy)KZCCC///-ͩվƿv"&fVVV/ML-(;*qqq===CCC}}}///www'''-#5]ѺfxNfN"=9NZwwwGGG-ӿӃuſm͡ҿ*ڔl2h?fnVVe Z111]]]===OOOwwwヿ]ּֿvAN ROZlll111===www777WWWCvJx ?AAnvfnM p+*lll}}}===]]]www777WWWc/WsͿſ~ܿ D?DP'Vv!!nN- 2lllQQQ===]]]www777WWW{{{- %yi~>6* zFV666F&zzz<r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.jpg.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.png.tiff0000644000175000001440000002245513214346535024164 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%.N.,l,5U5,l, @ @ 6v65U5 @ %e%.N. @ @ @ ,l,5U5%e%,l,5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'G'????;{;8X8 @ 5U5??'G'????6v6 @ 8X8'G'????'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ????8x88x8??#c# @ %e%??*j* @ #c#5U5 @ 1q1??.N. @ #c#?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ 5U5?? @ 5U5?? @ @ 5U5%e% @ 5U55U5 @ @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'G' @ @ 'G'?? @ 5U5?? @ @ 5U55U5 @ %e%'G',l, @ 1Q1?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ????.N.6v6??1q1 @ 5U5?? @ @ 5U5%e% @ .N.??5U5*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ ??#c##c#??5U5 @ @ %e%?? @ @ %e%5u5 @ @ 5U5????5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ 6v65U5,l, @ 1q1?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ ,l,????#c#??1q1 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????_??_?/o//o//O//O//O/7w7/O/7w77w77W77W7'g'7W7'g''g''G''g''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++k+;[;+k+;[;+k++K++K+ @ @ ??????????????0P04T40p0 @ $d$(h( @ 8x88x8 @ (h($D$ @ 0p0$d$ ` 0P0$D$0p0 @ $D$(h( @ 8X88X8 @ (h(8D8 @ 0p0$D$ ` -M-3S3+k++k++K++k+3s3 @ @ ?????????????_?4T4)i),l, @ 6V62R2 @ *J*:z: @ <|<.N. @ 4T46V6(h((h(&f&4t4 @ :z:"b" @ 2r2*j* @ ,l,6V6 @ $D$&F&(x(!A!-M-3s3+K++K++K++K+ @ @ ?????????????_?$d$)I),l, @ *j*2R2 @ "b":z: @ ,L,6v6 @ $D$:z:(h((H(:Z:4t4 @ 2r2"b" @ "B"*j* @ 4t4&F& @ 8x8*j*(x(>^>5U53s3+K++k+3s33s3 @ @ ?????????????_?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8D8&F&8x8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ D8 r" J2 R R B, |4 l$ l$ t( d0 D X h X D D T( t( t( t( t( t D0 D D X H h p @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ C=/?'?3?5?)?.?*?"?$ _# K. e N Y M2 m* s> _# g% O= w g> sZ sZ sZ I8 Q` e B @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ c#7?'?=?%?1?6?:?"?8 _# }" V R Z j F z ^$ v a a ~ a I, U< a y e b @ "B")i)3S33s33s33S33S3 @ @ ?????????_??_?/O/ @ ]-+?#?-?%?!?&?:?2?4? 7 a J L l \ B J ~ q q I I q q v z y U R @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ M5#?-?9?)?1?>?&?*?,? W5 I f z v V N ^ i Y Y Y y Y y Y f n e R @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ M5#?5?)?!?.?6?:?<?( g% Y$ v V v z F V ~ ~ i y y E ]4 Y$ v A q | @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ m-#?=?%?!?>?.?&?2?$? g9 y ^ v j | L L L R Z N n q i A v y y | @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ m-3?3?-?1?!?!?&?2?4? g9 n V z | \ Z z d0 x p D l J N F Z q y | @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?_?/o//o//o/7W7 @ c#'?+?5?1?1?)?.?*? 7 c< C* ~ r l r y< e" L z$ T l X x | b j i E | @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/'g' @ C=/?7?#?%?)?)?&?"? g% C: c< y Q` f v q$ M2 Z | l Z B T L l V u 0K Z @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?_?/o//O//O//O/'g' @ c#/?'?#?9?1?)?:?4? ; O= K< S$ C$ m u Y Q` Y N F f Z Z F j ^ c c J @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ C=;?+?#?%?!?.?*?(00 _1 g& W> _1 g& K* C } Y u u M I e v I C s< Z @ ,l,)I)=}=#c##C##C##C# @ @ /o//O//o//O//O/7w7'g' @ C='?3?=?9?1?.?&?"?48(00(0% o% w [" w K8 K8 K: K8 { y I K: { Z @ <\<1q1=}=#C##C##C#=}= @ @ /o//O//O//O/7w7/O/'g' @ m-#?-?%?)?>?6?&?4?$?4?0((((0%((00%0%0%( O! M, M G. [: j @ ,l,1q1=}=#C#=}==}==}= @ @ /O//o/7w7/O/7w77w7'G' @ M53?-?9?)?)?6?:?"?,?4? _+088(0((0Q0((0% ) ]< y ) o* Z @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ M53?=?%?%?)?!?:?2?$4?(7(8$8((80(0%$;00 G: e ) G* Z @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ m-3?3?=?=?9?)?6?<?$4? W5(#($+,?$$888$'$;(#8 ) u40% O: Z @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7w77W77W7'G' @ C=/?;?#?%?)?)?:?<?8(3 _+($;$$4$'$48(((00Q M4 sZ K* J @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ C=7?/o/#?-?%?!?*?<?$ _# G)0%8$;4?4448$+0%(0Q00 M, m8 S R @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77W77w77W7'g''g';{; @ R m- M5 y9 y9 i) ~ ~ ~ V< j$ J8 z$ z$ V< V< V< V< f, F4 F4 z$ z$ z$ z$ z$ B( \ r( D @ ,L,!a!-m-=]==]=-m-=]= @ @ 7w77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (x((h( @ (H(8x8 @ 0p0$D$ @ p 8X8 ` ` (x(0P0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0P0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''g''G';[; ` 8X8 ` @ 0p00P0 @ 0p00p0 @ p (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;[;=]=!a!.N.&F&:z:6v6&f&:Z:6V6&f&:Z:&F&&f&:Z::Z:&f&:Z:*j*&f&:Z:*J*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%E%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33s33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.png.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.tga.tiff0000644000175000001440000002245513214346535024153 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,'G'??5U5 @ @ %e%5U5,l,5U5,l, @ @ 6v65U5%e%,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,'G'??%e% @ 5U5????'G'??*j* @ 1q1??#c#3S3??8X8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ ,l,??3S3 @ 6v6??*j* @ 5U55U5 @ *J*??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ *j*?? @ @ @ ??*j* @ *j*'G'??5U5??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%?? @ *j*??.N. @ ,l,??*j* @ ??#c# @ 8x8??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ 5U5??*j*8X8??'G'*j*5U5??*j* @ ??#c#*j*5U5??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ *j*???? @ *j*????5U5??*j* @ 5U5????1q1??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N. @ <\^>5U53s3+K++k+3s33s3 @ @ ?????????????_?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8D8&F&8x8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ x J r r b B | l l t d D X h X D D T t t t t t D D D X H h p @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ C /7/7'#+5#)5.1*>"*$(_ k e v y M m K (_ 0g 0w 0w 0g s K s I Q e B @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ c /7/;'#3%3)%6):>"*8( } V R Z j z F n v Q a ~ Q I U a y e b @ "B")i)3S33s33s33S33S3 @ @ ?????????_??_?/O/ @ ] 7+'3;-+%#!9&):>"&4( a J l l | B j ~ q q I I Q q v z y U R @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ M '#;-#9#1#1->9&1*6,0w I f Z v f N ^ i Y Y Y y Y y Y f n e R @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ M '#+5#)=15.%6):6<,(0g y v v v F F f ~ ~ i y y e ] Y v A q | @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ m '#'=#9-!->56%6!2*$0W Y ^ v J | l L L R Z N n q I A v y y | @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ m 73'3;--1=!#19&!2&40W n V z | \ Z z d x p D l J N F Z q y | @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?_?/o//o//o/7W7 @ c /'7++5-1#1#)56!*( c C ~ R \ R y e L z T l X x | b j i E | @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/'g' @ C /7/7'#+%#)319&&"0w C S y q F v q M Z | l Z B T L l V M 0K Z @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?_?/o//O//O//O/'g' @ c ?//7'##9=13))&24$ (_ 0K S C ] u Y Q i N f F Z z z j ~ C S J @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ C 7+7+'#3%=!5.!*,(4040$_ (g (W $_ 8w s c } Y u u M I e v q c 0s Z @ ,l,)I)=}=#c##C##C##C# @ @ /o//O//o//O//O/7w7'g' @ } /773'=#9=1->):."&4*8*(2020:(*08_ 8w 0[ $O K 0K k 0K (G y i 0K (G Z @ <\<1q1=}=#C##C##C#=}= @ @ /o//O//O//O/7w7/O/'g' @ m '#;-+%#)=!9&9&:4:$.4<0<(:(&(:(*0:(:(*0:0*0:0*(8O M M 0G 0[ J @ ,l,1q1=}=#C#=}==}==}= @ @ /O//o/7w7/O/7w77w7'G' @ M '3;-#9#)31%6):>"6,648 40&8682(:0:(:(*0:0*(&(:0, ] y *0,_ Z @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ M '#'#3%3%#)#!)&!2:$&4<(2(&8!$&8&(&(68*0*(:0!$*0*0(g e , (G Z @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ ] 73'#'=;=393)%66<*$64(O 2(&(.$1,.$.$*868&8!$.$:(&(20 u "0$O Z @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7w77W77W7'G' @ C /7/''#+%#93)):."*82(( &(.$14.$!$!4.$1468:(&(:(*0*0 M K 0K j @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ c /o//7'#;-3%#!!26<*88 0g :(&(!$14!414!468.$*0&(*0:0*0 m m S R @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77W77w77W7'g''g';{; @ b m M E y i Q ~ ~ v J J z F V v v v V F f z F z z F | | r x @ ,L,!a!-m-=]==]=-m-=]= @ @ 7w77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (x((h( @ (H(8x8 @ 0p0$D$ @ p 8X8 ` ` (x(0P0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0P0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''g''G';[; ` 8X8 ` @ 0p00P0 @ 0p00p0 @ p (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;[;=]=!a!.N.&F&:z:6v6&f&:Z:6V6&f&:Z:&F&&f&:Z::Z:&f&:Z:*j*&f&:Z:*J*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%E%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33s33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.tga.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.tif.tiff0000644000175000001440000002245513214346535024162 0ustar multixusersMM*$************************************************************************************???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDDĄ```---+++KKKVVV***|||ffftttFFFrrrVVVFFF8hhAAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzDXXUUUKKK sss b"`l @l@D8(@@8D@@tt@ @tԀD@@D(0@@eee ɬ g~aafa!2!-,:q>A 1NΡΡ^*" 333,Lga^aG6a˪! !m,a!nnnnnJJʞ^F~Jb|||333___dgAag~a'aa[*! !5ʞnntnnnn^>nnnFRiiisss333SSS???___aa'aVa&a;aZ!!2^n>>AZ~nRF2\\\iiiccc333SSS???___wwwagaGNaFK AB! >:bB^^V^ |\\\###SSS???___Ig᧞aG6{Fa:aj*!l:nLnnnnlnnR^|\\\)))SSSccc???ooo777,$aga.FaFa[J!R!>bnLn n|~nDnn$nn\nn|n|CCCoooWWW,LggAa'N&a&aaj!!AnnnQ1TDnnnlnnZIII###oooɬ aga6afa*#b~Q>n>fnnnnnn^@###ooo///OOO,L1a'>aafa{! JAa%!.11^*Z|nnnnvA*ccc###CCCooo///OOO),gag!aaGvk2!aaai~)aqva&&f~nvNZ@ ###CCCooo///OOOggg),Qg~aaGVa{aZ!c!͜aaEyTayy!A1IA. . nQ.q^A>AZ@CCC///)g~a'aGva{ak*!J!l!a5a4aᥴa94ٔ4YY9ٔa9!f>ޑ*qqq===CCC}}}///www'''agaǮaafa{˪ !!\a aTa aUE4ya44iٔ94Y$V!:Z@wwwGGGaga^aGvaGvaa;!K!!!mtaa laUaaa aaeaea,Ṕ>aI$>aZ@111]]]===OOOwww,$gaga^aaVa{K,!\a4aUta\a5a5aUaaa,aaaI^aiAZ@lll111===www777WWW), g^aaafsr!c"a͌a4$Uaaa5a5aa atᥴ94If^Ρ*lll}}}===]]]www777WWW,Lgg1>a'.aGa[F!ABm,ad>aat5uua ayaEi^~A2lllQQQ===]]]www777WWW{{{BTT8h!ؠ 6* z`F`V0606060F&z `z z` <r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.tif.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.tiff.tiff0000644000175000001440000000705413214346535024326 0ustar multixusersMM* f P8$ BaPd6DbQ8qV,cr5 AJdITE+̮F %J㨏<@%QoE2BiPP2°cD_u;TU%DiҽI+l4B0,l lvM ]w q~8K{}D !ܮ\v8TEQ#EPTBo"Ll[ Fl=MK1Ϻ0C2e#PQU6eU"+UD_agQýD80Fx^jѶ +#-EJ2AF|%]?TSo_er g{MBTD8+V}aj+@ Dl!:/J |l1 1q*ED D+dB 2.CDaGA=Fڜl2!z l(1(1ԟ)p%IJX‒?Xi .pRJ#a\Rw'%wyf %pQV" @&$@%[QQ4X!"x8@0S,"@V?7 p@"WgM߅rW%+V?2Ҍ8uD 3u6F`&?CrҲ|9zC@<l _a OD *EdG h٨#hZgc9%vHya A,M?#eNx0F #a$TlwR`}M2n-$Tt2[SLPbN@*@ ̝l2%qFuB0*qUZJaa!҅(8c5x iEe2 q!/svo \㜠N)? wA۴n+PBƸTCX@! p2tѴ ejG8aae%D20å4o,Y8$3MΐHZ&xS@bT lL$7h[u8@*!⢕#l4j!vdJ6PC1Į&3N/%JeuEr98&.)݃PYu} N"Uu4 @?q^ ʈO v?+P6Hp\Jq<Rix%t!Y`'?}TMWPq.DkU`f9T6B%e(r2՗qRs G`,Œ 樀a[2vKJ9qj h7x?b4 aX<]2HB6 ^VI@<x%~8Q#\;w@ᛧ(g"XE2H?I+0+FQT:?MUi+OJLhm#PiMpinMYF 2S5}>|=xo#&, HRg, i1EEWTS^D6(v_$C5m-p ˯7"MI_Sa@[8Pf 쬰F®:'Wx1xبJP.AF֔:Α{cxf޸WpNt|+7 SK8 {7c̠t PR %uǝF/*jY[,g%p. T9 "!ܫuWrr"4#y܀@64ܲNxdLa LE6z<Ad%DaFlfc"<”dπI,m2 bB@lJtTDFPާ2'dġd d lOf>AL hL1 ` h @c P Ħ P0*p($A u NeDd@`䮗dlLXn!GP( 86Pʡ]ϘZkP4nrtSqf˱ +"@d򞇄pa 8JF$""2P!"@_-QQ9%Soy|R@P R 3" 3`D3tQ# YA:a-F3Lq!` f&GiM5"?R?a$`hYpznT7r <3  | S CDtUE35LLEt[EaFSI4kF`b>4;IOP#PPTPPpѢ(6/gR RUR5-Ru/R1Su5S)S3T9TU=T5LmCmUuUUU_UͯVgVUiVmW5cWukWU5X5XuXXY5YuYYX"00 ]$(R ' 'gworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.xcf.tiff0000644000175000001440000002245513214346535024160 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ,l,5U5,l, @ @ ,l,5U56v6 @ @ 5U5??'G'6v6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8X8'G'??8x8#c#'G'8X8 @ 1Q1??????1q1 @ %e%??'G'.N. @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??#c#??,l, @ 8x8??1q1 @ 1q1?? @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <\~>-M-3S3+K+3s33s3 @ @ ?????????????_??_?/o//o//o//o//O/'{;;K#+S#;[;7W77w77W77W77W7'g''g''g''g''G''G';{;;{;;{;;{;;{;;[;;[;+k+3s3#]->n&!~.:z:%e%3S33s33s33S3 @ @ ???????????_???/o/?_??_?/o//o//O//w77G;-U9-M5+k+7W77w7'g'7W7'g'7g''g''G''G''G';{;'G';{;;{;;[;+k++K++k+#}=!~66f*&F:*j*%E%3S33s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O/7w7+k+;[;=M%%i>5e)+K+'G'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;;{;'{;#}=!A.6f*:Z2$D$:Z:%e%3S33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//O/7w73s3+k+3c#%i!1a6)q!#C=;[;'G''g''g''G';{;'G';{;;{;;[;;{;;[;+k+;[+5U%>^&6F*&z2:j"4T4.N6-M-#c#3S33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//O/7w77w7;[;=]=+s35E))Q.!^&!A65e%;[;+K+;{;'G';{;'G';{;;[;7W7'G';[;=]-9i1>N&6f*:z":j":j"<\<1q1=}=3S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/7w7/O/7w7'G'=m-+K+=m59I>1A6>N:>n&)q!-M53c#+K+'[;;{;'G';k+3c#%e%)q!!^&6V*&F2&z2:Z2*J"*j2"B")i9#c##c#3S3#c##c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/O/7w77w77W73s3;{;3C=%y)9Q.1~6!n&!^&)Q.)Q.9q!)I19I>1a>>^&>N:6f*&F2&z2&z2:Z2:Z":J":j"$d$2R29y9#C#3S3#c#3S3#c# @ @ ??/o/?_?/o//o//o//O/7w7/O/+K++K++K+;{;'G'7W7/O//O/7g'#}5)q>%y);k+/w77W73C=1Q..N:&f*&z2&Z2:j":j":J"2r<*J<*r<2r<8x88x8:z:%e%#C#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//O/'g''{;=]=%E9%y9=}='g'7W'7W7-m-%y9;k+3c#/w7/o/'g';[+7W7#C=!~6&f2&z2:j"2r<2R,"B,2b,"b,"B,8x8(h("B"!A!-m-#c##c##c##c##C# @ @ /o/?_?/o//o//O//O/7w7'G'-m-!A!&f&2R2:Z:)I1#C=3c#*j*4t45u57W'?_?;{;9i16v65u5+K+1A6&F2:Z"*r<2b<"|,<\4<\4^>5u5#C##c#3c##C##c#=}= @ @ /o//o//O//o//O/7w7/O/+k+>~>!A!%e%&f&,l,<|<1A.=]-2r22J25e%'[;/O/=m-*j*4t4>^>#}=!A.&z2:j"2r<"B,"\4,\,^>%e%=}=#c#3c##c##C##C##C# @ @ /o//o//O//O//O/7w77W73S3:Z:.N.)i9:z:,l,,\,:Z*9i19i1%Y)%i!-U9'G'=}=2R2,\,1q15U%.v::z"*J<2b,"|,<\4n&>n&>n&1A.1a.!~..v:&z2*J*"b,2b,"B4<\4<\4,l$4T$,l,>~>-M-#C##c##c##C##C##C##C#=}==]= @ @ /O//O/7w7/O/7w77w7'g'3S39Y9"B"^>&F:2R<2r<:j"&z2&F2&F2&z2:Z":j"2r<<\4"|,*j""b,<\4~>.N66V**J""B,2R<2R<*r<:J"*J<2b<"B,^>.n.1Q!1Q!*j2<\4,L$,L$,L$4t$4T$$T84T$4T$,L4^>2r2<\<<|<:z:<\,(h(0H00p0(H08x(4t$,\,2r<:Z*&Z22R",t$(H00P0$d82r2>~>5U5=}=#c##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77W77W77W77W7'g''g''G'+k+-M-!a!:Z:<|<4T48X8,l$"B"4t$$d$$d$4t$,L$5U5=}=#C##c#=}=#C#=}==}==}==]==]==]=-m--m- @ @ 7W77W7'g''g''g''g''g''G''G';{;+k+#C#%e%)I).N.2J2<\<$D$4T44t4$D$8X88X(0p00P00p08x8,L,"B"&f&)I)5u5#C##C##C##C#=}=#C#=}==}==]==]=-m--m-=]=-m- @ @ 7w7'g'7W7'g'7g''g''G''G''G';{;'{;+k++K+#c#=]=%e%1q16v62r24t48x8(h((h(8x84T4"B":z:>~>)i9%e%=]==}=#C##c##C#=}=#}==}==}==]==]==]==]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;+k++k++s3#c#-m-9Y9>^>:z:*j**J*:z:.N.)I)%e%-m-#}=#C##C##c##c#=}=#C#=}==}==}==]==]=-m--m--m--m--m--M- @ @ 7W7'g'7g''g''G''g';{;'G';{;;{;;{;;[;;[;;[;;[;+k++k+3s33c#-m-5U5%E%%E%%e%-M-=}=#C##c##c##c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-M--m-5u5 @ @ 'g''g''g''g''G''G';{;'G';{;;[;;[;;[;+k++k++k++k++k++K++K+3s33S33S3#c##c#3c##c#3S3#c##c##C##C#=}=#C#=}==}=#}==]==]=-m--m--m-=m--m--M--M--M- @ @ 'g''g''g''G';{;'G';{;;{;;[;;{;;[;;[;+k+;k++k++K++K++K++K+3s33s33s33s33S33S3#c#3c##c##c##C##C##c#=}==}==}==]==}=-m-=]==]=-m--M--m-5u5-M-5u5 @ @ 'G''g''G''G';{;'{;;{;;{;;[;;[;+k++k++k++k++k++K++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}=#C#=}==}==}==]==]==]=-m--m--m--M--M--M-5u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.xcf.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/FileIcon_.xpm.tiff0000644000175000001440000002245513214346535024204 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ,l,5U5,l, @ %e%.N.,l,5U5,l, @ @ 6v65U5 @ %e%,l, @ 6v65U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8'G'??8x8#c#;{;8X8 @ ??'G'????;{;8X8 @ 5U5??'G'????'G'????#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??#c#??<\< @ @ ????8x88x8??#c# @ %e%??*j*8x8??5U58x8.N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <\^>5U53s3+K++k+3s33s3 @ @ ?????????????o?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8x8&F&$X8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ $`8*@ 2@"2@""@,"@,<@4,@$,@$4@($@08@ 8@ (@ 8@ 8@ $@04@4@(4@(4@(4@(4@$@ $@ 8@ 8@ (@ (@ 0@ @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ =@#?O??W??S??u??I??n??J??R??D??@+@>%@ .@ 9@ -@2-@*+@!?@'@-/@3?@5+@!+@&3@+@&1@$1@ %@ "@ @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ #@#?w??{??C??E??I??V??z??B??x?@=@26@ 2@ :@ *@ :@ :@ >@$6@ !@ !@ !@ !@()@,5@@ 1@ )@ )@ 1@ 1@ 1@ 6@ &@ 9@ 5@2@ @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ -@?c??m??Y??q??Q??^??F??j??l?7@)@ &@ :@ 6@ &@ .@ >@ )@ 9@ 9@ 9@ 9@ 9@ 9@$9@ &@ .@ %@ 2@ @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ 5@-?C??u??I??Q??n??V??z??\??h?'@-9@46@ 6@ .@ &@ &@ &@ >@ >@ )@ 9@$9@ %@ =@,9@$6@ !@ 1@ <@ @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ -@?c??}??E??a??^??v??V??R??d?7@%9@>@ 6@ *@ <@,@ ,@ ,@ 2@ :@ .@ .@ 1@ )@ !@ 6@ 9@ %@ <@ @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ -@?s??c??M??Q??Q??a??F??r??t?'@5.@ 6@ :@ <@<@:@ :@ $@ 8@ 0@ $@ <@*@ .@ &@ :@ 1@ 9@ <@ @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?o?/o//o//o/7W7 @ #@#?G??K??u??q??q??I??v??j??`/3@"#@:>@ 2@ <@2@ 9@%@",@ :@d4@,@ 8@ 8@ <@"@0*@ 9@ %@ <@ @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?o?/O/'g' @ =@#?O??w??c??E??I??I??f??B?7@#@&#@:%@ 1@ &@ 6@ 1@$-@*:@ <@,@ :@ <@4@,@ ,@ 6@ 5@+@0:@ @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?o?/o//o//o//O/'g' @ #@#?O??g??c??Y??I??I??F??T??`;/@3+@"3@$=@$=@05@9@ 1@ )@ .@ &@ &@ :@ :@ &@ *@ >@ #@0#@0*@ @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ =@#?{??k??C??E??a??N??J??h??p'?P;?@9'@>7@!?@97@!+@:#@0=@09@ 5@5@-@0)@ %@ 6@ )@ #@3@":@ @ ,l,)I)=}=#c##C##C##C# @ @ /o//o//o//O//O/7w7'g' @ #@#?g??s??}??Y??Q??^??F??B??T??X'?h?P=?p?H+?p?@57@1;@*/@+@$+@$+@&3@$'@89@ )@ +@&'@8*@ @ <\<1q1=}=#C##C##C#=}= @ @ /O//o//O//O/7w7/O/'g' @ -@?c??m??e??i??~??f??F??T??d??t??P3?H'?X'?h+?H3?p?H3?h+?P=?H3?p?p?H3/@-@<-@0'@>;@&*@ @ ,l,1q1=}=#C#=}==}==}= @ @ /o//O/7w7/O/7w77w7'G' @ -@?c??m??i??I??I??V??z??B??L??t??`/?p'?X'?x'?H+?p?H+?H3?P-?p=?p?H3?H3?@5=@"9@ ?P5?@>*@ @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ 5@-?S??C??E??e??i??a??F??R??d??T??h/?h?X'?d/?x?h+?h+?x'?H3?H3?H3?D7?p=?P='@6%@ ?@5'@&:@ @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ -@?s??c??C??m??y??I??V??|??D??t?/@3?H;?h+?D7?t??d/?d/?X'?x'?h?D/?D7?h+?X;?P--@4?P3/@.*@ @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7W77w77W7'G' @ =@#?O??{??C??e??i??I??Z??B??x?H;?@'?h+?D7?T/?d/?d??d/?d??T/?X'?h+?h+?H3?P-?P5-@4+@&+@:*@ @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ #@#?O??W??C??m??E??Q??J??\??D/?@''@!?H3?h+?d/?L??t??T??T??X'?D7?p?h+?P=?p-?p-@<=@$#@:2@ @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77w77W77W7'g''g';{; @ "@2-@5@-%@%9@9)@)1@!>@>@6@2*@$*@8:@d&@,6@<6@"6@"6@"6@<&@4&@,&@4&@4:@d&@4&@4<@<@2@($@ @ ,L,!a!-m-=]==]=-m-=]= @ @ 7W77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (h((h( @ (H(8x8 @ 0p0$D$ @ ` 8x8 ` ` (h(0p0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0p0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''G''G';[; ` 8X8 ` @ 0p00p0 @ 0p00p0 @ ` (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;=]=!a!.N.&F&:z:6V6&f&:Z:6V6&f&:Z:&f&&f&:Z::Z:&f&:Z:*j*&f&:Z:*j*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%e%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.xpm.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/ImageMagick.app/ImageMagick0000755000175000001440000000011613214346535022752 0ustar multixusers#!/bin/sh APP=display if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/ImageMagick.app/Resources/0000755000175000001440000000000013214346535022642 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/ImageMagick.app/Resources/Info-gnustep.plist0000644000175000001440000000133013214346535026272 0ustar multixusers{ NSExecutable = "ImageMagick"; NSIcon = "display.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "gif" ); NSIcon = "FileIcon_.gif.tiff"; }, { NSUnixExtensions = ( "jpeg", "jpg" ); NSIcon = "FileIcon_.jpg.tiff"; }, { NSUnixExtensions = ( "png" ); NSIcon = "FileIcon_.png.tiff"; }, { NSUnixExtensions = ( "tga" ); NSIcon = "FileIcon_.tga.tiff"; }, { NSUnixExtensions = ( "tiff", "tif" ); NSIcon = "FileIcon_.tiff.tiff"; }, { NSUnixExtensions = ( "xcf" ); NSIcon = "FileIcon_.xcf.tiff"; }, { NSUnixExtensions = ( "xpm" ); NSIcon = "FileIcon_.xpm.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/ImageMagick.app/display.tiff0000644000175000001440000002244713214346535023220 0ustar multixusersMM*$imAmAUmAYmAuUuumAmAumA}QuUuuu}Q}Qiiiyi}Q}QmA}QmAmA}Qii}Q}Q}QmA}Q}QiymAii}Q}Q}QmAmAuuumAmAmAmA}QmAmA}QU}Qu}Q}QmAimA}Q}Qyyi}Q}Q}Q}Q}Qiyy}Qi}Qi}Qiy}QiyiUmA}QiiymAmA}Q}QmA}QmA}Q}QmAmA}Q}QmAiii}Q}Qyi}Q}Q}QmA}Qiiiyii}Q}QmAmAi}Q}Qi}QymA}Q}QU}Q}QmAimA}Q}QmAi}Q}Q}Q}Q}QimAi}QUUi,i,UUmAimAy}Q}Qi}Q}Q}QimAmAmAmAi}Q}QiimAmAU}Q}Q}Q}Q}QimA}Q}QmAi}Qii}QiUa484444,(,($U}Qiiii}Qyi}Q}Q}Q}Qi}Qyyi}QmA}Q}Q}Qiyiiyi}Q}Qi}Qiiia444,($04$044,(U}Qiiy}Q}QUimAiiiiyii}Qii}QEiiiiiyiiy}Q}Q$4,($$044444$0,(,(,(Yiiyyi}Q}Qi}QyEEEEiiEiyyy}Q}Qii}QiEEE$4,(,($4,(44$0$04$04,(,(4i,iiyyii}Qi}QyEEymA}QiyiiyUyiiiyEEY44a4UYa4$,(4$044$044,(,(Uiyiy}Qiiiyyyyii}QyyyiiyiyyEMQi,($mAEUMQEEmAua484444,(,(,(,(mAiyEyyy}QyyyymAiyiyiyiyiyUMQEi,mAE]Iuuu]IUEmAa4$,(4$04,(,(,($EEUEyEyyiEy}Qi}QyyiyyiyEMQMQ}Q$0i,EeuuuuuuEEU$44$0$0,(,(4}QEyEEEEyEEEiiyyyEEMQEUMQuMQ8mAMQueeueuu]Iyui,$,(444$0,(44a4EyiyEEEEUEyUyEEEEEEEMQe}Q8mAMQueuueu]IMQiuYa4,(4$0$0$04$04imA}QiiiiEEEUMQUEiEEEiEUia4$}Q]IuueeueMQUEimAYi,844$0$0$0$04i,YmAmAumAiiEiiUEEUEEUUUU}Qa4E]IeeeeueuMQMQEE}QY$,(,(44$04$0$i,YYYuimAiuUmAUMQuEuEuEeYa4i]I]IeeeeMQUUEEimAY8,(44$0$0$08a4a4i,YUUumAUUuUmAEUEuEeii,8ii}Qy]IMQUUUUuuYi,a48,(444488$a4YUYmAuYi,8Yi,i,EUEuEu888YYi,iUU8a4Ua484$$,(,(,(4444,(8$$$i,YYYY8$a4i,i,EuEEE}Q84U$08uMQa4a4uu$0$8YU$4,(,(4$04$0,(888$i,i,i,$88$$i,i,iiYU}QmA$0Y}Q}QmAUEMQa4UEEmAY}QEmAa4,(,(,(44$0$0,($8$$8a4$8a488$8Ya4a4i,Y4$0YMQMQEUEMQu}QUUMQMQMQEu$,(4,(488$Y8$$$a4888$08$888$$0$0a4E]I]IMQ]IUyuu]Iu]IEiU$8,(,(,($$$$$$88888$0$E]I]IMQ]IMQmAEUu]IMQEUY8,(88,(,($i,i,YYuuYU8$088$0$0$0$0EUMQE]IMQ}Qu]IUMQU}QY88,(,(,(8$a4$i,YU88$$04$0$0UEU}QMQia4YMQ]IMQiuYa4,(8,($$8$$88,(4$0444$0a4mAEUmA8$0a4EUimAYa4$,(8,(,(,(,(,(88844444$08uUUEYuuuu}QuYi,$88$,(,(88888888,($044$04$0$UmAUmAua4a4a4}Q}QmAU8848,(,(8888888,(,(,(444,(4,(4$0Y}QEEuuYu}QimAa4a48,(,(88$8$8$,(,(4,($04$0YEyuUuumAUY8$4,(,(,(,(,(,(,(88$8$84$8888$$,(8$04$0UUeMQ}QmAYi,88,(,(,(,(,(,($$8$$$8,(,(,(88$$04$0$0}Qy}QuY8888444,(4,(4,(,(888$8$8,(,(,($a4UY84,(4$0$0$0$0a48888844,(,(,(,(44,(888$8$$08$$$$$YY$44$0$0$0$0$08$08484,(,(,(,(4,(44,(88$$$$Y$uUUYYa4$0444$0$0$0$088$0488,(4$04444$04888$8$$a4uUUU$Ua4a484444$0$0Yi,888$$$8,(444444488a4888$a4$Ui,$UU$i,$8444$0$0$0$08uUYa4$$$a4a4$4444$04448$$$$a4$$U$$a4a4a4$,(,(4$0$0$04$uUuYYi,YYUY$444$0$044,(,(,(,(88,($4$08,(4,(4$0$04$0$0$048a4umAmAuUUumAuYa44444$04,(8$44$0444$0444,(44444a4mAEii}Q}QmAiiii}Qi,888,(44$04,(4,(,($84$0$04,(4$04,(4,(4$YmAEMQEMQEEEEEEE}QUa488a4,(,(,(,(4,($$a48$84$04$0,(44,(44,(,(a4mAUEMQMQMQUUMQMQuUUEiY8a4$a48,(44,(444,(8a4$$$0$0,(44,(44444}QEiuMQMQuuMQMQuUuUEiua4$8$444444,(8$,(,(,(4,(,(48a4EMQ]IuuuUuUuUuEuiEU8a4$8,(,(,(4$0,(88$8,(,(44,($uEUuuu]IuMQUuuMQuUEii,a4a488,(,(4,(8,(4,(a4888$,(,(44448$a4}QuuUuuuMQu]IMQuMQMQuEii,8a4$$4,($$8,(44,(i,a4$8,($0$044$i,UEu]IMQuuMQuuuuuMQuEEiYa4$88$a4a4a4a4a4$8,(4$000$   $$*$1?$Rdisplay.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/LibreOffice.app/0000755000175000001440000000000013214346535020703 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/LibreOffice.app/FileIcon_.abw.tiff0000644000175000001440000002245313214346535024162 0ustar multixusersMM*$GGGGGGcccccccccUUUUUUcccUUUUUU888888UUUUUUUUUGGGGGGUUUGGGGGGUUUUUUUUUUUU888UUUUUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<<Y=rn|B R@@@4 sssSSSoooOOO'''Ll,A2ZrfINz&vB:GGG{{{;;;[[[+++KKK???___RbZfAv>*F*F*F*F2FfvAy!q)QY."{{{;;;[[[kkk+++KKK???___bbʆ >i)>I>I>I>I >I>I^  a"{{{;;;[[[kkk+++KKK ???___2Z~55uu55uu55uu55"Z"{{{;;;kkk+++KKK sss???___ooo"J*F>)R*b;;;;;;kkkKKK ___RRRZ55uu55uu55uu55:[[[kkkKKK 333___///bRZ55uu55uu55uu55B:z[[[kkkKKK 333___///R*R*F~)2*:Šz[[[kkk+++KKK sss333SSS???___ooo///OOORbr*F>)uu55uu55uu55uu:kkk+++KKK sss333SSS???___ooo///OOObZi"J kkk+++KKK sss333SSS???___ooo///OOObZR:&YQ&Jkkk+++ sssSSSccc???oooOOOwwwb)B:z+++ sssSSSoooOOO"ZRRi55uu55uu55uu55B:z sssSSS###oooOOO777ZbZ~55RJ:" :KKK sss333SSS###ooo///OOO777"Zr*F>)55uu55u5JF z}}} sss333SSSccc###CCCooo///OOOwww777WWWZbr*F>)uu55u5mmmsss333SSSccc###CCCooo///OOOwww777WWWZbr*F>)uu55uu55uu55uuRZsss333ccc###CCC///www777WWW2bJ*F AQ Q yAQAyQAyQAQAQAyQAyQAQyQQeRZR333cccCCC}}}///wwwWWWgggb r*FNr.~iA9QAyQAyQAQiAyQAyQAQ~vf6*&333cccCCCwwwWWW"rZR Zzv!u5555u!&"SSScccCCC===OOOwwwWWW'''Ҋ ZɡN9!555uu55u! ~Nў&"SSSccc###CCC===www777WWW'''b" rF־NʖFY!)uu55uu1)A!JږzZf"SSSccc###CCC}}}===]]]www777WWWggg'''GGG JJ*F.v,tnay5u55uu ^,|ltfccc###CCC}}}===]]]www777WWWggg'''GGGBJV&.Vf66.v!v!*"ccc###}}}===]]]777ggg'''GGG\r2j2*2*jr|RB2jB2jB2jB2jr22Z2Zbccc###}}}]]]mmm777gggGGG{{{b"*F ZF jF zJJzzbRRʆ:&jj&**jŠz###}}}]]]gggGGG"brF&62:Қ6v||rr :2RRZR2jBb*###CCC}}}]]]---WWWgggGGG;;;Bƪ6BR "Z|jZzF|B"Ξ<<2:CCC}}}===]]]---ggg'''GGG;;;j: ZJZ¢ 2j\r "rܢBJB2:B|b2BrjFCCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[&bR"ZR Z *ʆ" 2r*F*Fr*FJRʆr Frz }}}===]]]mmm---MMMggg'''GGG{{{;;;[[[ M]e5EeUeU%Ee%E%E%9y9yY9}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$RFileIcon_.pdb.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/LibreOffice.app/FileIcon_.txt.tiff0000644000175000001440000002245513214346535024232 0ustar multixusersMM*$UUUUUUUUUUUUGGGGGGUUUUUUUUUGGGGGGGGGGGGcccUUUGGGGGGUUUUUU888cccUUUUUUUUUUUUUUUUUUUUUUUU888GGGGGGUUUUUU888UUUUUUcccGGG888UUUUUUGGG888UUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<<|2Iq@{kH'?dN:؂1S6> lC"1|8a U@{P P  98Ob2IsY3:n\t&L[V%- Cf08^P F@ 5ȇ3@ |Ѓ$es|/^?)Lb|_pF6(8PINz>G1!@ ^pZMp@+@ rPL!v"AX;ί}81DT5-N~ 3!;~II+:|Te{6n'\Oazx!pg?xF{O H bc`NؾǺ$O }erP!f2%a Zxߎg#?xD>q |G pg9/ßo퉿ғ1wx-@ʁP@΁xL2NNS0?fp|kC4hoH#'f'<h}(̻|B_7wKn 4r @ Ue 2h&Q)8BBBBt )-"dF*""."u笍W(bL=% a ]Rؐla!,=/rPR.R-5P-R222-IHʲtH-.;Lr@'a%)^RK ruBBt/T@䊇JJH|2Iq@{kH'?dN:؂1S6> lC"1|8a U@{P P  98Ob2IsY3:n\t&L[V%- Cf08^P F@ 5ȇ3@ |Ѓ$es|/^?)Lb|_pF6(8PINz>G1!@ ^pZMp@+@ rPL!v"AX;ί}81DT5-N~ 3!;~II+:|Te{6n'\Oazx!pg?xF{O H bc`NؾǺ$O }erP!f2%a Zxߎg#?xD>q |G pg9/ßo퉿ғ1wx-@ʁP@΁xL2NNS0?fp|kC4hoH#'f'<h}(̻|B_7wKn 4r @ Ue 2h&Q)8BBBBt )-"dF*""."u笍W(bL=% a ]Rؐla!,=/rPR.R-5P-R222-IHʲtH-.;Lr@'a%)^RK ruBBt/T@䊇JJHY=rn|B R@@@4 sssSSSoooOOO'''Ll,A2ZrfINz&vB:GGG{{{;;;[[[+++KKK???___RbZfAv>*F*F*F*F2FfvAy!q)QY."{{{;;;[[[kkk+++KKK???___bbʆ >i)>I>I>I>I >I>I^  a"{{{;;;[[[kkk+++KKK ???___2Z~55uu55uu55uu55"Z"{{{;;;kkk+++KKK sss???___ooo"J*F>)R*b;;;;;;kkkKKK ___RRRZ55uu55uu55uu55:[[[kkkKKK 333___///bRZ55uu55uu55uu55B:z[[[kkkKKK 333___///R*R*F~)2*:Šz[[[kkk+++KKK sss333SSS???___ooo///OOORbr*F>)uu55uu55uu55uu:kkk+++KKK sss333SSS???___ooo///OOObZi"J kkk+++KKK sss333SSS???___ooo///OOObZR:&YQ&Jkkk+++ sssSSSccc???oooOOOwwwb)B:z+++ sssSSSoooOOO"ZRRi55uu55uu55uu55B:z sssSSS###oooOOO777ZbZ~55RJ:" :KKK sss333SSS###ooo///OOO777"Zr*F>)55uu55u5JF z}}} sss333SSSccc###CCCooo///OOOwww777WWWZbr*F>)uu55u5mmmsss333SSSccc###CCCooo///OOOwww777WWWZbr*F>)uu55uu55uu55uuRZsss333ccc###CCC///www777WWW2bJ*F AQ Q yAQAyQAyQAQAQAyQAyQAQyQQeRZR333cccCCC}}}///wwwWWWgggb r*FNr.~iA9QAyQAyQAQiAyQAyQAQ~vf6*&333cccCCCwwwWWW"rZR Zzv!u5555u!&"SSScccCCC===OOOwwwWWW'''Ҋ ZɡN9!555uu55u! ~Nў&"SSSccc###CCC===www777WWW'''b" rF־NʖFY!)uu55uu1)A!JږzZf"SSSccc###CCC}}}===]]]www777WWWggg'''GGG JJ*F.v,tnay5u55uu ^,|ltfccc###CCC}}}===]]]www777WWWggg'''GGGBJV&.Vf66.v!v!*"ccc###}}}===]]]777ggg'''GGG\r2j2*2*jr|RB2jB2jB2jB2jr22Z2Zbccc###}}}]]]mmm777gggGGG{{{b"*F ZF jF zJJzzbRRʆ:&jj&**jŠz###}}}]]]gggGGG"brF&62:Қ6v||rr :2RRZR2jBb*###CCC}}}]]]---WWWgggGGG;;;Bƪ6BR "Z|jZzF|B"Ξ<<2:CCC}}}===]]]---ggg'''GGG;;;j: ZJZ¢ 2j\r "rܢBJB2:B|b2BrjFCCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[&bR"ZR Z *ʆ" 2r*F*Fr*FJRʆr Frz }}}===]]]mmm---MMMggg'''GGG{{{;;;[[[ M]e5EeUeU%Ee%E%E%9y9yY9}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$RFileIcon_.pdb.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/OpenOffice.app/FileIcon_.txt.tiff0000644000175000001440000002245513214346535024076 0ustar multixusersMM*$UUUUUUUUUUUUGGGGGGUUUUUUUUUGGGGGGGGGGGGcccUUUGGGGGGUUUUUU888cccUUUUUUUUUUUUUUUUUUUUUUUU888GGGGGGUUUUUU888UUUUUUcccGGG888UUUUUUGGG888UUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<<m4eMx;^2LdLv4e4e4e7g2Ld P~e4eEqP~ 4Rz4Rz VV  7&+,.6=EMTdjn{~INQ28:uy|+Fi Adt};BE.46.46j>j&Cg @*#  %+1 H2P7`SySy7`2P H1*$  !',16 U'?*Go6[7c7e4e7e7c6[*Go'? T61,&! #'+.135665431.*'#  !"###"!    00$$Rgworkspace-1.1.0/Apps_wrappers/OpenOffice.app/Resources/0000755000175000001440000000000013214346535022521 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/OpenOffice.app/Resources/Info-gnustep.plist0000644000175000001440000000064613214346535026162 0ustar multixusers{ NSExecutable = "OpenOffice"; NSIcon = "OpenOffice.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "sdw", "sxw", "stw", "doc", "rtf", "odt" ); NSIcon = "FileIcon_.abw.tiff"; }, { NSUnixExtensions = ( "txt", "text" ); NSIcon = "FileIcon_.txt.tiff"; }, { NSUnixExtensions = ( "html", "htm", "xhtml" ); NSIcon = "FileIcon_.html.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/README0000644000175000001440000000063213214346535016634 0ustar multixusersXMMS and Xine App Wrappers --------------------------- Copy xmms.app and xine.app to an Apps directory (e.g. GNUstep/Local/Apps). NOTE: The Workspace will prefer xine.app also for mp3 files and such because of the alphabetical order. So, you might want to set XMMS as default by selecting a mp3 file in GWorkspace, opening the Tools Inspector, clicking the XMMS icon and then clicking "Set Default". gworkspace-1.1.0/Apps_wrappers/abiword.app/0000755000175000001440000000000013214346535020161 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/abiword.app/FileIcon_.abw.tiff0000644000175000001440000002245313214346535023440 0ustar multixusersMM*$GGGGGGcccccccccUUUUUUcccUUUUUU888888UUUUUUUUUGGGGGGUUUGGGGGGUUUUUUUUUUUU888UUUUUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<<Y=rn|B R@@@4 sssSSSoooOOO'''Ll,A2ZrfINz&vB:GGG{{{;;;[[[+++KKK???___RbZfAv>*F*F*F*F2FfvAy!q)QY."{{{;;;[[[kkk+++KKK???___bbʆ >i)>I>I>I>I >I>I^  a"{{{;;;[[[kkk+++KKK ???___2Z~55uu55uu55uu55"Z"{{{;;;kkk+++KKK sss???___ooo"J*F>)R*b;;;;;;kkkKKK ___RRRZ55uu55uu55uu55:[[[kkkKKK 333___///bRZ55uu55uu55uu55B:z[[[kkkKKK 333___///R*R*F~)2*:Šz[[[kkk+++KKK sss333SSS???___ooo///OOORbr*F>)uu55uu55uu55uu:kkk+++KKK sss333SSS???___ooo///OOObZi"J kkk+++KKK sss333SSS???___ooo///OOObZR:&YQ&Jkkk+++ sssSSSccc???oooOOOwwwb)B:z+++ sssSSSoooOOO"ZRRi55uu55uu55uu55B:z sssSSS###oooOOO777ZbZ~55RJ:" :KKK sss333SSS###ooo///OOO777"Zr*F>)55uu55u5JF z}}} sss333SSSccc###CCCooo///OOOwww777WWWZbr*F>)uu55u5mmmsss333SSSccc###CCCooo///OOOwww777WWWZbr*F>)uu55uu55uu55uuRZsss333ccc###CCC///www777WWW2bJ*F AQ Q yAQAyQAyQAQAQAyQAyQAQyQQeRZR333cccCCC}}}///wwwWWWgggb r*FNr.~iA9QAyQAyQAQiAyQAyQAQ~vf6*&333cccCCCwwwWWW"rZR Zzv!u5555u!&"SSScccCCC===OOOwwwWWW'''Ҋ ZɡN9!555uu55u! ~Nў&"SSSccc###CCC===www777WWW'''b" rF־NʖFY!)uu55uu1)A!JږzZf"SSSccc###CCC}}}===]]]www777WWWggg'''GGG JJ*F.v,tnay5u55uu ^,|ltfccc###CCC}}}===]]]www777WWWggg'''GGGBJV&.Vf66.v!v!*"ccc###}}}===]]]777ggg'''GGG\r2j2*2*jr|RB2jB2jB2jB2jr22Z2Zbccc###}}}]]]mmm777gggGGG{{{b"*F ZF jF zJJzzbRRʆ:&jj&**jŠz###}}}]]]gggGGG"brF&62:Қ6v||rr :2RRZR2jBb*###CCC}}}]]]---WWWgggGGG;;;Bƪ6BR "Z|jZzF|B"Ξ<<2:CCC}}}===]]]---ggg'''GGG;;;j: ZJZ¢ 2j\r "rܢBJB2:B|b2BrjFCCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[&bR"ZR Z *ʆ" 2r*F*Fr*FJRʆr Frz }}}===]]]mmm---MMMggg'''GGG{{{;;;[[[ M]e5EeUeU%Ee%E%E%9y9yY9}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$RFileIcon_.pdb.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/abiword.app/FileIcon_.txt.tiff0000644000175000001440000002245513214346535023510 0ustar multixusersMM*$UUUUUUUUUUUUGGGGGGUUUUUUUUUGGGGGGGGGGGGcccUUUGGGGGGUUUUUU888cccUUUUUUUUUUUUUUUUUUUUUUUU888GGGGGGUUUUUU888UUUUUUcccGGG888UUUUUUGGG888UUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<< gworkspace-1.1.0/Apps_wrappers/aplay.app/FileIcon_.aiff.tiff0000644000175000001440000002245513214346535023255 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??*J* @ *J*???? @ *J*???? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8X8*j*8x8 @ %e%??8x8 @ %e%??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ *j*??*j*.N.'G'??5U5.N.'G'??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *J*??*j*.N.'G'??5U5.N&'G'??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *J*??*j* @ %e%?? @ @ %e%?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N& @ .N.?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N&*j*??1q1*J*'G'?? @ *J*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o//O/7w7/O'7w7/G*/G.'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O/7w77w77w77w7/G*=u",l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7/W%/g)7w77W;/{:=u",l,7g+7g='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O//g1/{:.v*;{;/G*=u<,L,7G%7{:%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O//O'/W%7g=7w7/g17{*4d03c%/G*=U",l,7G%7[*<\8'G''G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O//w3/G*=M&%e%/g!/{:4d0+s1/G*=u<,L,7G%/G*:j$-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w77g+/G*1A46V&/G*/G*4d0+s1/G*3]"<|,7G./G*:J8%y!7{>;[;;{;+k+;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//w;/w=7w7/W-/G*1A46V&/G*/G*4d0+s1/G*/G**r4/{:/G:*J$5E>/G*1a"+K#;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//o/7g=/G*%E>/g!/G*1A46V&/G*/G*4d0'k./{:/G*,L(7[:/G*:J8%E>/G*>N4>^>+k++k++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/G&/G*6F$'k./G*1A4)Q:/G*7{*4d07{*#m2/G*,L(7[:/{:&z$#]6/G*>N4&f&7{>7[>3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O//g!/W-/O//G./G*&z$3C&/G*+C25e:/G*/G*.v4/{:1A,/G*,L(7[:/G*#]"+C2/G*9q,.N&7{&'K**J"+K#+K-+K#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//W=7{*;S*%E>/G:/G*%Y<7[*/{:/G*)a<;s2=u<9q,7k*1A,/G*,L(7[:/G*3]"=u"/{:7[*&F*/G*/G*4t8;K!/{:#]>=}=3s33S33S3#c#3S3#c##c##C# @ @ ?_?/o/?_?/O//o/7w7/g)/G*7{*1a"/G*#m"/G*/G*)q,/G*-U<;S*-U"5y"'k*1A,/G*>N4/{:/G*#m"=u"/G*7k*$d0/G*/G*2b87{*/{:3]"9i63S3#c#3S3#c##c##C##c#=}= @ @ /o//o//O//G*/G*/G*/G*#]*/{:#M"/G*!^4/G*/G*!^4/G*/G*5y"=U"/{:/G*!^4/G*#M"/G*!^43]"=u"/G*7[*$d0/G*7[*1~4/G*-e<;S27[*/G*/G*/{:/G*/G*#C##C##C# @ @ /o//o//o//W=*r8*r8*r80P #m"/G*#m">v4/G*/G*!^4/G*/{::J8#]2/G*7[*0P +c:/G*/G*!^47k*;s2/G*7k*!n4/G*/G*3}"/{::J8,l,*r8*r8*r8*r8*r8*r8 @ =}==}= @ @ /O//o//O/7w79y99Y99Y99Y97G9/{:9q,.v/G*/G*!^4/G*/G*1~47[*/G*;S2>v4/G*'K2(H !A!#c#1q1!A!>~>>~>>~>>~>#C#=}= @ @ /O//O//O//O//O/7w77w77W77W;#m&*J$*J"/G*#M"*r8/G*/G*:j$;S*/G*7[* @ 7{>/G*/G*4d0/G*/G*$d07k*/G*=U"&z$/G*;s20p0-m-3S3#c##c##C##C##C##C#=}==}= @ @ /O/7w77w77w77w77w77W77W7'g'+k+:z*1q1/G*=u<2R,7[*'K2 @ +c&/G*7[* ` 7{>/G*/G*(H /{:/G*4d07[*/G*=U<2r,7[*+C2(H(#c##c##c##C##C##C#=}==}==}==]= @ @ 7w7/O//O/7w77w77W77W77W7'g'7W7'g''G'/G*5y<,L,7[&'K20p07{>/G*5y< ` 7[>/G*'s2(h /G*/G*4d07{:/G*-U<,L,'K6&z$(h03S3#c##C##C##C#=}=#C#=}==}==]= @ @ 7w77w77w77w77W77W7'g''g'7W7'G''G''G''G=(H "B"7{&'K20p0'[-/G*!n4<|,7{>/G*1~48x8/G*/G*$d0+S./{:6F$4t83S3,L,>^>#c##C##C#=}=#C#=}==}==]==]==]= @ @ 7w7/O/7w77W77W77W77W7'g''g''g''G''G''G'%E%3S37{&#M"(H(;[-/G*!n4&f&'[>/{:1A4&F*/G*=U< @ 3c!/G*2b8.N.#c##c##c##C##C##C##C#=}==}==}==]==]=-m- @ @ 7w77W77W77W7'g''g''g'7W7'G''G''G';{;;{;;{;;{;'{9*r4,L,;[-/G*>N4&f&'[9/G*1A4:z*7[&5E<,L,+s%7[*2B8!A!#c##c##C##c#=}==}==}=#C#=]==]==]=-m-=]= @ @ 7w77w77w7'g'7W77W7'g''g''G''g';{;'G';{;;{;;[;;[;>^>%E%;[-/G*"\(&f&;k-/G*1~4*j*'k>=U<<\<3S3)i) ` 1Q1#c##C##c#=}=#C##C#=}==}==]==]=-m-=]=-m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;[;;{;;[;+k++k+;[-/G*(H 9Y9+K-/G*1A4:Z:+K-.V2,l,3S3#c#3S3#c##C##c##C#=}=#C#=}==]==]==]=-m-=]=-m--m- @ @ 7w7'g'7W7'g'7W7'g''G''G';{;'G';{;;{;;{;;[;;[;;[;+k+;[;+K#5U1 @ =}=;k-/{:,L(*j*3S39y99Y93S3#c##c##C##C##C##C#=}==}==}==]==}=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+3S3%e%3s3+K-/G*8X09y93S33S3#c##c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M- @ @ 7W7'g'7W7'g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3s3+K+3s3+K#9y9 @ -M-3S3#c#3S3#c##C##c#=}=#C#=}=#C#=}==}==]==]=-m-=]=-m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33S33S33S3#c#3S3#c##c##C##c##C##C#=}==}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++K++K++K++K+3s33s33s33S33s3#c#3S3#c##c##c##C##C##C#=}=#C#=}==]==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;{;;[;;[;;[;+k++k++k++K++k++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-m--m--M--M-5u55u5-M- @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.aiff.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/aplay.app/FileIcon_.au.tiff0000644000175000001440000002245313214346535022753 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ ,l,5U5,l, @ ,l,%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *j*??*j* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*J* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *j*??*j* @ *J*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N. @ .N.?? @ *j*??6V6 @ .N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.*j*??1q1*J*'G'?? @ *j*??3S3*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ @ 3S3??;{;5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W71J/)f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W71J/:L),l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7%I-)n='G''g')J?:t),l,3S3-U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/)^=1r/2R2+k+)J?:t),l,%I-1j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;9Q--u=7w7)^=1J/ @ 9I51J/:L),L,9I51r7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/#C#)J?&R!%E%)N=1r/ @ !n9)J/:t),l,9I5)J?8p4-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//o//O/7w7#}#)J/,X*:z:1r/)J? @ !n91J/&\54T41f#)J/(P8.N>1f=+K+;[;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+5E=/O/5y-1J/,X*:Z:)J?1r/ @ !n9)J?)J?$D41j;1J/8p4.V.1J/^!)N=)J?,X*:Z:)J/1r/ @0!F51r/)J/ @0!J+)J/(P$6V6)J/4h">^>+K++K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7)F3)J/8p4!F51J/,X**R:1J/1r/ @01J'&|9)J? @01r;1J/8p46j!)J?$H<&f&1V-1f=3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O/)n=5E=7w7)F31J/8p4.r9)J?6\-:b.)J?)J/$H<1j',x")J? @ !J+)J?&l%.R51J/R#"B"=m=%E5#C#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/-u=)J/>b=>^!)J/1J/"d.!r;1J/)J?R#:t)b=*L12L6!R;B31J/1R'4X"1r/)J?&\5)J/(P$,l,8h$(P8(P8(P8(P80`8 @ #C#=}= @ @ /O//o//O/7w79y99y99Y99Y99Q51r/b+$H<)J?1J/8p4.r%)J/!R7 ` 1f=)J/1J/,X21r/)J?,D*1R'1J/>b=$H<1r/>b+ @ !A!#c#1q1!A!>~>!A!>~>>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+&R!8p4*J*)J?:L98H$1r/)J?(P$.r%1J/1r7 ` 1V-)J?1r/ @0)J?1J/ @0!r;)J?*t14D,1J/>B30p0-m-3S3#c##c##C##C##C##C##}#=}= @ @ /O/7w7/O/7w77w77W77W77W77W7+k+:z:1Q11J/:t)4T41J'>b+ @ .r%)J?!R7 ` 1v-)J?1J/ @ 1r/)J? @ 1J'1J/:t)4T41r'.|=(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O/7w7/O/7w77w77W77w7'g'7W7'g''g''G')J?2T>,t ` 1V-1J/>B3 @ )J?1J/ @ 1J')J?*t1,t<>Z-8H4(h(3S3#C3#c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77w77W77W7'g'7W7'g''g''G''G'5U- @ "B"1Z+!b+0p05e-)J?4h""|"1V-)J?,X*0p01r/)J? @ >F91J/8p4,L,#c#,l,>^>#C##c##C##C#=}==}==}==]==]==]= @ @ 7w7/O/7w77w77W77W7'g'7W7'g''G''g''G';{;%E%#c#1Z+:l)0p05E=1J/4h"&f&1V-1J/,X**J*)J?*t1 @ >V))J?0`(.N.#c#3S3#c##c##C#=}=#C#=}=#}#=]==}==]=-m- @ @ 7w77W77W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;9Q5$X$,l,5e51J/4h"&f&)A%)J?,X2*J*!Z32d>,t<9i%!r;0`81Q1#C##c##C##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77w7'g'7W7'g''g''g''G''G''G';{;'G';{;;{;+k+>^>%E%%E5)J?0`(&F&5e-1J/,X**j*!F5:l1,l,3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g'7W7'g''g''G''G';{;;{;;{;;{;;[;;[;;{;+k++k+5E=1J/ @ 9Y95e51J/,X*:Z:5U5"|",l,3S33S3#C##c##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g''g''g''G''G';{;'G''G';{;;{;;[;;[;;[;;[;+k+3S3!~! @ =}=5e5)J? @0*j*3S3%E%9y93S3#c##c##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+#c#%e%3S3%e%)J? @ 9y93S3#c#3S3#c##C##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s39y9 @ 5u53S33S3#c##c##c##c##C##C#=}==}==}==}==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;;{;'G';[;;[;;[;+k++k++k++k++K++K++K+3s3+K+3S33s33S33S33S3#c##c##c##C##C##C#=}==}=#}#=}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''g';{;'G''G';{;;[;;{;+k+;[;+k+;[;+k++k++K++K++K+3s33s33s33S33S33S3#c#3S3#c##c##C##C##C##C#=}==}==]==}=-m-=]=-m--m--M--M--M--M-5u5 @ @ 'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++K++K++K+3s33s33s33s33S33S3#c##c#3S3#c##C##C##C#=}==}==}==}==}==]==]=-m-=]=-m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.au.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/aplay.app/FileIcon_.wav.tiff0000644000175000001440000002245513214346535023145 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.%e% @ @ 5U56V6 @ ,l,5U5,l, @ .N.%e%5U5,l, @ .N.%e% @ @ ,l,5U5,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.??,l, @ ??5u5 @ .N.??8x81Q1??#c##c#??8x8.N.??.N. @ 1q1??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8??5U5*j*???? @ %e%#c# @ 5U55U5 @ :Z:??*J* @ ??#c# @ #c#5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 'G'#c#1q11q1'G',l,#c#1q1 @ *j*;{;??5U5??*j* @ 5U5?? @ ??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??3S3*J*5U5)I9??*j* @ ??#c# @ 8x8??*J* @ *j*??5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56V6 @ .N.????8X8.N.????8X8 @ ??3S3*J*5U5??*j* @ 8X8??'G'#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ 8X8??#c# @ 8x8??#c# @ @ 5U5????1q1??*j* @ @ 1q1??6V6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W7*J/6f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W7*J/,L9,l,7W7'g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7)I->n='G''g':J?,L),L,3S35U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/>^=*J/2R2+k+:J?,t),l,)I5:j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;1Q-5u=7w7>^=*J/ @0)I9*J/,L),L,)I-*J7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/=}=:J?2R!%E%.N=*r7 @0.n9:J?,t),l,)I5*J/0P$-m=;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w7#C3*J/8X*:z::J?*J/ @0>n9*J/<\54t<6f#:J?0P$.N>6V=+K+;{;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+%E=7w7%E=*J/8X*:Z:*J/*J/ @0.n9:J?*J/$D4:j+*J/0P$6V.*J/,L*3s3;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/%E=*J/>^!.N=:J?8X*:Z::J?*J/ @0&F5:J?*J/ @0:j+*J/0P$6V.:J?(h">^>3s3+K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7&F+:J?(H4&F5*J/8X*2R:*J/*J/ @0*J'"|9*J/ `0:J+*J/(H,:j1*J/(h"6V66V-6V-3s3+K++K+3s3+K+3s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//o//O/.N=%E=/O/&F+*J/(p,*J9:J?"|="b.:J?*J/(H<:J+$D*:J? @0:J+*J/^>:j7*J/4d.2R;*J/:J?$d:2R3,t)$D&*r;8x2*J/ `(*r;:J?~=*J/*r7$d:*J/~!!A!>~!>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+*r10P$*J**J/,L9(H$*J/:J?0P$*J%*J/*r7 ` 6V-:J?*J/ @0:J?*J/ @ *R;*J/,t)$D,*J/2B30p0-m-3S3#c##c##c##C##C##C##}#=}= @ @ 7w7/O/7w77w77w77w77W77W7'g'+k+&F&1Q1:J?,L94T4*J'2b; @ *J%*J/*r7 @06v-:J?*J/ @ *J/:J? @0*J':J?,t)4T4*r'"B#(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O//O/7w7/O/7w77W77W77W77W7'g''g''G'*J/4d>,L,:j+2b;0p0.v-:J?4d> ` 6V=*J/2B3 @0*J/*J/ @ :J'*J/,t14t<:Z-(H$8X8#c##C##c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77W77W77W7'g''g''g''g''G''g'5U- @ <|"&Z+2R;0p0%e-*J/8h""B"6V-:J?8X*0p0:J?*J/ @0&F9*J/(p,,L,#c#,l,>^>#c##C##C##C#=}==}==}==]==]==]= @ @ /O/7w77w77w77W77W77W7'g'7W7'G''g';{;'G'9y93S3:Z+^>9y9%E5:J? `(&f&5U-*J/8X2:Z:6V5,L1<\<3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;{;;[;;[;+k++k+%E=*J/ @ 9Y9%e5*J/8X**j*5e5<|"<\<3S3#c#3S3#C##C##C##C##C#=}==}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g''G''g';{;'G';{;;{;;{;;[;;[;+k+;[;+k+3S3>~! @ =}=%e5:J? @0*j*3s3%E%9y9#c##c##c##C##c##C#=}==}=#}#=}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3S3%e%3S3%e5:J? @ 9y93S33S3#c#3S3#C##c##C##C#=}=#C#=}==}==}==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G';{;'G';{;;[;;{;;[;;[;+k++k++k++k++K+3s3+K+3s33s39y9 @ -M-#c#3S3#c##C##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##c##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++k++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##C##c#=}=#C#=}==}==}==}==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;[;;[;;[;;[;+k++k++k++K++K++K+3s3+K+3s33S33s33S33S3#c#3S3#c##C##C##C##C#=}==}==}==]==]==]==]=-m--m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.wav.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/aplay.app/FileIcon_GenericSound.tiff0000644000175000001440000000614413214346535024654 0ustar multixusersII*h  $h!B &l"F%j1;,Ә &J/n)R@ҠSg!^ϒ'or%˝h s*Ul2eUT!m5j֪]n7jܤiMw;_|t[7=c?r70#\r98g9xfڟmoZlsWZ]mem66n巍v;򹧋nzx奏~x~anFjq.&84e3̶?| m/r+֊7ܺm{>rp\ppNL}َ ﲨYf^9^u֥y-b:u< 'dhIUDG5s|;;a',rnk~ 21da Cc4cG,\EW pCP!N<d*BED!(@Wq"@9ခF$nA@|@0԰H`B0ю.?yn,H~ZWsHC-dWHC=') T  !q-dP3ED$PrֲN"NyP !1Hf(@DbLh~0' ,T_t9*=(AU'HA =,$ V0!p"Q$AЀx.-Q2T&p`dj ]XV,F *[y 5`k @"H 8< q+[` 5P\Xz}/2A { L/`=" A{fS*GP e{E`Y T 51` CY+1n \dqian%D349 pTxqzCV3臼#w3jԇ )@ >Ab2ޟA (0p '-j> ( @gB g#A)0;aD\; Z\aE# B60!H@AIMfr=l1H  z$`v$ YmjrL*} _3zJrR?7nUƈbP tmAţl(ZchYZ&p<$lt Ei5[]r_+zѳ7[z)>K@B@ x І! qlpp=*c˰5ڔ)bed:DD@7ҕݸ =>7oܭ r<Sm gh/ har3UP24)@{8*b!cgY5}<7u?U*An]BDcB+ lH QR4^0}6lAJP*9> z$8iHT^À+xC:Ku?a~]UhVj`B JkA0E(xCЅ&&A JHCQQq !gw~*={щG0p QLH`U8Dg$(bo"P@r(K^ bH * p :o7ws6wO{q_6#!'r!$&CF#N"d~:3c %W y r> N!FQ9ywo`.[hxFP\ P p)^rJ, ,,,)ɍZGEEEGGG{{{;;;kkkKKK 333___///muuwww>@@yJ, ,,,I W{{{;;;[[[kkkKKK 333___///OOOJ!Ύ}@@9J, ,,,IJd{{{;;;[[[kkk+++KKK sss333SSS???___ooo///OOOJ*::Jj @@nJ< Vf#JЄ^VK[[[kkk+++KKK sss333SSS???___ooo///kEJ*:Jj @@JJJЄVVJLkkk+++KKK sss333SSS???___ooo///OOOEonνJ*:Jj @@& JJ 0+JЄVnJ訂K+++ sssSSSccc???oooOOO J F5J*R:Jj @@*|J 0+JtJ訂6V6 sssSSSooon}E JJ JB=".Jj (\*DJ 0+Jl2JD:j{2BB]E5sssSSS###ooou}J=^Z*wJN*JJ, DrDJ 0JlqJJ2bbJj ((hNV333SSS###ooo///OOO]*rJJzJ1LL.DJ訂JlqJJ2PJj <SSSccc###CCCooo"ij ,yXJJXJJL,Qj jJ̹JX2lqJJ2PJj ؘ/*CCCooo///=PPPB|Yj |\JJXJJ0$YJr JJXJbJJ2XJj |\M0Єlllh0xPPPP///yyy9991Qj Ąt|J2bHJJ0$* Jr6-JJXJJD rJ jpppNJTvmJR+@JJ@@`JJL :MHTccc###CCC===www777WWW'''@ZreeMJh"vmJ8XppJJ@@`ƆyJ ^^^###CCC}}}===]]]www777WWWggg'''GGGZ\liJh"mJ8XJJJI6VJccc###CCC}}}===]]]www777WWWggg'''GGG{{{ёؤ,,,%% Jh"eJ8X*** iE*hccc###}}}===]]]777ggg'''GGG{{{;;;EEEJ`&&&J8X֖UQSSS)))QQQ###}}}]]]mmm777gggGGG{{{;;;[[[EuJYYYeeuJ8Xu||bccc###}}}]]]gggGGG;;;[[[kkkS~J 999ccc###CCC}}}]]]---WWWgggGGG;;;[[[kkk+++eee333%%JSSSccc###CCC}}}===]]]---ggg'''GGG;;;[[[kkk+++ sssccc###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++ sssSSS###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++KKK sssSSS###CCC}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$Rgeneric-sound.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/aplay.app/xsox.tiff0000644000175000001440000001275013214346535021520 0ustar multixusersMM* $h!B &lتUVضdɶ ͛m֬mӦm2eۄ ƌ6bĶaö _m}lc[.:uѮݎVv4kI SgGZ;UQҎ v)DE(ThG|;rڑ#ǎ,YvdȰ+]]RJlWD$'ή1vE+Rnj7~IL6}Y̝7E,]|U׬]~Mlݶ}]ݷC=vSϜ=׮p/ĂӡJ R$K1A ~~  >D8^ƒv"7,x.ؠ#ЁMtE7=G? 20#28L2432<%0/-2 3 lBA L\0A,! L3w0 s/sA+,A j vbw9.u3wv?14%JFap%l@/̌t0! ̭|,rRp jl0  H C Jx܈K$` 6)A8G$pa1fءv&`ZX8a :&h p@YI2KDf@xkha@R!"9/ԝح=0 <Њ L.: pR Z(CG$ /蒲_WhJ+_w}vCkcZdBl]vK#m`x5|0AK>{NcnDd4(IFH.Ue׾7 z4C@iLԠJнqm{~BFP!V0~! 0"hA>s (=ZUzd/ .mC֓ہp/P ('4zhҍ X ( !@|G Ptӳ 5B2xI bPBE ^$b^aD G` ): h9 aA2O' 1H䠒bO5 @pdj̠߰a"VC,"1n#?IrSRd$ X@`6 ۨG=Fl4-KI2!@1AAp;}ԠCC,DAPt4 8;T-`] eßVG JQ}/)nIZ#\cnp-`G"ST`!%U4#1(@X:(CҐ! QHHfʀ@tReJgbA #B@5JPs:(w"SdWB؃+\+"EF j*]*UlEk@D q`'XnS@!T5Ѕ-5- n4!!'MIzsf5{ps"v#@iyZVU $ !HAplЊ: !*dC2t񁔿|ףpA>STu  ֱo]DTUB#P%=p/{=8±bŰMC]hd&݊I -@eBP`P i0*ꀏDAD<'[ t/\2I@\߁PUU 80tD H@i@  H`9 w7 h؃ _ $0n# uH2Q*t =Y\3ث,ei؃n[Tŕ0+Aؕul& `&u1 ~B?X1EH@"uZ FD"CG6v#"U@r1%4{I{=f`*PqP@4(W`zHY p  D3q]c 3hC`[ FP -ذ EB}ݏ"K%+X-}T.@Pqe[W@*PC Pa cʐx@^p]blM^ P 5Hӗ=,ase(<@V7XxsJP P)5PE CP)P}=P |@6%+T+5yi`$(J؇u/YG|p!ϴTKk=0sAԀ(RJhUhpp_878NQ 03P0pgp+gp`07@UP7sO?+R F=@}0t'O7^^p S0 W7p(xx7X`&`y)G'bR  N  | J b~pHS&@@7wsl `X$H;8M8EPpԈ ~ϋT0 A7o4hX)JZ&jf:fj 2DN|K K~>b ҊXJ f1Ou xx#0xq("$u@_4V`_kDA" n *a Mr Mm a p7w h ? R` .HH{)ȄfdX9pWd= GI>v#EWZ jfp[psD`&D: c~ B`".* Q MD 42 R?Qp=pUk`v>OW7pJȅ1臠=)'p}x"($Sr@+d@.`!GarIENBf& ,Ȇrw|M4z|p{p1F`;gPE `J3؃lH"xKPegrHHg]])(D`JC_Ȇ>XSpB1/p?pG]0-k0hSk0[0m08k3gTpT,F$Wu`LȈ,HJȇXGȂQo8mЅXއa6t @c7Tŷ"W`!`AHDp{Gg+00{0M0 P]Ym PP0[Auh!l&RT7oXQr7@zs3GG;۽+~;yBm̂m/o.Nwpnp{7́^pkgp~pg'pp'z7p pGplp53X{3۳G?׽"ؿ7>k-J/^]i[<#G~̳}77!f'>Ă_??=00  8/usr/people/marco/sound.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/bluefish.app/0000755000175000001440000000000013214346535020333 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/bluefish.app/FileIcon_.html.tiff0000644000175000001440000002245513214346535024007 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUccccccUUUUUUUUUUUUGGGGGGccccccUUUGGGGGGcccUUU888888UUU888UUU888UUUUUUUUUUUUUUUUUUUUUUUUUUU888UUUUUUUUUUUU888GGGUUUUUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///j*<<Y=rn|B R@@@4 sssSSSoooOOO'''Ll,RntVJр!@QM? " /NVk f?Pga]#! J|_0i0et]|2` C% @~ Z2x N%Rq5/y@zZֹ X! O,llF2"؉@!$1O.@iEWjta."0ÌM$3`SPލ@1Fx ѺLy}ADڙM0kL18ҒS6PӚz0 >5p I2“J>--N7#[_-Q@dBy#w6e"i@0GTCFsA'lƒ/Lu*]:nNTO3PI}#,"pA]tÞA/>Gط3f;@E +'MQ+͸,,PL3~fAw2Hү@J!4+{QQ&%`*@. *ӸYDmdӺ6KvV?[Vq4D=yzH 7LiqѲSjN'f[ZzVnUW /)@JV-֌L 7 {]#t+5I  &ѩO57]KU"WL{AD5dlX &VA[s%ewQA*܏Wj_["xX),5tX0zފEp*%-ԑ Lג!0\KiN2i8I;C1Pr{\8%22W I bKE190b&Itd2R='/Rj&0 ه/9Zܑ+v (Bf,nW$# Ah u"J`DP%u#{|Yau@Z;hLsp!GZ@_ȴ  }}3 u pl%1Uů괲-ǾkfҩjHAgJi9 f@7z3~VB?vu l @eqP֠SL&q4% 2 șIm!@$zR\A/MLɜ;n6C7PJb?hlC`T)G& pЮ0 @ʘ8?p.pr!@5;m9AC\A Sj0i$6) B䫰fA{`Z?ܖChS($L*y@%J  VMGCdR̲=@]Tߒ~f𤰺YO7'L0JmKz?81|X(Zx}aZ N|ώD* 8!X%X!w  C` c`m#5r!B,`> @P , @D #j8J- i+4A3&d@6%;*Ji6Nf<^!O(O*!Kdar!+@0F")!nNЌp>*o X/W,(/HO6D0`0FR4'd5"Lڥ$"̦-*'0HaH-y0H,Ͱ 1Z!) t",0"PI䦒Bx?"#ʶFI"!* a8BF D; i`"Ѩc S%\!_8GQ؊B,,K'aB 'o#QM QV%$L"0S%#M*i=/} + 5A,fhdN hx'q&ҐOqT>r2l/qҨ$ʶhd( @8E̳.aqll N.2Jrҟ$)1%cM/N4,XC"1` stFbP -I3Rr4=9 :5M9aJ)6p`I2B0B 8ҙ$3E.$U/yʶf{v3?j7<< =9=P43=?/qʷ/<9) :AP$-4!ia$BRQB#B# 2y2 'SH!! :'-8TWEA/R8h%R*Lj0dHVSA<+ (L6 ) @8 CP:-xW=k j(N8 gSġ1{*ҨɎ)?-r\0{̐t 9jd "S(mFЀC/ v;|/A|"=Gԏ|7 a@( `9[FTX|G/ 0 5x1 C六%7EaoC^X2j$RhIKo6̇nyuI*XIFZx-n%8KİTcZŀe O7Uw^>E2,Q)YVhl ` t]`& TI|;-ѩIh%i@0=oe amRw ӸuD_ruMRS,? \`TV }LC`\ BPO|Amv=2ZfݛǼR1g}}^DťS~ |0ԃ 6159PTjZ, Fd8b,+g^ 6A"-$ʟTg`qX,Gȳ(|b*@ یDG  8DTIQmta1c.ޑzq`uNs`iό逕r,x6F}Qn=eTsHIr!4M m0p4/I&C$jRh't nTdM3ZA"ި@5&J8THHQ ֟JfPte7y'hq!i~5+=SpVl!D^+<HKSzY-k~D!,d,K@~X`ɽ;MXΘZV-%o(_@ U\ XF-C+WyX&lyO1XPPD6)^yE 9/[Ak؀q-六"VݳP,;H @Dp"0¿Wԩ b j+.ȘGnJ8ؤ1NF l9~@W?b >MiD(E5TSl lE-%6Ys*26tcN$f M[@ ʌKjSqlt"y XjDB XF0;t3NYC\e y2K{4D@Ȁ vb=Lx11LZhD Ig  tW9\.(7q:2>KapZy:*g̭Y3$~3 bIFlhiQ&P*;&ȱe(7cHHT.@ JAk[}<L7." H$do p%-&*2$ȰG I~=]qJlaS$oTn@^H вW(򔱦W5Ѷ%?2D|RK#e&@~3p @.:$N?oo'gX<_@.tG fN&+DG$ހ8rwrֻ`eE,[jB lyd &al TA0ba/6`*,#t a aB")!nldyN"X. A~1La0R6'l^mbL(Ҕb+1l4'* !$p hS..:=¬ Xm"X,L^P}(L'z|>j.b`C!hr@ƌU=pRed:0.݁0#GU Cj++="I8s)QE$a/1`H̀B>^8ܟXC ]$!'hC\)G (f@H &(rs*n<U/LS+Y pk[bLD&ʽğ$حr2Kx#+(}b, +K8wL$G^+{7H#3,)Q ʫ0xx '' ERJ5t]Ge00bLsi0pN``\D 4*N 0'+7UɗT{Շk͍5{nA`^/p4c"]غg(;P<ɰ.ʢw<9蹙d-w!19-Հ\-/@H hM`Q*R2R2 A@?@+ʢmWW5swAi$1}WX;IM0ȹŴ' '5HMUG+eaϋtٷ@% Pm{/; O8>"#*+2/pIwgPL .d9ٛm0%}@ EP:T W XNo<3dCpzJ@[Cs`Ǻ=J|0YՉh׸FE@2P[ E89;8 e Axآ-EƖ" )] Xj l(rKArIBKmŵxhA%L @*U_Ýr9dAnK vp@ڔ,i(` F脿aA_T&B20C:z0" 41e*\6 $ĭ)GC*]H ÷J I}&ZP^ J aTfR}&8]s,dL΁Y4Fsf$46MBc@b`#~ rA" A.cܓarkb9(@`Rڎ&4Vws\J m!k2) V}A=kю4mg{%7PENg@i$z}hd$VIЩny<}܋@3  ?av jOLT@Jpdk燦jO`(菦N r P-S; }BY2(@yS0AjXa <($kr9_ 9Ǘ$cI=2E@t:8!/z4o~oC0M @0`F 4O<. bbvIf?DHc(\k 8e0I'8O) KPxu\0. D&*A `tL5d%Nb-XObb%g".)n_!A D΄+a<.σ*Db4Q$IO$ $%obՂ8g80fafaB$⪥6DDnf}!Tv!Pb h LφC"cF1Q1є/ L` QÃo1!QVH6zĵ/4ĉ3eQG11+Ghvd B !&zj!"a,qTGH=7?qEq(#n l '&!(.g`>?#>9RCc2LqGI%DRυ+f0  ?.j L" GhgHR;)b'E)Q**q%}%PLl!O2gr/2!؞ama+C'/)Ҡ2O%}~QS11n( +3a\tC41/R#V,s[03^O\_%6JL[7d{(`$H7?$6BY?;  Zv!LiAbvxCBP( Tl.2B)b@ H4!FM0AtT!t%cJeJKC漢"b00  4 @   (=RLL/home/sebastia/Desktop/calibre.app/calibre-lrf.tiffgworkspace-1.1.0/Apps_wrappers/calibre.app/calibre-mobi.tiff0000644000175000001440000000706313214346535023340 0ustar multixusersII* P8$ ad6DbQ8c)`X1HdR8CT \m7 OŤ8F'XGXK`U d"R U0ZjŶ ato@07| !@1}5w Q׫UZb lNTe2Y nnhD w;uV% N!"с[-3Y.37wlAu$z~@e .ύ.WK],K,i4 :|)(+|-PX$nk{y:4ʪD@ƀwt|0l5n}0M@e`?+d@6Er?.VUlp6 RO ʳ J_ CCNr̅-: `V5 @d*J8 8ը8"W< zcehUIwioN܀3 Wh4+A: PQhQ {yOrNz/#$8ͪ/ !XV$ yG7g7 * 3(l`" u:j,n2sSAp\ga[Óޠ`P޷}ߨYRk2S|I8d>OeZwqǀP KNd>) H_W0p>cld"FQ yxS5؆~s@6|{'q޾/"*d "YHYfb6_5fUx  TI!%6"}0ćfx|f '\/USWQvKT"i$ ̂0g]-d.x6]#cdR::"ş9e\U6;̡s" Fh l );% }K%{_CQP*~p:T0 tA+ԅ˅:T}'$>~E$*dr]( -aNd!BЪ;lYFTE[nC _13JY8I-8:2)ygm+ TR?K Ab:G1 \7:KN=n|wf߲ $'lZLջ4BQ<@Z̖: @_v0~g^ւ @\m#%y!\"k}60#]#Q}A3B"9Ȅ#D u]7"6t ;%й!Dbm @ShR js:lsh*;lOfH!,n1N/|qu4hfɾ'+Hq~s{*ZoLR2pL NGL[;L =*;7n3 Z\uqX!K0 (ǴW'Oc+~ÿ@3`4xF , +'"e&@h%`!9Is<@~kG]\|6QTcb1KA1ŏ* #f $&pq4+,kcpW )La侀Av90ǐ.EaQ) f94Ĕ ,AM=#È ?bKG1hSHG*]#w%J 𮹤J\A<CdR@XTPK2^p{#0,IPTԱe8qcǑ lQ|Y]_S'O*ܔsv-b0%%/(%p!C^ `  ;@ Cl@ϲ-#v!Bލ``> _t @=`HB8CCfb zT ̈́X1t@% CB%#^&aP TLBp6"/_*#bN a a 墒 ^,/AB4+n,%|irbv1p 'b20RBd="LLt"dmI !$q g QZ_l: 됖",^.%mH`,'6.<ZOHb~b9BFQ`U+1,‚Bt;ɰ@t@zo>8DB5m Q LEmdI""&@1mJ(" Hg/k)!b@H f'p&X -'! b#!T@'Ljav @8X(lZa[@ _.@ F*eR&e, @?1L'(ZTjF.K3)b(Ѣ0\+R0fIe,S1d=GXAJ3F8` pX M/PK\Ч!s&j1R63sLArž44b9q99[+%a>Z =K,CԔ!:q'&hAv$ 0'=5P /+#s=/5orD4PP Sv B}/B>:1:s_!3+6;'bȻ%a4VaEIa0 kf F O9hBbѳd,u B3OK(*NbqMJb R bONpb"O7ѷ/5$m B}R5"B00  5 @   (=RLL/home/sebastia/Desktop/calibre.app/calibre-mobi.tiffgworkspace-1.1.0/Apps_wrappers/calibre.app/calibre-tpz.tiff0000644000175000001440000000704613214346535023230 0ustar multixusersII* P8$ ad6DbQ8c)`X1HdR8CT \m7 OŤ8F'XGXK`U dO0z.TWaxmoImTفo eýZVab@@% @`%jbY6=VBvX/$@07] ^^5h|8Mgy4GA-Q&6>~Zk_G Ѫ%   gS|{*x!@<QhqGIduPs qc!ywkD 3jZ>I%`30P̀7s2ApcCM K(8(^{ю,4CRETV3T`v]TUh?Ce.HK0γaB<v( Y>Y4 ik;~X6: H@TA#, |yRM(DGzmQV BQ@((<Fr$PN&yjUDX}gR^1hCS` M]ׅC#DyC4}"!X@Kg.&2v;JW"ch5ÀNYr &Ĺ/,.)B ^]"u^z+EL7yJJ6BQ@9߀%I3KI^/6LJ^ b=I5YHm 'J}j0Ԛ/,|%b,0$%d#p69aun<מfD<12HlϙN`N#DkNVvN.#~MK^/_ݢ}1f:GHs8d 1y^,u#H #@ 4tB@` I 6^(ףS0/Zv(4F4`.5`xR W1RU $N$"@H`3BB>ුMIʹiʋ+%Np)_(9JZX *'檇J*lo$DxwjApIɏ1= \3Ήʢ6Z粁u/U&oMIBi-(^ئ@/)Mڨ/5S *z]&֒84^s ^BU$mXDZhewѺGgUg[ZEjZp'M['̙5xώmr1LCW'u4UEB)Q6SN:9k (oZֆNXㆰޞ "삈k|#%դ+9[uVC+ݧګPDʥ`j]5o!$B /BF&UǩW&*ܰ_hϪtP4 #m l e@e'OOyAS 2{ZKjm,޺*șFF) I)`0q0X0`,G8P4}zHq~,&eLWTò v؈;M3jnBch]؀y6p[uh50V\vcj@2}x C4D0Hl%` U"9^f6;11LXZDzs 4DG]Dq6ʦ\@1RpC)jy%:H򝣜O8h5p"ZG!;!1ε%ցJ't'!)ӣc, }[A@V7#͂j !)M ^?Pd @}@.vby1pvX]WH$~P-)su 7Ł.'fg/ƀr/B̍ 0(갶?"Yg'65%*X>%GJ i" @  5 DcD`ϠBv9 $eddHLxb`> v2"t!@O@H|B8Ar$nB"RB i54aRbY  +b&aF TZ!LM0&tb́.2*}R@ a a!’(ҭ2.´!."% AD0^D<0RM!'c*2LkI ' !$X gi0QBPްQB@b .6>~"2~?jx'Lzg>gPiB#g!Zx n$O'!NYq hcĜ-`/"jʬϡ eBx&K*& <\3 LI& !'KajK\w m$a&Ɋ%)?^$9fZp7-z.Aw-!^6 N؊)ҡ** *U+#0BLL n"|CX9:λz `Np Ojr$*2놐3BM+#0-Rs"7 䡡 pFNS:jѓ$$G92T e0s+Ҡ:7: v`3ǜNs{3B)8B38킳W4R58'H' At#)9>jv>aSC኷ 6'84A$rO=e9EB9% ` cK|gxA0 a h O.VbNt2n aэJb.*N4L.T q8OT'O5t8C`.kObj5PPT6P$ 00  4 @   (=RLL/home/sebastia/Desktop/calibre.app/calibre-tpz.tiffgworkspace-1.1.0/Apps_wrappers/calibre.app/calibre.tiff0000644000175000001440000001502313214346535022407 0ustar multixusersII* P8$ BaPd6DbQ8V-FcQv=``JeRH:D.CU5IY?Pb#T ,8  q4)X,@H c̤VI| o?'}>ѯBq40 @@$Yi+WyRH\kh |_/'Px= GksP@1l)i $> 2iZj:xqxF@hEEf@8H7sf:^1K> P@hEy.>bYx`GQzX)OtAhHO&``CɓV.gIo"J: @h&n. A0dP iG2ps7#1P lp@c^|Ծ euH& y:zat3P`8-@ l,N5Y ZutiF@EEԧ?@$u Q mz$fPd)xvLjrg !0})1hn?aPNgrPi Jja"hx c r 0;TesGk2i'V @hn|x'iHIbyp7BAK i #h|m`XbVg 吢AL8=^lןgx7v3&}<ƀ0l 髙pf= gΌq-[|< tUF@ 5B^T 93(,!6p\@ 80XaB Pn4|<&T4R~lӿG"@2>,!=0fBPA`.P0D 56] q`@@ J:9Ġ0"l#sP"4'f5t;!4.@Xz+X4X< f[l=0vnpS1 P TJ3qQچC%^4A7@j$1<t Gh|<."5`)CXS3@TРAHJ, =P|f Q68FX $0S!O` x%:`0 mh>s? @(t |" $TZMxl 08_B8ksMSE_۠wq2ི B]c*Z C 'X#ȱE@xVG\< k)&@`@$ɭ(Hghjq>a/P<Ø2 $0fE`?a2|h{@AJ)nCv`p 5fq/Ed#{nA@)lpo 18x9k`N\:rbHIcjX}`@nc,x~'& <3KgO TpW,3@|$37.OwC4XSScn1H ca=!ltˡ͐UtqNJȰ9Wc0e; ?=0ZxG`H0$Q448$jPP3,Z{:1vW2T``OO>3@e @@ TC:l Sʨjc;zі?4b >t?`L7;B\oizd<ˁhl- Zɫz÷7ǐ9'@Ax@HjH=$ " y1 6dH $nee6xw@d~G*J2:M#LD@:?5ejCs1Z!=x B6 @@M(4 2yBAnJAȔA`Hb,X*@xa C@aG@ rA 4$[ .`! "`X%nN(.na?h!aE 4>H"$ff©$/2@@F *ʠdfLv0L)( ` `4 *!A J4.a n,4*@6CX> "`TAvm"F P`Ad6b*! x$TA/ ^a$nt}B ,hʈ=$ch L`>P?nAi V!NAdObDAz @0QAN FFr3!fA!B-HZ^$@"#^'AbP95 "@6oN\FfӁ` @J d: i`Cl A5T4 2 f&cH ?AbAH"ZE(9Q-d @=X6?Ha270`  @[ mѲA ` ^`L m0|W&i.a!a vœ,Q<@p ln T AB8ЮaH4b.b$9<%4<5 cHtu$AZbG*sR IRiD_Hd__~ i !@!@4D,h*5Elhj xd r @@Fa@Vvjapt~YCŃX`2%jO,%C>*@0 3?ts"Paxtplj -a`B<)% + sW!fA @,@r`&. T畮FA O-[ X)D)X*@5D\sʺ`2(X*J$D'AU %%X2So bPH`YD\2=\aaj>ߎB.!/!bA)~ Ff"`ZLc9=HPyE5)n_R\`.Hu-f X$>xo.XH "El!,?1aMPA @`%MŠO@AP!|A J UH1xH5 /hhad:a=KwgE| 0E?134'A.~!z`AI` ; aFF22 T>c^>'@x<`ap@78l5t@$XAAV j.Ux@@`BbD`F`<@>!5cRnt :@$O#rTbtAa58 \nl`o!@fh~l!0x$֌!`rAbV@ (BPv=>o! a!nia@ ''@~n 9U! `H0h$A2  !sUs"!y,,YHs!+zY~Bu 56rn%r3!Q'NɌ`{Aa f8apze>@D(D2&@A^P2-$@#yDŧ˙!T!@]L!'"5?$x o73![^j<$L%|A MY4X@$,j'"!YB+rAh!< 0`@lڛ+t҄*y@Ár2 a^!:`p+y<&]85A:Gi$8?) Zc+ EEY` y|l`B[#A @fkg@P|!Dr.h /9a赁@zWL F~`<`6[ .hT4pA!`Z@?4Ȭ5T};̶ra H0B`0 A` ?_9[ͷ% j y=l&#%bS(KwM59O#ogP +DN<53AqPL ( q5Wg-J8ahTi ][h?O zw(,لa+79֑]c,;hf.$1?TEb3J=s):H`h5vƈ|!h,`( 6xΟgR$ pcb1li "K.:P|wT.j` ((:ǁtIqǩx 9Ȟ0B|ˮ}@>X*'af1~7A~gnrZ DyG3K% _:G0RNO~^5݀H `T 6@!`V Ax1`00 /@(=RLL/home/sebastia/Desktop/NewFolder1/calibre.tiffgworkspace-1.1.0/Apps_wrappers/coccinella.app/0000755000175000001440000000000013231754602020623 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/coccinella.app/Resources/0000755000175000001440000000000013231754602022575 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/coccinella.app/Resources/Info-gnustep.plist0000644000175000001440000000012613231754602026227 0ustar multixusers{ NSExecutable = "coccinella"; NSIcon = "coccinella.tiff"; XAppWrapper = YES; } gworkspace-1.1.0/Apps_wrappers/coccinella.app/coccinella0000755000175000001440000000012213214346535022643 0ustar multixusers#!/bin/sh APP=coccinella if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/coccinella.app/coccinella.tiff0000644000175000001440000001124413231754602023573 0ustar multixusersII* P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/C!}~(o} G85dT`1|`omt g0L& 4%}# P t*@ #fUv?/yeLW^zIg.@4 m䠘DA,yQ~`oy~Z[ڈ<! a4ru Bvdg)@X}6e8jX^ w| @k"{E8A4`@$ٰm1v63y  gTxLsb@.OG F% jT~@G$8'iQ' = a/3xw `" NaGY'PN`!N`~Nhju(x @X~qLZ8JtlZ "@@0 * Ff( C43KL3H} x!2HH9aF: v qGKJJ&}-&"f0>Y2Cgr ~kecsOՠT,XeZ` 'cY`yQF9<zDވ.^9Vdl&V* O)hQr1~\%x'uYz^`:C80K*%v}a,qz \WȫN8ixzN=YPhoT5ƀ#H q>C/J0_1>a7Q,@4xX@ -1ꈆc @-0 @ "&8|Cֳ(HA|P a&\'DPƨ釣ҀB8 `|( 9cU ?]! Yǐ Pkqb$ 00ycŀ<¸9qBH9v>rikFVgv,3p \ 7p !X^M@ni @1?#XthAHO6vqh]2QyF!eVq!@pƑ4CasaVX[ #,C2@09Pz80`U=0ߎp mDarc`pt!> D&F|A |Ja! adlE$@f+HfD@H 4/;cnC*~Vq2`%ZpFV)mU  ډ[Ta!X^Uj NSi`|>VIꨛuO'FB3<@*{˓nr{9` ]nF!_AR䡕>qBCt ZH^2_:67C+DFԪ 9klUh\n!6!M@@ &  |!v䡘W ULyJdIP騮 i1n)CHlDĦF|fd/Ѹ@!bz]p0? !3C#VtLΒ4;j6!TXgU+m)X<$BjƔ9N^eOSCG D\lfZ0$;2tAΒ ]! O|)/_SHdhfp!X@ڏtg^GPJ D@`: 3t%J(dО$Y,âV87lc,8㠸@0>:Ia Ch=`=:Ed[Zd%x:Pf ؂bL.cJ:ɼeԱ>,sU)hjP4"苀g-@Xb 6BvdWQ m b@c=AZs{aQ cFeΝӚ{]KNF$(S1T%@L ]A\!$JkmPM(i3 bDWk]Ak C D?퍳3)*E9؛X:iEm(>r6G@VLSrY!6p*]v۠4?0 Vy40d"X <(-h/ ##`t̎g0pwmVI5DU4`@$jG,u 'pDGxg !F*CT 5dUQjl86*M3 qbU^^X.!x F݀k &>q,1p&>a*^aUݹ5qf(v}/}%d W1r.H{` 5*C@q .Tjg't`Q{f(. ;zVOi˧^b26XT`"xP&G< [sWO : Vzت`5` ;L$U1@`;=P ZV5rфCWLG1u(^%RD#bF;p,cnJG\gVJxHfCޞQ}O.[1/^DB^C?]Cg H&Nٽq 8a$t1AbEŇzG|x^q? btl$qkui^ "S1$db㐉^ lF0"Y,EU m@y>n<p | A !H a&u`r  `>ajZX.x  @$΀(öd,ankdm&?ygn0HoV&R@ G`@^Cv*r>kLͨi4/( 6t,Ptf,AXPd%Zf4ZyByJ :BHV ( LIV:!.G a a a @"1 D^saH)VJn>d!fyAa Ne!TzNd6  &$:,2A& 0 X(`*`K .TfϏ\Iij`MAdJno&o8aJd@6IwFD Q`ދI6݀X !% HNfK(_"Z@JRHBfQѶqƠ Wy1&mX! ! &ON-u/b|D!6$ 6E+ʊ 4R@r@Ok `+FQ@Xx)R(np\@I| @ub@4\AJf`Ѥe.`^ *rR *pa i56/U!20*!q!du :``zf @4@ XrStA!/s!WB4-BBbB1C<?DtH,TrEV[F_F4iFtmEqFTsFN"ATԋHI4ITIItIIP(" A4KL4LTLLtLLQJMN4NtNNO4OtON"00    (R ' 'gworkspace-1.1.0/Apps_wrappers/emacs.app/FileIcon_.h.tiff0000644000175000001440000000665613214346535022566 0ustar multixusersMM* P8$ BaPd6DbQ8qV,cr5 AJdIa*^U53-u2 P+Z?͸9?X\! =@g-v_>b4(`vzs `6bೱVL(ɥ^n51RIQ3Zo`?( p{HDfs4^j^{!2rD,xjbBgJ_N\31p*B  |E0ku2A1W:S4Hīvz<RH#b>ܓsp,Ccn?@Bx\&W :F0S}1rׇw԰' wd 4pqzYކ$ sG#k bőY+/*(U+pG}Jn”bth$k|@U@(J#pȥLu1;d1&(Ŕ+e⵴,t؆ Lp@gJ. @zcZm* ( r @$Π|(ʰK+v %\0Ebk!lvm#Zxnc`be!u dt0,`b#jl܁O .DJ( 6),+@,AXPd%ZF4ZxByJ :(@HaV (qD:4x.>o  {h֮B!H)PJn>d!fxAa Le!TzNd6 $:02A&A 0 NeH`*.Ff!BfĐIE$`MdJnD~noD8AJh@6fv `<QZ,I0J @! !.VI$@JR(@FQ1ŸWx޹q &-N ''!l#O?/fD6" 6E+@4R r@O+M ( %)/—(b(#* )!$ 'F`J:f!E@4v`mP,l Ө |vXP:Of]¢p u F` H P$ `:p`Ǻ.;56 A4/ At!B(u.S oBT1C/9/M45C@iB"D Q/TUE4WEYEeEiF4kFqEt:"GGiHHTGH4HtHIIԙ/tH"dJ+J1K kKTJK4KtKLL/MtMMN4NtNNO4Ot 00    (R ' 'gworkspace-1.1.0/Apps_wrappers/emacs.app/FileIcon_.html.tiff0000644000175000001440000002245513214346535023276 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUccccccUUUUUUUUUUUUGGGGGGccccccUUUGGGGGGcccUUU888888UUU888UUU888UUUUUUUUUUUUUUUUUUUUUUUUUUU888UUUUUUUUUUUU888GGGUUUUUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///j*<<Y=rn|B R@@@4 sssSSSoooOOO'''Ll,@X?`\Id$LaM*r:HҔlj4t/d2n1Lc  8S;Oy>O lb @YQSk<N`H2LDi@#M-Ģ+zb-ɼ1IY֡jW'E _ݪ@VelGnhbG\V*G ٞoIO]# 7 !i,ţ&VX,=[,8㠹qÀ&) Yj0; BT3bE !A#Ajgs RšixF&Ћw.Bp`U1wLP0+( F&؂!<qHP,;4$a):*āc} H%b=^iJCX h/4DY=Q?@* @hPB5Ƙo 0 "H`,i>D@ AB]GAǠzWG(Pl8 xh.2Dq6Ye-|o "y, vt &.`h50"|Aju>R P?vN L)CXHZKy=%ip b `U"$U Qh2.`-r4Bi56!H,t.tv5!X@i $q[+up8W*ZKNF*(EԇH`]݆p,D ]nm3=%ʀhdmJjH<2ŔدP-V. A5A0U, R(X0Ĉ! MP BSx F'i BYA6 *W̫7{-XX TZF%Åbl 1 x fOstpv VQ5 Tq5ڰxBG\?S^<(WNYYP<4ګ Nj@LmoŘbx%XV ^E91x.X D`[)FLi5"pÉ9Om UGi-b̸MZ͉t-ā(+ZAXVBl- Hbŕ Yk5+G=#`o8Da$av\gH"Bc$r,S#Tv@lF0"YLQ1X?P@y>D(v,G ! a&u`r  `>aj O ~ @$`|(X,+ \0Llƺl&[ygn@Hp!V%2 Ex Aa,`c#  ϔܭ/|j`tmzIZPdeZ9dGdRzXz:HLHV" 4 Ƭ BD!:4p.|P< e* qdZIaH@hH^Bdgn`oP2G6HHhtݍO,+k"20܁B` ` 0pfޯB$I6I`LAdNnofoH@6aDk'n @$ E ꖆl a(X *nvDl;!4*Ǵo#Jc,) " Dz ˑAP\o,~iLfh(\ FRG`:RBjJ8E* @ȁd $l \x` $ $@ c.'*5^"@JX:AHH@4{@,r '&@ b`{SP'B+s6^xƏvh@*xl ^& ]&ӿsT@t @c;sW@Aqt.tB4$,2'mBt1C/Զ=kȺh0ی+{z* ˀVǶdiIO6>$Ep=+,+f"2<(I); Ir18:*q.0+CT53Kچl[`?Q¡A@#;pLJ裾"Sӝ--I2{2,e,Dٰ>{GqT+RqKM#2 2"ܷ :=E2ã&s:8q 3е:AΒLsB+V;x/)l,R}X3`[a->z%gL슌_W Jʳ&ډ'[ N뿎{LW%%9v=0Y+}I:NF=[M)ZDg%®ǃ\-و`:?WrVAST0\gnѿ&?^Z~krHk+r8Ep&3]ϟt*O]_UcڭUC`V6;meiCF*ULE-_U~{ F\~6~m2B">'^lcG}O'vM Z1 ]mJMǝCzÀ{`ɉV< KRV?ؤ#3n ?2TELM'T;^h]k|p"~BԽ׳'%U*nP)³akJ"ET!03#)|qgDlGsF2s @.1zEw4Eϼ#?rZB$8tKtz2-8ll,pI)*M!&EV & yBC eĒ^D%kuc|rPD82e2V9A1ɲCFn[-fqeR ,/^pL̩}$OKSiћBzs JiAB<3yHdCU bm͹QI_R1x3,3#d\~s]r㨅jiMUbNعRW1l@j gPi]r U8ThFM):ڋ=*Tn=MɔEfwU#ĴjW:,!_2&3H2sb"(Vqu:TI0k.Z85-C}<nvUi4UFŴ'Ož kVY riWT] 6!rh.pf^2 r*tU^ڼ($00P(R ' 'gworkspace-1.1.0/Apps_wrappers/emacs.app/generic-text.tiff0000644000175000001440000002245313214346535023100 0ustar multixusersMM*$???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<<Y=rn|B R@@@4 sssSSSoooOOO'''Ll,; geometry = "712 203 450 300 0 0 1600 1176 "; iconposition = <*I5>; iconsize = <*I48>; labeltxtsize = <*I12>; lastselection = ( "/home/enrico/Butt/GNUstep/CopyPix/AA/NewFolder/firefox.app/Resources/Info-gnustep.plist" ); singlenode = <*BY>; spatial = <*BY>; viewtype = Icon; }gworkspace-1.1.0/Apps_wrappers/firefox.app/Resources/Info-gnustep.plist0000644000175000001440000000044413214346535025603 0ustar multixusers{ NSExecutable = "firefox"; NSRole = "Viewer"; NSIcon = "firefox.png"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "html" ); NSIcon = "FileIcon_.html.tiff"; }, { NSUnixExtensions = ( "htm" ); NSIcon = "FileIcon_.html.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/firefox.app/firefox0000755000175000001440000000011613214346535021562 0ustar multixusers#!/bin/sh APP=firefox if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/firefox.app/firefox.png0000644000175000001440000000753313214346535022354 0ustar multixusersPNG  IHDR00WbKGD pHYs  tIME7 XIDATxyWuwy7of4F$$aYƎ؉qbllb T K!$q"e@%eR$0؀ccKIhEٷ~Zdِ]u>ι/_!~.)v" [fKTNl\-~?ryi޺t AbYD1$)׈ǧI?Im Tד1i(58 dwAP!Y i41&+&m} rd2vgf^.W0 E@q*" JFxlTV6w5 y@_?3?;}.ߩ&Q CTNbkB)M{~B\gj 3;·V|"_VUAȟYs'|=|sy=]1$1D ի== I I`l5 .?b|ws^fjB15:NьQ=mO36#~gsPbC\k͕q9(1lV|z9sn^Jzĕp2l{eЎ Yp1eUl;oZ_ܕX_db w5'.m279(q(Yl bTFcIo/@;CްuدoK[ W*s=%\ˑ(T1Ѕ-$N簉5.>;[}oᑻg)'Pq%cBKh.Ȋk5Ah) 9)>̉$)؂U=150suhG^dCȗ\!Rm}BhZ`{F_Wv\ XBu8 $xqxM <ہ/@N'g6^E,Lf:ڱCޝL5o,wNk%$f06}= P.,4HH@]q)baʰSH J,Td )u H,Xs  ŘiBğ\d]o :ǥ$cݫP_XZB5Z PYM.|xL46T:cPCA|H4m̭oq P71ð}{s1X,-DQ"'h%i,&+ߒ**ZF` 1l?J侱,0y @>z -1ms2#d8 8a 024/}Tēi%,z2/]5&^+v +y>sC~`/~=D'86buVAnli #NZXB}!u2 =P!, \^pYW!d3 FԪPZpM۷d4jiL$q %`#4W@NB(`V@&*[095k;F!hZY\ Fk*=&K׮WYGܰ1U: i KrN9f;'(qR Cz_=MujO bC\JxՔ`$NΖe.@Ua^Xd'Ks;Y<ԩBfa@R,zcb"f:ՙ8Tw|ƻO[pdGK#M:2u>}w\BT%bJpYxvAK2v1TSWYRi#qw8FJ# ;e!A7xmT:*V^,ai+w#x:-R)̟~A?'rtK[l48M( vef;k!:Zp1Lzc2y4 Alv~=gl#<)c]Z[8c0Q3M]Gg]5`6&Kw\* $\1X[Ǎ?C nC ~6nb{+Vl֨@J!Zek){vC=lhqyo` K< {Bح@L&3N/rs}3_Uss=N2Nk#=:Cd^ &Bs58dylCz =:W{)۽XKE՘j'h_js< PD-Cm,s#Xh8ge78>ҭg^'yIKx?Wxв<Q>dW(k5FkTCe}TǛNț8ώWܡ[KE%1b1d{~EЫ;^+htF=tV#|&RN'd@ᶚѡe@U-΂H-@0*=QݙԊ?qY59ꥷ=ws%^2&NxРtA#5A"ӡth0롚zԥ_sgݡ9Y4gaP~ "- )n(/Y~t\ug5GL+Y=rn|B R@@@4 sssSSSoooOOO'''Ll,qWqKrw[ M(<UAW׾{_c b!+*LjQ 登ܽt\Z=95gϹX^t~WbW 5`X|x3riiQ~|;k B =Slᰫ-Nf P~$U(z; n| D–-3öQQOڗa )υ:t!46WA7c]T^w nZ&F.˻З.E.R1E6"E?\ސ*},ܔXB=y1fJ7)-",Y|~[XXW%S^|^~<TZdv_koVj`aRU{ (2j5l +)XT;z~][ ?8x\;퇟|Ph:^BSO\ y3֏ fGWVСe{T;cWURYG"vƷt +쐴[y+n77x^/o/訥B܃FىXQω&$(/TR jN_aw>ӗMiNˋDeɓgyNlW %y TTh:í {='q1OfI"_hDKA-)C=Mb{{ɷ7&k/o_\JKkF-8/_)m 釗Lixo񬬬rǾ#w։"s" Fk d`b_bބuѥº~~lO)wR^yǏL8*nVς\`yr V[>eӧf"Ƃfun֘*,.[D྾ҕ < FVaZȏ k*' [iZ c2X4&0n9Vw7hrgQPpUde]*6?c˓+&u-V GBf:ͮQ̅~WJ"R T %M3_k +Ƨg&WA15XA J6~Q +ۑda'۔f-[Bړynu>QAE,X&"<2J$篔eL#r#y0Sۡ OEj@suஷl&}z4 29tLt&3!9K@)(ELpCHJb6?QI pb*7?9>s߃ Ut8Djn3Q -N60A<8ojQj*3r殃;=D]n *EJ~mHCD:!+7 =Y+m:Q~SXaL~A`WP4iaS}?"*~ +*f'N&5>Zli.l4vzNhc&9&r9`sE$P;hlh)ut%%פM@ Irm%eCi-nV9V.(c֓#(Ϝӏ:ču6K" A4>jw%r;ؗb!e7CnT[ C &-wV>=L_`ljQ%@ 8GD$Wq~#[lQ;l`Oz#+ۆ~įB+\MrN7ex׼lE$y&TK L h"<g<˂5b"̏11#0c+X,c捝$HIgIz~Za<캑&6ny&t""H)9Ĵ0DHgR^0`![a菼J2]aF_#^߷&r6!Z\h\@~ 2i/B'!oqq'q:oė.?XӦ004   <0MHP(1?XRgaleon.tiffTzTz@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gedit.app/0000755000175000001440000000000013214346535017626 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gedit.app/FileIcon_.c.tiff0000644000175000001440000000651013214346535022552 0ustar multixusersII* P8$ BaPd6DbQ8q,s5 AJdI#9b_+-S]hqԭ^uF}V_5iC<y2Ze F0B6W.ǻ&`'R?%MDɨdcD=v9WŇ!MnQ&>%H:a'eR!fP["lAwnC40!prĐQ7<1AtoN \u!- Đ:ÒHU(pj,10I"Qv&,HbI`$ xa)fr-T@@l ,ˁJK.PZCp& 'LW|7"k(DFREĈ8F4 (.p b0d3N&4lA눨d?H`]s3Lc@ 0,*(G2:Dɝ3$l͉YA-Ch08If+cZ%,`͈0a m95+- L*.z UmJ?أ:4&|ҢSFD( P 0EAh dd>1T h@خAjRY4G0JT-8|8  6ItFԦHcF v+,c`h/tbSPȻ(E4{@7)*e`E1 X>T!  Wjъ^D-ajLl*c1(uD !db,R eC 5`hyҬc)WpVD?P/}DhcXjjTa'4`Xb0X(}RAV@ě?,. 0WR]PbԓBPT,9K 58&axp*p hzOJENˈT c!{ WBS}3̬Q"M^1mп}:X{@fkJj,B0J=A7.)z ޅRm*8x-4cМLCuZ\.r̸2 )CDCd:!AH}pL@m47BJ=cm[vL:BH:p-h^5 C gW;[30Xà& CXFyXt\ƸSF \'&>]p+ܼng(e0B $QQ 7Q6&T `+~xO53Eik;m|VjJŌYgqH" e棭NEˡ'x_έM+H1a].)aqXP D C}CnN0 jtf+p^؟20'C$$y᭓YS ЬF>X0Ճ0Ձ›`娌@t؅Es$=<`'"hx5 7`rzWGs/iC2[\ݶTk?'clPN"A>H `&cn, OkYv&l#cH \@r 0RA^ a #ʰǬ^^Ta B6&H6,P礒 l(Yrq bbbl#鴀Q@K8K!x n`g]K/}< @F `L0/^,Ag`F f$bvA8rhH!v`>`<.CR^J``+.E(JHшfS`e$If @&0lk FmA|ĂhHr> B 2FƺJhzrTr`NQRK!V K`Ql I ʛœ`&Wk;+/ &(xr &Ž|aFm| |!fhs#J:@9&!D".K~O> GO'' !-B/B[!42vra:Hf[!>j `8 "Dr@^!,X 1XmD G7-rsQ [\& '&tx R  lhX ^a K .q3 s938-9s:&-H=:S:4; z6ⷾӟ t:/d\>0[M`~awu,OjE{ vgi"Q yfQxFK p4Zu-lwZGfGJA6=g<=̥)Y 0@0QZN<"SePr! qor#Y{3''R~' ncaU19OTUUՀ %^Œ4 ‰~JA bXȕ˜$hRٶ}hYQ%djL!o}%xcd4 UPUAC|g~VVu]MvaR l.'8(y1:m]D ~A{\'WxMG2@9 PQ",ߨ~UCp ǶxQbDˤ! ǒĕx+7YoqEt\'a~7i@HfAkae VGzO 1d2[i=A|:H(YO!C 5P"U]TQ!tIWKQXQ9U<_?Q֋G <hXR7(l\q\?Ð>KCQl9Bؔdg.aIn2XϔÔTPִV;p Jһד#^=})c WaV p ^lr\q>mE MpTbuE7)bn8{d-+@i%~)lg-̯rƐ¢PHƚV X_V?àVUCtR6LՌoU͸ւR4 E|$=1p+&b(2  S6.p_jeaVmMC %2j X *hra'MivC` 2b_5~* q`!6j|B=LȒTgi 5 a?cix\c A)ld>X{lp(ݐ6pô x3zN @LBڏShEkgC޾Ւ>v |.6 T`Wa>HAXtt&](YеDT ~*xh  V <Aj  f`fj` uaQTŌ d .l ~WQ d8HǼR>e PեAB[!* f) @J*aThA^T.\A  Pps,LF,Z\w@!Hm*L QT.!,ώ+ldv vZbJP[ ;~",` ,lUTei;@1AF* $ N4QATe r !r!!"2!*Kэ#ZCQK~$$2E'"7U%2Xؤs%_%W&Ra&rc&m'2Zb01}R҅((((r()қ)2)RL#?*+ +PA++2+r++,-b--.2.r../2/r/ 00 b  ( (R ' 'gworkspace-1.1.0/Apps_wrappers/gedit.app/FileIcon_.h.tiff0000644000175000001440000000647413214346535022570 0ustar multixusersII*v P8$ BaPd6DbQ8q,s5 AJdI G'ZPg<4'%xnRё0olHL@rH8+6"N&t O9Wur~ͯYbM&>``Y#q̏FBQN? t"|(-q|RbCx!Biĸ9r"p2R۩^wFʇPRf93r t,Gubi?H_H&#ؘF B `xЁwh3r8Gf 62:K0,n80)Aj 4A2(q]q,tKQ*FH"`r\D6KL(3s b(@JmA넨CpCD" fad Tj)F8.GLٗ#dLP--(E d0s" F<[Nh9-I2:;QvǶ:.bT""LX :EF #E9P?ŀ2|  ЅהdPJs ^ ZbHڛbhH@)W>+ ,\KI豥L:Z EhVe(=hہ&)*Fŏ# , D=I?_YGU$l 5:niO.Ft\S]+ܲzf(e0B DQ 7VQ2&T `+3Kؓ*N{E[F[KT/P,dQ3A?Ād#('4ew`-̊.MA;K7-*cP61_.),& jMM#Bz2؁ѐWk#CG^s"|2B ĐIM%Lx 1ز8_F;P?aMr :k"ah4 [OVR ˸9~4!-k*5⓭y2(Ac %0B9۳"P 0D`hvjnYukH 2u4 g* C/z̛  >jd(T,t(A#jµB lA$Xpq^bGdbvnHETo!|jLfub\O.Xxl ^ G"a!`F f bAvkc!~wz`h) G8<J̴a``kg*ŮHmކM+fLHQQatqHrbvlgplHx hdBs+!*EI `>+emDjl$s  H &F%&BdFmt |fhs"BJHɀ9%D,$.K.~@OP '[o~a.g"nd!Jef@a$G46Z+`t2M:OVd\bms!~\@϶nm4 NJc2 " sy83'| 8s9(,;9S99::5&ˏ;kι&;<3,>M>k>>s>>?3@3@T&"A)AJAA!At%A'A+B4)C4-CT1&ƒCAD4EDtIDMDQE4UEtYE]E` 00$ m , 4 (R ' 'gworkspace-1.1.0/Apps_wrappers/gedit.app/FileIcon_.java.tiff0000644000175000001440000000616613214346535023260 0ustar multixusersII* P8$ BaPd6DbQ8q,s5 AJdI!y"fY\WUvt;F2j{hM\E G*# 1cmP[I5L;ULN VNu|w}XfNEKWFpiJ0Z֭j!1,biqܷUϗwA}LX>~yga*_)U ꣫p)<0ja}:޺떩#P|"lPX6i$۸ߗE ^aJ"[\=1@qzt= :VŘb~F[n,)!6yS!X:G8dL= ;?xgAIX-: 1X8Vid,(?2U/[1~-s(}"\ нūG8 8}àYX*u *ȉ#"TLdh1x Xx)qhTW+br^Jweh k %LRIQGKy=(jqW2Zys/,L11Z ə D1(C,3-&0QMp eyE$d"Q:+ԷʌU=&!$44puY !6QYm`?ƸjL- 7ByalXqlT˚6%tGF%hȩKD)Q"T6PX PlqKAȾB\SaÎ`xxaS;Z=Xh!VMZ d 7-4ҁ`ƵB@xpIDj*hZdH8Y*BU4^;"B9@+~+IZDaEA$L B@I%W`HI*$Ѡp-: 6Z ܏G@Kh/!5{Ozi<"0!0{=&px |3( M1G7زN\q\ŪA\;(s 3dG$E.&ٮ^OA*Al`l Ehƴm.EER@U+~l;a/,Q SgY3[KvppQ4A& RLS . ȥ(_[TH jI^%}dj /px!YjIH6(:8BB@Q$p_D.z &C|Tऩ˜tf U5ه iTLA? JIg*4SOA'%~v0 2lt!Dи"h^7{S)X2l< ^CWcK?F@Q*2 ,`$ہBdF=0F89haZИ- k C3G6"fZ9{;oN4AJ| kViv|~{@j 6 ~~? >/k=kRF@A>ѥtP!n aFD lDdbjtT  ~ R jl`g"lf>[@k ptT@Z di{ J&zB B/a&Z!| `E^Aj  f\O`f{ !AT q. ~K ~ fohmN,ܠAn*BA>PA anOj`  api1i!F)&(\uGHttfѼ.hƱr![@|fDQG  BC+ , ~Zb!?! + -"#r;#m$=$(nf #IDȃ1 ATQ2i&k&rs&u'}'''r'RP)HDXqNe*#" 4*sr+,,2,r+,Rқb0ܨ2M.2..R/2./r//-ac0 1';11K11!2s%22#3 093=3A43E4sI4M4Q53U5sY300^  f n (R ' 'gworkspace-1.1.0/Apps_wrappers/gedit.app/FileIcon_.m.tiff0000644000175000001440000000647613214346535022577 0ustar multixusersII*x P8$ BaPd6DbQ8q,s5 AJdIb ^ %cloЊArԨ|gt ,.G%!.goYEFvte!d%Q[JKY-ŒrS C3T<Ć9щ>fxdAhtAcQd!% O/Hr:HҔǩfwP-T2sP1 L5T;3D3LY=svc tgYggHr^8n]oH!P1.eDn9S&J#s]XpJ$2sU/UVճEaXxe?`t`Y8i?xduji}%ba`ũWE)CdnU'pR9 F.jF%FhM:4N c<j4Yʱ,@^FH}zInG=RK %8L"Fۡ# F*xS*eD~V9ANhbU1cH[X0m´1 [IKFXYqQ PMbqBq,{ʩLk)EZؔ?xK5a$BHU}?h0tb$ ex} aLT cK"W5^WBFذ2ƕp bpDەr.-"Wp,nY aP/~D=@iOܩ m@Uɥ 5#t<[P$ '۾?7T!x AlԱPCnoViAB0,dlM_(w`g4uw$1xPS"P#%V]-^^ %@o8S:D7'|`uPqb=Y-F0K~5l `_H*nA$ ;}1*#t/qh:)Du=OFH$`3 E0Aډaz<#KceCP+AX MAc /I{,|TǨC4+#9`"t09j6!l\V`0?@zTkՐ,?ØqxL21B[):`:q caxT)B`>a ŅjkbdklA~RH @[ \̜ >jAMp׏.TTa B62 K0l<ڽ"@lA(Xtr0Gdbhcw%nhHAEfPB|jRfmf'8A< @F p,A*@lPb&&k thHAv6̀NгdkDV-l[J/>H 0MeFPI!f )R@a&0lllwA|w~ hHs>@|P^mvr Tr Xobq`[:;!fE 1 lq@GI)LduBqh (q H !1Y m j(f(RLj`nQp22Ȳ6l80K<ˆsa$X v)q'21ca@.g(n~Jh f`̃ u^,Y1`!tO- Nl!(-c\ma!$ s`o ^@ c3-888Q'S9s'9:b9@;3m;hs< >>?3??t?@@킂Ayt#BtB!B%C)B9C4;Cs>tEDtIDMDQE4UEtYE]EaF4eD00& p . 6 (R ' 'gworkspace-1.1.0/Apps_wrappers/gedit.app/FileIcon_txt.tiff0000644000175000001440000000435013214346535023071 0ustar multixusersII*" P8$ BaPd6DbQ8q,s5 AJdIs9U^ r?ܾ7 {}7#<H@ p"J1R#rYG1 (< eĎR溦T睮qqwyr 7H} J9' BOyw猵#I*g/'C8@:Ҏjsn+;*,Ώ4,j0L|΍)KAMAvD#8Jy#Iԙ#S˭PI;]Fv0,]ڹ# G(S!aԁBLu‘#˻™v2\_p u] 6lhv=hX mX<"P\׍KPIJMJ)<ϣZJ)RA@Tb׮](=T OPsPPT*u]"Buvd::0c1VgBhD9x=ePJk+_u^ye<=M7}ɏGmشiSSSLOO~,Xi|` p831>+V8J|.*ОS.71=@u&Ê-uᄏ5u]ƈF<|kg$Iٶm]]]<~p\e~aUl) E"Qt])Nu˻͚5kؿ- C}B˲h\&0?;z<#V Q0 RF*aW.={B뒅?m݆7GbjrMa̕*M4M 0CfWk"$ibrTyX0:J&q+©Q=^|i /g?YK/D{{;D"vɓ''qi<|'rm?w5D9-iPg Nq8ݷ~kyd1j X,\?Wn7<޽'|WQ.['<|_dʖ-[x+"`U$I֭[G?xxo@b~PSE |}.U*[ӴRj l4x{KξSB?)fye188)رմ70RqXf obB4rry^֯_{4 LD.- '}As0-KOw]X"Ҟ%50J1w/~3 .oi1 4Ÿ)wP4(J)~/Xre#f@naa7xd2=01r6U% }D4H! 0;p.<1A]wsi­A)Ϟ4>BݟuϨT<\q#cc%xb;{T*s߽\.33=ڵkey팏O'= 5r8eP¶v-`o4 )ԍu1v(.zn_2ICCyfVZxM4R6RbJhkGgΜe>? _Sǎ` -.W( l6KGG}?Ҋs\>Ğ, sg>0Nuu?qӔJ%^~2<۶3hzTJ! I"R.]g~c< }1@Ziʕ+[xӦMlڴ Y38yoƀ+&'P?zHH@kR),akx[}PP8> OH3A}.8hKu ~1#H[\Ni}Ve4MCaW*L=nkR @zh+ .CoBiJAltņ y]m=/8pH5D#`llUVq0PpQ C > ۶o~JKܚz_7h߰a\oB̾.V.p{_ .^Dn{lrs;RjZ%Eq  <ۦ8րű1.2h^؋O v_}D">O177G8"O4ʑcZ&]JlǡXXq=BRqDRٳ{]P <j7o{k=g>CVC"333|ĉE޺_|uy9x mmmt#ĮרWGjFtcRʹbR0MӦYS%b=-5щlfhQ[zhhU>xxppױ9~zRaxWZZJrsJ"$ ,+F:ZMG4CA/ %T4^A4'@P.Yj֟=Mm%"lXQ(Jy!vvdY sxe\e||ff瘘xIp@R$)(d+E&!}P,xaqn.'v0W hX+{nvMӚeE1 +!JQUYS(Uu,?h+} _I\K:ŏlΙ4,g F#, i+?7kw\e(^E}ײ%p Ki7 *s>.K*IENDB`gworkspace-1.1.0/Apps_wrappers/ggv.app/0000755000175000001440000000000013214346535017315 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/ggv.app/FileIcon_.pdf.tiff0000644000175000001440000000772213214346535022576 0ustar multixusersII* vvv\v vv9 v "v" v vvv9f C \-\\-\\\-vv9- C999-fv\vCC 9Av\9vv9v \--99Ov9v C"v 9\ 9p\ \v\vC \v99vf\vv9vC 9v9v9999\\\)))CCC ffff---XXX999\\\\))))CCC fff----XXX99\\\\?gLXC))))C C ff-f-X-XXX9999\\\}[X)CCCC ffff---XXX99999\\\dp2))CCC fff---XX99\\\\gczAf) C fff---X-XXX999\\\MJs72f fff---XXXX29999\\\\e <[2 fffff---XX299\\\\7b'q r2f7r-f---XXX29999\\\rPt" frf---XXX229999\\57 f0A- -r7XXXXX222r99\\\\[))XII`-ff-fXXX22r999\\\\ CCCi ff-XXX22r2r9999\7C))CC{'K'3X----XX2222rr99\\\\\CCCC$KK,`X--XX<<2r2rrr99\\\)CCCCCI @KK,`-XX<222r2r\\\)) CCCC%'HD7_U!!*r2222rrr\\\\)CC `c'P7I7iEKvr2r2rr\\\)) fC jYk~]4B 7hmo/rrr\))))C72fC ? wl p&nI7To.A2rr)))C2[2 fK;<p=Z+MHAr<\))CC)Cffa'yNu7FYHr<))))C C 87|YuAXXX2AA<rr<)))C)C C8]x 7G;XXrrr<<)))C)CC1Vn@vX` rrrr<<`))))CC W6:R#`XX7`rr`r2rrr<<`<`))CCCCC g^ns`[<`22rrrr<<<<``))C)CC fSQIi(Hr<`r`rrrrr<`<```))CC f /AXXX2>ffڦ**~~ھVVvvƦFFֶⶶzzrr22vvVV^^^^ffjj**::ަBB::ަBBNNbb>>BBBBbbRRff&&66vv&&BBvv""VVRRvvbbnn66**22 NNꚚffrr..ZZffFFffzznn>>RRVVJJ^^..**bb>>**ZZnn66zz**FF~~RRvvff66VVnnNNNN&&rrNN..ZZff::FFffzzΪjjzz^^zzrr22jjVV::VV^^ZZ&&NNNN^^VVvvRRJJ>>&&NNffvv&&66JJjj>>ff..BB66JJjj..>>ff"" 66..LLdd44DD<<\\TTdd$$44tt$$DDttTTTTtt\\ll44,,<< LL씔ddll,,\\ddDDddttll<<\\TTLL\\,,,,\\<<44 \\dd,,tt,,LL||TTlldd<ēXd˜&=TIbqÍ0p"@^#4fv-GGutC5"@0t(PAhEcFU cu,]sgIˈZ ollIE2rL#Sd/%L^--X%PAw6C/bt# uNlݷG;q,J-ܕķD plY\?9o\\ɓ||%KF \q% kq'+q0sD#H /s3QA7ڈP K;gݔ]90ģx%-ŒPmQ _UKIķ\ '[z|(|)P E1FE GQDEaB @ >^ o\xpJxj:x1AQe+ XDaג mV-B%z  z[ĦP< $oV &4d$4Pq v _;,G;?{-o?|=[|b-&`B&l$j'\aJ |?" D,&zU""|#B(X2 !w`W40 =@9vdP _B I$QxÐF}NF CI^|CϑBbBAm?Yu2[ImFGDE =@LCafmLF {x0; v𖱕J |^8 f1B×@|tk A#(ybb{(bM,  &#ԼeC%}@YƾBO@ĠA E\kRƆuIaZ@``b E$"Qb5%F1PdD`ziLFjۋ\"W~ ;<(4;DIQ +-Ax ^&$;@7?) 8!B-A RԠL(%JR Dhak5Fax 0$ՂP@03 @-D ҖtF$ B RF -Fx Jd E*u[~(DшFEQa5TF9PO6-rI ,, `;>؅]8.ZeHТHR(iXN^qJ=hh-hsH^+b^+>U.$VfL&7zzvvDBjPh̟hh>UX*|&$&@F(YlC-pLGh)LXy-_ĆtԃV(2pJlk("hB(z ~OHO!jvjb5F-n~E4h~p~Nj„mAyb0G9C-p(dXA~ﲇBfqihv-7Uu(lȆJJN*!SUkHhajH覇pv0jGVK,qՂ -؂li^Ch4HlNb`0|ȇzlٚ„l9j -V+{ZVdhm0DNă6BbĴ6EpFV?)@hX6(f`jQ4H9+{hhv77Fh.*LO~.n9zhn!z6@lFbhcօ([-5VVժֆ8诒؄M8t lnHt ȀXj8iAM:zᬆa(Baa9PWXQ++Ć>$bO+Al`l _z:l?Ԃ +jAX(/R<Ց^hGaX؅.A,^m؁&h DW9dph*Q{1+Q+!UxADA$^@A+ Uv+~{OAOIlYjIh(^NG\X8B$b8#5XES(r.(Xu Ղ4rfhyh6X=YPuEl"bP-f鳗酤مDnɂ>92A2(mYh2XG%b3U)؁8 >b#؆m8)/c+鄕Ed؃)O qSuG4^Y؃ hFXiVWu(2(Q-ڊ+8/LX dVEJ-^h=b5C4d蛙YS^n0 ]pȍȐLH 1 bVFJ .,V[HNGKn^$بt.(MXhTXa$Anb/hHe+eF9=aNVH4G .hzbRn<^J~T7J+ႶBmnݚ=tX.^XhX5[Cld!Z6U$O h>9(z鑃c ?V.;~XFXPXpG.rXZxX]vS<聽SmWt5U-[[Ab%b1}vkРC1bߘ1ƍ D6$J4'AqL3{Sጅ6`8tC)I3lٲ%MRB2(˦²JUja4-^FlaKNۺuի>{ 5̶avoȤI?xϞx00   8*/usr/home/fatal/pascal//ps.tiffCreated with The GIMPgworkspace-1.1.0/Apps_wrappers/gimp.app/0000755000175000001440000000000014036261131017455 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.gif.tiff0000644000175000001440000002245513214346535022743 0ustar multixusersMM*$UUUUUUUUUcccUUUUUUUUUUUUUUUGGGUUUGGGUUUUUUGGGcccUUUUUUUUUUUUUUUUUUUUU888GGGUUUUUUUUUUUUUUUUUUUUUUUUGGGcccGGG???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDDĄ```---+++KKKVVV***|||ffftttFFFrrrVVVFFF8hhAAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzDXXUUUKKK sss b"`l @l@D8(@@8D@@tt@ @tԀD@@D(0@@eee ɬ ?o?7?_O-^o}/]*z@+e@9-m @2@@g s D D PQ%" 333,L??_o__) o&/Ͳq_@}2j va`a```IPUa`yeb|||333___d+__we_{o&ϭ,``J,l<B*~@q` PI 1qvzyURiiisss333SSS???____7W_ oSCωWZ@IPf :v@@N@^iYpYYypY8yf.2\\\iiiccc333SSS???___www 7'q^&O b':9v6@v@ F` ~~)Pyy%=hYP@A`q|\\\###SSS???___I??_.3]*Y4g9^v@*|,LL:N.q`)`v@yy|\\\)))SSSccc???ooo777,$?_om'_S/=/ lgn6@:|\Z`z8 N&Z1`y|CCCoooWWW,L??__ύ_Wߗ).CznC~22y4eLLz4@, 8x<*EIII###oooɬ ?߯?7wWߗ)3wu r@CSTyh1& v1M@,:`TLV@ @###ooo///OOO,L?O?W߯_w_W_)O_fo@KSdCL (YPQ`N&@&@Z:j>@#8*ccc###CCCooo///OOO),?_oQkσ^_pbB2 #}Yu(u(M)ev `#Z@ ###CCCooo///OOOggg),g?3 oSM2oa޸0??oL|KKlXy)(DGXZ@CCC///)?/_gkAoVe,4o__?j?:??p??ߪ/M-0T;t*qqq===CCC}}}///www'''O___) &/ͲioѬ__?:?:R0bp??j? =x90Z@wwwGGGoo/]*oq X4_߶߶6Zn?vp?pǤe|ǤZ@111]]]===OOOwww,$?oo=߷_)ﳎύ!~7Z@Nh.X^TT΄_ߦ8_n_ߦ8P OZ@lll111===www777WWW),?/?OU_ߗi#F/MDhn ?._tTTt_ߖX??j2pM D+*lll}}}===]]]www777WWW,L?_?_?o_m_e{ZO bq_'_&XT>>6x?FR0?2p?-82lllQQQ===]]]www777WWW{{{BTT8h!ؠ 6* z`F`V0606060F&z `z z` <r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.gif.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.jpg.tiff0000644000175000001440000002245513214346535022756 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUUUUUUUUUUGGG888GGGGGGUUUUUUcccGGGcccUUUUUUUUUUUUUUUUUUUUUGGGUUUUUUUUUUUUGGGccc888UUUGGGUUUUUUUUUGGG888UUUUUUUUUUUUUUUUUUUUUccc???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDD```---+++KKKVVV***|||ffftttFFFrrrVVVFFFhh8AAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzXXDUUUKKK sss  @@2@@B@@llD8@@(8@@Dt@@t@@ t@@DD(@@0eee #s5ɿEҿ D?_ +e9-m _ggs Q%" 333cヿM]ֿѺ D?}2jvaaIUayeb|||333___]ſ͡ѺN0J,l<B*~q I 1qvzyURiiisss333SSS???___-3#Mٿ5]՞VIf:vN^iYYYyYyf.2\\\iiiccc333SSS???___www-ÿcUEѺܿg9v6vF~~)yy% =YAq|\\\###SSS???___meʤP9^v*|,LL:N.q)vyy|\\\)))SSSccc???ooo7773Ϳ9-Iƿ>zPn6:|\Zz8 N&Z1y|CCCoooWWWc]]HC~22yeLz4,8x<*EIII###ooo#//텿5ɿ]:CSy1&v1M,:TLV K###ooo///OOOcsՉ]aK8SC YQN&&Z:j>KK*ccc###CCCooo///OOOCÿuſ塿οʿ4h? ,4 K}YuuM)ev #pZ ###CCCooo///OOOgggCkӿýE՞z$KKPKy)KZCCC///-ͩվƿv"&fVVV/ML-(;*qqq===CCC}}}///www'''-#5]ѺfxNfN"=9NZwwwGGG-ӿӃuſm͡ҿ*ڔl2h?fnVVe Z111]]]===OOOwwwヿ]ּֿvAN ROZlll111===www777WWWCvJx ?AAnvfnM p+*lll}}}===]]]www777WWWc/WsͿſ~ܿ D?DP'Vv!!nN- 2lllQQQ===]]]www777WWW{{{- %yi~>6* zFV666F&zzz<r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.jpg.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.png.tiff0000644000175000001440000002245513214346535022762 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%.N.,l,5U5,l, @ @ 6v65U5 @ %e%.N. @ @ @ ,l,5U5%e%,l,5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'G'????;{;8X8 @ 5U5??'G'????6v6 @ 8X8'G'????'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ????8x88x8??#c# @ %e%??*j* @ #c#5U5 @ 1q1??.N. @ #c#?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ 5U5?? @ 5U5?? @ @ 5U5%e% @ 5U55U5 @ @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'G' @ @ 'G'?? @ 5U5?? @ @ 5U55U5 @ %e%'G',l, @ 1Q1?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ????.N.6v6??1q1 @ 5U5?? @ @ 5U5%e% @ .N.??5U5*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ ??#c##c#??5U5 @ @ %e%?? @ @ %e%5u5 @ @ 5U5????5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ 6v65U5,l, @ 1q1?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ ,l,????#c#??1q1 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????_??_?/o//o//O//O//O/7w7/O/7w77w77W77W7'g'7W7'g''g''G''g''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++k+;[;+k+;[;+k++K++K+ @ @ ??????????????0P04T40p0 @ $d$(h( @ 8x88x8 @ (h($D$ @ 0p0$d$ ` 0P0$D$0p0 @ $D$(h( @ 8X88X8 @ (h(8D8 @ 0p0$D$ ` -M-3S3+k++k++K++k+3s3 @ @ ?????????????_?4T4)i),l, @ 6V62R2 @ *J*:z: @ <|<.N. @ 4T46V6(h((h(&f&4t4 @ :z:"b" @ 2r2*j* @ ,l,6V6 @ $D$&F&(x(!A!-M-3s3+K++K++K++K+ @ @ ?????????????_?$d$)I),l, @ *j*2R2 @ "b":z: @ ,L,6v6 @ $D$:z:(h((H(:Z:4t4 @ 2r2"b" @ "B"*j* @ 4t4&F& @ 8x8*j*(x(>^>5U53s3+K++k+3s33s3 @ @ ?????????????_?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8D8&F&8x8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ D8 r" J2 R R B, |4 l$ l$ t( d0 D X h X D D T( t( t( t( t( t D0 D D X H h p @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ C=/?'?3?5?)?.?*?"?$ _# K. e N Y M2 m* s> _# g% O= w g> sZ sZ sZ I8 Q` e B @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ c#7?'?=?%?1?6?:?"?8 _# }" V R Z j F z ^$ v a a ~ a I, U< a y e b @ "B")i)3S33s33s33S33S3 @ @ ?????????_??_?/O/ @ ]-+?#?-?%?!?&?:?2?4? 7 a J L l \ B J ~ q q I I q q v z y U R @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ M5#?-?9?)?1?>?&?*?,? W5 I f z v V N ^ i Y Y Y y Y y Y f n e R @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ M5#?5?)?!?.?6?:?<?( g% Y$ v V v z F V ~ ~ i y y E ]4 Y$ v A q | @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ m-#?=?%?!?>?.?&?2?$? g9 y ^ v j | L L L R Z N n q i A v y y | @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ m-3?3?-?1?!?!?&?2?4? g9 n V z | \ Z z d0 x p D l J N F Z q y | @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?_?/o//o//o/7W7 @ c#'?+?5?1?1?)?.?*? 7 c< C* ~ r l r y< e" L z$ T l X x | b j i E | @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/'g' @ C=/?7?#?%?)?)?&?"? g% C: c< y Q` f v q$ M2 Z | l Z B T L l V u 0K Z @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?_?/o//O//O//O/'g' @ c#/?'?#?9?1?)?:?4? ; O= K< S$ C$ m u Y Q` Y N F f Z Z F j ^ c c J @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ C=;?+?#?%?!?.?*?(00 _1 g& W> _1 g& K* C } Y u u M I e v I C s< Z @ ,l,)I)=}=#c##C##C##C# @ @ /o//O//o//O//O/7w7'g' @ C='?3?=?9?1?.?&?"?48(00(0% o% w [" w K8 K8 K: K8 { y I K: { Z @ <\<1q1=}=#C##C##C#=}= @ @ /o//O//O//O/7w7/O/'g' @ m-#?-?%?)?>?6?&?4?$?4?0((((0%((00%0%0%( O! M, M G. [: j @ ,l,1q1=}=#C#=}==}==}= @ @ /O//o/7w7/O/7w77w7'G' @ M53?-?9?)?)?6?:?"?,?4? _+088(0((0Q0((0% ) ]< y ) o* Z @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ M53?=?%?%?)?!?:?2?$4?(7(8$8((80(0%$;00 G: e ) G* Z @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ m-3?3?=?=?9?)?6?<?$4? W5(#($+,?$$888$'$;(#8 ) u40% O: Z @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7w77W77W7'G' @ C=/?;?#?%?)?)?:?<?8(3 _+($;$$4$'$48(((00Q M4 sZ K* J @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ C=7?/o/#?-?%?!?*?<?$ _# G)0%8$;4?4448$+0%(0Q00 M, m8 S R @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77W77w77W7'g''g';{; @ R m- M5 y9 y9 i) ~ ~ ~ V< j$ J8 z$ z$ V< V< V< V< f, F4 F4 z$ z$ z$ z$ z$ B( \ r( D @ ,L,!a!-m-=]==]=-m-=]= @ @ 7w77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (x((h( @ (H(8x8 @ 0p0$D$ @ p 8X8 ` ` (x(0P0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0P0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''g''G';[; ` 8X8 ` @ 0p00P0 @ 0p00p0 @ p (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;[;=]=!a!.N.&F&:z:6v6&f&:Z:6V6&f&:Z:&F&&f&:Z::Z:&f&:Z:*j*&f&:Z:*J*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%E%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33s33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.png.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.svg.tiff0000644000175000001440000000517014036261131022757 0ustar multixusersII*D @@ BaPd6?| E"شZ7Hd@V ,S,7 JPt =$W 6&Ӛ O?OJ+MAv6͔KgUM)o<\@78d]4!lb'v`J86>3?bL5C`Ǭ,f,L/=q d A&`(WcL`3{nT|3d4$ֻBw;p0*ZZI)3$K$`bPP1g`̏w  #S[إ`ĠvDDAGEoŦ(+Zjz,>Wx2z׭;D2W B:.Rcc?X}ڻ2>)kӉH z=A8+4^ʽ;@Z̰@TRrZT_an7~igX*p֠$[3ĩmV{aeR7%`"E/^Sŋ^ĥmf$R1q<&ނ(LF[9`^mczJ2S*a"֋<`,6ʧj !+\}X1}x?dbiopK?t*p&Sc[x[jwNg &ŕBHϓr$Wgf~KF:%iMqߵp#xoPxQ紐 Z5HD 82)mlZRhr'$=ݶ5%[UjzOэda2J d[\WfӪ+\KVZyls2rcގTVcn);Wi",ľ-R-,h^uwaũ˒Ǘ=27ڴy+'y UkѠ;:\g6/:^.WعCY($׳ Ÿo;T|G?[M+T<оQO܉xgOk~ :T0 00&  L, @<   (=HH/home/multix/code/apps-gworkspace/Apps_wrappers/gimp.app/FileIcon_.svg.tiffgworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.tga.tiff0000644000175000001440000002245513214346535022751 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,'G'??5U5 @ @ %e%5U5,l,5U5,l, @ @ 6v65U5%e%,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,'G'??%e% @ 5U5????'G'??*j* @ 1q1??#c#3S3??8X8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ ,l,??3S3 @ 6v6??*j* @ 5U55U5 @ *J*??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ *j*?? @ @ @ ??*j* @ *j*'G'??5U5??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%?? @ *j*??.N. @ ,l,??*j* @ ??#c# @ 8x8??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ 5U5??*j*8X8??'G'*j*5U5??*j* @ ??#c#*j*5U5??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ *j*???? @ *j*????5U5??*j* @ 5U5????1q1??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N. @ <\^>5U53s3+K++k+3s33s3 @ @ ?????????????_?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8D8&F&8x8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ x J r r b B | l l t d D X h X D D T t t t t t D D D X H h p @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ C /7/7'#+5#)5.1*>"*$(_ k e v y M m K (_ 0g 0w 0w 0g s K s I Q e B @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ c /7/;'#3%3)%6):>"*8( } V R Z j z F n v Q a ~ Q I U a y e b @ "B")i)3S33s33s33S33S3 @ @ ?????????_??_?/O/ @ ] 7+'3;-+%#!9&):>"&4( a J l l | B j ~ q q I I Q q v z y U R @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ M '#;-#9#1#1->9&1*6,0w I f Z v f N ^ i Y Y Y y Y y Y f n e R @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ M '#+5#)=15.%6):6<,(0g y v v v F F f ~ ~ i y y e ] Y v A q | @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ m '#'=#9-!->56%6!2*$0W Y ^ v J | l L L R Z N n q I A v y y | @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ m 73'3;--1=!#19&!2&40W n V z | \ Z z d x p D l J N F Z q y | @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?_?/o//o//o/7W7 @ c /'7++5-1#1#)56!*( c C ~ R \ R y e L z T l X x | b j i E | @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/'g' @ C /7/7'#+%#)319&&"0w C S y q F v q M Z | l Z B T L l V M 0K Z @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?_?/o//O//O//O/'g' @ c ?//7'##9=13))&24$ (_ 0K S C ] u Y Q i N f F Z z z j ~ C S J @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ C 7+7+'#3%=!5.!*,(4040$_ (g (W $_ 8w s c } Y u u M I e v q c 0s Z @ ,l,)I)=}=#c##C##C##C# @ @ /o//O//o//O//O/7w7'g' @ } /773'=#9=1->):."&4*8*(2020:(*08_ 8w 0[ $O K 0K k 0K (G y i 0K (G Z @ <\<1q1=}=#C##C##C#=}= @ @ /o//O//O//O/7w7/O/'g' @ m '#;-+%#)=!9&9&:4:$.4<0<(:(&(:(*0:(:(*0:0*0:0*(8O M M 0G 0[ J @ ,l,1q1=}=#C#=}==}==}= @ @ /O//o/7w7/O/7w77w7'G' @ M '3;-#9#)31%6):>"6,648 40&8682(:0:(:(*0:0*(&(:0, ] y *0,_ Z @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ M '#'#3%3%#)#!)&!2:$&4<(2(&8!$&8&(&(68*0*(:0!$*0*0(g e , (G Z @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ ] 73'#'=;=393)%66<*$64(O 2(&(.$1,.$.$*868&8!$.$:(&(20 u "0$O Z @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7w77W77W7'G' @ C /7/''#+%#93)):."*82(( &(.$14.$!$!4.$1468:(&(:(*0*0 M K 0K j @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ c /o//7'#;-3%#!!26<*88 0g :(&(!$14!414!468.$*0&(*0:0*0 m m S R @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77W77w77W7'g''g';{; @ b m M E y i Q ~ ~ v J J z F V v v v V F f z F z z F | | r x @ ,L,!a!-m-=]==]=-m-=]= @ @ 7w77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (x((h( @ (H(8x8 @ 0p0$D$ @ p 8X8 ` ` (x(0P0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0P0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''g''G';[; ` 8X8 ` @ 0p00P0 @ 0p00p0 @ p (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;[;=]=!a!.N.&F&:z:6v6&f&:Z:6V6&f&:Z:&F&&f&:Z::Z:&f&:Z:*j*&f&:Z:*J*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%E%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33s33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.tga.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.tif.tiff0000644000175000001440000002245513214346535022760 0ustar multixusersMM*$************************************************************************************???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDDĄ```---+++KKKVVV***|||ffftttFFFrrrVVVFFF8hhAAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzDXXUUUKKK sss b"`l @l@D8(@@8D@@tt@ @tԀD@@D(0@@eee ɬ g~aafa!2!-,:q>A 1NΡΡ^*" 333,Lga^aG6a˪! !m,a!nnnnnJJʞ^F~Jb|||333___dgAag~a'aa[*! !5ʞnntnnnn^>nnnFRiiisss333SSS???___aa'aVa&a;aZ!!2^n>>AZ~nRF2\\\iiiccc333SSS???___wwwagaGNaFK AB! >:bB^^V^ |\\\###SSS???___Ig᧞aG6{Fa:aj*!l:nLnnnnlnnR^|\\\)))SSSccc???ooo777,$aga.FaFa[J!R!>bnLn n|~nDnn$nn\nn|n|CCCoooWWW,LggAa'N&a&aaj!!AnnnQ1TDnnnlnnZIII###oooɬ aga6afa*#b~Q>n>fnnnnnn^@###ooo///OOO,L1a'>aafa{! JAa%!.11^*Z|nnnnvA*ccc###CCCooo///OOO),gag!aaGvk2!aaai~)aqva&&f~nvNZ@ ###CCCooo///OOOggg),Qg~aaGVa{aZ!c!͜aaEyTayy!A1IA. . nQ.q^A>AZ@CCC///)g~a'aGva{ak*!J!l!a5a4aᥴa94ٔ4YY9ٔa9!f>ޑ*qqq===CCC}}}///www'''agaǮaafa{˪ !!\a aTa aUE4ya44iٔ94Y$V!:Z@wwwGGGaga^aGvaGvaa;!K!!!mtaa laUaaa aaeaea,Ṕ>aI$>aZ@111]]]===OOOwww,$gaga^aaVa{K,!\a4aUta\a5a5aUaaa,aaaI^aiAZ@lll111===www777WWW), g^aaafsr!c"a͌a4$Uaaa5a5aa atᥴ94If^Ρ*lll}}}===]]]www777WWW,Lgg1>a'.aGa[F!ABm,ad>aat5uua ayaEi^~A2lllQQQ===]]]www777WWW{{{BTT8h!ؠ 6* z`F`V0606060F&z `z z` <r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.tif.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.tiff.tiff0000644000175000001440000000705413214346535023124 0ustar multixusersMM* f P8$ BaPd6DbQ8qV,cr5 AJdITE+̮F %J㨏<@%QoE2BiPP2°cD_u;TU%DiҽI+l4B0,l lvM ]w q~8K{}D !ܮ\v8TEQ#EPTBo"Ll[ Fl=MK1Ϻ0C2e#PQU6eU"+UD_agQýD80Fx^jѶ +#-EJ2AF|%]?TSo_er g{MBTD8+V}aj+@ Dl!:/J |l1 1q*ED D+dB 2.CDaGA=Fڜl2!z l(1(1ԟ)p%IJX‒?Xi .pRJ#a\Rw'%wyf %pQV" @&$@%[QQ4X!"x8@0S,"@V?7 p@"WgM߅rW%+V?2Ҍ8uD 3u6F`&?CrҲ|9zC@<l _a OD *EdG h٨#hZgc9%vHya A,M?#eNx0F #a$TlwR`}M2n-$Tt2[SLPbN@*@ ̝l2%qFuB0*qUZJaa!҅(8c5x iEe2 q!/svo \㜠N)? wA۴n+PBƸTCX@! p2tѴ ejG8aae%D20å4o,Y8$3MΐHZ&xS@bT lL$7h[u8@*!⢕#l4j!vdJ6PC1Į&3N/%JeuEr98&.)݃PYu} N"Uu4 @?q^ ʈO v?+P6Hp\Jq<Rix%t!Y`'?}TMWPq.DkU`f9T6B%e(r2՗qRs G`,Œ 樀a[2vKJ9qj h7x?b4 aX<]2HB6 ^VI@<x%~8Q#\;w@ᛧ(g"XE2H?I+0+FQT:?MUi+OJLhm#PiMpinMYF 2S5}>|=xo#&, HRg, i1EEWTS^D6(v_$C5m-p ˯7"MI_Sa@[8Pf 쬰F®:'Wx1xبJP.AF֔:Α{cxf޸WpNt|+7 SK8 {7c̠t PR %uǝF/*jY[,g%p. T9 "!ܫuWrr"4#y܀@64ܲNxdLa LE6z<Ad%DaFlfc"<”dπI,m2 bB@lJtTDFPާ2'dġd d lOf>AL hL1 ` h @c P Ħ P0*p($A u NeDd@`䮗dlLXn!GP( 86Pʡ]ϘZkP4nrtSqf˱ +"@d򞇄pa 8JF$""2P!"@_-QQ9%Soy|R@P R 3" 3`D3tQ# YA:a-F3Lq!` f&GiM5"?R?a$`hYpznT7r <3  | S CDtUE35LLEt[EaFSI4kF`b>4;IOP#PPTPPpѢ(6/gR RUR5-Ru/R1Su5S)S3T9TU=T5LmCmUuUUU_UͯVgVUiVmW5cWukWU5X5XuXXY5YuYYX"00 ]$(R ' 'gworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.xcf.tiff0000644000175000001440000002245513214346535022756 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ,l,5U5,l, @ @ ,l,5U56v6 @ @ 5U5??'G'6v6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8X8'G'??8x8#c#'G'8X8 @ 1Q1??????1q1 @ %e%??'G'.N. @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??#c#??,l, @ 8x8??1q1 @ 1q1?? @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <\~>-M-3S3+K+3s33s3 @ @ ?????????????_??_?/o//o//o//o//O/'{;;K#+S#;[;7W77w77W77W77W7'g''g''g''g''G''G';{;;{;;{;;{;;{;;[;;[;+k+3s3#]->n&!~.:z:%e%3S33s33s33S3 @ @ ???????????_???/o/?_??_?/o//o//O//w77G;-U9-M5+k+7W77w7'g'7W7'g'7g''g''G''G''G';{;'G';{;;{;;[;+k++K++k+#}=!~66f*&F:*j*%E%3S33s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O/7w7+k+;[;=M%%i>5e)+K+'G'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;;{;'{;#}=!A.6f*:Z2$D$:Z:%e%3S33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//O/7w73s3+k+3c#%i!1a6)q!#C=;[;'G''g''g''G';{;'G';{;;{;;[;;{;;[;+k+;[+5U%>^&6F*&z2:j"4T4.N6-M-#c#3S33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//O/7w77w7;[;=]=+s35E))Q.!^&!A65e%;[;+K+;{;'G';{;'G';{;;[;7W7'G';[;=]-9i1>N&6f*:z":j":j"<\<1q1=}=3S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/7w7/O/7w7'G'=m-+K+=m59I>1A6>N:>n&)q!-M53c#+K+'[;;{;'G';k+3c#%e%)q!!^&6V*&F2&z2:Z2*J"*j2"B")i9#c##c#3S3#c##c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/O/7w77w77W73s3;{;3C=%y)9Q.1~6!n&!^&)Q.)Q.9q!)I19I>1a>>^&>N:6f*&F2&z2&z2:Z2:Z":J":j"$d$2R29y9#C#3S3#c#3S3#c# @ @ ??/o/?_?/o//o//o//O/7w7/O/+K++K++K+;{;'G'7W7/O//O/7g'#}5)q>%y);k+/w77W73C=1Q..N:&f*&z2&Z2:j":j":J"2r<*J<*r<2r<8x88x8:z:%e%#C#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//O/'g''{;=]=%E9%y9=}='g'7W'7W7-m-%y9;k+3c#/w7/o/'g';[+7W7#C=!~6&f2&z2:j"2r<2R,"B,2b,"b,"B,8x8(h("B"!A!-m-#c##c##c##c##C# @ @ /o/?_?/o//o//O//O/7w7'G'-m-!A!&f&2R2:Z:)I1#C=3c#*j*4t45u57W'?_?;{;9i16v65u5+K+1A6&F2:Z"*r<2b<"|,<\4<\4^>5u5#C##c#3c##C##c#=}= @ @ /o//o//O//o//O/7w7/O/+k+>~>!A!%e%&f&,l,<|<1A.=]-2r22J25e%'[;/O/=m-*j*4t4>^>#}=!A.&z2:j"2r<"B,"\4,\,^>%e%=}=#c#3c##c##C##C##C# @ @ /o//o//O//O//O/7w77W73S3:Z:.N.)i9:z:,l,,\,:Z*9i19i1%Y)%i!-U9'G'=}=2R2,\,1q15U%.v::z"*J<2b,"|,<\4n&>n&>n&1A.1a.!~..v:&z2*J*"b,2b,"B4<\4<\4,l$4T$,l,>~>-M-#C##c##c##C##C##C##C#=}==]= @ @ /O//O/7w7/O/7w77w7'g'3S39Y9"B"^>&F:2R<2r<:j"&z2&F2&F2&z2:Z":j"2r<<\4"|,*j""b,<\4~>.N66V**J""B,2R<2R<*r<:J"*J<2b<"B,^>.n.1Q!1Q!*j2<\4,L$,L$,L$4t$4T$$T84T$4T$,L4^>2r2<\<<|<:z:<\,(h(0H00p0(H08x(4t$,\,2r<:Z*&Z22R",t$(H00P0$d82r2>~>5U5=}=#c##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77W77W77W77W7'g''g''G'+k+-M-!a!:Z:<|<4T48X8,l$"B"4t$$d$$d$4t$,L$5U5=}=#C##c#=}=#C#=}==}==}==]==]==]=-m--m- @ @ 7W77W7'g''g''g''g''g''G''G';{;+k+#C#%e%)I).N.2J2<\<$D$4T44t4$D$8X88X(0p00P00p08x8,L,"B"&f&)I)5u5#C##C##C##C#=}=#C#=}==}==]==]=-m--m-=]=-m- @ @ 7w7'g'7W7'g'7g''g''G''G''G';{;'{;+k++K+#c#=]=%e%1q16v62r24t48x8(h((h(8x84T4"B":z:>~>)i9%e%=]==}=#C##c##C#=}=#}==}==}==]==]==]==]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;+k++k++s3#c#-m-9Y9>^>:z:*j**J*:z:.N.)I)%e%-m-#}=#C##C##c##c#=}=#C#=}==}==}==]==]=-m--m--m--m--m--M- @ @ 7W7'g'7g''g''G''g';{;'G';{;;{;;{;;[;;[;;[;;[;+k++k+3s33c#-m-5U5%E%%E%%e%-M-=}=#C##c##c##c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-M--m-5u5 @ @ 'g''g''g''g''G''G';{;'G';{;;[;;[;;[;+k++k++k++k++k++K++K+3s33S33S3#c##c#3c##c#3S3#c##c##C##C#=}=#C#=}==}=#}==]==]=-m--m--m-=m--m--M--M--M- @ @ 'g''g''g''G';{;'G';{;;{;;[;;{;;[;;[;+k+;k++k++K++K++K++K+3s33s33s33s33S33S3#c#3c##c##c##C##C##c#=}==}==}==]==}=-m-=]==]=-m--M--m-5u5-M-5u5 @ @ 'G''g''G''G';{;'{;;{;;{;;[;;[;+k++k++k++k++k++K++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}=#C#=}==}==}==]==]==]=-m--m--m--M--M--M-5u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.xcf.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/FileIcon_.xpm.tiff0000644000175000001440000002245513214346535023002 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ,l,5U5,l, @ %e%.N.,l,5U5,l, @ @ 6v65U5 @ %e%,l, @ 6v65U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8'G'??8x8#c#;{;8X8 @ ??'G'????;{;8X8 @ 5U5??'G'????'G'????#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??#c#??<\< @ @ ????8x88x8??#c# @ %e%??*j*8x8??5U58x8.N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <\^>5U53s3+K++k+3s33s3 @ @ ?????????????o?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8x8&F&$X8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ $`8*@ 2@"2@""@,"@,<@4,@$,@$4@($@08@ 8@ (@ 8@ 8@ $@04@4@(4@(4@(4@(4@$@ $@ 8@ 8@ (@ (@ 0@ @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ =@#?O??W??S??u??I??n??J??R??D??@+@>%@ .@ 9@ -@2-@*+@!?@'@-/@3?@5+@!+@&3@+@&1@$1@ %@ "@ @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ #@#?w??{??C??E??I??V??z??B??x?@=@26@ 2@ :@ *@ :@ :@ >@$6@ !@ !@ !@ !@()@,5@@ 1@ )@ )@ 1@ 1@ 1@ 6@ &@ 9@ 5@2@ @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ -@?c??m??Y??q??Q??^??F??j??l?7@)@ &@ :@ 6@ &@ .@ >@ )@ 9@ 9@ 9@ 9@ 9@ 9@$9@ &@ .@ %@ 2@ @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ 5@-?C??u??I??Q??n??V??z??\??h?'@-9@46@ 6@ .@ &@ &@ &@ >@ >@ )@ 9@$9@ %@ =@,9@$6@ !@ 1@ <@ @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ -@?c??}??E??a??^??v??V??R??d?7@%9@>@ 6@ *@ <@,@ ,@ ,@ 2@ :@ .@ .@ 1@ )@ !@ 6@ 9@ %@ <@ @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ -@?s??c??M??Q??Q??a??F??r??t?'@5.@ 6@ :@ <@<@:@ :@ $@ 8@ 0@ $@ <@*@ .@ &@ :@ 1@ 9@ <@ @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?o?/o//o//o/7W7 @ #@#?G??K??u??q??q??I??v??j??`/3@"#@:>@ 2@ <@2@ 9@%@",@ :@d4@,@ 8@ 8@ <@"@0*@ 9@ %@ <@ @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?o?/O/'g' @ =@#?O??w??c??E??I??I??f??B?7@#@&#@:%@ 1@ &@ 6@ 1@$-@*:@ <@,@ :@ <@4@,@ ,@ 6@ 5@+@0:@ @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?o?/o//o//o//O/'g' @ #@#?O??g??c??Y??I??I??F??T??`;/@3+@"3@$=@$=@05@9@ 1@ )@ .@ &@ &@ :@ :@ &@ *@ >@ #@0#@0*@ @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ =@#?{??k??C??E??a??N??J??h??p'?P;?@9'@>7@!?@97@!+@:#@0=@09@ 5@5@-@0)@ %@ 6@ )@ #@3@":@ @ ,l,)I)=}=#c##C##C##C# @ @ /o//o//o//O//O/7w7'g' @ #@#?g??s??}??Y??Q??^??F??B??T??X'?h?P=?p?H+?p?@57@1;@*/@+@$+@$+@&3@$'@89@ )@ +@&'@8*@ @ <\<1q1=}=#C##C##C#=}= @ @ /O//o//O//O/7w7/O/'g' @ -@?c??m??e??i??~??f??F??T??d??t??P3?H'?X'?h+?H3?p?H3?h+?P=?H3?p?p?H3/@-@<-@0'@>;@&*@ @ ,l,1q1=}=#C#=}==}==}= @ @ /o//O/7w7/O/7w77w7'G' @ -@?c??m??i??I??I??V??z??B??L??t??`/?p'?X'?x'?H+?p?H+?H3?P-?p=?p?H3?H3?@5=@"9@ ?P5?@>*@ @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ 5@-?S??C??E??e??i??a??F??R??d??T??h/?h?X'?d/?x?h+?h+?x'?H3?H3?H3?D7?p=?P='@6%@ ?@5'@&:@ @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ -@?s??c??C??m??y??I??V??|??D??t?/@3?H;?h+?D7?t??d/?d/?X'?x'?h?D/?D7?h+?X;?P--@4?P3/@.*@ @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7W77w77W7'G' @ =@#?O??{??C??e??i??I??Z??B??x?H;?@'?h+?D7?T/?d/?d??d/?d??T/?X'?h+?h+?H3?P-?P5-@4+@&+@:*@ @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ #@#?O??W??C??m??E??Q??J??\??D/?@''@!?H3?h+?d/?L??t??T??T??X'?D7?p?h+?P=?p-?p-@<=@$#@:2@ @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77w77W77W7'g''g';{; @ "@2-@5@-%@%9@9)@)1@!>@>@6@2*@$*@8:@d&@,6@<6@"6@"6@"6@<&@4&@,&@4&@4:@d&@4&@4<@<@2@($@ @ ,L,!a!-m-=]==]=-m-=]= @ @ 7W77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (h((h( @ (H(8x8 @ 0p0$D$ @ ` 8x8 ` ` (h(0p0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0p0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''G''G';[; ` 8X8 ` @ 0p00p0 @ 0p00p0 @ ` (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;=]=!a!.N.&F&:z:6V6&f&:Z:6V6&f&:Z:&f&&f&:Z::Z:&f&:Z:*j*&f&:Z:*j*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%e%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.xpm.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gimp.app/Resources/0000755000175000001440000000000014036261131021427 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gimp.app/Resources/Info-gnustep.plist0000644000175000001440000000200014036261131025052 0ustar multixusers{ NSExecutable = "gimp"; NSIcon = "gimp.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "gif" ); NSIcon = "FileIcon_.gif.tiff"; }, { NSUnixExtensions = ( "jpeg", "jpg" ); NSIcon = "FileIcon_.jpg.tiff"; }, { NSUnixExtensions = ( "png" ); NSIcon = "FileIcon_.png.tiff"; }, { NSUnixExtensions = ( "tga" ); NSIcon = "FileIcon_.tga.tiff"; }, { NSUnixExtensions = ( "tiff", "tif" ); NSIcon = "FileIcon_.tiff.tiff"; }, { NSUnixExtensions = ( "xcf" ); NSIcon = "FileIcon_.xcf.tiff"; }, { NSUnixExtensions = ( "xbm" ); NSIcon = "FileIcon_.xbm.tiff"; }, { NSUnixExtensions = ( "xpm" ); NSIcon = "FileIcon_.xpm.tiff"; }, { NSUnixExtensions = ( "wmf", "pnm", "bmp", "psd", "psp", "raw", "sgi", "xwd" ); NSIcon = "GenericImage.tiff"; }, { NSUnixExtensions = ( "svg" ); NSIcon = "FileIcon_.svg.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/gimp.app/file-dot-xbm.xpm0000644000175000001440000002043413214346535022506 0ustar multixusers/* XPM */ static char * file_dot_xbm_xpm[] = { "48 48 226 2", " c None", " . c #000000", " + c #FFFFFF", " @ c #AAAAAA", " # c #E5E5E5", " $ c #383838", " % c #717171", " & c #1C1C1C", " * c #E2E2E2", " = c #C6C6C6", " - c #555555", " ; c #8D8D8D", " > c #FDFDFD", " , c #FCFCFC", " ' c #FBFBFB", " ) c #FAFAFA", " ! c #F8F8F8", " ~ c #F7F7F7", " { c #F6F6F6", " ] c #F5F5F5", " ^ c #F4F4F4", " / c #F2F2F2", " ( c #F1F1F1", " _ c #F0F0F0", " : c #EFEFEF", " < c #EEEEEE", " [ c #ECECEC", " } c #EBEBEB", " | c #EAEAEA", " 1 c #E9E9E9", " 2 c #E8E8E8", " 3 c #E6E6E6", " 4 c #E4E4E4", " 5 c #E3E3E3", " 6 c #E1E1E1", " 7 c #E0E0E0", " 8 c #DFDFDF", " 9 c #DEDEDE", " 0 c #DDDDDD", " a c #DBDBDB", " b c #DADADA", " c c #D9D9D9", " d c #D8D8D8", " e c #D7D7D7", " f c #D5D5D5", " g c #D4D4D4", " h c #EDEDED", " i c #E7E7E7", " j c #DCDCDC", " k c #D6D6D6", " l c #D3D3D3", " m c #0A0A0A", " n c #2A2A2A", " o c #0F0F0F", " p c #262626", " q c #171717", " r c #1E1E1E", " s c #161616", " t c #252525", " u c #242424", " v c #070707", " w c #232323", " x c #0E0E0E", " y c #151515", " z c #1B1B1B", " A c #141414", " B c #222222", " C c #0D0D0D", " D c #232121", " E c #060606", " F c #B4B4B4", " G c #C9C9C9", " H c #D2D2D2", " I c #F9F9F9", " J c #2B2B2B", " K c #999999", " L c #353535", " M c #6A6A6A", " N c #4B4B4B", " O c #545454", " P c #606060", " Q c #3E3E3E", " R c #737373", " S c #292929", " T c #6B6B6B", " U c #181818", " V c #666666", " W c #2E2E2E", " X c #626262", " Y c #454545", " Z c #4E4E4E", " ` c #585858", ". c #393939", ".. c #1C1916", ".+ c #828282", ".@ c #B2B2B2", ".# c #D0D0D0", ".$ c #D1D1D1", ".% c #282828", ".& c #909090", ".* c #363636", ".= c #5E5E5E", ".- c #333333", ".; c #6D6D6D", ".> c #212121", "., c #111111", ".' c #565656", ".) c #2F2F2F", ".! c #4F4F4F", ".~ c #3F3F3F", ".{ c #575757", ".] c #646464", ".^ c #1D1A17", "./ c #7B7B7B", ".( c #ABABAB", "._ c #CECECE", ".: c #979797", ".< c #3B3B3B", ".[ c #5D5D5D", ".} c #4A4A4A", ".| c #696969", ".1 c #373737", ".2 c #797979", ".3 c #676767", ".4 c #1A1A1A", ".5 c #131313", ".6 c #343434", ".7 c #444444", ".8 c #616161", ".9 c #707070", ".0 c #22211A", ".a c #818181", ".b c #CDCDCD", ".c c #FEFEFE", ".d c #010101", ".e c #A6A6A6", ".f c #CBCBCB", ".g c #CFCFCF", ".h c #F3F3F3", ".i c #4D4D4D", ".j c #505050", ".k c #9D9D9D", ".l c #CCCCCC", ".m c #989898", ".n c #C8C8C8", ".o c #969696", ".p c #C7C7C7", ".q c #CACACA", ".r c #3A3A3A", ".s c #959595", ".t c #C4C4C4", ".u c #949494", ".v c #C3C3C3", ".w c #939393", ".x c #C2C2C2", ".y c #C5C5C5", ".z c #929292", ".A c #C1C1C1", ".B c #919191", ".C c #C0C0C0", ".D c #BFBFBF", ".E c #8F8F8F", ".F c #BDBDBD", ".G c #8E8E8E", ".H c #BCBCBC", ".I c #BEBEBE", ".J c #BBBBBB", ".K c #8C8C8C", ".L c #BABABA", ".M c #B9B9B9", ".N c #8B8B8B", ".O c #B8B8B8", ".P c #8A8A8A", ".Q c #B7B7B7", ".R c #898989", ".S c #B5B5B5", ".T c #020202", ".U c #B6B6B6", ".V c #101010", ".W c #080808", ".X c #050505", ".Y c #1F1F1F", ".Z c #090909", ".` c #474747", "+ c #B3B3B3", "+. c #787878", "++ c #414141", "+@ c #494949", "+# c #121212", "+$ c #424242", "+% c #4C4C4C", "+& c #404040", "+* c #636363", "+= c #868686", "+- c #515151", "+; c #5C5C5C", "+> c #313131", "+, c #5A5A5A", "+' c #525252", "+) c #3C3C3C", "+! c #2C2C2C", "+~ c #6F6F6F", "+{ c #191919", "+] c #0B0B0B", "+^ c #040404", "+/ c #030303", "+( c #0C0C0C", "+_ c #B1B1B1", "+: c #727272", "+< c #6C6C6C", "+[ c #5B5B5B", "+} c #686868", "+| c #595959", "+1 c #535353", "+2 c #A5A5A5", "+3 c #A7A7A7", "+4 c #A2A2A2", "+5 c #A4A4A4", "+6 c #A3A3A3", "+7 c #9F9F9F", "+8 c #A0A0A0", "+9 c #9C9C9C", "+0 c #9B9B9B", "+a c #A9A9A9", "+b c #B0B0B0", "+c c #AFAFAF", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ . . . . . . . . . . . . . . . .", " . . . . # . # . . . . . . . . . . . . . . . . . . . . . . . + @ . . . . . . . . . . . . . . . .", " . . # . . . . . # . . . . . . . . . . . . . $ @ % . $ @ $ . + @ % @ $ . . % @ . @ $ . % @ . . .", " . . . . # # # . . . . . . . . . . . . . . . & * + & = * & . + * + + + & . @ + * + + * + + = . .", " . . . # . . . # . . . . . . . . . . . . . . . - + = + $ . . + * & & + = . @ + - & + @ & % + . .", " . . # . . # . . # . . . . . . . . . . . . . . . $ + ; . . . + @ . . @ + . @ + . . + - . - + . .", " . . . # . . . # . . . . . . . . . . . . . . . & + + * & . . + @ . . * + . @ + . . + - . - + . .", " . . . . # # # . . . . . . . . . . . . $ @ % . ; + ; + % . . + * - % + ; . @ + . . + - . - + . .", " . . # . . . . . # . . . . . . . . . . - + @ $ + * . ; + $ . + = = + @ . . @ + . . + - . - + . .", " . . . . # . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . + + + + + + + + + + + > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 # 4 5 6 7 8 9 0 a b c d e f g .", " . + + + + + + + > ) ! { ^ ^ / ( _ : h h } 1 1 2 i # 4 5 6 6 9 0 0 j b c d e k g f e d e f g l .", " . + + + + + + > m n o . p q . r r . s t . o u v v w x . w y . z & . A B . C D E F G f f g l H .", " . + + + + + + I J K L . M N . O P . Q R . S T U y V W . X Y . Z ` .. M . t X...+.@.# g l H.$ .", " . + + + + + + !.%.&.* . - N . Y.= ..-.; ..>.= q.,.'.) ..! Y ..~.{ ..).] . r.'.^./.(._ l H.$.# .", " . + + + + + + ~ S.:.< ..[ O ..}.| ..1.2 . u.3.4.5.=.6 . - Z ..7.8 ..-.9 ..>.=.0.a @.b H.$.#._ .", " . + + + + +.c ].d ..).).).).).).).).) ..) . . . ..) ..) ..) ..) . ..) . . . . ..9.e.f.$.#.g.b .", " . + + + +.c >.h . M _ _ _ _ H H H.(.(.(.& M.) M M M.&.&.&.&.&.& M.& M.i.i M.) ..j.k G.#.g.b.l .", " . + + +.c > ' ( . M _ _ _ _ _ H H H.(.& M.).).).).).).i.).i.i.i.i.i M.i.i.i.) . Q.m.n.g.b.l.f .", " . + +.c > ' ) _ . M _ _ _ _ H H H H.(.(.i.) . . ..).).).i.i.i.i.).i.).).i.i.) ..<.o.p._.l.f.q .", " . +.c > , ) I : . M _ _ _ _ _ _ H H H.&.i.).).).).).i.i.i M.i.i M M.i.).i.i.) ..r.o =.l.f.q G .", " ..c > , ) I ! < . M _ _ _ H H H H H.(.& M.i.).i.).).).i.i.i.i.i.i M.i.).i.i . ..r.s.t.f.q G.n .", " . > , ) I ! ~ h . M _ _ _ _ H H H H H.& M.i.).).).).) ..).).i.i.i.i.i.).i.i.) ..r.u.v.q G.n = .", " . , ' I ! ~ { [ . M _ _ _ _ _ H H H.(.&.i.).) . ..).i ..) . ..).).).).).i.i . .. .w.x G.n.p.y .", " . ' I ! ~ { ] | . M _ _ _ _ _ _ H H.( M M.i.).).) M M.).i.).) . ..) ..) M M.) .. .z.A.n.p.y.t .", " . I ! ~ { ].h 1 . M _ _ _ _ H _ H H.& M.&.i.i.).).i M.) ..).).) . ..).).i M.) .. .B.C.p.y.t.v .", " . ! ~ { ] ^ / 2 . M _ _ _ _ _ _ H.(.(.&.&.& M.& M.i.i.i.).).).).).).).i M M.) . $.B.D =.t.v.x .", " . ~ { ] ^ / ( i . M _ _ _ _ H H H.(.(.(.&.&.&.&.&.& M M M M M.i M.i.).i M M.) . $.&.D.t.v.x.A .", " . { ] ^ / ( _ 3 . M _ _ _ _ _ _ H H.(.(.(.(.(.&.(.&.&.&.&.&.&.&.& M.i M M.&.) . $.E.F.v.x.A.C .", " . ] ^.h ( _ : # . M _ _ _ _ H H H H.(.(.(.(.(.(.(.&.(.&.&.&.&.&.(.&.i M.&.&.) ..1.G.H.x.A.C.I .", " . ^.h ( _ : < 4 . M _ _ _ _ _ H H H H.(.(.(.(.(.(.&.(.(.(.&.(.&.(.( M.i.&.&.) ..1 ;.J.A.C.D.F .", " ..h ( _ : < h * . M _ _ _ _ _ H H H.(.(.(.(.(.(.(.(.(.(.&.(.(.(.(.&.&.i.& M.) ..1.K.L.C.D.F.H .", " . / _ : < h } 6 . M _ _ _ _ _ _ H H.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.&.i.&.&.) ..*.K.M.D.F.H.J .", " . _ : < h [ | 7 . M _ _ _ _ _ _ H H.(.(.(.(.(.(.(.(.(.(.(.(.(.(.&.&.& M M.&.) ..*.N.O.I.H.J.L .", " . : < h [ | 1 8 . M _ _ _ _ _ H H H.(.(.&.(.(.(.(.(.(.(.(.(.(.(.&.(.&.i M M.) ..*.P.Q.H.J.L.M .", " . < h [ | 1 2 9 ..) M M.i.i.i.i.i.i.i.).).).i.).i.i.i.).).i.).).).).i.) ..) . . L.R.S.J.L.M.O .", " . h [ } 1 2 i 0.d.T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $.R F.L.M.O.U .", " . [ } 1 2 i 3 0 B.'.5 ..4 U . y r ..V B . m &.W.X.4 o . U s ..5 z . x.Y ..Z.4.W.`.K+ .M.O.Q.S .", " . } 1 2 i 3 # j u+. J .++.< ..6+@ . p O . U.`+# C++ u ..<.* ..)+$ . w+% . s+&+#+*.z+ .O.Q.S F .", " . | 2 i 3 # 5 a u+= L .+-.} .+$+; .+> T ..Y+, q.V+' W ..}.7 .+) O .+!.8 . &+' s+~.u.@.Q.S F+ .", " . 2 i 3 # 4 * b v+{.Z . o C .+].V ..Z.5 ..X.V+^+/ o.W . x+( . m o ..W., ..X x+^.|.w+_.U F+ .@ .", " . i 3 # 4 * 6 b.L+=+: X+;+<.3+[.3.3+,+*+}.{+; V+| `.]+| O X.[+1.=.[+-+,.=.!+1 P+~.m+_ F+ .@+_ .", " . 3 # 4 * 6 7 0.g.U.(.e+2+3+2+4+5+6+7+8+8+9+9.k K.m+0.m.s.m.o.w.s.u.&.z.B.G ;.&.m+a.@+ .@+_+b .", " . # 4 5 6 7 8 9 b k g l.$.#._.b.b.l G G.n =.y.t.x.A.A.I.F.F.J.L.M.O.Q.U.S+ .@+_.@+ + .@+_+b+c .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ."}; gworkspace-1.1.0/Apps_wrappers/gimp.app/genericImage.tiff0000644000175000001440000011050013214346535022714 0ustar multixusersII*s s s s s s EUEUs \ q-8s s EU-8s EUEUEUEU-8EUEUEUEUEUs \ qEUEUEUEU\ qs s EU\ qEUEU\ qEU-8s -8s EUs -8EU-8-8s EU\ qEU\ qEU-8ƢEUEU-8s s \ qs EUEU-8-8\ qEU-8EU-8EUEUEUEUEUs EUEUEUEUEUEUEUs EU-8EUEUEUEUEUEUEUEUEUEU\ qEUEUEUEUEUEUEUEUEUEU-8-8EUEUs s EUEUEUEUs -8Ƣ\ qEUEU-8-8s -8-8-8-8EUEUEUEU-8EUEU\ q\ qEUs s EUEU\ q-8EU-8\ q\ qEU\ qEU\ q-8-8\ qs EUs s s s -8s ƢEU-8s EUEUEU-8EU-8EUEUEUEUEUEUEU-8EUEUEUEUEUEUEUEUEUEUEU-8EUUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUJJJUUUUUUUUUSSSLUUULUUULUUULSSSLUUULUUUUUUrrrLUUU,,,999LSSS000%%%777DDD>>>LUUU999  FFFlllooo]]]KKKCCCBBBLUUU666JJJ@@@ccc{{{aaa[[[PPPMMMLUUUrrr\\\{{{}}}DDDiiiKKK :::LSSS===$$$@@@yyyzzz|||~~~<<>>XXXOOO+++uuuooo{{{:::;;; +++LUUU:::ddd999 III>>>OOOtttuuu222;;;444///___(((LUUU mmmjjj\\\RRRqqqZZZLSSS tttddd###cccvvv\\\JJJ777LUUU  EEE qqqOOO ddd444AAALSSS EEExxxssswwwhhhPPP222333,,,LUUU:::  ___{{{sss000444 !!!%%%LUUU rrrQQQ}}}wwwZZZwww}}}xxxkkkTTT'''222===EEELUUU,,, %%%&&&|||XXXYYYfff~~~{{{xxxtttTTTSSSaaaZZZUUU666LSSS CCCoooFFF uuuXXXkkkbbb~~~|||{{{yyyvvvrrrjjjcccZZZRRRLUUUttt CCC^^^<<>>"""!!!!!! 000kkk///GGG~~~bbbooo\\\hhhuuu{{{LUUU"""!!!!!! 333|||"""]]]zzz___uuu}}}ccc}}}}}}}}}}}}nnnLSSS"""!!!!!! PPPggg@@@kkk___uuu}}}}}}}}}}}}}}}}}}}}}}}}nnnLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL``   @(08(R/home/phr/genericImage.tiffCreated with The GIMP``0HHgworkspace-1.1.0/Apps_wrappers/gimp.app/gimp0000755000175000001440000000011313214346535020343 0ustar multixusers#!/bin/sh APP=gimp if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/gimp.app/gimp.tiff0000644000175000001440000001134013214346535021273 0ustar multixusersII* $h!B &l"F%j1bƊ'n &J$iRM&mXD6Ёϝ'4@ĈcN(dL*pbMd *^-$u扰bAOg: szJlxZ & `bƄFb])+:蛔$$@+ ФLTW6qaCcrР@Ņ\*D#E=*)0عkD ̩xcϒ,x)&ZTIH?ψ!]E!@>;W 4h1NED,1A6izࠖ2yL|#X\'P'P Y@P@a[PA @%x QOwdf([J&x'8#?#Wc0-ҀDObE@$p0FY %8hC?MC4TP@QNd# n%' ; !_.EaTe l-Pa TsEl@71s C Aa~!BdL$ t#X\',qFB-4QG@5!D/9DشFa`!i+9GfG͂C aQGAneSO0"('I“RB|qŐ ؝p#фjd=h9Ё*(e~[ ]SRa,8X_ѐa HІamHƊ dCPZВӠdb $e x`lBb׸_?Gckt=!ZhBU8p=x3&.)I? Tp7| = '8*4p*P" B?T >Cr9g'xСD`48+ $( p1Ep3\/|/$]c p|㻐AN4x]$I,y⒀?Nq} 1?_^,hЈgs 7! qp2! @? xA|x"!ɳ)` 4J )H~fCɆMBQ2䣯Ї^#y(@?zp["< '8Nx?f151'x=0) *Xi2 f@W A((x?Մh5 i0J p@ iHCЅ.t 3Ы #; ` hJ~SX ?dmJx3[ۆ66(041 l` 'z^T\*`E!#դ\cJ4 !}? ş=Ad_ yB `< :Ё6\ c(?юVuSA jP45&$438_@?g/8LKƎע_$#)C+\8-k2DL=,*#:} C x ?x]0 XPBOCaQbXj*X%d(C?hA ـ?pm1c kS5U5!&ְT%q<2e*Tg?  (õ c6A7"a CPΊ3!Q H@Of/`fBe ,rҤu&P{(hiHr|\/Ƨ,`OIAW?,a:V0? ^ԉ>5p{?`|6Q:a STT0tq < q : 8 ?x.a!X@ENDGx 21TK?i1lV?Us }PePa/(b@ nklHbvQ?8s8U؄?h6hܐ )i) (SBpG0?CFׇ?&Ե ~9U/4zng{v`oOVqEx "D ?`8l7p1_RAY rc}M3l7pP>'-`~H~@+DgK(Q?؀ ؁P ȇDOS-PeY%QsUS }ps;.`w0{`f4TPeXFCNC8`wq|'`O(OuuPm-c `!%!0'?'d'tpg1/0qq/7C?pggm$o/0}]P `=Lշ/s?Ov{.`vG5QMЀ1.`0DtJ{&{_=? B0Srgp=B3O Gwb*EXGop`)@dUK0{0KI#С  1Afa;gW}^4gO6w4G{N`g*Q=\5JttB 2pC>QNyD-c{|p'?}Y}РlH@p]7u,0g?k!Jͅ."  ?܈Z+FJcN`7@!yqQ~َTn AaŠ{GxR,^PF x@gOxNxt`ӧ sGBse߅OVx# 㙆YP&:@J;X(1b\eD4`LF 0t\*0/p.hg^뵂[pʈ&(Вo ^4Y8jAUGDH\8\Mxu M9 $h!B 00(l衣'F &J3pܨR&Dk;ۿkkK%u o??? ###CCCooo///OOO?M?M?mUɏE<@& `0[|ZtrkR`0HC)j+vD| @Co???CCCooo///OOOqyGlbˆ:D|-0^B @ `Q+jHx%ai*N'x@:,X);׿gwwqqq===CCC///5$KB]tK+ FK<KB^K6GAznjv*ZN&{N'KzˊCl@Fdx%>Q}}}///GK!7{^ޗ '!GD|KٯU[D|x\XDPyxxm4]t QlKWwqy)O111]]]wwwQ))1iqyqyiΧ[.|Z42h %H#D|+R<3 jKFQi/e/lll111===OOOwwwUo5o5e e o5e %uU)Oi'a[.jvKz+<kRKzr.>!..nVG///Ulll===www777mu_u_mmme /wW.gQW 'f''aޗ A7!7W.gQWqyi/e//UUlllQQQ===]]]www777WWWu_u_u_M?M?M?M?M?%u/UUoUi/e)O)Oi/ei/e)O)O)O/%u]]]www777WWWmmu_mU)Oe e %uUUUi/ei/e/i/e/o5%uo5---]]]777e e e e o5Uo5e e %u%u%u%uUo5o5o5//mmm777/e e %uo5UUUi/eo5o5%ue e e o5ٯUU/ٯUi/eo5o5,,,aaaMMMgggo5o5e %ue ՟M%u%uo5e %u%u%u%u%uo5UUUo5Y//Y/U)O,,,aaa---WWWgggeeeHHHPPP ---ggg''';;;---666|||<<<<<<<<<\\\\\\\\\llllll,,,---MMMggg'''GGGyyyyyy999YYYiiiiii)))III qqqqqq111111QQQaaaaaaMMMMMMggg'''GGG+++KKK sss333SSScccCCC}}}===]]]mmm---MMMMMMMMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$RFileIcon_.bz2.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gnochive.app/FileIcon_.gz.tiff0000644000175000001440000002245313214346535023462 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUUUUUUUUUUGGGcccUUUUUUUUU888GGGUUUGGGUUUUUUUUUGGGcccGGG???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKKkk`+ ;kkk`+ P;P{p'{p;`;kk `++++++KKK;P`kPkPk k`sk`k;P;P{p{{p{p0Pkkk  yyy555###KKK ` kkkkk  kks   `P{{P k`k`k` ` sBBBfff333 sssPk`kk` `  k  @ PPPPkk`   s@s  `s@YYY {p;k`[ k`kkkk`k `s@  @c3    s@  ss@333kk kkk`kk`k `s  sss@s@ss@ss@cccs@ sssiii333 k  PPkkk s@ }}- =c@@s@s@\\\iiiccc333SSS???___kkPPkk`k`k   k` `c@]]=]?@s@s@s\\\###SSS???___k`kkkk`k  k`kk`    `]=?5s ss\\\)))SSS???___k`k`k`k  `k   -=c}3gkP`k;{;CCCccc???;k kkkk` k` `s s@@=}@Wϭ `+OIIIooo k`k  Pkk  ` C   P7(__}e:Tcpy###oooG{{{p{Pp{'(7(X7W`w@?g/cUEUICEN? w###ooo///hh';{ǰG'm)j"^?ZG ###CCCooo///OOOw(Pg`W'-12R&C5Ud1:Gyj  [ooCCCooo///OOO3[KI1n)xj<6ba*n^2s}T8ǃiqqq===CCC///UI>m y}EsK-U}Aj$pd-|mU}}}///[5'םw w s+1_{[fml<1<Yg }S111]]]www?m?=c]eg.;6 }-mCl*&'ZUs lll111===OOOwwwP{{P{P 3]_/1w.W'nw/1/1/1_s s +lll===www777{{'''('k @}?EE_? ?@s s ++lllQQQ===]]]www777WWW'('('hhh(({pPk kks33s@s@333``ې]]]www777WWW'{'{k3k`;pP+ + `+`kP;Pk` ---]]]777k`{{{p{kkk` kkP;;P;P;Pې`+`kkks s [mmm777 `{{{pPksk;P;{p;p;k`+`++c@ kk,,,aaaMMMgggPpPP;G;P[`kPې;P;P;Pk[`++ +k  +Ӏ,,,aaa---WWWgggeeeHHHPPP ---ggg''';;;---666|||<<<<<<<<<\\\\\\\\\llllll,,,---MMMggg'''GGGyyyyyy999YYYiiiiii)))III qqqqqq111111QQQaaaaaaMMMMMMggg'''GGG+++KKK sss333SSScccCCC}}}===]]]mmm---MMMMMMMMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$RFileIcon_.gz.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gnochive.app/FileIcon_.tar.tiff0000644000175000001440000002245513214346535023632 0ustar multixusersMM*$UUUGGGUUUUUUUUUUUUUUUGGGUUUGGGUUUGGGcccUUUUUUUUU888GGG888UUUGGGcccUUUUUUUUUGGGUUU888GGGGGGUUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOO'''ggg'''GGG{{{[[[+++???___WW/3guNcVc7;;;GGG{{{;;;[[[+++KKK???////w7WG[sW9{3Q; cVm5& }]SS{{{{{{;;;[[[kkk+++KKK/OwGϳ >c)ZMI1N ccm|ڬ5E~+++[[[;;;;;;[[[kkk+++KKK gW{SOWáM WmVf V[ ^SVV|!Ҵ\I3kkk+++KKK sss???cfwmQO177eVfCV^ "d!4᲌*tᲴv2qr͹sss+++kkkKKK xxB^7)3 7}w75^WuVg{Ee|\ eLz,Q2t>4r, ӣKKKKKK 333___ x2tDڬ5N7N7Ez{g9J{9B4Ie&BZcVuZ55 2!2>v"-i>III 333___r$d\T9v7S[Ir5Ƽb BV{˾B L%Z5Y ,2tᲴ´ddxFFsss333SSS???___xX D$\d&T"1NT*,c{Y;3|cN" *ttv>>mmm333sss333SSS???___wwwtx8<$dƼdBւ J\GYzZ{{Yr>V]&<ּBt\T $x:::333SSS???___ooo777xZdV||BTdd> tBkIJDž  [{>VcּւzNtd8DxxcccSSSccc???ooot88&TTBdTV"TxbbtE&\'2;"!^S< *f$$ĸĘx8RRR###SSSoooWWWf|V4T4ҴlTNiekYbμ12 d\4dt$DxxxؘxD8XXXRRR###oooOOOLVd"42!2!2tQJ,u &\e"JT$d8\x\dXl$d8XX4xXd8DDx8xRRRCCC###ooo///OOO"T^Ҵ4>2!2,uuM\m,$"$z4"rt12 |$YeLuluL2ҌDTD<܄DDddXxxdxX$8DXDccc###CCCooo///OOO{)JLQd$*LEZL\V\J*db$b DŒD|ݞTڼdd^]NB,Œe*J###}}}]]]mmm777gggGGG{{{;;;+++iii!v<fBBVVVQQQUUU###ccc###}}}]]]gggGGG;;;[[[}}}UQZ%%%CCCccc###CCC}}}]]]---WWWgggGGG;;;[[[kkk }}}VVV%%%CCCcccccc###CCC}}}===]]]---ggg'''GGG;;;[[[kkk+++ccc###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++sssSSSSSS###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++KKK sssSSS###CCC}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$RFileIcon_.tar.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gnochive.app/FileIcon_.zip.tiff0000644000175000001440000002245513214346535023646 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*<\< @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,%e%5U5%e%5U56v6 @ ??%e% @ .N.%e% @ 5U56v6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*????????5U5 @ ??5U5 @ %e%??'G'????*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??8x8 @ ??5U5 @ 5U5??6v6 @ #c#'G',l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8#c#??*j* @ @ ??5U5 @ 5U5?? @ @ *j*??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??*j* @ @ @ ??%e% @ 5U5??,l, @ 1q1??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6,l,??'G'*j**j*,l, @ ??5U5 @ %e%??5U5*j*'G'#c#8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5:Z:????????5U5 @ ??5U5 @ 5U5??1q1??'G'8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ??????????*j-*j5*j5*J%*J5*J%2r)*J9*j-*j-:Z-*j-*J5*j5*J5*J5*J5*J%*j5:Z-*j5:Z-*j5:z=&F=:z-:Z-*j5*j5:Z-*J5*j5*j5*J%+K++K++k++K++K++K+3s3 @ @ ??????????:Z-*J5*j5*J5*j5*j5*j5*j5:Z-*j5*J5*J5*j5*J5*J5*J9*J5*j5*j5*j5:Z-:z-:z=:z-:Z-:Z-*j5*j5*j5*J5*j5*J9*J%*J%9y95u5#C#+k+3s3+K+3s3 @ @ ??????????:Z-*j5*J5*j5*J5*J5*j-*J5*j5*J92r)*j5*J5*j5*J%2r)*j52r)*J%*j5:Z-:z-:Z-:Z-*j5*J5*J5*J5*J5*J5*J9*J%*J%2r)"B"&f&5U53S3+K+3s33s3 @ @ ??????????*j5*J5*J5*J5*j5*J5*J5*J5*J%*J9*J%*j5*J5*J9*J%2r)*J)2r1*J9:Z-*j-:Z-*j-*j5*J5*J5*J5*j52r)*J%2r)*j52r)*J90p8"B")i)3S33s3+K+3s3 @ @ ??????????:z=:Z-*j-*j5*j-*J5*j5*j5*J5*J5*j5*J%2r)*J%2r)*J)2r)*J)2r)*J5*J5*J5*J5*J92r)*J%2r)*J)2r)*J)*J%*J%*J%2r)0p0<\<)i)3S33s33s33S3 @ @ ??????????*j5*J5*j5*J5*J5*j5*J5*J5*j5*J5*j5*J%2r)*J%*J%2r)*J%*J9*J%2r)*J92r)*J92r)2r)2r)*J)2r)*J%2r)2r)*J%2r)*J90P0<|<)i)#c#3s33s33S3 @ @ ?????????_?*J%*J5*J5*J92r)*j-:Z-*j-*j5*J5*j5*J5*j-*J5*j5*J5*J%2r)*J%2r)2r1*J)2r12r12R>2R>2R>2r12r1*J)2r12r)*J92r)0P0<\<)i)3S33S33S3#c# @ @ ?????????_?*J5*J5*j5*j5*j-*j5*j5*j5*J5*J5*J5*j5*J5*J%2r)*j5*J%2r12r)*J)2R>2r12R>2r12r1"b.2R>2r1*J)2r)2r1*J9*J%*J9 `0<\<)i)#C#3S33s3#c# @ @ ?????_??_??_?*J5*j5*J5*J5*J5*J5*J5*J9*J%*J5*j5*J52r)*J%*J%2r)*J92r)*J)2R>2R!2R>2r1*J)2R>2R."b.2r1*J9*J9*J92r)*j-:z=0P0<\<)i)#C#3S3#c#3S3 @ @ ?????_??_?/o/*j5*J5*J5*j5*J5*j5*J%*J%2r)*J5*j52r)*j52r)2r)*J92r)2r12R>"b.2R!*J)2r12r12r1*J9&f#&f#*j5*J5*j-*j-&F=:Z- `0,l,)I)#C##c#3S3#c# @ @ ?_??_??_?/o//o?:Z-*J5*j5*J5*j5*J5*j5*J5*j5*J%2r)*J92r)*J)2r)2r1*J)2r12r12r12r12r1*J)2r16V#!A;2r1,L*"b.*J%*j5*j5&f#>^+ `0<|<)I)=}=3S3#c##c# @ @ ?_??_?/o/?_?/o/*j5*j5*J5*J5*j-2r)*J%*j5*j5*j-*J%*j5*J%*J%*J9*J)2r12r)*J)*J)*J%:z-6v3%e7%e74t*0P( `((H(2r1)i'=]/3s/'G' `0<\<1q1#C##c##c##C# @ @ /o//o/?_?/o//O/:z=:z=:z-:Z-:z=*j-*j5*j-*j5*j-*j5:z=&F=&f#6v3.n36v36V#.N3:z=*J%2R>,l:,L*$d"8x,$d",L:$D"5U7'G?7W?7w?7w?0P0,l,)I)=}=#c##c##C# @ @ /o/?_?/o//o//o/&f#&F=:z=&F=*j-:Z-*j-:Z-&F=&f=&f#:Z-:z=*J92R."b.4t*4T28x<(H( `0(h45U7=}/#c/+K/#c/=}/*j-=]/7w7/o?/o??_? `0<\<1q1#C##C##c#=}= @ @ /o//o//O//O//O/.N3!A;6V#>^+6V#6V#&f=6V#:Z-2r)4T20p8(H$0p8(h$,L:4T2$d"$d2(h4 `08x<)i':Z-2R>4t*$D"8x,(H()i'7W?/O?/o?/O/0P0,l,)I)=}=#C##C##C# @ @ /o//o//o//O//O/*J)2r),l:<\&4T24T24T2$d"8x<(h4(H$0P(0p8(H((h4$d"8X,8X,$D<8X,(h48X44t*<\&,L*8X40p8 `( @ 2R>#c/;[?;[?;{?0P0,l,1q1=}==}=#C#=}= @ @ /O//o//O//O/7w78x<8x,$d"8x<$d"$d24t2$d"4T24T2(h4(h4,L:<|6,l:,L:4t*,l:,l:<\&"B6<\&4T24T28x<(H$ `0 @ `($d"<|62R.2R>"b.0P0,l,1q1=]=#C#=}==}= @ @ /O//O//O/7w7/O/<|&4t22R><\&"b.2R."b."B6<|6<\&4T2,L**J9*j-*J%<|6,l:4T24T2$d24T2$d2$d"$d"$d"$d"$D"8x,$D<,L*2R>2r12r1*J) `0<\<1q1=]=#C#=}==}= @ @ /O/7w7/O/7w77w7"b.2R>2R>2r12R!2r12r1*J)2r12R!"b.<\&,L:4t*4T24T2$d"$d"4T24T24t2,L*,L*,L:4t*,L*,L:,L*,l:"b.*J)2r)*J92r)0P0,l,1Q1-m-=}==}==]= @ @ 7w7/O/7w7/O/7w7*J5*J5*j5:Z-:z-*j5:Z-*j-*J5*J92R!"b.<\&,l:,L:,L*,L:,L*,L*,L:,l:<\&<|6"B6<\&<\&<|6<|62R>*J9*J%2r)*J9*J50P0,l,1Q1=]==}==}==]= @ @ 7w77w77w77W77W7:z=:z=&F=&F=&F=&F=&F=&F=*j-*j52r)*J)2r12R>"b."b."b."b.<|6"b."b."b.2R!2R!2R>"b.2R>2r12r)*J92r)*J%*j5*J5 `0,l,1Q1-m-=}==]==]= @ @ 7w7/O/7w77w77W7&F=&F=&F=&f#6V#&f#6V#&f#:z-:Z-*j-2r)*J5*J5*j-*j5*J5*J9*J9*J9*J9*J9*J92r)*J92r)2r1*J9*J9*j5*j-*j5*j-*J50P0,l,1Q1-m-=]==]=-m- @ @ 7w77W77W77W77W7:z=:z=:z=&F=&F=&f#&F=:z=*j5*J5*J5*J9*j5*j-:z-:Z-:Z-*J5*J5*J5*J5*J52r)*J%*j5*J9*J9*J%*j5*j-*j5*J5*j5*j5 `0,l,1Q1-M-=]=-m-=]= @ @ 7w77w77W77W7'g'*J5:z-:Z-:z=:z=:z=:Z-*j5*J5*j5*j5*J5*J5:Z-*j5:Z-*j-*j-*j-*j5*j-*J5*j5*J5*j-*J5*j5*j5*j5*J5*J9*J9*j-*J%0P0,l,!a!-m--m-=]=-m- @ @ 7W77W7'g'7W7'g'*J9:z=:Z-:Z-:z-*j-*j5*J5*J5*j-*J52r)*j-*j5*j-:Z-:z-:Z-:z-:Z-*j5*j5*J%*J5*J5*J5*J%*J%*J52r)2r)*J9*j5*j50P0,l,!a!-M-=]=-m--m- @ @ 7w7'g'7W7'g''g'*j5:Z-*j5*j-*j5:Z-*j-:Z-:z=*j5:Z-*j-*j5*J5*j5:Z-*j-:Z-*j5:Z-*j-*j-*j5*J5*j5*J5*J5*j5*j-*J%*J9*J%*J5*J) `0,l,!a!-M--m--m--M- @ @ 'g'7W7'g''g''g';[;%e%"b"(H(0P00P00P0 `00P00P0 `00P00P00P0 `00P0 `00P0 `00P0 `00P0 `0 `0 `0 `00P0 `00P0 `00P0 `0 `00P00p0<\ oT78Uaa[YIu]4mQ4eTy=Ej9]YW>DiUխHWɛW,5_g;cZNn [X{<-@ZU>4-g.m짟Z&UF[zuЁ<Զ>fa- ZQS=mXۡh./3iSӌ]_Te}W`= qt'h^NJ0]v{|7rY{N+lE]ުK>QS? %]~C(28\l̟BfrCF҄`E !O0B8[ s3vD5K/u.ԚAr(Tƭ cKԽHf-c>ۡ(u9K5l[O6E*ä 3;@5 ;.V6'mv@d? C(p('a"KOG`"$,lwKK nO\ObutL086S^1'尵*#C"`vf=X?t_}χww> ʨ`H"yVy *_eoII:.T*ӞÖcGv6RRPI!n:o' *pjZwPq 7.*B /Z ˡhoGɹbX /\FT-*71eT$$$\xjZج=S2(qͰSEDaPh6BF?o<ꡕ~Qؽ{7233n#{oŊ4CF^p%nM[jB/k"`"5/L. pQS{yjt `gHjS]A%9##CX'hmM5>p/RSRDC-wt#@p"5-~%Խ4~#a~{ gygO=Ɏ;V#-8ϣ W# G 11mmmZҥKR$0Ak!/ʄ <'LgU`&Uݺu AAZ( tww V#8.<޽7$)z:p,]aaax`HHHDkjVkB^q {I whomyJEr **J$$(葍,oy J3Jbld>Z<<\3'%%q/ٳ" (++# EʭPp8p:Z[{$%T!/RAjXx)[Q2k.#Uuppny^6^R2[KׇY0,}(;ݚx%2;wD% kۡh wÖ(*)}naek(bpܷ`6'$?e˖RAT/Uh_KKx\\,>oGAhdA;xCJGolï{ed`4VZgz2j2DhHK׉ЙLJL_েAI*yUؽ{7ZwEa(.>Ggj d7G D6~@ ب ߘQT>ֻX|nnn.|. pjp:2_wR%aOQT*5)?TanGyRN+oDl\<9Bϼ1~yfc!#/DR_h7܂80E$~x%^ӑNO=a ` 5/L. P[S{Զl}z*ߔe)hi>|k+oq i=bVeHtZ0::x뻻 `V ')J-)Dt&N,!I--kuwA@+Q*!9GBU\d$Iy3u wK_ ?U[Rׯb]UMp"UK.ð~}D"UBI8ݼyh eOA_9~(++iYaIH$.z))))P$JKKp|ޮyHaaN )c2;;ͱcaݺ'(Y"C$ ,K I>M29@0(D駟ٺ?'r i@ dEab&E:mN[aH<΁08x^xb#O=Պ$eh+D%K188-t=e ^/NIPeoϞo)TnTٲ27tF%B\ͯ&[nW7s!n4MLS|DxEuuuu )agl? !Fpmm,,~Q/UUliu6L&D"u`lʕB 2et6D~Ė-ڶTx7H6%,K DMM=4urU.]@S ,i̽KH9ccc bll8*ǗN]Rॗ/Pj[T^6 kڵk .:x]ÇwQv]4ttto>:;;y_7[wk-xN1 CGG[UEX.E"'ظqcb\paђ!ܲ2֢d͛ʳsӦMV?^w~abJ<{//v]voCP~up&ðsXR Uٝ$:]_G0,[ySK$l*WHB5#%QЙ[`6}xTurEe֪Nv 0r`kyS)% AyO}gzDIENDB`gworkspace-1.1.0/Apps_wrappers/gqview.app/0000755000175000001440000000000013214346535020034 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.gif.tiff0000644000175000001440000002245513214346535023311 0ustar multixusersMM*$UUUUUUUUUcccUUUUUUUUUUUUUUUGGGUUUGGGUUUUUUGGGcccUUUUUUUUUUUUUUUUUUUUU888GGGUUUUUUUUUUUUUUUUUUUUUUUUGGGcccGGG???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDDĄ```---+++KKKVVV***|||ffftttFFFrrrVVVFFF8hhAAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzDXXUUUKKK sss b"`l @l@D8(@@8D@@tt@ @tԀD@@D(0@@eee ɬ ?o?7?_O-^o}/]*z@+e@9-m @2@@g s D D PQ%" 333,L??_o__) o&/Ͳq_@}2j va`a```IPUa`yeb|||333___d+__we_{o&ϭ,``J,l<B*~@q` PI 1qvzyURiiisss333SSS???____7W_ oSCωWZ@IPf :v@@N@^iYpYYypY8yf.2\\\iiiccc333SSS???___www 7'q^&O b':9v6@v@ F` ~~)Pyy%=hYP@A`q|\\\###SSS???___I??_.3]*Y4g9^v@*|,LL:N.q`)`v@yy|\\\)))SSSccc???ooo777,$?_om'_S/=/ lgn6@:|\Z`z8 N&Z1`y|CCCoooWWW,L??__ύ_Wߗ).CznC~22y4eLLz4@, 8x<*EIII###oooɬ ?߯?7wWߗ)3wu r@CSTyh1& v1M@,:`TLV@ @###ooo///OOO,L?O?W߯_w_W_)O_fo@KSdCL (YPQ`N&@&@Z:j>@#8*ccc###CCCooo///OOO),?_oQkσ^_pbB2 #}Yu(u(M)ev `#Z@ ###CCCooo///OOOggg),g?3 oSM2oa޸0??oL|KKlXy)(DGXZ@CCC///)?/_gkAoVe,4o__?j?:??p??ߪ/M-0T;t*qqq===CCC}}}///www'''O___) &/ͲioѬ__?:?:R0bp??j? =x90Z@wwwGGGoo/]*oq X4_߶߶6Zn?vp?pǤe|ǤZ@111]]]===OOOwww,$?oo=߷_)ﳎύ!~7Z@Nh.X^TT΄_ߦ8_n_ߦ8P OZ@lll111===www777WWW),?/?OU_ߗi#F/MDhn ?._tTTt_ߖX??j2pM D+*lll}}}===]]]www777WWW,L?_?_?o_m_e{ZO bq_'_&XT>>6x?FR0?2p?-82lllQQQ===]]]www777WWW{{{BTT8h!ؠ 6* z`F`V0606060F&z `z z` <r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.gif.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.jpg.tiff0000644000175000001440000002245513214346535023324 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUUUUUUUUUUGGG888GGGGGGUUUUUUcccGGGcccUUUUUUUUUUUUUUUUUUUUUGGGUUUUUUUUUUUUGGGccc888UUUGGGUUUUUUUUUGGG888UUUUUUUUUUUUUUUUUUUUUccc???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDD```---+++KKKVVV***|||ffftttFFFrrrVVVFFFhh8AAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzXXDUUUKKK sss  @@2@@B@@llD8@@(8@@Dt@@t@@ t@@DD(@@0eee #s5ɿEҿ D?_ +e9-m _ggs Q%" 333cヿM]ֿѺ D?}2jvaaIUayeb|||333___]ſ͡ѺN0J,l<B*~q I 1qvzyURiiisss333SSS???___-3#Mٿ5]՞VIf:vN^iYYYyYyf.2\\\iiiccc333SSS???___www-ÿcUEѺܿg9v6vF~~)yy% =YAq|\\\###SSS???___meʤP9^v*|,LL:N.q)vyy|\\\)))SSSccc???ooo7773Ϳ9-Iƿ>zPn6:|\Zz8 N&Z1y|CCCoooWWWc]]HC~22yeLz4,8x<*EIII###ooo#//텿5ɿ]:CSy1&v1M,:TLV K###ooo///OOOcsՉ]aK8SC YQN&&Z:j>KK*ccc###CCCooo///OOOCÿuſ塿οʿ4h? ,4 K}YuuM)ev #pZ ###CCCooo///OOOgggCkӿýE՞z$KKPKy)KZCCC///-ͩվƿv"&fVVV/ML-(;*qqq===CCC}}}///www'''-#5]ѺfxNfN"=9NZwwwGGG-ӿӃuſm͡ҿ*ڔl2h?fnVVe Z111]]]===OOOwwwヿ]ּֿvAN ROZlll111===www777WWWCvJx ?AAnvfnM p+*lll}}}===]]]www777WWWc/WsͿſ~ܿ D?DP'Vv!!nN- 2lllQQQ===]]]www777WWW{{{- %yi~>6* zFV666F&zzz<r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.jpg.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.png.tiff0000644000175000001440000002245513214346535023330 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%.N.,l,5U5,l, @ @ 6v65U5 @ %e%.N. @ @ @ ,l,5U5%e%,l,5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'G'????;{;8X8 @ 5U5??'G'????6v6 @ 8X8'G'????'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ????8x88x8??#c# @ %e%??*j* @ #c#5U5 @ 1q1??.N. @ #c#?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ 5U5?? @ 5U5?? @ @ 5U5%e% @ 5U55U5 @ @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'G' @ @ 'G'?? @ 5U5?? @ @ 5U55U5 @ %e%'G',l, @ 1Q1?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ????.N.6v6??1q1 @ 5U5?? @ @ 5U5%e% @ .N.??5U5*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ ??#c##c#??5U5 @ @ %e%?? @ @ %e%5u5 @ @ 5U5????5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ 6v65U5,l, @ 1q1?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ ,l,????#c#??1q1 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????_??_?/o//o//O//O//O/7w7/O/7w77w77W77W7'g'7W7'g''g''G''g''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++k+;[;+k+;[;+k++K++K+ @ @ ??????????????0P04T40p0 @ $d$(h( @ 8x88x8 @ (h($D$ @ 0p0$d$ ` 0P0$D$0p0 @ $D$(h( @ 8X88X8 @ (h(8D8 @ 0p0$D$ ` -M-3S3+k++k++K++k+3s3 @ @ ?????????????_?4T4)i),l, @ 6V62R2 @ *J*:z: @ <|<.N. @ 4T46V6(h((h(&f&4t4 @ :z:"b" @ 2r2*j* @ ,l,6V6 @ $D$&F&(x(!A!-M-3s3+K++K++K++K+ @ @ ?????????????_?$d$)I),l, @ *j*2R2 @ "b":z: @ ,L,6v6 @ $D$:z:(h((H(:Z:4t4 @ 2r2"b" @ "B"*j* @ 4t4&F& @ 8x8*j*(x(>^>5U53s3+K++k+3s33s3 @ @ ?????????????_?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8D8&F&8x8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ D8 r" J2 R R B, |4 l$ l$ t( d0 D X h X D D T( t( t( t( t( t D0 D D X H h p @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ C=/?'?3?5?)?.?*?"?$ _# K. e N Y M2 m* s> _# g% O= w g> sZ sZ sZ I8 Q` e B @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ c#7?'?=?%?1?6?:?"?8 _# }" V R Z j F z ^$ v a a ~ a I, U< a y e b @ "B")i)3S33s33s33S33S3 @ @ ?????????_??_?/O/ @ ]-+?#?-?%?!?&?:?2?4? 7 a J L l \ B J ~ q q I I q q v z y U R @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ M5#?-?9?)?1?>?&?*?,? W5 I f z v V N ^ i Y Y Y y Y y Y f n e R @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ M5#?5?)?!?.?6?:?<?( g% Y$ v V v z F V ~ ~ i y y E ]4 Y$ v A q | @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ m-#?=?%?!?>?.?&?2?$? g9 y ^ v j | L L L R Z N n q i A v y y | @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ m-3?3?-?1?!?!?&?2?4? g9 n V z | \ Z z d0 x p D l J N F Z q y | @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?_?/o//o//o/7W7 @ c#'?+?5?1?1?)?.?*? 7 c< C* ~ r l r y< e" L z$ T l X x | b j i E | @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/'g' @ C=/?7?#?%?)?)?&?"? g% C: c< y Q` f v q$ M2 Z | l Z B T L l V u 0K Z @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?_?/o//O//O//O/'g' @ c#/?'?#?9?1?)?:?4? ; O= K< S$ C$ m u Y Q` Y N F f Z Z F j ^ c c J @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ C=;?+?#?%?!?.?*?(00 _1 g& W> _1 g& K* C } Y u u M I e v I C s< Z @ ,l,)I)=}=#c##C##C##C# @ @ /o//O//o//O//O/7w7'g' @ C='?3?=?9?1?.?&?"?48(00(0% o% w [" w K8 K8 K: K8 { y I K: { Z @ <\<1q1=}=#C##C##C#=}= @ @ /o//O//O//O/7w7/O/'g' @ m-#?-?%?)?>?6?&?4?$?4?0((((0%((00%0%0%( O! M, M G. [: j @ ,l,1q1=}=#C#=}==}==}= @ @ /O//o/7w7/O/7w77w7'G' @ M53?-?9?)?)?6?:?"?,?4? _+088(0((0Q0((0% ) ]< y ) o* Z @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ M53?=?%?%?)?!?:?2?$4?(7(8$8((80(0%$;00 G: e ) G* Z @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ m-3?3?=?=?9?)?6?<?$4? W5(#($+,?$$888$'$;(#8 ) u40% O: Z @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7w77W77W7'G' @ C=/?;?#?%?)?)?:?<?8(3 _+($;$$4$'$48(((00Q M4 sZ K* J @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ C=7?/o/#?-?%?!?*?<?$ _# G)0%8$;4?4448$+0%(0Q00 M, m8 S R @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77W77w77W7'g''g';{; @ R m- M5 y9 y9 i) ~ ~ ~ V< j$ J8 z$ z$ V< V< V< V< f, F4 F4 z$ z$ z$ z$ z$ B( \ r( D @ ,L,!a!-m-=]==]=-m-=]= @ @ 7w77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (x((h( @ (H(8x8 @ 0p0$D$ @ p 8X8 ` ` (x(0P0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0P0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''g''G';[; ` 8X8 ` @ 0p00P0 @ 0p00p0 @ p (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;[;=]=!a!.N.&F&:z:6v6&f&:Z:6V6&f&:Z:&F&&f&:Z::Z:&f&:Z:*j*&f&:Z:*J*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%E%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33s33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.png.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.tga.tiff0000644000175000001440000002245513214346535023317 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,'G'??5U5 @ @ %e%5U5,l,5U5,l, @ @ 6v65U5%e%,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,'G'??%e% @ 5U5????'G'??*j* @ 1q1??#c#3S3??8X8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ ,l,??3S3 @ 6v6??*j* @ 5U55U5 @ *J*??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5?? @ *j*?? @ @ @ ??*j* @ *j*'G'??5U5??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%?? @ *j*??.N. @ ,l,??*j* @ ??#c# @ 8x8??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ 5U5??*j*8X8??'G'*j*5U5??*j* @ ??#c#*j*5U5??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ *j*???? @ *j*????5U5??*j* @ 5U5????1q1??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N. @ <\^>5U53s3+K++k+3s33s3 @ @ ?????????????_?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8D8&F&8x8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ x J r r b B | l l t d D X h X D D T t t t t t D D D X H h p @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ C /7/7'#+5#)5.1*>"*$(_ k e v y M m K (_ 0g 0w 0w 0g s K s I Q e B @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ c /7/;'#3%3)%6):>"*8( } V R Z j z F n v Q a ~ Q I U a y e b @ "B")i)3S33s33s33S33S3 @ @ ?????????_??_?/O/ @ ] 7+'3;-+%#!9&):>"&4( a J l l | B j ~ q q I I Q q v z y U R @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ M '#;-#9#1#1->9&1*6,0w I f Z v f N ^ i Y Y Y y Y y Y f n e R @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ M '#+5#)=15.%6):6<,(0g y v v v F F f ~ ~ i y y e ] Y v A q | @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ m '#'=#9-!->56%6!2*$0W Y ^ v J | l L L R Z N n q I A v y y | @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ m 73'3;--1=!#19&!2&40W n V z | \ Z z d x p D l J N F Z q y | @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?_?/o//o//o/7W7 @ c /'7++5-1#1#)56!*( c C ~ R \ R y e L z T l X x | b j i E | @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/'g' @ C /7/7'#+%#)319&&"0w C S y q F v q M Z | l Z B T L l V M 0K Z @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?_?/o//O//O//O/'g' @ c ?//7'##9=13))&24$ (_ 0K S C ] u Y Q i N f F Z z z j ~ C S J @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ C 7+7+'#3%=!5.!*,(4040$_ (g (W $_ 8w s c } Y u u M I e v q c 0s Z @ ,l,)I)=}=#c##C##C##C# @ @ /o//O//o//O//O/7w7'g' @ } /773'=#9=1->):."&4*8*(2020:(*08_ 8w 0[ $O K 0K k 0K (G y i 0K (G Z @ <\<1q1=}=#C##C##C#=}= @ @ /o//O//O//O/7w7/O/'g' @ m '#;-+%#)=!9&9&:4:$.4<0<(:(&(:(*0:(:(*0:0*0:0*(8O M M 0G 0[ J @ ,l,1q1=}=#C#=}==}==}= @ @ /O//o/7w7/O/7w77w7'G' @ M '3;-#9#)31%6):>"6,648 40&8682(:0:(:(*0:0*(&(:0, ] y *0,_ Z @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ M '#'#3%3%#)#!)&!2:$&4<(2(&8!$&8&(&(68*0*(:0!$*0*0(g e , (G Z @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ ] 73'#'=;=393)%66<*$64(O 2(&(.$1,.$.$*868&8!$.$:(&(20 u "0$O Z @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7w77W77W7'G' @ C /7/''#+%#93)):."*82(( &(.$14.$!$!4.$1468:(&(:(*0*0 M K 0K j @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ c /o//7'#;-3%#!!26<*88 0g :(&(!$14!414!468.$*0&(*0:0*0 m m S R @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77W77w77W7'g''g';{; @ b m M E y i Q ~ ~ v J J z F V v v v V F f z F z z F | | r x @ ,L,!a!-m-=]==]=-m-=]= @ @ 7w77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (x((h( @ (H(8x8 @ 0p0$D$ @ p 8X8 ` ` (x(0P0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0P0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''g''G';[; ` 8X8 ` @ 0p00P0 @ 0p00p0 @ p (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;[;=]=!a!.N.&F&:z:6v6&f&:Z:6V6&f&:Z:&F&&f&:Z::Z:&f&:Z:*j*&f&:Z:*J*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%E%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33s33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.tga.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.tif.tiff0000644000175000001440000002245513214346535023326 0ustar multixusersMM*$************************************************************************************???___ooo///OOOwww777WWWggg'''{{{[[[+++___ooo//////OOO'''{{{;;;[[[kkk++++++PPPTTTdddxxxxxxhhh$$$ppp888(((DDDĄ```---+++KKKVVV***|||ffftttFFFrrrVVVFFF8hhAAAMMM +++KKK lllzzzzzzjjj&&&xxxjjjsssKKK ***RRR$$$XXXzzz,,,rrr"""zzzDXXUUUKKK sss b"`l @l@D8(@@8D@@tt@ @tԀD@@D(0@@eee ɬ g~aafa!2!-,:q>A 1NΡΡ^*" 333,Lga^aG6a˪! !m,a!nnnnnJJʞ^F~Jb|||333___dgAag~a'aa[*! !5ʞnntnnnn^>nnnFRiiisss333SSS???___aa'aVa&a;aZ!!2^n>>AZ~nRF2\\\iiiccc333SSS???___wwwagaGNaFK AB! >:bB^^V^ |\\\###SSS???___Ig᧞aG6{Fa:aj*!l:nLnnnnlnnR^|\\\)))SSSccc???ooo777,$aga.FaFa[J!R!>bnLn n|~nDnn$nn\nn|n|CCCoooWWW,LggAa'N&a&aaj!!AnnnQ1TDnnnlnnZIII###oooɬ aga6afa*#b~Q>n>fnnnnnn^@###ooo///OOO,L1a'>aafa{! JAa%!.11^*Z|nnnnvA*ccc###CCCooo///OOO),gag!aaGvk2!aaai~)aqva&&f~nvNZ@ ###CCCooo///OOOggg),Qg~aaGVa{aZ!c!͜aaEyTayy!A1IA. . nQ.q^A>AZ@CCC///)g~a'aGva{ak*!J!l!a5a4aᥴa94ٔ4YY9ٔa9!f>ޑ*qqq===CCC}}}///www'''agaǮaafa{˪ !!\a aTa aUE4ya44iٔ94Y$V!:Z@wwwGGGaga^aGvaGvaa;!K!!!mtaa laUaaa aaeaea,Ṕ>aI$>aZ@111]]]===OOOwww,$gaga^aaVa{K,!\a4aUta\a5a5aUaaa,aaaI^aiAZ@lll111===www777WWW), g^aaafsr!c"a͌a4$Uaaa5a5aa atᥴ94If^Ρ*lll}}}===]]]www777WWW,Lgg1>a'.aGa[F!ABm,ad>aat5uua ayaEi^~A2lllQQQ===]]]www777WWW{{{BTT8h!ؠ 6* z`F`V0606060F&z `z z` <r]]]777@@@---]]]mmm777gggDDDjjjXXXxxxDDDPPP888XXXhhhpppXXX111ggg;;;$$$,,,ddd***HHH$$$lllBBB222hhhHHHIII---WWWggg$$$aaaRRRBBB:::ZZZJJJtttRRR"""<<<***444888JJJhhh)))MMM---ggg'''GGG[[[ ppp000PPPppp mmm---MMMggg'''GGG[[[]]]aaaNNNFFF:::666ZZZ:::fff&&&***FFFzzzZZZzzz---MMMggg'''GGGmmmeeeEEE%%%999999iii))) IIIqqq MMMMMM '''{{{[[[kkk+++ sss333ccc###CCC}}}]]]mmmMMMMMMMMM 00$  $$*$1?$RFileIcon_.tif.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.tiff.tiff0000644000175000001440000000705413214346535023472 0ustar multixusersMM* f P8$ BaPd6DbQ8qV,cr5 AJdITE+̮F %J㨏<@%QoE2BiPP2°cD_u;TU%DiҽI+l4B0,l lvM ]w q~8K{}D !ܮ\v8TEQ#EPTBo"Ll[ Fl=MK1Ϻ0C2e#PQU6eU"+UD_agQýD80Fx^jѶ +#-EJ2AF|%]?TSo_er g{MBTD8+V}aj+@ Dl!:/J |l1 1q*ED D+dB 2.CDaGA=Fڜl2!z l(1(1ԟ)p%IJX‒?Xi .pRJ#a\Rw'%wyf %pQV" @&$@%[QQ4X!"x8@0S,"@V?7 p@"WgM߅rW%+V?2Ҍ8uD 3u6F`&?CrҲ|9zC@<l _a OD *EdG h٨#hZgc9%vHya A,M?#eNx0F #a$TlwR`}M2n-$Tt2[SLPbN@*@ ̝l2%qFuB0*qUZJaa!҅(8c5x iEe2 q!/svo \㜠N)? wA۴n+PBƸTCX@! p2tѴ ejG8aae%D20å4o,Y8$3MΐHZ&xS@bT lL$7h[u8@*!⢕#l4j!vdJ6PC1Į&3N/%JeuEr98&.)݃PYu} N"Uu4 @?q^ ʈO v?+P6Hp\Jq<Rix%t!Y`'?}TMWPq.DkU`f9T6B%e(r2՗qRs G`,Œ 樀a[2vKJ9qj h7x?b4 aX<]2HB6 ^VI@<x%~8Q#\;w@ᛧ(g"XE2H?I+0+FQT:?MUi+OJLhm#PiMpinMYF 2S5}>|=xo#&, HRg, i1EEWTS^D6(v_$C5m-p ˯7"MI_Sa@[8Pf 쬰F®:'Wx1xبJP.AF֔:Α{cxf޸WpNt|+7 SK8 {7c̠t PR %uǝF/*jY[,g%p. T9 "!ܫuWrr"4#y܀@64ܲNxdLa LE6z<Ad%DaFlfc"<”dπI,m2 bB@lJtTDFPާ2'dġd d lOf>AL hL1 ` h @c P Ħ P0*p($A u NeDd@`䮗dlLXn!GP( 86Pʡ]ϘZkP4nrtSqf˱ +"@d򞇄pa 8JF$""2P!"@_-QQ9%Soy|R@P R 3" 3`D3tQ# YA:a-F3Lq!` f&GiM5"?R?a$`hYpznT7r <3  | S CDtUE35LLEt[EaFSI4kF`b>4;IOP#PPTPPpѢ(6/gR RUR5-Ru/R1Su5S)S3T9TU=T5LmCmUuUUU_UͯVgVUiVmW5cWukWU5X5XuXXY5YuYYX"00 ]$(R ' 'gworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.xcf.tiff0000644000175000001440000002245513214346535023324 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ,l,5U5,l, @ @ ,l,5U56v6 @ @ 5U5??'G'6v6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8X8'G'??8x8#c#'G'8X8 @ 1Q1??????1q1 @ %e%??'G'.N. @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??#c#??,l, @ 8x8??1q1 @ 1q1?? @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <\~>-M-3S3+K+3s33s3 @ @ ?????????????_??_?/o//o//o//o//O/'{;;K#+S#;[;7W77w77W77W77W7'g''g''g''g''G''G';{;;{;;{;;{;;{;;[;;[;+k+3s3#]->n&!~.:z:%e%3S33s33s33S3 @ @ ???????????_???/o/?_??_?/o//o//O//w77G;-U9-M5+k+7W77w7'g'7W7'g'7g''g''G''G''G';{;'G';{;;{;;[;+k++K++k+#}=!~66f*&F:*j*%E%3S33s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O/7w7+k+;[;=M%%i>5e)+K+'G'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;;{;'{;#}=!A.6f*:Z2$D$:Z:%e%3S33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//O/7w73s3+k+3c#%i!1a6)q!#C=;[;'G''g''g''G';{;'G';{;;{;;[;;{;;[;+k+;[+5U%>^&6F*&z2:j"4T4.N6-M-#c#3S33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//O/7w77w7;[;=]=+s35E))Q.!^&!A65e%;[;+K+;{;'G';{;'G';{;;[;7W7'G';[;=]-9i1>N&6f*:z":j":j"<\<1q1=}=3S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/7w7/O/7w7'G'=m-+K+=m59I>1A6>N:>n&)q!-M53c#+K+'[;;{;'G';k+3c#%e%)q!!^&6V*&F2&z2:Z2*J"*j2"B")i9#c##c#3S3#c##c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/O/7w77w77W73s3;{;3C=%y)9Q.1~6!n&!^&)Q.)Q.9q!)I19I>1a>>^&>N:6f*&F2&z2&z2:Z2:Z":J":j"$d$2R29y9#C#3S3#c#3S3#c# @ @ ??/o/?_?/o//o//o//O/7w7/O/+K++K++K+;{;'G'7W7/O//O/7g'#}5)q>%y);k+/w77W73C=1Q..N:&f*&z2&Z2:j":j":J"2r<*J<*r<2r<8x88x8:z:%e%#C#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//O/'g''{;=]=%E9%y9=}='g'7W'7W7-m-%y9;k+3c#/w7/o/'g';[+7W7#C=!~6&f2&z2:j"2r<2R,"B,2b,"b,"B,8x8(h("B"!A!-m-#c##c##c##c##C# @ @ /o/?_?/o//o//O//O/7w7'G'-m-!A!&f&2R2:Z:)I1#C=3c#*j*4t45u57W'?_?;{;9i16v65u5+K+1A6&F2:Z"*r<2b<"|,<\4<\4^>5u5#C##c#3c##C##c#=}= @ @ /o//o//O//o//O/7w7/O/+k+>~>!A!%e%&f&,l,<|<1A.=]-2r22J25e%'[;/O/=m-*j*4t4>^>#}=!A.&z2:j"2r<"B,"\4,\,^>%e%=}=#c#3c##c##C##C##C# @ @ /o//o//O//O//O/7w77W73S3:Z:.N.)i9:z:,l,,\,:Z*9i19i1%Y)%i!-U9'G'=}=2R2,\,1q15U%.v::z"*J<2b,"|,<\4n&>n&>n&1A.1a.!~..v:&z2*J*"b,2b,"B4<\4<\4,l$4T$,l,>~>-M-#C##c##c##C##C##C##C#=}==]= @ @ /O//O/7w7/O/7w77w7'g'3S39Y9"B"^>&F:2R<2r<:j"&z2&F2&F2&z2:Z":j"2r<<\4"|,*j""b,<\4~>.N66V**J""B,2R<2R<*r<:J"*J<2b<"B,^>.n.1Q!1Q!*j2<\4,L$,L$,L$4t$4T$$T84T$4T$,L4^>2r2<\<<|<:z:<\,(h(0H00p0(H08x(4t$,\,2r<:Z*&Z22R",t$(H00P0$d82r2>~>5U5=}=#c##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77W77W77W77W7'g''g''G'+k+-M-!a!:Z:<|<4T48X8,l$"B"4t$$d$$d$4t$,L$5U5=}=#C##c#=}=#C#=}==}==}==]==]==]=-m--m- @ @ 7W77W7'g''g''g''g''g''G''G';{;+k+#C#%e%)I).N.2J2<\<$D$4T44t4$D$8X88X(0p00P00p08x8,L,"B"&f&)I)5u5#C##C##C##C#=}=#C#=}==}==]==]=-m--m-=]=-m- @ @ 7w7'g'7W7'g'7g''g''G''G''G';{;'{;+k++K+#c#=]=%e%1q16v62r24t48x8(h((h(8x84T4"B":z:>~>)i9%e%=]==}=#C##c##C#=}=#}==}==}==]==]==]==]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;+k++k++s3#c#-m-9Y9>^>:z:*j**J*:z:.N.)I)%e%-m-#}=#C##C##c##c#=}=#C#=}==}==}==]==]=-m--m--m--m--m--M- @ @ 7W7'g'7g''g''G''g';{;'G';{;;{;;{;;[;;[;;[;;[;+k++k+3s33c#-m-5U5%E%%E%%e%-M-=}=#C##c##c##c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-M--m-5u5 @ @ 'g''g''g''g''G''G';{;'G';{;;[;;[;;[;+k++k++k++k++k++K++K+3s33S33S3#c##c#3c##c#3S3#c##c##C##C#=}=#C#=}==}=#}==]==]=-m--m--m-=m--m--M--M--M- @ @ 'g''g''g''G';{;'G';{;;{;;[;;{;;[;;[;+k+;k++k++K++K++K++K+3s33s33s33s33S33S3#c#3c##c##c##C##C##c#=}==}==}==]==}=-m-=]==]=-m--M--m-5u5-M-5u5 @ @ 'G''g''G''G';{;'{;;{;;{;;[;;[;+k++k++k++k++k++K++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}=#C#=}==}==}==]==]==]=-m--m--m--M--M--M-5u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.xcf.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/FileIcon_.xpm.tiff0000644000175000001440000002245513214346535023350 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56v6 @ ,l,5U5,l, @ %e%.N.,l,5U5,l, @ @ 6v65U5 @ %e%,l, @ 6v65U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8'G'??8x8#c#;{;8X8 @ ??'G'????;{;8X8 @ 5U5??'G'????'G'????#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??#c#??<\< @ @ ????8x88x8??#c# @ %e%??*j*8x8??5U58x8.N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ <\^>5U53s3+K++k+3s33s3 @ @ ?????????????o?$d$9Y9<\< @ :Z:*j* @ 2R2&f& @ ,l,>^> @ $D$&f&8X8(H(:Z:,L, @ *j*2r2 @ "B":z: @ ,L,6v6 @ 8x8&F&$X8!A!%e%3s3+K++K+3s3+K+ @ @ ????????????/o/ @ $`8*@ 2@"2@""@,"@,<@4,@$,@$4@($@08@ 8@ (@ 8@ 8@ $@04@4@(4@(4@(4@(4@$@ $@ 8@ 8@ (@ (@ 0@ @ 6v65U53s33s3+K+3s33S3 @ @ ????????????/O/ @ =@#?O??W??S??u??I??n??J??R??D??@+@>%@ .@ 9@ -@2-@*+@!?@'@-/@3?@5+@!+@&3@+@&1@$1@ %@ "@ @ 2r29y93S33s3+K+3s33s3 @ @ ????????????7w7 @ #@#?w??{??C??E??I??V??z??B??x?@=@26@ 2@ :@ *@ :@ :@ >@$6@ !@ !@ !@ !@()@,5@@ 1@ )@ )@ 1@ 1@ 1@ 6@ &@ 9@ 5@2@ @ ,l,)i)3S33s33S33S3#c# @ @ ?????????_??_?7w7 @ -@?c??m??Y??q??Q??^??F??j??l?7@)@ &@ :@ 6@ &@ .@ >@ )@ 9@ 9@ 9@ 9@ 9@ 9@$9@ &@ .@ %@ 2@ @ <\<)i)#c#3s33S33s3#c# @ @ ?????_??_??_?/o/7w7 @ 5@-?C??u??I??Q??n??V??z??\??h?'@-9@46@ 6@ .@ &@ &@ &@ >@ >@ )@ 9@$9@ %@ =@,9@$6@ !@ 1@ <@ @ <\<)i)#C#3S33S33S3#c# @ @ ?????_?/o/?_?/o/7W7 @ -@?c??}??E??a??^??v??V??R??d?7@%9@>@ 6@ *@ <@,@ ,@ ,@ 2@ :@ .@ .@ 1@ )@ !@ 6@ 9@ %@ <@ @ <\<)i)#C#3S33S3#c##c# @ @ ?_??_??_??_?/o//o/7w7 @ -@?s??c??M??Q??Q??a??F??r??t?'@5.@ 6@ :@ <@<@:@ :@ $@ 8@ 0@ $@ <@*@ .@ &@ :@ 1@ 9@ <@ @ ,l,)I)#C##c##c#3S3#c# @ @ ??/o/?o?/o//o//o/7W7 @ #@#?G??K??u??q??q??I??v??j??`/3@"#@:>@ 2@ <@2@ 9@%@",@ :@d4@,@ 8@ 8@ <@"@0*@ 9@ %@ <@ @ <\<)i)=}=3S3#c##c##C# @ @ /o/?_?/o//o/?o?/O/'g' @ =@#?O??w??c??E??I??I??f??B?7@#@&#@:%@ 1@ &@ 6@ 1@$-@*:@ <@,@ :@ <@4@,@ ,@ 6@ 5@+@0:@ @ ,l,)I)=}=3S3#c##c##C# @ @ /o/?o?/o//o//o//O/'g' @ #@#?O??g??c??Y??I??I??F??T??`;/@3+@"3@$=@$=@05@9@ 1@ )@ .@ &@ &@ :@ :@ &@ *@ >@ #@0#@0*@ @ ,l,)I)=}=#c##C##c#=}= @ @ /o//o//o//O//O//O/'g' @ =@#?{??k??C??E??a??N??J??h??p'?P;?@9'@>7@!?@97@!+@:#@0=@09@ 5@5@-@0)@ %@ 6@ )@ #@3@":@ @ ,l,)I)=}=#c##C##C##C# @ @ /o//o//o//O//O/7w7'g' @ #@#?g??s??}??Y??Q??^??F??B??T??X'?h?P=?p?H+?p?@57@1;@*/@+@$+@$+@&3@$'@89@ )@ +@&'@8*@ @ <\<1q1=}=#C##C##C#=}= @ @ /O//o//O//O/7w7/O/'g' @ -@?c??m??e??i??~??f??F??T??d??t??P3?H'?X'?h+?H3?p?H3?h+?P=?H3?p?p?H3/@-@<-@0'@>;@&*@ @ ,l,1q1=}=#C#=}==}==}= @ @ /o//O/7w7/O/7w77w7'G' @ -@?c??m??i??I??I??V??z??B??L??t??`/?p'?X'?x'?H+?p?H+?H3?P-?p=?p?H3?H3?@5=@"9@ ?P5?@>*@ @ <\<1q1=]=#C#=}=#C#=}= @ @ /O//O/7w7/O/7w77w7'G' @ 5@-?S??C??E??e??i??a??F??R??d??T??h/?h?X'?d/?x?h+?h+?x'?H3?H3?H3?D7?p=?P='@6%@ ?@5'@&:@ @ ,l,1Q1=]==}=#C#=]==]= @ @ 7w7/O/7w77w77w77W7;{; @ -@?s??c??C??m??y??I??V??|??D??t?/@3?H;?h+?D7?t??d/?d/?X'?x'?h?D/?D7?h+?X;?P--@4?P3/@.*@ @ ,l,1Q1=]==}==}==}==]= @ @ 7w77w7/O/7W77w77W7'G' @ =@#?O??{??C??e??i??I??Z??B??x?H;?@'?h+?D7?T/?d/?d??d/?d??T/?X'?h+?h+?H3?P-?P5-@4+@&+@:*@ @ ,l,1Q1-m-=}==}==]=-m- @ @ /O/7w77w77W77W77W7;{; @ #@#?O??W??C??m??E??Q??J??\??D/?@''@!?H3?h+?d/?L??t??T??T??X'?D7?p?h+?P=?p-?p-@<=@$#@:2@ @ ,l,1Q1=]==}==]==]=-m- @ @ 7w77w77W77W7'g''g';{; @ "@2-@5@-%@%9@9)@)1@!>@>@6@2*@$*@8:@d&@,6@<6@"6@"6@"6@<&@4&@,&@4&@4:@d&@4&@4<@<@2@($@ @ ,L,!a!-m-=]==]=-m-=]= @ @ 7W77w77W77W7'g'7W7;{; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,1Q1-m-=]=-m-=]=-m- @ @ 7W77W7'g'7W7'g''g';{;$D$*j*(H( @ (h((h( @ (H(8x8 @ 0p0$D$ @ ` 8x8 ` ` (h(0p0 @ (h((h( @ 0p08X8 @ 0p08x8 @ ` 8X8 ` "b"1q1-M-=]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g';[;$D$>^>$d$ @ "B"<\< @ ,l,"b" @ $d$*J* @ 8X8"b"(H(0p0"B"$D$ @ <\<,l, @ ,L,<|< @ $D$2R2 @ (h(<|<(H(&f&)I)-M-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G';[;$d$!a!,l, @ 2r22R2 @ <|<:z: @ 4t46v6 @ 8x8:Z:(h((H(2r24t4 @ "b""b" @ <\<*j* @ 4T4:z: @ 8x8*J*(h(6v6)i)-M--m--m--M--M- @ @ 7W7'g'7W7'g''G''G';[; ` 8X8 ` @ 0p00p0 @ 0p00p0 @ ` (H( @ ` 0p0 ` @ (H( ` @ 0p00P0 @ 0P00p0 @ 0P00p0 @ ` 0p0 ` 6V6)I)-M--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;=]=!a!.N.&F&:z:6V6&f&:Z:6V6&f&:Z:&f&&f&:Z::Z:&f&:Z:*j*&f&:Z:*j*&F&:z:*J*:z::z:2r2:z::z:2r2*J*&F&6v6)i)-M--M--m--M--M- @ @ 'g''g''g''G''G''G';{;3s3-m-5U5%e%%e%%e%%e%%E%%e%%E%9y9%E%9y99Y99y99y9)i)9Y99Y9)i))i))i))i))I))i))I))I))I))I)1q11q1)I))i)5U55u5-M--M-5u55u5 @ @ 'G''g''G';{;;{;;{;;{;;[;+k++k++K++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M--M-5u5-M--m--m--M-5u5-M-5u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.xpm.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gqview.app/Resources/0000755000175000001440000000000013214346535022006 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gqview.app/Resources/Info-gnustep.plist0000644000175000001440000000132213214346535025437 0ustar multixusers{ NSExecutable = "gqview"; NSIcon = "gqview.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "gif" ); NSIcon = "FileIcon_.gif.tiff"; }, { NSUnixExtensions = ( "jpeg", "jpg" ); NSIcon = "FileIcon_.jpg.tiff"; }, { NSUnixExtensions = ( "png" ); NSIcon = "FileIcon_.png.tiff"; }, { NSUnixExtensions = ( "tga" ); NSIcon = "FileIcon_.tga.tiff"; }, { NSUnixExtensions = ( "tiff", "tif" ); NSIcon = "FileIcon_.tiff.tiff"; }, { NSUnixExtensions = ( "xcf" ); NSIcon = "FileIcon_.xcf.tiff"; }, { NSUnixExtensions = ( "xpm" ); NSIcon = "FileIcon_.xpm.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/gqview.app/gqview0000755000175000001440000000011513214346535021261 0ustar multixusers#!/bin/sh APP=gqview if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/gqview.app/gqview.tiff0000644000175000001440000000750313214346535022215 0ustar multixusersMM*D9d< AG@$=yGR%w)4E4\2\>Mq>"qYUeDܮ;6ɒ<1ˎd/2S,QLoѾ ߾?;aB7$: ROPc&|oDޔ[lS8l2orY5!A{'`IܲgMDE)7>qS5+F閎GRâ1Y,Ltqo! &Gf 2IBw)۔g`=Db "DsȮi# Dߒۢg<'rJ R*.e_^Y5-* z1w4^ʘ 8(ȅ3 e96!H_I$A(ٌ ' <CjYF #nI=-LdX,~)֥Kqi[TXSTEo2:.חY b@?l<&vHܒw9(+:!F T+, tI tIgR_hLd@FgnTl_P7,iu$' _,0b c!CC$5fO7(t ] y'4?uD^_t# KJے٤%5!Jhܫ+;SR%cĨcB䒸veK\4*J9.}2IF*Jߋ}Sgٓ~SfwzJ P8D5xG] ܒ%Z=%W[A" 'CJ⨘И%*ޒLj {BkXVԖ ͕ jq0:.LŀU1ᐘjctIJ(JgZT+)鲚p}RD*ޒLh%J樘搘%;Q1[ ,ⲬіżX`'_F0$I!1ɏ\>* jelD'MDƵ RVu17Q1!1ܨ,ʫa^LwƯLx~cP3hNHLuUYZnXLS%'PxD?ax{±;Ê6jƜ-eƳxtIVWˡ5|ơ*3-Gdg3,ßÕSWb֐s>-bDoFf|lH|=6!:Qu<]Jg-#zÒR +_lzmGI^0&D%rFWf[QGlrcyBf$8 L{6_Kw{ n6m"þA{`G*Ê:B∻/f"Hu$u ÑR]~}^Jzi'ws=rKG ~⌹/CP]pXqsC3z]]D)S·5K3LIbڑ*xdaL+U`nA%IXr4?b{Оa>}~wz=I 35yYr.BUy:`MMo"^/%8oy߭>'i'OY)G۪J/ 9 \#|9.)+%8w?Gcv}z~=m>=;3Hz`ɕ2#Q1%j6FY)i׍^-Z3P+fARfTqt–&xsC&,ڝٟU?T"I ИJ1ͤ$eƗkLI~ 5&<CjNCdEOIX(LsD(mXb stNex:H^kڻu]y+`@}CGfF*J6Fzm_E[w@eC˳FE? `(_T8Е`, AI9!1˙2l`nd *;e''*|qJb+9%,ݱCPaҧʇqcPHC?(TPKfف7aK,$O>0 ROIRi,hTYT8Ò&8Ɯ8 ypqRKzjkf}?Z^@=󈌪H&=nSOr[Eaυ_W巳]]53n=זy1B{sKNƟS[2  | #ذ<r#d@"yYu\:H.}ܯܺuxIA% k8Dq r+U$G#-%~] tnXsS#߈aS<h%fc:ۅ(ߺCut^b.t`/sMDN)?ǵpAwĴk\6R|[È}fHa:InmWG&>C?zq 9:nMHaAw,;o-_#h/駍sDps<6EЖK_jY70ztXJgsBYH)}v^(,].]@Y?Nb9Sߊ5o-q(%cnsu? ग$KcdZWUS@8LÜU=ȂR9rO0W2ik:PJ]ݴ)>!+}HRv:U;W)q.w]?%n>YX͋6jÜŪ)γ/sWnfyAW3ݮeշyq\SIi6~VNʟy1=< V%t-+GEykPbǹW}ʼExkQPÚis_ z:X样Z2WK|)7w4T8RprPR翨JkώT_+6CB˂K̀KI.3R yrՂ\; pHڒVcq<أ)l1 "hN`ba d7 R[aA!.X^+>Z ؔ4aQTpcg+5d%INE3RBNxdLMs$C,RJeCp@,K 8(q:J+4RK ,Q,-[xVCy28mWD fZbAא[R6h0%i "n(EDTm*WIkdY\ҥ[ÇKAnfu00   0<1?gqview.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/gvim.app/0000755000175000001440000000000013214346535017474 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gvim.app/Resources/0000755000175000001440000000000013214346535021446 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/gvim.app/Resources/FileIcon_.c.tiff0000644000175000001440000000651013214346535024372 0ustar multixusersII* P8$ BaPd6DbQ8q,s5 AJdI#9b_+-S]hqԭ^uF}V_5iC<y2Ze F0B6W.ǻ&`'R?%MDɨdcD=v9WŇ!MnQ&>%H:a'eR!fP["lAwnC40!prĐQ7<1AtoN \u!- Đ:ÒHU(pj,10I"Qv&,HbI`$ xa)fr-T@@l ,ˁJK.PZCp& 'LW|7"k(DFREĈ8F4 (.p b0d3N&4lA눨d?H`]s3Lc@ 0,*(G2:Dɝ3$l͉YA-Ch08If+cZ%,`͈0a m95+- L*.z UmJ?أ:4&|ҢSFD( P 0EAh dd>1T h@خAjRY4G0JT-8|8  6ItFԦHcF v+,c`h/tbSPȻ(E4{@7)*e`E1 X>T!  Wjъ^D-ajLl*c1(uD !db,R eC 5`hyҬc)WpVD?P/}DhcXjjTa'4`Xb0X(}RAV@ě?,. 0WR]PbԓBPT,9K 58&axp*p hzOJENˈT c!{ WBS}3̬Q"M^1mп}:X{@fkJj,B0J=A7.)z ޅRm*8x-4cМLCuZ\.r̸2 )CDCd:!AH}pL@m47BJ=cm[vL:BH:p-h^5 C gW;[30Xà& CXFyXt\ƸSF \'&>]p+ܼng(e0B $QQ 7Q6&T `+~xO53Eik;m|VjJŌYgqH" e棭NEˡ'x_έM+H1a].)aqXP D C}CnN0 jtf+p^؟20'C$$y᭓YS ЬF>X0Ճ0Ձ›`娌@t؅Es$=<`'"hx5 7`rzWGs/iC2[\ݶTk?'clPN"A>H `&cn, OkYv&l#cH \@r 0RA^ a #ʰǬ^^Ta B6&H6,P礒 l(Yrq bbbl#鴀Q@K8K!x n`g]K/}< @F `L0/^,Ag`F f$bvA8rhH!v`>`<.CR^J``+.E(JHшfS`e$If @&0lk FmA|ĂhHr> B 2FƺJhzrTr`NQRK!V K`Ql I ʛœ`&Wk;+/ &(xr &Ž|aFm| |!fhs#J:@9&!D".K~O> GO'' !-B/B[!42vra:Hf[!>j `8 "Dr@^!,X 1XmD G7-rsQ [\& '&tx R  lhX ^a K .q3 s938-9s:&-H=:S:4; z6ⷾӟ t:/d\>0[M`~awu,OjE{ vgi"Q yfQxFK p4Zu-lwZGfGJA6=g<=̥)Y 0@0QZN<"SePr! qor#Y{3''R~' ncaU19OTUUՀ %^Œ4 ‰~JA bXȕ˜$hRٶ}hYQ%djL!o}%xcd4 UPUAC|g~VVu]MvaR l.'8(y1:m]D ~A{\'WxMG2@9 PQ",ߨ~UCp ǶxQbDˤ! ǒĕx+7YoqEt\'a~7i@HfAkae VGzO 1d2[i=A|:H(YO!C 5P"U]TQ!tIWKQXQ9U<_?Q֋G <hXR7(l\q\?Ð>KCQl9Bؔdg.aIn2XϔÔTPִV;p Jһד#^=})c WaV p ^lr\q>mE MpTbuE7)bn8{d-+@i%~)lg-̯rƐ¢PHƚV X_V?àVUCtR6LՌoU͸ւR4 E|$=1p+&b(2  S6.p_jeaVmMC %2j X *hra'MivC` 2b_5~* q`!6j|B=LȒTgi 5 a?cix\c A)ld>X{lp(ݐ6pô x3zN @LBڏShEkgC޾Ւ>v |.6 T`Wa>HAXtt&](YеDT ~*xh  V <Aj  f`fj` uaQTŌ d .l ~WQ d8HǼR>e PեAB[!* f) @J*aThA^T.\A  Pps,LF,Z\w@!Hm*L QT.!,ώ+ldv vZbJP[ ;~",` ,lUTei;@1AF* $ N4QATe r !r!!"2!*Kэ#ZCQK~$$2E'"7U%2Xؤs%_%W&Ra&rc&m'2Zb01}R҅((((r()қ)2)RL#?*+ +PA++2+r++,-b--.2.r../2/r/ 00 b  ( (R ' 'gworkspace-1.1.0/Apps_wrappers/gvim.app/Resources/FileIcon_.h.tiff0000644000175000001440000000647413214346535024410 0ustar multixusersII*v P8$ BaPd6DbQ8q,s5 AJdI G'ZPg<4'%xnRё0olHL@rH8+6"N&t O9Wur~ͯYbM&>``Y#q̏FBQN? t"|(-q|RbCx!Biĸ9r"p2R۩^wFʇPRf93r t,Gubi?H_H&#ؘF B `xЁwh3r8Gf 62:K0,n80)Aj 4A2(q]q,tKQ*FH"`r\D6KL(3s b(@JmA넨CpCD" fad Tj)F8.GLٗ#dLP--(E d0s" F<[Nh9-I2:;QvǶ:.bT""LX :EF #E9P?ŀ2|  ЅהdPJs ^ ZbHڛbhH@)W>+ ,\KI豥L:Z EhVe(=hہ&)*Fŏ# , D=I?_YGU$l 5:niO.Ft\S]+ܲzf(e0B DQ 7VQ2&T `+3Kؓ*N{E[F[KT/P,dQ3A?Ād#('4ew`-̊.MA;K7-*cP61_.),& jMM#Bz2؁ѐWk#CG^s"|2B ĐIM%Lx 1ز8_F;P?aMr :k"ah4 [OVR ˸9~4!-k*5⓭y2(Ac %0B9۳"P 0D`hvjnYukH 2u4 g* C/z̛  >jd(T,t(A#jµB lA$Xpq^bGdbvnHETo!|jLfub\O.Xxl ^ G"a!`F f bAvkc!~wz`h) G8<J̴a``kg*ŮHmކM+fLHQQatqHrbvlgplHx hdBs+!*EI `>+emDjl$s  H &F%&BdFmt |fhs"BJHɀ9%D,$.K.~@OP '[o~a.g"nd!Jef@a$G46Z+`t2M:OVd\bms!~\@϶nm4 NJc2 " sy83'| 8s9(,;9S99::5&ˏ;kι&;<3,>M>k>>s>>?3@3@T&"A)AJAA!At%A'A+B4)C4-CT1&ƒCAD4EDtIDMDQE4UEtYE]E` 00$ m , 4 (R ' 'gworkspace-1.1.0/Apps_wrappers/gvim.app/Resources/FileIcon_.java.tiff0000644000175000001440000000616613214346535025100 0ustar multixusersII* P8$ BaPd6DbQ8q,s5 AJdI!y"fY\WUvt;F2j{hM\E G*# 1cmP[I5L;ULN VNu|w}XfNEKWFpiJ0Z֭j!1,biqܷUϗwA}LX>~yga*_)U ꣫p)<0ja}:޺떩#P|"lPX6i$۸ߗE ^aJ"[\=1@qzt= :VŘb~F[n,)!6yS!X:G8dL= ;?xgAIX-: 1X8Vid,(?2U/[1~-s(}"\ нūG8 8}àYX*u *ȉ#"TLdh1x Xx)qhTW+br^Jweh k %LRIQGKy=(jqW2Zys/,L11Z ə D1(C,3-&0QMp eyE$d"Q:+ԷʌU=&!$44puY !6QYm`?ƸjL- 7ByalXqlT˚6%tGF%hȩKD)Q"T6PX PlqKAȾB\SaÎ`xxaS;Z=Xh!VMZ d 7-4ҁ`ƵB@xpIDj*hZdH8Y*BU4^;"B9@+~+IZDaEA$L B@I%W`HI*$Ѡp-: 6Z ܏G@Kh/!5{Ozi<"0!0{=&px |3( M1G7زN\q\ŪA\;(s 3dG$E.&ٮ^OA*Al`l Ehƴm.EER@U+~l;a/,Q SgY3[KvppQ4A& RLS . ȥ(_[TH jI^%}dj /px!YjIH6(:8BB@Q$p_D.z &C|Tऩ˜tf U5ه iTLA? JIg*4SOA'%~v0 2lt!Dи"h^7{S)X2l< ^CWcK?F@Q*2 ,`$ہBdF=0F89haZИ- k C3G6"fZ9{;oN4AJ| kViv|~{@j 6 ~~? >/k=kRF@A>ѥtP!n aFD lDdbjtT  ~ R jl`g"lf>[@k ptT@Z di{ J&zB B/a&Z!| `E^Aj  f\O`f{ !AT q. ~K ~ fohmN,ܠAn*BA>PA anOj`  api1i!F)&(\uGHttfѼ.hƱr![@|fDQG  BC+ , ~Zb!?! + -"#r;#m$=$(nf #IDȃ1 ATQ2i&k&rs&u'}'''r'RP)HDXqNe*#" 4*sr+,,2,r+,Rқb0ܨ2M.2..R/2./r//-ac0 1';11K11!2s%22#3 093=3A43E4sI4M4Q53U5sY300^  f n (R ' 'gworkspace-1.1.0/Apps_wrappers/gvim.app/Resources/FileIcon_.m.tiff0000644000175000001440000000647613214346535024417 0ustar multixusersII*x P8$ BaPd6DbQ8q,s5 AJdIb ^ %cloЊArԨ|gt ,.G%!.goYEFvte!d%Q[JKY-ŒrS C3T<Ć9щ>fxdAhtAcQd!% O/Hr:HҔǩfwP-T2sP1 L5T;3D3LY=svc tgYggHr^8n]oH!P1.eDn9S&J#s]XpJ$2sU/UVճEaXxe?`t`Y8i?xduji}%ba`ũWE)CdnU'pR9 F.jF%FhM:4N c<j4Yʱ,@^FH}zInG=RK %8L"Fۡ# F*xS*eD~V9ANhbU1cH[X0m´1 [IKFXYqQ PMbqBq,{ʩLk)EZؔ?xK5a$BHU}?h0tb$ ex} aLT cK"W5^WBFذ2ƕp bpDەr.-"Wp,nY aP/~D=@iOܩ m@Uɥ 5#t<[P$ '۾?7T!x AlԱPCnoViAB0,dlM_(w`g4uw$1xPS"P#%V]-^^ %@o8S:D7'|`uPqb=Y-F0K~5l `_H*nA$ ;}1*#t/qh:)Du=OFH$`3 E0Aډaz<#KceCP+AX MAc /I{,|TǨC4+#9`"t09j6!l\V`0?@zTkՐ,?ØqxL21B[):`:q caxT)B`>a ŅjkbdklA~RH @[ \̜ >jAMp׏.TTa B62 K0l<ڽ"@lA(Xtr0Gdbhcw%nhHAEfPB|jRfmf'8A< @F p,A*@lPb&&k thHAv6̀NгdkDV-l[J/>H 0MeFPI!f )R@a&0lllwA|w~ hHs>@|P^mvr Tr Xobq`[:;!fE 1 lq@GI)LduBqh (q H !1Y m j(f(RLj`nQp22Ȳ6l80K<ˆsa$X v)q'21ca@.g(n~Jh f`̃ u^,Y1`!tO- Nl!(-c\ma!$ s`o ^@ c3-888Q'S9s'9:b9@;3m;hs< >>?3??t?@@킂Ayt#BtB!B%C)B9C4;Cs>tEDtIDMDQE4UEtYE]EaF4eD00& p . 6 (R ' 'gworkspace-1.1.0/Apps_wrappers/gvim.app/Resources/FileIcon_txt.tiff0000644000175000001440000000435013214346535024711 0ustar multixusersII*" P8$ BaPd6DbQ8q,s5 AJdIs9U^ r?ܾ7 {}7#<H@ p"J1R#rYG1 (< eĎR溦T睮qqwyr 7H} J9' BOyw猵#I*g/'C8@:Ҏjsn+;*,Ώ4,j0L|΍)KAMAvD#8Jy#Iԙ#S˭PI;]Fv0,]ڹ# G(S?hjb΍=CzڢsZG*Y9K/x,D)V!0&5b%bi,ʳ1D \a Ql)OW,z , cۿ&^ Sbp)#W>O.5F)<\U$U(ۚbPV9[xC` eŀfcK<FSXdSn.$T% 6%ڃylbx`'VN6b5*mTsgm4=p5 0 ĕW0zָzkÐΑߝg;A۴n7nGX[1DSͪW_g&|o5G-nȨXڛ{{ ^/1>Vf<B^:A:S:`|B_ Dq?`L fȣ!R|1eBT*;bj:nu5qXå A'!u A"mI DsS+rwnnH7휆,C^YyEBAYx( :C9bX D04dCprWJ?'Ь?]X [QI;&F\\:Wv,mxL=<}=BE|d`|2>Fw&Ot0Hcl/F(b~h1AP-Dv͢=)bQ12Fmyv<ǨhXسm`՘`ڈ 3 %EUR.42O!3& eH0 T@obeQ"P e/pI@eoi6{GD?fd>xZ&}9H#Eb$NS̼(83<X7(PC֢e+QfJRF9˄ Ah-p"КWX1F.M r%^B!, ֜ "U  Q29Rg VH&3p?2ʹȌߊ3gM~i}rEBlV 1%Db ?`5K@*qDA !#~`"ėɟ74zo)7w?X"g/!.Mw &AlAb(v l"PhRjb, `]as* OP  Dd˜do14P~dMFhe$kG&`:!"-PtZ[R0JA&@݀nlK" H BalX:r!BP-7Om6H}q4dbxw xA TPdT!D/Pa`] zסpǀL^"*@+1aK@\<@=t$Q48e1 0F10eq= QLrqJ !V!Vb!>JN @-$dtCa`NH$0:  `D%*3K?7?4htJT@ \ˠ+^\m!0 I/6x!0d B/EDEX`yP4dau աwE=G3H '?OJPhSv@*.`< laᴾ0OvL6!N "r` GN&}D* [YkV5"?SJ@u*@J86wT|* +Qx a<]`_AZ `!Rb @H [cv >e6Y#%eep;0veR %TtgwhLL*@0YprB2a `2V2 wY1Ba vvK;@eXlrZNWx\qoGfVof6gHTI^  }h5q* |$!h AX[,2 .@ 2c;C$$Gt n9ZjI>XJ: T`0 /WLן`Fsvzu.#IT~O^{qqFJd>^K)sɫyCw PwXUha|8[ VxjȠ @ 8(bxX L4K9'F ה0ٌbP@Do8̟TLCw8 bP`tYxt|<*[%ZR~)|aa櫈nLDKľW#wXY 9V;,Q"-nR4+ ,gwZ"ilP94y 1¬**՚w9AĀ,:T$\`/L`s!԰&ȩNdEI:Y#څAdQ.z.4eY:FaD `vN>!Y s-z:#"z4:.#<EcD4AeKϮ),"Ӄ[!ُ@&̚_{i #00T\d(R ' 'gworkspace-1.1.0/Apps_wrappers/iceweasel.app/Resources/0000755000175000001440000000000013214346535022445 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/iceweasel.app/Resources/Info-gnustep.plist0000644000175000001440000000045013214346535026077 0ustar multixusers{ NSExecutable = "iceweasel"; NSRole = "Viewer"; NSIcon = "iceweasel.png"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "html" ); NSIcon = "FileIcon_.html.tiff"; }, { NSUnixExtensions = ( "htm" ); NSIcon = "FileIcon_.html.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/iceweasel.app/iceweasel0000755000175000001440000000151413214346535022363 0ustar multixusers#!/bin/sh # Usage: iceweasel [ -GSFilePath file ] # simple GNUstep launch script for iceweasel navigator # # -- ICEWEASEL should be the name you use to launch navigator from # -- the command line ICEWEASEL=/usr/bin/iceweasel # -- ICEWEASEL_NAME is the (beginning of the) name which is shown # -- under ps or top. ICEWEASEL_NAME=iceweasel-bin # #--FUNCTIONS # usage() { echo Usage: `basename $0` '[ -GSFilePath file ]' exit 2 } #-- MAIN # # -- establish name of file to be opened # if [ $# -eq 2 ] ; then if [ "$1" = "-GSFilePath" ] ; then file="$2" else usage fi elif [ $# -eq 0 ] ; then file= else usage fi # -- check if iceweasel is running # -- is running ps -a | grep $ICEWEASEL_NAME if [ $? -eq 0 ] ; then test -z "$file" || $ICEWEASEL -noraise -remote "openURL(file:${file},new-window)" else $ICEWEASEL $file & fi gworkspace-1.1.0/Apps_wrappers/iceweasel.app/iceweasel.png0000644000175000001440000001050513214346535023143 0ustar multixusersPNG  IHDR00WbKGDIDAThy]E?Uuwtt$,@Ip@dͰ)h&.#pc98ft*5"QA8f4t_[U5N:{[V~խ'ya/?ܞrqm+Q|NBw9S]}qܼ;)sd۝;!_Ix?m w;mRv _o/n`+nomek*=:P660ҶwbƶԖ3SGS϶ۊGJhNzgl{+v]h'JxW\>Ɔrk!ZI!#.)e^~?rňRO{wCw(R2YZ~ɫNo:V4ŕM{ٲ=%Ċt T*6@pe{ox{5I~~gS 46^o_}Jݶ6}3/@ r̫Տ ESyyhX&p}1Q) i;C'/GE/rٵ7sEg&5tm:n|W9]zfK!h=YXr\n_1T!`F+H >d Gjzi\+ &OW`3aժU{Z~->c(|?+XD4bhx+#B`Eǖ0d40pR>=>Ú$Ja-kv?q!0~"цMt|R)Bc b!X"Ck!S,j~ z, UˇJ#"mښ׿ڹ~<SAXd $bȢ%ٱmJ%%oq\R!Zdž;_T]o(|WaӡzmF3polLzNp\.& -EJrYq$HC(_9c,qlBC%`.fa2V|g; L )ͽxuģ5tKva*V%IA~üB7GC~z?O;B}ņ8##CYV BکRLZG >Aҁ@X0 @YtQh)W,s1mfs7P[[^hȘ.ZWЇI]7WBurmo#JXkZ:]e%8%HpP'ؿ>̆gٻ22^Bx9+G#0bOt*Νu =̋zʔK=rW7@* f1ydV("vB1%r!WRa)b3k^? H'-XhH'2i33rHUuH\Oz Ǔ)PJ2ez3 G12ol @*E%IEn@!JZLoXF^@j @ $!t=%ecJJHR5ZlcBKNOS_r`=TB)$RJjTk#Ƶ#ș"X1 E#\ՎHR uǕirBoîěQM E5ެG4"DFZR )XbYpTXZHICcT! R 䇪&J UUJ[1=r6@MGY9#4RV}An&iYgٕ'=4Ր83Ţ@Z j>0V`EP*kh3[wRKXP`-B JL#p\Oqٲ *ly,a%9AmK}[GR)[tT cIMKaPEUE : B"1'~N^ \MRIyԤ|7M\p8>z4Ryz#v q W!% R220((r=)H$zRC&SW35!p^FCmtڀƺlwؔSc .2^ I$@Ḋ> ?J)CtS"gj҆>9䣪uEYnY6ll& ڀL$H%\I 5=P"?ijIKI>ɔGdIZƠMծe_G=2kr= )|-߱쌷yQXcS?!HfJgp=~tyZ7\H*UXF?v8Ybc&X:>3_0ߟ2JX Po0anBk@uS-#!U!kx~s{yp!ߵKiچ3$lRϓI+0O^{!s)̛˜4zkc᥶;:zGuDr K>|3 +gw @ZJ;PdgCy" !{rwwȝ[NЩP@zXS/VgN;,h 46*"v@χ"zcl zuP˟[(y`_R@rX 1~j}şv;?,&MM>1ZI~ף wta%bi,ʳ1D \a Ql)OW,z , cۿ&^ Sbp)#W>O.5F)<\U$U(ۚbPV9[xC` eŀfcK<FSXdSn.$T% 6%ڃylbx`'VN6b5*mTsgm4=p5 0 ĕW0zָzkÐΑߝg;A۴n7nGX[1DSͪW_g&|o5G-nȨXڛ{{ ^/1>Vf<B^:A:S:`|B_ Dq?`L fȣ!R|1eBT*;bj:nu5qXå A'!u A"mI DsS+rwnnH7휆,C^YyEBAYx( :C9bX D04dCprWJ?'Ь?]X [QI;&F\\:Wv,mxL=<}=BE|d`|2>Fw&Ot0Hcl/F(b~h1AP-Dv͢=)bQ12Fmyv<ǨhXسm`՘`ڈ 3 %EUR.42O!3& eH0 T@obeQ"P e/pI@eoi6{GD?fd>xZ&}9H#Eb$NS̼(83<X7(PC֢e+QfJRF9˄ Ah-p"КWX1F.M r%^B!, ֜ "U  Q29Rg VH&3p?2ʹȌߊ3gM~i}rEBlV 1%Db ?`5K@*qDA !#~`"ėɟ74zo)7w?X"g/!.Mw &AlAb(v l"PhRjb, `]as* OP  Dd˜do14P~dMFhe$kG&`:!"-PtZ[R0JA&@݀nlK" H BalX:r!BP-7Om6H}q4dbxw xA TPdT!D/Pa`] zסpǀL^"*@+1aK@\<@=t$Q48e1 0F10eq= QLrqJ !V!Vb!>JN @-$dtCa`NH$0:  `D%*3K?7?4htJT@ \ˠ+^\m!0 I/6x!0d B/EDEX`yP4dau աwE=G3H '?OJPhSv@*.`< laᴾ0OvL6!N "r` GN&}D* [YkV5"?SJ@u*@J86wT|* +Qx a<]`_AZ `!Rb @H [cv >e6Y#%eep;0veR %TtgwhLL*@0YprB2a `2V2 wY1Ba vvK;@eXlrZNWx\qoGfVof6gHTI^  }h5q* |$!h AX[,2 .@ 2c;C$$Gt n9ZjI>XJ: T`0 /WLן`Fsvzu.#IT~O^{qqFJd>^K)sɫyCw PwXUha|8[ VxjȠ @ 8(bxX L4K9'F ה0ٌbP@Do8̟TLCw8 bP`tYxt|<*[%ZR~)|aa櫈nLDKľW#wXY 9V;,Q"-nR4+ ,gwZ"ilP94y 1¬**՚w9AĀ,:T$\`/L`s!԰&ȩNdEI:Y#څAdQ.z.4eY:FaD `vN>!Y s-z:#"z4:.#<EcD4AeKϮ),"Ӄ[!ُ@&̚_{i #00T\d(R ' 'gworkspace-1.1.0/Apps_wrappers/konqueror.app/Resources/0000755000175000001440000000000013214346535022531 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/konqueror.app/Resources/Info-gnustep.plist0000644000175000001440000000045013214346535026163 0ustar multixusers{ NSExecutable = "konqueror"; NSRole = "Viewer"; NSIcon = "konqueror.png"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "html" ); NSIcon = "FileIcon_.html.tiff"; }, { NSUnixExtensions = ( "htm" ); NSIcon = "FileIcon_.html.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/konqueror.app/konqueror0000755000175000001440000000012013214346535022523 0ustar multixusers#!/bin/sh APP=konqueror if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/konqueror.app/konqueror.png0000644000175000001440000001032413214346535023312 0ustar multixusersPNG  IHDR00WgAMA abKGD pHYs  d_tIME  8yFQIDATx͚p?V+YG126)1\)6ôI@cPpQ! tH&9~ 3Go(\B9JzCCH}qjw0 -k{-JZi]؆}yyWGy7}/oI߁q/p>[K5a }&Q<ϛ/n&7y-[̿`ehhh)+l:3B윕\^,Ǐ[X,ֶ &,PK~ï٣}e_wumv:z!{ƍ6,*23Agvl Xy6)UϝwIEEBbH__؅?X=rŁЙFěo;O~?\@>q`^/^@ @WW>۶mp7zq%ʥu/|JU˻Z4FS7qMԧbyəko馓֭㢋.BUUEa\y啜sf~w\tpsVnkzh=+af,Ax< ,4"P|wXLd˖-~MrU7/+ZZKEt9%rfZR'Wa!9_O}/;HAR#&V"/(y:QɔePq100 lk'knFkPqփ5cDkU7uտZF D o}[P TysOCSȭZŋp( |p,A" VL`j % 튆} D,6=höҟmzΝ;S@oN݊PcuK"D f⬬45Pf"X3 `JQeЉ~D b&><&`ǎ :كA4CUGq!Eƨp46&P{$EPOkTW)@eN)-6oޜm˲Q,y)Zz[)RK2Y)I"xfl5FzDXC@,a @qsVg.9m۶(Av8׿mzꖪ(R`G5VѺZ!<f_gq>@*\D2cSSH#(P(sN lb _{5.r:O;Kn u͔H4 EF à9y&, *1(N1 hK Eֺ,| |>t)%bKYY5ްUҰ1)A!GV$XK1- p3ڄe4 >.J=a:"XJL;455O:&J1<<TtĊCiH!y0IV>GK]}.-'L'f`P3{;fٶ188HWWLLLf REHw21$,iS{ֽ K0t 8N5 d<:a-cw?Umg_#Hގa|+W;nb0c(U1Es\ÛP$c"{TO63W7ь"9@.,* 37PSQ۶ٿ?55573.Od` @CCCԩSLNNxRB_f՛\oql׮](2Rr ~?W\q PP$2,P Q&<{BEDB☓سuJ[= ,mN,Ydپp󇖃y|>=̑1ljxnEgm <쳴D$\.!NSYYI6`0XdRL[gm-NW?B۶) c&L&I$>|!{/+Vs?B˲+BP```qNM<\T*B ,"dJk 8\.c122(G}LڶD"B!D"ZH$B6f9x >pۉc/TUU1<^yd۞7g(dݺuo~|9r^#8IN w޽|>^/oo#0Nz `_M:f9z<w\ps1P&,J8p`0Voo/LpI+Öe( W_}5X봵N!pdqNw}}mڵ帢H윕\*d/ⅮKp"R~>*2{m©QM@IRUUUضM(]׉D"D"1 w89Q-B&Ip`&\rp`:1msOU  jZ;"I=8Ɲ)6̿_6N(휥ҵYk`cf)N?Dr6_f!IENDB`gworkspace-1.1.0/Apps_wrappers/konqueror.app/konqueror.tiff0000644000175000001440000000617613214346535023470 0ustar multixusersII* P€(H! &d"F>jhQNJڻwA'J$i)>Ν{g߽ݛX(Tւ,mTYU(Wb*.Xjx Lykӻw8Q[o{FY2~8Po·9]ĸ"򔩢| nμ1cU'Ŝ>)mx^=[o\9bȡQOjoFs-V%)wvOz} 6gȐi;\~~}>rL&͔l˨e6% !B#V=XcV ȑ=k=_"Rg"#6=|6#&_ 6@R'sf<-iփi#%T֬J;ďPGHCz"I;=o"9 uTzbY8<5iՍC g B8B"7O1e  ϋHmJ'Hmʨ ll05=Jsh*HO Mp j&+MS⊭W@׸lzcYOJ(Û^ u*BZ[kж[:Xgν&;ĸRŖZm^Oc<.)bHû{+G)ӆHJ>ZQy`I=0™0"Nz^,lr1 0isyS0TRψP;|aaiҰ^x9g/dcPi͞R j>hMҽ\PB I(&-Ұ&4be(@h/PB~p w8MS2}Bq/@  @ `xJ.4 ! $1qHO(`B81.7e#GmgH#r jMcI2j} "$>1m&5IQ+#v~#jQ}nz{ ac('se;1$|"G>OWXB'!tazXcQNE$q6RٞHo,җA`$-9&hMt<I"A*^t!l)FN񠷞½'ZXJ)bzޞ1,fuǙ#5f&D>uYY #6zU Z5g v@8 KXmm'T"%E0$sk3R:ae |Va|@83kapdkT9UB#ځJЄ@8GP…pRqwML /wl(cx25eiyտor?0F>3ˆK7q.aU6L4E 깚g\k@\Z1堊<@OU\4fPm,HfE]z]XWJ8U(pbfVBҬFؠg*vN*,`gwXFфkÜFx _f拈)uaUx*tԾA1BPJ2j;F).c e(M3Xyh, ipv+ tAigdA enS]u;ʺ.6 Cڕu#6ӣ5,JP `Z<3C5xNJ0u ^fr_zBoƻ;(r=6P0SXWǨ=),@8c}i]gb5u\f'"N |`'|_bsXr"l 87@2$F&!F]0JJr@B,Qi֥et Ɵ~(j &ʠ ̐ Ȱ ͈ΨȌϘ @@004   .: h 8} /NT_1/Graphics/Smartsaver/icons/Netscape3.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/mozilla.app/0000755000175000001440000000000013214346535020201 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/mozilla.app/FileIcon_.html.tiff0000644000175000001440000002245513214346535023655 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUccccccUUUUUUUUUUUUGGGGGGccccccUUUGGGGGGcccUUU888888UUU888UUU888UUUUUUUUUUUUUUUUUUUUUUUUUUU888UUUUUUUUUUUU888GGGUUUUUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///j*<<Y=rn|B R@@@4 sssSSSoooOOO'''Ll,; geometry = "712 203 450 300 0 0 1600 1176 "; iconposition = <*I5>; iconsize = <*I48>; labeltxtsize = <*I12>; lastselection = ( "/home/enrico/Butt/GNUstep/CopyPix/AA/NewFolder/firefox.app/Resources/Info-gnustep.plist" ); singlenode = <*BY>; spatial = <*BY>; viewtype = Icon; }gworkspace-1.1.0/Apps_wrappers/mozilla.app/Resources/Info-gnustep.plist0000644000175000001440000000044413214346535025610 0ustar multixusers{ NSExecutable = "mozilla"; NSRole = "Viewer"; NSIcon = "mozilla.png"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "html" ); NSIcon = "FileIcon_.html.tiff"; }, { NSUnixExtensions = ( "htm" ); NSIcon = "FileIcon_.html.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/mozilla.app/mozilla0000755000175000001440000000040613214346535021576 0ustar multixusers#!/bin/sh if [ "$1" = "-GSFilePath" ] || [ "$1" = "-GSTempPath" ]; then URL="$2" else URL="$1" fi mozilla -remote "openurl($URL,new-window)" if [ $? -eq 0 ]; then echo contacted mozilla process else echo starting mozilla mozilla $URL & fi gworkspace-1.1.0/Apps_wrappers/mozilla.app/mozilla.png0000644000175000001440000000753313214346535022366 0ustar multixusersPNG  IHDR00WbKGD pHYs  tIME7 XIDATxyWuwy7of4F$$aYƎ؉qbllb T K!$q"e@%eR$0؀ccKIhEٷ~Zdِ]u>ι/_!~.)v" [fKTNl\-~?ryi޺t AbYD1$)׈ǧI?Im Tד1i(58 dwAP!Y i41&+&m} rd2vgf^.W0 E@q*" JFxlTV6w5 y@_?3?;}.ߩ&Q CTNbkB)M{~B\gj 3;·V|"_VUAȟYs'|=|sy=]1$1D ի== I I`l5 .?b|ws^fjB15:NьQ=mO36#~gsPbC\k͕q9(1lV|z9sn^Jzĕp2l{eЎ Yp1eUl;oZ_ܕX_db w5'.m279(q(Yl bTFcIo/@;CްuدoK[ W*s=%\ˑ(T1Ѕ-$N簉5.>;[}oᑻg)'Pq%cBKh.Ȋk5Ah) 9)>̉$)؂U=150suhG^dCȗ\!Rm}BhZ`{F_Wv\ XBu8 $xqxM <ہ/@N'g6^E,Lf:ڱCޝL5o,wNk%$f06}= P.,4HH@]q)baʰSH J,Td )u H,Xs  ŘiBğ\d]o :ǥ$cݫP_XZB5Z PYM.|xL46T:cPCA|H4m̭oq P71ð}{s1X,-DQ"'h%i,&+ߒ**ZF` 1l?J侱,0y @>z -1ms2#d8 8a 024/}Tēi%,z2/]5&^+v +y>sC~`/~=D'86buVAnli #NZXB}!u2 =P!, \^pYW!d3 FԪPZpM۷d4jiL$q %`#4W@NB(`V@&*[095k;F!hZY\ Fk*=&K׮WYGܰ1U: i KrN9f;'(qR Cz_=MujO bC\JxՔ`$NΖe.@Ua^Xd'Ks;Y<ԩBfa@R,zcb"f:ՙ8Tw|ƻO[pdGK#M:2u>}w\BT%bJpYxvAK2v1TSWYRi#qw8FJ# ;e!A7xmT:*V^,ai+w#x:-R)̟~A?'rtK[l48M( vef;k!:Zp1Lzc2y4 Alv~=gl#<)c]Z[8c0Q3M]Gg]5`6&Kw\* $\1X[Ǎ?C nC ~6nb{+Vl֨@J!Zek){vC=lhqyo` K< {Bح@L&3N/rs}3_Uss=N2Nk#=:Cd^ &Bs58dylCz =:W{)۽XKE՘j'h_js< PD-Cm,s#Xh8ge78>ҭg^'yIKx?Wxв<Q>dW(k5FkTCe}TǛNț8ώWܡ[KE%1b1d{~EЫ;^+htF=tV#|&RN'd@ᶚѡe@U-΂H-@0*=QݙԊ?qY59ꥷ=ws%^2&NxРtA#5A"ӡth0롚zԥ_sgݡ9Y4gaP~ "- )n(/Y~t\ug5GL+šO5O5O5šy3N>-D-h"&9===###)1V 6pO0?;8?'?;8?'?"?"?"9Q+++333+++333333 @ @ ????????????԰4 8 hd7R7#=n&Oy~O5ͱͱͱͱͱͱͱͱF"\ 5U5/w?O/;;;===###%I&+],?/?/???m?m?m333+++333333333 @ @ ????????????8`8)X)h#l=3ͱͱͱͱO5š???Oy~ Qi%-V.^"-Y!#E91Q333//???;//?;?;+++333333333333 @ @ ????????????8`82h 8 5R!O5ͱͱš+I>+I>+I>7I.š?%!šš^ .N.%~!']rj-i1#q)!Z&j*-m-//????//?;333333333333333 @ @ ????????????Hr&"\%F:O5?O5šyš?%!š=']#I! r&~ 5u;%e;~ 5u;+s7<\44t333???;?;?m333333333333### @ @ ????????////d$4+++###9=>^??Oy~?%!?ͱO5']////+++q>҂rj| 5KSSS1q3<\;;;?;?;??/333333333###333 @ @ ?????????O/??44t7;M=MV;6=n&&B"L>j#A&ͱš/w?????O/;;;j*&B""|66V5:Z55*j"#c9?m??g:??9Q333333###333### @ @ ????////??//d+j6N1!^91z j"d.n>'''//+.;u9//??//7g'/w2t"&<\>:Z 55&'s*?O0O0O0O0)333###333###### @ @ ?O/??//??////d$4?O/#S'S>j$///w/w??#I!#E9??/w99=y12tr&<\> 5:Z||1V7]0O0O0+E0z0>j01Q###333######### @ @ ??//////////d$4#C?/:Z5r&d&735357g' Q/w5K:z3*j*R>#a8O0;Y05~00 6plp>A333############ @ @ ??//??//////8?>>*j&J>4x8<\i%9j>>t*;M=q+.3͍J.A9J4L"r:1z<\>KS 544*:B 6pv0:B2:Blp>A############=== @ @ ////////////89?/:z3684 D Dr&#n:O5=a>&,B&$L2l;6 2b.|*j"4x80p00p0H$4x8p0p0H.A9############### @ @ //////////777d$4??K6)Jb\$82t$-n/C%/C%K!A*B*4x8l;6ͱMV"|6(8H0p00p00p00p00p00p00p00p00p0>~>#########====== @ @ //////777//77789??K:Zr&#n:+~&^K!K!MVb\5:Oy~ͱͱO5)f*80p00p00p00p00p00p00p00p00p00p00p00p0>A######===###=== @ @ //////777//77789?9?>>*j6Z)#n:^Oy~#n:)J.r< j"&Oy~?ͱͱͱLp0p0 @ 0p00p00p00p00p00p00p00p00p00p0>A###===###====== @ @ //777//77777777789?9?/*j:Z55:?%!??%!&+~&7I.?%!??O5ͱ+.b\d00p00p00p00p00p00p00p00p00p00p00p00p0.n>######========= @ @ ////777//777777(:Z16V5:Z544*44*F#A&š??%!^^?%!?ͱͱͱͱ+~&A*Bd0p00p00p00p00p0 @ 8`80p0 @ 0p00p00p0.A9###============ @ @ 7777777777777777770p0(((0p00p0H$)JO5ͱ??O5^;6K!7I.K!1zHp0p00p08`80p00p00p00p00p08`80p00p0>~>=============== @ @ //777777777777777 @ 0p00p00p00p00p00p02t$ j"%V:O5O5%n*333+++!V&K!>҂0p00p00p0 @ 0p00p00p00p00p00p00p00p00p0>A============-m- @ @ 777777777777'''7770p00p00p00p00p00p00p04x8%V:-n -n;;;333-m-) .r<l0p00p00p00p00p00p08`80p00p00p0 @ 0p00p0>~!=========-m-=== @ @ 7777777777777g''''0p00p00p00p00p0p0p00p02t$+.=>)&&44t0p00p00p0H2t$d0p00p00p00p00p00p00p00p08`80p00p00p00p0.A9=========-m--m- @ @ 777777777'''''''''0p00p00p00p00p00p00p00p0Hb\=><\H0p00p00p00p08FL0p0 @ p0p08`80p00p0 @ 0p00p00p00p00p00p0>~!-m--m-===-M- @ @ 777'''777'''777''' @ 0p08`80p00p0p0p00p00p0HLb\A-m-===-m--m--M- @ @ 777'''777'''''''''<\2.A9>~!.n>.A9>~!.n>>A>~!>A>A!a1!a1>A>A>A1Q)1Q>~!>~!>~!.A9.n>.A9.n>.A9>~!>~!.A9>~!>~!.A9.n>-M--m-===-m--M--M- @ @ 777'''''''''''''''''';;;''';;;;;;;;;;;;+++;;;+++++++++++++++333+++333333333333###333###############===###===============-m--m--m--M--M- @ @ ''''''''''''''';;;''';;;;;;;;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--M--M--M--M- @ @ 777''''''''''''''';;;;;;;;;;;;;;;+++;;;++++++++++++++++++333+++333333333333###333############===###============-m-===-m--m--M--m--M--M-5U5 @ @ ''''''''';;;;;;;;;''';;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--m--M--M--M--M-5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.mp3.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/mp3edit.app/Resources/0000755000175000001440000000000013214346535022051 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/mp3edit.app/Resources/Info-gnustep.plist0000644000175000001440000000032613214346535025505 0ustar multixusers{ NSExecutable = "mp3edit"; NSIcon = "FileIcon_.mp3.tiff"; NSRole = "Viewer"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "mp3" ); NSIcon = "FileIcon_.mp3.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/mp3edit.app/mp3edit0000755000175000001440000000011613214346535021370 0ustar multixusers#!/bin/sh APP=easytag if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/nedit.app/0000755000175000001440000000000013214346535017635 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/nedit.app/Resources/0000755000175000001440000000000013214346535021607 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/nedit.app/Resources/FileIcon_.c.tiff0000644000175000001440000000651013214346535024533 0ustar multixusersII* P8$ BaPd6DbQ8q,s5 AJdI#9b_+-S]hqԭ^uF}V_5iC<y2Ze F0B6W.ǻ&`'R?%MDɨdcD=v9WŇ!MnQ&>%H:a'eR!fP["lAwnC40!prĐQ7<1AtoN \u!- Đ:ÒHU(pj,10I"Qv&,HbI`$ xa)fr-T@@l ,ˁJK.PZCp& 'LW|7"k(DFREĈ8F4 (.p b0d3N&4lA눨d?H`]s3Lc@ 0,*(G2:Dɝ3$l͉YA-Ch08If+cZ%,`͈0a m95+- L*.z UmJ?أ:4&|ҢSFD( P 0EAh dd>1T h@خAjRY4G0JT-8|8  6ItFԦHcF v+,c`h/tbSPȻ(E4{@7)*e`E1 X>T!  Wjъ^D-ajLl*c1(uD !db,R eC 5`hyҬc)WpVD?P/}DhcXjjTa'4`Xb0X(}RAV@ě?,. 0WR]PbԓBPT,9K 58&axp*p hzOJENˈT c!{ WBS}3̬Q"M^1mп}:X{@fkJj,B0J=A7.)z ޅRm*8x-4cМLCuZ\.r̸2 )CDCd:!AH}pL@m47BJ=cm[vL:BH:p-h^5 C gW;[30Xà& CXFyXt\ƸSF \'&>]p+ܼng(e0B $QQ 7Q6&T `+~xO53Eik;m|VjJŌYgqH" e棭NEˡ'x_έM+H1a].)aqXP D C}CnN0 jtf+p^؟20'C$$y᭓YS ЬF>X0Ճ0Ձ›`娌@t؅Es$=<`'"hx5 7`rzWGs/iC2[\ݶTk?'clPN"A>H `&cn, OkYv&l#cH \@r 0RA^ a #ʰǬ^^Ta B6&H6,P礒 l(Yrq bbbl#鴀Q@K8K!x n`g]K/}< @F `L0/^,Ag`F f$bvA8rhH!v`>`<.CR^J``+.E(JHшfS`e$If @&0lk FmA|ĂhHr> B 2FƺJhzrTr`NQRK!V K`Ql I ʛœ`&Wk;+/ &(xr &Ž|aFm| |!fhs#J:@9&!D".K~O> GO'' !-B/B[!42vra:Hf[!>j `8 "Dr@^!,X 1XmD G7-rsQ [\& '&tx R  lhX ^a K .q3 s938-9s:&-H=:S:4; z6ⷾӟ t:/d\>0[M`~awu,OjE{ vgi"Q yfQxFK p4Zu-lwZGfGJA6=g<=̥)Y 0@0QZN<"SePr! qor#Y{3''R~' ncaU19OTUUՀ %^Œ4 ‰~JA bXȕ˜$hRٶ}hYQ%djL!o}%xcd4 UPUAC|g~VVu]MvaR l.'8(y1:m]D ~A{\'WxMG2@9 PQ",ߨ~UCp ǶxQbDˤ! ǒĕx+7YoqEt\'a~7i@HfAkae VGzO 1d2[i=A|:H(YO!C 5P"U]TQ!tIWKQXQ9U<_?Q֋G <hXR7(l\q\?Ð>KCQl9Bؔdg.aIn2XϔÔTPִV;p Jһד#^=})c WaV p ^lr\q>mE MpTbuE7)bn8{d-+@i%~)lg-̯rƐ¢PHƚV X_V?àVUCtR6LՌoU͸ւR4 E|$=1p+&b(2  S6.p_jeaVmMC %2j X *hra'MivC` 2b_5~* q`!6j|B=LȒTgi 5 a?cix\c A)ld>X{lp(ݐ6pô x3zN @LBڏShEkgC޾Ւ>v |.6 T`Wa>HAXtt&](YеDT ~*xh  V <Aj  f`fj` uaQTŌ d .l ~WQ d8HǼR>e PեAB[!* f) @J*aThA^T.\A  Pps,LF,Z\w@!Hm*L QT.!,ώ+ldv vZbJP[ ;~",` ,lUTei;@1AF* $ N4QATe r !r!!"2!*Kэ#ZCQK~$$2E'"7U%2Xؤs%_%W&Ra&rc&m'2Zb01}R҅((((r()қ)2)RL#?*+ +PA++2+r++,-b--.2.r../2/r/ 00 b  ( (R ' 'gworkspace-1.1.0/Apps_wrappers/nedit.app/Resources/FileIcon_.h.tiff0000644000175000001440000000647413214346535024551 0ustar multixusersII*v P8$ BaPd6DbQ8q,s5 AJdI G'ZPg<4'%xnRё0olHL@rH8+6"N&t O9Wur~ͯYbM&>``Y#q̏FBQN? t"|(-q|RbCx!Biĸ9r"p2R۩^wFʇPRf93r t,Gubi?H_H&#ؘF B `xЁwh3r8Gf 62:K0,n80)Aj 4A2(q]q,tKQ*FH"`r\D6KL(3s b(@JmA넨CpCD" fad Tj)F8.GLٗ#dLP--(E d0s" F<[Nh9-I2:;QvǶ:.bT""LX :EF #E9P?ŀ2|  ЅהdPJs ^ ZbHڛbhH@)W>+ ,\KI豥L:Z EhVe(=hہ&)*Fŏ# , D=I?_YGU$l 5:niO.Ft\S]+ܲzf(e0B DQ 7VQ2&T `+3Kؓ*N{E[F[KT/P,dQ3A?Ād#('4ew`-̊.MA;K7-*cP61_.),& jMM#Bz2؁ѐWk#CG^s"|2B ĐIM%Lx 1ز8_F;P?aMr :k"ah4 [OVR ˸9~4!-k*5⓭y2(Ac %0B9۳"P 0D`hvjnYukH 2u4 g* C/z̛  >jd(T,t(A#jµB lA$Xpq^bGdbvnHETo!|jLfub\O.Xxl ^ G"a!`F f bAvkc!~wz`h) G8<J̴a``kg*ŮHmކM+fLHQQatqHrbvlgplHx hdBs+!*EI `>+emDjl$s  H &F%&BdFmt |fhs"BJHɀ9%D,$.K.~@OP '[o~a.g"nd!Jef@a$G46Z+`t2M:OVd\bms!~\@϶nm4 NJc2 " sy83'| 8s9(,;9S99::5&ˏ;kι&;<3,>M>k>>s>>?3@3@T&"A)AJAA!At%A'A+B4)C4-CT1&ƒCAD4EDtIDMDQE4UEtYE]E` 00$ m , 4 (R ' 'gworkspace-1.1.0/Apps_wrappers/nedit.app/Resources/FileIcon_.java.tiff0000644000175000001440000000616613214346535025241 0ustar multixusersII* P8$ BaPd6DbQ8q,s5 AJdI!y"fY\WUvt;F2j{hM\E G*# 1cmP[I5L;ULN VNu|w}XfNEKWFpiJ0Z֭j!1,biqܷUϗwA}LX>~yga*_)U ꣫p)<0ja}:޺떩#P|"lPX6i$۸ߗE ^aJ"[\=1@qzt= :VŘb~F[n,)!6yS!X:G8dL= ;?xgAIX-: 1X8Vid,(?2U/[1~-s(}"\ нūG8 8}àYX*u *ȉ#"TLdh1x Xx)qhTW+br^Jweh k %LRIQGKy=(jqW2Zys/,L11Z ə D1(C,3-&0QMp eyE$d"Q:+ԷʌU=&!$44puY !6QYm`?ƸjL- 7ByalXqlT˚6%tGF%hȩKD)Q"T6PX PlqKAȾB\SaÎ`xxaS;Z=Xh!VMZ d 7-4ҁ`ƵB@xpIDj*hZdH8Y*BU4^;"B9@+~+IZDaEA$L B@I%W`HI*$Ѡp-: 6Z ܏G@Kh/!5{Ozi<"0!0{=&px |3( M1G7زN\q\ŪA\;(s 3dG$E.&ٮ^OA*Al`l Ehƴm.EER@U+~l;a/,Q SgY3[KvppQ4A& RLS . ȥ(_[TH jI^%}dj /px!YjIH6(:8BB@Q$p_D.z &C|Tऩ˜tf U5ه iTLA? JIg*4SOA'%~v0 2lt!Dи"h^7{S)X2l< ^CWcK?F@Q*2 ,`$ہBdF=0F89haZИ- k C3G6"fZ9{;oN4AJ| kViv|~{@j 6 ~~? >/k=kRF@A>ѥtP!n aFD lDdbjtT  ~ R jl`g"lf>[@k ptT@Z di{ J&zB B/a&Z!| `E^Aj  f\O`f{ !AT q. ~K ~ fohmN,ܠAn*BA>PA anOj`  api1i!F)&(\uGHttfѼ.hƱr![@|fDQG  BC+ , ~Zb!?! + -"#r;#m$=$(nf #IDȃ1 ATQ2i&k&rs&u'}'''r'RP)HDXqNe*#" 4*sr+,,2,r+,Rқb0ܨ2M.2..R/2./r//-ac0 1';11K11!2s%22#3 093=3A43E4sI4M4Q53U5sY300^  f n (R ' 'gworkspace-1.1.0/Apps_wrappers/nedit.app/Resources/FileIcon_.m.tiff0000644000175000001440000000647613214346535024560 0ustar multixusersII*x P8$ BaPd6DbQ8q,s5 AJdIb ^ %cloЊArԨ|gt ,.G%!.goYEFvte!d%Q[JKY-ŒrS C3T<Ć9щ>fxdAhtAcQd!% O/Hr:HҔǩfwP-T2sP1 L5T;3D3LY=svc tgYggHr^8n]oH!P1.eDn9S&J#s]XpJ$2sU/UVճEaXxe?`t`Y8i?xduji}%ba`ũWE)CdnU'pR9 F.jF%FhM:4N c<j4Yʱ,@^FH}zInG=RK %8L"Fۡ# F*xS*eD~V9ANhbU1cH[X0m´1 [IKFXYqQ PMbqBq,{ʩLk)EZؔ?xK5a$BHU}?h0tb$ ex} aLT cK"W5^WBFذ2ƕp bpDەr.-"Wp,nY aP/~D=@iOܩ m@Uɥ 5#t<[P$ '۾?7T!x AlԱPCnoViAB0,dlM_(w`g4uw$1xPS"P#%V]-^^ %@o8S:D7'|`uPqb=Y-F0K~5l `_H*nA$ ;}1*#t/qh:)Du=OFH$`3 E0Aډaz<#KceCP+AX MAc /I{,|TǨC4+#9`"t09j6!l\V`0?@zTkՐ,?ØqxL21B[):`:q caxT)B`>a ŅjkbdklA~RH @[ \̜ >jAMp׏.TTa B62 K0l<ڽ"@lA(Xtr0Gdbhcw%nhHAEfPB|jRfmf'8A< @F p,A*@lPb&&k thHAv6̀NгdkDV-l[J/>H 0MeFPI!f )R@a&0lllwA|w~ hHs>@|P^mvr Tr Xobq`[:;!fE 1 lq@GI)LduBqh (q H !1Y m j(f(RLj`nQp22Ȳ6l80K<ˆsa$X v)q'21ca@.g(n~Jh f`̃ u^,Y1`!tO- Nl!(-c\ma!$ s`o ^@ c3-888Q'S9s'9:b9@;3m;hs< >>?3??t?@@킂Ayt#BtB!B%C)B9C4;Cs>tEDtIDMDQE4UEtYE]EaF4eD00& p . 6 (R ' 'gworkspace-1.1.0/Apps_wrappers/nedit.app/Resources/FileIcon_txt.tiff0000644000175000001440000000435013214346535025052 0ustar multixusersII*" P8$ BaPd6DbQ8q,s5 AJdIs9U^ r?ܾ7 {}7#<H@ p"J1R#rYG1 (< eĎR溦T睮qqwyr 7H} J9' BOyw猵#I*g/'C8@:Ҏjsn+;*,Ώ4,j0L|΍)KAMAvD#8Jy#Iԙ#S˭PI;]Fv0,]ڹ# G(SšO5O5O5šy3N>-D-h"&9===###)1V 6pO0?;8?'?;8?'?"?"?"9Q+++333+++333333 @ @ ????????????԰4 8 hd7R7#=n&Oy~O5ͱͱͱͱͱͱͱͱF"\ 5U5/w?O/;;;===###%I&+],?/?/???m?m?m333+++333333333 @ @ ????????????8`8)X)h#l=3ͱͱͱͱO5š???Oy~ Qi%-V.^"-Y!#E91Q333//???;//?;?;+++333333333333 @ @ ????????????8`82h 8 5R!O5ͱͱš+I>+I>+I>7I.š?%!šš^ .N.%~!']rj-i1#q)!Z&j*-m-//????//?;333333333333333 @ @ ????????????Hr&"\%F:O5?O5šyš?%!š=']#I! r&~ 5u;%e;~ 5u;+s7<\44t333???;?;?m333333333333### @ @ ????????////d$4+++###9=>^??Oy~?%!?ͱO5']////+++q>҂rj| 5KSSS1q3<\;;;?;?;??/333333333###333 @ @ ?????????O/??44t7;M=MV;6=n&&B"L>j#A&ͱš/w?????O/;;;j*&B""|66V5:Z55*j"#c9?m??g:??9Q333333###333### @ @ ????////??//d+j6N1!^91z j"d.n>'''//+.;u9//??//7g'/w2t"&<\>:Z 55&'s*?O0O0O0O0)333###333###### @ @ ?O/??//??////d$4?O/#S'S>j$///w/w??#I!#E9??/w99=y12tr&<\> 5:Z||1V7]0O0O0+E0z0>j01Q###333######### @ @ ??//////////d$4#C?/:Z5r&d&735357g' Q/w5K:z3*j*R>#a8O0;Y05~00 6plp>A333############ @ @ ??//??//////8?>>*j&J>4x8<\i%9j>>t*;M=q+.3͍J.A9J4L"r:1z<\>KS 544*:B 6pv0:B2:Blp>A############=== @ @ ////////////89?/:z3684 D Dr&#n:O5=a>&,B&$L2l;6 2b.|*j"4x80p00p0H$4x8p0p0H.A9############### @ @ //////////777d$4??K6)Jb\$82t$-n/C%/C%K!A*B*4x8l;6ͱMV"|6(8H0p00p00p00p00p00p00p00p00p0>~>#########====== @ @ //////777//77789??K:Zr&#n:+~&^K!K!MVb\5:Oy~ͱͱO5)f*80p00p00p00p00p00p00p00p00p00p00p00p0>A######===###=== @ @ //////777//77789?9?>>*j6Z)#n:^Oy~#n:)J.r< j"&Oy~?ͱͱͱLp0p0 @ 0p00p00p00p00p00p00p00p00p00p0>A###===###====== @ @ //777//77777777789?9?/*j:Z55:?%!??%!&+~&7I.?%!??O5ͱ+.b\d00p00p00p00p00p00p00p00p00p00p00p00p0.n>######========= @ @ ////777//777777(:Z16V5:Z544*44*F#A&š??%!^^?%!?ͱͱͱͱ+~&A*Bd0p00p00p00p00p0 @ 8`80p0 @ 0p00p00p0.A9###============ @ @ 7777777777777777770p0(((0p00p0H$)JO5ͱ??O5^;6K!7I.K!1zHp0p00p08`80p00p00p00p00p08`80p00p0>~>=============== @ @ //777777777777777 @ 0p00p00p00p00p00p02t$ j"%V:O5O5%n*333+++!V&K!>҂0p00p00p0 @ 0p00p00p00p00p00p00p00p00p0>A============-m- @ @ 777777777777'''7770p00p00p00p00p00p00p04x8%V:-n -n;;;333-m-) .r<l0p00p00p00p00p00p08`80p00p00p0 @ 0p00p0>~!=========-m-=== @ @ 7777777777777g''''0p00p00p00p00p0p0p00p02t$+.=>)&&44t0p00p00p0H2t$d0p00p00p00p00p00p00p00p08`80p00p00p00p0.A9=========-m--m- @ @ 777777777'''''''''0p00p00p00p00p00p00p00p0Hb\=><\H0p00p00p00p08FL0p0 @ p0p08`80p00p0 @ 0p00p00p00p00p00p0>~!-m--m-===-M- @ @ 777'''777'''777''' @ 0p08`80p00p0p0p00p00p0HLb\A-m-===-m--m--M- @ @ 777'''777'''''''''<\2.A9>~!.n>.A9>~!.n>>A>~!>A>A!a1!a1>A>A>A1Q)1Q>~!>~!>~!.A9.n>.A9.n>.A9>~!>~!.A9>~!>~!.A9.n>-M--m-===-m--M--M- @ @ 777'''''''''''''''''';;;''';;;;;;;;;;;;+++;;;+++++++++++++++333+++333333333333###333###############===###===============-m--m--m--M--M- @ @ ''''''''''''''';;;''';;;;;;;;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--M--M--M--M- @ @ 777''''''''''''''';;;;;;;;;;;;;;;+++;;;++++++++++++++++++333+++333333333333###333############===###============-m-===-m--m--M--m--M--M-5U5 @ @ ''''''''';;;;;;;;;''';;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--m--M--M--M--M-5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.ogg.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/oggedit.app/Resources/0000755000175000001440000000000013214346535022126 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/oggedit.app/Resources/Info-gnustep.plist0000644000175000001440000000032613214346535025562 0ustar multixusers{ NSExecutable = "oggedit"; NSIcon = "FileIcon_.ogg.tiff"; NSRole = "Viewer"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "ogg" ); NSIcon = "FileIcon_.ogg.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/oggedit.app/oggedit0000755000175000001440000000011613214346535021522 0ustar multixusers#!/bin/sh APP=easytag if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/opennx.app/0000755000175000001440000000000013214346535020041 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/opennx.app/Resources/0000755000175000001440000000000013231754602022010 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/opennx.app/Resources/Info-gnustep.plist0000644000175000001440000000011113231754602025434 0ustar multixusers{ NSExecutable = "opennx"; NSIcon = "nx.png"; XAppWrapper = YES; } gworkspace-1.1.0/Apps_wrappers/opennx.app/nx.png0000644000175000001440000000250313214346535021174 0ustar multixusersPNG  IHDR00WbKGDIDAThmLSWnUA\b1c6 #n2Le}ȶ,lx: "2B" }a{ڜHOU T fTJ9a<DP`Dn?6[W-0[E) .$9\m(3!E2*08o|/Kտps#oMVna9ū׌~*'mZ>Ÿn)UȢ^8]nm;k3Է-ZPQ?>(07!)H!^bdR#h"TXNޜXQPSy.\( (ܣl/$\<9j,AWA<]) ؝B~c m&6q+8agƅ^@Z:‰}-`%2 E1ߛ EHIP%` 2t _MXD}h; ^0"|Hv'C] &.>U=X3"" 4㗶 Ǜ%`}8J Nw~F]0Gl,Z"ЗHt9I 2, [Jd 48_Kl?#oP>ZNdU(]j< ySd#,nTd@9-/sؤ(iJV=IK8رQI<$D+ðo{gNe%B&8^٫M/-(l*p(]ޫ·y F懰TP܃]hu(<ۀ((ogZj>}I''ʹhvFOdjQ{,3AQ$DVX{1YkqUA BͩT3FpQxwg$ZrSy vTrɀ;v ZO6ph Xq.h\DP`Ғ8G}ۣ&)!Hrl: 0cpdS3YkC@|0b!1.)ZOVXP-U[IENDB`gworkspace-1.1.0/Apps_wrappers/opennx.app/opennx0000755000175000001440000000011613214346535021274 0ustar multixusers#!/bin/sh APP=opennx if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/qlandkartegt.app/0000755000175000001440000000000013231754602021210 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/qlandkartegt.app/Resources/0000755000175000001440000000000013231754602023162 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/qlandkartegt.app/Resources/Info-gnustep.plist0000644000175000001440000000031013231754602026607 0ustar multixusers{ NSExecutable = "qlandkartegt"; NSIcon = "qlandkartegt.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "gpx", "qlb" ); NSIcon = "qlandkartegt.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/qlandkartegt.app/qlandkartegt0000755000175000001440000000012413214346535023617 0ustar multixusers#!/bin/sh APP=qlandkartegt if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/qlandkartegt.app/qlandkartegt.tiff0000644000175000001440000001145213231754602024546 0ustar multixusersII* P8$ BaPd6DbQ8V-FcQv= ( >m7 04A@0<"x  :\ ^s{Rw1e|䏩apfA"!8H^5 հ\hy7Sh-n;lb)4EV@X?4 \o:)c@9?~?`õGUfI`D8j KB`>:a"`rA p~BJ <4z>4Qln=<ĉ) C .`/@2ͅrD/@P* R |qV̘}R4IC@2pQt}!^e%JQL3J<?8>! R `&v% K섀IZ`֬iݢGOO#g4.*tkM+)$WH3``GX w O!MSh@ǹȭ+=-`xzy.dqw EABD%w_ & h6h5kox+av4 ?9`_!>5z$FV16/ I.d`I"1:؈< "Tn `0(,F9fg4g4ܘ2C(pWc$ze00}0&0P}:~^ 'BtQA|Z3@I8d )DPP~ ua| Hߒ H#ExS8AE0xM8TqޢSbDn)d/XE0wq pT L166z HJ D`Ss0 N ¬q$>zR']ŠoXGkfg*V/\?^K elPB5Fb/8_0d2p"{M !2Zǀz(V`P !R XP\@@~4prȀ@pu%F燦FƳ*i $:8 a75RQr<{p'[ #x `EP 6ؤ ` g 8kρz:.hd#] ZA%N]lJGEӎg@ְC@m;ēPD@!> 6X"P 0`AˆdcFجtR,fh =-@{"U@HG zQ$|=P0Eu9.(Cũآ(v[Tϣ ,!![0B&!,R(O1+@"K ~\9.Ә4tCu p1\UxŘFI7.'ȾNWP| @x`>h:TJ8=q>(\UdBpX>n#b: ?'pX6 @D&lF2(l qd0@ )t)EsD5 x tzEWd18Pp&4Đb u8]p<V00 [J|fn5+HZkz‰&$ī4~v BV퐔4XxHcsL!gMCKjBxXtAm.|M/oz|p} ,XZt^`x(H`Qb'n` #!Ȅ<O " b!T}SoBN ě#** Bij&ifm:Xi`x@c$+%.,RoVItJ=Z `d|qb:aO)n@qn Aah>`Ef Κ0!: #lar*"Ŝ^B @>1!i(!M|X@Z@Zb!l(o%4=,*)12D.!RAL >a0rp`R 4H+Fµ#/Jr!$sN v@@ ;c rh$` x% &; A"`.! >rGTQ\I@h^(BD(><\#Nx-aF#<6`6zl HGg#=  Ҝ!K ( D!, s2 ?#5ś-$(2!%!~+lH 6Љd x %,4+cI*ŀ |@` !!"K> ALj zSdf@H bG8:HR.>Jcċ8-=I!ڕ=j jQXr&qNQ"oFT AV!Խ +"v~ @ !`5DSFN zȢ+#H?'4+8QBc60Gp^>jl:@"m՘Yb9NZ?nb٢xa(AҸ"R+@c&a Hbj!@A4 c %!X 4unf-U8cҸ;qI m̴fkFRI*eB2htD}Gar@ 4/㒶p  0 @|8A\vdGYOdBˁ8d||pcpW&f+Gri;q! @`a Co *  @[ H"\"uvGjT3@w)"70f&b1d2BwfD4&jf `!}M6vNNRGWpwa%x%7 Lp!!0!$no(fBZ`E!뙄/>eYvews d|))wWX+RD&!"^f8" W Zj%1Xn2+"n-r4|Xb|-88&cԑbR>wA.8_!ɏX"M @ vfUs\+-c&'eHN3wbMל"AT%j4W9Z#*C*@ D P`  a `@@Z."F hP ei)8|?TA!PdLaLϜbI ll!#HF=+ ru&xDS,! u@ -|: 8>F>%M`R0@  `p$Xj` a:6!!%I7r&A| 6 DA7!v7{T!)0b|(z  @p s`46`8skZd#Ia=Rj.S;Wbj$"F$ƭ)`&Qѽ;ս{ٽ 00 !@ "(=R/home/sebastia/qlandkartegt.tiffHHgworkspace-1.1.0/Apps_wrappers/realplay.app/0000755000175000001440000000000013214346535020343 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/realplay.app/FileIcon_.ram.tiff0000644000175000001440000000744213214346535023631 0ustar multixusersII*:p $h!B &l 3?pAlg";?t5w˵&s񏐫#9(yG?Z񏑯c8-?^uqsWD'.?IIOVS㟲XT.?M iK}ƨs:mj ؜-\H1J-_rr]׿Ӎ6oٺ.Ӯw (?a{׬AC5f\OoмYΞ8$D2)F:Zv;WPaVB)eSA%UdkQO4ь:F;mu7`C 7hDM5L!kNkN{U\It4'"pyp#K] hv}G?븽g_. q' I6G,9kzSKNpV82p$lT]̕(Ξh٣bӫ5>?S @یD aƘ(YK>HSC4?BE U5L̅H5n҉j=^X=:/#:_.?.⟑#kSJEԚŖ a:c5r&" ]:N\ӹ\<=6/|z1'AYLu眎Ru;3{{4z f,I]n6uLV5zph e^>(ǩ:G<).%o &8 y".kmƆ1%Qp`\6eqQv6#?~ėOF9ha#A/.%(C B w6UU"yq"wt=FH¯-f\-2m;v5"}a(c>e&'0cy]h@:! s04a ]x@ЅG z WLAa8 3$VHo`{dNAj`+X|.ulb!qSC~B6h <0#D VH+쐎OѱGoomĈw̼X9JvrDHG%tYr <#߇I^ZҚ& d80(VL#^ ӑg!N P PBI,4&-abNr'̹bnr`!dlS ?UYA0SùvpAЀO\RkN?Y]] 0+^Sʼn#2KҗD.,8`ʈĵ3७02+X2ź`*TRǶRlYJW86+xU0(Pe-8LfPW7w-}YվDUf*\:׮%N] V m6jZNPKs2կ +QTTY3[Rc$uf(4ƀi)LZǡUn(f*T+CT-usjߚضm\.0TSڍǩc|+zhbuWo_ ۥj"yhDC$l;Wd=hקUӚW.I?c,4ьQt+ 3-x/ޱJa=)vw;P ]?<_9hnĪKQ$%In.R3ԒFNxĤ&cEnC "8cnݰC`d5xh;GCt 6Xbb@Zr (P\dP:Ygt PB1 :(#gIKYsF`/J1אD8~!XF !އo 澖;8 4A 047(:ot`Ca.%:1cԢඍn+{[{5- >H``7DaSրFq{OCPb T>CQxG q8` D=2$n @ NAȂ B1(€07zS?cx1 L30Y\BۿPCΐtAl IXF s25$ q/ 0J< B\9j GHBސ6`k.gY ߠ0(% @$&HL"gA(]HD GtBN,o)8 n!0M(2hȁ H*EXkȁza@_ w|YE_5 #3f f+[HHOi8HwptxA#pLx2 RnHsG1,8D(w,XunUS|c (zz,8̙BIٚjfղ NΗr.::kX#hN.VlVnVmVolnm 00   81/gimpswap/dwiconxcf/real.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/realplay.app/Resources/0000755000175000001440000000000013214346535022315 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/realplay.app/Resources/Info-gnustep.plist0000644000175000001440000000033113214346535025745 0ustar multixusers{ NSExecutable = "realplay"; NSIcon = "FileIcon_.ram.tiff"; NSRole = "Viewer"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "ram", "rm" ); NSIcon = "FileIcon_.ram.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/realplay.app/realplay0000755000175000001440000000011713214346535022101 0ustar multixusers#!/bin/sh APP=realplay if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/seamonkey.app/0000755000175000001440000000000013214346535020525 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/seamonkey.app/FileIcon_html.tiff0000644000175000001440000000550313214346535024116 0ustar multixusersII* O BaPd6DbQ8VFcWQ$ ] A\9(nm&G \G@TN"tIT\AnP7f=GX@+%ƴ6c6dL \кe[/`U +uȥyǗsP|A l d9\58lg7惰{s:I8j}Fe4IJU|V;g396LH09 зo|N,J#{@%/ @Oʪ8(oz@ +衷js* 󦌄QqM3lGƀ:>bF{7$mo}$Zol>$qI LF6l " Ij, (C|(OS?@Д- E"QgI#J# KT7FSALԔu-QM'N#e].8YUS<V OIWUUsRuEo_֕nX^}fֶOזl[ Z]:Hl݀wuh\ _{i%[`?ԇ7 XHa } a(!m\ԕIN%ND(e ߖ6#cY*b}>7| Ɠ`Aw^v7 z6cmaiw"4p@fǾ ˠ4!x7-l[&[fR{+`s`6u \x(D"|./󙮗fzZu{|/ pIj h @  \|A;n 핐w` =>痨,B B߸g?$ @_Sh)@= "X?1o`;P/dqeͥIp|(3Hh  :@}P=U%\%`t N?{@ "03|AɐhB08@WٸE;#R))1: !DW<{ u$ "Ҹ% XcP @RTD3͌'LG\<>MyTm9%xe ؘ00A%+#zGP x >&˟yI0Azj{"Ӭp_EΑ+vOU(h+^c 20I#i\A@epTO PLdOKǎ?ۉa l/.T.)`퍨\|?uԘUt ڑKRC})+- ĀW?@@D$T A1] {Y 2D?O_ ïrO(=?)LF tmn[VnqFC@ _<Oƀ@ h5]yjpLihH[wB FHA `h`G&\ ՈY If\zZ_@+dr2v"ْ@ҖNWC}$L !iQ0@Ro1x.Po@IPee@LA\jB@w"Jzς{Nim,(lsPp,e K6bʀC=wYS w݌\[3Jܥ':!G\A/Rr4 A`*KÂz1SːL loamUTzF}#h&JN>rI z\Cw r{sBtl=zU;AGT׺ Lw줂W>Cp^|h*^zBY÷{~_>X~]P;立=@y6ڸw=#&'w~oϫm0OntYdj&iejU@c͚[`a1i>V PsVXFPdp`/~+#vaa: Š d~; Bi` #иϝ  >BP н P0iiv #b4 00  g @   (=RHH/home/multix/gnustep-cvs/devmodules/usr-apps/gworkspace/Apps_wrappers/seamonkey.app/FileIcon_html.tiffgworkspace-1.1.0/Apps_wrappers/seamonkey.app/Resources/0000755000175000001440000000000013214346535022477 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/seamonkey.app/Resources/Info-gnustep.plist0000644000175000001440000000045113214346535026132 0ustar multixusers{ NSExecutable = "seamonkey"; NSRole = "Viewer"; NSIcon = "seamonkey48.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "html" ); NSIcon = "FileIcon_html.tiff"; }, { NSUnixExtensions = ( "htm" ); NSIcon = "FileIcon_html.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/seamonkey.app/seamonkey0000755000175000001440000000012013214346535022437 0ustar multixusers#!/bin/sh APP=seamonkey if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/seamonkey.app/seamonkey48.tiff0000644000175000001440000001051313214346535023546 0ustar multixusersII*?@$ BaPd6DbQ8V-C AЂ$K!%LfRX Jp( ` NT{=^:owJ!ك3\b( P*6TTO {HKV7-$T0}(=/!n0&ⷻK{@g!åCcs+V+ (w8]Ǒ AhS==P./ H: mű+x8/3<l |H]jo| 8)'X0% tC,%"H"$C!Ħm` BQXĺvk(6b |1 ϒ<=)򎤔!H&: t,:rJhҢј9y𬞧@F hA0XJt. 2#&4~ɲYbl>]*#HjTl -}dfx\S} IV!&Bk F|ڠJb}FYʂ+i !ҥIRk_PLx,>~ i$|(Xjm_ؗܔQx8PDQ AE+U QL`I`PQ_g`% ƀJrNqnj~1A@QE :JhRqZ},Uӫ [/ ŮꁿKuݩ-_`( A(yy~EEw`&^_J cin-\ y-6w4-e*ȸ~BA߼_ricn)0m*RCɀN9Vk 0 G(AL)Tʙmѱ>?y"$WTuAhB%Ev)Q;;2 s,RT)PBH#fRD00`;6\+EC8ჶB.}#;05P2G=Tuw\S luhX((A)+p(W )YH l@C`0P  22˦Sp#X=0Ş`\+T`8$4xҜ !g0"F#GDc h4*8y]q.5Q";G,y4R`|)*7ǁ `+P RNL婲bχ`B0|A@A|;/@T#)hF<؄h*A 4@ҖclV p*^SӚ;;x:>rNhG{ $`4#h@AFA,Sn`0O8uRfJ\X (Y6<@J W#!|e f  TXX 1ԥB/(A$$^T T@8Z!jg/b P* $(  @f< ?/aJj*{e"76T6@*\zDș]F6xL`'Tb|4`ŐJ|I'߼Ƥ p2vw€9@(rSx_S&>UX v .V („U.(E.i.1.@la?`J.\جc R~` "K#$j6&M'rg˙kYe}g}uh9n\`)|P#)p#yeM6M堥UMCqQp(6lNI `l "HD09ZSPH" 3ˋߨuַ$A̭ JIY|A<20< cp6 LR+(îʓSYA8Zo"ApA[)`cU* \ ^eQ _ TD B!Z[(軔`(1<`:2|:`mE?rR|xPyOAyEh1sX NVf̶;+->u*5P +E % R8b=Xْ S4M5ZhBpm<)#q}1$!&Uhbߥ{gdIrߡBB=b@(" MmHH| x) +ⰩNt.4@ D( ڊE*a*㯖,()2R (yi)@6(@E*x!ا BF@>` !P(+K 02).ځh#h,6bx6 a&jjwptH @j@AW N"A =l)R241G12,R`XzP/6)*B OGX_1x%*+f!BV1&a6@sp#~fZ좚cn|2h")"š'h}6(Mi%^(q+2* ^#;r"t~),Qa *lb1PC,b6bť*ώo$tB@6LR 8 Ƨ%0u4Q RHB2ڌ$}"\"-+ `Atؠ Ǽe*)2<),n ji-&n)(Fch4RL1@zES4uFPԡa-@4b.~ R"=qv(r38@?PR`2R'$b\ jZhh 6 6*^ W=Qr@u F5YU"!j .=jr f0C8%* oQ YAT$c!L,bTba+%4u_ \=,)dPj [,rV' !/) Rd16c<`2(2MU\c\a4AdaxOd p <a.a)""+5B @q cHMiG5[+#>ELt#Z*cP^ ؂Bp` AM48c+4o6C\C>+nleeN"  PYlLbh֑boEjUiNA\֮r!p%H*t|lW`tUk@< n>a`'@T R'o?cvEnjv=-,aB%^.B -" wVԠ؂(D | ?  &&` gtKzt?te5z.WFk bK@wUC } #"4 B  VsIaSLvph-+i_ef%{Aa㡄CR `L<@=xHtt:+D,ÏcFAXxk^VɡIZ$Ô*1X9b 00 c@(=RHH/home/multix/gnustep-cvs/devmodules/usr-apps/gworkspace/Apps_wrappers/seamonkey.app/default48.tiffgworkspace-1.1.0/Apps_wrappers/sodipodi.app/0000755000175000001440000000000013214346535020344 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/sodipodi.app/Resources/0000755000175000001440000000000013214346535022316 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/sodipodi.app/Resources/Info-gnustep.plist0000644000175000001440000000031113214346535025744 0ustar multixusers{ NSExecutable = "sodipodi"; NSIcon = "sodipodi.tiff"; NSRole = "Editor"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "svg" ); NSIcon = "sodipodi.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/sodipodi.app/Resources/sodipodi.tiff0000644000175000001440000002247013214346535025007 0ustar multixusersII*$WA# OTfC*[@$0"~G~G Z?$ $!A.& i;֘UHW>#0"k<ƌO9) yDoN, 0),?-zEMdG(iJ*KnjOzD-i;ϐQC.B/̐Q9(M6e9[HטUKe9vT/yU/b7ʌNxR.5$wBԉK_4w@xA3h9|E ϓR'Vt$> Z@$bF'M6N7G3uS.KؒQg9[2وKӁGEyBn:c4^1W-3ρFL2}FcF'aE&*}0"Z3lyAzCp=Q,F%j3I%U,^0K&b3T-P6zD ӖT  xU0a6~GMŋNyDd8ؓRنIr=d5E$S+  K'^1_2{A#ԁG5#חU# }I4>,J4=+cE&בP؊LEq=?! 0 uO,j:|EΎOˌNzDwT/:) [,_1g6r=J+גQ4%wT/ #K5\4IԕSҏOىKEv@c6=N5yCғRJm=Y2`D&rQ-n>ϓRؙVtA + \0i7r:؆I7&ϒRvS/GΒRq?wT/|W1ΉLكGxAt?F% # wB֗U]42$2$K5V=";*! d8ҕTI 1 h7h7m;pI(s@W>#@.R:!]4F؉K{Ct>b5, - ɎPK;* fH(LؙVؙVؙVؙVKX>#V="ÊNq?J(j7\0m*?$^3q=O+' h# MK vT/՗UؘVؖTؔRؐPٌMٌMؑPؗTؙVؙVؗUْRs@  [0i7e7} Y>## ]6f7o" ϟp?՗UG2\3ؙVؘUؔRٍNڅI~Ew@u?}DيLؔRؕSؒQ؏OڈLEm9c5"! T.s>F& I3ؘUR:!J5ؙVyU0S;!טVؗUؑQهKF{C`4\0h4k9xAهJوKڃH|Dnd5 2\0"% 4鿇LؘUbD&. טUzW1^5ؘUؒQڈK~EyAq@"e3b3l7k8w?v>m:g8.yAZ0DG0yV0ؙVؖTr@W0ؘU)"ӕTؕSٌNڄHzBe7 ~> Z/G$h4f6p:k8S, T.w@q"L)s>xA،NؘUؑPڀFzAs=X/ L%b2<% Y-W+[.J&t4M) I4ʏPؙVؙVG,P)E U+@ dddQ,o;w@؎NؔQهJw@w?pH!`'&{_v3$ҕTؙVؙV՗U8( S):L$6 000i7g6q<؃GفFr;[;;{;+k+;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//w;/w=7w7/W-/G*1A46V&/G*/G*4d0+s1/G*/G**r4/{:/G:*J$5E>/G*1a"+K#;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//o/7g=/G*%E>/g!/G*1A46V&/G*/G*4d0'k./{:/G*,L(7[:/G*:J8%E>/G*>N4>^>+k++k++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/G&/G*6F$'k./G*1A4)Q:/G*7{*4d07{*#m2/G*,L(7[:/{:&z$#]6/G*>N4&f&7{>7[>3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O//g!/W-/O//G./G*&z$3C&/G*+C25e:/G*/G*.v4/{:1A,/G*,L(7[:/G*#]"+C2/G*9q,.N&7{&'K**J"+K#+K-+K#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//W=7{*;S*%E>/G:/G*%Y<7[*/{:/G*)a<;s2=u<9q,7k*1A,/G*,L(7[:/G*3]"=u"/{:7[*&F*/G*/G*4t8;K!/{:#]>=}=3s33S33S3#c#3S3#c##c##C# @ @ ?_?/o/?_?/O//o/7w7/g)/G*7{*1a"/G*#m"/G*/G*)q,/G*-U<;S*-U"5y"'k*1A,/G*>N4/{:/G*#m"=u"/G*7k*$d0/G*/G*2b87{*/{:3]"9i63S3#c#3S3#c##c##C##c#=}= @ @ /o//o//O//G*/G*/G*/G*#]*/{:#M"/G*!^4/G*/G*!^4/G*/G*5y"=U"/{:/G*!^4/G*#M"/G*!^43]"=u"/G*7[*$d0/G*7[*1~4/G*-e<;S27[*/G*/G*/{:/G*/G*#C##C##C# @ @ /o//o//o//W=*r8*r8*r80P #m"/G*#m">v4/G*/G*!^4/G*/{::J8#]2/G*7[*0P +c:/G*/G*!^47k*;s2/G*7k*!n4/G*/G*3}"/{::J8,l,*r8*r8*r8*r8*r8*r8 @ =}==}= @ @ /O//o//O/7w79y99Y99Y99Y97G9/{:9q,.v/G*/G*!^4/G*/G*1~47[*/G*;S2>v4/G*'K2(H !A!#c#1q1!A!>~>>~>>~>>~>#C#=}= @ @ /O//O//O//O//O/7w77w77W77W;#m&*J$*J"/G*#M"*r8/G*/G*:j$;S*/G*7[* @ 7{>/G*/G*4d0/G*/G*$d07k*/G*=U"&z$/G*;s20p0-m-3S3#c##c##C##C##C##C#=}==}= @ @ /O/7w77w77w77w77w77W77W7'g'+k+:z*1q1/G*=u<2R,7[*'K2 @ +c&/G*7[* ` 7{>/G*/G*(H /{:/G*4d07[*/G*=U<2r,7[*+C2(H(#c##c##c##C##C##C#=}==}==}==]= @ @ 7w7/O//O/7w77w77W77W77W7'g'7W7'g''G'/G*5y<,L,7[&'K20p07{>/G*5y< ` 7[>/G*'s2(h /G*/G*4d07{:/G*-U<,L,'K6&z$(h03S3#c##C##C##C#=}=#C#=}==}==]= @ @ 7w77w77w77w77W77W7'g''g'7W7'G''G''G''G=(H "B"7{&'K20p0'[-/G*!n4<|,7{>/G*1~48x8/G*/G*$d0+S./{:6F$4t83S3,L,>^>#c##C##C#=}=#C#=}==}==]==]==]= @ @ 7w7/O/7w77W77W77W77W7'g''g''g''G''G''G'%E%3S37{&#M"(H(;[-/G*!n4&f&'[>/{:1A4&F*/G*=U< @ 3c!/G*2b8.N.#c##c##c##C##C##C##C#=}==}==}==]==]=-m- @ @ 7w77W77W77W7'g''g''g'7W7'G''G''G';{;;{;;{;;{;'{9*r4,L,;[-/G*>N4&f&'[9/G*1A4:z*7[&5E<,L,+s%7[*2B8!A!#c##c##C##c#=}==}==}=#C#=]==]==]=-m-=]= @ @ 7w77w77w7'g'7W77W7'g''g''G''g';{;'G';{;;{;;[;;[;>^>%E%;[-/G*"\(&f&;k-/G*1~4*j*'k>=U<<\<3S3)i) ` 1Q1#c##C##c#=}=#C##C#=}==}==]==]=-m-=]=-m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;[;;{;;[;+k++k+;[-/G*(H 9Y9+K-/G*1A4:Z:+K-.V2,l,3S3#c#3S3#c##C##c##C#=}=#C#=}==]==]==]=-m-=]=-m--m- @ @ 7w7'g'7W7'g'7W7'g''G''G';{;'G';{;;{;;{;;[;;[;;[;+k+;[;+K#5U1 @ =}=;k-/{:,L(*j*3S39y99Y93S3#c##c##C##C##C##C#=}==}==}==]==}=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+3S3%e%3s3+K-/G*8X09y93S33S3#c##c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M- @ @ 7W7'g'7W7'g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3s3+K+3s3+K#9y9 @ -M-3S3#c#3S3#c##C##c#=}=#C#=}=#C#=}==}==]==]=-m-=]=-m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33S33S33S3#c#3S3#c##c##C##c##C##C#=}==}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++K++K++K++K+3s33s33s33S33s3#c#3S3#c##c##c##C##C##C#=}=#C#=}==]==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;{;;[;;[;;[;+k++k++k++K++k++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-m--m--M--M-5u55u5-M- @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.aiff.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/sox.app/FileIcon_.au.tiff0000644000175000001440000002245313214346535022456 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ ,l,5U5,l, @ ,l,%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *j*??*j* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*J* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *j*??*j* @ *J*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N. @ .N.?? @ *j*??6V6 @ .N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.*j*??1q1*J*'G'?? @ *j*??3S3*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ @ 3S3??;{;5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W71J/)f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W71J/:L),l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7%I-)n='G''g')J?:t),l,3S3-U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/)^=1r/2R2+k+)J?:t),l,%I-1j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;9Q--u=7w7)^=1J/ @ 9I51J/:L),L,9I51r7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/#C#)J?&R!%E%)N=1r/ @ !n9)J/:t),l,9I5)J?8p4-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//o//O/7w7#}#)J/,X*:z:1r/)J? @ !n91J/&\54T41f#)J/(P8.N>1f=+K+;[;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+5E=/O/5y-1J/,X*:Z:)J?1r/ @ !n9)J?)J?$D41j;1J/8p4.V.1J/^!)N=)J?,X*:Z:)J/1r/ @0!F51r/)J/ @0!J+)J/(P$6V6)J/4h">^>+K++K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7)F3)J/8p4!F51J/,X**R:1J/1r/ @01J'&|9)J? @01r;1J/8p46j!)J?$H<&f&1V-1f=3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O/)n=5E=7w7)F31J/8p4.r9)J?6\-:b.)J?)J/$H<1j',x")J? @ !J+)J?&l%.R51J/R#"B"=m=%E5#C#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/-u=)J/>b=>^!)J/1J/"d.!r;1J/)J?R#:t)b=*L12L6!R;B31J/1R'4X"1r/)J?&\5)J/(P$,l,8h$(P8(P8(P8(P80`8 @ #C#=}= @ @ /O//o//O/7w79y99y99Y99Y99Q51r/b+$H<)J?1J/8p4.r%)J/!R7 ` 1f=)J/1J/,X21r/)J?,D*1R'1J/>b=$H<1r/>b+ @ !A!#c#1q1!A!>~>!A!>~>>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+&R!8p4*J*)J?:L98H$1r/)J?(P$.r%1J/1r7 ` 1V-)J?1r/ @0)J?1J/ @0!r;)J?*t14D,1J/>B30p0-m-3S3#c##c##C##C##C##C##}#=}= @ @ /O/7w7/O/7w77w77W77W77W77W7+k+:z:1Q11J/:t)4T41J'>b+ @ .r%)J?!R7 ` 1v-)J?1J/ @ 1r/)J? @ 1J'1J/:t)4T41r'.|=(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O/7w7/O/7w77w77W77w7'g'7W7'g''g''G')J?2T>,t ` 1V-1J/>B3 @ )J?1J/ @ 1J')J?*t1,t<>Z-8H4(h(3S3#C3#c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77w77W77W7'g'7W7'g''g''G''G'5U- @ "B"1Z+!b+0p05e-)J?4h""|"1V-)J?,X*0p01r/)J? @ >F91J/8p4,L,#c#,l,>^>#C##c##C##C#=}==}==}==]==]==]= @ @ 7w7/O/7w77w77W77W7'g'7W7'g''G''g''G';{;%E%#c#1Z+:l)0p05E=1J/4h"&f&1V-1J/,X**J*)J?*t1 @ >V))J?0`(.N.#c#3S3#c##c##C#=}=#C#=}=#}#=]==}==]=-m- @ @ 7w77W77W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;9Q5$X$,l,5e51J/4h"&f&)A%)J?,X2*J*!Z32d>,t<9i%!r;0`81Q1#C##c##C##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77w7'g'7W7'g''g''g''G''G''G';{;'G';{;;{;+k+>^>%E%%E5)J?0`(&F&5e-1J/,X**j*!F5:l1,l,3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g'7W7'g''g''G''G';{;;{;;{;;{;;[;;[;;{;+k++k+5E=1J/ @ 9Y95e51J/,X*:Z:5U5"|",l,3S33S3#C##c##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g''g''g''G''G';{;'G''G';{;;{;;[;;[;;[;;[;+k+3S3!~! @ =}=5e5)J? @0*j*3S3%E%9y93S3#c##c##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+#c#%e%3S3%e%)J? @ 9y93S3#c#3S3#c##C##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s39y9 @ 5u53S33S3#c##c##c##c##C##C#=}==}==}==}==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;;{;'G';[;;[;;[;+k++k++k++k++K++K++K+3s3+K+3S33s33S33S33S3#c##c##c##C##C##C#=}==}=#}#=}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''g';{;'G''G';{;;[;;{;+k+;[;+k+;[;+k++k++K++K++K+3s33s33s33S33S33S3#c#3S3#c##c##C##C##C##C#=}==}==]==}=-m-=]=-m--m--M--M--M--M-5u5 @ @ 'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++K++K++K+3s33s33s33s33S33S3#c##c#3S3#c##C##C##C#=}==}==}==}==}==]==]=-m-=]=-m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.au.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/sox.app/FileIcon_.wav.tiff0000644000175000001440000002245513214346535022650 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.%e% @ @ 5U56V6 @ ,l,5U5,l, @ .N.%e%5U5,l, @ .N.%e% @ @ ,l,5U5,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.??,l, @ ??5u5 @ .N.??8x81Q1??#c##c#??8x8.N.??.N. @ 1q1??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8??5U5*j*???? @ %e%#c# @ 5U55U5 @ :Z:??*J* @ ??#c# @ #c#5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 'G'#c#1q11q1'G',l,#c#1q1 @ *j*;{;??5U5??*j* @ 5U5?? @ ??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??3S3*J*5U5)I9??*j* @ ??#c# @ 8x8??*J* @ *j*??5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56V6 @ .N.????8X8.N.????8X8 @ ??3S3*J*5U5??*j* @ 8X8??'G'#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ 8X8??#c# @ 8x8??#c# @ @ 5U5????1q1??*j* @ @ 1q1??6V6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W7*J/6f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W7*J/,L9,l,7W7'g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7)I->n='G''g':J?,L),L,3S35U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/>^=*J/2R2+k+:J?,t),l,)I5:j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;1Q-5u=7w7>^=*J/ @0)I9*J/,L),L,)I-*J7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/=}=:J?2R!%E%.N=*r7 @0.n9:J?,t),l,)I5*J/0P$-m=;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w7#C3*J/8X*:z::J?*J/ @0>n9*J/<\54t<6f#:J?0P$.N>6V=+K+;{;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+%E=7w7%E=*J/8X*:Z:*J/*J/ @0.n9:J?*J/$D4:j+*J/0P$6V.*J/,L*3s3;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/%E=*J/>^!.N=:J?8X*:Z::J?*J/ @0&F5:J?*J/ @0:j+*J/0P$6V.:J?(h">^>3s3+K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7&F+:J?(H4&F5*J/8X*2R:*J/*J/ @0*J'"|9*J/ `0:J+*J/(H,:j1*J/(h"6V66V-6V-3s3+K++K+3s3+K+3s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//o//O/.N=%E=/O/&F+*J/(p,*J9:J?"|="b.:J?*J/(H<:J+$D*:J? @0:J+*J/^>:j7*J/4d.2R;*J/:J?$d:2R3,t)$D&*r;8x2*J/ `(*r;:J?~=*J/*r7$d:*J/~!!A!>~!>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+*r10P$*J**J/,L9(H$*J/:J?0P$*J%*J/*r7 ` 6V-:J?*J/ @0:J?*J/ @ *R;*J/,t)$D,*J/2B30p0-m-3S3#c##c##c##C##C##C##}#=}= @ @ 7w7/O/7w77w77w77w77W77W7'g'+k+&F&1Q1:J?,L94T4*J'2b; @ *J%*J/*r7 @06v-:J?*J/ @ *J/:J? @0*J':J?,t)4T4*r'"B#(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O//O/7w7/O/7w77W77W77W77W7'g''g''G'*J/4d>,L,:j+2b;0p0.v-:J?4d> ` 6V=*J/2B3 @0*J/*J/ @ :J'*J/,t14t<:Z-(H$8X8#c##C##c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77W77W77W7'g''g''g''g''G''g'5U- @ <|"&Z+2R;0p0%e-*J/8h""B"6V-:J?8X*0p0:J?*J/ @0&F9*J/(p,,L,#c#,l,>^>#c##C##C##C#=}==}==}==]==]==]= @ @ /O/7w77w77w77W77W77W7'g'7W7'G''g';{;'G'9y93S3:Z+^>9y9%E5:J? `(&f&5U-*J/8X2:Z:6V5,L1<\<3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;{;;[;;[;+k++k+%E=*J/ @ 9Y9%e5*J/8X**j*5e5<|"<\<3S3#c#3S3#C##C##C##C##C#=}==}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g''G''g';{;'G';{;;{;;{;;[;;[;+k+;[;+k+3S3>~! @ =}=%e5:J? @0*j*3s3%E%9y9#c##c##c##C##c##C#=}==}=#}#=}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3S3%e%3S3%e5:J? @ 9y93S33S3#c#3S3#C##c##C##C#=}=#C#=}==}==}==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G';{;'G';{;;[;;{;;[;;[;+k++k++k++k++K+3s3+K+3s33s39y9 @ -M-#c#3S3#c##C##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##c##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++k++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##C##c#=}=#C#=}==}==}==}==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;[;;[;;[;;[;+k++k++k++K++K++K+3s3+K+3s33S33s33S33S3#c#3S3#c##C##C##C##C#=}==}==}==]==]==]==]=-m--m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.wav.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/sox.app/FileIcon_GenericSound.tiff0000644000175000001440000000614413214346535024357 0ustar multixusersII*h  $h!B &l"F%j1;,Ә &J/n)R@ҠSg!^ϒ'or%˝h s*Ul2eUT!m5j֪]n7jܤiMw;_|t[7=c?r70#\r98g9xfڟmoZlsWZ]mem66n巍v;򹧋nzx奏~x~anFjq.&84e3̶?| m/r+֊7ܺm{>rp\ppNL}َ ﲨYf^9^u֥y-b:u< 'dhIUDG5s|;;a',rnk~ 21da Cc4cG,\EW pCP!N<d*BED!(@Wq"@9ခF$nA@|@0԰H`B0ю.?yn,H~ZWsHC-dWHC=') T  !q-dP3ED$PrֲN"NyP !1Hf(@DbLh~0' ,T_t9*=(AU'HA =,$ V0!p"Q$AЀx.-Q2T&p`dj ]XV,F *[y 5`k @"H 8< q+[` 5P\Xz}/2A { L/`=" A{fS*GP e{E`Y T 51` CY+1n \dqian%D349 pTxqzCV3臼#w3jԇ )@ >Ab2ޟA (0p '-j> ( @gB g#A)0;aD\; Z\aE# B60!H@AIMfr=l1H  z$`v$ YmjrL*} _3zJrR?7nUƈbP tmAţl(ZchYZ&p<$lt Ei5[]r_+zѳ7[z)>K@B@ x І! qlpp=*c˰5ڔ)bed:DD@7ҕݸ =>7oܭ r<Sm gh/ har3UP24)@{8*b!cgY5}<7u?U*An]BDcB+ lH QR4^0}6lAJP*9> z$8iHT^À+xC:Ku?a~]UhVj`B JkA0E(xCЅ&&A JHCQQq !gw~*={щG0p QLH`U8Dg$(bo"P@r(K^ bH * p :o7ws6wO{q_6#!'r!$&CF#N"d~:3c %W y r> N!FQ9ywo`.[hxFP\ P p)^rJ, ,,,)ɍZGEEEGGG{{{;;;kkkKKK 333___///muuwww>@@yJ, ,,,I W{{{;;;[[[kkkKKK 333___///OOOJ!Ύ}@@9J, ,,,IJd{{{;;;[[[kkk+++KKK sss333SSS???___ooo///OOOJ*::Jj @@nJ< Vf#JЄ^VK[[[kkk+++KKK sss333SSS???___ooo///kEJ*:Jj @@JJJЄVVJLkkk+++KKK sss333SSS???___ooo///OOOEonνJ*:Jj @@& JJ 0+JЄVnJ訂K+++ sssSSSccc???oooOOO J F5J*R:Jj @@*|J 0+JtJ訂6V6 sssSSSooon}E JJ JB=".Jj (\*DJ 0+Jl2JD:j{2BB]E5sssSSS###ooou}J=^Z*wJN*JJ, DrDJ 0JlqJJ2bbJj ((hNV333SSS###ooo///OOO]*rJJzJ1LL.DJ訂JlqJJ2PJj <SSSccc###CCCooo"ij ,yXJJXJJL,Qj jJ̹JX2lqJJ2PJj ؘ/*CCCooo///=PPPB|Yj |\JJXJJ0$YJr JJXJbJJ2XJj |\M0Єlllh0xPPPP///yyy9991Qj Ąt|J2bHJJ0$* Jr6-JJXJJD rJ jpppNJTvmJR+@JJ@@`JJL :MHTccc###CCC===www777WWW'''@ZreeMJh"vmJ8XppJJ@@`ƆyJ ^^^###CCC}}}===]]]www777WWWggg'''GGGZ\liJh"mJ8XJJJI6VJccc###CCC}}}===]]]www777WWWggg'''GGG{{{ёؤ,,,%% Jh"eJ8X*** iE*hccc###}}}===]]]777ggg'''GGG{{{;;;EEEJ`&&&J8X֖UQSSS)))QQQ###}}}]]]mmm777gggGGG{{{;;;[[[EuJYYYeeuJ8Xu||bccc###}}}]]]gggGGG;;;[[[kkkS~J 999ccc###CCC}}}]]]---WWWgggGGG;;;[[[kkk+++eee333%%JSSSccc###CCC}}}===]]]---ggg'''GGG;;;[[[kkk+++ sssccc###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++ sssSSS###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++KKK sssSSS###CCC}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$Rgeneric-sound.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/sox.app/play0000755000175000001440000000011313214346535020231 0ustar multixusers#!/bin/sh APP=play if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/sox.app/sox.tiff0000644000175000001440000001742313214346535021035 0ustar multixusersMM*______________________________________________mMm_mMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMm_mMm___mMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMmmMm_mMm_mmmmMmmMmmMmmMm_mMmmMmmMmmMmmMmmMm_mMmmMmmMmmMmmMmmMm_mMmmMmmMmmMmmMm_mMmmMmmMmmMmmMmmMm_mMmmMmmMm__mmmMmmMmmMmmMm_mMmmMmmMmmMmmMmmMm_mMmmMmmMmmMmmMmmMm_mMmmMmmMmmMmmMm_mMmmMmmMmmMm_mmmmMmmMm_mMmmMm_mMmmMmmMmmMm_mMmmMm_mMmmMm_mMm_mmmMm_mMmmMm_mMmmMmmMmmMmmMm_mMmmMmmMmmMmmMm_mMmmMmmMmmMmmMm_mMmmMmmMmmMm_mMmmMmmMmmMm_mmmMm_mMmmMm_mMmmMm____mMmmMmmMm_mMmmMm_mMmmMm_mMmmMm_mMmmMm_mMmmMmmMmmMm_mmmmMmmMmmMmmMm_mMmmMmmMmmMmmMmmMm_mMmmMmmMmmMm_mMmmMmmMmmMm_mMmmMmmMm_mMm_mMmmMm_mmmmmMmmMmmMm_mMmmMmmMmmMm_mMmmMmmMmmMm_mMmmMmmMmmMmmMm_mMmmMm_mMm_mMmmMmmMmmMmmMm_mMmmMm_mMmmMm___mMmmMm_mMm_mMm_mMmmMmmMm_mMmmMm_mMmmMmmMmmMm_mMmmMm_mmmmMmmMmmMm_mMmmMm_mMm_mMmmMmmMm_mMmmMmmMmmMm_mMmmMm_mMmmMm_mmmmMm_mMm__mMm_mMm_mMmmMm_mMm_mmmMm_mMm________mMm_mMmmMmmMm_mMmmMmmMmmMm_mMm___mMmmMmmMm_mMmmMm_mMm_____mm____mMm_mMmmMm___mMm_mmmmMm_mMmmMm_____mmm_mmm______mmm_____________________________________________uUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuUuU_uU_wuwu_wu_uUwu_wu_wuwu_wu_wuwu_wu_mu_wu__wu_wu__wu_wu_wu_wu__wuuU_wuuU__uU_uUu_uU_uU__uU_uU__uU_mmm_uUuU__uUmmmuU_muU_uU_mmmuU_uU_uUuU__muuuU_uU__uU_uU__uU_mmm_uU_m_uUuUmumuU_uUmmm_uU_uU_uUmmmm_m_uUuU_uU_uUuU_uUummmuUm_uUuuU__mmmmu_mmmuUuU_wummmmmummmmmmmuummmmummm_mmmmmmmmmmmmm_wu_uUuU_uUuUmmmmmmmmm_ummmmmmmmmmmmmm_mmmmmmmuUmmmmm_uU_wuuU__uUmmm_uU_uU__uU_uU__uU_mmmuUmmuU_uU_uUmmmmmuU_uUmm_uU_uU_uUuU_m_muU_uU_uUuU_uU_uUuU_uU_mm_m__uU_uU__uU_uUm_uU_uU__uUuU_uUuU__uU_uU__uU_uU__uU_uU__uU_mmmuUuuU_uUuU_uU_uUuU_uU_muU_uU_uUuU_wu_uUwuuUuUwuuUuUwummmuUwuuUuUuUwuuUuUwuwuuUuUwuuUwuuUuUwuwuuUwuuUwuuUwuuUuUwuwuuUuUwuuUwuuUuUmMm0(   *1?Rsox.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/spdrs60.app/0000755000175000001440000000000013231754602020030 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/spdrs60.app/Resources/0000755000175000001440000000000013231754602022002 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/spdrs60.app/Resources/Info-gnustep.plist0000644000175000001440000000027413231754602025440 0ustar multixusers{ NSExecutable = "spdrs60"; NSIcon = "spdrs60_48.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "spdrs60" ); NSIcon = "spdrs60_48.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/spdrs60.app/spdrs600000755000175000001440000000011713214346535021261 0ustar multixusers#!/bin/sh APP=spdrs60 if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/spdrs60.app/spdrs60_48.tiff0000644000175000001440000000135413231754602022521 0ustar multixusersII* P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/D g ɦ1;Og:nϡx&@^LӠUTBf YfVHj}7iXW[<p.=2`lZ zaFB5! 顚6یѝf_e:[?uXq85'kɃkۮ]6qNJ:ӫq=v/kl3ئ<ϼ?h@;/"@3; Nd-/3>QC)q•FqDC3rmY=rn|B R@@@4 sssSSSoooOOO'''Ll,ēXd˜&=TIbqÍ0p"@^#4fv-GGutC5"@0t(PAhEcFU cu,]sgIˈZ ollIE2rL#Sd/%L^--X%PAw6C/bt# uNlݷG;q,J-ܕķD plY\?9o\\ɓ||%KF \q% kq'+q0sD#H /s3QA7ڈP K;gݔ]90ģx%-ŒPmQ _UKIķ\ '[z|(|)P E1FE GQDEaB @ >^ o\xpJxj:x1AQe+ XDaג mV-B%z  z[ĦP< $oV &4d$4Pq v _;,G;?{-o?|=[|b-&`B&l$j'\aJ |?" D,&zU""|#B(X2 !w`W40 =@9vdP _B I$QxÐF}NF CI^|CϑBbBAm?Yu2[ImFGDE =@LCafmLF {x0; v𖱕J |^8 f1B×@|tk A#(ybb{(bM,  &#ԼeC%}@YƾBO@ĠA E\kRƆuIaZ@``b E$"Qb5%F1PdD`ziLFjۋ\"W~ ;<(4;DIQ +-Ax ^&$;@7?) 8!B-A RԠL(%JR Dhak5Fax 0$ՂP@03 @-D ҖtF$ B RF -Fx Jd E*u[~(DшFEQa5TF9PO6-rI ,, `;>؅]8.ZeHТHR(iXN^qJ=hh-hsH^+b^+>U.$VfL&7zzvvDBjPh̟hh>UX*|&$&@F(YlC-pLGh)LXy-_ĆtԃV(2pJlk("hB(z ~OHO!jvjb5F-n~E4h~p~Nj„mAyb0G9C-p(dXA~ﲇBfqihv-7Uu(lȆJJN*!SUkHhajH覇pv0jGVK,qՂ -؂li^Ch4HlNb`0|ȇzlٚ„l9j -V+{ZVdhm0DNă6BbĴ6EpFV?)@hX6(f`jQ4H9+{hhv77Fh.*LO~.n9zhn!z6@lFbhcօ([-5VVժֆ8诒؄M8t lnHt ȀXj8iAM:zᬆa(Baa9PWXQ++Ć>$bO+Al`l _z:l?Ԃ +jAX(/R<Ց^hGaX؅.A,^m؁&h DW9dph*Q{1+Q+!UxADA$^@A+ Uv+~{OAOIlYjIh(^NG\X8B$b8#5XES(r.(Xu Ղ4rfhyh6X=YPuEl"bP-f鳗酤مDnɂ>92A2(mYh2XG%b3U)؁8 >b#؆m8)/c+鄕Ed؃)O qSuG4^Y؃ hFXiVWu(2(Q-ڊ+8/LX dVEJ-^h=b5C4d蛙YS^n0 ]pȍȐLH 1 bVFJ .,V[HNGKn^$بt.(MXhTXa$Anb/hHe+eF9=aNVH4G .hzbRn<^J~T7J+ႶBmnݚ=tX.^XhX5[Cld!Z6U$O h>9(z鑃c ?V.;~XFXPXpG.rXZxX]vS<聽SmWt5U-[[Ab%b1}vkРC1bߘ1ƍ D6$J4'AqL3{Sጅ6`8tC)I3lٲ%MRB2(˦²JUja4-^FlaKNۺuի>{ 5̶avoȤI?xϞx00   8*/usr/home/fatal/pascal//ps.tiffCreated with The GIMPgworkspace-1.1.0/Apps_wrappers/tm.app/tm0000755000175000001440000000011113214346535017511 0ustar multixusers#!/bin/sh APP=tm if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/tm.app/viewer.tiff0000644000175000001440000002245513214346535021335 0ustar multixusersMM*$UUUUUUUUUUUUGGGGGGUUUUUUUUUGGGGGGGGGGGGcccUUUGGGGGGUUUUUU888cccUUUUUUUUUUUUUUUUUUUUUUUU888GGGGGGUUUUUU888UUUUUUcccGGG888UUUUUUGGG888UUU???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo;;;;;;[[[kkk+++KKK???___oooMMM333[[[[[[kkk+++KKK ???___ooo +++kkk+++KKK sss???___oookkkKKK ___ kkkKKK 333___www<<<999kkkKKK 333___///<<W ULyJdIP騮 i1n)CHlDĦF|fd/Ѹ@!bz]p0? !3C#VtLΒ4;j6!TXgU+m)X<$BjƔ9N^eOSCG D\lfZ0$;2tAΒ ]! O|)/_SHdhfp!X@ڏtg^GPJ D@`: 3t%J(dО$Y,âV87lc,8㠸@0>:Ia Ch=`=:Ed[Zd%x:Pf ؂bL.cJ:ɼeԱ>,sU)hjP4"苀g-@Xb 6BvdWQ m b@c=AZs{aQ cFeΝӚ{]KNF$(S1T%@L ]A\!$JkmPM(i3 bDWk]Ak C D?퍳3)*E9؛X:iEm(>r6G@VLSrY!6p*]v۠4?0 Vy40d"X <(-h/ ##`t̎g0pwmVI5DU4`@$jG,u 'pDGxg !F*CT 5dUQjl86*M3 qbU^^X.!x F݀k &>q,1p&>a*^aUݹ5qf(v}/}%d W1r.H{` 5*C@q .Tjg't`Q{f(. ;zVOi˧^b26XT`"xP&G< [sWO : Vzت`5` ;L$U1@`;=P ZV5rфCWLG1u(^%RD#bF;p,cnJG\gVJxHfCޞQ}O.[1/^DB^C?]Cg H&Nٽq 8a$t1AbEŇzG|x^q? btl$qkui^ "S1$db㐉^ lF0"Y,EU m@y>n<p | A !H a&u`r  `>ajZX.x  @$΀(öd,ankdm&?ygn0HoV&R@ G`@^Cv*r>kLͨi4/( 6t,Ptf,AXPd%Zf4ZyByJ :BHV ( LIV:!.G a a a @"1 D^saH)VJn>d!fyAa Ne!TzNd6  &$:,2A& 0 X(`*`K .TfϏ\Iij`MAdJno&o8aJd@6IwFD Q`ދI6݀X !% HNfK(_"Z@JRHBfQѶqƠ Wy1&mX! ! &ON-u/b|D!6$ 6E+ʊ 4R@r@Ok `+FQ@Xx)R(np\@I| @ub@4\AJf`Ѥe.`^ *rR *pa i56/U!20*!q!du :``zf @4@ XrStA!/s!WB4-BBbB1C<?DtH,TrEV[F_F4iFtmEqFTsFN"ATԋHI4ITIItIIP(" A4KL4LTLLtLLQJMN4NtNNO4OtON"00    (R ' 'gworkspace-1.1.0/Apps_wrappers/vi.app/FileIcon_.h.tiff0000644000175000001440000000665613214346535022114 0ustar multixusersMM* P8$ BaPd6DbQ8qV,cr5 AJdIa*^U53-u2 P+Z?͸9?X\! =@g-v_>b4(`vzs `6bೱVL(ɥ^n51RIQ3Zo`?( p{HDfs4^j^{!2rD,xjbBgJ_N\31p*B  |E0ku2A1W:S4Hīvz<RH#b>ܓsp,Ccn?@Bx\&W :F0S}1rׇw԰' wd 4pqzYކ$ sG#k bőY+/*(U+pG}Jn”bth$k|@U@(J#pȥLu1;d1&(Ŕ+e⵴,t؆ Lp@gJ. @zcZm* ( r @$Π|(ʰK+v %\0Ebk!lvm#Zxnc`be!u dt0,`b#jl܁O .DJ( 6),+@,AXPd%ZF4ZxByJ :(@HaV (qD:4x.>o  {h֮B!H)PJn>d!fxAa Le!TzNd6 $:02A&A 0 NeH`*.Ff!BfĐIE$`MdJnD~noD8AJh@6fv `<QZ,I0J @! !.VI$@JR(@FQ1ŸWx޹q &-N ''!l#O?/fD6" 6E+@4R r@O+M ( %)/—(b(#* )!$ 'F`J:f!E@4v`mP,l Ө |vXP:Of]¢p u F` H P$ `:p`Ǻ.;56 A4/ At!B(u.S oBT1C/9/M45C@iB"D Q/TUE4WEYEeEiF4kFqEt:"GGiHHTGH4HtHIIԙ/tH"dJ+J1K kKTJK4KtKLL/MtMMN4NtNNO4Ot 00    (R ' 'gworkspace-1.1.0/Apps_wrappers/vi.app/FileIcon_.m.tiff0000644000175000001440000000664013214346535022112 0ustar multixusersMM* ڀ P8$ BaPd6DbQ8qV,cr5 AJdI@X?`\Id$LaM*r:HҔlj4t/d2n1Lc  8S;Oy>O lb @YQSk<N`H2LDi@#M-Ģ+zb-ɼ1IY֡jW'E _ݪ@VelGnhbG\V*G ٞoIO]# 7 !i,ţ&VX,=[,8㠹qÀ&) Yj0; BT3bE !A#Ajgs RšixF&Ћw.Bp`U1wLP0+( F&؂!<qHP,;4$a):*āc} H%b=^iJCX h/4DY=Q?@* @hPB5Ƙo 0 "H`,i>D@ AB]GAǠzWG(Pl8 xh.2Dq6Ye-|o "y, vt &.`h50"|Aju>R P?vN L)CXHZKy=%ip b `U"$U Qh2.`-r4Bi56!H,t.tv5!X@i $q[+up8W*ZKNF*(EԇH`]݆p,D ]nm3=%ʀhdmJjH<2ŔدP-V. A5A0U, R(X0Ĉ! MP BSx F'i BYA6 *W̫7{-XX TZF%Åbl 1 x fOstpv VQ5 Tq5ڰxBG\?S^<(WNYYP<4ګ Nj@LmoŘbx%XV ^E91x.X D`[)FLi5"pÉ9Om UGi-b̸MZ͉t-ā(+ZAXVBl- Hbŕ Yk5+G=#`o8Da$av\gH"Bc$r,S#Tv@lF0"YLQ1X?P@y>D(v,G ! a&u`r  `>aj O ~ @$`|(X,+ \0Llƺl&[ygn@Hp!V%2 Ex Aa,`c#  ϔܭ/|j`tmzIZPdeZ9dGdRzXz:HLHV" 4 Ƭ BD!:4p.|P< e* qdZIaH@hH^Bdgn`oP2G6HHhtݍO,+k"20܁B` ` 0pfޯB$I6I`LAdNnofoH@6aDk'n @$ E ꖆl a(X *nvDl;!4*Ǵo#Jc,) " Dz ˑAP\o,~iLfh(\ FRG`:RBjJ8E* @ȁd $l \x` $ $@ c.'*5^"@JX:AHH@4{@,r '&@ b`{SP'B+s6^xƏvh@*xl ^& ]&ӿsT@t @c;sW@Aqt.tB4$,2'mBt1C/Զ/dev/console if permissioned for it gworkspace-1.1.0/Apps_wrappers/vi.app/vi.tiff0000644000175000001440000001722013231754602020437 0ustar multixusersII*h"< dAЄ*fB 8zgC RT`iCƐJ$jC riAHډ"%ȹr$meCz0nFҩEZ8mH)"΢tHN*DwI2$\:K LwJZe5(_C _ALhBQ J1|eDLBiD:(i2,jCZ0(Q͓iNpW7#U2"Z9$ qd,U (Y9%Kg${sJr&]9\{|0huJ |dB Q*3sD4Iӑ9) :`5Ex ܊bH8 HdJ{;G#KQ޻Ĩ:bK C.A$1q&/G;1$Ș32BF3RTEP%Dd*ƒd6LH78QP6*)ߎ*-wG Iy GsK+ID԰K c205$1d<C+3V=BpC݂E #B`4JOچ+O9T:D7dst@㼄},HGÙ(-JILGF2D!"$eD;44>#0L85>cHL #5V*L5h I g8(JܷP-uAꎤ:^],,/C %y+(Kc00c(u7Y64Dw>y65a^9[05Vl) cY*M“sj6BPT3-Q.*zRz0F+r)-ʲL{L166@!84d\!;Cgv6xp@?>:5 6\8˘Pi#I1]BƼ4Q&v^I@&C(zk!@Còb6؀fl7+V<&^ O4ЯP̄MըnB6< j'ᐟ71n2[g@Gbz.yw 0sR=`„01`Dᡎ;ۃBWcBt74D@B}GPpB  aԐ PHB(bR$ e p\['ѡ`)[}wUĊz"S(ld?!!y(A?JaB4nbzl !A"O'ءQNaK&u^vQ(إ~}1(,G#q'I X]/$hk8aT@,!  P =qFat8GɅAAy? aNN"0u@ "tŒ;aC8hQ8DH49ə(ᾡ6).U !NFxVBY p!E0} Pl@P"D3" 70JEh BJ7a) |j 9d Cɩ882 @!Eu)ȊEU'5n * D R&_*|A` ${A+'"HK4'~bR $E(kᦜݱN^>B=\}J);OHx>ND`E *% ǐH3XD ѽ7G  'W4 Šz ;\(U4j ahK'>/P%c\ Qn)uP*A1*DAE@$H|A1Nj $%H4<6&p&@3?Q@dZ PCiC@AX0(lT%@D] ":HAt1?bTyZ({"T1#0G $`k8Ȥd 1c"? *4%`{12)'C~u `(ihaw A8BxFT' pRn  F! N,az@Xz`(Q0V$!RX!"F0 2 .eja.FAF@ N `zP` BψhV!La N 6oVBa `a`H @BPAl&aTa(aaV"ARsw`,BL`!2P|Dr @ @Ha@lm\ &L <`>j >: $N( `Jdfa$!@:@jxl0A!H* N"13$ J39$!0a9@V@.! nZ  X`D`H ,nP24 l H.3+s T8@ ~:  0!ZA(AZ,ALaL`2@3N!3$0R3(R`@Z x Z`R0 (AJD<H B@  RaL` V,V!apa4!*"XMT&!,`S(2@ u4A<A  $X @Pd@j`L T@` =    `` 4  `d @ {c@1 !<u>`4!(W[U/UQ[W$28 3tk>`r L a`a `  t*n 6 v`Z t> $aTAAP62(X՞a2*\WjVrR@k3j!<!a D`2@(! @*A !` X XL<$ \l" `R< \<a Ha.a^a.&bn!0,aawexYxaBUa1B4K4 v4!=ABJ7<3@ n " H `J!N@=X0@ @t @v  ! AT\A$BA+2a[^<-v-81nA38yH08:AWYa9N@`m* fSvF `rWvL A@4 `nR`A,;`<a!D xb@ J~!6AT?r8:hA9A9A8!!^x6A:!غ!8x|b@8A @n@X ``D` a aV <a.p @a* p*A@0A!Lz028d46]a]gz_Z6ab<yka/!6 zJ5*A8A^ pdN n`  !* qAdv a| Ĵ@`j{;!XH$aA!:a6:J`V>=\<A=>b+˙a !>A Dm0 , X@ `2 " V L6!v F @.!Ԙ aF `F 4 P!FA%@A$v9sd^T[n!:C>!Sҁe8p!AD]T!aLa($!ew\"*P@ @R $Qx! !L @x K (`J  A A  DF\:!AABab5^&}Z[eXZBA $AHA&>(l` `| RGaaJ `!F h`j6 @A$`5Dz8DhFAP)^AJ.Be8+][AǡaA <n0!a&&AJzT` EE( @V`@@ >D L0 @v*>`4 JLX>VA` dJX"y^)ȔJiN b)6E=G#S&PJD*O 4QHJ(I5u4[,!p<S8D(rD= `bz(YIL3񅴔<1%f$JJUBV'J" OJr?P+U8XqO"ъ-}NӉj}(Q%4=BG)fMJH)jDIBI(52HZ, A`X[R\@EF' E!b?XEd6?,%aBX$ZV%aTPAG Ud&dq@K!"HxNDzS$&Sх1|L$#NH y$E`/B0d*JH. p:5>"::ؼ$`BXIRU%1pXe\PWeV•؃2Yey $FđMehNJ$4VehYe*B(@(#@8[nWřX`a`X KJJ/DhnٺL9TK%:|dqSQJ] eILe$WA`R|g$L$bNy*ŋ5.-+thH D&kbxH C/2WG"hZ*Ca*(' B)ȥJbQLbPhX-aX fSЂ3_a1 ay lLѮ"V awhbr8W&&,F+E(V f``,BR K7`PlQ('p&z (E!? La2(`XQq^.x`h `\t 0L"5 A8f 2D0j08ƨ4\)a]@ LW d!#W@r[ a#a!0O:HDNAB%,O('@bvˡ0(5>lQ$P+Bc,iX E0W"5 (i#@!&\ )OqGyn +uhHUdn!7pL &M*9LBr v(E(t׽yjb QX&* "V 06  @1@<):+A, F(| c,@"È!o.XB? +B|U[,C."#2# b0M !kI)bHOA>D5"LM (@ & T.Kv02`-<0q"ȃ = (MH-͍bPh(EPr@W H*EUeZ&P"$IdJ&]hL% 1neNwhcpa$ȠB\ b;veDAn(޸$IaO?IReEW c fX*N#)A@M ~Imfq饬@(=kޛjh}o$ԆSCju*YK 4j Č#- 7HjA٠#R4:pQw$Kj&P?fDbQ_.aMF~HE 8ppEuxx[讑  ČQ '{I~D)T\ƀ9k .(&I ZI8雉$b; S$r? 4lPG؅ x8O:fI-MD'_hŽ n%zhIF>xhKܞ@<_$mnaS*ko3éa僇C.!ύua&ӕ8,9$7㙍62p !q/Mm0NNt錄]ח6A\ hݝ!Lyj^XBݫ"twu?H@Hۀ@YQW7Sc{RuwG~sh Q{6 c|ssk{cC6 W_?)/=`h*]6ECb"E~nG$kڠB_8`|%f8=3c8ҔܴѳOlq>iA- U#A{3ΗPLu Q2EB%wxSv)-$r;*;Gs Yv.S}FP /7>̽AD%i3W;;$V0`]tv8QDfG8*G,FWlh$~Ln+Ƞ6pH4:KwtKXP22Epu ^U7w,𬪸D.>*=nWh2u}|yo񬛆lF6AN=0wQyh Q;_ 2u$rw5͆TIk4)*1RZw3쩆-qWj=}s[i 旑wkqUhc=%euo̺ϒ$ܠ'r'\_o\hu/̾2$w9wu;-dͶ7&q yHb=*PnRم2{~x om&ąZBBuJQ-JǢUU৮%>i_ϷWW94Ox(LG*_E _ >&8_Ͱ˴N_Y>t[r@Q dMIENDB`gworkspace-1.1.0/Apps_wrappers/xfig.app/0000755000175000001440000000000013214346535017467 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xfig.app/Resources/0000755000175000001440000000000013214346535021441 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xfig.app/Resources/Info-gnustep.plist0000644000175000001440000000034613214346535025077 0ustar multixusers{ NSExecutable = xfig; NSIcon = "draw.tiff"; NSRole = "Editor"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "fig" ); NSIcon = "draw.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/xfig.app/draw.tiff0000644000175000001440000001212413214346535021276 0ustar multixusersII*h $h!B &lXK41bj RL+)қF_:2l09 2' /lh1%L2]f+V2W|5 5,֪m 4Znj[{%TWӦϘ!s̝7O~6^xe˔7SʴjkX]^4lbNK=y*=iӇo0:|':}i.^@W޺}{!l>dEkHsc z/>W;߉ 9`~vYF-`Xe GyFdA!FF!:f6 a:G6j*Dhj)Aj <(!1 DS?-iH?gH.2ldA֘Fe&s#/Eqzf.,DFA&*2D) rI9Pď|;-vNMOKSXlybX@Xa AC  p6`c"+:\C =d{BžsO%/;ԫ6-@ N_ 5]8 dAإVF!jZ_"DDЋ]W"Dф ;V> Rq[%AĂGz9 .C]@ Ҧ7}Bsc8a8DZyaXq1!aBƀ?ot"C; 5 8)A"$ ApECpA8Bp!P# 75Ml2,3&(^<3L`Jnbbʑך%خkA$kWpK! d7piq !8p*DPThD%4hE<@2 `An9p DS܉'wj[;k Oa8$SP!|0E[qA8h8!8`B&a5s"D`9 %&1! =CE()^jr-G1hǀ3)M '+BjP2@ 1Z?L8a&؝,a B6s+:wXk>Fc0E`nAS␀(Y-eKR` [WB <\ %x3Y#3sl * FA u $A T(P " b"@걐 b@lOz2o9upKXvar w 윻"k!aHAa -V急(֘ K_m08п)l]1!#Bh8% Pڶeouw80B C 6\1+W,0k/z0y-DaC544sbk AYx'gŃΉKިBǠ O sޘ /{q3U0DkQq z8`qx{{/A+aQsRhP uqp]}a_3m= s30371rK{o] Ѕ25`.q~@+t P'ew=(ay+W+-߃QϷ`c7 ڠ= fЁbMt7۵    ːDQ;ذOR!У WaI C?v  ð;ЇZ*S0<hH!?pY[`ap!oV0V`pq 0Vo'XaXw;`vXW{AvRpGY!asЅbϴa"7ȇ(t([S0JSp{05ȆX$O|v(hL p_iF?pN LZOj1pHnJFLzL&L>#)PO%}( TXЁ \? J/chBhoPehsH0n?G' rHhI@h*0GX?8@GHxh;fBDH8H+5sH%`,`."r+r-.+%LFFQa0HM9p ,`PF`7m\UK0 WجXwXopYWXop57XO .Br/*"P(E,ڨjRTwpg:tRq+Z'F`*(P` R =.0 n)g^pI)pI.H=Ё v Bq P/b `b&o"! "9 hkA CEL+q'5 Hs}hPL^pR`- jaPf}`6f` :2 !` ^ |~rBqJPz l|@al;BLn@x"#"n@,F"@.@x~t 'LGu0oMP'(QwqЂRH0`!p ` M~>B]qA`Y *`aB>Jv 5H`* t|l@L@ȎR jMP_aZ]mM(!Pti'FP o=\)Ne.E;Pf` `vA`|Z  `\@@`l@Ax4`@ ` `|@0@`\VtRG]XjMu { {qЁR>|uaPxIPB <`U\6 ZH=P@oS02  ,@Z@q tj@D`<@f@t@Z@T<@j4@Z@`VDzXl4 5pY P1[ H*-7IЀ,5HdjwowQ3P8"4@t%$A2lv!c!#;8g12h;,@c4E3Rcvgmɇ g3;3P#  q:>69ㆻ=>?RÀ5'5f}# :;9;cc<98333? x>+x9׳s$?Q[#5>#8SS`c۳;s$,[sg8 #?S 8:݋>=cx8SxK:Ks˼!xG00  !>8_/usr/home/fatal/pascal/draw.tiffCreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xfig.app/xfig0000755000175000001440000000011313214346535020345 0ustar multixusers#!/bin/sh APP=xfig if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/xine.app/0000755000175000001440000000000013214346535017475 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xine.app/Documentation/0000755000175000001440000000000013214346535022306 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xine.app/Documentation/Readme.txt0000644000175000001440000000012113214346535024236 0ustar multixusersCredits ------- The file icons were created by Marco gworkspace-1.1.0/Apps_wrappers/xine.app/FileIcon_.avi.tiff0000644000175000001440000000610413214346535022755 0ustar multixusersII*J  $h!B &l"F%jTcjx 'p=iaᤊ NVUكe'X9ō?n% le8jX-p81dѸt35qΓVl"bΟHB6l)HD}j'HVC:yP${NlT䴤-[s;$n9 +;33/|;o~7? H(ĒH*RH)8 4C -0)5̲*r`s%b)g_ ۚ 4 8JHK)-"ɡ|XlŠ㯥J56oȷj^>Z:9; eC02(ɲ&"/fYd+z,bt8LFGh1ћpНt2t@{g-+gAs6菅~bnN`n1{)wdw9Vg tu5`zYgvQ; _b6Ab#G`x 1Fh@P֡1h!1sjjX}n\y.AoyiC:" cdcC!6{H3,َC6".e|bQT!#ΓA @6x΀+3ʚ<>)F &||R1Tԕ~e&MlQLx#0@C``03z'J-Up yiU7xu6E Cx;fFR =U-JP0A-Ń>D@ R`.pyK/$6PH!SRH!%<ۚt:0Y/R pB!ihY xBA],zxHEhiwҪ`04 [oPݻb>k7);FLBL`= 4 t@[ -3t Ab ZU8pqwwFhI0muP|.= Wqp$õd݉~V.r u93#D ҪӪ:wdGL@jGTXJPA6KpC4 qOfx!ժ֤KhJr]LG0Jj=M!l@pcg:7arƗkaX |L\s#9R F2Qq@~K)& p pp pWgkN5F`va/{ȏF!f #h$m2  4wR@t  @7 `(2֣TV#W7be`D+^/F0X8mT$=փY/Na>JȍH5Hh؅؏#8e8舤H;Z;$H7˄Jh/2H?IC0 EE%-2bFf$\΄TSn~˵enwq݀ Ў/hPJS UD0ㄢD%tz"#z!s"dF&rX`I$N;iGDc N}H˶KB]/OHrJROD@00   0 . 8A /home/fatal/src/newicons/tiffs/file-dot-avi.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xine.app/FileIcon_.mov.tiff0000644000175000001440000000624013214346535023000 0ustar multixusersII*  $h!B &l"F%j1 i &>IPRrL#mJUҧ&-eK-cԑp.u/]uE4 4YP]Tdž?Єr,80aAF̞6fjYL,0HI O?!jB rhQK[ {ْ{&Xkhn雎 |P&zFlFo<>~aU]?~; #0ރ-(^%8B1$B>4&,*<.#"""9è9ًݘٌَYYIP0?~' =(ނ58^B)$C!4.,n:<"2".",(T.Zg?Fbf7Vcg+N6f#^g5AVX.2D?$N6y>SL9y.3t0L32l$Js.bf|/B /e(X0@J.5`+C = n #⼥J+28'^::XbVK?㣴Fxinˢ.Z⼕\sϳ:vjh;LN:cѻ( L6YZ&b"&1r*gp& fuV@oFwYYtaB耵_)^qtF]'qQZq}7 rޑ靗eTkJQ?p& =)$%(("?O:O939h 1QQqguON1>` Z)c9*zg_x1F&Q<߂u_!g)aA; '~7B/&yMwOҶ(>4Z/!(A11$EạATx%6x|xD>BsD01LEB]$+]- 2 ¨ڳ#*< E(p& l_Fk^@xC !}8LA 8L0@ /hJ4L,ҒTO|r%m `&pAǐ$0 *1O5bX&vS$F#i`IdT2Hg8#4fԋS2$p& m )fSCXjRX=ֱp(^\D',)0 jX}aEAto%Q& cZX=Lۘ #(GD8x؊@}^Bs ^XPaUB ʛp\UPH0J0IC 5kMOhDLbUr8P Nq7"i3L* @:A޴ʂn6ꚋW`5ć"'=_rHB"c[:|Ѕ`Nt qHs[e)@ Bmw܈A;b`Ŭqˤ&8Y%lu,Hѷ&muYN Nh\R50X&` m2| JdL!Hri8D(F=ьnc T H@57`i(޸ʂufd€wCF5=g HÓ;:"q`#.xDzAsDqMBj .b)ѷb`֫,ٶ2ɲ.Z7{Hp0;@,a$"%+F L]p^AʍwCTh4V5i9} |Cv!h6zy |0I\Ab!eR)8,`*sA&K0-M2q^=rob!! K(:6@0&0 .m;D`0}@##P`T>M97iM95 {B4ߘ"  &3@;wB]vCK326q?<` q x"TP@R|U{5*uKmncXDQ9s[s<$z$& xE0j^’ C $rƇ߳uک4>ۚ6?;g)p25hɀwbN$ -c@v(DAwRGE"!+=^1*IkZ7QkNgߔ z(rhj@0?#l¡"""w`"QP`t97!Tp ڠTg ``GMg:gC@ T$O̐ "`B  PP P 0 00 0 cn v԰wiR`Ef( 7&V#eZ"[F`;leS5P7H08 hႂHhh #sf@*A,_Gf(uhTY R5.{ȏ>YFf RrX/9R%@.ds6g  ؏ 58V5S3ո+Lb'H+~ߋHEȎq %r#wvY?=veu#M8HHI(JDL,OKg$xIXx7#rdM2HI&JhH6w2HO.IS@I 8A9#gf)"_ 6nW]CS~vPwnZ? @ HM6^WM S@44ż 8N1"7bdhfX nd:K(VOfeqO%v4tݳ԰INu@44tN6Ռ,2D@00T   0Z  8 /home/fatal/src/newicons/tiffs/file-dot-mov.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xine.app/FileIcon_.mp3.tiff0000644000175000001440000001131213214346535022672 0ustar multixusersII* $h!B &l"F%jpb*n< p$XRd,K?&Dɓ%M" p /Ȣ O4 򁳕1gjAj)Q,Y9j$?` 7i-pymR0L \v5,pud>SYFѽO],E9)p;-6RR 2G<+,Zn`vVZ137D*wh_Ef (S5CEp**.x~eeس`ۛ ?7 T"M2 y װy yȹ먹蹈%$60.a?>`7!a+16`#)֓a59VRp-蔃 3yy yLjyȹ蹌9584OMJͤHXMH) @dh@PT! JpA HA bP!4ptP@D ,0 tB8`A8pZVv P;8x0@RJ`8h :ȁJ*2Xfiʖg9cN#9M(=NiC)*POANA;! !HG,2"*$ *1SAPFd[Z@&; X/&勑u\`!pֶXbq!h(9SI#]t9pG_d! BD:byXb#uS4&8s falexࡇA/tvb|]~Gdl;Yxq:. sh9' &0~C"a ]B!z1Qe'bƍHfp#i8!}PC&@a\ad@QP d!cY'0b9EAly/bsa6!"4 0CPy` 34:`X8F*qr98 @9"(Bz(@r0! `cB2HA i,^0h]_8 ,|x{ C:ۅ)lJBOj \F)Q HD+ kxG=f 'O# _hB ~21-GapC uFq7< G:ьa EH9 f|  |5 \P9(A^轘"̧)rR!5iC 0! )F>LA bKX|xA3:."'ZB+hD$э&4`DxEڐp@,19x-p)0֑"0))2f0]?;MҒ(ʨ20 LLce|f (Fv@" D"|p$ *[#m rz8p@ \! M4"yA mAjPG#$O_(>LO0KRtO Ѓ, 1pG5LaWT" ?+"gHΐ@\D D (1zPA$ m`BP?ZPzEBz!Np4`,0ۭ-0 ~=&J^I*>@ bM8ƐLd^3]ADUrw#08P xnW*EULbb4ܻ`7q}4Cj +#+taQB<Ԡ)&5*W ?rw0 ` AA<(b VF74@P  x`cz: =7 TڸЄ!LP X*l1#Ca@,3# /x=jUDA'x5Nq ܢȆ-bɈ609(B!CE0q9 !6ax(`Lt6FK3O2A j wx8&q7cPAA2p~ڑ(BP~+(A6JЃ|A`$a.pP@]0Ԁ_2"s}O+(,B 5wZl\F0g2 #2@ ja01vXSc G=Іg8+ Jx3ihzhkvh>EPV0 &аrq } Ђ6PI|2؁L8LX`J,܀ G0p67$S#|Ȅl_;P5#P`" .`.tLPHU2X(p hjJ(n p 1P7&P!]0QO )[ePb`$+! `aN$pd /a /@&K"|zȂ\ps}Ѓ)={A4@>6Pryv0YЀ!sx0'pR(b`a0"`9`= Kp^xMh e" &:$:x5 8|>D:D@@x!L D‰x'k" Fȁ<$Ho0X+0RHMPGv`ti*vpCx(wbX?PJ R6`-'(h01"@$X::xzlJG02!@g"lJȆBh.훾h#'rb78'!鬂:@@+N0aN@*t@3&Mm-Vվ1ֱDa:fArl@ FL,ARju`ZhHg j+ګBkʾshKh)G0r~$!8>A/liivhx0op@HlH4(j@ioi9ʎ9鄀1fhFbAb4".8 Y$5"QXXCaRD>ϴAd xhhom1)󡁶yOhG?7%"n%~XY('IZEtXE5Q)Y SY,M.iB__y ޡY\zhhD]D^儽^^]~XA_Df0TE[ SZL_^2_↭֝BZ[ՇG55[ ]$`uV8)#ETXY+\e[Նo ȡҥ]ݍx.۞E$00x  5~8/home/fatal/src/newicons/tiffs/tiff/file-dot-mp3.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xine.app/FileIcon_.mpg.tiff0000644000175000001440000000612613214346535022765 0ustar multixusersII*\  $h!B &l"F%j1 irL#iBU'2Ud :]a? /쿠"%R+\Dтp*Z\#ŭ;o*I]T c-j-רQ߶bVaU/LO|@='/pCOi}K`C-P0XgwXVcQq˔mey,U${bt_ԞdRd ;bFxәѣS""&2**.":b99ًNLYOդYI֞ RP.(~'8CϴC=45,^)<#!"#.2n:*2:.b,XbU,Nf?^g7Af+Q6g#I֓f5YVX.5SH9Lt0c+<ˬ>ǜs=ϼ9'٩Ȣ-ĒKeK/# >*=̰*Ṳ#֫:8oj)B+ĒH(aX篷J+y^Zl9Vk6siv9o?_c (nmYdaSzbLgt&Lfh1X[t]r)tA{WXfx@s-י cnITKY`n+{@|w'vY`tu/az5gMF(ԏCDOlXFSO?팳:Ϲ /-)2F &b YB=R3Ե~mĒUnbS@ 3Ac߰שR]  念PV|hVsd'$A6NR㹮F Jp% j)H!  04 pF2g dgWҎZwb>&Xj" KN $-{59VJݦܕ0z[W p#rF' Z4-,nB`ʏf*p䞝;|&0ABF2⑎b#x W`+tF9tPde V aU\aAߋWx!p\'NnNqRQ+Ob pSa@"pdc8Z= _f Or-`pT*|ȳ-JO55Ch@yCp#f"aɝtFtr*׊޵/}Sd '4l u&&_&Pg`Da~toc UDn`\e#1)0CߞM5]a㾰P D_^  ~YhNt׻AIvG0 7&耾&/8ro Q>KaZzˣ2N7j]F$  NPG~gR_> SxwBF] 5Aw J]S֮)29˟sH  A"GKVg]bn |X7$ۈtؿ:(?گN`WhH`'@4PH!uVznVζ@ ᖞ/S-֤(Bo}HPL&(EY~u C_{ 4rl ,wl+h 46*f(P  O`v_c   `` `6@T @$@`Ej( @V#Gah%OFC`+q= g|?0 0cᄂ0(h )#grgG,T 3Aj1 ]T  q VPcThahF %bD,ȇ(P(UBzP@&v R&hU5hWXQK.M.vyHnWHwH s ȀS@1 69؇88|8 𸅰V'ȍ(qò?ȅVuy(􄄜6HD X&fcDpVeUX^AQ-l3)N{peH> Hd:ՈĐ HNLHLc88NTj e4 g !qV~e|zm6neqtHBl0$vKʤqEdJPtNG@00   0 @ 8S /home/fatal/src/newicons/tiffs/file-dot-mpg.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xine.app/FileIcon_GenericVideo.tiff0000644000175000001440000002262413214346535024470 0ustar multixusersII*$  "'  #+* )*# BSTF;QLO: KGV' lR FBXJO@RI`=@DH.J qXdsL\oG_kRep[efUpoQOMJGFI qrQopQrgDsicNCR NfQ l'ľjlXbm7DZû`dO NIRQTWedJNJTddQ@@JcC jaF z z  sXE^]; noSkjVPkSqbR`P^koMxxYWTH{{NdpOӗMދhnOUWS , srG  _hR  ! emW,. `_I  gXF ygG Q"#L=L 30 fRV,qmF  )&_rS         GMH]cmeY`lZ!@  %+G] 'ygo\Uqg$]dhBرM' 0TMk )]$ w ٨T}H8gQޜVTn.B Cm9 0T ڪ֧ 4ݡBJ DTt]  ˥(Oa9G  z 6 ɥۭOGVRi[ HN I% DT ׫֭ 6P˯LT23hCT&} M  еOء- ئ # rDcQV  S)+ "%%1X6MR !^t88Q DqM)"cL^"  Tt  _ANۛ%5B%FySؖU!VR>U:ΠP<fM`>Y^fmH&  fDИ[edU Yde qTd,FEҲ  6. #KAoxجK Bdb8R Y"( հRկCUTXTJ [L  ]s = y 2#.N ' GׯٴHMO( "  7C(& S  Fu`% $˞ NԿad_Hu  ,  z]ۖ\ڽ' XO`MpRL j Rb< JJ .-S׭8͟i PpxoK    ֻӭ޿^G;˩WN Z>MCBL  #>NʥdtFݞǰ   & U̾#ʷ۪               va:btIKJ>lPsrTd[W r`Doo[swGC5T uZHWoJd^KIPJ]YJowQnkA&  |WnbK pxP]bV|sJ _d@ffOiiRhhFffKllOTg`ͭ @H]H5KqdWbfCYpFI6WmfLOOLcYK@WpP( zyLajT[Ü,kaWA?] aS`smWHGOSRE][bNGSNGUfhbOW=b\NQ?Kɰg[NN~ $QPGlmzogS}bŶPTT_dNpiNaf\phdnkMZ`R\e^çY?K9 HVWRV ef6¼idJ`]G       ^^AnnXddGRRPNNXrrOkkLYYNPPNQQN[[N__NWWNRRNTTNjfN\cPenVAJXGEUghOigIqqE}gl?BY(]9'  Z3 =MCVZ]T__Hrr^ffFZZJ]]ZssWaaPooQhhQggQooQrrQmmQiiQkkQvtKlfIsnL]TNwxIwuF^VQb=OkqYĬsmQfjDdXaomEQ{F!   4 Qrf\ڄ ܊ ڔsK  BJFHؒcbJvkFv\ IsD@     kZPʾպևƝ  LKee\ Oߴܹ̺ -+L ڷڳ׮ٷݴܣRMMڪٮBi]QqK߸  QNP>jZTROI  yU^ħe UeiN     R L"&   S!Dg    gdR   00$ $n%@$%%(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/Apps_wrappers/xine.app/FileIcon_GenericVideo.tiffCreated with The GIMPHHgworkspace-1.1.0/Apps_wrappers/xine.app/Resources/0000755000175000001440000000000013214346535021447 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xine.app/Resources/Info-gnustep.plist0000644000175000001440000000110313214346535025075 0ustar multixusers{ NSExecutable = "xine"; NSIcon = "xine.tiff"; NSRole = "Viewer"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "mpg", "mpeg", "mpv", "m2v" ); NSIcon = "FileIcon_.mpg.tiff"; }, { NSUnixExtensions = ( "mp2", "mp3" ); NSIcon = "FileIcon_.mp3.tiff"; }, { NSUnixExtensions = ( "avi" ); NSIcon = "FileIcon_.avi.tiff"; }, { NSUnixExtensions = ( "mov" ); NSIcon = "FileIcon_.mov.tiff"; }, { NSUnixExtensions = ( "ogg" ); NSIcon = "FileIcon_GenericVideo.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/xine.app/Resources/xine.tiff0000644000175000001440000002243613214346535023273 0ustar multixusersII*$aaaPPP(((iiiPPP000((( @@@aaaHHH(((PPPHHH(((888@@@@@@iiiYYY(((qqqaaaPPP((( yyyyyyiiiYYY000 HHHqqqPPP@@@(((@@@qqqyyyqqqiiiiiiPPY000((( @@@000(((PPPHHH(((@@@HHH@@@YYYiiiqqqYYY888@@@000yqy @@@ qqqYYYHHHPPP@8@(((aaaqqqPPP000Yaaiii 000aaa@@@ aaa@@@@@@aaaaaaaaa@@@PPP((((((HHHiii 000 @@@(((000PPPPPP((((((aaa (((@@@PPPiii ((((((PPPPPP HHHPPPqqq000 888PPP@@@@@@000(((000(((8@@(((PPPPPP888@@@ ((888@@@YYYYYYaaaiiiqqqqqqyqyiiiYaaPPP@@@888@@@000PPPaaa888qqqqqqPPP000000HHHPPPqqqqqqyyy@@@(((@@@PPPiiiPPP000PPPqqqqqq000@@@PPPiiiqqqiii888(0( HHH@@@@@@ @@@ yyyPPPaaa qqqPPP @@@qqq000000@@@ 000@@@aaa@@@@@@yyy PPP@@@@@@88800000( (((888iii(((PPPPPPHHHPPPHHHHHHHHHHHH@@@PPPHHH(((((( 000YYY@@@888PPPHHHYaaYYYYYYHHHaaaHHHHHHyyyaaa@@@@@@@@@@@@888000000((((((  @@@aaa PPPaaa@@@@@@HHHHHHYYYPPPaaaqqqPPP@H@yyyHHH@@@@@@PPP@@@@@@@@@@@@@@@@@@@@@888000000(((((( 000 qqqPPPyyyHHHHHHHHHHHHHHHPPPaaaHHHHHHYYYiii@H@@@@YYYqqqYYY@@@HHH@@@@@@888HHH888888888888888000000000((((((((( @@@HHHqqq(((HHHHHHyyyyyyqqqaaaPPYHH@@@@iiiYaa@@@@@@iiiPPPPPPiiiqiqHHHYYYiiiHHHYYY888888888888888000000000000000000000PPHiiiHHHHHHHHHHHHYYYiiiqqqiiiYYYPPP@@@@@@@@@@@@@@@HHHHHH888888@@@yyyHHHaaaqqqaaa000000000000000000000 ( 000YYY HHHHHHHHHHHHHH@@@@@@@@@@@@@PPPaaaiqqyyyiiiYYYPPP888888888888888888888HHH000000000000000000000000HHH888@@@000HHHHHHHHHPPPPPPPPP@@@@@@@@@HH@@@@@@@@@@@@@@@@PPPaaaiiiyyyyyyyyyaaaPPPHHH880000000000000000000iiiPPP888888HHHHHHHHHYYYaaaaaa@@@HHH@@@@@@@@@@@@888888888888888888888888HHPaaaiiiyyyPPP@@@00000000000(PPPHHH(((HHHHHHHHHHHHaaaaaaPPP@@@Yaaiii@@@@@@PPPPPP@@@YYYiii888888888888888000000000YYYiiiyyyPPP00((((@@@aaa(((HH@@@@@@@@@@@@@@@@@@@@@@@@@iiiYYY@@@HHHqqqqqqyyaaaaaaPPP@@@00000000000000000000000000000000000(((( (((000YYY ((@@@@@@iiiqqqiiiYYYPPPyyyPPP@88888888888888@@@YYY@88YYYqqqyyy888yqy8880000000000000000000((((((((PPP00(PPP(((@@@@@@@@@@@@@@@HHHPPPaaaiqqYYYyyyiiiYYYPPP888888888888888888888888HHHaaaaaaHHH00000000000000((((((((((qqq000@@@000@@@@@@@@@@@@@@@@@@@@@@@@@@@qqq@@@@@@PPPaaaaaayyyyyyyyyaaaYYYHHH888000000000@@@888000000000000000000((((((000000000@@@@@@@@@PPPHHH@@@@@@@@@888iii@@@888888888888888888000HHHYYYaaaqqqyyyyyyiiiYYYHHH00000(((((((((((((((( ( aaa000 @@@@@@@@@@@@aaaPPH888PPPYYY888888888888888888000000000000000000000000@@@HHPaaaqqqyyyyyyiiiaaa000(((000qqq@@@@@@@@@@@@@@@HHHPPP888888aaa@@@88888888888888800000000000000000000000000000000(((((((((((((888@@@000(((PPP@@@@@@@@@@@@@@@888888888888HHH88888888888800000000000000000000000000000000000(((((((((((((((((((((( (( (@@@(((0((888@888888888888888888888888888880000000000000000000000000000000000((((((((((((((((((((((( ( ( PPP000(((((((((88888800000000000000000000000000000000((((((((((((((((((((((((( ( PPPPPP(((((( (((00000000000(((((((((((((((((((((( (( ( @@@PPPPPP(((  (((((( (( ( aaaqqqPPPHHH(((  iiiPPP@@@(((00$  $$@$%%(Rxine.tiffCreated with The GIMPHHgworkspace-1.1.0/Apps_wrappers/xine.app/xine0000755000175000001440000000023013214346535020361 0ustar multixusers#!/bin/sh if [ "$1" = "-GSFilePath" ] || [ "$1" = "-GSTempPath" ]; then file="$2" else file="$1" fi # echo $file # logger $file xine "$file" & gworkspace-1.1.0/Apps_wrappers/xmms.app/0000755000175000001440000000000013214346535017516 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xmms.app/Documentation/0000755000175000001440000000000013214346535022327 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xmms.app/Documentation/Readme.txt0000644000175000001440000000166613214346535024276 0ustar multixusersXMMS App Wrapper for GWorkspace =============================== How to set the action for xmms? ------------------------------- Normally, the sript will start xmms just with the filename as parameter so xmms will replace the currently active playlist with that file. If you want to change that behavior, change the value of FileOpenAction in the XMMS domain of your user default by "Enqueue" or "EnqueueAndPlay": defaults write XMMS FileOpenAction \'Enqueue\' defaults write XMMS FileOpenAction \'EnqueueAndPlay\' To use the EnqueueAndPlay options the xmms-add-play tool must be installed (included with the xmms-ctrl pakage, see www.xmms.org for more information). Also EnqueueAndPlay does not work for playlists and if xmms is currently paused. To restore the default behavior, just the set another value, or erase the key: defaults delete XMMS FileOpenAction Credits ------- The Icons were created by Marco gworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.aiff.tiff0000644000175000001440000002245513214346535023133 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??*J* @ *J*???? @ *J*???? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8X8*j*8x8 @ %e%??8x8 @ %e%??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ *j*??*j*.N.'G'??5U5.N.'G'??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *J*??*j*.N.'G'??5U5.N&'G'??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *J*??*j* @ %e%?? @ @ %e%?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N& @ .N.?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N&*j*??1q1*J*'G'?? @ *J*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o//O/7w7/O'7w7/G*/G.'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O/7w77w77w77w7/G*=u",l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7/W%/g)7w77W;/{:=u",l,7g+7g='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O//g1/{:.v*;{;/G*=u<,L,7G%7{:%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O//O'/W%7g=7w7/g17{*4d03c%/G*=U",l,7G%7[*<\8'G''G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O//w3/G*=M&%e%/g!/{:4d0+s1/G*=u<,L,7G%/G*:j$-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w77g+/G*1A46V&/G*/G*4d0+s1/G*3]"<|,7G./G*:J8%y!7{>;[;;{;+k+;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//w;/w=7w7/W-/G*1A46V&/G*/G*4d0+s1/G*/G**r4/{:/G:*J$5E>/G*1a"+K#;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//o/7g=/G*%E>/g!/G*1A46V&/G*/G*4d0'k./{:/G*,L(7[:/G*:J8%E>/G*>N4>^>+k++k++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/G&/G*6F$'k./G*1A4)Q:/G*7{*4d07{*#m2/G*,L(7[:/{:&z$#]6/G*>N4&f&7{>7[>3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O//g!/W-/O//G./G*&z$3C&/G*+C25e:/G*/G*.v4/{:1A,/G*,L(7[:/G*#]"+C2/G*9q,.N&7{&'K**J"+K#+K-+K#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//W=7{*;S*%E>/G:/G*%Y<7[*/{:/G*)a<;s2=u<9q,7k*1A,/G*,L(7[:/G*3]"=u"/{:7[*&F*/G*/G*4t8;K!/{:#]>=}=3s33S33S3#c#3S3#c##c##C# @ @ ?_?/o/?_?/O//o/7w7/g)/G*7{*1a"/G*#m"/G*/G*)q,/G*-U<;S*-U"5y"'k*1A,/G*>N4/{:/G*#m"=u"/G*7k*$d0/G*/G*2b87{*/{:3]"9i63S3#c#3S3#c##c##C##c#=}= @ @ /o//o//O//G*/G*/G*/G*#]*/{:#M"/G*!^4/G*/G*!^4/G*/G*5y"=U"/{:/G*!^4/G*#M"/G*!^43]"=u"/G*7[*$d0/G*7[*1~4/G*-e<;S27[*/G*/G*/{:/G*/G*#C##C##C# @ @ /o//o//o//W=*r8*r8*r80P #m"/G*#m">v4/G*/G*!^4/G*/{::J8#]2/G*7[*0P +c:/G*/G*!^47k*;s2/G*7k*!n4/G*/G*3}"/{::J8,l,*r8*r8*r8*r8*r8*r8 @ =}==}= @ @ /O//o//O/7w79y99Y99Y99Y97G9/{:9q,.v/G*/G*!^4/G*/G*1~47[*/G*;S2>v4/G*'K2(H !A!#c#1q1!A!>~>>~>>~>>~>#C#=}= @ @ /O//O//O//O//O/7w77w77W77W;#m&*J$*J"/G*#M"*r8/G*/G*:j$;S*/G*7[* @ 7{>/G*/G*4d0/G*/G*$d07k*/G*=U"&z$/G*;s20p0-m-3S3#c##c##C##C##C##C#=}==}= @ @ /O/7w77w77w77w77w77W77W7'g'+k+:z*1q1/G*=u<2R,7[*'K2 @ +c&/G*7[* ` 7{>/G*/G*(H /{:/G*4d07[*/G*=U<2r,7[*+C2(H(#c##c##c##C##C##C#=}==}==}==]= @ @ 7w7/O//O/7w77w77W77W77W7'g'7W7'g''G'/G*5y<,L,7[&'K20p07{>/G*5y< ` 7[>/G*'s2(h /G*/G*4d07{:/G*-U<,L,'K6&z$(h03S3#c##C##C##C#=}=#C#=}==}==]= @ @ 7w77w77w77w77W77W7'g''g'7W7'G''G''G''G=(H "B"7{&'K20p0'[-/G*!n4<|,7{>/G*1~48x8/G*/G*$d0+S./{:6F$4t83S3,L,>^>#c##C##C#=}=#C#=}==}==]==]==]= @ @ 7w7/O/7w77W77W77W77W7'g''g''g''G''G''G'%E%3S37{&#M"(H(;[-/G*!n4&f&'[>/{:1A4&F*/G*=U< @ 3c!/G*2b8.N.#c##c##c##C##C##C##C#=}==}==}==]==]=-m- @ @ 7w77W77W77W7'g''g''g'7W7'G''G''G';{;;{;;{;;{;'{9*r4,L,;[-/G*>N4&f&'[9/G*1A4:z*7[&5E<,L,+s%7[*2B8!A!#c##c##C##c#=}==}==}=#C#=]==]==]=-m-=]= @ @ 7w77w77w7'g'7W77W7'g''g''G''g';{;'G';{;;{;;[;;[;>^>%E%;[-/G*"\(&f&;k-/G*1~4*j*'k>=U<<\<3S3)i) ` 1Q1#c##C##c#=}=#C##C#=}==}==]==]=-m-=]=-m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;[;;{;;[;+k++k+;[-/G*(H 9Y9+K-/G*1A4:Z:+K-.V2,l,3S3#c#3S3#c##C##c##C#=}=#C#=}==]==]==]=-m-=]=-m--m- @ @ 7w7'g'7W7'g'7W7'g''G''G';{;'G';{;;{;;{;;[;;[;;[;+k+;[;+K#5U1 @ =}=;k-/{:,L(*j*3S39y99Y93S3#c##c##C##C##C##C#=}==}==}==]==}=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+3S3%e%3s3+K-/G*8X09y93S33S3#c##c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M- @ @ 7W7'g'7W7'g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3s3+K+3s3+K#9y9 @ -M-3S3#c#3S3#c##C##c#=}=#C#=}=#C#=}==}==]==]=-m-=]=-m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33S33S33S3#c#3S3#c##c##C##c##C##C#=}==}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++K++K++K++K+3s33s33s33S33s3#c#3S3#c##c##c##C##C##C#=}=#C#=}==]==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;{;;[;;[;;[;+k++k++k++K++k++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-m--m--M--M-5u55u5-M- @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.aiff.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.au.tiff0000644000175000001440000002245313214346535022631 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ ,l,5U5,l, @ ,l,%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *j*??*j* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*J* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *j*??*j* @ *J*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N. @ .N.?? @ *j*??6V6 @ .N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.*j*??1q1*J*'G'?? @ *j*??3S3*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ @ 3S3??;{;5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W71J/)f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W71J/:L),l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7%I-)n='G''g')J?:t),l,3S3-U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/)^=1r/2R2+k+)J?:t),l,%I-1j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;9Q--u=7w7)^=1J/ @ 9I51J/:L),L,9I51r7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/#C#)J?&R!%E%)N=1r/ @ !n9)J/:t),l,9I5)J?8p4-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//o//O/7w7#}#)J/,X*:z:1r/)J? @ !n91J/&\54T41f#)J/(P8.N>1f=+K+;[;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+5E=/O/5y-1J/,X*:Z:)J?1r/ @ !n9)J?)J?$D41j;1J/8p4.V.1J/^!)N=)J?,X*:Z:)J/1r/ @0!F51r/)J/ @0!J+)J/(P$6V6)J/4h">^>+K++K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7)F3)J/8p4!F51J/,X**R:1J/1r/ @01J'&|9)J? @01r;1J/8p46j!)J?$H<&f&1V-1f=3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O/)n=5E=7w7)F31J/8p4.r9)J?6\-:b.)J?)J/$H<1j',x")J? @ !J+)J?&l%.R51J/R#"B"=m=%E5#C#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/-u=)J/>b=>^!)J/1J/"d.!r;1J/)J?R#:t)b=*L12L6!R;B31J/1R'4X"1r/)J?&\5)J/(P$,l,8h$(P8(P8(P8(P80`8 @ #C#=}= @ @ /O//o//O/7w79y99y99Y99Y99Q51r/b+$H<)J?1J/8p4.r%)J/!R7 ` 1f=)J/1J/,X21r/)J?,D*1R'1J/>b=$H<1r/>b+ @ !A!#c#1q1!A!>~>!A!>~>>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+&R!8p4*J*)J?:L98H$1r/)J?(P$.r%1J/1r7 ` 1V-)J?1r/ @0)J?1J/ @0!r;)J?*t14D,1J/>B30p0-m-3S3#c##c##C##C##C##C##}#=}= @ @ /O/7w7/O/7w77w77W77W77W77W7+k+:z:1Q11J/:t)4T41J'>b+ @ .r%)J?!R7 ` 1v-)J?1J/ @ 1r/)J? @ 1J'1J/:t)4T41r'.|=(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O/7w7/O/7w77w77W77w7'g'7W7'g''g''G')J?2T>,t ` 1V-1J/>B3 @ )J?1J/ @ 1J')J?*t1,t<>Z-8H4(h(3S3#C3#c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77w77W77W7'g'7W7'g''g''G''G'5U- @ "B"1Z+!b+0p05e-)J?4h""|"1V-)J?,X*0p01r/)J? @ >F91J/8p4,L,#c#,l,>^>#C##c##C##C#=}==}==}==]==]==]= @ @ 7w7/O/7w77w77W77W7'g'7W7'g''G''g''G';{;%E%#c#1Z+:l)0p05E=1J/4h"&f&1V-1J/,X**J*)J?*t1 @ >V))J?0`(.N.#c#3S3#c##c##C#=}=#C#=}=#}#=]==}==]=-m- @ @ 7w77W77W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;9Q5$X$,l,5e51J/4h"&f&)A%)J?,X2*J*!Z32d>,t<9i%!r;0`81Q1#C##c##C##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77w7'g'7W7'g''g''g''G''G''G';{;'G';{;;{;+k+>^>%E%%E5)J?0`(&F&5e-1J/,X**j*!F5:l1,l,3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g'7W7'g''g''G''G';{;;{;;{;;{;;[;;[;;{;+k++k+5E=1J/ @ 9Y95e51J/,X*:Z:5U5"|",l,3S33S3#C##c##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g''g''g''G''G';{;'G''G';{;;{;;[;;[;;[;;[;+k+3S3!~! @ =}=5e5)J? @0*j*3S3%E%9y93S3#c##c##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+#c#%e%3S3%e%)J? @ 9y93S3#c#3S3#c##C##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s39y9 @ 5u53S33S3#c##c##c##c##C##C#=}==}==}==}==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;;{;'G';[;;[;;[;+k++k++k++k++K++K++K+3s3+K+3S33s33S33S33S3#c##c##c##C##C##C#=}==}=#}#=}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''g';{;'G''G';{;;[;;{;+k+;[;+k+;[;+k++k++K++K++K+3s33s33s33S33S33S3#c#3S3#c##c##C##C##C##C#=}==}==]==}=-m-=]=-m--m--M--M--M--M-5u5 @ @ 'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++K++K++K+3s33s33s33s33S33S3#c##c#3S3#c##C##C##C#=}==}==}==}==}==]==]=-m-=]=-m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.au.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.avi.tiff0000644000175000001440000002245513214346535023005 0ustar multixusersMM*$888888UUUUUUUUUUUUUUUGGGUUUGGGccccccGGGGGGcccUUU888888GGGcccUUUUUUUUUUUUUUUGGGGGGUUU888GGGGGGUUU888ccc888???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo///wwwWWW'''GGG{{{;;;[[[kkk+++KKK???___ooo///wwwWWW'''GGG{{{;;;[[[kkk+++KKK ______---ffffff&&&&&&FFFFFFzzzzzzzzz:::!!!kkk sssJJJvvvNNNZZZ:::,HHH jjjEEE333zzzIIIfffIIG''''''IIAA rrrr AAII''''''' 222JJJvvvIIG'''''c<< k]'5||c'''''' ```vvv,,,>>>SSS???___hhhDDDttt'G'''IIAISSS[?JJAII'''' <<<~~~MMM???___|||IIG''II^uS[??##^II''' DDD>>>ccc???___www:::漼IIG''-yS[?OEECC-''' VVVccc???222IIG'qqO bll?]?bbqq'' lllppp ###ooo777((('G'SSSxx 00-==['' HHH\\\uuuCCC###oooWWW|||<<<IIG'==%%DDj]".._^'' DDDRRRooo///ZZZ漼GG'FFO'' 000nnnCCCooo///OOOFFF~~~IIG'LLBBBBBBBBBBBBBBpp:BBBBBBBBBBLL'' pppooo///OOOIIG'bb???\\""''  UUU}}}///ggg|||JJJ<<<IIG'RR_44AAnRR'' DDDlllnnn}}}///NNNJJJ漼GG'c_00hh`JJc'' 000===www'''ZZZIIG'IIV?UUJ }}<>>AAA))) eee999ggg'''GGGkkkkkk[[[333ccc###CCC}}}]]]]]]mmm---MMM uuuuuummmuuuuuu '''{{{;;;[[[kkk+++KKKsss333ccc###CCC}}}===]]]mmmMMM 00$  $$*$1?$RFileIcon_.avi.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.mov.tiff0000644000175000001440000002245513214346535023027 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUUUUGGGGGGUUUGGG888888cccGGG888cccUUUccc888cccUUU888UUUUUUUUUUUUUUUUUUUUUUUUUUUGGGUUUUUUUUUUUUUUU888GGGcccGGG888UUUUUUUUUUUUcccccc???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo///wwwWWW'''GGG{{{;;;[[[kkk+++KKK???___ooo///wwwWWW'''GGG{{{;;;[[[kkk+++KKK ______---ffffff&&&&&&FFFFFFzzzzzzzzz:::!!!kkk sssJJJvvvNNNZZZ:::RQQQQQQQQQQQQQQQQQQQQQQQpHHH jjjEEE333zzzIIIfffADssessssssss# yy #ssssssssse222JJJvvvADssesssss-^A%IuM u A$-^sssssse```vvv,,,>>>SSS???___hhhDDDtttADsesssssEkwwww!##o5sssssse<<<~~~MMM???___|||ADssessssI u*wwwwwwww!##?K{{i,I ssssseDDD>>>ccc???___www:::ADsess bwwwwwwwwww!##w# ssse VVVccc???222ADsses3aWWwwwwww#e"p^+wMg__q3sselllppp ###ooo777(((ADses &!wwwwwwkr`d '## &sseHHH\\\uuuCCC###oooWWW|||<<wwwwwwwwww1єsse UUU}}}///ggg|||JJJ<<>>AAA))) eee999ggg'''GGGkkkkkk[[[333ccc###CCC}}}]]]]]]mmm---MMM uuuuuummmuuuuuu '''{{{;;;[[[kkk+++KKKsss333ccc###CCC}}}===]]]mmmMMM 00$  $$*$1?$RFileIcon_.mov.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.mp3.tiff0000644000175000001440000002245513214346535022725 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 81Q5U5<\ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ###??5U5###??8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.<\5U5 @ @ 5U5.N. @ @ @ 5U5.N.<\<\ @ @ ??* @ 8??* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??'''????;;;??????.N. @ @ ??;;;????'''8 @ *8 @ *??<\ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??;;;8.N.??.N. @ ###5U5 @ @ ????88??### @ @ @ 5U5??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ *?? @ @ 5U55U5 @ @ ??5U5 @ @ 5U5?? @ @ @ @ *??1Q @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ *?? @ @ 5U55U5 @ @ ??''' @ @ '''?? @ ??* @ 8??5U5 @ @ @ @ @ @ @ @ @ @ @ <\.N. @ ??5U5 @ *?? @ @ 5U55U5 @ @ ????.N..N.??1Q @ ;;;###*1Q??.N. @ @ @ @ @ @ @ @ @ @ @ *??5U5 @ ??5U5 @ *?? @ @ 5U55U5 @ @ ??######??5U5 @ @ *'''????1Q @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??????????????????????????????//////////777//777777777777'''777''''''''''''''';;;''';;;;;;;;;;;;+++;;;+++++++++++++++ @ @ ??????????????????????????//??//??////////777//777777777777777'''777'''''''''''';;;''';;;;;;;;;;;;;;;+++;;;+++++++++ @ @ ????????????p,Hd,Hd8$$d08Hp8pp88p0p08p0p00p00p0 @ 0p00p088d0$lp$$++++++++++++333 @ @ ????????????԰4'''B7;-Z5%n*'m*3e "A*B\"b9R9-D-h,H22p0p00p00p00p04x8 6p 6p'U0?0?p?0?09Q+++++++++++++++ @ @ ????????????԰4'B73R3!Z&3e %n*r:1R!#S +F++F+;'z7L7;x;h԰40p00p00p00p0$Hz07]0O0?0?0?0?0?09Q+++++++++333333 @ @ ????????????԰4'')L)&B"r:9R9S #=F5#V9N133N1=j%3t#;x;hp((d1F020?0?0?0O0?0?0?09Q++++++333+++333 @ @ ????????????԰4-D-&d&bS S =F13^>šO5O5O5šy3N>-D-h"&9===###)1V 6pO0?;8?'?;8?'?"?"?"9Q+++333+++333333 @ @ ????????????԰4 8 hd7R7#=n&Oy~O5ͱͱͱͱͱͱͱͱF"\ 5U5/w?O/;;;===###%I&+],?/?/???m?m?m333+++333333333 @ @ ????????????8`8)X)h#l=3ͱͱͱͱO5š???Oy~ Qi%-V.^"-Y!#E91Q333//???;//?;?;+++333333333333 @ @ ????????????8`82h 8 5R!O5ͱͱš+I>+I>+I>7I.š?%!šš^ .N.%~!']rj-i1#q)!Z&j*-m-//????//?;333333333333333 @ @ ????????????Hr&"\%F:O5?O5šyš?%!š=']#I! r&~ 5u;%e;~ 5u;+s7<\44t333???;?;?m333333333333### @ @ ????????////d$4+++###9=>^??Oy~?%!?ͱO5']////+++q>҂rj| 5KSSS1q3<\;;;?;?;??/333333333###333 @ @ ?????????O/??44t7;M=MV;6=n&&B"L>j#A&ͱš/w?????O/;;;j*&B""|66V5:Z55*j"#c9?m??g:??9Q333333###333### @ @ ????////??//d+j6N1!^91z j"d.n>'''//+.;u9//??//7g'/w2t"&<\>:Z 55&'s*?O0O0O0O0)333###333###### @ @ ?O/??//??////d$4?O/#S'S>j$///w/w??#I!#E9??/w99=y12tr&<\> 5:Z||1V7]0O0O0+E0z0>j01Q###333######### @ @ ??//////////d$4#C?/:Z5r&d&735357g' Q/w5K:z3*j*R>#a8O0;Y05~00 6plp>A333############ @ @ ??//??//////8?>>*j&J>4x8<\i%9j>>t*;M=q+.3͍J.A9J4L"r:1z<\>KS 544*:B 6pv0:B2:Blp>A############=== @ @ ////////////89?/:z3684 D Dr&#n:O5=a>&,B&$L2l;6 2b.|*j"4x80p00p0H$4x8p0p0H.A9############### @ @ //////////777d$4??K6)Jb\$82t$-n/C%/C%K!A*B*4x8l;6ͱMV"|6(8H0p00p00p00p00p00p00p00p00p0>~>#########====== @ @ //////777//77789??K:Zr&#n:+~&^K!K!MVb\5:Oy~ͱͱO5)f*80p00p00p00p00p00p00p00p00p00p00p00p0>A######===###=== @ @ //////777//77789?9?>>*j6Z)#n:^Oy~#n:)J.r< j"&Oy~?ͱͱͱLp0p0 @ 0p00p00p00p00p00p00p00p00p00p0>A###===###====== @ @ //777//77777777789?9?/*j:Z55:?%!??%!&+~&7I.?%!??O5ͱ+.b\d00p00p00p00p00p00p00p00p00p00p00p00p0.n>######========= @ @ ////777//777777(:Z16V5:Z544*44*F#A&š??%!^^?%!?ͱͱͱͱ+~&A*Bd0p00p00p00p00p0 @ 8`80p0 @ 0p00p00p0.A9###============ @ @ 7777777777777777770p0(((0p00p0H$)JO5ͱ??O5^;6K!7I.K!1zHp0p00p08`80p00p00p00p00p08`80p00p0>~>=============== @ @ //777777777777777 @ 0p00p00p00p00p00p02t$ j"%V:O5O5%n*333+++!V&K!>҂0p00p00p0 @ 0p00p00p00p00p00p00p00p00p0>A============-m- @ @ 777777777777'''7770p00p00p00p00p00p00p04x8%V:-n -n;;;333-m-) .r<l0p00p00p00p00p00p08`80p00p00p0 @ 0p00p0>~!=========-m-=== @ @ 7777777777777g''''0p00p00p00p00p0p0p00p02t$+.=>)&&44t0p00p00p0H2t$d0p00p00p00p00p00p00p00p08`80p00p00p00p0.A9=========-m--m- @ @ 777777777'''''''''0p00p00p00p00p00p00p00p0Hb\=><\H0p00p00p00p08FL0p0 @ p0p08`80p00p0 @ 0p00p00p00p00p00p0>~!-m--m-===-M- @ @ 777'''777'''777''' @ 0p08`80p00p0p0p00p00p0HLb\A-m-===-m--m--M- @ @ 777'''777'''''''''<\2.A9>~!.n>.A9>~!.n>>A>~!>A>A!a1!a1>A>A>A1Q)1Q>~!>~!>~!.A9.n>.A9.n>.A9>~!>~!.A9>~!>~!.A9.n>-M--m-===-m--M--M- @ @ 777'''''''''''''''''';;;''';;;;;;;;;;;;+++;;;+++++++++++++++333+++333333333333###333###############===###===============-m--m--m--M--M- @ @ ''''''''''''''';;;''';;;;;;;;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--M--M--M--M- @ @ 777''''''''''''''';;;;;;;;;;;;;;;+++;;;++++++++++++++++++333+++333333333333###333############===###============-m-===-m--m--M--m--M--M-5U5 @ @ ''''''''';;;;;;;;;''';;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--m--M--M--M--M-5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.mp3.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.mpg.tiff0000644000175000001440000002245513214346535023011 0ustar multixusersMM*$UUUUUUUUUUUUUUUUUUGGGGGGGGGGGG888GGGUUUGGG888cccUUU888888cccGGG888888UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUGGGGGGcccGGGUUUUUUUUUUUUUUUcccUUUUUUUUUUUUUUUccccccUUU888GGGGGGcccUUUUUUUUUUUUGGGUUUUUUGGGGGG???___ooo///OOOwww777WWWggg'''{{{[[[+++???___ooo///OOOwww777WWWggg'''GGG{{{[[[+++???___ooo///www777WWWggg'''GGG{{{;;;[[[+++KKK???___ooo///wwwWWW'''GGG{{{;;;[[[kkk+++KKK???___ooo///wwwWWW'''GGG{{{;;;[[[kkk+++KKK ______---ffffff&&&&&&FFFFFFzzzzzzzzz:::!!!kkk sssJJJvvvNNNZZZ:::,HHH jjjEEE333zzzIIIfffIIG''''''IIAA rrrr AAII''''''' 222JJJvvvIIG'''''c<< k]'5||c'''''' ```vvv,,,>>>SSS???___hhhDDDttt'G'''IIAISSS[?JJAII'''' <<<~~~MMM???___|||IIG''II^uS[??##^II''' DDD>>>ccc???___www:::IIG''-yS[?OEECC-''' VVVccc???222IIG'qqO bll?]?bbqq'' lllppp ###ooo777((('G'SSSxx 00-==['' HHH\\\uuuCCC###oooWWW|||<<<IIG'==%%DDj]".._^'' DDDRRRooo///ZZZGG'FFO'' 000nnnCCCooo///OOOFFF~~~IIG'LLBBBBBBBBBBBBBBpp:BBBBBBBBBBLL'' pppooo///OOOIIG'bb???\\""''  UUU}}}///ggg|||JJJ<<<IIG'RR_44AAnRR'' DDDlllnnn}}}///NNNJJJGG'c_00hh`JJc'' 000===www'''ZZZIIG'IIV?UUJ }}<>>AAA))) eee999ggg'''GGGkkkkkk[[[333ccc###CCC}}}]]]]]]mmm---MMM uuuuuummmuuuuuu '''{{{;;;[[[kkk+++KKKsss333ccc###CCC}}}===]]]mmmMMM 00$  $$*$1?$RFileIcon_.mpg.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.ogg.tiff0000644000175000001440000002245513214346535023002 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ccccccGGGUUUGGGUUU @ @ @ @ @ @ @ @ @@cccUUUUUU888888GGGUUU888888GGGUUU @ @ @ @ @ @ @ @ UUUUUUUUUUUU @ @ @ @ @ @ @ @ UUUUUUUUUUUU @ @ @ @ @ @ @ @ UUUUUUGGGGGGUUUUUU @ @ @ @ @ @ @ @ UUUUUU888UUUUUUcccUUU888UUUUUUcccUUU @ @ @ @ @ @ @ @ @@GGGGGG @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@@@ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ??????????????????????????????//////////777//777777777777'''777''''''''''''''';;;''';;;;;;;;;;;;+++;;;+++++++++++++++ @ @ ??????????????????????????//??//??////////777//777777777777777'''777'''''''''''';;;''';;;;;;;;;;;;;;;+++;;;+++++++++ @ @ ????????????p,Hd,Hd8$$d08Hp8pp88p0p08p0p00p00p0 @ 0p00p088d0$lp$$++++++++++++333 @ @ ????????????԰4'''B7;-Z5%n*'m*3e "A*B\"b9R9-D-h,H22p0p00p00p00p04x8 6p 6p'U0?0?p?0?09Q+++++++++++++++ @ @ ????????????԰4'B73R3!Z&3e %n*r:1R!#S +F++F+;'z7L7;x;h԰40p00p00p00p0$Hz07]0O0?0?0?0?0?09Q+++++++++333333 @ @ ????????????԰4'')L)&B"r:9R9S #=F5#V9N133N1=j%3t#;x;hp((d1F020?0?0?0O0?0?0?09Q++++++333+++333 @ @ ????????????԰4-D-&d&bS S =F13^>šO5O5O5šy3N>-D-h"&9===###)1V 6pO0?;8?'?;8?'?"?"?"9Q+++333+++333333 @ @ ????????????԰4 8 hd7R7#=n&Oy~O5ͱͱͱͱͱͱͱͱF"\ 5U5/w?O/;;;===###%I&+],?/?/???m?m?m333+++333333333 @ @ ????????????8`8)X)h#l=3ͱͱͱͱO5š???Oy~ Qi%-V.^"-Y!#E91Q333//???;//?;?;+++333333333333 @ @ ????????????8`82h 8 5R!O5ͱͱš+I>+I>+I>7I.š?%!šš^ .N.%~!']rj-i1#q)!Z&j*-m-//????//?;333333333333333 @ @ ????????????Hr&"\%F:O5?O5šyš?%!š=']#I! r&~ 5u;%e;~ 5u;+s7<\44t333???;?;?m333333333333### @ @ ????????////d$4+++###9=>^??Oy~?%!?ͱO5']////+++q>҂rj| 5KSSS1q3<\;;;?;?;??/333333333###333 @ @ ?????????O/??44t7;M=MV;6=n&&B"L>j#A&ͱš/w?????O/;;;j*&B""|66V5:Z55*j"#c9?m??g:??9Q333333###333### @ @ ????////??//d+j6N1!^91z j"d.n>'''//+.;u9//??//7g'/w2t"&<\>:Z 55&'s*?O0O0O0O0)333###333###### @ @ ?O/??//??////d$4?O/#S'S>j$///w/w??#I!#E9??/w99=y12tr&<\> 5:Z||1V7]0O0O0+E0z0>j01Q###333######### @ @ ??//////////d$4#C?/:Z5r&d&735357g' Q/w5K:z3*j*R>#a8O0;Y05~00 6plp>A333############ @ @ ??//??//////8?>>*j&J>4x8<\i%9j>>t*;M=q+.3͍J.A9J4L"r:1z<\>KS 544*:B 6pv0:B2:Blp>A############=== @ @ ////////////89?/:z3684 D Dr&#n:O5=a>&,B&$L2l;6 2b.|*j"4x80p00p0H$4x8p0p0H.A9############### @ @ //////////777d$4??K6)Jb\$82t$-n/C%/C%K!A*B*4x8l;6ͱMV"|6(8H0p00p00p00p00p00p00p00p00p0>~>#########====== @ @ //////777//77789??K:Zr&#n:+~&^K!K!MVb\5:Oy~ͱͱO5)f*80p00p00p00p00p00p00p00p00p00p00p00p0>A######===###=== @ @ //////777//77789?9?>>*j6Z)#n:^Oy~#n:)J.r< j"&Oy~?ͱͱͱLp0p0 @ 0p00p00p00p00p00p00p00p00p00p0>A###===###====== @ @ //777//77777777789?9?/*j:Z55:?%!??%!&+~&7I.?%!??O5ͱ+.b\d00p00p00p00p00p00p00p00p00p00p00p00p0.n>######========= @ @ ////777//777777(:Z16V5:Z544*44*F#A&š??%!^^?%!?ͱͱͱͱ+~&A*Bd0p00p00p00p00p0 @ 8`80p0 @ 0p00p00p0.A9###============ @ @ 7777777777777777770p0(((0p00p0H$)JO5ͱ??O5^;6K!7I.K!1zHp0p00p08`80p00p00p00p00p08`80p00p0>~>=============== @ @ //777777777777777 @ 0p00p00p00p00p00p02t$ j"%V:O5O5%n*333+++!V&K!>҂0p00p00p0 @ 0p00p00p00p00p00p00p00p00p0>A============-m- @ @ 777777777777'''7770p00p00p00p00p00p00p04x8%V:-n -n;;;333-m-) .r<l0p00p00p00p00p00p08`80p00p00p0 @ 0p00p0>~!=========-m-=== @ @ 7777777777777g''''0p00p00p00p00p0p0p00p02t$+.=>)&&44t0p00p00p0H2t$d0p00p00p00p00p00p00p00p08`80p00p00p00p0.A9=========-m--m- @ @ 777777777'''''''''0p00p00p00p00p00p00p00p0Hb\=><\H0p00p00p00p08FL0p0 @ p0p08`80p00p0 @ 0p00p00p00p00p00p0>~!-m--m-===-M- @ @ 777'''777'''777''' @ 0p08`80p00p0p0p00p00p0HLb\A-m-===-m--m--M- @ @ 777'''777'''''''''<\2.A9>~!.n>.A9>~!.n>>A>~!>A>A!a1!a1>A>A>A1Q)1Q>~!>~!>~!.A9.n>.A9.n>.A9>~!>~!.A9>~!>~!.A9.n>-M--m-===-m--M--M- @ @ 777'''''''''''''''''';;;''';;;;;;;;;;;;+++;;;+++++++++++++++333+++333333333333###333###############===###===============-m--m--m--M--M- @ @ ''''''''''''''';;;''';;;;;;;;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--M--M--M--M- @ @ 777''''''''''''''';;;;;;;;;;;;;;;+++;;;++++++++++++++++++333+++333333333333###333############===###============-m-===-m--m--M--m--M--M-5U5 @ @ ''''''''';;;;;;;;;''';;;;;;;;;+++;;;+++++++++++++++333333333333333333###333###############===###============-m-===-m--m--m--M--M--M--M-5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.ogg.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_.wav.tiff0000644000175000001440000002245513214346535023023 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.%e% @ @ 5U56V6 @ ,l,5U5,l, @ .N.%e%5U5,l, @ .N.%e% @ @ ,l,5U5,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.??,l, @ ??5u5 @ .N.??8x81Q1??#c##c#??8x8.N.??.N. @ 1q1??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8??5U5*j*???? @ %e%#c# @ 5U55U5 @ :Z:??*J* @ ??#c# @ #c#5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 'G'#c#1q11q1'G',l,#c#1q1 @ *j*;{;??5U5??*j* @ 5U5?? @ ??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??3S3*J*5U5)I9??*j* @ ??#c# @ 8x8??*J* @ *j*??5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56V6 @ .N.????8X8.N.????8X8 @ ??3S3*J*5U5??*j* @ 8X8??'G'#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ 8X8??#c# @ 8x8??#c# @ @ 5U5????1q1??*j* @ @ 1q1??6V6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W7*J/6f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W7*J/,L9,l,7W7'g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7)I->n='G''g':J?,L),L,3S35U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/>^=*J/2R2+k+:J?,t),l,)I5:j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;1Q-5u=7w7>^=*J/ @0)I9*J/,L),L,)I-*J7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/=}=:J?2R!%E%.N=*r7 @0.n9:J?,t),l,)I5*J/0P$-m=;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w7#C3*J/8X*:z::J?*J/ @0>n9*J/<\54t<6f#:J?0P$.N>6V=+K+;{;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+%E=7w7%E=*J/8X*:Z:*J/*J/ @0.n9:J?*J/$D4:j+*J/0P$6V.*J/,L*3s3;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/%E=*J/>^!.N=:J?8X*:Z::J?*J/ @0&F5:J?*J/ @0:j+*J/0P$6V.:J?(h">^>3s3+K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7&F+:J?(H4&F5*J/8X*2R:*J/*J/ @0*J'"|9*J/ `0:J+*J/(H,:j1*J/(h"6V66V-6V-3s3+K++K+3s3+K+3s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//o//O/.N=%E=/O/&F+*J/(p,*J9:J?"|="b.:J?*J/(H<:J+$D*:J? @0:J+*J/^>:j7*J/4d.2R;*J/:J?$d:2R3,t)$D&*r;8x2*J/ `(*r;:J?~=*J/*r7$d:*J/~!!A!>~!>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+*r10P$*J**J/,L9(H$*J/:J?0P$*J%*J/*r7 ` 6V-:J?*J/ @0:J?*J/ @ *R;*J/,t)$D,*J/2B30p0-m-3S3#c##c##c##C##C##C##}#=}= @ @ 7w7/O/7w77w77w77w77W77W7'g'+k+&F&1Q1:J?,L94T4*J'2b; @ *J%*J/*r7 @06v-:J?*J/ @ *J/:J? @0*J':J?,t)4T4*r'"B#(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O//O/7w7/O/7w77W77W77W77W7'g''g''G'*J/4d>,L,:j+2b;0p0.v-:J?4d> ` 6V=*J/2B3 @0*J/*J/ @ :J'*J/,t14t<:Z-(H$8X8#c##C##c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77W77W77W7'g''g''g''g''G''g'5U- @ <|"&Z+2R;0p0%e-*J/8h""B"6V-:J?8X*0p0:J?*J/ @0&F9*J/(p,,L,#c#,l,>^>#c##C##C##C#=}==}==}==]==]==]= @ @ /O/7w77w77w77W77W77W7'g'7W7'G''g';{;'G'9y93S3:Z+^>9y9%E5:J? `(&f&5U-*J/8X2:Z:6V5,L1<\<3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;{;;[;;[;+k++k+%E=*J/ @ 9Y9%e5*J/8X**j*5e5<|"<\<3S3#c#3S3#C##C##C##C##C#=}==}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g''G''g';{;'G';{;;{;;{;;[;;[;+k+;[;+k+3S3>~! @ =}=%e5:J? @0*j*3s3%E%9y9#c##c##c##C##c##C#=}==}=#}#=}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3S3%e%3S3%e5:J? @ 9y93S33S3#c#3S3#C##c##C##C#=}=#C#=}==}==}==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G';{;'G';{;;[;;{;;[;;[;+k++k++k++k++K+3s3+K+3s33s39y9 @ -M-#c#3S3#c##C##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##c##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++k++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##C##c#=}=#C#=}==}==}==}==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;[;;[;;[;;[;+k++k++k++K++K++K+3s3+K+3s33S33s33S33S3#c#3S3#c##C##C##C##C#=}==}==}==]==]==]==]=-m--m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.wav.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xmms.app/FileIcon_GenericSound.tiff0000644000175000001440000000614413214346535024532 0ustar multixusersII*h  $h!B &l"F%j1;,Ә &J/n)R@ҠSg!^ϒ'or%˝h s*Ul2eUT!m5j֪]n7jܤiMw;_|t[7=c?r70#\r98g9xfڟmoZlsWZ]mem66n巍v;򹧋nzx奏~x~anFjq.&84e3̶?| m/r+֊7ܺm{>rp\ppNL}َ ﲨYf^9^u֥y-b:u< 'dhIUDG5s|;;a',rnk~ 21da Cc4cG,\EW pCP!N<d*BED!(@Wq"@9ခF$nA@|@0԰H`B0ю.?yn,H~ZWsHC-dWHC=') T  !q-dP3ED$PrֲN"NyP !1Hf(@DbLh~0' ,T_t9*=(AU'HA =,$ V0!p"Q$AЀx.-Q2T&p`dj ]XV,F *[y 5`k @"H 8< q+[` 5P\Xz}/2A { L/`=" A{fS*GP e{E`Y T 51` CY+1n \dqian%D349 pTxqzCV3臼#w3jԇ )@ >Ab2ޟA (0p '-j> ( @gB g#A)0;aD\; Z\aE# B60!H@AIMfr=l1H  z$`v$ YmjrL*} _3zJrR?7nUƈbP tmAţl(ZchYZ&p<$lt Ei5[]r_+zѳ7[z)>K@B@ x І! qlpp=*c˰5ڔ)bed:DD@7ҕݸ =>7oܭ r<Sm gh/ har3UP24)@{8*b!cgY5}<7u?U*An]BDcB+ lH QR4^0}6lAJP*9> z$8iHT^À+xC:Ku?a~]UhVj`B JkA0E(xCЅ&&A JHCQQq !gw~*={щG0p QLH`U8Dg$(bo"P@r(K^ bH * p :o7ws6wO{q_6#!'r!$&CF#N"d~:3c %W y r> N!FQ9ywo`.[hxFP\ P p)sse^sssss,FssssssW(sssss{ss"Lsss2Z^ssYsss{WssssssssssswFsssssZ\ssIXsssssssssssWwsss?ss!^H^3ssQssssssss((ssAsssssLsssssWsss(ssssswss3sssנZssssssWWW(sssssssssssssss|sssssvssssssssWwϔNS䉙OSw:/VD#GX6~bB_1i1/6d___2#l_Bƍ0lj@\JMz&4n7vN vWvwb ԥ(7̴R ppWޚ ,bwv7{u |R00    1? @ xmms.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orgXXHHdd&&椤괴dd줤FF//섄vv<>bbĎttDD44QQ==VV66ھ>>**NNXXNNjjvv~~rr||~~nnnnhhKK~~^^\\~~NN::ZZNNnn..||22>>::..jjzz~~zzƎFF::zzzzZZnnjjJJbbКoo~~$$FFTT 88 GG00\\))$$dd..@@,, LL44``tt44!!77ddss>>44]]$$TT<<,,<D8^ƒv"7,x.ؠ#ЁMtE7=G? 20#28L2432<%0/-2 3 lBA L\0A,! L3w0 s/sA+,A j vbw9.u3wv?14%JFap%l@/̌t0! ̭|,rRp jl0  H C Jx܈K$` 6)A8G$pa1fءv&`ZX8a :&h p@YI2KDf@xkha@R!"9/ԝح=0 <Њ L.: pR Z(CG$ /蒲_WhJ+_w}vCkcZdBl]vK#m`x5|0AK>{NcnDd4(IFH.Ue׾7 z4C@iLԠJнqm{~BFP!V0~! 0"hA>s (=ZUzd/ .mC֓ہp/P ('4zhҍ X ( !@|G Ptӳ 5B2xI bPBE ^$b^aD G` ): h9 aA2O' 1H䠒bO5 @pdj̠߰a"VC,"1n#?IrSRd$ X@`6 ۨG=Fl4-KI2!@1AAp;}ԠCC,DAPt4 8;T-`] eßVG JQ}/)nIZ#\cnp-`G"ST`!%U4#1(@X:(CҐ! QHHfʀ@tReJgbA #B@5JPs:(w"SdWB؃+\+"EF j*]*UlEk@D q`'XnS@!T5Ѕ-5- n4!!'MIzsf5{ps"v#@iyZVU $ !HAplЊ: !*dC2t񁔿|ףpA>STu  ֱo]DTUB#P%=p/{=8±bŰMC]hd&݊I -@eBP`P i0*ꀏDAD<'[ t/\2I@\߁PUU 80tD H@i@  H`9 w7 h؃ _ $0n# uH2Q*t =Y\3ث,ei؃n[Tŕ0+Aؕul& `&u1 ~B?X1EH@"uZ FD"CG6v#"U@r1%4{I{=f`*PqP@4(W`zHY p  D3q]c 3hC`[ FP -ذ EB}ݏ"K%+X-}T.@Pqe[W@*PC Pa cʐx@^p]blM^ P 5Hӗ=,ase(<@V7XxsJP P)5PE CP)P}=P |@6%+T+5yi`$(J؇u/YG|p!ϴTKk=0sAԀ(RJhUhpp_878NQ 03P0pgp+gp`07@UP7sO?+R F=@}0t'O7^^p S0 W7p(xx7X`&`y)G'bR  N  | J b~pHS&@@7wsl `X$H;8M8EPpԈ ~ϋT0 A7o4hX)JZ&jf:fj 2DN|K K~>b ҊXJ f1Ou xx#0xq("$u@_4V`_kDA" n *a Mr Mm a p7w h ? R` .HH{)ȄfdX9pWd= GI>v#EWZ jfp[psD`&D: c~ B`".* Q MD 42 R?Qp=pUk`v>OW7pJȅ1臠=)'p}x"($Sr@+d@.`!GarIENBf& ,Ȇrw|M4z|p{p1F`;gPE `J3؃lH"xKPegrHHg]])(D`JC_Ȇ>XSpB1/p?pG]0-k0hSk0[0m08k3gTpT,F$Wu`LȈ,HJȇXGȂQo8mЅXއa6t @c7Tŷ"W`!`AHDp{Gg+00{0M0 P]Ym PP0[Auh!l&RT7oXQr7@zs3GG;۽+~;yBm̂m/o.Nwpnp{7́^pkgp~pg'pp'z7p pGplp53X{3۳G?׽"ؿ7>k-J/^]i[<#G~̳}77!f'>Ă_??=00  8/usr/people/marco/sound.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xmms.app/xmms0000755000175000001440000000141013214346535020424 0ustar multixusers#!/bin/sh if [ "$1" = "-GSFilePath" ] || [ "$1" = "-GSTempPath" ]; then file="$2" else file="$1" fi if [ -z "$file" ]; then xmms & exit fi ACTION=`defaults read XMMS FileOpenAction` if [ "$ACTION" = "XMMS FileOpenAction 'EnqueueAndPlay'" ]; then if ! which xmms-add-play; then echo "Cannot find xmms-add-play - will enqueue instead." xmms -e "$file" & else if echo -n "$file" | egrep '.pls|.m3u'; then # xmms-add-play does not support playlists, so enqueue instead. xmms -e "$file" & else xmms-add-play "$file" & fi # xmms -p & # if xmms is currently not playing we need to make it play fi elif [ "$ACTION" = "XMMS FileOpenAction 'Enqueue'" ]; then xmms -e "$file" & else xmms "$file" & fi gworkspace-1.1.0/Apps_wrappers/xmms.app/xmms.tiff0000644000175000001440000001001413214346535021350 0ustar multixusersMM* ̀v-&{7&r_jMkƷlux 緫kp @* `RRR'0+ lMW( ^*6P'fDh & ~ƩCDfh zf j&,66txt%Eo`_T|,Wb @~6^*E})o&T;v*6^'')}lXt~*d^֪}E M' *%R%%EEEԔ2]n^w''[bmd\ cgncZ\\d\u=r|x\|$gZ\\\Huuccl\鈦w^H''߰<Ka{7wQ6|vWWWWWWsssssssF"ssssqHsssssssssss(ssssssssssssssss"sssss\\sssssssss"sssssssF(ssW㦓sssAvFss.^LsssrssssssFssssssssڈssy^ssNss 8ssssssvsssWssڂsssV.ss.Nsss8sssssssWssW(ssvsss>sse^sssss,FssssssW(sssss{ss"Lsss2Z^ssYsss{WssssssssssswFsssssZ\ssIXsssssssssssWwsss?ss!^H^3ssQssssssss((ssAsssssLsssssWsss(ssssswss3sssנZssssssWWW(sssssssssssssss|sssssvssssssssWwϔNS䉙OSw:/VD#GX6~bB_1i1/6d___2#l_Bƍ0lj@\JMz&4n7vN vWvwb ԥ(7̴R ppWޚ ,bwv7{u |R00    1? @ xmms.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orgXXHHdd&&椤괴dd줤FF//섄vv<>bbĎttDD44QQ==VV66ھ>>**NNXXNNjjvv~~rr||~~nnnnhhKK~~^^\\~~NN::ZZNNnn..||22>>::..jjzz~~zzƎFF::zzzzZZnnjjJJbbКoo~~$$FFTT 88 GG00\\))$$dd..@@,, LL44``tt44!!77ddss>>44]]$$TT<<,,<@vX` rrrr<<`))))CC W6:R#`XX7`rr`r2rrr<<`<`))CCCCC g^ns`[<`22rrrr<<<<``))C)CC fSQIi(Hr<`r`rrrrr<`<```))CC f /AXXX2>ffڦ**~~ھVVvvƦFFֶⶶzzrr22vvVV^^^^ffjj**::ަBB::ަBBNNbb>>BBBBbbRRff&&66vv&&BBvv""VVRRvvbbnn66**22 NNꚚffrr..ZZffFFffzznn>>RRVVJJ^^..**bb>>**ZZnn66zz**FF~~RRvvff66VVnnNNNN&&rrNN..ZZff::FFffzzΪjjzz^^zzrr22jjVV::VV^^ZZ&&NNNN^^VVvvRRJJ>>&&NNffvv&&66JJjj>>ff..BB66JJjj..>>ff"" 66..LLdd44DD<<\\TTdd$$44tt$$DDttTTTTtt\\ll44,,<< LL씔ddll,,\\ddDDddttll<<\\TTLL\\,,,,\\<<44 \\dd,,tt,,LL||TTlldd<2z(#^"K2%N<H瓎7O<'~Xrfɔ-SF1`΀zt=x)]:LfDCZѢɘ&mi8ˌ 4h0Aͧ4i0‚&-ִhɎ6]tisMsK0I` P`$! $2H /ƒX`t"F8a >LapXB`+ Vw!=CP@#/rl!3C>L!(D:d$"H@& #iC RX!Ȉ!h!QHA!)D$RWD @" Q =-8h?-L `k6 G7a 6rE4y.iG# H̒F=A*bf6D"rH$b HB³p#|d]8;A00 3X B`ޓ/p"CD$K(q+JŅEP~E|L8-iC6*ӅRd HD<d# ABH$!QHMR0$ B|x= FȈ@!VaGx B vЂXZIV>]kQg!(E8BQJl"(F P %'%FUqH$fqGv۔# ej3QV#6∇XAD@`!"D<yk9Fp,!X=Ba' Έ3 7" B4*b D!CQN<{GA|,JArR#Hi<bX!#c1F4R?DQ S Lh ? C@KȲs= xyhA*Ї auG03aOX-a .ǃhĢ*fF4WHT#ar?*RҢ@&<(" B*$䕸kjdDB]C u( B| /mcxHWx d (BPԸ VЇ) + g"f%'jrkF_\wL#sD3#GUvwgmG#AGt!; 7@""%@ޯj ), ް!PkϚjfH(, ȉ CPD:43 όpؒE( erPB(Myj30D"kHsᏘ|]4ġb|(C׿>Z C;Ѓ!`xX1pvcx#1&x`}Bu![$H iHB~⌈l EEPUPYPY/H@@dhȁhhT`H0x5D7$Uk zD{J *:$h$1FphpZO'wHAm15HHd(dgg3P-`RXs9P9r_ǃHLooH:HD(DpPw?UXp pKdOpF8h1hXFPPOu5H r5iPt(7 (5m7]ȆXYcUP6?` GDHȄHHRH4h dB0{J505`T;0nspspPpfSpp`(pLF HfHXhèXhXFq(ueHwp(pqGHrHT(1($HH?0PHP-PX]p ς|HJHd(d܀3{>p`;0pGp0WHWWpwcLR:DhMH,֘&_P_WHHw'piЎttHrXD(@ȊH,,ee09P9M??XLd(H Hx(rM PCC0MK{''x`H )u57p3:dhmhURh h;h0tB4pW׌WPPLLȀjȀ4L̆$(MdOq#pqs]HP2$0v؇PHl K])t́(C+;;[ph/;"KS:TTHvQQ|_R_(vbpTpwwP[P,h,ȀzȀt 5Ԃ$(IV(HJH  HІb߄VMM?\]0'0Z^^ȇȇ*=HGgpt?pxHxH Hoq? CHN.uhZo2(ub(+/c+K%ȄzjHtH*HMMH.OH3V T D(DtCiCpF=pdqq؀]؀ ؁ yj4?pw(qqi%XFqdăx$80~誆ҬqC 2/(C6(Jpb(^rHmaHH+gHuHR5T ȇ n:H,XHKKXiXi؂=F`F0{HT. hu)h&Lh HhhoX>\@؀Yu8h|ȞBȁ)]TM 8 ^\L9X9؃S؛v;p;0W0FFYm8m؁]n؅3]>؅ff(N(""(v(BhB(.( $H~QHDJX. hgmhuyhP][?-(nbb؁ ؁5850w0GAXA؃K؃FF`~`YY%[ 8}cЁH~'؅s[JVV`~`H(>(RR(N(*自AHdk8`Bgh7h(hoP_PBB؁+؁Y؆Y3UU0(0,,؅h1$;h``{Ђ""h h}}8K8vv"rr݃v?(a(RR(Q(  1 ͫ]45P@@݁ 4/(hS5hh޻}`ЅЅllȅQȅ]^s[DI؆I؃ ؃2h2``""((^X^8+8YXYA K ȀZȀ=>66*2:>nJiZZyaH6^MnznzN  U8{؅IXI`~`LLȆ!Ȇ==]‚u8.~C ~(^(8 h  >n˥+66(Q(rrɫzY::FX mM4H>zsi^--}u(F(~~&ȁAȁX)X)`A`5A}}XO?H:z>&RX÷+84ȃ4ЃJJQZZ؇K؇rhr`A`2:jy<B6ց1%Q߄!A]q}nn@@ЄPЄU83?>-5ȁ>ȁ\\XcX\s1!B~ׁ@聒28k8÷o**v׃ [ЅJ}w*Iy|;Рɼ&5k$,Ÿ $1"&QFE4*R!! _ ucǕ6pA &훴ڞZ=jI4'[rlɁkfmRN:8ЍC +DL! VmDAq X`z6Zͩ`.EMZhfM[:_ )RLIhBXb[LqQB dP8H!SS6L鳤ϢSSY6hUNb㊵[*9&Fqȵ#Ǯ뵤WQV6rKzHZ czY&ciaDMa:١ dLR&I!H`"#PF%>?ŸgqYaaFt03h x1& cL3"1Ü(̱&k1C;}!bhRAstE zy6gMB.Rh&zUAYLd6:٦v)Є#ErHc4Ҙ%TH%Y#'"×| f`Z٦5X!ꡅZ\)2tleX"DFHҘ$t&I'I2 `</"Y)dBh  '"azئ#8"xB@ X5ؠV6i-nv馏}e޲'ed!Ib$!0#aBğnV`\jE H"Z HfdR v"lf&re.ɧy(aJYYNucAXyNg5B .|H&eU6i霗^ءo| YɩT%h&qc0蕒N `ָdU\ŋdI^yI`tUIeTҘ L&$iev3'(%(gr{X59c#1&ЄVF2Tc6dbH2ҐE$#G4&"!'zP!=AЀ<y@7*v!Hbs^Юu1m!CQ`K[(QeTp? -@1<`fl(VD+ t [ qя]c1d|c 2 db H2R)ĒE?B^" C4 @,a y( FmbB;^Fv$a3](Ѝ}SXD*`5HARrD(A36ьVl[ :. 43`;01l|ayHւT,#XHq H6AD"b^͡OFUa# D0uGa},f(x&a uh:Јu42G).Sxˮ0]`5>r$bH)%$j8DaQ,: ݅GЉx$aIA*R1Td`x@r0a:)yJ5T`  2)Gnl;HN\$8} vc#!0}W \u0S"ӈC $F 1hY5A␈V_k-6}dc ٍjLz}P ˨*KZ2 4DBcLsy>&o1 c m1L2cCІ>ak?\00b  !h8/usr/home/fatal/pascal//pdf.tiffCreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xsox.app/0000755000175000001440000000000013214346535017533 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xsox.app/Documentation/0000755000175000001440000000000013214346535022344 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xsox.app/Documentation/Readme.txt0000644000175000001440000000165513214346535024311 0ustar multixusersXMMS App Wrapper for GWorkspace =============================== How to set the action for xmms? ------------------------------- Normally, the sript will start xmms just with the filename as parameter so xmms will replace the currently active playlist with that file. If you want to change that behavior, change the value of FileOpenAction in the XMMS domain of your user default by "Enqueue" or "EnqueueAndPlay": defaults write XMMS FileOpenAction Enqueue defaults write XMMS FileOpenAction EnqueueAndPlay To use the EnqueueAndPlay options the xmms-add-play tool must be installed (included with the xmms-ctrl pakage, see www.xmms.org for more information). Also EnqueueAndPlay does not work for playlists and if xmms is currently paused. To restore the default behavior, just the set another value, or erase the key: defaults delete XMMS FileOpenAction Credits ------- The Icons were created by Marco gworkspace-1.1.0/Apps_wrappers/xsox.app/FileIcon_.aiff.tiff0000644000175000001440000002245513214346535023150 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??*J* @ *J*???? @ *J*???? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8X8*j*8x8 @ %e%??8x8 @ %e%??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ *j*??*j*.N.'G'??5U5.N.'G'??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *J*??*j*.N.'G'??5U5.N&'G'??5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *J*??*j* @ %e%?? @ @ %e%?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N& @ .N.?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N&*j*??1q1*J*'G'?? @ *J*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ *j*??*j* @ 5U5?? @ @ 5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o//O/7w7/O'7w7/G*/G.'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O/7w77w77w77w7/G*=u",l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7/W%/g)7w77W;/{:=u",l,7g+7g='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O//g1/{:.v*;{;/G*=u<,L,7G%7{:%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O//O'/W%7g=7w7/g17{*4d03c%/G*=U",l,7G%7[*<\8'G''G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O//w3/G*=M&%e%/g!/{:4d0+s1/G*=u<,L,7G%/G*:j$-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w77g+/G*1A46V&/G*/G*4d0+s1/G*3]"<|,7G./G*:J8%y!7{>;[;;{;+k+;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O//w;/w=7w7/W-/G*1A46V&/G*/G*4d0+s1/G*/G**r4/{:/G:*J$5E>/G*1a"+K#;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//o/7g=/G*%E>/g!/G*1A46V&/G*/G*4d0'k./{:/G*,L(7[:/G*:J8%E>/G*>N4>^>+k++k++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7/G&/G*6F$'k./G*1A4)Q:/G*7{*4d07{*#m2/G*,L(7[:/{:&z$#]6/G*>N4&f&7{>7[>3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O//g!/W-/O//G./G*&z$3C&/G*+C25e:/G*/G*.v4/{:1A,/G*,L(7[:/G*#]"+C2/G*9q,.N&7{&'K**J"+K#+K-+K#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O//W=7{*;S*%E>/G:/G*%Y<7[*/{:/G*)a<;s2=u<9q,7k*1A,/G*,L(7[:/G*3]"=u"/{:7[*&F*/G*/G*4t8;K!/{:#]>=}=3s33S33S3#c#3S3#c##c##C# @ @ ?_?/o/?_?/O//o/7w7/g)/G*7{*1a"/G*#m"/G*/G*)q,/G*-U<;S*-U"5y"'k*1A,/G*>N4/{:/G*#m"=u"/G*7k*$d0/G*/G*2b87{*/{:3]"9i63S3#c#3S3#c##c##C##c#=}= @ @ /o//o//O//G*/G*/G*/G*#]*/{:#M"/G*!^4/G*/G*!^4/G*/G*5y"=U"/{:/G*!^4/G*#M"/G*!^43]"=u"/G*7[*$d0/G*7[*1~4/G*-e<;S27[*/G*/G*/{:/G*/G*#C##C##C# @ @ /o//o//o//W=*r8*r8*r80P #m"/G*#m">v4/G*/G*!^4/G*/{::J8#]2/G*7[*0P +c:/G*/G*!^47k*;s2/G*7k*!n4/G*/G*3}"/{::J8,l,*r8*r8*r8*r8*r8*r8 @ =}==}= @ @ /O//o//O/7w79y99Y99Y99Y97G9/{:9q,.v/G*/G*!^4/G*/G*1~47[*/G*;S2>v4/G*'K2(H !A!#c#1q1!A!>~>>~>>~>>~>#C#=}= @ @ /O//O//O//O//O/7w77w77W77W;#m&*J$*J"/G*#M"*r8/G*/G*:j$;S*/G*7[* @ 7{>/G*/G*4d0/G*/G*$d07k*/G*=U"&z$/G*;s20p0-m-3S3#c##c##C##C##C##C#=}==}= @ @ /O/7w77w77w77w77w77W77W7'g'+k+:z*1q1/G*=u<2R,7[*'K2 @ +c&/G*7[* ` 7{>/G*/G*(H /{:/G*4d07[*/G*=U<2r,7[*+C2(H(#c##c##c##C##C##C#=}==}==}==]= @ @ 7w7/O//O/7w77w77W77W77W7'g'7W7'g''G'/G*5y<,L,7[&'K20p07{>/G*5y< ` 7[>/G*'s2(h /G*/G*4d07{:/G*-U<,L,'K6&z$(h03S3#c##C##C##C#=}=#C#=}==}==]= @ @ 7w77w77w77w77W77W7'g''g'7W7'G''G''G''G=(H "B"7{&'K20p0'[-/G*!n4<|,7{>/G*1~48x8/G*/G*$d0+S./{:6F$4t83S3,L,>^>#c##C##C#=}=#C#=}==}==]==]==]= @ @ 7w7/O/7w77W77W77W77W7'g''g''g''G''G''G'%E%3S37{&#M"(H(;[-/G*!n4&f&'[>/{:1A4&F*/G*=U< @ 3c!/G*2b8.N.#c##c##c##C##C##C##C#=}==}==}==]==]=-m- @ @ 7w77W77W77W7'g''g''g'7W7'G''G''G';{;;{;;{;;{;'{9*r4,L,;[-/G*>N4&f&'[9/G*1A4:z*7[&5E<,L,+s%7[*2B8!A!#c##c##C##c#=}==}==}=#C#=]==]==]=-m-=]= @ @ 7w77w77w7'g'7W77W7'g''g''G''g';{;'G';{;;{;;[;;[;>^>%E%;[-/G*"\(&f&;k-/G*1~4*j*'k>=U<<\<3S3)i) ` 1Q1#c##C##c#=}=#C##C#=}==}==]==]=-m-=]=-m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;[;;{;;[;+k++k+;[-/G*(H 9Y9+K-/G*1A4:Z:+K-.V2,l,3S3#c#3S3#c##C##c##C#=}=#C#=}==]==]==]=-m-=]=-m--m- @ @ 7w7'g'7W7'g'7W7'g''G''G';{;'G';{;;{;;{;;[;;[;;[;+k+;[;+K#5U1 @ =}=;k-/{:,L(*j*3S39y99Y93S3#c##c##C##C##C##C#=}==}==}==]==}=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+3S3%e%3s3+K-/G*8X09y93S33S3#c##c##c##C##C##C#=}==}==}==}==]==]=-m-=]=-m--m--m--M- @ @ 7W7'g'7W7'g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3s3+K+3s3+K#9y9 @ -M-3S3#c#3S3#c##C##c#=}=#C#=}=#C#=}==}==]==]=-m-=]=-m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33S33S33S3#c#3S3#c##c##C##c##C##C#=}==}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++K++K++K++K+3s33s33s33S33s3#c#3S3#c##c##c##C##C##C#=}=#C#=}==]==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;{;;[;;[;;[;+k++k++k++K++k++K+3s33s33s33s33S33S3#c#3S3#c##c##C##C##C#=}==}==}==}==]==]==]=-m-=]=-m--m--M--M-5u55u5-M- @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.aiff.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xsox.app/FileIcon_.au.tiff0000644000175000001440000002245313214346535022646 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %e%5U5%e% @ @ ,l,5U5,l, @ ,l,%e% @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;{;??5U5'G'#c# @ *j*??*j* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.8x81q1?? @ *j*??*J* @ *j*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1q1??'G'#c#?? @ *j*??*j* @ *J*?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *J*??.N. @ .N.?? @ *j*??6V6 @ .N.?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U5.N.*j*??1q1*J*'G'?? @ *j*??3S3*j*'G'?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??%e%8X8'G'??'G'5U5?? @ @ 3S3??;{;5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W71J/)f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W71J/:L),l,'g''g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7%I-)n='G''g')J?:t),l,3S3-U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/)^=1r/2R2+k+)J?:t),l,%I-1j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;9Q--u=7w7)^=1J/ @ 9I51J/:L),L,9I51r7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/#C#)J?&R!%E%)N=1r/ @ !n9)J/:t),l,9I5)J?8p4-m-;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//o//O/7w7#}#)J/,X*:z:1r/)J? @ !n91J/&\54T41f#)J/(P8.N>1f=+K+;[;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+5E=/O/5y-1J/,X*:Z:)J?1r/ @ !n9)J?)J?$D41j;1J/8p4.V.1J/^!)N=)J?,X*:Z:)J/1r/ @0!F51r/)J/ @0!J+)J/(P$6V6)J/4h">^>+K++K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7)F3)J/8p4!F51J/,X**R:1J/1r/ @01J'&|9)J? @01r;1J/8p46j!)J?$H<&f&1V-1f=3s3+K++K++K+3s33s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//O//O/)n=5E=7w7)F31J/8p4.r9)J?6\-:b.)J?)J/$H<1j',x")J? @ !J+)J?&l%.R51J/R#"B"=m=%E5#C#3s33s33S33S3#c#3S3#c##c##C# @ @ /o/?_?/o//o/?_?/O/-u=)J/>b=>^!)J/1J/"d.!r;1J/)J?R#:t)b=*L12L6!R;B31J/1R'4X"1r/)J?&\5)J/(P$,l,8h$(P8(P8(P8(P80`8 @ #C#=}= @ @ /O//o//O/7w79y99y99Y99Y99Q51r/b+$H<)J?1J/8p4.r%)J/!R7 ` 1f=)J/1J/,X21r/)J?,D*1R'1J/>b=$H<1r/>b+ @ !A!#c#1q1!A!>~>!A!>~>>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+&R!8p4*J*)J?:L98H$1r/)J?(P$.r%1J/1r7 ` 1V-)J?1r/ @0)J?1J/ @0!r;)J?*t14D,1J/>B30p0-m-3S3#c##c##C##C##C##C##}#=}= @ @ /O/7w7/O/7w77w77W77W77W77W7+k+:z:1Q11J/:t)4T41J'>b+ @ .r%)J?!R7 ` 1v-)J?1J/ @ 1r/)J? @ 1J'1J/:t)4T41r'.|=(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O/7w7/O/7w77w77W77w7'g'7W7'g''g''G')J?2T>,t ` 1V-1J/>B3 @ )J?1J/ @ 1J')J?*t1,t<>Z-8H4(h(3S3#C3#c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77w77W77W7'g'7W7'g''g''G''G'5U- @ "B"1Z+!b+0p05e-)J?4h""|"1V-)J?,X*0p01r/)J? @ >F91J/8p4,L,#c#,l,>^>#C##c##C##C#=}==}==}==]==]==]= @ @ 7w7/O/7w77w77W77W7'g'7W7'g''G''g''G';{;%E%#c#1Z+:l)0p05E=1J/4h"&f&1V-1J/,X**J*)J?*t1 @ >V))J?0`(.N.#c#3S3#c##c##C#=}=#C#=}=#}#=]==}==]=-m- @ @ 7w77W77W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;9Q5$X$,l,5e51J/4h"&f&)A%)J?,X2*J*!Z32d>,t<9i%!r;0`81Q1#C##c##C##C##C#=}=#C#=}==}==]==]=-m-=]= @ @ 7w77w77w7'g'7W7'g''g''g''G''G''G';{;'G';{;;{;+k+>^>%E%%E5)J?0`(&F&5e-1J/,X**j*!F5:l1,l,3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g'7W7'g''g''G''G';{;;{;;{;;{;;[;;[;;{;+k++k+5E=1J/ @ 9Y95e51J/,X*:Z:5U5"|",l,3S33S3#C##c##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g''g''g''G''G';{;'G''G';{;;{;;[;;[;;[;;[;+k+3S3!~! @ =}=5e5)J? @0*j*3S3%E%9y93S3#c##c##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++k++K+#c#%e%3S3%e%)J? @ 9y93S3#c#3S3#c##C##C##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s39y9 @ 5u53S33S3#c##c##c##c##C##C#=}==}==}==}==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;;{;;{;'G';[;;[;;[;+k++k++k++k++K++K++K+3s3+K+3S33s33S33S33S3#c##c##c##C##C##C#=}==}=#}#=}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''g';{;'G''G';{;;[;;{;+k+;[;+k+;[;+k++k++K++K++K+3s33s33s33S33S33S3#c#3S3#c##c##C##C##C##C#=}==}==]==}=-m-=]=-m--m--M--M--M--M-5u5 @ @ 'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k++k++k++K++K++K+3s33s33s33s33S33S3#c##c#3S3#c##C##C##C#=}==}==}==}==}==]==]=-m-=]=-m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.au.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xsox.app/FileIcon_.wav.tiff0000644000175000001440000002245513214346535023040 0ustar multixusersMM*$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.%e% @ @ 5U56V6 @ ,l,5U5,l, @ .N.%e%5U5,l, @ .N.%e% @ @ ,l,5U5,l, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ .N.??,l, @ ??5u5 @ .N.??8x81Q1??#c##c#??8x8.N.??.N. @ 1q1??8x8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 8x8??5U5*j*???? @ %e%#c# @ 5U55U5 @ :Z:??*J* @ ??#c# @ #c#5U5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 'G'#c#1q11q1'G',l,#c#1q1 @ *j*;{;??5U5??*j* @ 5U5?? @ ??*j* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5U5??3S3*J*5U5)I9??*j* @ ??#c# @ 8x8??*J* @ *j*??5U5?? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ,l,5U56V6 @ .N.????8X8.N.????8X8 @ ??3S3*J*5U5??*j* @ 8X8??'G'#c# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *j*??5U5 @ 8X8??#c# @ 8x8??#c# @ @ 5U5????1q1??*j* @ @ 1q1??6V6 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ???????????????????????_???/o/?_?/o//o//o//O//o/7w7/O/7w77w77w77w7'g'7W7'g''g''g''G''g';{;'G';{;;{;;{;;{;+k+;[;+k++k++k++k++K+ @ @ ?????????????????????????_??_??_?/o//o//o//o//O//O/7w7/O/7w77W77W77w77W7'g'7W7'G''g''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++K++K+ @ @ ???????????????????????_??_??_?/o/?_?/o//o//O/7w7/O/7w77w77w77W77W7'g'7W7'g''g''g''G''G';{;'G';{;;[;;{;;[;+k+;[;+k++k++K++k+3s3 @ @ ?????????????????????_??_?/o//o//o//O//O//O//O/7w77w7/O/7W77W77W7'g'7W7'g''g''G''G''G';{;;{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++K++K+ @ @ ???????????????????_??_??_?/o/?_?/o//o//o/7w7/O/7w77W7*J/6f3'g'7W77W7'g''g''g''g';{;'G';{;'G';{;;{;;[;+k+;[;+k++k++k++K++K+3s33s3 @ @ ?????????????????_??_?/o/?_?/o//o//O//O//O//O/7w77w77W7*J/,L9,l,7W7'g''g''G''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++K++K++K++K+3s3+K+ @ @ ???????????????_??_??_??_?/o//o//o//O//O/7w7)I->n='G''g':J?,L),L,3S35U='g''G''G''G';{;;{;;{;;[;;[;;[;+k+;[;+k++k++K++k+3s3+K+3s33S3 @ @ ?????????????_??_?/o//o//o//o//O//O//O/7w7/O/>^=*J/2R2+k+:J?,t),l,)I5:j'%E%'G';{;;{;'G';{;;[;;{;;[;+k++k++k++k++K++K++K+3s33s33s33s3 @ @ ???????????_???/o/?_??_?/o//o//O/;[;1Q-5u=7w7>^=*J/ @0)I9*J/,L),L,)I-*J7(H(;{;'G';{;;{;;[;;[;;[;;[;+k+;[;+k++K++K++K+3s3+K+3s33s33S3 @ @ ?????????_??_??_?/o/?_?/O//O//O//O/=}=:J?2R!%E%.N=*r7 @0.n9:J?,t),l,)I5*J/0P$-m=;{;;{;;[;;[;;[;+k++k++k++k++K++K+3s3+K+3s33s33S33S33S3 @ @ ?????????_?/o/?_?/o//o//o//O//o/7w7#C3*J/8X*:z::J?*J/ @0>n9*J/<\54t<6f#:J?0P$.N>6V=+K+;{;;[;;[;+k+;[;+k++K++K++K++K+3s33s33S33s33S3#c# @ @ ?????_??_??_??_?/o//o//o//O/+K+%E=7w7%E=*J/8X*:Z:*J/*J/ @0.n9:J?*J/$D4:j+*J/0P$6V.*J/,L*3s3;[;+k++k++k++K++K+3s33s33s3+K+3s33S33S3#c#3S3 @ @ ?????_?/o/?_?/o//o//o//O//O/%E=*J/>^!.N=:J?8X*:Z::J?*J/ @0&F5:J?*J/ @0:j+*J/0P$6V.:J?(h">^>3s3+K++k++K++k+3s3+K++K+3s33s33S33s3#c#3S3#c# @ @ ?_??_??_??_?/o//o/?_?/O//O/7w7&F+:J?(H4&F5*J/8X*2R:*J/*J/ @0*J'"|9*J/ `0:J+*J/(H,:j1*J/(h"6V66V-6V-3s3+K++K+3s3+K+3s33s33S33S3#c#3S3#c##c# @ @ ??/o/?_?/o//o//o//O/.N=%E=/O/&F+*J/(p,*J9:J?"|="b.:J?*J/(H<:J+$D*:J? @0:J+*J/^>:j7*J/4d.2R;*J/:J?$d:2R3,t)$D&*r;8x2*J/ `(*r;:J?~=*J/*r7$d:*J/~!!A!>~!>~>=}==}= @ @ /o//O//O/7w7/O/7w77w77W7+k+*r10P$*J**J/,L9(H$*J/:J?0P$*J%*J/*r7 ` 6V-:J?*J/ @0:J?*J/ @ *R;*J/,t)$D,*J/2B30p0-m-3S3#c##c##c##C##C##C##}#=}= @ @ 7w7/O/7w77w77w77w77W77W7'g'+k+&F&1Q1:J?,L94T4*J'2b; @ *J%*J/*r7 @06v-:J?*J/ @ *J/:J? @0*J':J?,t)4T4*r'"B#(H(#c##c##c##C##C#=}==}==}==}==]= @ @ /O//O/7w7/O/7w77W77W77W77W7'g''g''G'*J/4d>,L,:j+2b;0p0.v-:J?4d> ` 6V=*J/2B3 @0*J/*J/ @ :J'*J/,t14t<:Z-(H$8X8#c##C##c##C#=}=#C##C#=}==}==]= @ @ 7w77w77w77W77W77W7'g''g''g''g''G''g'5U- @ <|"&Z+2R;0p0%e-*J/8h""B"6V-:J?8X*0p0:J?*J/ @0&F9*J/(p,,L,#c#,l,>^>#c##C##C##C#=}==}==}==]==]==]= @ @ /O/7w77w77w77W77W77W7'g'7W7'G''g';{;'G'9y93S3:Z+^>9y9%E5:J? `(&f&5U-*J/8X2:Z:6V5,L1<\<3S3)i) ` 1Q1#c##c##C#=}=#C#=}==}==}==}=-m-=]=-m--m- @ @ 7W77W77W7'g''g''g''g''G''G';{;'G';{;;{;;{;;[;;[;+k++k+%E=*J/ @ 9Y9%e5*J/8X**j*5e5<|"<\<3S3#c#3S3#C##C##C##C##C#=}==}==}==]==]==]=-m-=]=-m- @ @ 7w7'g'7W7'g'7W7'g''G''g';{;'G';{;;{;;{;;[;;[;+k+;[;+k+3S3>~! @ =}=%e5:J? @0*j*3s3%E%9y9#c##c##c##C##c##C#=}==}=#}#=}==]==]=-m-=]=-m--m--M- @ @ 'g'7W7'g''g''G''G''G';{;'G';{;;{;;[;;[;;[;+k+;[;+k++k++K+3S3%e%3S3%e5:J? @ 9y93S33S3#c#3S3#C##c##C##C#=}=#C#=}==}==}==]==]=-m-=]=-m--M--M- @ @ 7W7'g'7W7'g''g''G''G';{;'G';{;;[;;{;;[;;[;+k++k++k++k++K+3s3+K+3s33s39y9 @ -M-#c#3S3#c##C##c##C##C#=}=#}#=}==}==]==]=-m-=]=-m--m--M--m-5u5 @ @ 'g''g''G''G''G';{;'G';{;;{;;{;;[;;[;+k+;[;+k++k++K++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##c##C##C#=}=#C#=}==}==]==]==]=-m-=]=-m--m--M--M--M- @ @ 'g''g''g''G''G';{;'G';{;;{;;[;;[;+k+;[;+k++k++k++K++K+3s3+K+3s33s33S33S3#c#3S3#c##c##C##c#=}=#C#=}==}==}==}==}=-m-=]=-m--m--m--M--M--M-5u5 @ @ 'G''g''G';{;'G';{;;{;;[;;[;;[;;[;+k++k++k++K++K++K+3s3+K+3s33S33s33S33S3#c#3S3#c##C##C##C##C#=}==}==}==]==]==]==]=-m--m--m--M--M-5u55u55u5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 00$  $$*$1?$RFileIcon_.wav.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xsox.app/FileIcon_GenericSound.tiff0000644000175000001440000000614413214346535024547 0ustar multixusersII*h  $h!B &l"F%j1;,Ә &J/n)R@ҠSg!^ϒ'or%˝h s*Ul2eUT!m5j֪]n7jܤiMw;_|t[7=c?r70#\r98g9xfڟmoZlsWZ]mem66n巍v;򹧋nzx奏~x~anFjq.&84e3̶?| m/r+֊7ܺm{>rp\ppNL}َ ﲨYf^9^u֥y-b:u< 'dhIUDG5s|;;a',rnk~ 21da Cc4cG,\EW pCP!N<d*BED!(@Wq"@9ခF$nA@|@0԰H`B0ю.?yn,H~ZWsHC-dWHC=') T  !q-dP3ED$PrֲN"NyP !1Hf(@DbLh~0' ,T_t9*=(AU'HA =,$ V0!p"Q$AЀx.-Q2T&p`dj ]XV,F *[y 5`k @"H 8< q+[` 5P\Xz}/2A { L/`=" A{fS*GP e{E`Y T 51` CY+1n \dqian%D349 pTxqzCV3臼#w3jԇ )@ >Ab2ޟA (0p '-j> ( @gB g#A)0;aD\; Z\aE# B60!H@AIMfr=l1H  z$`v$ YmjrL*} _3zJrR?7nUƈbP tmAţl(ZchYZ&p<$lt Ei5[]r_+zѳ7[z)>K@B@ x І! qlpp=*c˰5ڔ)bed:DD@7ҕݸ =>7oܭ r<Sm gh/ har3UP24)@{8*b!cgY5}<7u?U*An]BDcB+ lH QR4^0}6lAJP*9> z$8iHT^À+xC:Ku?a~]UhVj`B JkA0E(xCЅ&&A JHCQQq !gw~*={щG0p QLH`U8Dg$(bo"P@r(K^ bH * p :o7ws6wO{q_6#!'r!$&CF#N"d~:3c %W y r> N!FQ9ywo`.[hxFP\ P p)^rJ, ,,,)ɍZGEEEGGG{{{;;;kkkKKK 333___///muuwww>@@yJ, ,,,I W{{{;;;[[[kkkKKK 333___///OOOJ!Ύ}@@9J, ,,,IJd{{{;;;[[[kkk+++KKK sss333SSS???___ooo///OOOJ*::Jj @@nJ< Vf#JЄ^VK[[[kkk+++KKK sss333SSS???___ooo///kEJ*:Jj @@JJJЄVVJLkkk+++KKK sss333SSS???___ooo///OOOEonνJ*:Jj @@& JJ 0+JЄVnJ訂K+++ sssSSSccc???oooOOO J F5J*R:Jj @@*|J 0+JtJ訂6V6 sssSSSooon}E JJ JB=".Jj (\*DJ 0+Jl2JD:j{2BB]E5sssSSS###ooou}J=^Z*wJN*JJ, DrDJ 0JlqJJ2bbJj ((hNV333SSS###ooo///OOO]*rJJzJ1LL.DJ訂JlqJJ2PJj <SSSccc###CCCooo"ij ,yXJJXJJL,Qj jJ̹JX2lqJJ2PJj ؘ/*CCCooo///=PPPB|Yj |\JJXJJ0$YJr JJXJbJJ2XJj |\M0Єlllh0xPPPP///yyy9991Qj Ąt|J2bHJJ0$* Jr6-JJXJJD rJ jpppNJTvmJR+@JJ@@`JJL :MHTccc###CCC===www777WWW'''@ZreeMJh"vmJ8XppJJ@@`ƆyJ ^^^###CCC}}}===]]]www777WWWggg'''GGGZ\liJh"mJ8XJJJI6VJccc###CCC}}}===]]]www777WWWggg'''GGG{{{ёؤ,,,%% Jh"eJ8X*** iE*hccc###}}}===]]]777ggg'''GGG{{{;;;EEEJ`&&&J8X֖UQSSS)))QQQ###}}}]]]mmm777gggGGG{{{;;;[[[EuJYYYeeuJ8Xu||bccc###}}}]]]gggGGG;;;[[[kkkS~J 999ccc###CCC}}}]]]---WWWgggGGG;;;[[[kkk+++eee333%%JSSSccc###CCC}}}===]]]---ggg'''GGG;;;[[[kkk+++ sssccc###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++ sssSSS###CCC}}}===]]]mmm---MMMggg'''GGG{{{;;;[[[kkk+++KKK sssSSS###CCC}}}===mmm---MMM '''{{{;;;[[[kkk+++KKK sss333SSS###CCC}}}===mmmMMM 00$  $$*$1?$Rgeneric-sound.tiff@(#)ImageMagick 5.3.7 08/01/01 Q:16 http://www.imagemagick.orggworkspace-1.1.0/Apps_wrappers/xsox.app/xsox0000755000175000001440000000011313214346535020455 0ustar multixusers#!/bin/sh APP=xsox if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/xsox.app/xsox.tiff0000644000175000001440000001275013214346535021413 0ustar multixusersMM* $h!B &lتUVضdɶ ͛m֬mӦm2eۄ ƌ6bĶaö _m}lc[.:uѮݎVv4kI SgGZ;UQҎ v)DE(ThG|;rڑ#ǎ,YvdȰ+]]RJlWD$'ή1vE+Rnj7~IL6}Y̝7E,]|U׬]~Mlݶ}]ݷC=vSϜ=׮p/ĂӡJ R$K1A ~~  >D8^ƒv"7,x.ؠ#ЁMtE7=G? 20#28L2432<%0/-2 3 lBA L\0A,! L3w0 s/sA+,A j vbw9.u3wv?14%JFap%l@/̌t0! ̭|,rRp jl0  H C Jx܈K$` 6)A8G$pa1fءv&`ZX8a :&h p@YI2KDf@xkha@R!"9/ԝح=0 <Њ L.: pR Z(CG$ /蒲_WhJ+_w}vCkcZdBl]vK#m`x5|0AK>{NcnDd4(IFH.Ue׾7 z4C@iLԠJнqm{~BFP!V0~! 0"hA>s (=ZUzd/ .mC֓ہp/P ('4zhҍ X ( !@|G Ptӳ 5B2xI bPBE ^$b^aD G` ): h9 aA2O' 1H䠒bO5 @pdj̠߰a"VC,"1n#?IrSRd$ X@`6 ۨG=Fl4-KI2!@1AAp;}ԠCC,DAPt4 8;T-`] eßVG JQ}/)nIZ#\cnp-`G"ST`!%U4#1(@X:(CҐ! QHHfʀ@tReJgbA #B@5JPs:(w"SdWB؃+\+"EF j*]*UlEk@D q`'XnS@!T5Ѕ-5- n4!!'MIzsf5{ps"v#@iyZVU $ !HAplЊ: !*dC2t񁔿|ףpA>STu  ֱo]DTUB#P%=p/{=8±bŰMC]hd&݊I -@eBP`P i0*ꀏDAD<'[ t/\2I@\߁PUU 80tD H@i@  H`9 w7 h؃ _ $0n# uH2Q*t =Y\3ث,ei؃n[Tŕ0+Aؕul& `&u1 ~B?X1EH@"uZ FD"CG6v#"U@r1%4{I{=f`*PqP@4(W`zHY p  D3q]c 3hC`[ FP -ذ EB}ݏ"K%+X-}T.@Pqe[W@*PC Pa cʐx@^p]blM^ P 5Hӗ=,ase(<@V7XxsJP P)5PE CP)P}=P |@6%+T+5yi`$(J؇u/YG|p!ϴTKk=0sAԀ(RJhUhpp_878NQ 03P0pgp+gp`07@UP7sO?+R F=@}0t'O7^^p S0 W7p(xx7X`&`y)G'bR  N  | J b~pHS&@@7wsl `X$H;8M8EPpԈ ~ϋT0 A7o4hX)JZ&jf:fj 2DN|K K~>b ҊXJ f1Ou xx#0xq("$u@_4V`_kDA" n *a Mr Mm a p7w h ? R` .HH{)ȄfdX9pWd= GI>v#EWZ jfp[psD`&D: c~ B`".* Q MD 42 R?Qp=pUk`v>OW7pJȅ1臠=)'p}x"($Sr@+d@.`!GarIENBf& ,Ȇrw|M4z|p{p1F`;gPE `J3؃lH"xKPegrHHg]])(D`JC_Ȇ>XSpB1/p?pG]0-k0hSk0[0m08k3gTpT,F$Wu`LȈ,HJȇXGȂQo8mЅXއa6t @c7Tŷ"W`!`AHDp{Gg+00{0M0 P]Ym PP0[Auh!l&RT7oXQr7@zs3GG;۽+~;yBm̂m/o.Nwpnp{7́^pkgp~pg'pp'z7p pGplp53X{3۳G?׽"ؿ7>k-J/^]i[<#G~̳}77!f'>Ă_??=00  8/usr/people/marco/sound.tifcreated with The GIMPgworkspace-1.1.0/Apps_wrappers/xtrkcad.app/0000755000175000001440000000000013231754602020167 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xtrkcad.app/Resources/0000755000175000001440000000000013231754602022141 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xtrkcad.app/Resources/Info-gnustep.plist0000644000175000001440000000026213231754602025574 0ustar multixusers{ NSExecutable = "xtrkcad"; NSIcon = "xtrkcad.tiff"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "xtc" ); NSIcon = "xtrkcad.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/xtrkcad.app/xtrkcad0000755000175000001440000000011713214346535021557 0ustar multixusers#!/bin/sh APP=xtrkcad if [ $# -eq 2 ] ; then $APP "$2" & else $APP & fi gworkspace-1.1.0/Apps_wrappers/xtrkcad.app/xtrkcad.tiff0000644000175000001440000001423613231754602022507 0ustar multixusersII*?@$ BaPD ?"OIDqWģ1'H~H%xM} ͠ :'rF TjPxtBQ"Fqv_ϰDZ,sy@+EA`6U&9lSX 1K}dQxQ,` F [CquADM]';I #&'~g6UHC wբ86n! 0z<7^|²#Q|"&h`x% X8 c n*6CH.'TQ&A:h!{!d R1WG8 8 . P!3Λ ȪƏ(Ir`,mN-hQ6*j6Fa 0 @4 JlI|(P=*'  ogF cigfU稲P'!gqu , 5% FТ'̎I2HH̞~'*egu@lb(G)Ak&v, Ռ `|FnFhZ.r&Aga2*%PlFؔ[f(}B\ljP^=}i|po 1cPzmٴw~9B|\l~! $f&9X B $y ࡴQAme ymnx @V>ɮt[x['itx< j`XV\z>JLXA8(4;F|n x &R!ص@!c@h :ș}!=p{ ^G82 @X#| (@JÀVgQ8ؗÜra> Fd@?EP\+`aXr(;@t.^tc 3 Д *M=B ,F -h|nQ:8g0* P9pP@q P9 a9uA: A!Fa?-1" Bz{j[y#r ,M\ P)% c0@ CB^@(Xd V=fu0I Q `z`lH R/4T 4 v?W(R`zQ>@EJ~DJ@XƠ֏z4,ȗ2q+c8 @[(8@ Hw7lew \8x5` u`L1GxV|}ԶQ<*G ^n-auc:`>\(<(@"5ct^@Xo$ 2ja6ݰx@0$wJAbqо蒈p cbIGM. cw#1:@pgA$(p9> ur p`>2G_`'. @M FIP a:k،|{1Px ~= t-P9]#@baa@ :!!a\ bf A *   HS@ 0ts!!t!z`Fzd@. aa\`**F#v!@\A#&$!a0@"Z FD@(!dM4 Mp>c-`XL$n:!h @ `bXX0Ā  Pa!סp!B^baA-!,! *Ƨa@amX ! B %R 20 !A aaX av>&@!@n*F> !aaρ@A @"AoPb$L6A*z%oA@DR a  tz aHs(LHq*T +:!2(Y!8VAA(L]a aAqAa)i6(:!xȒnATP$`4 ! ognla\.ȴ ("X4.l.@ @ l5Ǎv`h0*I`H2 a@^cKA L4`\0L @4Ĕ FuB 3~2Cg!AL=;,Z&Aذ  aH m@!Thd@ΰrt'#t Q ԹKLT6%b:'S a@D!!ȥ' j CFh'\F(x.+R4Bռ(Ȳ?:CKLei@+:^Oc^'ĂrTbNfXk`$N$.mb 'h6ccC큂`T4mra$X3"3!ZT= 3a 0`4ȶ`Im0#[eV @ D @2R ,Xfs\`WazjO!3"A,I`u D2ֿ2& D]99 cSӜJ!wb !@@2AB `! p f ֩j tbtW!h!S@ ~$jn ut `t-f$,ZYA@R@*@;&%xJ<Ѱ !`(v"R9`\ , (b dG>@$aH @>"<@8< !Z!ϯw&!! SAdo 6 .V4!h&ai@*Ch!>  1 C@c`RzA%^ ${ Avw DXP@ E!!aazA@  @J AD -`@t@R a'0!AD (4`@ @!v Xա\ 2NTB ( xYHfZzx `A@la@z`R "NaɈM53mFAa6`>m5 !=Pk,Nj Uj`4 v`AcB<Sd@ @6A \y *0a& *!"4[*ϡBH@`r `6aij 4*`4`$@h<K X! )QL:A`a?yV6!A~!0 2| Ɂa`08  攡 ~b @@x-:)~A`̰ laA"`?@^wA& x!~[='?УU2 (5 8VOH9ٯ盙  @52  yxLL@Pk(rUVAsgC:"@ M:.A"և+}6o}O-z6l+ 6QhY}'PEdJCh@H[52 $~B}籄'b+7ɥ@#}QD:~qlY11)&\@|_% >#Ml|Fy +J^eƌ:~K\I0LS$M4 FqD~+1M>84Vr2E=PDtmHɣ C/ŴK0q\;5#N=[I0YgWrh8puEQu`d5``t)Zn%EADž00l r@(=/home/sebastia/xtrkcad.tiffLGLGgworkspace-1.1.0/Apps_wrappers/xv.app/0000755000175000001440000000000013214346535017167 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xv.app/FileIcon_.gif.tiff0000644000175000001440000000706413214346535022443 0ustar multixusersMM* n P8$ BaPd6DbQ8qV,cr5 AJdI R2C Z ~m[šJd1 10.L2ğ~ hHπ 7^? !&~g')pIJ?05/?Xi .PS*L$\S+!92#Mքm2l4( ? RY5"6?,[g ,X"x8@S\"@V?7 @"ehrBe%2V?rލ9L 3Ui6H:?ףs-פbu3J h k !j@(a>ȼcM 5kMǤ0,eX!z1 HdM0O $Ā$e5 JF-a|-ŤӏZV+kJ! KHHYO AD(i#Fx}4%Xa2 $71U%d?x Ed)$.#D8RsN:\SJPE={O*cnߦPjUPFkL4 N@;FR@Cla-Y/!mfg•pXtʚNu '\wJI tQH *eCYF(ݣ5Aqi~ƚYbѫ#L٤HBe(9-DwKrV# ;LӝHY)Tgπ*l׼6f0'&UJ?ƅ0r[L'eN\tJB+~$I:n}SPP)b`<Xw*Oח-pύbf-Ș"Fhx/Ѧ @[el3}h\Tަb2I+`0׺2Q9KP#6.Ə>"@6-μ\>/e23e<anPH&. $ {w:ԾPV~aҥSfYQ1%ޕ&XQ(TJTA{Gi )&Q8kj#Cj  -&Q( )-1du2dj )_.e6.]+ ?6_ꅉu9(=xo#'d, IRh,vKjMZ 44 B] C7pM\5n}EsgRװWNQ]aF!sbA@[C}& /9 2H>zS+b[ACL0lz4x|X@uZXGK#P7=;NgOg1b *bӉ)߻?y\ݜĢ2QLA9,uV0Դh1Rʶe!?_YEGA"-pet7w6^1/v;ۡȉV*4VrV0;2&p蹨uU41V|*ɕJȼ\8*`p h@ZmlR@^>̠6J@ .\a X順ET{Fa$ʙLAHlo# "@dOiݍJ,ar`B@|Lj4İHP 2'vd e ĀQ$fRơV zL1 `b h#00*MDjrMM  o ʁ ol.Qxe4͈LPeA|IoLH`  O@_ o &* v5 8=@΂UQt@ 6@ q 8LZ,#(#r:61= +hl-J)JK 4Ց̮zĠV 7 OR K6NΤZG@[(``T` r=+`+R+$ $fAL`;gQG0)q`ukիnz m ~ 1ȞR 2K19#:$&Ea  aG4S, $ ^2-#-ԯ2.kK&TtN ,@M: [9,ag~<.@< =as>3I4<쬁3?SX(B.g-U6HkwmӁ`|R@d` ` S# 3Er3]# eB;-FTra` gH)~C~6T G7 7lA/  @n 1@ DSF_3MMcFtkFq5SGtxga*s ˋOKuPU PPPQPm2"RbR,1R/SU3R;Su=SET5ITMSQTu.HH\;u`nbgUeViWmW5yWu}VWU[XXY5YuYYZ5ZuZ 00 e$,(R ' 'gworkspace-1.1.0/Apps_wrappers/xv.app/FileIcon_.jpg.tiff0000644000175000001440000000712613214346535022455 0ustar multixusersMM* P8$ BaPd6DbQ8qV,cr5 AJdI5@F %P#Q*WTd,1 +v8h@`H/# R"a&\jt.=dD !\qv85#]fo/"L[  KGRM/rcE:WF8z!b5!dC\H ٙ0% P%H>lGi/lG:MqB58@W@@ /D!:/P#/ |2jc\rʉ*ED @eB /N4BnC\aGA/>R|K%KDRɿcnXr1؅H0,|(Hi{@@VR/Ҡ\ z?J+aV* !2Ӣ "T~P! mh -*K@ht5s\(p[_@U,1<e 3^]yj mpp:ϠZX+y>1ƃ(\~**a=/%tʕ Kpf-#y(.T:%"!lߘ鷫3"w#z}ddAODB [ h`Vc\̚ᠯ!^*FP(\=)2>\@`O,ΜάGN؏F$*$`(t`I& .`TY*P)0!&5 mUD@p:0pւKd 퀗fϮN,#\N;  2{L@TKxNP!mAᐛOḍt"o({0)dzʮ΍Jr ďJ+”$A +S\䚑DaRH  o_P`d Bzoq1%`< ` T4}GV^y`o% 2di&R!$(0QN:O<oI"l 7#.O>rR$K [+``X ro.`.R.'"$fALĠ:1g/26cєRX Y":q >~ 4GR 5NQRk&jdTu   FaG7/$ ^0Y12fΡI)+Qs.@\ Exεn>&kb Sn: ?@47|WA!A#8 $k9qq0w[:p`Pg;`!`A `3"CyUbUPVaU_VUcUkVumVuW5yW}VWu^LK}XYYUY5YuYZuZZ[X[[\5\u\\]5]u\"00> FN(R ' 'gworkspace-1.1.0/Apps_wrappers/xv.app/FileIcon_.tiff.tiff0000644000175000001440000000705413214346535022625 0ustar multixusersMM* f P8$ BaPd6DbQ8qV,cr5 AJdITE+̮F %J㨏<@%QoE2BiPP2°cD_u;TU%DiҽI+l4B0,l lvM ]w q~8K{}D !ܮ\v8TEQ#EPTBo"Ll[ Fl=MK1Ϻ0C2e#PQU6eU"+UD_agQýD80Fx^jѶ +#-EJ2AF|%]?TSo_er g{MBTD8+V}aj+@ Dl!:/J |l1 1q*ED D+dB 2.CDaGA=Fڜl2!z l(1(1ԟ)p%IJX‒?Xi .pRJ#a\Rw'%wyf %pQV" @&$@%[QQ4X!"x8@0S,"@V?7 p@"WgM߅rW%+V?2Ҍ8uD 3u6F`&?CrҲ|9zC@<l _a OD *EdG h٨#hZgc9%vHya A,M?#eNx0F #a$TlwR`}M2n-$Tt2[SLPbN@*@ ̝l2%qFuB0*qUZJaa!҅(8c5x iEe2 q!/svo \㜠N)? wA۴n+PBƸTCX@! p2tѴ ejG8aae%D20å4o,Y8$3MΐHZ&xS@bT lL$7h[u8@*!⢕#l4j!vdJ6PC1Į&3N/%JeuEr98&.)݃PYu} N"Uu4 @?q^ ʈO v?+P6Hp\Jq<Rix%t!Y`'?}TMWPq.DkU`f9T6B%e(r2՗qRs G`,Œ 樀a[2vKJ9qj h7x?b4 aX<]2HB6 ^VI@<x%~8Q#\;w@ᛧ(g"XE2H?I+0+FQT:?MUi+OJLhm#PiMpinMYF 2S5}>|=xo#&, HRg, i1EEWTS^D6(v_$C5m-p ˯7"MI_Sa@[8Pf 쬰F®:'Wx1xبJP.AF֔:Α{cxf޸WpNt|+7 SK8 {7c̠t PR %uǝF/*jY[,g%p. T9 "!ܫuWrr"4#y܀@64ܲNxdLa LE6z<Ad%DaFlfc"<”dπI,m2 bB@lJtTDFPާ2'dġd d lOf>AL hL1 ` h @c P Ħ P0*p($A u NeDd@`䮗dlLXn!GP( 86Pʡ]ϘZkP4nrtSqf˱ +"@d򞇄pa 8JF$""2P!"@_-QQ9%Soy|R@P R 3" 3`D3tQ# YA:a-F3Lq!` f&GiM5"?R?a$`hYpznT7r <3  | S CDtUE35LLEt[EaFSI4kF`b>4;IOP#PPTPPpѢ(6/gR RUR5-Ru/R1Su5S)S3T9TU=T5LmCmUuUUU_UͯVgVUiVmW5cWukWU5X5XuXXY5YuYYX"00 ]$(R ' 'gworkspace-1.1.0/Apps_wrappers/xv.app/FileIcon_.xpm.tiff0000644000175000001440000002230213214346535022472 0ustar multixusersII*$vvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvevvvvvvvvvvvveLvvvLvvvvvvvvvLvvvYYYYYYLvveYYYvvvvvvYYYLvvvLvvvLvvvLvveCCCCCADYcWC>><;;::88~7}7|LvvvCCCCCC{z?<<;::88~7}7{7zLvvvCCCCAMJ<;::88~7}7{6z6yLvvvCCCAAPM;;:88~7}7{6z6y6xLvveCCAAAGC;:88~7}7{6z6x6w4wLvvvCAAA@@VS:::87}7{6y6x4w4w4vLvvvAAA@@@?@A>:::87}7{6y6x4w4v4u3uLvvvvvvvvvAA@@@??><;;:87~7{6y6x4w4v3u3t3svvvvvvLvve@@@@??><<;:88~7|6z6x4w4v3u3t3s3rLvvv777vvv@@???><<;::87}6z/6@)}3s3r3r2qvvv777LvvvZZzxwAn8~><;;:87}7{,`72,w@0n2q2qLvvvYYYΐoF>i;:88~7|6z232, z& ])c2p2pYYYLvveҒg2;j87}6z/34) _ [,H42p2p2oLvvvYYYvvvߛՕ̎{FTj7{6y,* g TRB!*aJZsm]FsaEo^EvvvYYYLvve777ז͏Èv[P?3t4w/o-j6RxsE)anwws777LvvvؗΐĈzupELX4w7XiwojgsqmLvvvߜؗϐʼnztnjYmZ<ۘܘАĈwqlhLvvvݚ֖ϐʼnzsmh_`ߜՔɌzrlfbLvveژՔ͏ʼnzslfaZؗ͏}tlf`]LvvvӒ̎ʼn{umgaiIܙژБʼnwog`\YLvvvˍĈ}vohaYvژҒȋzrjb]Y|WLvvvĈ~xrkd^lKߛ٘ӓˍ~vnf_Z|WyTLvveLvvvLvvv777777LvvvLvve777vvvvvv777LvvvLvvvLvvvLvveLvvvLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 00$$$$(R ' 'gworkspace-1.1.0/Apps_wrappers/xv.app/Resources/0000755000175000001440000000000013214346535021141 5ustar multixusersgworkspace-1.1.0/Apps_wrappers/xv.app/Resources/Info-gnustep.plist0000644000175000001440000000073413214346535024600 0ustar multixusers{ NSExecutable = "xv"; NSIcon = "xv.tiff"; NSRole = "Viewer"; XAppWrapper = YES; NSTypes = ( { NSUnixExtensions = ( "jpeg", "jpg" ); NSIcon = "FileIcon_.jpg.tiff"; }, { NSUnixExtensions = ( "tiff", "tif" ); NSIcon = "FileIcon_.tiff.tiff"; }, { NSUnixExtensions = ( "xpm", "xbm" ); NSIcon = "FileIcon_.xpm.tiff"; }, { NSUnixExtensions = ( "gif" ); NSIcon = "FileIcon_.gif.tiff"; } ); } gworkspace-1.1.0/Apps_wrappers/xv.app/xv0000755000175000001440000000016713214346535017556 0ustar multixusers#!/bin/sh if [ "$1" = "-GSFilePath" ] || [ "$1" = "-GSTempPath" ]; then file="$2" else file="$1" fi xv $file & gworkspace-1.1.0/Apps_wrappers/xv.app/xv.tiff0000644000175000001440000001355213214346535020504 0ustar multixusersII* $h!B &lXPңK"D`2$H@ʛxǓ(܅p›-[Xq`ƌ&l3f]-#FK+φ!ê 2`PNmvsƹ1ʈ.3NB&!@t>|5 O9rqǁg,2eʪv?rSϟ>?, adE$TV|YIdNɟt3e"A&b0p#'Oa̬3 1Cw(LD }Eut"B5ЋÈ0q|(k_Ï"b)h *PdUG AQԀy@.(r R;' Tik6֡ЇB A,p8U#p(ʠ>a_ _"!"BЪ@ "(&"("ԉL" 94C hh831 7^K<=(A ba%"v{tD%ƏCjIEYRQj!9٩ 5pA{i 05`(aR،eꐃ4 (Bb%kIL>y"mhAB*hTVEPN%) 8Y["|fEGc l2!zh;*4.@-UhĢeFUQm UA:QHI,diK`2W>xЇ -3BPf1^cyE1c1;NZ1 h <*DرNF]JUqkBoч>i:3P@Vdɂ@ ЋDסc)B+bvB0;,Etzxj ( T.vdjb~۝j8lEUG-b2֪*j'g"[Ap8\(op^PT y3la.@|Ԉt+d˜aq1A5U(3ÌR('HBƅƠlh(3 Ȓ)yY^)RR ֘7vn<(+"S.e"aAשCP;kj갥8Rf5+`=MFtDG I AdA%/%"XP,[ #Z[QB!K;b\r Q"(^`sAp)aG)pB-Zqa@hF"45;h2QJZ$ʖgi`R"DPh /?В4g ehBѡ+É.Rɍd "K[(7+iA ='z AE˭Ή DvDopDd)F0VĦ@/3uسAE-AwWJ}mr= ^0{u'&hG*HE|EV&7vHdh(h bVJ}EVHC$?pFpX(I@>.+dqpm[*r%mp&D)Y VRV@VTiBACE>!h HTA&#P@&NHThwH rN(FV"PHEFCBHvprhH h &~H~D[a#}O{gt\DA-Ho"hG=gAIA@n _AZDZEpH 7HeFāZL RdB|0pL4DxpO'ȢAH d,C|P %{kUIz;}7!PGVIPx$dāxć8ć$| O(CV(C&(GV@V( P HXHAnHSJHf8WȦA"G`W AM Lp?!P"PDVFZ CHB|HEtHcHgUT6֘DmtZDji dJd*ddXBX ȀzHt HWG@l$ȆNȅ\ hȁ̅̆<ȃ,̀,d4ć&(h6hR(V(rh*B" HT.6IF$:JWJgd:tBVX^3؅]8m؆Br(T(X8S8.\8C8#8V( ZȄLܜx(TfhCthBrÌoh GZG&EV6h]XU)C&0Ҏ/ (B&X1X5N;b{"D$Xun&1JP.pr*(Hj("؅M؄(b\e,(^^d>.eV$f&̀F̀&b&ddLò) hD(5/~=i*Fp&rFhbUw8؁ ؀ݚ@-H pFH4hJ,?s8/<$hH6(B2( mwwg.|v$V|̀V̀fddՒjh_؄"B"VIVe*e"i*=hAh 'h,*\X+]382,l   0.QfB|@h*/hFZhNhnj6hGZ>8(q"؁A"rek|P8pveeNS؂-ثiد@bU.*d n 2?2eѺQ JQZVd Dt@ր`lovkS<2YX"qhfp#&`-w؅I< HJLN8؅qڇ̅h.ijzzyh !^h5nān$i#VLn.N->^y/uNO"x-&0.hwrƀ=&h2^ b>xK\Xr z:hƁ I>ā$lErD|G_ cU8닡/+Da PnX1>pI4Hsh5H%P|ȇM }ȵ(%h2 1ehQ1ۆQ!!eC!o$~L|fLu( whGtpmhAJ.)-XTdѺ5Yɮ#^Ւ  A w%UfTB5$>M\$G8^X9偕b%t dyt.*d>{-?舩sHEHDZp(XiXX+Ij q1YoqeṜ5LuBnLa゛ 2b X\ X'V]nQqeqS-ɄpqhFAX8.̈́ bDɌɕoܭ|+8S(8o)Ik^hMhV؂vhqݲ< XrX(Tm1.L]YFf؃a¡://!s8Y؄.L<*?X6.{*3낋" ^^u}>腝 X+X YォE\:ć+b5py(E+( ̓ꁃ+Î[̀))ٺl=gh]%8.8o w&XXsn#'~Ƽ[/*X X ("VqACtxX[؆aQH)xl^xjRz 8{p(솥宄?}CH 88sYhv-肮'C}bmW؆! ؘrXI X{uӘHyD~|.\ҡFāZp샦ڀBe"e+4bRP}׆rX2XAoW(Ae'X:*DžX',[>{vK XbX4X'XZ?gTXDZ( (G*_[pwH.FQ6'N[ $XT̒rUJ5jSWlrWԦViCG*t鲩GmzoϠA{ 5bĮQ/i-y7ȔX&UgD(Cu @n1bV)^aIIja2LȒe*iy*P`^" J ֒ VTVm uԫQM͚h–vv2˼R}r跓n~3f߸K\93>Q1li-_ҤP8}4P0%BY>bdϰA,6̳mKْm:dnٓ=ؓ]yؖfNI& ˆ"$""ʨ&*00.  4T8x/usr/home/fatal/pascal/xv.tiffCreated with The GIMPgworkspace-1.1.0/CODEOWNERS0000644000175000001440000000034713667375010014526 0ustar multixusers# These owners will be the default owners for everything in # the repo. Unless a later match takes precedence, # @global-owner1 and @global-owner2 will be requested for # review when someone opens a pull request. * @rmottola gworkspace-1.1.0/COPYING0000644000175000001440000004307613214346535014172 0ustar multixusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02111, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02111, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. gworkspace-1.1.0/ChangeLog0000644000175000001440000022346314576573476014733 0ustar multixusers2024-03-20 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/Resizer.m: use getPixel/setPixel to handle also 16bpp and non-planar images. A bit slower, but more portable code since it relies on NSBitmapImageRep. 2022-12-22 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.h * Inspector/ContentViewers/ImageViewer/ImageViewer.m: Cleanup checking of image consistency, remove lastPath. If the image isn't the current one, don't show it invalid: we suppose another resizer task is running in the background. 2022-12-21 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.m Try to handle failure of resized image better. 2022-10-06 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/ContentViewers/ImageViewer/Resizer.m store Image Path and get it back from the resizer and compare if it is current 2022-10-06 Riccardo Mottola * Inspector/ContentViewers/AppViewer/AppViewer.m * Inspector/ContentViewers/FolderViewer/FolderViewer.m * Inspector/ContentViewers/IBViewViewer/IBViewViewer.m * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/ContentViewers/NSColorViewer/NSColorViewer.m * Inspector/ContentViewers/NSRTFViewer/NSRTFViewer.m * Inspector/ContentViewers/NSTIFFViewer/NSTIFFViewer.m * Inspector/ContentViewers/PdfViewer/PdfViewer.m * Inspector/ContentViewers/RtfViewer/RtfViewer.m * Inspector/ContentViewers/SoundViewer/SoundViewer.m * Inspector/ContentViewersProtocol.h * Inspector/Contents.m remove displayLastPath and simplify, it was forced to NO anyway. 2022-07-12 Riccardo Mottola * FSNode/FSNIcon.h * FSNode/FSNIcon.m * FSNode/FSNIconsView.m * GWorkspace/FileViewer/GWViewerIconsPath.m remove index from FSNIconNameEditor, unused. 2022-07-11 Riccardo Mottola * FSNode/FSNBrowserMatrix.[h,m]: mouseFlags has to be NSUInteger coming from NSEvent modifierFlags. 2022-06-29 Riccardo Mottola * FSNode/FSNBrowserColumn.m * FSNode/FSNBrowserColumn.h Switch index to NSInteger 2022-06-29 Riccardo Mottola * FSNode/FSNBrowserColumn.m Cleanup of selection code, use proper NSInteger for Matrix access 2021-10-12 Riccardo Mottola * FSNode/FSNIcon.h * FSNode/FSNIcon.m If modern style is selected, draw the frame with a subtle alpha channel. 2021-09-10 Riccardo Mottola * GWorkspace/Preferences/DesktopPref.m * GWorkspace/TShelf/TShelfIcon.h * GWorkspace/TShelf/TShelfIcon.m * GWorkspace/TShelf/TShelfIconsView.h * GWorkspace/TShelf/TShelfIconsView.m * GWorkspace/TShelf/TShelfView.h * GWorkspace/TShelf/TShelfView.m * GWorkspace/TShelf/TShelfWin.h * GWorkspace/TShelf/TShelfWin.m: Also Tabbed Shelf shall respect single-click launch. 2021-09-09 Riccardo Mottola * GWorkspace/Desktop/Dock/Dock.h * GWorkspace/Desktop/Dock/Dock.m * GWorkspace/Desktop/Dock/DockIcon.h * GWorkspace/Desktop/Dock/DockIcon.m * GWorkspace/Desktop/GWDesktopManager.h * GWorkspace/Desktop/GWDesktopManager.m * GWorkspace/Preferences/DesktopPref.h * GWorkspace/Preferences/DesktopPref.m * GWorkspace/Resources/English.lproj/DesktopPref.gorm * GWorkspace/Resources/English.lproj/Localizable.strings * GWorkspace/Resources/French.lproj/Localizable.strings * GWorkspace/Resources/German.lproj/Localizable.strings * GWorkspace/Resources/Italian.lproj/Localizable.strings: Add single-click launch preference and apply it to the Dock. 2021-09-09 Riccardo Mottola * FSNode/FSNIcon.h * FSNode/FSNIcon.m * FSNode/FSNTextCell.m * GWorkspace/Desktop/GWDesktopIcon.m Allow the background od an Icon Label to be drawn and have Desktop Icons use this. 2021-05-21 Riccardo Mottola * configure * configure.ac substitute CC, CPP, CXX variables so subprojects pick them up 2021-05-08 Riccardo Mottola * Inspector/Tools.h * Inspector/Tools.h In findApplicationsForPaths return now early and a BOOL for success or failure finding applications. Use this return in activateForPaths to cleanup tool list if none were found and use this to enable tool display for directories. 2021-01-31 Riccardo Mottola * Inspector/ContentViewers/AppViewer/AppViewer.m Cleanup code and fix display of extensions without a valid icons. 2020-10-29 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.h * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/ContentViewers/ImageViewer/Resizer.h * Inspector/ContentViewers/ImageViewer/Resizer.m * Inspector/ContentViewersProtocol.h Extract ImageViewerProtocol, make ImageViewer adopt it, set the Proxy in the resizer explicitely and avoid using a serverConnection variable. 2020-03-11 Riccardo Mottola * GWorkspace/Thumbnailer/ImageThumbnailer/ImageThumbnailer.m Update Scaling code to Bilinear from PRICE. 2020-01-31 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/Resizer.m Update Scaling code to Bilinear from PRICE. 2018-12-08 Riccardo Mottola * FSNode/FSNode.m Do not set mount type because of file system type, just rely now on mounting/unmounting of volumes 2018-11-19 Riccardo Mottola * GWorkspace/Desktop/GWDesktopView.m (showMountedVolumes) Improve handling of added and removed volumes. 2018-08-01 Riccardo Mottola * FSNode/FSNodeRepIcons.m Fix inconsistent condition for [volumes containsObject: nodepath] * GWorkspace/Desktop/GWDesktopManager.h * GWorkspace/Desktop/GWDesktopManager.m Track mounted volumes by checking additions/removals instead of modification of mount points. 2018-07-06 Riccardo Mottola * Inspector/ContentViewers/AppViewer/AppViewer.m Do not lookup the icon for empty names, reset icon if none is found. 2018-03-13 Riccardo Mottola * GWorkspace/Resources/Japanese.lproj/Localizable.strings Add Japanese locale by Chubei Nakagawa 2018-01-25 Riccardo Mottola * GWMetadata/gmds/mdextractor/mdextractor.m * Tools/fswatcher/fswatcher-inotify.m * Tools/fswatcher/fswatcher.m Clean up unused is_daemon static var. 2018-01-24 Riccardo Mottola * GWMetadata/MDFinder/MDFinder.h * GWMetadata/MDFinder/MDFinder.m Fix warnings: make NSMenuItem follow protocol. * Operation/FileOpInfo.m Fix string format warning. * GWMetadata/gmds/mdextractor/mdextractor.m Return correct object in case of exception! * GWorkspace/TShelf/TShelfView.m Minor cleanup and compare pointer against nil and not NO. 2018-01-17 Riccardo Mottola * Tools/ddbd/ddbd.m Fix allocated class type. 2018-01-17 Riccardo Mottola * GWorkspace/Finder/Finder.m Fix allocated class type. 2018-01-11 Riccardo Mottola * FSNode/configure * FSNode/configure.ac Remove sub-folder configures and merge into top-level * GWorkspace/configure.ac * GWorkspace/configure Remove sub-folder configures and merge into top-level 2016-06-07 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.h * Inspector/ContentViewers/ImageViewer/ImageViewer.m Do not watch for the connection dieing, we suppose it stable being local now. 2016-06-01 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/ContentViewers/ImageViewer/Resizer.m Pass data directly without Archiving/Unarchiving. 2016-06-01 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.h * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/ContentViewers/ImageViewer/Resizer.h * Inspector/ContentViewers/ImageViewer/Resizer.m Use DO and connections to communicate to thread. 2016-06-01 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/ImageViewer.h * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/ContentViewers/ImageViewer/Resizer.m Partially revert, but fix and complete using a class instead of a separate Task, Rename Resizer to ImageResizer to avid class name clash. 2016-04-28 Riccardo Mottola * GWorkspace/GWorkspace.m Make disk mount available also without an active desktop. 2016-04-21 Riccardo Mottola * GWorkspace/Thumbnailer/ImageThumbnailer/ImageThumbnailer.m * Inspector/ContentViewers/ImageViewer/resizer/Resizer.m Generate thumbnail and preview only from the first available Bitmap representation: this means for multipage tiffs that the first page is used. Works around unidentified issues in certain setups where images failed to display. A better solution might be needed in the future in GUI itself. 2016-04-13 Riccardo Mottola * FSNode/FSNodeRepIcons.m Use different cache keys for icons and icons with link badge. Remove fail-over case which should not happen and Log a warning instead. 2016-04-12 Riccardo Mottola * GWorkspace/Desktop/Dock/Dock.m Use numeric search to sort icons index array. * FSNode/Resources/Images/HardDisk.tiff New icon by Bertrand 2016-04-07 Riccardo Mottola * FSNode/FSNodeRep.m Cleanup and use NSUInteger * FSNode/FSNBrowser.m * FSNode/FSNBrowserCell.m * FSNode/FSNBrowserColumn.m * FSNode/FSNIcon.m * FSNode/FSNIconsView.m * FSNode/FSNListView.m * FSNode/FSNPathComponentsViewer.m * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m * GWorkspace/Desktop/GWDesktopView.m * GWorkspace/FileViewer/GWViewerIconsPath.m * GWorkspace/FileViewer/GWViewerShelf.m * GWorkspace/History/History. Refactor heighOfFont to heightOfFont 2016-04-06 17:41-EDT Gregory John Casamento * GWorkspace/GWorkspace.m: Add exception handler when loading help file. Still print out issue, but do not crash and end up in an inconsistent state. 2016-03-24 Riccardo Mottola * GWorkspace/Finder/Modules/FModuleAnnotations/FModuleAnnotations.m * GWorkspace/Finder/Modules/FModuleContents/FModuleContents.m * GWorkspace/Finder/Modules/FModuleCrDate/FModuleCrDate.m * GWorkspace/Finder/Modules/FModuleKind/FModuleKind.m * GWorkspace/Finder/Modules/FModuleModDate/FModuleModDate.m * GWorkspace/Finder/Modules/FModuleName/FModuleName.m * GWorkspace/Finder/Modules/FModuleOwner/FModuleOwner.m * GWorkspace/Finder/Modules/FModuleSize/FModuleSize.m * GWorkspace/Finder/Modules/FinderModulesProtocol.h use NSInteger and NSComparisonResult instead of int. * Tools/searchtool/searchtool.m Clean up code and make it more robust. 2016-03-23 Riccardo Mottola * GWorkspace/Desktop/GWDesktopManager.m Enable thumbnail generation also for the desktop 2016-03-22 Riccardo Mottola * GWorkspace/GWorkspace.h * GWorkspace/GWorkspace.m Fix NSInteger vs. int 2016-03-15 Riccardo Mottola * GWorkspace/Preferences/DesktopPref.m Fix column vs. row selection. 2016-03-10 Riccardo Mottola * Inspector/aclocal.m4 (AC_CHECK_PDFKIT) Fix redundant [] * Inspector/configure.ac Inherit CC and CXX compiler settings. 2016-03-10 Riccardo Mottola * FSNode/FSNodeRepIcons.m (iconOfSize: forNode:) Traverse links to get thumbnails inside linked folders, mark direct symlinked folders and images with a link icon. 2016-03-10 Wolfgang Lux * Inspector/aclocal.m4 (AC_CHECK_PDFKIT): Fix linking argument order in configure test. 2016-03-07 Riccardo Mottola * FSNode/FSNode.m Localize the node name only if it is a directory. 2016-03-02 Riccardo Mottola * Inspector/Attributes.m Use FSNode's name, not just the last path component. * FSNode/FSNode.m Localize the name of the node (perhaps this should be done selectively?). 2016-03-02 Riccardo Mottola * FSNode/FSNFunctions.m Do not retain a string constant. 2016-02-26 Riccardo Mottola * GWorkspace/Desktop/Dock/DockIcon.m * GWorkspace/Desktop/GWDesktopManager.h * GWorkspace/Desktop/GWDesktopManager.m * GWorkspace/Desktop/GWDesktopView.h * GWorkspace/Desktop/GWDesktopView.m Implement unlock methods and use them when unmounting fails. 2016-02-23 Riccardo Mottola * GWorkspace/GWorkspace.m Quit Recycler.app when activating desktop. 2016-02-22 Riccardo Mottola * GWorkspace/GWorkspace.m Allow disk checking also without desktop. 2016-02-22 Riccardo Mottola * GWorkspace/Fiend/FiendLeaf.m * GWorkspace/GWorkspace.m * GWorkspace/WorkspaceApplication.m * Recycler/Recycler.m Update tag of performFileOperation from int to NSInteger as per current API. 2016-02-17 Riccardo Mottola * GWorkspace/FileViewer/GWViewersManager.m Listen to NSWorkspaceDidMountNotification and NSWorkspaceDidUnmountNotification and update FSNodeRep accordingly. 2016-02-17 Riccardo Mottola * FSNode/FSNodeRep.m * GWorkspace/GWorkspace.m Self initialize FSNodeRep with removable medias and don't go through GWorkspace which used a non-API method. 2016-02-16 Riccardo Mottola * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m Delete custom mountNewRemovableMedia implementation. 2016-02-15 Riccardo Mottola * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m Delete mountedRemovableMedia custom implementation. 2016-02-13 Riccardo Mottola * FSNode/FSNodeRep.m Delete unmountAndEjectDeviceAtPath custom implementation and use AppKit's one. 2016-02-12 Riccardo Mottola * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m Remove mountedLocalVolumePaths already implemented in NSWorkspace. * GWorkspace/Dialogs/RunExternalController.h * GWorkspace/Dialogs/RunExternalController.m Localize panel labels and titles. * GWorkspace/Resources/English.lproj/RunExternal.gorm Make labels larger. 2016-02-12 Riccardo Mottola * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m Remove getFileSystemInfoForPath of category already implemented in class. 2016-02-10 Riccardo Mottola * GWorkspace/Preferences/HiddenFilesPref.m Localize panel title. 2016-02-10 Riccardo Mottola * GWorkspace/Preferences/HiddenFilesPref.m Clean up types as well as certain key localizations. 2016-02-02 Riccardo Mottola * GWorkspace/Finder/Modules/FModuleSize/FModuleSize.m Fix spelling error. 2016-01-27 Riccardo Mottola * GWorkspace/Resources/English.lproj/Finder.gorm * Workspace/Finder/Finder.m Fix "recursive" button translation. 2016-01-26 Riccardo Mottola * GWorkspace/Preferences/BrowserViewerPref.m Fix key to match correct spelling. 2016-01-20 Riccardo Mottola * FSNode/FSNBrowser.m * FSNode/FSNFunctions.h * FSNode/FSNFunctions.m * FSNode/FSNIconsView.m * FSNode/FSNListView.m * GWorkspace/FileViewer/GWViewerIconsPath.m Group controlTextDidEndEditing in FSFunctions in utility functions and use bundle-localized strings, use these functions in all places. 2016-01-18 Riccardo Mottola * FSNode/FSNListView.m * GWMetadata/MDKit/MDKWindow.m * GWorkspace/Desktop/Dock/Dock.m * GWorkspace/Finder/Finder.m * GWorkspace/Finder/LiveSearch/LSFEditor.m indexOfObjectIdenticalTo returns a NSUInteger 2016-01-18 Riccardo Mottola * FSNode/FSNBrowser.m * FSNode/FSNIconsView.m * FSNode/FSNListView.m * FSNode/FSNode.m Localizations inside the Framework 2016-01-18 Riccardo Mottola * GWorkspace/Desktop/GWDesktopView.m Fix reading of defaults. 2016-01-18 Riccardo Mottola * FSNode/ExtendedInfo/Role/ExtInfoRole.m * FSNode/ExtendedInfo/Role/GNUmakefile.in Localizations inside the Bundle. * FSNode/FSNListView.m * FSNode/FSNodeRep.m * FSNode/GNUmakefile.in Localizations inside the Framework 2016-01-16 Riccardo Mottola * FSNode/FSNodeRep.m Listen to GSThemeDidActivateNotification to detect a theme change and refetch all cached icons. 2016-01-14 Riccardo Mottola * GWorkspace/Preferences/DesktopPref.h * GWorkspace/Preferences/DesktopPref.m * GWorkspace/Resources/English.lproj/DesktopPref.gorm * GWorkspace/Resources/English.lproj/Localizable.strings * GWorkspace/Resources/French.lproj/Localizable.strings * GWorkspace/Resources/German.lproj/Localizable.strings * GWorkspace/Resources/Italian.lproj/Localizable.strings Improve translation of Desktop Preference, move items, add strings. 2016-01-11 Riccardo Mottola * GWorkspace/Thumbnailer/GWThumbnailer.m (makeThumbnailForPath) Use actual pixel dimensions and not size, or resolutions different than 72dpi will make wrong thumbnails. 2016-01-07 Riccardo Mottola * Inspector/Attributes.m * GWorkspace/Resources/English.lproj/Localizable.strings * GWorkspace/Resources/French.lproj/Localizable.strings * GWorkspace/Resources/German.lproj/Localizable.string Localize Owner strong to Owner_short 2016-01-05 Riccardo Mottola * GWorkspace/FileViewer/GWViewersManager.m count loops to NSUInteger 2016-01-01 Riccardo Mottola * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m Make nc ivar local instead. 2015-12-04 Riccardo Mottola * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m removeThumbnails, makeThumbnails: execute work in separate thread. Add pathsInProcessing to keep track of which paths are in process and do not allow to make/remove thumbnails on them. 2015-12-04 Riccardo Mottola * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m (writeDictToFile) Lock critical section. 2015-12-03 Riccardo Mottola * FSNode/FSNodeRep.h * FSNode/FSNodeRep.m * FSNode/FSNodeRepIcons.m Remove unused workspace icon. 2015-12-03 Riccardo Mottola * FSNode/FSNIcon.m * FSNode/FSNPathComponentsViewer.m Use NSBrowserCell image for branch image, so that it uses the current theme. * GWorkspace/GWorkspace.m * GWorkspace/Thumbnailer/GWThumbnailer.m In the icon changed notification, pass in side the info object only the actually created/deleted icons: do not put an empty object with the missing ones. Saves space in the info object. 2015-12-02 Riccardo Mottola * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m Factor out writing thumbnail dictionary in a common method. 2015-12-02 Riccardo Mottola * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m * GWorkspace/FileViewer/GWViewer.m Make the thumbnailer a (releasable) singleton and instantiate it through sharedThumbnailer. It may be released, but if it exists, it is a singleton. 2015-11-19 Riccardo Mottola * FSNode/FSNodeRep.m Use constants for common images from GNUstep, do not provide those icons. 2015-11-18 Riccardo Mottola * FSNode/FSNodeRep.m Use pathForImageResource: instead of pathForResource 2015-11-07 Riccardo Mottola * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m Define maximum icon size to 64. * GWorkspace/Thumbnailer/ImageThumbnailer/GNUmakefile.preamble * GWorkspace/Thumbnailer/ImageThumbnailer/ImageThumbnailer.h * GWorkspace/Thumbnailer/ImageThumbnailer/ImageThumbnailer.m Cleanup header import and protocol redefinition. 2015-11-06 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m Simplify parameters for direct call. 2015-11-06 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.h * GWorkspace/FileViewer/GWViewer.m * GWorkspace/Thumbnailer/GWThumbnailer.h * GWorkspace/Thumbnailer/GWThumbnailer.m Call makre and remove thumbnails directly and not in a service, remove the corresponding service and just instantiate the class. 2015-11-05 Riccardo Mottola * Tools/thumbnailer * GWorkspace/Thumbnailer Moved thumbnailer from Tools to GWorkspace. 2015-11-02 Riccardo Mottola * GWorkspace/GWorkspace.m Add 64px icons, remove 44 015-10-22 Riccardo Mottola * Tools/thumbnailer/ImageThumbnailer/ImageThumbnailer.m Fix resize nearest neigbour algorithm by adapting PRICE's scale one. The code had problems with different bytes per samples and alpha, which are now preserved. 2015-10-16 Riccardo Mottola * Inspector/ContentViewers/ImageViewer/resizer/Resizer.m Fix resize nearest neigbour algorithm by adapting PRICE's scale one. The code had problems with different bytes per samples and alpha, which are now preserved. 2015-10-15 Riccardo Mottola * FSNode/FSNIconsView.m Use fabsf() with float argument 2015-10-12 Riccardo Mottola * GWorkspace/FileViewer/GWViewersManager.m (viewerForNode) * GWorkspace/GWorkspace.m Remove unnused parameter closeOldViewer (was always nil) 2015-10-12 Riccardo Mottola * Operation/Operation.m Remove unused variable. * GWorkspace/FileViewer/GWViewersManager.m Fix warnings of NO vs. nil 2015-09-16 Riccardo Mottola * GWorkspace/GWorkspace.m * GWorkspace/config.h.in * GWorkspace/configure * GWorkspace/configure.ac Add check for sys/resource.h 2015-05-26 Riccardo Mottola * Operation/Operation.m * Operation/Resources/English.lproj/Localizable.strings Verify and protect certain directories from file operations. 2015-05-26 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m Regenerate and propagate selection on windows key change, even if it did not change inside the viewer. 2015-05-26 Riccardo Mottola * Tools/fswatcher/fswatcher-inotify.h * Tools/fswatcher/fswatcher-inotify.m Cleanup and implement --auto and --daemon like fswatcher.m 2015-05-26 Riccardo Mottola * Tools/fswatcher/fswatcher-inotify.h Use linux inotify, as suggested by Adrian Bunk * Tools/fswatcher/local_inotify.h * Tools/fswatcher/local_inotify_syscalls.h Deleted local copy 2015-05-12 Riccardo Mottola * configure.ac pick up gnustep make configured CC, CPP, CXX and check they are consistent with how make was configured * configure regenerated 2014-12-30 Riccardo Mottola * Recycler/main.m * GWorkspace/GWorkspace.m Fix warnings: update code to use id and not NSMenuItem* 2014-12-29 Riccardo Mottola * Operation/Operation.m (rectForFileOpWindow) Fix off-by-one array access, return NSZeroRect immediately if no other operations are running. 2014-11-16 Riccardo Mottola * Operation/FileOpInfo.m Set root object to nil, fixes memory leak of FileOpInfo itself. 2014-09-22 Riccardo Mottola * Operation/FileOpInfo.h * Operation/FileOpInfo.m Cleanup. 2014-09-22 Riccardo Mottola * Operation/FileOpInfo.h * Operation/FileOpInfo.m Fix memory leak on pause, allow stopping of operation also when paused. 2014-10-21 Riccardo Mottola * Operation/FileOpInfo.h Match protocol to actual class, making endOperation synchronous. * Operation/FileOpInfo.m Cleanup NSConnectionDidDieNotification when thread exits, other clean ups. 2014-10-13 18:58-EDT Gregory John Casamento * Operation/FileOpInfo.m: Set executor to nil when thread exits. 2014-09-10 Riccardo Mottola * Operation/FileOpInfo.m Extend thread fix to Trash, move, link, duplicate. 2014-09-10 Riccardo Mottola * Operation/FileOpInfo.h * Operation/FileOpInfo.m Store information about operation and processed file in the caller, re-detach the operation executor thread when resuming from pause. Fix doCopy pause/resume this way. 2014-07-01 Riccardo Mottola * FSNode/FSNBrowser.m * FSNode/FSNIconsView.m * FSNode/FSNListView.m * FSNode/FSNode.m * GWorkspace/Desktop/Dock/DockIcon.m * GWorkspace/Desktop/GWDesktopView.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewerShelf.m * GWorkspace/Finder/Finder.m * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/SearchResults/SearchResults.m * GWorkspace/GWorkspace.m * GWorkspace/Preferences/OperationPrefs.m * GWorkspace/WorkspaceApplication.m * Operation/FileOpInfo.m * Operation/Operation.m * Recycler/RecyclerIcon.m * Tools/ddbd/ddbd.m Replaced operation constant values with their true NSWorkspace*Operation constants 2014-04-30 Riccardo Mottola * FSNode/FSNIcon.m Try to guess the best of [NSHost names] and not just name. 2013-12-18 Riccardo Mottola * Recycler/RecyclerIcon.m Uniform with code from DockIcon so that also the standard Recycler may finally unmount volumes! 2013-12-12 Riccardo Mottola * GWorkspace/GWorkspace.h * GWorkspace/GWorkspace.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewersManager.m * GWMetadata/MDKit/MDKWindow.m Use specific MAX_FILES_TO_OPEN_DIALOG instead of OPEN_MAX, which is the maximum number of open files 2013-12-12 Riccardo Mottola * FSNode/FSNodeRep.m (mountedVolumes) use setmntent() and _PATH_MOUNTED to retrieve mounted volumes 2013-12-01 Riccardo Mottola * FSNode/FSNBrowserCell.m Optimize drawing code, calculate dot clipping there and not inside the clipping methods. 2013-11-26 Riccardo Mottola * FSNode/FSNBrowserCell.h * FSNode/FSNBrowserCell.m Reinstantiate special infoFont, but only as local variable and not ivar. 2013-11-25 Riccardo Mottola * FSNode/FSNBrowserCell.h * FSNode/FSNBrowserCell.m * FSNode/FSNTextCell.h * FSNode/FSNTextCell.m Clean up IMP caching, cleaner names and instance variables instead of statics. 2013-11-25 Riccardo Mottola * FSNode/FSNBrowserCell.m use fontAttr only inside (cutTitle:toFitWidth:) and remove it as a static-initialized variable. * FSNode/FSNTextCell.h * FSNode/FSNTextCell.m Remove unused dtslenght. 2013-11-25 Riccardo Mottola * FSNode/FSNBrowserCell.h * FSNode/FSNBrowserCell.m Do not use a separate infoFont, but just NSCell's font. 2013-11-24 Sebastian Reitenbach * Apps_wrapper, add wrapper for opennx 2013-11-20 Riccardo Mottola * FSNode/FSNBrowserCell.m Remove unused dtslenght. 2013-11-09 Riccardo Mottola * FSNode/FSNBrowser.h * FSNode/FSNBrowser.m * FSNode/FSNIconsView.h * FSNode/FSNIconsView.m * FSNode/FSNListView.h * FSNode/FSNListView.m * FSNode/FSNodeRep.h * GWorkspace/Desktop/GWDesktopView.m * GWorkspace/GWorkspace.h * GWorkspace/GWorkspace.m * Operation/Operation.h * Operation/Operation.m * Recycler/Recycler.h * Recycler/Recycler.m * Recycler/RecyclerView.h * Recycler/RecyclerView.m Rename Cutted to Cut. 2013-11-08 Riccardo Mottola * FSNode/FSNBrowser.m * FSNode/FSNIconsView.m * FSNode/FSNListView.m * GWorkspace/FileViewer/GWViewerIconsPath.m controlTextDidEndEditing: do not check for write permission: you can change a filename without! 2013-11-08 Riccardo Mottola * GWorkspace/FileViewer/GWViewerIconsPath.m (controlTextDidEndEditing) Call updateNameEditor instead of just stopRepNameEditing to make control editable again after the error alert. 2013-11-01 Riccardo Mottola * FSNode/FSNBrowserCell.m * GWMetadata/MDKit/MDKResultsCategory.m * GWMetadata/MDKit/MDKWindow.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/Finder/Finder.m * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/SearchResults/SearchResults.m * GWorkspace/TShelf/TShelfIcon.m * Inspector/Annotations.m * Inspector/Attributes.m * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/Contents.m * Operation/FileOpInfo.m Revert horrible PRIuPTR and change to unsinged long cast style. 2013-10-30 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.h * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewersManager.h * GWorkspace/FileViewer/GWViewersManager.m * GWorkspace/GWorkspace.m Change browser type to an enumerated type from String and update menus accordingly. 2013-10-27 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m Optimize by changing the selection only if it really changed. 2013-10-25 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m No not set first responder explicitely, let GUI handle that. (fixes infinite loop in panels while renaming files) 2013-10-20: Sebastian Reitenbach * GWMetadata/MDFinder/MDFinder.[h|m] * GWMetadata/Preferences/StartAppWin.[h|m] * GWorkspace/Dialogs/StartAppWin.[h|m] * Inspector/ContentViewers/SoundViewer/SoundViewer.m * Recycler/Dialogs/StartAppWin.[h|m] NSProgressIndicator uses doubles, so GWorkspace should use doubles too * FSNode/FSNBrowserCell.m * FSNode/FSNIcon.m * GWMetadata/MDKit/MDKQuery.m * GWMetadata/MDKit/MDKResultsCategory.m * GWMetadata/MDKit/MDKWindow.m * GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/HtmlExtractor.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewersManager.m * GWorkspace/Finder/Finder.m * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/SearchResults/SearchResults.m * GWorkspace/GWFunctions.m * GWorkspace/TShelf/TShelfIcon.m * Inspector/Annotations.m * Inspector/Attributes.m * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Inspector/Contents.m * Inspector/Functions.m * Inspector/TimeDateView.m * Operation/FileOpInfo.m * Tools/ddbd/DDBMDStorage.m fix warnings emitted by clang, mostly format strings 2013-10-18 Riccardo Mottola * GWorkspace/Finder/SearchResults/SearchResults.h * GWorkspace/Finder/SearchResults/SearchResults.m * Inspector/ContentViewers/ImageViewer/ImageViewer.h * Inspector/ContentViewers/ImageViewer/ImageViewer.m Update types to NSUInteger and NSTimeInterval 2013-09-25 Riccardo Mottola * Tools/thumbnailer/main.m * Tools/lsfupdater/lsfupdater.m * Tools/fswatcher/fswatcher.m * Inspector/Functions.m Warning fixes. 2013-09-17 Riccardo Mottola * GWorkspace/GWorkspace.m Change [isa class] to [self class] 2013-09-12 Riccardo Mottola * GWorkspace/Desktop/GWDesktopManager.m Do not propagate file change notification to desktop or dock if they are not active. 2013-09-11 Riccardo Mottola * Operation/Operation.h * Operation/Operation.m operation reference updated to NSUInteger and others. 2013-08-27 Riccardo Mottola * FSNode/FSNFunctions.m * FSNode/FSNode.m Fix warning and call from sizeDescription sizeDescription() avoiding code duplication. Remove sign info useless with an unsigned parameter. 2013-08-24 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.h * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewersManager.h * GWorkspace/FileViewer/GWViewersManager.m * GWorkspace/GWorkspace.m Change key assignment and management for Viewers, set it on creation of a new viewer and store it inside the viewer-array and not separately. 2013-04-22 Riccardo Mottola * GWorkspace/Preferences/BrowserViewerPref.h * GWorkspace/Preferences/BrowserViewerPref.m * GWorkspace/Resources/English.lproj/BrowserViewerPref.gorm Clean up Browser preferences code and allow a max. width of 362. 2013-04-14 Riccardo Mottola * GWorkspace/Resources/English.lproj/Help/SViewer.rtfd * GWorkspace/FileViewer/GWSpatialViewer.h * GWorkspace/FileViewer/GWSpatialViewer.m Deleted * FSNode/FSNBrowser.m * FSNode/FSNodeRep.m * GWorkspace/Desktop/GWDesktopManager.h * GWorkspace/Desktop/GWDesktopManager.m * GWorkspace/Desktop/GWDesktopView.m * GWorkspace/FileViewer/GWViewer.h * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewerBrowser.m * GWorkspace/FileViewer/GWViewerIconsView.m * GWorkspace/FileViewer/GWViewerListView.m * GWorkspace/FileViewer/GWViewerScrollView.m * GWorkspace/FileViewer/GWViewerWindow.h * GWorkspace/FileViewer/GWViewerWindow.m * GWorkspace/FileViewer/GWViewersManager.h * GWorkspace/FileViewer/GWViewersManager.m * GWorkspace/GNUmakefile.in * GWorkspace/GWorkspace.m Removed spatial viewer support. 2013-04-03 Riccardo Mottola * Operation/FileOpInfo.m * Operation/FileOpInfo.h NSInteger fix. 2013-04-03 Riccardo Mottola * Operation/FileOpInfo.m (fileManager shouldProceedAfterError) Decode path from error correctly (Thanks Sebastian) 2013-03-26 Riccardo Mottola * GWMetadata/MDFinder/GNUmakefile.preamble Fix so that DBKit and MDKit are resolved from the build tree and not the installed versions. 2013-03-21 Riccardo Mottola * FSNode/FSNListView.m NSInteger fixes. 2013-03-20 Riccardo Mottola * GWMetadata/MDKit/MDKAttributeEditor.h Fix protocol warning. 2013-03-20 Riccardo Mottola * Inspector/Annotations.m * Inspector/Contents.m * Inspector/Functions.h Remove MAKE_LOCALIZED_LABEL and use MAKE_LABEL 2013-03-18 Riccardo Mottola * GWMetadata/MDKit/MDKAttributeEditor.h Fix protocol warning. 2013-03-13 Riccardo Mottola * GWorkspace/GWFunctions.[h,m] Remove addItemToMenu and MAKE_LOCALIZED_LABEL since they make using make_strings impossible. 2013-03-13 Riccardo Mottola * GWorkspace/GWorkspace.m Replace addItemToMenu() with standard addItemWithTitle 2013-03-12 Riccardo Mottola * GWorkspace/FileViewer/GWViewerIconsPath.h Fix warning about missing protocol 2013-03-12 Riccardo Mottola * Tools/fswatcher/fswatcher.m NSUInteger transition and indentation. 2013-03-12 Riccardo Mottola * Tools/fswatcher/fswatcher.h * Tools/fswatcher/fswatcher.m Fix typo. 2013-03-12 Riccardo Mottola * FSNode/FSNBrowser.h Fix warning about missing protocol 2013-03-12 Riccardo Mottola * GWorkspace/WorkspaceApplication.m NSUInteger transition and cleanups. 2013-03-12 Riccardo Mottola * GWorkspace/WorkspaceApplication.m (startLogout) Add logout timer to the Modal loop. 2013-03-10 Riccardo Mottola * GWorkspace/GWorkspace.m Change Yes/No in quit panel to make it consistent with logout. 2013-03-10 Riccardo Mottola * GWorkspace/Finder/LiveSearch/LSFolder.h * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/SearchResults/SearchResults.h * GWorkspace/Finder/SearchResults/SearchResults.m NSTimeInterval transition * GWorkspace/Finder/SearchResults/SearchResults.h * GWorkspace/Finder/SearchResults/SearchResults.m NSDragOperation 2013-03-10 Sebastian Reitenbach * Tools/searchtool/searchtool.m Indentation 2013-03-09 Riccardo Mottola * GWorkspace/Finder/Finder.m NSUInteger transition. 2013-03-08 Riccardo Mottola * GWorkspace/GWorkspace.m (setSelectedPaths) Set the Finder to selection only to directories and not files. 2013-03-08 Riccardo Mottola * GWorkspace/GWorkspace.m Trap exception. 2013-03-08 Riccardo Mottola * GWorkspace/GWorkspace.m Shut down the recycler after removign the connection observer. 2013-03-06 Riccardo Mottola * Tools/fswatcher/fswatcher.m (isDotFile) Replace with version of MDIndexing 2013-03-06 Riccardo Mottola * GWorkspace/GWorkspace.m Always shut down the Recycler on exit. 2013-03-06 Riccardo Mottola * Tools/fswatcher/fswatcher.m Handle is_auto and is_daemon like gdnc. 2013-03-04 Riccardo Mottola * FSNode/FSNListView.h NSUInteger and NSInteger transition. 2013-03-04 Riccardo Mottola * FSNode/FSNIconsView.h * FSNode/FSNListView.h Fix warnings about not implemented protocols. 2013-02-28 Riccardo Mottola * GWMetadata/gmds/gmds/gmds.m Clean up subtask creating and passed arguments, remove special "--from-gmds" parameter and rely only on --daemon. 2013-02-28 Riccardo Mottola * GWMetadata/MDKit/MDKResultCell.m Remove unused variable. 2013-02-22 Sebastian Reitenbach * Tools/ddbd/ddbd.m reuse values already saved in args 2013-02-21 Riccardo Mottola * Tools/ddbd/ddbd.m NSUInteger transition 2013-02-21 Riccardo Mottola * Tools/ddbd/DDBPathsManager.m * Tools/ddbd/ddbd.m Remove unneeded creation of autorelease pools or in case move them to the respective manager only. 2013-02-20 Riccardo Mottola * GWMetadata/MDKit/MDKWindow.m (isDotFile) * GWMetadata/gmds/mdextractor/mdextractor.m (isDotFile) Total rewrite taken from MDIndexing 2013-02-20 Riccardo Mottola * GWMetadata/Preferences/MDIndexing.m (isDotFile) Fix exit condition. 2013-02-20 Riccardo Mottola * GWMetadata/MDKit/MDKWindow.h * GWMetadata/MDKit/MDKWindow.m NSInteger, NSUInteger and CGFloat transition 2013-02-17 Riccardo Mottola * Tools/ddbd/ddbd.m Do not release the connection obtained with defaultConnection 2013-02-14 Riccardo Mottola * FSNode/FSNodeRep.m Make sure the user Library dir exists 2013-02-14 Riccardo Mottola * GWorkspace/TShelf/TShelfIcon.m * GWorkspace/TShelf/TShelfIconsView.m * GWorkspace/TShelf/TShelfPBIcon.m Change NSDragOperationAll to NSDragOperationEvery 2013-02-14 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m CGFloat and NSUInteger transition. 2013-02-14 Riccardo Mottola * FSNode/FSNBrowserCell.h * FSNode/FSNBrowserCell.m * FSNode/FSNIcon.h * FSNode/FSNIcon.m * FSNode/FSNListView.m * FSNode/FSNodeRep.h NSUInteger transition. 2013-02-14 Riccardo Mottola * GWorkspace/TShelf/TShelfIconsView.m CGFloat and NSUInteger transition. 2013-02-14 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m CGFloat and NSUInteger transition. 2013-02-13 Riccardo Mottola * GWMetadata/Preferences/MDIndexing.m (isDotFile) Total rewrite. 2013-02-13 Riccardo Mottola * GWMetadata/MDKit/MDKQuery.[h,m] * GWMetadata/MDKit/MDKAttributeEditor.m * GWMetadata/MDKit/MKDAttributeChooser.m * GWMetadata/gmds/gmds/gmds.m Rename DATE to DATE_TYPE to avoid conflict on windows with wtypes.h 2013-02-12 Riccardo Mottola * GWorkspace/TShelf/TShelfPBIcon.[h,m]: NSUInteger transition. * GWorkspace/TShelf/TShelfIconsView.m (iconCompare, pbiconCompare) New compare methods to take in account NSNotFound 2013-02-12 Riccardo Mottola * GWMetadata/Preferences/MDIndexing.m Transition to CGFloat and NSUInteger. 2013-02-08 Sebastian Reitenbach * GWMetadata/MDFinder/MDFinder.m * Recycler/Recycler.m move to newer API for applicationShouldTerminate 2013-02-08 Riccardo Mottola * GWorkspace/TShelf/TShelfIcon.m Fix -1 to be NSNotFound to complete transition to unsigned. 2013-02-08 Riccardo Mottola * GWorkspace/Fiend/Fiend.m (renameCurrentLayer, addLayer) Release dialog later and don't autorelease it too early. 2013-02-08 Riccardo Mottola * GWMetadata/Preferences/Resources/English.lproj/MDIndexing.gorm/ Slight cleanup * DBKit/DBKBTree.m Fix ARP leak 2013-02-07 Riccardo Mottola * GWMetadata/MDKit/SQLite.h (finalize) * GWMetadata/MDKit/SQLite.m (finalize) Rename finalize to finalizeStatement to avoid clash with GC [NSObejct finalize+ method. 2013-02-07 Sebastian Reitenbach * GWMetadata/gmds/gmds/gmds.m * GWMetadata/gmds/mdextractor/mdextractor.m shutup clang warning about constant strings in NSLog * Tools/ddbd/DDBDirsManager.m * Tools/ddbd/MDModules/MDModuleAnnotations/MDModuleAnnotations.m * Tools/ddbd/DDBPathsManager.m even more shutup to clang * GWorkspace/TShelf/TShelfIconsView.m * Inspector/Attributes.h even more shutup to clang * FSNode/FSNBrowserColumn.m * FSNode/FSNBrowserMatrix.m * (unsigned) int to NS(U)Integer conversion * GWMetadata/Preferences/MDIndexing.m more (unsigned) int to NS(U)Integer conversion * GWorkspace/Desktop/Dock/DockIcon.m * Inspector/Attributes.m * remove unused variables * GWorkspace/Desktop/GWDesktopWindow.m * GWorkspace/Desktop/XBundles/XDesktopWindow/XDesktopWindow.m more (unsigned) int to NS(U)Integer conversion * GWorkspace/FileViewer/GWViewerBrowser.m * GWorkspace/FileViewer/GWViewerSplit.m more (unsigned) int to NS(U)Integer conversion * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/Finder.m * GWorkspace/Finder/SearchResults/SearchResults.m more (unsigned) int to NS(U)Integer conversion * GWorkspace/History/History.m * GWorkspace/Preferences/DesktopPref.m * GWorkspace/Preferences/HiddenFilesPref.m more (unsigned) int to NS(U)Integer conversion 2013-01-27 Riccardo Mottola * FSNode/FSNIcon.m * GWorkspace/TShelf/TShelfIcon.m Simplify code and fix crash due to previous autorelease fix. 2013-01-25 Riccardo Mottola * Tools/ddbd/ddbd.m Fix memory leak by removing unnecessary retain to self. 2013-01-25 Riccardo Mottola * DBKit/DBKitFixLenRecordsFile.m Do not use deallocated instance ivars. 2013-01-25 Riccardo Mottola * FSNode/FSNIcon.m * GWorkspace/TShelf/TShelfIcon.m Fix ARP memory leak. 2013-01-21 Riccardo Mottola * GWorkspace/TShelf/TShelfIconsView.m Fix warning and rewrite cycle cuinting upwards due to unsigned. 2013-01-21 Riccardo Mottola * GWMetadata/MDKit/MDKQuery.m Initialize value. 2013-01-20 Riccardo Mottola * Desktop/GWDesktopManager.m (loadXWinBundle) Do not return a retained object. 2013-01-20 Riccardo Mottola * GWorkspace/FileViewer/GWViewersManager.h * GWorkspace/FileViewer/GWViewersManager.m Rename newViewerOfType to viewerOfType since it does not return a new retained object. * GWorkspace/FileViewer/GWSpatialViewer.m * GWorkspace/GWorkspace.m Update accordingly. 2013-01-20 Riccardo Mottola * Tools/ddbd/ddbd.m (userMetadataForPath:, annotationsForPath:) Do not retain returned value. 2013-01-17 Riccardo Mottola * GWorkspace/Finder/SearchResults/SearchResults.m * Inspector/Attributes.m * Operation/FileOpInfo.m * Tools/ddbd/ddbd.m Fix warnings and leaks. 2013-01-17 Riccardo Mottola * FSNode/FSNBrowserColumn.m Clean up and use NSUinteger for array indexes * Inspector/Inspector.m Fix memory leak. * FSNode/FSNIconsView.m Fix pool leak. 2013-01-17 Riccardo Mottola * Inspector/Attributes.m (activateForPaths:) Cleanup and fix warning. * Operation/FileOpInfo.m (calculateNumFiles:) Cleanup, fix missing release of arp2 on break and transition index to NSUInteger. * FSNode/FSNBrowserColumn.m Release Autorelease pools correctly. 2013-01-16 Riccardo Mottola * GWorkspace/TShelf/TShelfIcon.m Initialize by returning self correctly. 2013-01-15 Riccardo Mottola * GWorkspace/TShelf/TShelfWin.m (addTab, renameTab) Release dialog laterinstead of autoreleasing immediately. 2013-01-15 Riccardo Mottola * GWorkspace/GWorkspace.m * GWorkspace/Desktop/Dock/DockIcon.m Change count variable from int to NSUInteger 2013-01-15 Wolfgang Lux * GWorkspace/GWorkspace.m (-applicationWillFinishLaunching:, (-fileSystemDidChange:, -watchedPathDidChange:, -_updateTrashContents): Initialize trashContents attribute from actual trash contents and avoid code duplication. 2012-10-17 Riccardo Mottola * Tools/ddbd/DDBMDStorage.m Fix destroy before data access. 2012-10-16 Riccardo Mottola * FSNode/FSNode.m Fix size calculation bug. 2012-10-14 Riccardo Mottola * GWorkspace/TShelf/TShelfWin.m * GWorkspace/TShelf/TShelfIcon.h * GWorkspace/TShelf/TShelfIcon.m * GWorkspace/TShelf/TShelfIconsView.h * GWorkspace/TShelf/TShelfIconsView.m NSUInteger transition. 2012-10-13 Riccardo Mottola * DBKit/DBKBTree.m * DBKit/DBKVarLenRecordsFile.m * Tools/ddbd/DDBDirsManager.m * Tools/ddbd/DDBPathsManager.m More unisgned index fixes. 2012-10-10 Riccardo Mottola * DBKit/DBKBTreeNode.m Fix unsigned integer loop. 2012-06-20 Sebastian Reitenbach * GWorkspace/Desktop/Dock/DockIcon.m Fix unmounting of CD-Rom on OpenBSD that was mounted using kern.usermount facilities. The mount point changes ownership to root:wheel, and the removed check prevented trying to unmount the device. 2012-06-21 Riccardo Mottola * DBKit/DBKVarLenRecordsFile.m * Tools/ddbd/DDBPathsManager.m Warning fix (NSUInteger). 2012-06-20 Riccardo Mottola * GWorkspace/FileViewer/GWViewerShelf.m Add missing include and fix warning. 2012-06-13 Riccardo Mottola * FSNode/FSNTextCell.m Use literal string directly 2012-05-25 Riccardo Mottola * GWorkspace/Resources/English.lproj/DesktopPref.gorm Resaved with base 1.24 version 2012-04-16 Riccardo Mottola * DBKit/DBKBTree.h * DBKit/DBKBTree.m * DBKit/DBKBTreeNode.h * DBKit/DBKBTreeNode.m * FSNode/FSNode.h * FSNode/FSNode.m * GWorkspace/Finder/LiveSearch/LSFolder.h * GWorkspace/Finder/LiveSearch/LSFolder.m * GWMetadata/MDKit/MDKQuery.m Change indexes to NSUInteger and other minor cleanups. * GWorkspace/TShelf/TShelfView.m * GWorkspace/TShelf/TShelfView.h NSUInteger for indexes. * GWorkspace/Finder/LiveSearch/LSFolder.h Declare types to fix warnings. 2012-04-11 Riccardo Mottola * GWorkspace/Preferences/DesktopPref.m * GWorkspace/Desktop/GWDesktopView.h * GWorkspace/Desktop/GWDesktopView.m * GWorkspace/Resources/English.lproj/DesktopPref.gorm New desktop background style, uniform scale 2012-03-28 Riccardo Mottola * GWorkspace/FileViewer/GWViewerIconsView.m * GWorkspace/FileViewer/GWViewerListView.m * GWorkspace/FileViewer/GWViewer.h * GWorkspace/FileViewer/GWViewerBrowser.h * GWorkspace/FileViewer/GWViewerBrowser.m * GWorkspace/FileViewer/GWViewerIconsPath.h * GWorkspace/FileViewer/GWViewerScrollView.h * GWorkspace/FileViewer/GWViewerSplit.h * GWorkspace/FileViewer/GWViewersManager.h * GWorkspace/FileViewer/GWSpatialViewer.h * GWorkspace/FileViewer/GWViewerIconsPath.m * GWorkspace/FileViewer/GWViewerScrollView.m * GWorkspace/FileViewer/GWViewerSplit.m * GWorkspace/FileViewer/GWViewerShelf.h * Workspace/FileViewer/GWViewerPathsPopUp.h * GWorkspace/FileViewer/GWViewerListView.h * GWorkspace/FileViewer/GWViewerIconsView.h * GWorkspace/FileViewer/GWViewerShelf.m * GWorkspace/FileViewer/GWViewerPathsPopUp.m * GWorkspace/Desktop/Dock/DockIcon.h * GWorkspace/Desktop/Dock/DockIcon.m * Inspector/ContentViewers/RtfViewer/RtfViewer.h * GWorkspace/Desktop/GWDesktopManager.m Fixed includes. 2012-03-27 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWSpatialViewer.m * GWorkspace/FileViewer/GWViewersManager.m Save key in the viewer's list and format it as unsigned 2012-03-26 Eric Wasylishen * GWorkspace/FileViewer/GWViewerShelf.m: Use FSNTextCell for focusedIconLabel to correct alignment problem introduced in the last change. 2012-03-26 Eric Wasylishen * FSNode/FSNTextCell.m: Adjust vertically centering to match calculation in -[FSNListViewDataSource(RepNameEditing) setEditorAtRow:withMouseDownEvent:] 2012-03-22 Eric Wasylishen * FSNode/FSNTextCell.m: Vertically center labels including those with no icon. 2012-03-22 Eric Wasylishen * FSNode/FSNListView.h: * FSNode/FSNListView.m: Fix double-click and single-click on list rows. Single-click on a selected row only starts editing after a short interval (0.5s); double-clicking opens the double-clicked item. 2012-03-22 Eric Wasylishen * FSNode/FSNIconsView.m: * GWorkspace/Desktop/GWDesktopView.m: XOR selection rect: Add fallback code path for running on versions of GUI older than trunk. 2012-03-22 Eric Wasylishen * FSNode/FSNTextCell.h: * FSNode/FSNTextCell.m: Vertically center labels. Fixes bug 35423 2012-03-22 Eric Wasylishen * FSNode/FSNIconsView.m: Fix XOR-stlye selection rectangle. Now works when scrolling. 2012-03-20 Riccardo Mottola * Inspector/ContentViewers/PdfViewer/PdfViewer.m Make next and previous buttons work. 2012-03-20 Riccardo Mottola * Inspector/ContentViewers/PdfViewer/PdfViewer.[h,m] Guard against invalid page numbers. 2012-03-06 Richard Stonehouse * GWMetadata/gmds/mdextractor/GNUmakefile.preamble add sqlite3 flag 2012-03-02 Eric Wasylishen * GWorkspace/Desktop/GWDesktopView.m: Don't cache scaled background. Fixes background not drawing with xlib and background set to "fit", and probably saves a fair bit of memory. 2012-03-02 Eric Wasylishen * GWorkspace/Desktop/GWDesktopView.m: Draw highlight rect using NSFrameRectWithWidthUsingOperation(aRect, 1.0, GSCompositeHighlight); instead of filling the rect twice, which was much slower 2012-03-02 Riccardo Mottola * GWorkspace/Desktop/GWDesktopView.m Highlight-rect without transparency for classic style selection. 2012-02-21 Riccardo Mottola * GWorkspace/Preferences/DesktopPref.[h,m] * GWorkspace/Desktop/Dock/Dock.[h,m] * GWorkspace/Desktop/GWDesktopManager.h * GWorkspace/Desktop/GWDesktopView.m * FSNode/FSNIconsView.[h,m] * GWorkspace/Resources/English.lproj/DesktopPref.gorm New dock style preference and conditioinally enable transparency in dock and selections based on it. 2012-02-20 Riccardo Mottola * GWorkspace/Desktop/GWDesktopView.m: Always convert to RGB color space before exctracting RGB components (fixes crash/exception on close with grey backs) 2012-02-16 Eric Wasylishen * GWorkspace/Desktop/GWDesktopView.m: * GWorkspace/Desktop/Dock/Dock.m: Dont' set the dock background colour based on the desktop background colour; leave it alone as [[NSColor grayColor] colorWithAlphaComponent: 0.33]. 2012-01-16 Riccardo Mottola * GWorkspace/Desktop/Dock/Dock.h * GWorkspace/Desktop/Dock/Dock.m * GWorkspace/Desktop/GWDesktopView.m Really transparent Dock 2012-01-31 Eric Wasylishen * FSNode/FSNListView.m: Rewrite some code broken by NSNotFound type change 2012-01-15 Eric Wasylishen * GWorkspace/Preferences/DesktopPref.m: * GWorkspace/Preferences/DesktopPref.h: * GWorkspace/Resources/English.lproj/DesktopPref.gorm: Redesign desktop background UI 2012-01-14 Eric Wasylishen * GWorkspace/Desktop/GWDesktopView.m (-mouseDragged:): Copy selection rect rewrite from FSNode/FSNIconsView.m 2012-01-12 Eric Wasylishen * FSNode/FSNBrowserCell.m: Enable browser icons 2012-01-10 Eric Wasylishen * FSNode/FSNIconsView.m (-mouseDragged:): Rewrite selection rect drawing. 2011-11-04 Eric Wasylishen * GWorkspace/Preferences/PrefController.h: specify type of popUp outlet to fix this dangerous warning: Preferences/PrefController.m:82:5: warning: multiple methods named ‘-removeItemAtIndex:’ found [enabled by default] /usr/local/include/AppKit/NSMenu.h:569:1: note: using ‘-(void)removeItemAtIndex:(int)index’ /usr/local/include/AppKit/NSToolbar.h:102:1: note: also found ‘-(void)removeItemAtIndex:(NSInteger)index’ * GWorkspace/Desktop/GWDesktopView.m: * Inspector/ContentViewers/NSColorViewer/NSColorViewer.m: use CGFloat instead of float for -[NSColor getRed:...] 2011-08-02 Riccardo Mottola * GWorkspace/Desktop/Dock/DockIcon.m Fixed rounding of position. 2011-06-27 Eric Wasylishen * GWorkspace/TShelf/TShelfIcon.m (-drawRect:): Round the drawing coordinates for the shelf icon. Don't use the dirty rect parameter to position the icon. 2011-05-23 Riccardo Mottola * FSNode/FSNListView.m Fix bug found by Sebastian: use string for key. 2011-05-22 Riccardo Mottola * GWorkspace/Desktop/Dock/Dock.m Fix bug found by Sebastian: use string for key. 2011-05-21 Riccardo Mottola * FSNode/FSNIcon.m Fix drag into dock by using NSDragOperationEvery 2011-05-20 Sebastian Reitenbach * GWMetadata/MDKit/SQLite.h * GWMetadata/gmds/gmds/sqlite.h fix build with gcc-2.95 2011-05-10 Riccardo Mottola for Sebastian Reitenbach * GWMetadata/gmds/mdfind/GNUmakefile.in * GWMetadata/gmds/mdextractor/GNUmakefile.in Correct makefiles to use local version and not installed one. 2011-05-10 Riccardo Mottola for Sebastian Reitenbach * GWMetadata/gmds/mdextractor/updater.m Fix warning. 2011-05-07 Riccardo Mottola * DBKit/DBKBTreeNode.m * DBKit/DBKVarLenRecordsFile.m * Tools/fswatcher/fswatcher.m * Tools/wopen/wopen.m * Tools/lsfupdater/lsfupdater.m * Tools/ddbd/DDBPathsManager.m * GWorkspace/GWFunctions.m * GWorkspace/WorkspaceApplication.m * Inspector/Attributes.m * Inspector/Functions.m * FSNode/FSNFunctions.m * FSNode/FSNode.m * GWMetadata/MDKit/MDKQueryManager.m * GWMetadata/MDKit/MDKAttribute.m * GWMetadata/gmds/mdextractor/mdextractor.m * GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/OpenOfficeExtractor.m Warning fixes and code clean-up 2011-03-21 Riccardo Mottola * FSNode/FSNBrowser.h * FSNode/FSNBrowser.m Patch by Philippe to use default font size instead of fixed 12. 2011-03-15 Riccardo Mottola * Inspector/ContentViewers/SoundViewer/SoundViewer.m: Patch by Philippe to stop progress after playing ends. 2011-03-11 Riccardo Mottola * Inspector/ContentViewers/SoundViewer/SoundViewer.m De-comment sound playing 2011-02-28 Riccardo Mottola * GWorkspace/GWorkspace.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWSpatialViewer.m * GWorkspace/Desktop/GWDesktopManager.m * GWMetadata/MDFinder/MDFinder.m Replace sel_eq with sel_isEqual 2011-02-27 Riccardo Mottola * GWMetadata/gmds/mdextractor/updater.m: Patch by Philippe Roussell: handle empty directories correctly and invalidate associated timer. 2011-02-21 Riccardo Mottola * GWMetadata/gmds/mdextractor/GNUmakefile.preamble * GWMetadata/gmds/mdfind/GNUmakefile.preamble * GWMetadata/MDFinder/GNUmakefile.preamble Build against build version of kits, patch by Sebastian Reitenbach * GWMetadata/MDKit/MDKQuery.m Warning fix through explicit cast. * GWMetadata/MDKit/MDKQuery.m * GWMetadata/MDKit/MDKWindow.m Warning fixes. 2011-02-02 Riccardo Mottola * FSNode/FSNodeRep.m Use MNTAB constant. 2011-01-28 Riccardo Mottola * FSNode/FSNodeRep.m NetBSD compatibilty. 2011-01-27 Riccardo Mottola * FSNode/FSNodeRep.m Switch checking of volumes to getmntinfo() and keep only /etc/mtab asl fallback. 2011-01-26 Riccardo Mottola * FSNode/FSNodeRep.m Fix FreeBSD type parsing, cleanup. * FSNode/FSNListView.m * DBKit/DBKPathsTree.m Warning fixes 2011-01-25 Riccardo Mottola * FSNode/FSNodeRep.m Mount parsing code rewrite for more portability. Still unfinished. 2011-01-12 Riccardo Mottola * FSNode/FSNodeRep.m Quick security fix. 2010-12-24 Riccardo Mottola * FSNode/FSNodeRepIcons.m Do not read icons handled by NSWorkspace; some reformatting. 2010-12-07 Riccardo Mottola * GWorkspace/WorkspaceApplication.m: Minor code cleanup. 2010-11-11 Wolfgang Lux * FSNode/FSNodeRepIcons.m Quick hack to display different folder icons 2010-10-25 Wolfgang Lux * GWorkspace/FileViewer/GWViewerShelf.h: * GWorkspace/FileViewer/GWViewerShelf.m (-openSelectionInNewViewer): Implement method so that double clicking an application or file icon in the shelf opens the corresponding application. 2010-10-21 Riccardo Mottola * GWorkspace/GWorkspace.m * GWorkspace/WorkspaceApplication.m If there is no destination for the Recycle operation, get the trash path. 2010-10-20 Riccardo Mottola * Operation/FileOpInfo.m * GWorkspace/GWorkspace.m * GWorkspace/Finder/Finder.m * GWorkspace/WorkspaceApplication.m Fix and guard all destination instances which were nil for Destroy operation. 2010-10-19 Wolfgang Lux * Operation/FileOpInfo.m (-dealloc): Remove incorrect release of the progress indicator, which is not owned by the FileOpInfo instance. 2010-10-15 Riccardo Mottola * Operation/FileOpInfo.m * Operation/Operation.m Destroy operation uses source and not destination. 2010-10-13 Riccardo Mottola * GWorkspace/GWorkspaceInfo.plist, * GWorkspace/GWorkspace.m; Implement opening of webloc files. * GWorkspace/Resources/Icons/FileIcon_WebLink.tiff Added icon for WebLink, created under GPL 2010-08-09 Wolfgang Lux * GWorkspace/GWorkspaceInfo.plist: * GWorkspace/GWorkspace.m (-applicationDidFinishLaunching:, -openInWorkspace:userData:error:): Implement an Open in Workspace service command. 2010-07-31 Wolfgang Lux * GWorkspace/Fiend/FiendLeaf.m (-mouseDown:): Don't order fiend icons back after a single mouse click. This behavior is outright annoying (to say the least). 2010-07-31 Wolfgang Lux * GWorkspace/Desktop/GWDesktopManager.m (-validateItem:): * GWorkspace/FileViewer/GWSpatialViewer.m (-validateItem:): * GWorkspace/FileViewer/GWViewer.m (-validateItem:): Enable the Open As Folder... command also for non-package directories so that users can quickly open a new file viewer for any directory. * GWorkspace/FileViewer/GWSpatialViewer.m (-validateItem:): * GWorkspace/FileViewer/GWViewer.m (-validateItem:): Validate items with action makeKeyAndOrderFront:. This fixes the defunct Windows menu. * GWorkspace/GWorkspace.h: * GWorkspace/GWorkspace.m (-createMenu): Use standard actions for the Arrange in Front, Miniaturize Window, and Close Window items in the Windows menu. 2010-07-29 Riccardo Mottola * GWMetadata/MDKit/MDKQueryManager.m * GWMetadata/gmds/mdextractor/mdextractor.m Cleaned up headers. 2010-07-14 Riccardo Mottola * GWorkspace/Fiend/Fiend.m * GWorkspace/Preferences/DesktopPref.m * GWorkspace/Preferences/IconsPref.m * GWorkspace/Preferences/HiddenFilesPref.m * GWorkspace/Preferences/OperationPrefs.m * GWorkspace/Preferences/XTermPref.m * GWorkspace/Preferences/DefEditorPref.m * GWorkspace/Finder/Modules/FModuleSize/FModuleSize.m * GWorkspace/Finder/Modules/FModuleKind/FModuleKind.m * GWorkspace/Desktop/Dock/Dock.m Cleaned up Imports amd release macros. 2010-07-06 Riccardo Mottola * GWMetadata/configure.ac * GWMetadata/configure Configure all subprojects * GWMetadata/gmds/mdextractor/updater.m * GWMetadata/gmds/mdextractor/mdextractor.m * GWMetadata/Preferences/MDIndexing.m * GWMetadata/Preferences/MDIndexing.h Fix imports. 2010-07-05 Riccardo Mottola * GWorkspace/GWorkspace.m * Tools/ddbd/ddbd.m : attempt to shutdown automatically 2010-06-28 Riccardo Mottola * FSNode/FSNBrowserColumn.m Do not call size adjusting if the scroller is still nil. Should also fix SPARC. 2010-06-22 Richard Frith-Macdonald * Inspector/aclocal.m4: * GWMetadata/gmds/mdextractor/Extractors/aclocal.m4: * GWMetadata/gmds/aclocal.m4: Attempt to pass correct flags in to build test by using 'gnustep-config'. 2010-06-21 Riccardo Mottola * Operation/Operation.m Fix spelling error. * GWorkspace/FileViewer/GWViewersManager.m * GWorkspace/Finder/Finder.m * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/Modules/FModuleModDate/FModuleModDate.m * GWorkspace/Finder/Modules/FModuleName/FModuleName.m * GWorkspace/Finder/Modules/FModuleAnnotations/FModuleAnnotations.m * GWorkspace/Finder/Modules/FModuleContents/FModuleContents.m * GWorkspace/Finder/Modules/FModuleCrDate/FModuleCrDate.m * GWorkspace/Finder/FindModuleView.m Header import clean up and TEST macro elimination. 2010-06-18 Riccardo Mottola * DBKit/DBKVarLenRecordsFile.m * DBKit/DBKBTree.m * FSNode/FSNBrowserCell.m * FSNode/FSNPathComponentsViewer.m * FSNode/FSNBrowserColumn.m * FSNode/FSNListView.m * FSNode/FSNIconsView.m * FSNode/FSNodeRep.m * FSNode/FSNBrowser.m * FSNode/FSNTextCell.m * FSNode/FSNIcon.m * FSNode/FSNBrowserScroll.m * FSNode/FSNode.m * GWorkspace/GWorkspace.m * Inspector/Attributes.m Header import clean up and TEST macro elimination. 2010-06-16 Riccardo Mottola * Operation\FileOpInfo.m * Operation\Operation.h * Operation\Functions.h * Inspector\Attributes.m * Inspector\Contents.h * Inspector\Annotations.h * Inspector\ContentViewersProtocol.h * Inspector\Contents.m * Inspector\Annotations.m * Inspector\Functions.h * Inspector\Functions.m * Inspector\IconView.h * Inspector\Attributes.h * Recycler\RecyclerView.h * Recycler\Recycler.h * Recycler\RecyclerIcon.h Header cleanup 2010-06-15 Riccardo Mottola * Inspector/ContentViewers/NSRTFViewer/NSRTFViewer.m Warning fix * Operation/Resources/Images/progind.tiff Deleted * Operation/FileOpInfo.h * Operation/FileOpInfo.m * Operation/Resources/English.lproj/FileOperationWin.gorm Changed to use the standard NSProgressIndicator * Tools/fswatcher/fswatcher-inotify.m * Tools/fswatcher/fswatcher.m * GWorkspace/Dialogs/StartAppWin.m * GWorkspace/Fiend/Fiend.m * GWorkspace/Fiend/FiendLeaf.m * GWorkspace/TShelf/TShelfIconsView.m * GWorkspace/TShelf/TShelfIcon.m * GWorkspace/TShelf/TShelfViewItem.m * GWorkspace/GWorkspace.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWViewerIconsPath.m * GWorkspace/FileViewer/GWSpatialViewer.m * GWorkspace/FileViewer/GWViewerShelf.m * GWorkspace/Finder/SearchResults/SearchResults.m * GWorkspace/Finder/Modules/FModuleOwner/FModuleOwner.m * GWorkspace/Desktop/Dock/DockIcon.m * GWorkspace/Desktop/Dock/Dock.m * GWorkspace/Desktop/GWDesktopManager.m * GWorkspace/Desktop/GWDesktopView.m * GWorkspace/WorkspaceApplication.m * Tools/thumbnailer/main.m * Tools/fswatcher/fswatcher-inotify.m * Tools/fswatcher/fswatcher.m * Tools/lsfupdater/lsfupdater.m * Tools/thumbnailer/main.m * Tools/ddbd/DDBPathsManager.m * Tools/ddbd/ddbd.m * Tools/ddbd/DDBDirsManager.m * Operation/FileOpInfo.m * Inspector/Contents.m * Operation/FileOpInfo.m * Inspector/TimeDateView.m * Inspector/Contents.m * Inspector/Tools.m * Inspector/Inspector.m * Recycler/Dialogs/StartAppWin.m * Recycler/RecyclerView.m * Recycler/Preferences/RecyclerPrefs.m * Recycler/RecyclerIcon.m Removed TEST_ macros for conventional ones, they just waste a test instruction 2010-06-14 Riccardo Mottola * DBKit/DBKBTreeNode.[h,m]: change unload signature to BOOL to avoid conflicting with NSBundle * Tools/fswatcher/fswatcher.h * GWorkspace/FileViewer/GWViewerPathsPopUp.m * GWorkspace/Fiend/FiendLeaf.m * GWorkspace/WorkspaceApplication.m * Inspector/ContentViewers/NSRTFViewer/NSRTFViewer.m * GWorkspace/TShelf/TShelfView.m: Warning fixes. * Recycler/GNUstep.h * Tools/thumbnailer/GNUstep.h * Operation/GNUstep.h * GWorkspace/GNUstep.h * FSNode/GNUstep.h Deleted duplicate copies. * Operation/FileOpInfo.m * Operation/Operation.m * Operation/Functions.m * GWorkspace/main.m * GWorkspace/Dialogs/RunExternalController.m * GWorkspace/Dialogs/StartAppWin.m * GWorkspace/Dialogs/CompletionField.m * GWorkspace/Dialogs/OpenWithController.m * GWorkspace/Dialogs/Dialogs.m * GWorkspace/TShelf/TShelfIconsView.m * GWorkspace/TShelf/TShelfIcon.m * GWorkspace/TShelf/TShelfViewItem.m * GWorkspace/TShelf/TShelfPBIcon.m * GWorkspace/TShelf/TShelfView.m * GWorkspace/TShelf/TShelfWin.m * GWorkspace/Fiend/Fiend.m * GWorkspace/Fiend/FiendLeaf.m * GWorkspace/GWorkspace.m * GWorkspace/FileViewer/GWViewerWindow.m * GWorkspace/History/History.m * GWorkspace/Preferences/IconsPref.m * GWorkspace/Preferences/HiddenFilesPref.m * GWorkspace/Preferences/OperationPrefs.m * GWorkspace/Preferences/PrefController.m * GWorkspace/Preferences/XTermPref.m * GWorkspace/Preferences/HistoryPref.m * GWorkspace/Preferences/DefSortOrderPref.m * GWorkspace/Preferences/DefEditorPref.m * GWorkspace/Preferences/BrowserViewerPref.m * GWorkspace/GWFunctions.m * GWorkspace/WorkspaceApplication.m * Recycler/main.m * Recycler/Dialogs/StartAppWin.m * Recycler/RecyclerView.m * Recycler/Preferences/RecyclerPrefs.m * Recycler/Recycler.m * Recycler/RecyclerIcon.m * FSNode/FSNPathComponentsViewer.m * FSNode/FSNBrowserMatrix.m * FSNode/FSNFunctions.m * FSNode/ExtendedInfo/Role/ExtInfoRole.m * FSNode/FSNBrowser.m * FSNode/FSNIcon.m * FSNode/FSNode.m: Cleaned up imports to use system GNUstep.h * GWorkspace/GWorkspace.m * GWorkspace/FileViewer/GWViewer.m * GWorkspace/FileViewer/GWSpatialViewer.m * GWorkspace/FileViewer/GWViewersManager.m Warn about OPEN_MAX being undefined but do not override it by default. 2010-06-11 Riccardo Mottola * DBKit/DBKFreeNodesPage.m * GWorkspace/Dialogs/CompletionField.m * GWorkspace/GWFunctions.m * GWorkspace/Finder/LiveSearch/LSFolder.m * GWorkspace/Finder/SearchResults/SearchResults.m * GWorkspace/Desktop/GWDesktopView.m * FSNode/FSNPathComponentsViewer.m: Warning fixes 2010-06-11 Riccardo Mottola * configure.ac * configure * GNUmakefile.in Introduced option to disable gwmetadata build and really build it if it is selected. 2010-03-16 Riccardo Mottola * Tools/searchtool/searchtool.m * Tools/lsfupdater/lsfupdater.m * GWorkspace/GWorkspace.m * GWorkspace/Finder/SearchResults/SearchResults.m * Inspector/ContentViewers/ImageViewer/ImageViewer.m * Recycler/Recycler.m: do not include 2010-03-27 Wolfgang Lux * GWorkspace/FileViewer/GWViewer.m (-windowWillClose:): * GWorkspace/FileViewer/GWSpatialViewer.m (-windowWillClose:): Set the window's delegate to nil to avoid crash when the viewer is released before the window. 2009-12-08 Riccardo Mottola * GWorkspace/FileViewer/GWViewerWindow.[h,m]: removed local copy of delegate 2009-11-14 Riccardo Mottola * GWorkspace/Preferences/XTermPref.m: Reformatted and indented code * GWorkspace/Resources/English.lproj/XTermPref.gorm changed grouping of the Set button 2009-11-12 19:48-EST Gregory John Casamento * GWorkspace/Dialogs/CompletionField.m: Override initWithCoder: to initialize the filemanager so that we can search for matching paths as the user enters the command. 2009-11-11 Riccardo Mottola * GWorkspace/Dialogs/RunExternalController.h GWorkspace/Dialogs/CompletionField.h GWorkspace/Dialogs/RunExternalController.m GWorkspace/Dialogs/OpenWithController.h GWorkspace/Dialogs/CompletionField.m GWorkspace/Dialogs/OpenWithController.m GWorkspace/Resources/English.lproj/OpenWith.gorm GWorkspace/Resources/English.lproj/RunExternal.gorm: Instantiate the CompletionField inside the gorm file, adjusted the init methods of fields and controllers. 2009-11-06 Riccardo Mottola * Tools\searchtool\searchtool.m, Tools\lsfupdater\lsfupdater.m: Fix problems with undefined GW_DEBUG_LOG * Inspector/Contents.m: Backup values for MinGW not set by configure 2009-11-06 Riccardo Mottola * GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/HtmlExtractor.m: Fix stack smash, reported by Tim Kack 2009-09-27 Riccardo Mottola * Inspector/GNUmakefile.in: install ContentViewersProtocol.h 2009-09-26 Riccardo Mottola * GWMetadata/Preferences: renamed Info.plist to MDIndexingInfo.plist * GWMetadata/Preferences/GNUmakefile: Do not package Info.plist explicitely 2009-02-01 Richard Frith-Macdonald * GWMetadata/Preferences/Info.plist: Use standard info keys. 2008-12-19 Nicola Pero * All GNUmakefiles: removed GNUSTEP_CORE_SOFTWARE=YES and added PACKAGE_NAME=gworkspace. * GNUmakefile: Export PACKAGE_NAME to reduce chances of a problem if a GNUmakefile in a subdirectory is missing it. * DBKit/Testing/GNUmakefile: Do not set GNUSTEP_INSTALLATION_DOMAIN or RPM_DISABLE_RELOCATABLE. * GWMetadata/MDFinder/GNUmakefile: Same changes. * GWMetadata/Preferences/GNUmakefile: Same changes. * GWorkspace/Desktop/XBundles/GNUmakefile: Same changes. * GWorkspace/Desktop/XBundles/XDesktopWindow/GNUmakefile: Same changes. 2008-12-18 Nicola Pero * All GNUmakefiles: added GNUSTEP_CORE_SOFTWARE=YES at the beginning. * GNUmakefile: Export GNUSTEP_CORE_SOFTWARE to reduce chances of a problem if a GNUmakefile in a subdirectory is missing it. 2008-12-07 Richard Frith-Macdonald Change order of configure for subsirectories so that people without sqlite can build more easily. Remove makefiles which are generated by configure. 2008-12-07 Richard Frith-Macdonald * DBKit/GNUmakefile.in: * FSNode/FSNodeRep.m: * FSNode/GNUmakefile.in: * GNUmakefile.in: * GWMetadata/gmds/gmds/GNUmakefile.in: * GWMetadata/gmds/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/AppExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/TextExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/GNUmakefile.in: * GWMetadata/gmds/mdextractor/mdextractor.m: * GWMetadata/gmds/mdextractor/updater.m: * GWMetadata/gmds/mdfind/GNUmakefile.in: * GWMetadata/GNUmakefile.in: * GWMetadata/MDKit/GNUmakefile.in: * GWMetadata/MDKit/MDKQueryManager.m: * GWMetadata/Preferences/MDIndexing.m: * GWorkspace/Desktop/GWDesktopManager.m: * GWorkspace/Finder/Finder.m: * GWorkspace/Finder/LiveSearch/LSFolder.m: * GWorkspace/Finder/Modules/FModuleAnnotations/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleContents/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleCrDate/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleKind/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleModDate/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleName/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleOwner/GNUmakefile.in: * GWorkspace/Finder/Modules/FModuleSize/GNUmakefile.in: * GWorkspace/Finder/Modules/GNUmakefile.in: * GWorkspace/Finder/SearchResults/SearchResults.m: * GWorkspace/GNUmakefile.in: * GWorkspace/GWorkspace.m: * Inspector/Contents.m: * Inspector/ContentViewers/AppViewer/GNUmakefile.in: * Inspector/ContentViewers/FolderViewer/GNUmakefile.in: * Inspector/ContentViewers/GNUmakefile.in: * Inspector/ContentViewers/IBViewViewer/GNUmakefile.in: * Inspector/ContentViewers/ImageViewer/GNUmakefile.in: * Inspector/ContentViewers/ImageViewer/ImageViewer.m: * Inspector/ContentViewers/ImageViewer/resizer/GNUmakefile.in: * Inspector/ContentViewers/NSColorViewer/GNUmakefile.in: * Inspector/ContentViewers/NSRTFViewer/GNUmakefile.in: * Inspector/ContentViewers/NSTIFFViewer/GNUmakefile.in: * Inspector/ContentViewers/PdfViewer/GNUmakefile.in: * Inspector/ContentViewers/RtfViewer/GNUmakefile.in: * Inspector/ContentViewers/SoundViewer/GNUmakefile.in: * Inspector/GNUmakefile.in: * Operation/GNUmakefile.in: * Recycler/GNUmakefile.in: * Recycler/Recycler.m: * Tools/ddbd/DDBPathsManager.m: * Tools/ddbd/GNUmakefile.in: * Tools/ddbd/MDModules/GNUmakefile.in: * Tools/ddbd/MDModules/MDModuleAnnotations/GNUmakefile.in: * Tools/fswatcher/GNUmakefile.in: * Tools/lsfupdater/GNUmakefile.in: * Tools/lsfupdater/lsfupdater.m: * Tools/searchtool/GNUmakefile.in: * Tools/searchtool/searchtool.m: * Tools/thumbnailer/GNUmakefile.in: * Tools/thumbnailer/ImageThumbnailer/GNUmakefile.in: * Tools/thumbnailer/main.m: * Tools/wopen/GNUmakefile.in: Updates to honor installation domain and install in right place. Tool lookup fixed to locate tools wherever they are. Bundle lookup changed to locate bundles in any domain. 2008-09-16 Riccardo Mottola for Wolfgang Lux * Recycler/RecyclerIcon.m, Recycler/Recycler.m: patches for dockability of Recycler when not using WindowMaker 2008-09-27 17:42-EDT Gregory John Casamento * .dist-ignore: Remove GWorkspace.plist from this file so that it is in the distribution. 2008-09-16 Riccardo Mottola * GWorkspace/Preferences/DesktopPref.m: always convert to RGB color 2008-06-30 Nicola Pero * Tools/thumbnailer/GNUmakefile.in: Do not include bundle.make since there is no bundle to build. Including bundle.make with no bundle defined caused 'rm -rf' to be executed with no argument during make clean by gnustep-make v2.0.6. Riccardo reported that on his system 'rm -rf' with no arguments produces an error, aborting 'make clean'. Hmmm. 2008-06-27 Riccardo Mottola * configure/configure.ac: updated and regenerated 2008-06-26 Riccardo Mottola * GWMetadata/gmds/mdextractor/updater.m: fixed missing bracket * Configure system: added autoconf files * Apps_wrappers: OpenOffice.app: added openoffice wrapper 2008-06-24 Riccardo Mottola * TODO:added notes * configure/configure.ac: all were updated and regenerated * GNUmakefile/GNUmakefile.in: most makefiles were renamed to .in to comply with configure requirements 2008-06-15 Riccardo Mottola * GWorkspace/FSNote/ExtendedInfo/GNUstep.h: deleted * GWorkspace/FSNote/ExtendedInfo/GNUmakefile: removed local ref 2008-06-11 Riccardo Mottola * GWorkspace/GWorkspace.m: use standard info panel * GWorkspace/GWorkspaceInfo.plist: corrected version * configure: define package name and version 2008-06-07 Riccardo Mottola * GWorkspace/GWorkspace.m, GWMetadata/gmds/mdextractor/updater.m: start fswatcher with --daemon --auto * Tools/fswatcher/fswatcher.m: shut down when the last connection closes 2008-01-22 Riccardo Mottola * GWorkspace/FileViewer/GWViewer.m, GWorkspace/FileViewer/GWSpatialViewer.m: Removed special case for BSD operating systems since it broke NetBSD gworkspace-1.1.0/DBKit/0000755000175000001440000000000014753472315014067 5ustar multixusersgworkspace-1.1.0/DBKit/DBKBTree.h0000644000175000001440000000656314751213523015564 0ustar multixusers/* DBKBTree.h * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DBK_BTREE_H #define DBK_BTREE_H #import @class DBKBTreeNode; @class DBKFreeNodesPage; @class DBKFixLenRecordsFile; extern NSRecursiveLock *dbkbtree_lock; @interface DBKBTree: NSObject { NSMutableData *headData; DBKBTreeNode *root; NSNumber *rootOffset; NSMutableSet *unsavedNodes; DBKFreeNodesPage *freeNodesPage; unsigned long fnpageOffset; unsigned order; unsigned minkeys; unsigned maxkeys; DBKFixLenRecordsFile *file; unsigned long nodesize; BOOL begin; unsigned ulen; unsigned llen; id delegate; } - (id)initWithPath:(NSString *)path order:(int)ord delegate:(id)deleg; - (void)begin; - (void)end; - (void)readHeader; - (void)writeHeader; - (void)createRootNode; - (void)setRoot:(DBKBTreeNode *)newroot; - (DBKBTreeNode *)root; - (DBKBTreeNode *)insertKey:(id)key; - (DBKBTreeNode *)insertKey:(id)key inNode:(DBKBTreeNode *)node; - (DBKBTreeNode *)nodeOfKey:(id)key getIndex:(NSUInteger *)index; - (DBKBTreeNode *)nodeOfKey:(id)key getIndex:(NSUInteger *)index didExist:(BOOL *)exists; - (DBKBTreeNode *)nodeOfKey:(id)key; - (NSArray *)keysGreaterThenKey:(id)akey andLesserThenKey:(id)bkey; - (BOOL)replaceKey:(id)key withKey:(id)newkey; - (BOOL)deleteKey:(id)key; - (BOOL)deleteKey:(id)key atIndex:(NSUInteger)index ofNode:(DBKBTreeNode *)node; - (NSNumber *)offsetForNewNode; - (unsigned long)offsetForFreeNodesPage; - (void)nodeWillFreeOffset:(NSNumber *)offset; - (void)createFreeNodesPage; - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen; - (NSData *)dataFromKeys:(NSArray *)keys; - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey; - (NSData *)dataForNode:(DBKBTreeNode *)node; - (void)addUnsavedNode:(DBKBTreeNode *)node; - (void)saveNodes; - (void)synchronize; - (void)saveNode:(DBKBTreeNode *)node; - (unsigned)order; - (void)checkBegin; @end @protocol DBKBTreeDelegate - (unsigned long)nodesize; - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen; - (NSData *)dataFromKeys:(NSArray *)keys; - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey; @end #endif // DBK_BTREE_H gworkspace-1.1.0/DBKit/DBKBTree.m0000644000175000001440000004146014751213523015564 0ustar multixusers/* DBKBTree.m * * Copyright (C) 2005-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "DBKBTree.h" #import "DBKBTreeNode.h" #import "DBKFreeNodesPage.h" #import "DBKFixLenRecordsFile.h" #define MIN_ORDER 3 #define HEADLEN 512 #define FREE_NPAGE_LEN 512 NSRecursiveLock *dbkbtree_lock = nil; @implementation DBKBTree + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { if ([self class] == [DBKBTree class]) { dbkbtree_lock = [NSRecursiveLock new]; } initialized = YES; } } - (void)dealloc { if (file) { [file close]; RELEASE (file); } RELEASE (headData); RELEASE (root); RELEASE (rootOffset); RELEASE (freeNodesPage); RELEASE (unsavedNodes); [super dealloc]; } - (id)initWithPath:(NSString *)path order:(int)ord delegate:(id)deleg { self = [super init]; if (self) { if (ord < MIN_ORDER) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"the order must be at least %i", MIN_ORDER]; return self; } if (deleg == nil) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"DBKBTree requires a delegate"]; return self; } if ([deleg conformsToProtocol: @protocol(DBKBTreeDelegate)] == NO) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"the delegate doesn't implement the DBKBTreeDelegate protocol"]; return self; } file = [[DBKFixLenRecordsFile alloc] initWithPath: path cacheLength: 10000]; [file setAutoflush: YES]; order = ord; minkeys = order - 1; maxkeys = order * 2 - 1; ulen = sizeof(unsigned); llen = sizeof(unsigned long); delegate = deleg; nodesize = [delegate nodesize]; unsavedNodes = [[NSMutableSet alloc] initWithCapacity: 1]; ASSIGN (rootOffset, [NSNumber numberWithUnsignedLong: HEADLEN]); fnpageOffset = HEADLEN + nodesize; headData = [[NSMutableData alloc] initWithCapacity: 1]; [self readHeader]; [self createRootNode]; [self createFreeNodesPage]; begin = NO; } return self; } - (void)begin { if (begin == YES) { [NSException raise: NSInternalInconsistencyException format: @"begin already called"]; } begin = YES; } - (void)end { NSArray *subnodes = [root subnodes]; int i; if (begin == NO) { [NSException raise: NSInternalInconsistencyException format: @"end without begin"]; } [self saveNodes]; [file flush]; for (i = 0; i < [subnodes count]; i++) { [[subnodes objectAtIndex: i] unload]; } begin = NO; } - (void)readHeader { NSData *data = [file dataOfLength: HEADLEN atOffset: [NSNumber numberWithUnsignedLong: 0L]]; [headData setLength: 0]; /* TODO add the version */ if ([data length] == HEADLEN) { [headData appendData: data]; } else { // new file [self writeHeader]; } } - (void)writeHeader { [headData setLength: HEADLEN]; [file writeData: headData atOffset: [NSNumber numberWithUnsignedLong: 0L]]; [file flush]; } - (void)createRootNode { NSData *data; root = [[DBKBTreeNode alloc] initInTree: self withParent: nil atOffset: rootOffset]; data = [self dataForNode: root]; if (data) { [root setNodeData: data]; } else { [root setLoaded]; } [self saveNode: root]; [file flush]; } - (void)setRoot:(DBKBTreeNode *)newroot { ASSIGN (root, newroot); [root setRoot]; [root setOffset: rootOffset]; [root setLoaded]; [self addUnsavedNode: root]; } - (DBKBTreeNode *)root { return root; } - (DBKBTreeNode *)insertKey:(id)key { CREATE_AUTORELEASE_POOL(arp); BOOL autoflush = [file autoflush]; DBKBTreeNode *insnode = nil; BOOL exists; [self checkBegin]; [file setAutoflush: NO]; [root indexForKey: key existing: &exists]; if (exists == NO) { if ([[root keys] count] == maxkeys) { DBKBTreeNode *newroot = [[DBKBTreeNode alloc] initInTree: self withParent: nil atOffset: rootOffset]; [root setOffset: [self offsetForNewNode]]; [self addUnsavedNode: root]; [newroot addSubnode: root]; [self setRoot: newroot]; RELEASE (newroot); [newroot splitSubnodeAtIndex: 0]; insnode = [self insertKey: key inNode: newroot]; } else { insnode = [self insertKey: key inNode: root]; } } [self saveNodes]; [file setAutoflush: autoflush]; [file flushIfNeeded]; RETAIN (insnode); RELEASE (arp); return AUTORELEASE (insnode); } - (DBKBTreeNode *)insertKey:(id)key inNode:(DBKBTreeNode *)node { if ([node isLoaded] == NO) { [node loadNodeData]; } if ([node isLeaf]) { if ([node insertKey: key]) { [node setLoaded]; [self addUnsavedNode: node]; return node; } } else { NSUInteger index; BOOL exists; index = [node indexForKey: key existing: &exists]; if (exists == NO) { DBKBTreeNode *subnode = [[node subnodes] objectAtIndex: index]; BOOL insert = NO; if ([subnode isLoaded] == NO) { [subnode loadNodeData]; } if ([[subnode keys] count] == maxkeys) { [subnode indexForKey: key existing: &exists]; if (exists == NO) { [node splitSubnodeAtIndex: index]; index = [node indexForKey: key existing: &exists]; subnode = [[node subnodes] objectAtIndex: index]; if ([subnode isLoaded] == NO) { [subnode loadNodeData]; } insert = YES; } } else { insert = YES; } if (insert) { return [self insertKey: key inNode: subnode]; } } } return nil; } - (DBKBTreeNode *)nodeOfKey:(id)key getIndex:(NSUInteger *)index { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *node = root; BOOL exists; [self checkBegin]; *index = [node indexForKey: key existing: &exists]; while (exists == NO) { NSArray *subnodes = [node subnodes]; if ([subnodes count]) { node = [subnodes objectAtIndex: *index]; if ([node isLoaded] == NO) { [node loadNodeData]; } *index = [node indexForKey: key existing: &exists]; } else { RELEASE (arp); return nil; } } RETAIN (node); RELEASE (arp); return [node autorelease]; } - (DBKBTreeNode *)nodeOfKey:(id)key getIndex:(NSUInteger *)index didExist:(BOOL *)exists { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *node = root; [self checkBegin]; *index = [node indexForKey: key existing: exists]; while (*exists == NO) { NSArray *subnodes = [node subnodes]; if ([subnodes count]) { node = [subnodes objectAtIndex: *index]; if ([node isLoaded] == NO) { [node loadNodeData]; } *index = [node indexForKey: key existing: exists]; } else { *index = [node indexForKey: key existing: exists]; break; } } RETAIN (node); RELEASE (arp); return [node autorelease]; } - (DBKBTreeNode *)nodeOfKey:(id)key { DBKBTreeNode *node; BOOL exists; NSUInteger index; [self checkBegin]; node = [self nodeOfKey: key getIndex: &index didExist: &exists]; if (exists) { return node; } return nil; } - (NSArray *)keysGreaterThenKey:(id)akey andLesserThenKey:(id)bkey { CREATE_AUTORELEASE_POOL(pool); NSMutableArray *keys = [NSMutableArray array]; DBKBTreeNode *node; id key; BOOL exists; NSUInteger index; [self checkBegin]; key = akey; node = [self nodeOfKey: key getIndex: &index didExist: &exists]; if (exists == NO) { key = [node predecessorKeyInNode: &node forKeyAtIndex: index]; if (key == nil) { key = [node minKeyInSubnode: &node]; [keys addObject: key]; } else { node = [self nodeOfKey: key getIndex: &index didExist: &exists]; } } while (node != nil) { CREATE_AUTORELEASE_POOL(arp); key = [node successorKeyInNode: &node forKeyAtIndex: index]; if (key == nil) { RELEASE(arp); break; } if (bkey && ([delegate compareNodeKey: key withKey: bkey] != NSOrderedAscending)) { RELEASE(arp); break; } index = [node indexOfKey: key]; [keys addObject: key]; RELEASE (arp); } RETAIN (keys); RELEASE (pool); return [keys autorelease]; } - (BOOL)replaceKey:(id)key withKey:(id)newkey { DBKBTreeNode *node; BOOL exists; NSUInteger index; [self checkBegin]; node = [self nodeOfKey: key getIndex: &index didExist: &exists]; if (exists == NO) { return (([self insertKey: newkey] != nil) ? YES : NO); } else { [node replaceKeyAtIndex: index withKey: newkey]; return YES; } return NO; } - (BOOL)deleteKey:(id)key { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *node; NSUInteger index; [self checkBegin]; node = [self nodeOfKey: key getIndex: &index]; if (node) { BOOL autoflush = [file autoflush]; [file setAutoflush: NO]; if ([self deleteKey: key atIndex: index ofNode: node]) { if ([[root keys] count] == 0) { NSArray *subnodes = [root subnodes]; if ([subnodes count]) { DBKBTreeNode *nd = [subnodes objectAtIndex: 0]; if ([nd isLoaded] == NO) { [nd loadNodeData]; } RETAIN (nd); [root removeSubnodeAtIndex: 0]; [self nodeWillFreeOffset: [nd offset]]; [self setRoot: nd]; RELEASE (nd); } } [self saveNodes]; [file setAutoflush: autoflush]; [file flushIfNeeded]; RELEASE (arp); return YES; } [file setAutoflush: autoflush]; } RELEASE (arp); return NO; } - (BOOL)deleteKey:(id)key atIndex:(NSUInteger)index ofNode:(DBKBTreeNode *)node { DBKBTreeNode *chknode = nil; if ([node isLeaf] == NO) { DBKBTreeNode *scnode; id sckey; sckey = [node successorKeyInNode: &scnode forKeyAtIndex: index]; if (sckey) { [node replaceKeyAtIndex: index withKey: sckey]; [self addUnsavedNode: node]; [scnode removeKey: sckey]; [self addUnsavedNode: scnode]; chknode = scnode; } else { return NO; } } else { [node removeKeyAtIndex: index]; [self addUnsavedNode: node]; chknode = node; } while ([[chknode keys] count] < minkeys) { DBKBTreeNode *chkparent = [chknode parent]; if (chkparent) { int chkind = [chkparent indexOfSubnode: chknode]; DBKBTreeNode *sibling; if (chkind == 0) { sibling = [chknode rightSibling]; if (sibling && ([sibling isLoaded] == NO)) { [sibling loadNodeData]; } if (sibling && ([[sibling keys] count] > minkeys)) { [chknode borrowFromRightSibling: sibling]; } else { [chknode mergeWithBestSibling]; } } else if (chkind == ([[chkparent subnodes] count] - 1)) { sibling = [chknode leftSibling]; if (sibling && ([sibling isLoaded] == NO)) { [sibling loadNodeData]; } if (sibling && ([[sibling keys] count] > minkeys)) { [chknode borrowFromLeftSibling: sibling]; } else { [chknode mergeWithBestSibling]; } } else { BOOL borrowed = NO; sibling = [chknode leftSibling]; if (sibling && ([sibling isLoaded] == NO)) { [sibling loadNodeData]; } if (sibling && ([[sibling keys] count] > minkeys)) { [chknode borrowFromLeftSibling: sibling]; borrowed = YES; } else { sibling = [chknode rightSibling]; if (sibling && ([sibling isLoaded] == NO)) { [sibling loadNodeData]; } if (sibling && ([[sibling keys] count] > minkeys)) { [chknode borrowFromRightSibling: sibling]; borrowed = YES; } } if (borrowed == NO) { [chknode mergeWithBestSibling]; } } chknode = chkparent; chkparent = [chknode parent]; } else { break; } } return YES; } - (NSNumber *)offsetForNewNode { NSMutableData *data = [NSMutableData dataWithLength: nodesize]; unsigned long ofst = [freeNodesPage getFreeOffset]; NSNumber *offset; if (ofst == 0) { offset = [file offsetForNewData]; } else { offset = [NSNumber numberWithUnsignedLong: ofst]; } [file writeData: data atOffset: offset]; return offset; } - (unsigned long)offsetForFreeNodesPage { NSMutableData *data = [NSMutableData dataWithCapacity: 1]; unsigned long prevOffset = [freeNodesPage currentPageOffset]; NSNumber *offset = [file offsetForNewData]; unsigned long ofs = [offset unsignedLongValue]; [data appendData: [NSData dataWithBytes: &ofs length: llen]]; [data appendData: [NSData dataWithBytes: &prevOffset length: llen]]; [data setLength: FREE_NPAGE_LEN]; [file writeData: data atOffset: offset]; return ofs; } - (void)nodeWillFreeOffset:(NSNumber *)offset { if ([offset isEqual: rootOffset] == NO) { [freeNodesPage addFreeOffset: [offset unsignedLongValue]]; } } - (void)createFreeNodesPage { NSMutableData *data = [NSMutableData dataWithCapacity: 1]; NSData *page = [file dataOfLength: FREE_NPAGE_LEN atOffset: [NSNumber numberWithUnsignedLong: fnpageOffset]]; [data appendData: page]; if ([data length] != FREE_NPAGE_LEN) { [data setLength: 0]; [data appendData: [NSData dataWithBytes: &fnpageOffset length: llen]]; [data setLength: FREE_NPAGE_LEN]; [file writeData: data atOffset: [NSNumber numberWithUnsignedLong: fnpageOffset]]; [file flush]; } freeNodesPage = [[DBKFreeNodesPage alloc] initInTree: self withFile: file atOffset: fnpageOffset length: FREE_NPAGE_LEN]; } - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen { return [delegate keysFromData: data withLength: dlen]; } - (NSData *)dataFromKeys:(NSArray *)keys { return [delegate dataFromKeys: keys]; } - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey { return [delegate compareNodeKey: akey withKey: bkey]; } - (NSData *)dataForNode:(DBKBTreeNode *)node { NSData *data = [file dataOfLength: nodesize atOffset: [node offset]]; if ([data length] == nodesize) { unsigned keyscount; [data getBytes: &keyscount range: NSMakeRange(0, ulen)]; if (keyscount != 0) { return data; } } return nil; } - (void)addUnsavedNode:(DBKBTreeNode *)node { [unsavedNodes addObject: node]; } - (void)saveNodes { NSEnumerator *enumerator = [unsavedNodes objectEnumerator]; DBKBTreeNode *node; while ((node = [enumerator nextObject])) { [self saveNode: node]; } [unsavedNodes removeAllObjects]; [freeNodesPage writeCurrentPage]; } - (void)synchronize { [file flush]; } - (void)saveNode:(DBKBTreeNode *)node { CREATE_AUTORELEASE_POOL (arp); NSMutableData *data = [NSMutableData dataWithCapacity: 1]; [data appendData: [node nodeData]]; [data setLength: nodesize]; [file writeData: data atOffset: [node offset]]; RELEASE (arp); } - (unsigned)order { return order; } - (void)checkBegin { if (begin == NO) { [NSException raise: NSInternalInconsistencyException format: @"begin not called!"]; } } @end gworkspace-1.1.0/DBKit/DBKBTreeNode.h0000644000175000001440000000732414751213523016366 0ustar multixusers/* DBKBTreeNode.h * * Copyright (C) 2005-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DBK_BTREE_NODE_H #define DBK_BTREE_NODE_H #include @class DBKBTree; @interface DBKBTreeNode: NSObject { DBKBTree *tree; NSNumber *offset; unsigned order; unsigned minkeys; unsigned maxkeys; unsigned ulen; unsigned llen; NSMutableArray *keys; NSMutableArray *subnodes; BOOL loaded; DBKBTreeNode *parent; } - (id)initInTree:(DBKBTree *)atree withParent:(DBKBTreeNode *)pnode atOffset:(NSNumber *)ofst; - (BOOL)isLoaded; - (void)setLoaded; - (void)loadNodeData; /** we use BOOL so not to conflict with the signature of NSBundle's unload */ - (BOOL)unload; - (void)setNodeData:(NSData *)ndata; - (NSData *)nodeData; - (void)save; - (NSNumber *)offset; - (void)setOffset:(NSNumber *)ofst; - (DBKBTreeNode *)parent; - (void)setParent:(DBKBTreeNode *)anode; - (void)insertKey:(id)key atIndex:(NSUInteger)index; - (BOOL)insertKey:(id)key; - (NSUInteger)indexForKey:(id)key existing:(BOOL *)exists; - (NSUInteger)indexOfKey:(id)key; - (id)keyAtIndex:(NSUInteger)index; - (void)setKeys:(NSArray *)newkeys; - (void)addKey:(id)key; - (void)removeKey:(id)key; - (void)removeKeyAtIndex:(NSUInteger)index; - (void)replaceKeyAtIndex:(NSUInteger)index withKey:(id)key; - (void)replaceKey:(id)key withKey:(id)newkey; - (NSArray *)keys; - (id)minKeyInSubnode:(DBKBTreeNode **)node; - (id)maxKeyInSubnode:(DBKBTreeNode **)node; - (id)successorKeyInNode:(DBKBTreeNode **)node forKey:(id)key; - (id)successorKeyInNode:(DBKBTreeNode **)node forKeyAtIndex:(NSUInteger)index; - (id)predecessorKeyInNode:(DBKBTreeNode **)node forKey:(id)key; - (id)predecessorKeyInNode:(DBKBTreeNode **)node forKeyAtIndex:(NSUInteger)index; - (void)insertSubnode:(DBKBTreeNode *)node atIndex:(NSUInteger)index; - (void)addSubnode:(DBKBTreeNode *)node; - (void)removeSubnode:(DBKBTreeNode *)node; - (void)removeSubnodeAtIndex:(NSUInteger)index; - (void)replaceSubnodeAtIndex:(NSUInteger)index withNode:(DBKBTreeNode *)node; - (NSUInteger)indexOfSubnode:(DBKBTreeNode *)node; - (DBKBTreeNode *)subnodeAtIndex:(NSUInteger)index; - (BOOL)isFirstSubnode:(DBKBTreeNode *)node; - (BOOL)isLastSubnode:(DBKBTreeNode *)node; - (void)setSubnodes:(NSArray *)nodes; - (NSArray *)subnodes; - (DBKBTreeNode *)leftSibling; - (DBKBTreeNode *)rightSibling; - (void)splitSubnodeAtIndex:(NSUInteger)index; - (BOOL)mergeWithBestSibling; - (void)borrowFromRightSibling:(DBKBTreeNode *)sibling; - (void)borrowFromLeftSibling:(DBKBTreeNode *)sibling; - (void)setRoot; - (BOOL)isRoot; - (BOOL)isLeaf; @end #endif // DBK_BTREE_NODE_H gworkspace-1.1.0/DBKit/DBKBTreeNode.m0000644000175000001440000004204414751213523016371 0ustar multixusers/* DBKBTreeNode.m * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "DBKBTreeNode.h" #import "DBKBTree.h" @implementation DBKBTreeNode - (void)dealloc { RELEASE (offset); RELEASE (keys); RELEASE (subnodes); [super dealloc]; } - (id)initInTree:(DBKBTree *)atree withParent:(DBKBTreeNode *)pnode atOffset:(NSNumber *)ofst { self = [super init]; if (self) { tree = atree; parent = pnode; ASSIGN (offset, ofst); order = [tree order]; minkeys = order - 1; maxkeys = order * 2 - 1; keys = [NSMutableArray new]; subnodes = [NSMutableArray new]; loaded = NO; ulen = sizeof(unsigned); llen = sizeof(unsigned long); } return self; } - (NSUInteger)hash { return [offset hash]; } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [DBKBTreeNode class]]) { return [offset isEqual: [other offset]]; } return NO; } - (BOOL)isLoaded { return loaded; } - (void)setLoaded { loaded = YES; } - (void)loadNodeData { [self setNodeData: [tree dataForNode: self]]; } - (BOOL)unload { [keys removeAllObjects]; [subnodes removeAllObjects]; loaded = NO; return YES; } - (void)setNodeData:(NSData *)ndata { CREATE_AUTORELEASE_POOL (pool); NSRange range; unsigned datalen; unsigned offscount; NSArray *array; NSUInteger i; array = [tree keysFromData: ndata withLength: &datalen]; [keys addObjectsFromArray: array]; range = NSMakeRange(datalen, ulen); [ndata getBytes: &offscount range: range]; range.location += ulen; range.length = llen; for (i = 0; i < offscount; i++) { unsigned long offs; NSNumber *offsnum; DBKBTreeNode *node; [ndata getBytes: &offs range: range]; offsnum = [NSNumber numberWithUnsignedLong: offs]; node = [[DBKBTreeNode alloc] initInTree: tree withParent: self atOffset: offsnum]; [subnodes addObject: node]; RELEASE (node); range.location += llen; } loaded = YES; RELEASE (pool); } - (NSData *)nodeData { NSMutableData *nodeData = [NSMutableData dataWithCapacity: 1]; NSUInteger subcount; NSUInteger i; [nodeData appendData: [tree dataFromKeys: keys]]; subcount = [subnodes count]; [nodeData appendData: [NSData dataWithBytes: &subcount length: ulen]]; for (i = 0; i < subcount; i++) { NSNumber *offsnum = [[subnodes objectAtIndex: i] offset]; unsigned long offs = [offsnum unsignedLongValue]; [nodeData appendData: [NSData dataWithBytes: &offs length: llen]]; } return nodeData; } - (void)save { [tree addUnsavedNode: self]; } - (NSNumber *)offset { return offset; } - (void)setOffset:(NSNumber *)ofst { ASSIGN (offset, ofst); } - (DBKBTreeNode *)parent { return parent; } - (void)setParent:(DBKBTreeNode *)anode { parent = anode; } - (void)insertKey:(id)key atIndex:(NSUInteger)index { [keys insertObject: key atIndex: index]; [self save]; } - (BOOL)insertKey:(id)key { CREATE_AUTORELEASE_POOL(arp); unsigned count = [keys count]; int ins = 0; if (count) { NSUInteger first = 0; NSUInteger last = count; NSUInteger pos = 0; id k; NSComparisonResult result; while (1) { if (first == last) { ins = first; break; } pos = (first + last) / 2; k = [keys objectAtIndex: pos]; result = [tree compareNodeKey: k withKey: key]; if (result == NSOrderedSame) { /* the key exists */ RELEASE (arp); return NO; } else if (result == NSOrderedAscending) { first = pos + 1; } else { last = pos; } } } [keys insertObject: key atIndex: ins]; [self save]; RELEASE (arp); return YES; } - (NSUInteger)indexForKey:(id)key existing:(BOOL *)exists { CREATE_AUTORELEASE_POOL(arp); NSUInteger count = [keys count]; NSUInteger ins = 0; if (count) { NSUInteger first = 0; NSUInteger last = count; NSUInteger pos = 0; id k; NSComparisonResult result; while (1) { if (first == last) { ins = first; break; } pos = (first + last) / 2; k = [keys objectAtIndex: pos]; result = [tree compareNodeKey: k withKey: key]; if (result == NSOrderedSame) { *exists = YES; RELEASE (arp); return pos; } else if (result == NSOrderedAscending) { first = pos + 1; } else { last = pos; } } } *exists = NO; RELEASE (arp); return ins; } - (NSUInteger)indexOfKey:(id)key { return [keys indexOfObject: key]; } - (id)keyAtIndex:(NSUInteger)index { return [keys objectAtIndex: index]; } - (void)setKeys:(NSArray *)newkeys { [keys removeAllObjects]; [keys addObjectsFromArray: newkeys]; [self save]; } - (void)addKey:(id)key { [keys addObject: key]; [self save]; } - (void)removeKey:(id)key { [keys removeObject: key]; [self save]; } - (void)removeKeyAtIndex:(NSUInteger)index { [keys removeObjectAtIndex: index]; [self save]; } - (void)replaceKeyAtIndex:(NSUInteger)index withKey:(id)key { [keys replaceObjectAtIndex: index withObject: key]; [self save]; } - (void)replaceKey:(id)key withKey:(id)newkey { NSUInteger index = [self indexOfKey: key]; if (index != NSNotFound) { [keys replaceObjectAtIndex: index withObject: newkey]; [self save]; } } - (NSArray *)keys { return keys; } - (id)minKeyInSubnode:(DBKBTreeNode **)node { if (loaded == NO) { [self loadNodeData]; } *node = self; while ([*node isLeaf] == NO) { *node = [[*node subnodes] objectAtIndex: 0]; if ([*node isLoaded] == NO) { [*node loadNodeData]; } } if ([*node isLoaded] == NO) { [*node loadNodeData]; } return [[*node keys] objectAtIndex: 0]; } - (id)maxKeyInSubnode:(DBKBTreeNode **)node { NSArray *nodes; NSArray *ndkeys; if (loaded == NO) { [self loadNodeData]; } *node = self; nodes = [*node subnodes]; while ([*node isLeaf] == NO) { *node = [nodes objectAtIndex: ([nodes count] -1)]; if ([*node isLoaded] == NO) { [*node loadNodeData]; } nodes = [*node subnodes]; } if ([*node isLoaded] == NO) { [*node loadNodeData]; } ndkeys = [*node keys]; return [ndkeys objectAtIndex: ([ndkeys count] -1)]; } - (id)successorKeyInNode:(DBKBTreeNode **)node forKey:(id)key { NSUInteger index; if (loaded == NO) { [self loadNodeData]; } index = [self indexOfKey: key]; if (index != NSNotFound) { return [self successorKeyInNode: node forKeyAtIndex: index]; } return nil; } - (id)successorKeyInNode:(DBKBTreeNode **)node forKeyAtIndex:(NSUInteger)index { DBKBTreeNode *nextNode = nil; DBKBTreeNode *nextParent = nil; id key = nil; NSUInteger pos; if (loaded == NO) { [self loadNodeData]; } if ([self isLeaf] == NO) { if ([subnodes count] > index) { nextNode = [subnodes objectAtIndex: (index + 1)]; if ([nextNode isLoaded] == NO) { [nextNode loadNodeData]; } key = [nextNode minKeyInSubnode: &nextNode]; } } else { if (index < ([keys count] - 1)) { nextNode = self; key = [keys objectAtIndex: (index + 1)]; } else { if ([parent isLastSubnode: self]) { nextParent = parent; nextNode = self; while (nextParent) { if ([nextParent isLastSubnode: nextNode]) { nextNode = nextParent; nextParent = [nextNode parent]; } else { pos = [nextParent indexOfSubnode: nextNode]; nextNode = nextParent; key = [[nextNode keys] objectAtIndex: pos]; break; } } } else { nextNode = parent; pos = [nextNode indexOfSubnode: self]; key = [[nextNode keys] objectAtIndex: pos]; } } } *node = nextNode; return key; } - (id)predecessorKeyInNode:(DBKBTreeNode **)node forKey:(id)key { NSUInteger index; if (loaded == NO) { [self loadNodeData]; } index = [self indexOfKey: key]; if (index != NSNotFound) { return [self predecessorKeyInNode: node forKeyAtIndex: index]; } return nil; } - (id)predecessorKeyInNode:(DBKBTreeNode **)node forKeyAtIndex:(NSUInteger)index { DBKBTreeNode *nextNode = nil; DBKBTreeNode *nextParent = nil; id key = nil; NSUInteger pos; if (loaded == NO) { [self loadNodeData]; } if ([self isLeaf] == NO) { if (index < [subnodes count]) { nextNode = [subnodes objectAtIndex: index]; if ([nextNode isLoaded] == NO) { [nextNode loadNodeData]; } key = [nextNode maxKeyInSubnode: &nextNode]; } } else { if (index > 0) { nextNode = self; key = [keys objectAtIndex: (index - 1)]; } else { if ([parent isFirstSubnode: self]) { nextParent = parent; nextNode = self; while (nextParent) { if ([nextParent isFirstSubnode: nextNode]) { nextNode = nextParent; nextParent = [nextNode parent]; } else { pos = [nextParent indexOfSubnode: nextNode]; nextNode = nextParent; key = [[nextNode keys] objectAtIndex: (pos - 1)]; break; } } } else { nextNode = parent; pos = [nextNode indexOfSubnode: self]; key = [[nextNode keys] objectAtIndex: (pos - 1)]; } } } *node = nextNode; return key; } - (void)insertSubnode:(DBKBTreeNode *)node atIndex:(NSUInteger)index { [node setParent: self]; [subnodes insertObject: node atIndex: index]; [self save]; } - (void)addSubnode:(DBKBTreeNode *)node { [node setParent: self]; [subnodes addObject: node]; [self save]; } - (void)removeSubnode:(DBKBTreeNode *)node { [subnodes removeObject: node]; [self save]; } - (void)removeSubnodeAtIndex:(NSUInteger)index { [subnodes removeObjectAtIndex: index]; [self save]; } - (void)replaceSubnodeAtIndex:(NSUInteger)index withNode:(DBKBTreeNode *)node { [node setParent: self]; [subnodes replaceObjectAtIndex: index withObject: node]; [self save]; } - (NSUInteger)indexOfSubnode:(DBKBTreeNode *)node { return [subnodes indexOfObject: node]; } - (DBKBTreeNode *)subnodeAtIndex:(NSUInteger)index { return [subnodes objectAtIndex: index]; } - (BOOL)isFirstSubnode:(DBKBTreeNode *)node { NSUInteger index = [self indexOfSubnode: node]; return ((index != NSNotFound) && (index == 0)); } - (BOOL)isLastSubnode:(DBKBTreeNode *)node { NSUInteger index = [self indexOfSubnode: node]; return ((index != NSNotFound) && (index == ([subnodes count] - 1))); } - (void)setSubnodes:(NSArray *)nodes { NSUInteger i; [subnodes removeAllObjects]; for (i = 0; i < [nodes count]; i++) { [self addSubnode: [nodes objectAtIndex: i]]; } [self save]; } - (NSArray *)subnodes { return subnodes; } - (DBKBTreeNode *)leftSibling { if (parent) { NSUInteger index = [parent indexOfSubnode: self]; if (index > 0) { return [[parent subnodes] objectAtIndex: (index - 1)]; } } return nil; } - (DBKBTreeNode *)rightSibling { if (parent) { NSArray *pnodes = [parent subnodes]; NSUInteger index = [parent indexOfSubnode: self]; if (index < ([pnodes count] - 1)) { return [pnodes objectAtIndex: (index + 1)]; } } return nil; } - (void)splitSubnodeAtIndex:(NSUInteger)index { DBKBTreeNode *subnode; DBKBTreeNode *newnode; NSArray *subkeys; NSArray *akeys; id key; NSArray *bkeys; CREATE_AUTORELEASE_POOL(arp); subnode = [subnodes objectAtIndex: index]; if ([subnode isLoaded] == NO) { [subnode loadNodeData]; } newnode = [[DBKBTreeNode alloc] initInTree: tree withParent: self atOffset: [tree offsetForNewNode]]; [newnode setLoaded]; subkeys = [subnode keys]; akeys = [subkeys subarrayWithRange: NSMakeRange(0, order - 1)]; key = [subkeys objectAtIndex: order - 1]; bkeys = [subkeys subarrayWithRange: NSMakeRange(order, order - 1)]; RETAIN (key); [subnode setKeys: akeys]; [newnode setKeys: bkeys]; if ([subnode isLeaf] == NO) { NSArray *nodes = [subnode subnodes]; NSArray *anodes = [nodes subarrayWithRange: NSMakeRange(0, order)]; NSArray *bnodes = [nodes subarrayWithRange: NSMakeRange(order, order)]; [subnode setSubnodes: anodes]; [newnode setSubnodes: bnodes]; } [self insertSubnode: newnode atIndex: index + 1]; [self insertKey: key atIndex: index]; [subnode save]; [newnode save]; [self save]; RELEASE (key); RELEASE (newnode); RELEASE (arp); } - (BOOL)mergeWithBestSibling { if (parent) { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *lftnd; unsigned lcount = 0; DBKBTreeNode *rgtnd; unsigned rcount = 0; DBKBTreeNode *node; NSArray *ndkeys; NSUInteger index; NSUInteger i; lftnd = [self leftSibling]; if (lftnd) { if ([lftnd isLoaded] == NO) { [lftnd loadNodeData]; } lcount = [[lftnd keys] count]; } rgtnd = [self rightSibling]; if (rgtnd) { if ([rgtnd isLoaded] == NO) { [rgtnd loadNodeData]; } rcount = [[rgtnd keys] count]; } node = (lcount > rcount) ? lftnd : rgtnd; ndkeys = [node keys]; index = [parent indexOfSubnode: self]; if (node == rgtnd) { [self addKey: [[parent keys] objectAtIndex: index]]; } else { index--; [self insertKey: [[parent keys] objectAtIndex: index] atIndex: 0]; } if (node == rgtnd) { for (i = 0; i < [ndkeys count]; i++) [self addKey: [ndkeys objectAtIndex: i]]; } else { for (i = [ndkeys count]; i > 0; i--) [self insertKey: [ndkeys objectAtIndex: i-1] atIndex: 0]; } if ([self isLeaf] == NO) { NSArray *ndnodes = [node subnodes]; if (node == rgtnd) { for (i = 0; i < [ndnodes count]; i++) [self addSubnode: [ndnodes objectAtIndex: i]]; } else { for (i = [ndnodes count]; i > 0; i--) [self insertSubnode: [ndnodes objectAtIndex: i-1] atIndex: 0]; } } [parent removeKeyAtIndex: index]; [tree nodeWillFreeOffset: [node offset]]; [parent removeSubnode: node]; [parent save]; [self save]; RELEASE (arp); return YES; } return NO; } - (void)borrowFromRightSibling:(DBKBTreeNode *)sibling { CREATE_AUTORELEASE_POOL(arp); NSUInteger index = [parent indexOfSubnode: self]; if ([sibling isLoaded] == NO) { [sibling loadNodeData]; } [self addKey: [[parent keys] objectAtIndex: index]]; if ([sibling isLeaf] == NO) { [self addSubnode: [[sibling subnodes] objectAtIndex: 0]]; [sibling removeSubnodeAtIndex: 0]; } [parent replaceKeyAtIndex: index withKey: [[sibling keys] objectAtIndex: 0]]; [sibling removeKeyAtIndex: 0]; [self save]; [sibling save]; [parent save]; RELEASE (arp); } - (void)borrowFromLeftSibling:(DBKBTreeNode *)sibling { CREATE_AUTORELEASE_POOL(arp); NSUInteger index; NSArray *lftkeys; unsigned lftkcount; if ([sibling isLoaded] == NO) { [sibling loadNodeData]; } index = [parent indexOfSubnode: sibling]; lftkeys = [sibling keys]; lftkcount = [lftkeys count]; [self insertKey: [[parent keys] objectAtIndex: index] atIndex: 0]; if ([sibling isLeaf] == NO) { NSArray *lftnodes = [sibling subnodes]; unsigned lftncount = [lftnodes count]; [self insertSubnode: [lftnodes objectAtIndex: (lftncount - 1)] atIndex: 0]; [sibling removeSubnodeAtIndex: (lftncount - 1)]; } [parent replaceKeyAtIndex: index withKey: [lftkeys objectAtIndex: (lftkcount - 1)]]; [sibling removeKeyAtIndex: (lftkcount - 1)]; [self save]; [sibling save]; [parent save]; RELEASE (arp); } - (void)setRoot { parent = nil; } - (BOOL)isRoot { return (parent == nil); } - (BOOL)isLeaf { return ([subnodes count] == 0); } @end gworkspace-1.1.0/DBKit/DBKFixLenRecordsFile.h0000644000175000001440000000332514751213523020063 0ustar multixusers/* DBKFixLenRecordsFile.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DBK_FIX_LEN_RECORDS_FILE_H #define DBK_FIX_LEN_RECORDS_FILE_H #include @interface DBKFixLenRecordsFile: NSObject { NSString *path; NSMutableDictionary *cacheDict; NSMutableArray *offsets; NSFileHandle *handle; unsigned long eof; unsigned maxlen; BOOL autoflush; NSFileManager *fm; } - (id)initWithPath:(NSString *)apath cacheLength:(unsigned)len; - (void)open; - (void)close; - (void)setAutoflush:(BOOL)value; - (BOOL)autoflush; - (void)flushIfNeeded; - (void)flush; - (NSData *)dataOfLength:(unsigned)length atOffset:(NSNumber *)offset; - (void)writeData:(NSData *)data atOffset:(NSNumber *)offset; - (int)insertionIndexForOffset:(NSNumber *)offset; - (NSNumber *)offsetForNewData; @end #endif // DBK_FIX_LEN_RECORDS_FILE_H gworkspace-1.1.0/DBKit/DBKFixLenRecordsFile.m0000644000175000001440000001174114751213523020071 0ustar multixusers/* DBKFixLenRecordsFile.m * * Copyright (C) 2005-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include "DBKFixLenRecordsFile.h" @implementation DBKFixLenRecordsFile - (void)dealloc { if (handle) { [handle closeFile]; RELEASE (handle); } RELEASE (path); RELEASE (cacheDict); RELEASE (offsets); [super dealloc]; } - (id)initWithPath:(NSString *)apath cacheLength:(unsigned)len { self = [super init]; if (self) { BOOL exists, isdir; ASSIGN (path, apath); fm = [NSFileManager defaultManager]; exists = [fm fileExistsAtPath: path isDirectory: &isdir]; if (isdir) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"%@ is a directory!", apath]; return self; } else if (exists == NO) { if ([fm createFileAtPath: path contents: nil attributes: nil] == NO) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"cannot create file at: %@", apath]; return self; } } [self open]; if (handle == nil) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"cannot open file at: %@", apath]; return self; } cacheDict = [NSMutableDictionary new]; offsets = [NSMutableArray new]; maxlen = len; autoflush = YES; } return self; } - (void)open { if (handle == nil) { handle = [NSFileHandle fileHandleForUpdatingAtPath: path]; RETAIN (handle); } [handle seekToEndOfFile]; eof = [handle offsetInFile]; } - (void)close { if (handle) { [handle seekToEndOfFile]; eof = [handle offsetInFile]; [handle closeFile]; DESTROY (handle); } } - (void)setAutoflush:(BOOL)value { autoflush = value; } - (BOOL)autoflush { return autoflush; } - (void)flushIfNeeded { if (([cacheDict count] >= maxlen) && autoflush) { [self flush]; } } - (void)flush { CREATE_AUTORELEASE_POOL (arp); int i; for (i = 0; i < [offsets count]; i++) { NSNumber *offset = [offsets objectAtIndex: i]; NSData *data = [cacheDict objectForKey: offset]; unsigned long ofst; [handle seekToFileOffset: [offset unsignedLongValue]]; [handle writeData: data]; ofst = [handle offsetInFile]; if (ofst > eof) { eof = ofst; } } [cacheDict removeAllObjects]; [offsets removeAllObjects]; RELEASE (arp); } - (NSData *)dataOfLength:(unsigned)length atOffset:(NSNumber *)offset { NSData *data = [cacheDict objectForKey: offset]; if (data == nil) { [handle seekToFileOffset: [offset unsignedLongValue]]; data = [handle readDataOfLength: length]; } return data; } - (void)writeData:(NSData *)data atOffset:(NSNumber *)offset { int index = [self insertionIndexForOffset: offset]; [cacheDict setObject: data forKey: offset]; if (index != -1) { [offsets insertObject: offset atIndex: index]; } if (([cacheDict count] >= maxlen) && autoflush) { [self flush]; } } - (int)insertionIndexForOffset:(NSNumber *)offset { CREATE_AUTORELEASE_POOL(arp); unsigned count = [offsets count]; int ins = 0; if (count) { NSNumber *ofst = nil; int first = 0; int last = count; int pos = 0; NSComparisonResult result; while (1) { if (first == last) { ins = first; break; } pos = (first + last) / 2; ofst = [offsets objectAtIndex: pos]; result = [ofst compare: offset]; if (result == NSOrderedSame) { RELEASE (arp); return -1; } else if (result == NSOrderedAscending) { first = pos + 1; } else { last = pos; } } } RELEASE (arp); return ins; } - (NSNumber *)offsetForNewData { unsigned count = [offsets count]; unsigned long coffs = 0; if (count > 0) { NSNumber *key = [offsets objectAtIndex: (count - 1)]; NSData *data = [cacheDict objectForKey: key]; coffs = [key unsignedLongValue] + [data length]; } return [NSNumber numberWithUnsignedLong: ((coffs > eof) ? coffs : eof)]; } @end gworkspace-1.1.0/DBKit/DBKFreeNodesPage.h0000644000175000001440000000364114751213523017224 0ustar multixusers/* DBKFreeNodesPage.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DBK_FREE_NODES_PAGE_H #define DBK_FREE_NODES_PAGE_H #include @class DBKBTree; @class DBKFixLenRecordsFile; @interface DBKFreeNodesPage: NSObject { DBKBTree *tree; DBKFixLenRecordsFile *file; NSMutableData *pageData; unsigned dlength; unsigned headlen; unsigned long firstOffset; unsigned long currOffset; unsigned long prevOffset; unsigned long nextOffset; unsigned long nodesCount; NSRange lastNodeRange; unsigned llen; } - (id)initInTree:(DBKBTree *)atree withFile:(DBKFixLenRecordsFile *)afile atOffset:(unsigned long)ofst length:(unsigned)len; - (void)gotoLastValidPage; - (NSData *)dataOfPageAtOffset:(unsigned long)offset; - (void)getOffsetsFromData:(NSData *)data; - (void)writeCurrentPage; - (void)addFreeOffset:(unsigned long)offset; - (unsigned long)getFreeOffset; - (unsigned long)currentPageOffset; - (unsigned long)previousPageOffset; - (unsigned long)nextPageOffset; @end #endif // DBK_FREE_NODES_PAGE_H gworkspace-1.1.0/DBKit/DBKFreeNodesPage.m0000644000175000001440000001231014751213523017222 0ustar multixusers/* DBKFreeNodesPage.m * * Copyright (C) 2005-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include "DBKFreeNodesPage.h" #include "DBKBTree.h" #include "DBKBTreeNode.h" #include "DBKFixLenRecordsFile.h" @implementation DBKFreeNodesPage - (void)dealloc { RELEASE (pageData); RELEASE (file); [super dealloc]; } - (id)initInTree:(DBKBTree *)atree withFile:(DBKFixLenRecordsFile *)afile atOffset:(unsigned long)ofst length:(unsigned)len { self = [super init]; if (self) { pageData = [[NSMutableData alloc] initWithCapacity: 1]; tree = atree; ASSIGN (file, afile); firstOffset = ofst; currOffset = ofst; dlength = len; llen = sizeof(unsigned long); headlen = llen * 4; [self gotoLastValidPage]; } return self; } - (void)gotoLastValidPage { CREATE_AUTORELEASE_POOL (pool); NSData *data; unsigned long count; currOffset = firstOffset; nextOffset = firstOffset; data = nil; while (nextOffset != 0) { data = [self dataOfPageAtOffset: nextOffset]; [self getOffsetsFromData: data]; } if ((nodesCount == 0) && (currOffset != firstOffset)) { while (nodesCount == 0) { data = [self dataOfPageAtOffset: prevOffset]; [self getOffsetsFromData: data]; if (currOffset == firstOffset) { break; } } } [pageData setLength: 0]; [pageData appendData: data]; count = (nodesCount > 0) ? (nodesCount - 1) : nodesCount; lastNodeRange = NSMakeRange(headlen + (count * llen), llen); RELEASE (pool); } - (NSData *)dataOfPageAtOffset:(unsigned long)offset { return [file dataOfLength: dlength atOffset: [NSNumber numberWithUnsignedLong: offset]]; } - (void)getOffsetsFromData:(NSData *)data { [data getBytes: &currOffset range: NSMakeRange(0, llen)]; [data getBytes: &prevOffset range: NSMakeRange(llen, llen)]; [data getBytes: &nextOffset range: NSMakeRange(llen * 2, llen)]; [data getBytes: &nodesCount range: NSMakeRange(llen * 3, llen)]; } - (void)writeCurrentPage { CREATE_AUTORELEASE_POOL (pool); NSData *data = [pageData copy]; [file writeData: data atOffset: [NSNumber numberWithUnsignedLong: currOffset]]; RELEASE (data); RELEASE (pool); } - (void)addFreeOffset:(unsigned long)offset { CREATE_AUTORELEASE_POOL (arp); unsigned long nodeofs; [pageData getBytes: &nodeofs range: lastNodeRange]; if (nodeofs != 0) { lastNodeRange.location += llen; } if (lastNodeRange.location == dlength) { NSData *data; if (nextOffset == 0) { nextOffset = [tree offsetForFreeNodesPage]; [pageData replaceBytesInRange: NSMakeRange(llen * 2, llen) withBytes: &nextOffset]; } [self writeCurrentPage]; data = [self dataOfPageAtOffset: nextOffset]; [self getOffsetsFromData: data]; [pageData setLength: 0]; [pageData appendData: data]; lastNodeRange.location = headlen; } [pageData replaceBytesInRange: lastNodeRange withBytes: &offset]; nodesCount++; [pageData replaceBytesInRange: NSMakeRange(llen * 3, llen) withBytes: &nodesCount]; RELEASE (arp); } - (unsigned long)getFreeOffset { unsigned long offset = 0; if (nodesCount > 0) { CREATE_AUTORELEASE_POOL (arp); [pageData getBytes: &offset range: lastNodeRange]; [pageData resetBytesInRange: lastNodeRange]; nodesCount--; [pageData replaceBytesInRange: NSMakeRange(llen * 3, llen) withBytes: &nodesCount]; lastNodeRange.location -= llen; if (nodesCount == 0) { if (currOffset != firstOffset) { NSData *data; unsigned long count; [self writeCurrentPage]; data = [self dataOfPageAtOffset: prevOffset]; [self getOffsetsFromData: data]; count = (nodesCount > 0) ? (nodesCount - 1) : nodesCount; lastNodeRange = NSMakeRange(headlen + (count * llen), llen); [pageData setLength: 0]; [pageData appendData: data]; } else { lastNodeRange.location = headlen; } } RELEASE (arp); } return offset; } - (unsigned long)currentPageOffset { return currOffset; } - (unsigned long)previousPageOffset { return prevOffset; } - (unsigned long)nextPageOffset { return nextOffset; } @end gworkspace-1.1.0/DBKit/DBKPathsTree.h0000644000175000001440000000457014751213523016456 0ustar multixusers/* DBKPathsTree.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DBK_PATHS_TREE_H #define DBK_PATHS_TREE_H #include #define MAX_PATH_DEEP 256 typedef struct _pcomp { id name; struct _pcomp **subcomps; unsigned sub_count; unsigned capacity; struct _pcomp *parent; int ins_count; unsigned last_path_comp; } pcomp; @interface DBKPathsTree: NSObject { pcomp *tree; id identifier; } - (id)initWithIdentifier:(id)ident; - (id)identifier; - (void)insertComponentsOfPath:(NSString *)path; - (void)removeComponentsOfPath:(NSString *)path; - (void)emptyTree; - (BOOL)inTreeFullPath:(NSString *)path; - (BOOL)inTreeFirstPartOfPath:(NSString *)path; - (BOOL)containsElementsOfPath:(NSString *)path; - (NSArray *)paths; @end pcomp *newTreeWithIdentifier(id identifier); pcomp *compInsertingName(NSString *name, pcomp *parent); pcomp *subcompWithName(NSString *name, pcomp *parent); void removeSubcomp(pcomp *comp, pcomp *parent); void insertComponentsOfPath(NSString *path, pcomp *base); void removeComponentsOfPath(NSString *path, pcomp *base); void emptyTreeWithBase(pcomp *base); void freeTree(pcomp *base); void freeComp(pcomp *comp); BOOL fullPathInTree(NSString *path, pcomp *base); BOOL inTreeFirstPartOfPath(NSString *path, pcomp *base); BOOL containsElementsOfPath(NSString *path, pcomp *base); NSArray *pathsOfTreeWithBase(pcomp *base); void appendComponentToArray(pcomp *comp, NSString *path, NSMutableArray *paths); unsigned deepOfComponent(pcomp *comp); #endif // DBK_PATHS_TREE_H gworkspace-1.1.0/DBKit/DBKPathsTree.m0000644000175000001440000002467514751213523016473 0ustar multixusers/* DBKPathsTree.m * * Copyright (C) 2005-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "DBKPathsTree.h" #define GROW_FACTOR 32 static SEL pathCompsSel = NULL; static IMP pathCompsImp = NULL; typedef int (*intIMP)(id, SEL, id); static SEL pathCompareSel = NULL; static intIMP pathCompareImp = NULL; @implementation DBKPathsTree - (void)dealloc { freeTree(tree); RELEASE (identifier); [super dealloc]; } - (id)initWithIdentifier:(id)ident { self = [super init]; if (self) { ASSIGN (identifier, ident); tree = newTreeWithIdentifier(identifier); } return self; } - (id)identifier { return identifier; } - (NSUInteger)hash { return [identifier hash]; } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [DBKPathsTree class]]) { return [identifier isEqual: [other identifier]]; } return NO; } - (void)insertComponentsOfPath:(NSString *)path { insertComponentsOfPath(path, tree); } - (void)removeComponentsOfPath:(NSString *)path { removeComponentsOfPath(path, tree); } - (void)emptyTree { emptyTreeWithBase(tree); } - (BOOL)inTreeFullPath:(NSString *)path { return fullPathInTree(path, tree); } - (BOOL)inTreeFirstPartOfPath:(NSString *)path { return inTreeFirstPartOfPath(path, tree); } - (BOOL)containsElementsOfPath:(NSString *)path { return containsElementsOfPath(path, tree); } - (NSArray *)paths { return pathsOfTreeWithBase(tree); } @end pcomp *newTreeWithIdentifier(id identifier) { if (identifier) { pcomp *comp = NSZoneCalloc(NSDefaultMallocZone(), 1, sizeof(pcomp)); comp->name = [identifier retain]; comp->subcomps = NSZoneCalloc(NSDefaultMallocZone(), 1, sizeof(pcomp *)); comp->sub_count = 0; comp->capacity = 0; comp->parent = NULL; comp->ins_count = 1; comp->last_path_comp = 0; if (pathCompsSel == NULL) { pathCompsSel = @selector(pathComponents); } if (pathCompsImp == NULL) { pathCompsImp = [NSString instanceMethodForSelector: pathCompsSel]; } if (pathCompareSel == NULL) { pathCompareSel = @selector(compare:); } if (pathCompareImp == NULL) { pathCompareImp = (intIMP)[NSString instanceMethodForSelector: pathCompareSel]; } return comp; } return NULL; } pcomp *compInsertingName(NSString *name, pcomp *parent) { unsigned ins = 0; unsigned i; if (parent->sub_count) { unsigned first = 0; unsigned last = parent->sub_count; unsigned pos = 0; NSComparisonResult result; while (1) { if (first == last) { ins = first; break; } pos = (first + last) / 2; result = (*pathCompareImp)(parent->subcomps[pos]->name, pathCompareSel, name); if (result == NSOrderedSame) { parent->subcomps[pos]->ins_count++; return parent->subcomps[pos]; } else if (result == NSOrderedAscending) { first = pos + 1; } else { last = pos; } } } if ((parent->sub_count + 1) > parent->capacity) { size_t size; pcomp **ptr; parent->capacity += GROW_FACTOR; size = parent->capacity * sizeof(pcomp *); ptr = NSZoneRealloc(NSDefaultMallocZone(), parent->subcomps, size); if (ptr == 0) { [NSException raise: NSMallocException format: @"Unable to grow tree"]; } parent->subcomps = ptr; } for (i = parent->sub_count; i > ins; i--) { parent->subcomps[i] = parent->subcomps[i - 1]; } parent->sub_count++; parent->subcomps[ins] = NSZoneCalloc(NSDefaultMallocZone(), 1, sizeof(pcomp)); parent->subcomps[ins]->name = [[NSString alloc] initWithString: name]; parent->subcomps[ins]->subcomps = NSZoneCalloc(NSDefaultMallocZone(), 1, sizeof(pcomp *)); parent->subcomps[ins]->sub_count = 0; parent->subcomps[ins]->capacity = 0; parent->subcomps[ins]->parent = parent; parent->subcomps[ins]->ins_count = 1; parent->subcomps[ins]->last_path_comp = 0; return parent->subcomps[ins]; } pcomp *subcompWithName(NSString *name, pcomp *parent) { if (parent->sub_count) { unsigned first = 0; unsigned last = parent->sub_count; unsigned pos = 0; NSComparisonResult result; while (1) { if (first == last) { break; } pos = (first + last) / 2; result = (*pathCompareImp)(parent->subcomps[pos]->name, pathCompareSel, name); if (result == NSOrderedSame) { return parent->subcomps[pos]; } else if (result == NSOrderedAscending) { first = pos + 1; } else { last = pos; } } } return NULL; } void removeSubcomp(pcomp *comp, pcomp *parent) { unsigned i, j; for (i = 0; i < parent->sub_count; i++) { if (parent->subcomps[i] == comp) { freeComp(parent->subcomps[i]); for (j = i; j < (parent->sub_count - 1); j++) { parent->subcomps[j] = parent->subcomps[j + 1]; } parent->sub_count--; break; } } } void insertComponentsOfPath(NSString *path, pcomp *base) { NSArray *components = (*pathCompsImp)(path, pathCompsSel); pcomp *comp = base; unsigned i; for (i = 0; i < [components count]; i++) { comp = compInsertingName([components objectAtIndex: i], comp); } comp->last_path_comp = 1; } void removeComponentsOfPath(NSString *path, pcomp *base) { NSArray *components = (*pathCompsImp)(path, pathCompsSel); unsigned compcount = [components count]; pcomp *comp = base; pcomp *comps[MAX_PATH_DEEP]; unsigned count = 0; int i; for (i = 0; i < compcount; i++) { comp = subcompWithName([components objectAtIndex: i], comp); if (comp) { comp->ins_count--; if (i == (compcount -1)) { comp->last_path_comp = 0; } comps[count] = comp; count++; } else { break; } } for (i = count - 1; i >= 0; i--) { if ((comps[i]->sub_count == 0) && (comps[i]->ins_count <= 0)) { removeSubcomp(comps[i], comps[i]->parent); } } } void emptyTreeWithBase(pcomp *base) { unsigned i; for (i = 0; i < base->sub_count; i++) { emptyTreeWithBase(base->subcomps[i]); } if (base->parent) { for (i = 0; i < base->parent->sub_count; i++) { if (base->parent->subcomps[i] == base) { base->parent->sub_count--; freeComp(base->parent->subcomps[i]); break; } } } else { NSZoneFree(NSDefaultMallocZone(), base->subcomps); base->subcomps = NSZoneCalloc(NSDefaultMallocZone(), GROW_FACTOR, sizeof(pcomp *)); base->capacity = GROW_FACTOR; base->sub_count = 0; } } void freeTree(pcomp *base) { unsigned i; for (i = 0; i < base->sub_count; i++) { emptyTreeWithBase(base->subcomps[i]); } if (base->parent) { for (i = 0; i < base->parent->sub_count; i++) { if (base->parent->subcomps[i] == base) { base->parent->sub_count--; freeComp(base->parent->subcomps[i]); break; } } } else { freeComp(base); } } void freeComp(pcomp *comp) { DESTROY (comp->name); NSZoneFree(NSDefaultMallocZone(), comp->subcomps); NSZoneFree(NSDefaultMallocZone(), comp); } /* This verifies if the full path has been inserted in the tree. */ BOOL fullPathInTree(NSString *path, pcomp *base) { NSArray *components = (*pathCompsImp)(path, pathCompsSel); pcomp *comp = base; unsigned count = [components count]; unsigned i; for (i = 0; i < count; i++) { comp = subcompWithName([components objectAtIndex: i], comp); if (comp == NULL) { break; } else if ((i == (count -1)) && (comp->last_path_comp == 1)) { return YES; } } return NO; } /* This verifies if the first part of a path has been inserted in the tree. It can be used to filter events happened deeper than the inserted path; that is, if the first part exists in the three, this means that also the entire path is allowed or denied. */ BOOL inTreeFirstPartOfPath(NSString *path, pcomp *base) { NSArray *components = (*pathCompsImp)(path, pathCompsSel); pcomp *comp = base; unsigned count = [components count]; unsigned i; for (i = 0; i < count; i++) { comp = subcompWithName([components objectAtIndex: i], comp); if (comp == NULL) { break; } else if (comp->sub_count == 0) { return YES; } } return NO; } /* This verifies if the tree contains all the elements of the path, */ BOOL containsElementsOfPath(NSString *path, pcomp *base) { NSArray *components = (*pathCompsImp)(path, pathCompsSel); pcomp *comp = base; unsigned count = [components count]; unsigned i; for (i = 0; i < count; i++) { comp = subcompWithName([components objectAtIndex: i], comp); if (comp == NULL) { return NO; } } return YES; } NSArray *pathsOfTreeWithBase(pcomp *base) { NSMutableArray *paths = [NSMutableArray array]; if ((base->parent == NULL) && (base->sub_count == 1)) { base = base->subcomps[0]; } appendComponentToArray(base, nil, paths); return (([paths count] > 0) ? [paths makeImmutableCopyOnFail: NO] : nil); } void appendComponentToArray(pcomp *comp, NSString *path, NSMutableArray *paths) { if (path == nil) { path = [NSString stringWithString: comp->name]; } else { path = [path stringByAppendingPathComponent: comp->name]; } if (comp->last_path_comp) { [paths addObject: path]; } if (comp->sub_count) { unsigned i; for (i = 0; i < comp->sub_count; i++) { appendComponentToArray(comp->subcomps[i], path, paths); } } } unsigned deepOfComponent(pcomp *comp) { if (comp->parent != NULL) { return (1 + deepOfComponent(comp->parent)); } return 0; } gworkspace-1.1.0/DBKit/DBKVarLenRecordsFile.h0000644000175000001440000000437114751213523020067 0ustar multixusers/* DBKVarLenRecordsFile.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DBK_VAR_LEN_RECORDS_FILE_H #define DBK_VAR_LEN_RECORDS_FILE_H #include #include "DBKBTree.h" @class DBKBFreeNodeEntry; @interface DBKVarLenRecordsFile: NSObject { NSMutableDictionary *cacheDict; NSMutableArray *offsets; NSFileHandle *handle; unsigned long eof; unsigned maxlen; BOOL autoflush; DBKBTree *freeOffsetsTree; unsigned ulen; unsigned llen; } - (id)initWithPath:(NSString *)path cacheLength:(unsigned)len; - (void)setAutoflush:(BOOL)value; - (BOOL)autoflush; - (void)flushIfNeeded; - (void)flush; - (NSData *)dataAtOffset:(NSNumber *)offset; - (NSNumber *)writeData:(NSData *)data; - (void)writeData:(NSData *)data atOffset:(NSNumber *)offset; - (void)deleteDataAtOffset:(NSNumber *)offset; - (NSNumber *)offsetForNewData:(NSData *)data; - (int)insertionIndexForOffset:(NSNumber *)offset; - (NSNumber *)freeOffsetForData:(NSData *)data; @end @interface DBKBFreeNodeEntry: NSObject { NSNumber *lengthNum; NSNumber *offsetNum; } + (id)entryWithLength:(unsigned long)len atOffset:(unsigned long)ofst; - (id)initWithLength:(unsigned long)len atOffset:(unsigned long)ofst; - (NSNumber *)lengthNum; - (unsigned long)length; - (NSNumber *)offsetNum; - (unsigned long)offset; @end #endif // DBK_VAR_LEN_RECORDS_FILE_H gworkspace-1.1.0/DBKit/DBKVarLenRecordsFile.m0000644000175000001440000002555414751213523020102 0ustar multixusers/* DBKVarLenRecordsFile.m * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "DBKVarLenRecordsFile.h" #import "DBKBTreeNode.h" #define FIRST_OFFSET 512 @implementation DBKVarLenRecordsFile - (void)dealloc { if (handle) { [handle closeFile]; RELEASE (handle); } RELEASE (freeOffsetsTree); RELEASE (cacheDict); RELEASE (offsets); [super dealloc]; } - (id)initWithPath:(NSString *)path cacheLength:(unsigned)len { self = [super init]; if (self) { NSMutableData *data = [NSMutableData dataWithCapacity: 1]; NSFileManager *fm = [NSFileManager defaultManager]; BOOL exists, isdir; exists = [fm fileExistsAtPath: path isDirectory: &isdir]; if (exists == NO) { if ([fm createDirectoryAtPath: path attributes: nil] == NO) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"cannot create directory at: %@", path]; return self; } isdir = YES; } if (isdir == NO) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"%@ is not a directory!", path]; return self; } else { NSString *recordsPath = [path stringByAppendingPathComponent: @"records"]; NSString *freePath = [path stringByAppendingPathComponent: @"free"]; exists = [fm fileExistsAtPath: recordsPath isDirectory: &isdir]; if (isdir) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"%@ is a directory!", recordsPath]; return self; } else if (exists == NO) { if ([fm createFileAtPath: recordsPath contents: nil attributes: nil] == NO) { DESTROY (self); [NSException raise: NSInvalidArgumentException format: @"cannot create file at: %@", recordsPath]; return self; } } cacheDict = [NSMutableDictionary new]; offsets = [NSMutableArray new]; maxlen = len; autoflush = YES; ulen = sizeof(unsigned); llen = sizeof(unsigned long); handle = [NSFileHandle fileHandleForUpdatingAtPath: recordsPath]; RETAIN (handle); [data setLength: FIRST_OFFSET]; [handle writeData: data]; [handle seekToEndOfFile]; eof = [handle offsetInFile]; freeOffsetsTree = [[DBKBTree alloc] initWithPath: freePath order: 16 delegate: self]; } } return self; } - (void)setAutoflush:(BOOL)value { autoflush = value; } - (BOOL)autoflush { return autoflush; } - (void)flushIfNeeded { if (([cacheDict count] >= maxlen) && autoflush) { [self flush]; } } - (void)flush { int i; for (i = 0; i < [offsets count]; i++) { CREATE_AUTORELEASE_POOL (arp); NSNumber *offset = [offsets objectAtIndex: i]; NSData *dictdata = [cacheDict objectForKey: offset]; unsigned datalen = [dictdata length]; NSMutableData *data = [NSMutableData dataWithCapacity: 1]; unsigned long ofst; [data appendBytes: &datalen length: ulen]; [data appendData: dictdata]; [handle seekToFileOffset: [offset unsignedLongValue]]; [handle writeData: data]; ofst = [handle offsetInFile]; if (ofst > eof) { eof = ofst; } RELEASE (arp); } [cacheDict removeAllObjects]; [offsets removeAllObjects]; } - (NSData *)dataAtOffset:(NSNumber *)offset { NSData *data = [cacheDict objectForKey: offset]; if (data == nil) { unsigned long ofst = [offset unsignedLongValue]; unsigned datalen; [handle seekToFileOffset: ofst]; data = [handle readDataOfLength: ulen]; [data getBytes: &datalen range: NSMakeRange(0, ulen)]; data = [handle readDataOfLength: datalen]; } return data; } - (NSNumber *)writeData:(NSData *)data { NSNumber *offset = [self offsetForNewData: data]; [self writeData: data atOffset: offset]; return offset; } - (void)writeData:(NSData *)data atOffset:(NSNumber *)offset { int index = [self insertionIndexForOffset: offset]; if (index != -1) { [offsets insertObject: offset atIndex: index]; } [cacheDict setObject: data forKey: offset]; if (([cacheDict count] > maxlen) && autoflush) { [self flush]; } } - (void)deleteDataAtOffset:(NSNumber *)offset { NSData *data = [cacheDict objectForKey: offset]; if (data) { [cacheDict removeObjectForKey: offset]; [offsets removeObject: offset]; } else { CREATE_AUTORELEASE_POOL(arp); unsigned long ofst = [offset unsignedLongValue]; NSData *lndata; unsigned datalen; DBKBFreeNodeEntry *entry; [handle seekToFileOffset: ofst]; lndata = [handle readDataOfLength: ulen]; [lndata getBytes: &datalen range: NSMakeRange(0, ulen)]; entry = [DBKBFreeNodeEntry entryWithLength: datalen atOffset: ofst]; [freeOffsetsTree begin]; [freeOffsetsTree insertKey: entry]; [freeOffsetsTree end]; RELEASE (arp); } } - (NSNumber *)offsetForNewData:(NSData *)data { NSNumber *offset = [self freeOffsetForData: data]; if (offset == nil) { unsigned count = [offsets count]; unsigned long coffs = 0; if (count > 0) { NSNumber *key = [offsets objectAtIndex: (count - 1)]; NSData *dictData = [cacheDict objectForKey: key]; coffs = [key unsignedLongValue] + ulen + [dictData length]; } offset = [NSNumber numberWithUnsignedLong: ((coffs > eof) ? coffs : eof)]; } return offset; } - (int)insertionIndexForOffset:(NSNumber *)offset { CREATE_AUTORELEASE_POOL(arp); unsigned count = [offsets count]; int ins = 0; if (count) { NSNumber *ofst = nil; int first = 0; int last = count; int pos = 0; NSComparisonResult result; while (1) { if (first == last) { ins = first; break; } pos = (first + last) / 2; ofst = [offsets objectAtIndex: pos]; result = [ofst compare: offset]; if (result == NSOrderedSame) { RELEASE (arp); return -1; } else if (result == NSOrderedAscending) { first = pos + 1; } else { last = pos; } } } RELEASE (arp); return ins; } - (NSNumber *)freeOffsetForData:(NSData *)data { CREATE_AUTORELEASE_POOL(arp); DBKBFreeNodeEntry *entry = [DBKBFreeNodeEntry entryWithLength: [data length] atOffset: 0]; DBKBFreeNodeEntry *freeEntry = nil; NSNumber *offset = nil; DBKBTreeNode *node; BOOL exists; NSUInteger index; [freeOffsetsTree begin]; node = [freeOffsetsTree nodeOfKey: entry getIndex: &index didExist: &exists]; if (node && [[node keys] count]) { freeEntry = [node successorKeyInNode: &node forKeyAtIndex: index]; } if (freeEntry) { offset = RETAIN ([freeEntry offsetNum]); [freeOffsetsTree deleteKey: freeEntry]; } [freeOffsetsTree end]; RELEASE (arp); return AUTORELEASE (offset); } // // DBKBTreeDelegate methods // - (unsigned long)nodesize { return 512; } - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen { NSMutableArray *keys = [NSMutableArray array]; NSRange range; unsigned kcount; unsigned i; range = NSMakeRange(0, ulen); [data getBytes: &kcount range: range]; range.location += ulen; range.length = llen; for (i = 0; i < kcount; i++) { CREATE_AUTORELEASE_POOL(arp); DBKBFreeNodeEntry *entry; unsigned long length; unsigned long offset; [data getBytes: &length range: range]; range.location += llen; [data getBytes: &offset range: range]; range.location += llen; entry = [[DBKBFreeNodeEntry alloc] initWithLength: length atOffset: offset]; [keys addObject: entry]; RELEASE (entry); RELEASE (arp); } *dlen = range.location; return keys; } - (NSData *)dataFromKeys:(NSArray *)keys { CREATE_AUTORELEASE_POOL(arp); NSMutableData *data = [NSMutableData dataWithCapacity: 1]; unsigned kcount = [keys count]; unsigned i; [data appendData: [NSData dataWithBytes: &kcount length: ulen]]; for (i = 0; i < kcount; i++) { DBKBFreeNodeEntry *entry = [keys objectAtIndex: i]; unsigned long length = [entry length]; unsigned long offset = [entry offset]; [data appendData: [NSData dataWithBytes: &length length: llen]]; [data appendData: [NSData dataWithBytes: &offset length: llen]]; } RETAIN (data); RELEASE (arp); return [data autorelease]; } - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey { NSComparisonResult result = [[akey lengthNum] compare: [bkey lengthNum]]; if (result == NSOrderedSame) { result = [[akey offsetNum] compare: [bkey offsetNum]]; } return result; } @end @implementation DBKBFreeNodeEntry - (void)dealloc { RELEASE (lengthNum); RELEASE (offsetNum); [super dealloc]; } + (id)entryWithLength:(unsigned long)len atOffset:(unsigned long)ofst { return AUTORELEASE ([[DBKBFreeNodeEntry alloc] initWithLength: len atOffset: ofst]); } - (id)initWithLength:(unsigned long)len atOffset:(unsigned long)ofst { self = [super init]; if (self) { ASSIGN (lengthNum, [NSNumber numberWithUnsignedLong: len]); ASSIGN (offsetNum, [NSNumber numberWithUnsignedLong: ofst]); } return self; } - (NSNumber *)lengthNum { return lengthNum; } - (unsigned long)length { return [lengthNum unsignedLongValue]; } - (NSNumber *)offsetNum { return offsetNum; } - (unsigned long)offset { return [offsetNum unsignedLongValue]; } - (NSUInteger)hash { return ([lengthNum hash] + [offsetNum hash]); } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [DBKBFreeNodeEntry class]]) { return ([lengthNum isEqual: [other lengthNum]] && [offsetNum isEqual: [other offsetNum]]); } return NO; } @end gworkspace-1.1.0/DBKit/GNUmakefile0000644000175000001440000000151013251572110016120 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make LIBRARY_VAR = DBKIT LIBRARY_NAME = libDBKit libDBKit_OBJC_FILES = \ DBKBTree.m \ DBKBTreeNode.m \ DBKFreeNodesPage.m \ DBKFixLenRecordsFile.m \ DBKVarLenRecordsFile.m \ DBKPathsTree.m libDBKit_HEADER_FILES = \ DBKBTree.h \ DBKBTreeNode.h \ DBKFixLenRecordsFile.h \ DBKVarLenRecordsFile.h \ DBKPathsTree.h libDBKit_HEADER_FILES_DIR = . libDBKit_HEADER_FILES_INSTALL_DIR=DBKit LIBRARIES_DEPEND_UPON += $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ifeq ($(OBJC_RUNTIME_LIB), gnu) SHARED_LD_POSTFLAGS += -lgnustep-base endif endif include $(GNUSTEP_MAKEFILES)/library.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/DBKit/GNUmakefile.postamble0000644000175000001440000000126513251572110020114 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # before-all:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f config.status config.log config.cache TAGS GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/DBKit/GNUmakefile.preamble0000644000175000001440000000072713214346535017730 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += gworkspace-1.1.0/DBKit/Testing/0000755000175000001440000000000013670116055015475 5ustar multixusersgworkspace-1.1.0/DBKit/Testing/GNUmakefile0000644000175000001440000000052613670116055017552 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make TOOL_NAME = dbtest dbtest_OBJC_FILES = dbtest.m \ test1.m \ test2.m \ test3.m \ test4.m \ test5.m \ test6.m ADDITIONAL_LIB_DIRS += -lDBKit -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/DBKit/Testing/README0000644000175000001440000000015013214346535016353 0ustar multixusers Before compiling the test you must edit "dbpath.h" to set the path where the database will be created. gworkspace-1.1.0/DBKit/Testing/dbpath.h0000644000175000001440000000006413214346535017112 0ustar multixusers static NSString *dbpath = @"/root/Desktop/dbtest"; gworkspace-1.1.0/DBKit/Testing/dbtest.m0000644000175000001440000000637413214346535017154 0ustar multixusers/* Test DBKit */ #include #include #include #include #include "test.h" #include "dbpath.h" @interface TreeDelegate: NSObject { } - (unsigned long)nodesize; - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen; - (NSData *)dataFromKeys:(NSArray *)keys; - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey; @end @implementation TreeDelegate - (unsigned long)nodesize { return 512; } - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen { NSMutableArray *keys = [NSMutableArray array]; NSRange range; unsigned kcount; unsigned long key; int i; range = NSMakeRange(0, sizeof(unsigned)); [data getBytes: &kcount range: range]; range.location += sizeof(unsigned); range.length = sizeof(unsigned long); for (i = 0; i < kcount; i++) { [data getBytes: &key range: range]; [keys addObject: [NSNumber numberWithUnsignedLong: key]]; range.location += sizeof(unsigned long); } *dlen = range.location; return keys; } - (NSData *)dataFromKeys:(NSArray *)keys { NSMutableData *data = [NSMutableData dataWithCapacity: 1]; unsigned kcount = [keys count]; int i; [data appendData: [NSData dataWithBytes: &kcount length: sizeof(unsigned)]]; for (i = 0; i < kcount; i++) { unsigned long kl = [[keys objectAtIndex: i] unsignedLongValue]; [data appendData: [NSData dataWithBytes: &kl length: sizeof(unsigned long)]]; } return data; } - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey { return [(NSNumber *)akey compare: (NSNumber *)bkey]; } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL (pool); TreeDelegate *delegate = [TreeDelegate new]; DBKBTree *tree = [[DBKBTree alloc] initWithPath: dbpath order: 3 delegate: delegate]; NSDate *date = [NSDate date]; [tree begin]; test1(tree); [tree end]; [tree begin]; test2(tree); [tree end]; [tree begin]; test3(tree); [tree end]; [tree begin]; test4(tree); [tree end]; [tree begin]; test5(tree); [tree end]; [tree begin]; test6(tree); [tree end]; NSLog(@"%.2f", [[NSDate date] timeIntervalSinceDate: date]); NSLog(@"done"); RELEASE (tree); RELEASE (delegate); RELEASE (pool); exit(EXIT_SUCCESS); } void printTree(DBKBTree *tree) { printTreeFromNode(tree, [tree root], 0); } void printTreeFromNode(DBKBTree *tree, DBKBTreeNode *node, int depth) { int kcount; int index = -1; int i, j; if ([node isLoaded] == NO) { [node loadNodeData]; } kcount = [[node keys] count]; if ([node parent] != nil) { index = [[node parent] indexOfSubnode: node]; } if ([node isLeaf] == NO) { printTreeFromNode(tree, [[node subnodes] objectAtIndex: kcount], depth + 1); } for (i = kcount - 1; i >= 0; i--) { for(j = 0; j < depth; j++) { printf("\t"); } printf(" %d (%d)\n", [[[node keys] objectAtIndex: i] intValue], index); if ([node isLeaf] == NO) { printTreeFromNode(tree, [[node subnodes] objectAtIndex: i], depth + 1); } } } gworkspace-1.1.0/DBKit/Testing/test.h0000644000175000001440000000067513214346535016637 0ustar multixusers#ifndef TEST_H #define TEST_H #include #include #include void test1(DBKBTree *tree); void test2(DBKBTree *tree); void test3(DBKBTree *tree); void test4(DBKBTree *tree); void test5(DBKBTree *tree); void test6(DBKBTree *tree); void test7(DBKBTree *tree); void printTree(DBKBTree *tree); void printTreeFromNode(DBKBTree *tree, DBKBTreeNode *node, int depth); #endif // TEST_H gworkspace-1.1.0/DBKit/Testing/test1.m0000644000175000001440000000255413214346535016723 0ustar multixusers#include #include "test.h" void test1(DBKBTree *tree) { DBKBTreeNode *node; int index; NSLog(@"test 1"); NSLog(@"insert 10 items"); [tree insertKey: [NSNumber numberWithUnsignedLong: 372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 125]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 934]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 752]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"search for item 122 in tree"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 122] getIndex: &index]; if (node) { NSLog(@"found 122"); } else { NSLog(@"************* ERROR 122 not found *****************"); } NSLog(@"search for item 441 not in tree"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 441] getIndex: &index]; if (node == nil) { NSLog(@"441 not found"); } else { NSLog(@"************* ERROR found 441 *****************"); } NSLog(@"test 1 passed\n\n"); } gworkspace-1.1.0/DBKit/Testing/test2.m0000644000175000001440000001464113214346535016724 0ustar multixusers#include #include "test.h" void test2(DBKBTree *tree) { DBKBTreeNode *node; int index; NSLog(@"test 2"); NSLog(@"insert 50 items"); [tree insertKey: [NSNumber numberWithUnsignedLong: 122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 302]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 181]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 366]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 224]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 272]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"test for successful searches"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 355] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 202] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 405] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 302] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 96] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 193] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 387] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 266] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 24] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 49] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); NSLog(@"test for unsuccessful searches"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 903] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 182] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 364] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 219] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 439] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 367] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 225] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 441] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 391] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 273] getIndex: &index]; NSLog(@"test 2 passed\n\n"); } gworkspace-1.1.0/DBKit/Testing/test3.m0000644000175000001440000000404013214346535016715 0ustar multixusers#include #include "test.h" void test3(DBKBTree *tree) { NSLog(@"test 3"); NSLog(@"insert 15 items"); [tree insertKey: [NSNumber numberWithUnsignedLong: 122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 125]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 803]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 853]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 934]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 968]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 986]]; NSLog(@"Show tree structure"); printTree(tree); printf("delete item 968 from a leaf and show result\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 968]]; printTree(tree); printf("delete item 957 which causes a merge\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 957]]; printTree(tree); printf("delete item 474 - causes a right borrow\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 474]]; printTree(tree); printf("delete internal item 803 - replaced by successor\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 803]]; printTree(tree); printf("delete internal item 440 - causes a merge\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 440]]; printTree(tree); printf("delete internal item 853 - replaced by predecessor\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 853]]; printTree(tree); printf("delete item 934 - causes a left borrow\n"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 934]]; printTree(tree); NSLog(@"test 3 passed\n\n"); } gworkspace-1.1.0/DBKit/Testing/test4.m0000644000175000001440000001656413214346535016734 0ustar multixusers#include #include "test.h" void test4(DBKBTree *tree) { DBKBTreeNode *node; int index; NSLog(@"test 4"); NSLog(@"insert 50 items"); [tree insertKey: [NSNumber numberWithUnsignedLong: 122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 302]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 181]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 366]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 224]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 272]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"test for successful searches"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 355] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 202] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 405] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 302] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 96] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 193] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 387] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 266] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 24] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 49] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); NSLog(@"test for unsuccessful searches"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 903] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 182] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 364] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 219] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 439] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 367] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 225] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 441] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 391] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 273] getIndex: &index]; NSLog(@"delete some keys"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 122]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 304]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 202]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 199]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 437]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 224]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 272]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"test 4 passed\n\n"); } gworkspace-1.1.0/DBKit/Testing/test5.m0000644000175000001440000020001613214346535016720 0ustar multixusers#include #include "test.h" void test5(DBKBTree *tree) { DBKBTreeNode *node; int index; NSLog(@"test 5"); NSLog(@"insert 50 items"); [tree insertKey: [NSNumber numberWithUnsignedLong: 122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 302]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 181]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 366]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 224]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 272]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"do 459 alternating deletes and inserts"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 295]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 165]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 331]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 110]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 443]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 378]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 497]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 486]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 464]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 332]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 156]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 313]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 237]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 302]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 475]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 376]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 244]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 489]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 470]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 356]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 204]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 225]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 451]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 394]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 280]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 105]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 181]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 211]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 423]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 366]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 224]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 166]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 158]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 317]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 126]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 507]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 295]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 506]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 504]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 165]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 331]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 476]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 444]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 110]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 252]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 443]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 378]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 496]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 497]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 484]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 486]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 464]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 316]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 332]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 156]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 249]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 313]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 237]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 475]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 436]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 376]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 220]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 244]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 441]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 489]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 374]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 470]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 240]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 356]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 454]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 204]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 400]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 292]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 225]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 307]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 451]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 106]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 394]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 213]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 280]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 427]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 346]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 105]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 184]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 211]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 369]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 423]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 230]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 166]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 132]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 158]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 317]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 126]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 507]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 367]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 506]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 504]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 398]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 476]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 444]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 275]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 252]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 171]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 484]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 178]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 357]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 206]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 316]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 413]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 318]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 249]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 128]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 436]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 220]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 441]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 223]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 374]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 240]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 386]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 454]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 400]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 292]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 335]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 307]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 162]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 106]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 325]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 213]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 427]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 346]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 184]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 125]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 369]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 251]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 230]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 498]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 488]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 468]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 132]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 188]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 377]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 246]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 493]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 367]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 448]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 388]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 398]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 268]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 115]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 275]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 171]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 148]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 178]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 297]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 357]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 206]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 413]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 347]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 318]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 186]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 128]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 477]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 446]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 260]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 223]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 386]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 103]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 207]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 335]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 162]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 325]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 155]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 311]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 229]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 125]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 459]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 251]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 312]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 498]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 488]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 468]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 467]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 344]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 188]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 180]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 377]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 361]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 246]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 493]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 448]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 192]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 385]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 268]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 262]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 115]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 135]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 148]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 139]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 297]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 101]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 347]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 186]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 306]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 104]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 477]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 209]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 446]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 330]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 260]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 152]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 102]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 103]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 411]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 207]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 314]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 120]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 458]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 408]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 155]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 108]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 311]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 229]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 362]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 459]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 433]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 312]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 358]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 208]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 467]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 326]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 344]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 180]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 361]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 141]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 283]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 117]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 192]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 235]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 385]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 471]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 262]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 434]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 360]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 212]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 425]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 135]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 342]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 353]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 198]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 139]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 286]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 101]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 129]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 306]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 104]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 209]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 175]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 330]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 351]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 152]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 389]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 102]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 411]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 314]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 131]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 120]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 458]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 408]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 151]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 303]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 108]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 197]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 395]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 362]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 433]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 113]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 358]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 227]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 208]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 455]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 326]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 296]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 169]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 339]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 141]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 170]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 283]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 341]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 174]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 117]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 349]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 235]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 190]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 471]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 381]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 434]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 360]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 0]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 212]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 425]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 342]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 353]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 198]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 286]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 255]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 129]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 175]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 383]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 351]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 389]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 143]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 131]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 133]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 267]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 151]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 303]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 107]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 215]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 197]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 431]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 395]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 354]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 200]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 401]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 113]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 227]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 455]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 161]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 323]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 296]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 138]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 277]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 169]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 339]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 170]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 187]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 341]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 375]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 174]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 242]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 349]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 190]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 381]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 416]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 324]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 0]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 140]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 109]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 370]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 255]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 465]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 336]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 329]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 383]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 189]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 379]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 250]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 480]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 143]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 452]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 396]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 284]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 133]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 267]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 243]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 487]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 107]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 215]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 431]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 354]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 200]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 345]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 401]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 182]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 365]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 222]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 161]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 445]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 323]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 382]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 138]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 277]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 187]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 375]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 242]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 319]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 130]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 416]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 261]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 324]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 140]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 119]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 109]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 239]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 370]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 392]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 276]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 465]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 336]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 179]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 359]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 329]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 334]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 160]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 189]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 321]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 379]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 250]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 480]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 452]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 396]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 284]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 456]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 243]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 487]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 185]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 371]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 469]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 345]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 182]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 352]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 365]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 222]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 393]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 445]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 382]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 391]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 274]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 319]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 130]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 261]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 315]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"test for successful searches"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 81] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 163] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 327] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 146] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 293] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 78] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 157] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 315] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 119] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 239] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 479] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 450] getIndex: &index]; if (node == nil) NSLog(@"************* ERROR not found *****************"); NSLog(@"test for unsuccessful searches"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 122] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 245] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 491] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 474] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 440] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 372] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 236] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 473] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 438] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 368] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 228] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 272] getIndex: &index]; if (node) NSLog(@"************* ERROR found unexisting element *****************"); NSLog(@"delete all but 20 entries"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 119]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 239]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 392]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 276]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 179]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 359]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 334]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 160]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 321]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 456]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 185]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 371]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 234]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"delete until empty"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 469]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 352]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 393]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 391]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 274]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 315]]; NSLog(@"search in empty tree"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 254] getIndex: &index]; NSLog(@"try a delete in empty tree"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 254]]; NSLog(@"test 5 passed\n\n"); } gworkspace-1.1.0/DBKit/Testing/test6.m0000644000175000001440000226631113214346535016735 0ustar multixusers#include #include "test.h" void test6(DBKBTree *tree) { DBKBTreeNode *node; int index; NSLog(@"test 6"); NSLog(@"insert 5000 items in order"); [tree insertKey: [NSNumber numberWithUnsignedLong: 8]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 120]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 123]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 133]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 141]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 166]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 274]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 306]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 319]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 357]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 365]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 396]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 425]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 434]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 487]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 509]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 669]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 679]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 694]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 732]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 784]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 803]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 835]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 862]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 892]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 935]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 945]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 971]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1000]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1096]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1097]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1104]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1252]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1327]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1369]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1379]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1381]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1423]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1476]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1493]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1493]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1543]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1552]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1556]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1572]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1657]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1662]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1668]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1720]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1726]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1770]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1780]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1794]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1807]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1808]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1827]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1830]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1848]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1849]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1861]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1871]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1884]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1894]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1910]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 1995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2056]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2087]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2229]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2318]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2331]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2335]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2369]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2392]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2398]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2556]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2559]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2682]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2690]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2703]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2740]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2778]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2796]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2809]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2861]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2883]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2912]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2940]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 2973]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3131]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3139]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3174]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3174]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3250]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3262]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3381]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3400]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3513]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3592]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3649]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3667]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3687]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3713]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3775]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3789]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3809]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3826]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3907]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3933]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3960]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3968]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3975]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3979]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 3990]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4012]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4040]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4048]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4107]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4185]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4189]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4196]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4357]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4404]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4451]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4529]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4554]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4644]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4650]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4721]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4727]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4727]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4729]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4740]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4746]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4771]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4787]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4835]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4856]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4886]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4893]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4967]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 4998]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5011]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5063]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5064]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5169]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5303]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5351]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5401]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5421]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5516]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5527]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5549]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5608]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5650]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5689]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5738]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5786]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5863]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5875]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5929]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5939]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5945]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 5992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6024]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6072]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6129]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6169]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6180]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6182]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6251]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6358]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6379]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6392]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6534]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6576]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6614]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6618]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6636]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6713]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6735]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6743]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6746]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6796]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6809]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6883]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6889]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6917]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6960]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6984]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 6993]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7024]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7069]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7082]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7085]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7123]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7198]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7198]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7229]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7249]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7283]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7306]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7323]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7486]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7519]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7592]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7649]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7668]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7742]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7757]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7792]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7813]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7866]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7871]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7931]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7946]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7973]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 7988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8037]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8040]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8195]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8209]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8276]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8394]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8531]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8565]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8590]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8629]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8631]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8666]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8673]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8723]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8808]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8809]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8820]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8890]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8891]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8900]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8908]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8935]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8991]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 8992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9022]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9057]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9102]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9117]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9135]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9148]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9161]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9163]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9184]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9324]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9354]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9378]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9382]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9396]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9459]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9571]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9594]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9654]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9703]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9716]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9717]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9759]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9766]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9793]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9836]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9838]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9884]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9895]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9906]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9946]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 9978]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10123]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10131]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10162]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10239]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10286]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10330]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10354]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10367]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10391]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10446]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10489]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10522]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10524]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10540]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10587]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10612]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10659]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10729]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10736]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10745]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10768]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10779]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10780]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10831]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10923]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10937]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10948]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 10953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11034]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11067]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11084]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11130]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11138]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11160]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11170]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11170]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11198]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11212]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11251]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11312]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11408]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11468]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11530]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11556]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11566]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11623]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11623]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11749]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11766]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11808]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11826]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11879]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11933]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 11939]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12005]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12018]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12030]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12069]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12078]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12235]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12244]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12261]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12269]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12314]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12357]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12413]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12479]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12487]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12581]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12587]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12594]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12654]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12724]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12733]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12736]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12740]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12764]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12773]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12776]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12802]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12888]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12893]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12906]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 12975]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13036]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13087]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13097]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13104]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13107]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13160]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13209]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13277]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13321]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13331]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13371]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13385]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13395]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13408]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13538]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13579]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13619]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13638]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13672]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13679]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13706]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13833]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13843]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13865]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13877]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13893]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13963]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 13976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14004]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14039]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14101]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14315]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14317]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14345]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14367]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14377]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14404]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14465]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14515]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14558]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14576]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14650]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14701]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14706]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14720]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14726]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14786]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14802]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14864]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14906]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14909]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14931]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 14984]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15003]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15084]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15179]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15211]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15230]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15262]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15307]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15314]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15326]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15434]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15479]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15536]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15541]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15550]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15571]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15617]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15650]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15730]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15747]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15748]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15779]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15812]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15833]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15917]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15983]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 15987]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16009]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16009]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16097]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16188]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16260]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16365]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16431]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16433]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16444]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16452]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16475]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16515]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16516]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16522]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16523]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16524]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16584]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16601]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16619]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16671]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16808]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16810]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16832]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16849]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16875]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16890]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16962]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16963]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 16991]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17022]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17055]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17106]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17186]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17192]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17293]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17296]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17327]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17330]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17352]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17353]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17357]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17392]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17401]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17408]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17470]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17531]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17559]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17577]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17615]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17619]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17670]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17721]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17760]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17796]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17850]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17852]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17878]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17887]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17923]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 17977]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18006]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18053]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18074]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18224]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18230]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18261]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18293]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18365]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18396]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18431]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18434]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18511]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18531]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18575]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18631]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18691]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18734]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18802]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18814]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18816]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18866]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18892]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18943]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18945]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18962]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18975]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18985]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 18995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19049]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19057]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19075]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19077]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19087]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19126]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19227]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19237]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19250]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19313]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19315]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19325]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19549]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19550]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19581]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19663]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19666]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19737]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19750]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19762]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19875]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19909]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19909]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19919]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19933]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 19998]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20006]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20009]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20029]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20040]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20089]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20125]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20139]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20146]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20158]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20162]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20178]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20186]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20189]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20200]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20286]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20359]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20395]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20401]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20431]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20471]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20512]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20533]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20601]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20655]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20664]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20716]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20770]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20804]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20848]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20862]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20877]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20929]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20944]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20977]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20986]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20986]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 20993]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21003]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21029]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21075]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21096]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21105]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21113]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21166]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21180]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21212]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21244]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21349]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21374]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21378]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21441]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21445]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21448]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21480]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21506]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21506]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21564]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21672]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21820]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21832]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21902]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 21995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22034]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22042]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22077]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22207]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22235]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22251]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22295]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22445]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22584]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22648]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22651]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22742]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22783]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22850]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22858]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22896]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22925]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22936]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22942]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22981]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 22988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23001]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23039]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23051]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23064]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23082]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23146]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23184]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23244]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23250]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23269]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23275]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23280]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23311]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23375]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23475]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23477]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23511]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23541]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23584]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23628]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23655]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23736]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23801]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23802]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23823]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23827]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23848]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23857]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23865]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23905]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23931]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23939]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 23955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24053]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24077]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24096]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24132]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24237]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24286]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24296]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24326]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24336]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24342]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24362]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24382]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24404]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24471]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24562]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24570]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24577]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24577]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24630]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24673]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24716]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24832]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24838]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24844]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24907]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24973]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 24980]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25075]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25108]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25131]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25213]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25251]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25277]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25327]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25349]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25360]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25480]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25495]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25495]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25519]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25538]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25564]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25645]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25664]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25694]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25728]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25729]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25738]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25848]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 25989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26020]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26036]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26060]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26062]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26106]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26179]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26180]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26237]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26306]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26307]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26311]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26433]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26568]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26605]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26612]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26738]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26783]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26852]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26883]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26897]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26898]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26926]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 26992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27010]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27057]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27069]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27162]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27280]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27318]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27324]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27342]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27344]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27445]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27497]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27519]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27562]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27601]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27612]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27686]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27733]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27759]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27779]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27782]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27811]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27814]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27830]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27926]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27968]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27968]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 27995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28000]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28061]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28065]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28082]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28090]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28113]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28117]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28143]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28195]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28566]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28613]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28636]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28750]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28760]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28764]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28844]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28863]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28868]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28902]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28917]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28950]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28986]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28993]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 28996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29042]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29063]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29143]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29204]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29244]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29325]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29423]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29603]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29610]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29701]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29712]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29731]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29750]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29776]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29782]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29836]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29888]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29898]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29933]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29967]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29982]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 29999]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30010]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30117]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30213]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30213]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30252]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30306]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30324]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30354]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30416]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30421]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30532]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30581]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30586]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30616]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30690]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30738]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30746]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30759]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30795]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30837]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30839]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30851]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30882]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30895]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30904]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30971]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 30979]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31034]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31067]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31090]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31166]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31252]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31255]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31312]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31315]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31321]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31327]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31346]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31367]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31452]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31459]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31507]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31605]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31669]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31754]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31778]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31779]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31813]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31859]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31887]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31900]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31936]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 31958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32015]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32016]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32086]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32087]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32129]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32179]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32213]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32345]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32353]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32385]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32547]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32579]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32583]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32594]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32638]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32645]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32648]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32666]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32688]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32724]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32829]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32983]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 32999]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33058]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33065]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33072]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33082]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33089]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33146]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33146]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33204]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33260]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33267]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33370]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33394]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33395]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33421]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33454]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33459]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33551]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33558]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33590]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33608]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33635]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33666]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33716]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33740]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33804]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33833]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33836]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33838]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33864]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33924]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33954]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33997]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 33999]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34009]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34020]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34063]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34064]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34143]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34143]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34268]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34290]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34300]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34336]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34345]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34398]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34592]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34646]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34649]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34651]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34682]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34730]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34760]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34801]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34806]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34839]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34864]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34906]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34924]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34954]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34968]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 34992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35001]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35034]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35053]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35064]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35138]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35353]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35353]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35359]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35375]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35398]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35469]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35528]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35532]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35536]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35538]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35554]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35612]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35621]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35765]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35837]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35865]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35869]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35918]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35918]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35943]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35950]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 35958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36006]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36014]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36015]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36037]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36103]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36107]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36204]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36237]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36277]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36300]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36323]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36341]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36356]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36443]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36443]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36520]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36523]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36527]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36532]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36538]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36575]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36613]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36621]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36693]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36698]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36727]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36758]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36779]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36837]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36876]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36929]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36952]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36959]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36978]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 36990]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37017]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37110]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37128]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37178]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37222]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37223]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37284]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37286]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37352]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37423]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37509]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37523]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37576]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37590]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37640]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37671]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37686]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37690]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37722]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37808]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37823]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37859]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37982]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37994]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 37998]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38029]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38051]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38065]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38146]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38160]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38165]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38175]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38181]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38187]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38212]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38223]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38276]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38386]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38398]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38443]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38534]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38590]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38605]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38612]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38651]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38720]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38746]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38851]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 38952]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39020]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39036]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39053]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39081]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39082]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39123]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39186]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39198]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39211]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39280]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39332]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39377]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39425]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39516]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39524]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39538]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39560]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39684]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39687]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39689]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39708]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39720]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39795]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39797]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39857]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39877]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39910]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39940]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39967]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39978]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 39990]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40011]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40046]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40048]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40096]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40158]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40188]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40192]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40235]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40327]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40367]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40375]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40382]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40468]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40476]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40540]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40560]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40754]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40763]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40767]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40858]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40904]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40986]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 40999]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41004]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41008]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41011]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41011]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41033]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41048]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41049]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41195]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41239]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41250]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41334]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41349]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41375]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41385]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41421]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41456]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41525]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41541]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41550]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41629]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41663]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41708]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41721]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41745]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41823]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41839]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41851]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 41966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42020]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42051]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42051]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42060]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42062]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42063]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42099]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42152]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42339]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42359]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42371]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42498]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42515]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42575]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42614]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42632]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42655]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42694]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42713]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42737]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42764]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42773]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42776]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42856]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42856]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42892]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42905]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 42972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43037]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43066]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43103]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43115]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43123]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43141]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43206]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43244]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43420]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43479]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43487]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43591]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43594]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43606]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43632]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43669]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43679]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43757]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43772]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43860]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43897]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43898]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43900]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43902]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43907]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43936]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43946]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43985]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43991]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 43993]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44048]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44056]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44129]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44148]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44190]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44340]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44341]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44375]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44377]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44454]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44465]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44471]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44532]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44536]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44543]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44754]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44790]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44790]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44882]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44954]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 44969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45005]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45077]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45131]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45152]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45160]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45196]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45433]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45493]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45579]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45617]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45625]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45632]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45645]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45731]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45754]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45776]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45836]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45861]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45886]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45900]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45923]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45983]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 45998]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46011]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46046]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46060]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46079]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46102]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46125]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46165]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46169]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46189]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46391]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46473]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46559]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46689]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46711]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46774]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46787]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46829]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46856]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46866]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46929]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46948]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 46995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47008]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47030]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47034]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47152]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47323]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47331]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47352]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47357]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47433]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47526]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47543]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47567]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47639]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47650]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47677]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47682]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47816]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47857]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47872]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47883]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47890]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47935]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 47961]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48000]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48058]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48060]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48074]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48090]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48092]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48107]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48119]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48165]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48199]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48296]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48313]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48317]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48339]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48369]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48533]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48541]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48605]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48701]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48739]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48746]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48747]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48767]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48783]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48801]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48913]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48913]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48916]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48920]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48924]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 48976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49040]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49046]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49066]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49085]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49128]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49132]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49166]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49246]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49268]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49439]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49495]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49498]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49570]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49625]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49630]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49691]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49708]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49891]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 49998]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50029]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50034]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50081]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50140]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50161]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50162]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50206]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50240]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50267]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50331]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50335]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50371]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50525]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50564]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50570]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50602]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50617]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50625]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50632]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50666]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50690]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50772]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50774]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50823]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50882]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50905]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50911]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 50945]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51056]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51063]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51129]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51130]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51212]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51293]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51315]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51356]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51400]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51431]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51454]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51541]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51565]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51579]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51602]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51745]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51772]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51832]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51835]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51865]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51882]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51919]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 51947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52012]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52042]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52046]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52055]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52061]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52106]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52109]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52169]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52261]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52274]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52284]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52300]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52321]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52345]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52356]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52383]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52446]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52476]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52586]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52599]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52635]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52638]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52712]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52729]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52732]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52767]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52807]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52810]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52838]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52982]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 52991]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53043]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53048]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53093]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53116]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53198]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53303]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53347]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53382]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53467]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53480]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53482]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53498]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53512]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53512]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53571]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53594]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53657]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53668]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53723]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53736]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53760]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53763]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53768]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53782]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53783]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53790]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53796]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53829]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53848]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53881]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53946]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53960]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53977]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 53997]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54046]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54057]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54064]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54085]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54213]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54269]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54303]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54311]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54341]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54360]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54482]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54508]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54512]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54531]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54605]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54610]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54639]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54691]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54704]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54715]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54797]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54807]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54830]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54860]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54887]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54954]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54960]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54982]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 54996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55089]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55120]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55158]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55220]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55227]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55292]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55300]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55312]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55342]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55358]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55386]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55389]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55393]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55427]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55516]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55523]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55564]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55616]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55631]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55639]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55644]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55653]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55664]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55684]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55706]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55723]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55729]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55738]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55747]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55760]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55794]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55797]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55820]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55830]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55844]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55876]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55896]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55974]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 55985]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56044]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56128]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56133]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56139]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56156]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56192]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56206]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56249]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56259]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56358]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56386]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56455]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56470]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56489]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56547]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56562]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56619]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56658]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56659]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56672]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56684]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56710]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56748]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56754]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56843]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56861]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56912]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56920]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56948]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 56984]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57075]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57103]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57138]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57163]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57293]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57319]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57330]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57488]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57495]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57593]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57608]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57627]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57629]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57638]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57657]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57688]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57738]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57742]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57758]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57762]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57771]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57793]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57794]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57810]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57894]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57911]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57924]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57967]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 57996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58056]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58099]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58140]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58224]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58261]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58292]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58302]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58332]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58339]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58429]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58451]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58458]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58584]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58596]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58623]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58628]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58635]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58676]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58682]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58684]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58707]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58721]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58768]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58784]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58793]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58794]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58879]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58898]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58929]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58954]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58960]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 58961]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59042]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59053]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59062]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59067]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59108]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59196]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59227]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59247]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59296]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59313]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59344]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59360]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59389]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59404]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59590]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59691]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59702]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59718]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59762]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59776]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59861]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59908]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59914]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 59996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60053]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60059]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60151]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60185]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60211]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60215]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60243]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60248]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60307]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60329]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60370]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60389]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60394]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60401]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60452]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60467]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60528]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60585]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60629]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60676]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60677]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60686]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60698]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60736]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60745]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60750]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60858]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60867]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60867]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60936]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 60995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61012]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61017]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61020]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61113]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61139]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61240]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61284]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61293]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61428]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61444]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61446]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61455]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61464]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61467]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61484]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61504]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61511]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61552]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61576]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61657]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61658]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61658]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61717]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61730]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61737]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61761]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61767]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61916]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61933]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 61980]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62001]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62059]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62087]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62094]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62102]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62140]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62155]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62225]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62227]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62230]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62252]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62452]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62468]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62583]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62632]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62659]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62695]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62702]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62743]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62745]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62759]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62812]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62839]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62868]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62871]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62905]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62920]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62943]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62945]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62959]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 62990]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63074]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63130]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63151]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63185]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63208]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63252]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63313]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63401]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63411]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63543]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63564]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63583]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63594]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63625]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63628]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63644]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63701]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63715]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63757]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63760]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63773]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63828]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63860]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63866]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63881]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63897]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63917]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63923]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63936]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63993]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 63999]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64009]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64033]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64043]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64141]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64163]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64195]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64277]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64334]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64370]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64378]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64394]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64452]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64465]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64509]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64551]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64580]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64586]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64651]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64675]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64773]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64775]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64784]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64789]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64795]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64904]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64937]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64959]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64974]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 64990]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65004]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65066]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65067]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65072]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65074]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65123]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65220]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65245]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65269]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65283]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65332]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65370]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65397]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65409]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65516]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65556]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65570]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65595]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65653]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65698]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65707]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65827]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65841]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65865]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65893]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65916]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65941]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 65988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66003]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66005]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66014]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66017]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66021]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66120]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66151]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66196]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66202]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66269]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66376]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66408]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66505]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66530]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66549]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66580]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66586]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66591]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66637]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66730]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66743]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66778]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66836]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66850]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66862]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66891]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66926]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66948]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 66974]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67003]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67049]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67081]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67094]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67163]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67222]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67347]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67383]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67393]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67421]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67494]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67541]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67548]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67550]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67619]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67633]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67658]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67688]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67695]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67747]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67761]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67770]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67772]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67790]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67801]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67843]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67898]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67915]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67932]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67985]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 67994]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68033]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68117]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68147]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68178]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68234]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68346]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68358]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68411]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68436]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68437]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68464]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68476]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68497]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68562]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68575]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68637]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68648]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68649]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68663]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68730]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68749]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68762]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68865]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68884]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68896]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68950]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68982]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 68985]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69037]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69058]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69059]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69066]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69083]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69083]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69093]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69113]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69128]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69207]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69215]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69230]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69267]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69315]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69342]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69449]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69486]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69486]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69586]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69587]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69592]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69602]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69645]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69687]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69707]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69723]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69778]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69781]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69786]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69823]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69879]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69908]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69981]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 69997]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70036]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70064]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70071]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70141]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70197]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70303]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70327]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70329]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70360]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70408]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70485]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70511]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70610]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70612]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70637]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70659]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70664]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70669]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70722]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70730]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70732]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70732]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70766]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70784]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70802]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70884]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70924]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 70968]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71003]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71004]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71097]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71131]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71236]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71289]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71297]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71315]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71381]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71431]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71482]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71538]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71551]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71586]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71636]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71644]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71653]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71722]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71736]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71739]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71790]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71804]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71835]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71882]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71894]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71907]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71912]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71925]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71937]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71978]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 71983]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72001]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72007]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72016]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72033]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72061]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72067]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72189]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72220]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72223]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72260]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72297]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72333]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72374]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72469]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72520]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72534]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72540]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72630]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72648]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72686]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72694]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72698]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72702]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72727]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72739]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72787]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72787]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72796]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72948]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72963]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72993]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 72996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73030]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73077]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73127]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73143]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73180]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73225]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73226]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73232]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73280]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73329]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73332]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73345]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73347]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73472]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73534]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73540]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73552]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73566]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73581]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73625]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73639]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73657]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73724]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73784]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73803]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73888]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73931]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 73951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74006]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74084]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74283]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74291]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74324]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74359]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74361]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74389]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74400]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74441]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74441]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74531]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74580]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74591]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74675]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74737]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74747]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74774]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74787]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74789]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74819]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74832]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74894]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74914]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74936]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 74999]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75072]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75267]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75314]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75319]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75349]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75482]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75484]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75506]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75527]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75527]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75549]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75554]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75567]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75572]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75673]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75676]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75709]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75712]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75720]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75722]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75728]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75731]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75754]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75791]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75809]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75859]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75861]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75892]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75904]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75945]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 75972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76074]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76089]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76104]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76221]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76238]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76269]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76349]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76509]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76531]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76588]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76589]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76617]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76642]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76671]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76696]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76794]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76872]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76931]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76975]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 76994]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77076]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77104]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77125]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77148]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77173]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77192]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77227]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77246]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77300]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77444]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77519]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77524]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77560]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77629]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77710]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77712]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77717]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77745]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77795]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77843]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77859]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77902]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77988]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 77995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78023]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78183]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78283]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78286]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78319]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78355]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78400]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78423]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78469]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78504]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78512]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78527]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78559]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78584]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78650]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78691]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78739]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78741]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78780]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78850]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78856]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78875]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78889]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78896]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78904]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78905]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78908]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78939]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78979]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 78987]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79018]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79099]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79163]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79171]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79200]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79283]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79356]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79358]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79398]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79436]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79443]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79455]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79471]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79524]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79529]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79655]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79702]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79767]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79859]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79867]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 79975]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80055]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80111]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80243]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80254]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80298]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80316]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80336]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80414]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80446]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80482]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80495]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80530]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80571]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80607]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80675]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80682]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80702]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80709]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80726]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80749]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80850]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80881]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80894]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80908]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80912]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80920]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80955]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80966]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 80970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81045]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81084]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81088]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81088]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81095]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81098]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81107]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81115]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81136]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81153]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81184]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81205]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81235]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81307]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81307]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81312]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81372]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81418]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81444]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81457]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81480]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81518]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81548]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81551]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81552]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81568]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81626]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81676]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81678]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81703]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81732]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81753]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81778]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81812]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81816]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81831]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81844]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81844]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81860]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81890]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81950]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81957]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81963]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 81977]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82004]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82092]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82099]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82110]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82119]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82181]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82188]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82263]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82268]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82297]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82336]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82348]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82396]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82400]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82405]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82438]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82442]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82489]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82561]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82573]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82582]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82640]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82646]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82670]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82721]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82722]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82737]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82770]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82864]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82867]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82875]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82949]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 82976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83004]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83013]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83029]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83049]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83105]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83105]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83195]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83279]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83294]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83326]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83363]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83389]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83446]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83456]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83489]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83507]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83520]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83548]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83549]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83562]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83563]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83590]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83628]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83792]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83815]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83866]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83888]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83950]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83979]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 83992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84012]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84047]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84055]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84063]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84067]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84071]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84222]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84316]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84366]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84436]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84458]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84481]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84632]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84633]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84685]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84708]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84739]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84749]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84778]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84879]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84933]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84944]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84990]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 84996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85037]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85085]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85119]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85177]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85207]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85297]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85374]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85388]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85403]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85426]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85448]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85462]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85463]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85491]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85514]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85521]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85535]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85551]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85555]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85581]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85728]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85757]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85774]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85818]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85869]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85888]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85962]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 85974]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86035]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86043]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86062]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86090]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86108]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86139]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86151]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86253]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86257]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86260]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86262]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86278]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86325]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86346]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86361]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86365]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86412]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86423]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86436]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86445]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86499]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86519]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86530]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86540]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86546]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86549]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86564]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86601]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86611]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86613]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86627]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86681]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86685]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86686]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86700]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86711]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86720]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86728]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86785]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86810]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86823]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86835]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86868]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86919]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86929]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86943]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86948]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 86992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87022]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87022]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87036]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87038]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87039]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87080]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87087]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87092]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87174]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87175]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87231]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87271]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87303]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87304]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87346]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87353]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87377]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87410]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87451]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87476]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87477]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87500]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87502]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87534]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87587]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87621]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87624]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87629]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87656]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87699]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87704]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87719]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87765]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87824]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87833]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87882]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87900]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87920]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87974]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 87989]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88016]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88052]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88054]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88094]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88114]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88182]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88265]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88268]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88282]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88316]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88373]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88384]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88430]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88459]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88522]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88562]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88601]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88602]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88620]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88627]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88668]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88674]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88676]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88677]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88704]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88710]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88767]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88786]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88789]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88825]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88826]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88829]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88871]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88917]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88961]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88976]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88977]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88984]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 88984]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89012]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89030]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89083]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89085]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89089]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89092]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89115]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89118]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89137]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89235]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89241]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89264]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89272]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89276]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89281]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89347]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89417]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89464]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89474]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89610]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89613]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89644]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89668]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89672]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89673]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89698]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89714]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89724]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89725]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89726]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89766]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89796]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89829]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89834]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89926]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89964]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 89972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90032]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90090]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90096]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90155]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90175]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90187]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90192]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90194]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90210]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90218]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90262]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90285]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90310]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90329]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90337]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90350]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90364]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90402]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90419]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90478]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90503]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90504]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90510]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90511]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90516]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90520]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90526]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90548]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90567]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90580]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90635]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90684]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90752]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90773]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90795]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90817]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90839]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90851]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90903]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 90959]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91084]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91109]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91155]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91188]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91203]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91220]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91341]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91347]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91354]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91382]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91413]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91416]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91464]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91496]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91507]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91517]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91534]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91554]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91578]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91592]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91654]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91690]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91709]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91713]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91756]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91775]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91780]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91803]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91829]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91867]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91872]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91888]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91916]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91919]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91930]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91954]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91961]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91977]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91981]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91986]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 91997]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92005]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92006]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92018]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92050]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92071]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92091]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92112]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92121]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92142]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92176]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92184]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92197]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92214]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92216]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92313]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92320]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92378]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92387]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92404]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92413]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92424]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92441]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92444]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92448]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92544]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92550]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92581]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92608]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92641]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92661]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92663]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92710]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92798]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92814]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92834]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92871]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92912]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92942]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92951]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92956]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 92996]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93027]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93049]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93150]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93172]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93178]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93185]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93217]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93220]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93243]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93273]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93293]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93360]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93390]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93422]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93447]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93479]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93487]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93506]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93515]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93525]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93553]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93568]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93604]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93609]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93630]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93660]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93663]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93724]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93739]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93744]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93813]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93815]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93822]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93845]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93877]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93881]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93885]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93922]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93927]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93939]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93962]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93970]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 93995]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94000]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94016]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94023]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94027]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94027]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94049]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94051]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94065]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94070]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94101]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94109]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94134]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94154]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94155]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94159]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94184]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94191]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94196]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94233]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94258]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94266]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94301]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94302]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94308]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94322]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94343]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94352]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94380]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94391]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94453]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94464]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94471]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94512]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94539]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94545]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94574]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94596]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94694]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94751]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94800]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94810]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94863]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94910]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94916]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94931]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94953]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94985]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 94992]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95001]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95002]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95009]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95026]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95055]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95068]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95073]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95078]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95092]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95144]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95152]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95158]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95165]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95179]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95270]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95287]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95299]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95338]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95392]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95395]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95415]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95480]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95492]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95524]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95547]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95551]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95576]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95576]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95622]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95627]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95647]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95665]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95683]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95684]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95799]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95803]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95850]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95864]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95893]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95899]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95926]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95938]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95939]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95963]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95978]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95983]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 95994]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96022]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96061]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96090]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96100]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96108]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96113]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96124]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96138]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96175]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96201]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96204]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96256]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96292]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96309]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96325]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96406]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96458]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96483]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96489]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96557]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96569]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96605]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96645]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96655]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96677]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96679]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96680]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96689]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96724]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96731]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96748]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96757]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96759]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96777]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96790]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96855]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96871]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96873]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96876]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96908]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96921]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96952]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96963]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 96994]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97008]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97019]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97028]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97041]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97048]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97157]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97189]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97193]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97200]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97288]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97323]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97371]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97399]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97407]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97425]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97461]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97479]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97490]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97515]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97533]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97537]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97575]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97600]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97705]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97710]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97727]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97775]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97837]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97847]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97853]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97854]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97870]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97874]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97892]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97905]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97923]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97928]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97943]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97958]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97972]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 97982]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98008]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98017]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98031]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98044]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98060]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98149]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98167]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98175]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98190]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98206]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98228]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98305]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98329]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98332]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98354]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98368]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98383]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98421]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98460]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98477]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98498]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98515]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98522]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98579]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98598]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98625]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98643]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98652]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98664]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98664]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98685]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98690]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98697]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98704]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98750]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98755]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98769]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98805]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98821]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98834]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98834]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98849]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98866]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98879]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98886]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98889]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 98913]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99022]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99025]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99062]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99082]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99122]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99130]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99145]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99164]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99168]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99219]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99318]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99328]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99335]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99367]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99432]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99435]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99440]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99445]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99450]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99466]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99501]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99513]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99519]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99520]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99523]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99554]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99584]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99592]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99597]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99634]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99640]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99692]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99698]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99788]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99813]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99826]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99840]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99842]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99875]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99876]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99880]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99894]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99901]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99904]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99935]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99947]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99959]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99969]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99997]]; [tree insertKey: [NSNumber numberWithUnsignedLong: 99999]]; NSLog(@"search for the last one"); node = [tree nodeOfKey: [NSNumber numberWithUnsignedLong: 99999] getIndex: &index]; if (node) { NSLog(@"found last item"); } else { NSLog(@"************* ERROR last item not found *****************"); } NSLog(@"delete all but 30"); [tree deleteKey: [NSNumber numberWithUnsignedLong: 561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 669]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 679]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 694]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 732]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 784]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 803]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 835]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 862]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 892]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 935]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 945]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 971]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1000]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1096]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1097]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1104]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1252]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1369]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1379]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1381]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1423]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1476]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1493]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1493]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1543]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1552]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1556]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1572]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1657]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1662]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1668]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1720]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1726]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1752]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1770]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1780]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1794]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1807]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1808]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1827]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1830]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1848]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1849]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1861]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1871]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1884]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1894]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1910]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 1995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2056]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2087]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2229]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2291]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2318]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2331]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2335]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2369]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2392]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2398]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2556]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2559]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2682]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2690]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2703]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2740]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2778]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2796]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2809]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2861]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2883]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2912]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2940]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 2973]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3131]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3139]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3174]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3174]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3250]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3262]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3290]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3381]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3400]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3513]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3592]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3649]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3667]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3687]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3713]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3775]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3789]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3809]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3826]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3907]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3933]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3960]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3968]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3975]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3979]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 3990]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4012]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4040]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4048]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4107]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4185]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4189]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4245]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4357]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4451]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4457]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4473]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4473]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4529]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4554]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4644]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4650]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4721]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4727]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4727]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4729]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4740]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4746]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4771]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4787]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4835]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4856]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4886]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4893]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4967]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 4998]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5011]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5063]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5064]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5169]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5303]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5351]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5401]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5440]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5516]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5527]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5549]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5608]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5650]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5689]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5738]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5786]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5863]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5875]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5929]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5939]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5945]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 5992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6024]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6072]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6129]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6169]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6180]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6182]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6251]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6358]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6379]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6388]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6392]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6473]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6534]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6576]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6614]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6618]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6636]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6713]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6735]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6743]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6746]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6796]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6809]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6883]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6889]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6917]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6960]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6984]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 6993]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7024]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7069]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7082]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7085]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7198]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7198]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7229]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7249]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7283]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7299]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7306]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7323]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7486]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7519]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7592]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7649]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7668]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7742]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7757]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7792]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7813]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7866]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7871]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7931]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7946]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7973]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 7988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8037]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8040]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8193]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8202]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8209]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8245]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8276]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8299]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8363]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8394]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8531]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8565]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8590]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8629]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8631]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8666]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8673]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8723]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8808]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8809]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8820]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8890]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8891]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8900]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8908]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8935]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8991]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 8992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9022]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9057]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9102]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9117]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9135]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9148]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9161]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9184]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9324]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9354]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9378]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9382]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9396]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9399]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9459]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9571]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9594]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9654]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9703]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9716]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9717]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9759]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9766]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9793]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9836]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9838]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9884]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9895]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9906]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9946]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 9978]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10131]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10162]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10199]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10239]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10286]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10330]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10354]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10367]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10391]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10446]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10489]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10522]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10524]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10540]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10587]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10612]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10659]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10729]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10736]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10745]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10768]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10779]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10780]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10831]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10923]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10937]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10948]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 10953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11034]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11067]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11084]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11130]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11138]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11160]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11170]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11170]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11198]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11212]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11251]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11312]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11408]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11468]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11530]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11556]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11566]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11623]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11623]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11749]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11766]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11808]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11826]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11879]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11933]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 11939]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12005]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12018]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12030]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12069]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12078]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12202]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12235]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12244]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12261]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12314]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12357]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12413]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12437]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12487]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12496]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12581]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12587]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12594]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12654]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12724]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12733]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12736]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12740]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12764]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12773]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12776]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12802]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12888]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12893]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12906]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 12975]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13036]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13087]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13097]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13104]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13107]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13149]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13160]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13209]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13277]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13321]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13331]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13371]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13385]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13395]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13408]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13538]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13579]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13619]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13638]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13672]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13679]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13706]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13833]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13843]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13865]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13877]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13893]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13963]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 13976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14004]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14039]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14101]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14315]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14317]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14345]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14367]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14377]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14465]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14515]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14558]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14576]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14650]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14701]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14706]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14720]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14726]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14786]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14802]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14864]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14906]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14909]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14931]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 14984]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15003]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15084]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15179]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15211]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15230]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15262]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15290]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15307]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15314]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15326]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15434]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15437]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15536]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15541]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15550]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15571]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15617]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15650]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15730]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15747]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15748]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15779]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15812]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15833]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15917]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15983]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 15987]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16009]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16009]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16097]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16188]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16260]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16365]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16431]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16433]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16444]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16452]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16475]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16515]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16516]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16522]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16523]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16524]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16584]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16601]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16619]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16671]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16752]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16808]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16810]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16832]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16849]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16875]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16890]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16962]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16963]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 16991]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17022]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17055]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17106]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17186]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17192]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17245]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17291]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17296]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17330]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17352]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17353]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17357]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17392]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17401]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17408]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17470]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17531]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17559]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17577]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17615]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17619]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17670]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17721]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17760]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17796]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17850]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17852]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17878]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17887]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17923]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 17977]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18006]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18053]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18074]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18224]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18230]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18261]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18304]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18365]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18396]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18431]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18434]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18511]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18531]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18575]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18631]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18691]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18734]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18802]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18814]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18816]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18866]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18892]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18943]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18945]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18962]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18975]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18985]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 18995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19049]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19057]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19075]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19077]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19087]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19126]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19227]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19237]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19250]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19313]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19315]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19325]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19437]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19549]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19550]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19581]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19663]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19666]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19737]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19750]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19762]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19875]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19909]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19909]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19919]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19933]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 19998]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20006]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20009]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20029]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20040]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20089]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20125]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20139]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20158]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20162]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20178]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20186]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20189]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20200]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20286]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20359]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20395]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20399]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20401]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20431]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20457]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20471]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20512]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20533]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20601]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20655]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20664]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20716]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20770]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20804]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20848]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20862]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20877]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20929]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20944]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20977]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20986]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20986]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 20993]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21003]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21029]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21075]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21096]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21105]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21113]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21166]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21180]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21212]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21244]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21299]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21349]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21374]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21378]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21441]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21445]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21448]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21480]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21506]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21506]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21564]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21672]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21820]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21832]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21902]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 21995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22034]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22042]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22077]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22207]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22235]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22245]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22251]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22295]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22445]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22584]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22648]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22651]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22742]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22783]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22850]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22858]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22896]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22925]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22936]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22942]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22981]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 22988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23001]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23039]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23051]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23064]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23082]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23184]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23236]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23244]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23250]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23275]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23280]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23311]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23375]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23437]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23440]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23475]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23477]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23491]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23511]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23541]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23584]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23628]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23655]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23736]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23801]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23802]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23823]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23827]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23848]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23857]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23865]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23905]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23931]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23939]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 23955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24053]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24077]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24096]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24132]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24237]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24286]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24296]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24298]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24326]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24336]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24342]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24362]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24382]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24388]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24471]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24562]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24570]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24577]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24577]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24630]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24673]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24716]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24832]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24838]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24844]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24907]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24973]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 24980]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25075]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25108]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25131]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25213]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25251]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25277]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25349]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25360]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25474]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25480]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25519]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25538]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25564]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25645]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25664]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25694]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25728]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25729]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25738]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25848]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 25989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26020]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26036]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26060]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26062]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26106]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26179]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26180]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26202]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26237]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26306]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26307]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26311]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26433]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26568]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26605]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26612]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26738]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26783]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26852]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26883]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26897]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26898]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26926]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 26992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27010]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27057]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27069]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27162]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27280]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27318]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27324]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27342]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27344]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27445]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27496]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27497]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27519]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27562]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27601]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27612]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27686]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27733]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27759]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27779]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27782]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27811]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27814]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27830]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27926]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27968]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27968]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 27995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28000]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28061]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28065]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28082]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28090]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28113]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28117]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28143]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28291]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28508]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28566]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28613]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28636]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28750]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28760]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28764]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28844]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28863]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28868]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28902]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28917]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28950]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28986]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28993]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 28996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29042]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29063]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29143]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29204]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29244]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29325]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29423]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29603]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29610]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29701]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29712]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29731]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29750]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29776]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29782]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29836]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29888]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29898]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29933]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29967]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29982]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 29999]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30010]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30117]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30213]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30213]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30252]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30306]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30324]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30354]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30416]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30532]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30581]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30586]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30616]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30690]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30738]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30746]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30759]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30795]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30837]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30839]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30851]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30882]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30895]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30904]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30971]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 30979]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31034]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31067]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31090]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31166]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31252]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31255]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31290]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31312]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31315]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31321]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31346]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31367]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31452]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31459]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31491]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31507]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31605]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31669]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31754]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31778]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31779]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31813]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31859]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31887]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31900]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31936]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 31958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32015]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32016]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32086]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32087]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32129]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32179]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32213]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32345]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32353]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32385]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32547]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32579]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32583]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32594]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32638]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32645]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32648]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32666]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32688]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32724]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32829]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32983]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 32999]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33058]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33065]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33072]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33082]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33089]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33204]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33260]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33267]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33370]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33394]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33395]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33399]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33454]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33459]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33551]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33558]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33590]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33608]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33635]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33666]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33716]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33740]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33804]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33833]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33836]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33838]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33864]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33924]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33954]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33997]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 33999]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34009]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34020]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34063]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34064]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34143]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34143]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34268]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34290]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34336]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34345]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34398]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34457]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34592]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34646]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34649]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34651]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34682]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34730]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34760]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34801]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34806]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34839]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34864]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34906]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34924]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34954]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34968]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 34992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35001]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35034]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35053]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35064]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35138]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35353]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35353]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35359]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35375]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35398]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35469]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35528]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35532]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35536]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35538]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35554]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35612]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35621]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35765]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35837]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35865]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35869]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35918]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35918]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35943]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35950]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 35958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36006]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36014]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36015]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36037]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36103]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36107]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36204]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36237]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36277]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36323]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36341]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36356]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36443]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36443]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36508]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36520]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36523]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36527]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36532]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36538]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36575]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36613]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36621]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36693]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36698]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36727]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36758]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36779]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36837]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36876]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36929]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36952]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36959]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36978]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 36990]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37017]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37110]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37128]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37178]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37222]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37223]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37284]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37286]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37291]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37352]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37423]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37508]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37509]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37523]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37576]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37590]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37640]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37671]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37686]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37690]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37722]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37808]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37823]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37859]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37982]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37994]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 37998]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38029]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38051]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38065]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38146]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38160]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38165]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38175]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38181]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38187]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38199]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38212]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38223]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38276]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38386]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38398]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38443]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38534]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38590]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38605]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38612]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38651]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38720]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38746]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38851]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 38952]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39020]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39036]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39053]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39081]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39082]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39186]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39198]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39211]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39280]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39298]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39332]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39377]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39425]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39516]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39524]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39538]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39560]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39684]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39687]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39689]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39708]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39720]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39795]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39797]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39857]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39877]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39910]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39940]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39967]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39978]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 39990]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40011]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40046]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40048]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40096]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40158]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40188]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40192]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40235]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40363]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40367]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40375]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40382]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40457]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40468]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40476]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40540]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40560]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40754]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40763]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40767]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40858]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40904]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40986]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 40999]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41004]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41008]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41011]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41011]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41033]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41048]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41049]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41239]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41250]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41334]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41349]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41375]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41385]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41456]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41525]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41541]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41550]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41629]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41663]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41708]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41721]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41745]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41823]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41839]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41851]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 41966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42020]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42051]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42051]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42060]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42062]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42063]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42099]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42152]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42199]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42339]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42359]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42371]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42405]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42498]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42515]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42575]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42614]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42632]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42655]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42694]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42713]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42737]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42764]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42773]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42776]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42856]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42856]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42892]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42905]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 42972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43037]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43066]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43103]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43115]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43141]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43199]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43202]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43206]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43244]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43298]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43420]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43487]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43591]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43594]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43606]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43632]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43669]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43679]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43757]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43772]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43860]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43897]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43898]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43900]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43902]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43907]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43936]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43946]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43985]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43991]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 43993]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44048]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44056]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44129]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44148]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44190]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44340]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44341]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44375]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44377]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44454]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44465]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44471]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44508]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44532]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44536]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44543]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44754]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44790]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44790]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44882]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44954]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 44969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45005]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45077]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45131]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45152]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45160]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45433]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45493]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45496]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45579]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45617]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45625]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45632]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45645]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45731]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45752]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45754]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45776]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45836]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45861]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45886]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45900]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45923]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45983]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 45998]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46011]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46046]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46060]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46079]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46102]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46125]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46165]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46169]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46189]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46228]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46391]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46473]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46559]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46689]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46711]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46774]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46787]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46829]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46856]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46866]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46929]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46948]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 46995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47008]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47030]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47034]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47152]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47323]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47331]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47352]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47357]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47433]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47526]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47543]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47567]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47639]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47650]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47677]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47682]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47816]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47857]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47872]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47883]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47890]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47935]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 47961]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48000]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48058]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48060]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48074]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48090]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48092]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48107]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48119]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48165]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48199]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48296]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48313]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48317]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48339]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48369]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48388]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48533]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48541]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48605]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48701]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48739]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48746]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48747]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48767]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48783]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48801]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48913]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48913]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48916]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48920]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48924]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 48976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49040]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49046]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49066]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49085]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49128]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49132]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49166]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49246]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49268]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49439]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49440]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49498]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49508]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49570]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49625]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49630]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49691]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49708]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49891]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 49998]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50029]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50034]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50081]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50140]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50161]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50162]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50206]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50240]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50267]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50299]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50331]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50335]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50371]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50405]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50525]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50564]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50570]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50602]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50617]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50625]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50632]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50666]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50690]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50772]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50774]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50823]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50882]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50905]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50911]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 50945]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51056]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51063]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51129]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51130]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51212]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51315]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51356]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51400]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51431]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51449]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51454]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51541]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51565]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51579]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51602]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51745]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51772]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51832]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51835]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51865]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51882]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51919]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 51947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52012]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52042]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52046]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52055]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52061]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52106]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52109]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52169]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52261]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52274]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52284]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52321]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52345]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52356]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52383]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52388]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52406]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52446]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52476]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52586]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52599]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52635]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52638]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52712]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52729]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52732]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52767]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52807]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52810]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52838]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52982]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 52991]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53043]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53048]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53093]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53116]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53198]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53236]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53303]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53304]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53347]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53382]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53440]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53467]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53480]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53498]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53512]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53512]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53571]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53594]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53657]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53668]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53723]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53736]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53760]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53763]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53768]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53782]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53783]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53790]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53796]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53829]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53848]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53881]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53946]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53960]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53977]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 53997]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54046]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54057]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54064]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54085]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54213]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54291]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54303]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54311]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54341]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54360]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54496]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54508]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54512]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54531]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54605]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54610]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54639]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54691]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54704]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54715]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54797]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54807]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54830]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54860]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54887]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54954]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54960]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54982]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 54996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55089]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55120]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55158]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55220]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55227]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55292]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55298]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55312]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55342]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55358]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55386]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55389]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55393]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55427]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55516]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55523]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55564]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55616]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55631]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55639]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55644]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55653]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55664]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55684]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55706]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55723]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55729]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55738]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55747]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55760]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55794]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55797]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55820]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55830]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55844]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55876]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55896]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55974]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 55985]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56044]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56128]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56133]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56139]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56156]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56192]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56206]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56249]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56259]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56358]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56363]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56386]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56455]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56470]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56489]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56547]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56562]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56619]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56658]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56659]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56672]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56684]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56710]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56748]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56754]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56843]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56861]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56912]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56920]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56948]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 56984]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57075]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57103]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57138]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57319]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57330]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57449]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57488]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57593]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57608]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57627]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57629]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57638]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57657]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57688]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57738]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57742]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57758]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57762]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57771]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57793]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57794]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57810]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57894]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57911]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57924]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57967]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 57996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58056]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58099]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58140]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58224]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58261]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58292]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58302]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58332]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58339]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58429]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58451]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58458]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58584]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58596]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58623]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58628]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58635]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58676]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58682]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58684]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58707]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58721]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58768]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58784]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58793]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58794]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58879]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58898]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58929]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58954]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58960]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 58961]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59042]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59053]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59062]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59067]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59108]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59227]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59245]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59247]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59296]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59313]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59344]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59360]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59363]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59389]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59590]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59691]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59702]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59718]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59762]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59776]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59861]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59908]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59914]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 59996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60053]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60059]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60151]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60185]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60193]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60211]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60215]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60243]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60248]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60307]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60329]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60370]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60389]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60394]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60401]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60452]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60467]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60528]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60585]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60629]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60676]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60677]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60686]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60698]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60736]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60745]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60750]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60858]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60867]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60867]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60936]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 60995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61012]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61017]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61020]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61113]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61139]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61240]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61284]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61428]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61444]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61446]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61455]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61464]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61467]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61484]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61504]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61511]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61552]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61576]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61657]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61658]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61658]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61717]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61730]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61737]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61761]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61767]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61916]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61933]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 61980]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62001]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62059]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62087]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62094]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62102]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62122]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62140]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62149]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62155]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62225]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62227]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62230]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62252]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62406]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62452]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62468]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62491]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62583]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62632]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62659]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62695]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62702]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62743]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62745]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62759]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62812]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62839]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62868]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62871]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62905]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62920]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62943]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62945]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62959]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 62990]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63074]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63130]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63151]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63185]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63208]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63252]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63313]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63401]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63411]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63543]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63564]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63583]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63594]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63625]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63628]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63644]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63701]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63715]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63757]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63760]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63773]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63828]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63860]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63866]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63881]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63897]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63917]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63923]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63936]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63993]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 63999]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64009]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64033]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64043]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64141]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64277]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64334]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64370]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64378]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64394]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64452]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64465]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64509]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64551]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64580]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64586]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64651]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64675]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64773]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64775]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64784]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64789]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64795]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64904]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64937]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64959]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64974]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 64990]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65004]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65066]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65067]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65072]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65074]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65123]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65220]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65245]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65283]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65332]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65370]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65397]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65409]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65516]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65556]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65570]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65595]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65653]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65698]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65707]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65827]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65841]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65865]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65893]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65916]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65941]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 65988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66003]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66005]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66014]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66017]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66021]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66120]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66151]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66202]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66376]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66408]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66457]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66505]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66530]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66549]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66580]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66586]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66591]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66637]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66730]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66743]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66778]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66836]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66850]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66862]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66891]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66926]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66948]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 66974]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67003]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67049]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67081]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67094]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67222]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67347]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67383]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67393]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67494]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67541]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67548]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67550]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67619]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67633]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67658]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67688]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67695]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67747]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67761]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67770]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67772]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67790]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67801]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67843]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67898]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67915]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67932]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67985]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 67994]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68033]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68117]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68147]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68149]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68149]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68178]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68234]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68346]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68358]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68372]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68411]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68436]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68437]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68464]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68476]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68497]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68562]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68575]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68637]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68648]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68649]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68663]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68730]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68749]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68762]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68865]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68884]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68896]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68950]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68982]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 68985]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69037]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69058]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69059]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69066]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69083]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69083]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69093]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69113]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69128]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69207]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69215]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69230]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69267]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69304]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69315]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69342]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69399]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69449]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69486]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69486]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69586]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69587]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69592]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69602]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69645]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69687]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69707]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69723]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69752]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69778]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69781]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69786]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69823]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69879]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69908]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69981]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 69997]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70036]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70064]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70071]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70141]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70197]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70303]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70327]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70329]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70360]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70408]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70440]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70485]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70511]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70610]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70612]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70637]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70659]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70664]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70669]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70722]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70730]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70732]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70732]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70766]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70784]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70802]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70884]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70924]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 70968]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71003]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71004]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71097]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71131]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71236]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71289]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71297]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71315]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71381]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71431]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71538]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71551]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71586]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71636]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71644]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71653]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71722]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71736]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71739]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71752]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71790]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71804]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71835]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71882]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71894]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71907]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71912]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71925]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71937]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71978]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 71983]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72001]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72007]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72016]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72033]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72061]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72067]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72189]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72220]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72223]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72260]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72297]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72333]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72374]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72469]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72520]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72534]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72540]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72630]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72648]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72686]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72694]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72698]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72702]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72727]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72739]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72787]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72787]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72796]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72948]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72963]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72993]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 72996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73030]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73077]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73127]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73143]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73180]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73225]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73226]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73228]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73232]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73280]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73329]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73332]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73345]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73347]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73472]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73534]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73540]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73552]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73566]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73581]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73625]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73639]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73657]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73724]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73784]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73803]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73888]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73931]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 73951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74006]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74084]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74283]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74291]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74324]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74359]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74361]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74389]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74400]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74441]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74441]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74531]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74580]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74591]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74675]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74737]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74747]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74774]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74787]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74789]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74819]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74832]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74894]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74914]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74936]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 74999]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75072]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75267]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75314]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75319]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75349]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75484]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75506]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75527]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75527]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75549]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75554]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75567]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75572]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75673]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75676]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75709]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75712]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75720]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75722]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75728]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75731]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75754]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75791]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75809]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75859]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75861]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75892]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75904]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75945]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 75972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76074]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76089]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76104]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76122]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76221]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76238]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76269]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76349]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76406]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76509]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76531]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76588]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76589]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76617]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76642]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76671]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76696]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76794]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76872]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76931]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76975]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 76994]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77076]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77104]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77125]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77148]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77173]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77192]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77227]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77246]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77300]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77444]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77519]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77524]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77560]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77629]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77710]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77712]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77717]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77745]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77795]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77843]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77859]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77902]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77988]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 77995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78023]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78183]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78283]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78286]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78319]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78355]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78400]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78423]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78469]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78504]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78512]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78527]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78559]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78584]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78650]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78691]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78739]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78741]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78780]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78850]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78856]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78875]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78889]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78896]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78904]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78905]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78908]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78939]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78979]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 78987]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79018]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79099]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79163]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79171]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79200]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79283]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79356]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79358]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79398]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79436]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79443]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79455]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79471]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79524]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79529]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79655]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79702]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79767]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79859]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79867]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 79975]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80055]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80111]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80243]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80254]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80298]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80299]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80316]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80336]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80414]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80446]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80482]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80495]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80530]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80571]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80607]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80675]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80682]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80702]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80709]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80726]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80749]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80850]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80881]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80894]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80908]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80912]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80920]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80955]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80966]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 80970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81045]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81084]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81088]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81088]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81095]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81098]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81107]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81115]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81136]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81153]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81184]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81205]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81235]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81307]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81307]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81312]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81372]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81418]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81444]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81457]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81480]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81518]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81548]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81551]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81552]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81568]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81626]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81676]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81678]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81703]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81732]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81753]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81778]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81812]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81816]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81831]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81844]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81844]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81860]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81890]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81950]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81957]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81963]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 81977]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82004]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82092]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82099]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82110]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82119]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82181]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82188]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82263]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82268]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82297]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82336]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82348]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82396]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82400]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82405]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82438]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82442]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82489]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82561]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82573]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82582]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82640]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82646]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82670]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82721]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82722]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82737]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82770]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82864]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82867]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82875]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82949]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 82976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83004]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83013]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83029]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83049]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83105]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83105]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83195]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83279]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83294]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83326]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83363]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83389]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83446]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83456]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83489]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83507]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83520]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83548]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83549]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83562]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83563]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83590]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83628]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83792]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83815]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83866]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83888]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83950]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83979]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 83992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84012]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84047]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84055]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84063]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84067]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84071]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84222]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84316]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84366]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84436]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84458]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84481]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84632]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84633]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84685]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84708]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84739]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84749]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84778]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84879]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84933]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84944]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84990]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 84996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85037]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85085]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85119]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85177]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85207]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85297]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85374]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85388]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85403]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85426]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85448]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85462]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85463]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85491]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85514]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85521]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85535]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85551]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85555]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85581]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85728]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85757]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85774]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85818]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85869]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85888]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85962]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 85974]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86035]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86043]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86062]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86090]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86108]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86139]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86151]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86253]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86257]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86260]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86262]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86278]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86325]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86346]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86361]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86365]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86399]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86412]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86423]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86436]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86445]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86499]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86519]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86530]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86540]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86546]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86549]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86564]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86601]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86611]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86613]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86627]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86681]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86685]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86686]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86700]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86711]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86720]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86728]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86785]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86810]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86823]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86835]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86868]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86919]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86929]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86943]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86948]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 86992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87022]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87022]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87036]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87038]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87039]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87080]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87087]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87092]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87174]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87175]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87231]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87271]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87303]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87304]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87346]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87353]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87377]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87410]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87451]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87476]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87477]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87500]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87502]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87534]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87587]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87621]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87624]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87629]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87656]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87699]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87704]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87719]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87765]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87824]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87833]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87882]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87900]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87920]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87974]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 87989]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88016]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88052]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88054]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88094]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88114]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88182]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88265]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88268]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88282]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88316]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88373]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88384]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88430]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88459]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88522]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88562]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88601]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88602]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88620]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88627]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88668]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88674]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88676]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88677]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88704]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88710]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88767]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88786]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88789]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88825]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88826]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88829]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88871]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88917]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88961]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88976]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88977]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88984]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 88984]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89012]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89030]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89083]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89085]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89089]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89092]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89115]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89118]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89137]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89235]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89241]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89264]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89272]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89276]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89281]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89347]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89417]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89464]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89474]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89610]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89613]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89644]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89668]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89672]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89673]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89698]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89714]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89724]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89725]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89726]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89766]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89796]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89829]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89834]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89926]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89964]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 89972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90032]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90090]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90096]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90155]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90175]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90187]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90192]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90194]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90210]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90218]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90262]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90285]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90310]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90329]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90337]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90350]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90364]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90402]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90419]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90478]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90503]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90504]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90510]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90511]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90516]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90520]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90526]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90548]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90567]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90580]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90635]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90684]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90752]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90773]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90795]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90817]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90839]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90851]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90903]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 90959]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91084]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91109]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91155]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91188]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91203]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91220]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91341]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91347]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91354]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91382]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91413]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91416]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91464]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91496]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91507]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91517]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91534]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91554]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91578]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91592]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91654]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91690]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91709]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91713]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91756]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91775]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91780]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91803]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91829]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91867]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91872]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91888]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91916]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91919]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91930]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91954]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91961]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91977]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91981]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91986]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 91997]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92005]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92006]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92018]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92050]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92071]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92091]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92112]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92121]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92142]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92176]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92184]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92197]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92214]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92216]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92313]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92320]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92378]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92387]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92404]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92413]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92424]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92441]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92444]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92448]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92544]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92550]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92581]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92608]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92641]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92661]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92663]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92710]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92798]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92814]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92834]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92871]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92912]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92942]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92951]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92956]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 92996]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93027]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93049]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93150]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93172]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93178]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93185]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93217]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93220]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93243]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93273]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93293]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93360]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93390]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93406]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93422]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93447]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93487]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93506]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93515]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93525]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93553]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93568]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93604]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93609]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93630]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93660]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93663]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93724]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93739]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93744]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93813]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93815]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93822]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93845]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93877]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93881]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93885]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93922]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93927]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93939]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93962]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93970]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 93995]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94000]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94016]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94023]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94027]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94027]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94049]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94051]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94065]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94070]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94101]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94109]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94134]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94154]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94155]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94159]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94184]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94191]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94196]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94233]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94258]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94266]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94301]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94302]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94308]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94322]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94343]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94352]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94380]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94391]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94406]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94453]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94464]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94471]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94512]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94539]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94545]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94574]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94596]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94694]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94751]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94800]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94810]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94863]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94910]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94916]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94931]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94953]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94985]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 94992]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95001]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95002]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95009]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95026]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95055]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95068]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95073]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95078]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95092]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95144]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95152]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95158]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95165]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95179]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95270]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95287]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95299]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95338]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95392]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95395]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95415]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95480]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95492]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95524]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95547]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95551]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95576]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95576]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95622]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95627]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95647]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95665]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95683]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95684]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95799]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95803]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95850]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95864]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95893]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95899]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95926]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95938]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95939]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95963]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95978]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95983]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 95994]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96022]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96061]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96090]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96100]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96108]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96113]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96124]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96138]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96175]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96201]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96204]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96228]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96256]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96292]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96309]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96325]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96406]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96458]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96483]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96489]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96557]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96569]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96605]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96645]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96655]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96677]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96679]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96680]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96689]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96724]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96731]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96748]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96757]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96759]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96777]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96790]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96855]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96871]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96873]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96876]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96908]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96921]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96952]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96963]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 96994]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97008]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97019]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97028]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97041]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97048]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97157]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97189]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97193]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97200]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97288]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97323]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97371]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97399]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97407]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97425]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97461]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97479]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97490]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97515]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97533]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97537]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97575]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97600]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97705]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97710]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97727]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97775]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97837]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97847]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97853]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97854]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97870]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97874]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97892]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97905]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97923]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97928]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97943]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97958]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97972]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 97982]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98008]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98017]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98031]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98044]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98060]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98149]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98167]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98175]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98190]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98206]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98228]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98305]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98329]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98332]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98354]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98368]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98383]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98421]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98460]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98477]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98498]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98515]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98522]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98579]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98598]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98625]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98643]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98652]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98664]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98664]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98685]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98690]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98697]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98704]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98750]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98755]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98769]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98805]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98821]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98834]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98834]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98849]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98866]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98879]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98886]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98889]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 98913]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99022]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99025]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99062]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99082]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99122]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99122]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99130]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99145]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99164]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99168]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99219]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99318]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99328]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99335]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99367]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99432]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99435]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99440]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99445]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99450]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99466]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99501]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99513]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99519]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99520]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99523]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99554]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99584]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99592]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99597]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99634]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99640]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99692]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99698]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99788]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99813]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99826]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99840]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99842]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99875]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99876]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99880]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99894]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99901]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99904]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99935]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99947]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99959]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99969]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99997]]; [tree deleteKey: [NSNumber numberWithUnsignedLong: 99999]]; NSLog(@"Show tree structure"); printTree(tree); NSLog(@"test 6 passed\n\n"); } gworkspace-1.1.0/Documentation/0000755000175000001440000000000013214346535015736 5ustar multixusersgworkspace-1.1.0/Documentation/GWorkspace.pdf0000644000175000001440000275701513214346535020517 0ustar multixusers%PDF-1.3 %쏢 6 0 obj <> stream x5AO0 >q@y lY#|=`с0ܽ2|fW s˓,@0\`>'{ȓox6y,aU \ڔu\G r:Vs)J iq:T%Ö4Q85)C{tx>,Cخ,!J5Pȵ\V>fx1:NPendstream endobj 7 0 obj 224 endobj 20 0 obj <> stream xUM7 ٿbS ĊD}S(6>2ki=8Rd,AQp&?wo6H6ͯ͛k`^k쎛|A4$s\5Vjƥjvgm)6VL)y~+LKX.XCs_K㙏C2h{(wr1-?B%oL[M[PL)N'9n#͙wFy6l] ~' NQt0S74ebm/bP]^T 32dx϶o!JŸ/b[I9]JKXC?]S,r+y[RiKO`\9 U;SY{cj%.m{l()u2ᚠu <ͧ6֚! wTWppWm"x<%w?b"BQmsEɳMg9Wgausڽ@](G@M+(ʪv.Цvo>gմwOL!!8)Rs!]*^SI[Ksim֪qnOSWϨb52V۩Ŗ Ù@Xx(մS1*_G(^8K'.\YB"V% z~-8uHNX0TJ|e01,1BZ蠊 Mu+,v2fGDX]q0ZsԌ<J]1emJdT!d;EQ7.\]<4 aǏo?p)~.D2׺X- _+pz&Iye_$ Y:xlԕN+eyDx- v_]:endstream endobj 21 0 obj 939 endobj 30 0 obj <> stream xZn7}Wc w>&q4QQ7֖֖;joHBj7\rH93ܻ(br7+|QNe`h~0@bpt1y^0c" ђ*l5<۔ ad\;\H>3X 8SH5}*?eP:Q9Y1E'~D`Z`iU퍚joWMB.e껊kMZCGJ3cm4~Nh^]odplza9+A@ CC⛢;qM7i*,$LIm:iJM3Y@11aZ,7ZŃb FemF/r`O8(8i |;ḍPj1{P-|]胇-`CmOsg/@eư.EIUB%Mp|U/{ Q$I\5} J2?۸["jny]+ѳ"*Uir= C˺(kMA7nw^GͩܙZ塮c+lݬ^xMƙzn0мd;ޫ|xhsbINM;׏Mό!3J17 $;vl{eMs%̬:v&?MܯoysJzuFCح2[? G5l[J뼫q\Qђ[ Ͷ6>W"Ug2Dc!T殙gc"i.!DulT,zDn]*)J{a)٦cbn1Ԁz7Ď#'XʷbXiEJKr)E!ݘْE,`*kni$ɭQkp,zRNڴ؏hWBWBMtA.y("@Z%SD|Ud8Q´Z\ 3L~ZTuo]"qO`]l)2WVe&0[EUqj1Ϡ^]d" X žɜ"s_c${\,׷%rWn)a|6Hޑ-|(4aBU<|-Z IdzY+EQ(8fЀGE;jemЂMG)VGav3:<&d n%v<,m<"cD4BI/?W|Ye͑nwcHqun3I0> stream xIs6<3+;q/M:u陖hDْ܎ bD1ERI',/Nnj:Y7f3J ,4&"Sp+C jdS>}}\)(1$@\`ʄq"›r< /Ј 0&tWDQZi[uD4 8YV!J ]0 TkZR b>tPeqc@+_WrkFE=rm O_7""&r3;c@Ŝ.UvA~q&CIdMO(ۧ8"J4-n_$HB!byJ|{V7(L#[`[1@j5 5B ϡZqۙ37čRܰslDMܗ׌1227to/]Wݦ~[_:p5!^`LH\'t>jPFn?O*qΦUu]ϖŲHA7zp/+B`Q3Odwkx57Xgiֈ9_/_0F12YگU&ϣr%F2eZj\znP۴ G[ "- 4[(B}5]מ.){ܖl\u{*Ӿ.Z+>Q%nt&ЅǾjHkY{jb{쭄:Oi3ڒLXEXṫ4 UgaњM!;͏ϺcTPu|'G{7|WD$0.Г0UgW670,q9sMДvWr~|Ͻiߩ?-r֐lp\=b7"LŠh?J (DK֜pfݼݡp_ U.YU }b 8]aeo7M ;z9hSwד4Z&s2x(G D3LGxo_endstream endobj 38 0 obj 1219 endobj 44 0 obj <> stream xUn0 )|[ ,Dw0`m0g;'NC8ZIS`ſH>䜉O_W!{ȅ_?ه`sX#b"9dؼXg7߆fYVm񇬄(孔dL^|n]F\uvlHEXi;0tTkfk76ŵV~鵑&:oI ,7Q$̂Q."axJ_y9QmwWH}3.EE*oX8`ioStq)fI-Cˣڮ7ǹ 4ehtpkK-C4"$W2z6AoIȴJu;4ծ{ D<#C!S {.,NCĩC軀C6M`Xo .(V:ti T RIաxK)4Pnjh}T.A &LY 1SP!f )e#r > ʤeT<ո}eHθLKc^lqh#:YUn][&8!ޔf )0K`ز~D鳔587m޴hՑ5pظrO!.a1HM[>ؔ]V(Y&k D}=:u^a2_Kւ4.{G0:5iшs2<1 w#qە>KҰ Ur2)N"K.2i1ZWeB xEŕ =\C =:> stream xM;@ {eh/%AK o- YH#Tdε@uւy"4y/h/2*%vC+0l{P)FW[{)S A4$kn.>%cendstream endobj 58 0 obj 127 endobj 61 0 obj <> stream xZ˒l+4~?JRTIlǞ&!2$AF)s}6b(9Vb`w9^gb^޽]q-ZVy{+Nw b VTL[p՛q9g-68\ Z|ׄesk6}Y_5EbiMOEǤ"]%caod\Q ߾w?ԧ_ď=죽U@K0g7чB.Cғ+f]X IݩkzrC3uy͐TvHӏkwx4]=zY9fҗFf yi۵q`VGOY;q 8DrH~X3E,YfKqG߼_ק樂_ٶ˛6EL3\{ZLHd~xW]k)VSnu*9njß fBXCvOXsR씔f^ mu?#y5GNXf9@48*>YoX1uNWƒdt5.$ T@\ sVɗʃ嬎bRg,BawH̭M˙dKZ㗍Z{X_}9~Kꌩ 섟:F%oYJ䂾夗R6@\2IH+,#&)?aIYb/b]Ӂd,oUQD!9:nxj"gOLe~E< ‰o4^2k9w|=06u4T9G9[%쪏!JCu 76XޞXG uS&Mnր蓋-Ҭݨ|<6GD/S$!u4v)@'ysI5*4D~lΟ]?!ɨnFqO1QQ N5Pq[b$P? J4<$^%6%YB ' %C!\90H uA.H+wtSvEjWE.vYv" vf^fu5KD{rD#,!ѤJ;lPYKH"A; i7 $.O{]W2MxR^фkW$DK 7zKIRvW(ɼ1s?ߨ@ñ0!i.Ia-nTKs:d)IIھ٬vO{١FųkH+%H I?0PNB^ l6v+SRr1hebMiRcRDӨ*GbwV=ހ_ R1t49GѬ@kfoY^_)(xSZ pЄCfv IH4˸ iqߋۮϙ@ }e%za@e{0P5AP[nP˯ IN75PF]uBIM0{"^Rn2l껌;VRK7,Q QcݘFB:}e ݗuIE#j3-@/dg5rIW%^|,bt*J:{Ł嫚[9z5s_;=h0}Ws &d'*(2"eq|?bH)S*+eݶ5Ȉ4 {Nw)vh39_/fϨ#/j'5_pg $5責!L3iFy="wstJ7@آNa/4y ')W7ӽJDXEc) dVc"ܻ$8Qf;6 E&?JR3M~-#)Çu 6@>v >&~_w[+Tendstream endobj 62 0 obj 2900 endobj 69 0 obj <> stream xVMoFWfgN@8*z%b%6I_p?F>ξy>A9VOXٜջ;pZCޭ(@H*ԌKUO7? ;]ͧir+S7O_>nx(q6|VZ&AKrthfw>E߆(g)Y ~IE-h(A 6R:,tSn%mV2)oDZ<ֻjtVO\: 3:$̛@s֨j_m yn}& )sf&ybte\lΧ:&Ix^Q<+Qzs͏ XOc搀qڟ!I5s @^9Ȅt5k|M@fi6@jQl/_3q5fFؿjrWCjDihN.khfΎ4-!] a]|ŷ ǨѢӲ%ӣݝ[}ǭ@j4q!T8tj\piWdʀ] > r]_cdendstream endobj 70 0 obj 1124 endobj 75 0 obj <> stream xWrF+pt싏T."#DD }bR]qo}*4qTC%MF}@ [}ʐfq9S hADX?G,KEb=.. Su帬 \L.gŬ(yృ ,u3 5\1ך/TRMBg56\}!՜2$fߥʵ@r@uniFSM94[ddA{gvl) ? rt17IʑFQh|5ewŖ6YTknd@ ngQvUP~JXnt.1hUx, j]2$P\mby6y9Ү @BL͜/W1 :=n $.GYc gİu4 hZsP{Q_/Jz:qK+7j8o.5 x$Fb bf5V0Ockgi Y_o|t RqLƖb+Hʝ" Kmv5pefs;8O OO0Dm)ѡ@58ae*)m‚`Iu> stream xW{lEo=yVQ1%(Ts;3;},堂kuۻ)@ /|DF-6TAShB(svogj#n[/+ʊsT/ЖG0&%o9d2@'e0`*k?&e[5 |)*!)$_Xn0u,d_Rh  RGXa8wG%eXU5,*! )$Ă8k.hMJ(LWe8"3Rk$Q1iiCɛ'rKPQ -E'q4lF-,CElc1' t9)hT 3>Rc±&dfؖqtMx`>se܁=. NMAҰùq2i8=E 5 ЖS@EMچyZiQMQaP\*F8fNم҈7┓7)"ѨN)eI$A^rߠK奼TnWGQ tD2P Cv0^GiW០(D68-<9 Pi8*E8JguU&x،\nJ9*FQ֩p߬MnqɈYkR(HZ`#)w*grra908]uY58TA`UcՁ*#!ZNǟn*eXE '.|pF SZY唅VC4K iuP@0*3W Bp%_1XLvCPdO7~iҝ\E! /ˋ(P +CF12U[I~-X-2$DFTLyw^YN,n"Oѕy]Cm[33'7To[⡢o-Ό\7̸"cCes怬^i߸б铞Y_ ;{8?;x۳}t7=:#fˉKyGTjP(ujxeiCeW|1c/^WTJ}斒Gd,dd?,u)x%kݖ'O<7ٌe^[Z~ټgٗT32vS+We|[smJ̽r+Z֝}J̬oKɃo}~Ώ|6>i押7o@8= wHޱxe0Ù,{?[U3NK'AWV Ӗ\nG.YHT_QIG4MɡY-khg59ŋ& @%9b~XAendstream endobj 82 0 obj 1663 endobj 85 0 obj <> stream xXrF+xKnvbtq*}&A6I(E__LfpAl{=>LLyɿb7}3Tj!NƕwIru"{6_N^wR0\k c┙Yi3%@Iu, T\R&'0Lx.l$BF`8fO%E e*Ani2\\O f$-e21 &).fˀī=J4zg*H/ 3,ʄ:]@?!WG A !fSJF7nc*)cހΊQRGX4)70v4+Z*U${%k|ʀ&$ E98l3gjl~/ YesjYaĭ oy.-}[XH3,zlcʌ|WaQE yA͐ywt("8/Ss<C;EݒzLZ_BʓzG$7D]*dyB@}Ԁ wå%OʛMY$ޡFOқI"dnD(x%mwSE]78 ]V`z_-6sJZ9٤N2v#z_ջ$XPPި:}ZjXF(GB:$[#xSniwBy4Q~M$JH_hb5a(u7PA+鼍JVn5/ЄQҖZqO-]mI-x>@af]ml\ u+p.VR^$OU:KRf .- co<1o#CvaY"]KDupM<\u[J{-.}Ǔ?\*"?s 1rs6g ]"W}\'#ïS2O4sYx6A9bkՠ;n̽.ZC<•p)r݊?XDendstream endobj 86 0 obj 1922 endobj 94 0 obj <> stream xZKI^.1ijۚc yZZVi6SʥC{-uyn)Da-KK !;Fj}{{ ^no1ɒIFYfR::p_ۦrd=n΅壋x^/U :> 1\dAwC2HnV&_%.3R.wUhUw0[I7:jKY5 a"߼VB*; b+(픻L OF=o.y2F7J,-KlW^EQAYl]5}iQm}T<9ScEcG"ΜI;zqe kmb4D n$Xa=v7f@i<q#|BUda J !0ߧWk,!S D2"_d,N\Yլ~Y!CNlztϫ~$bP{Lڪ!` -u8Xd/oC@XƎr /LX 09MuR+܉aH&-V(Ayՠ%p7AcT!px@}2k M !Z\jW@f\*պJ$бA>,rɥYF8n">{v vRO?y)t[TL)w`ZC * jz[Qai7Uޅ}" ޣDD7_Kl֠u(Az6j!OK|zc%@2{zz5iMa{>ja֎`쪣gih! M(9HyCѣ8Wiȝ:(i][FЄ> A2|VƤ2VKmN^ĔY,#cE? v\i oT-C)@&Vϖfrt(rAD`?f#CȨ`3/IJf_ Vr_%Ln\0LKcfrAV$5z@( 6o pƘ:O R3է}ѹJn6X/ή/9ja:I4I;,xW$b''=ƸL۽uoK|)b*yH>l4&2,*j;hhuL,;pd|ߛ| yrޓө<@Ǔe_WS`F [taƑΑ75,NteyQ94Tۅ#$DDA"| *[$;  ~UVb>hd?A؀X4ed*ṕl[endstream endobj 95 0 obj 2944 endobj 101 0 obj <> stream xYr+2y?ur&!1Ie]ytBSZj8ӧ?V+ݏkosXWW^kK_+KFjuWso~}\wO:շ_^+yN[Yqk=k+k[Y9Ц]xpE>6ǸVJ0\ *ά_FyOq LSBf(SiѨm(ϫC<w>.*է|pj|q~I „fnJ@4\f"xťc^r|2֌h{gv"K 7e&4~g4СIӒqa}7^)t;rR .=_*0#_/&BW%A؂1 6ݮi1d$Xo.1@BUqrX?+!垊k~Q!PHJιRC2pUЕf\c!-Cϐ#xw>D}\Bgh[qJzg<>"YoRt2~rt{r'asnJݲZU!G==^s)+7a5@.% x3TqkˮMTV /1FH|1c2V90~rozn 1W(4l>ض=7X*kRnVb.qrm'R O{yy@{F> n]2ا̃Fj4BJa(3FVKLu\ٱoI""f ǯ3<&)9]~^{q[*ӣf*t~dB($CBɮʨH@oFJZQ(puh?g| `4%Lz\GzZ @PI'YotsTYDH/|zFh T7"=7)>{mкӌCOf -4ݚy+)Fz40 TGR?!N(2$NL&}OtS-T w2\tDSk(S`]=4%h~,߄2`?TYN& T3 ]gD1ZX GmC`i)9+IiN p$5#5w\QINj61:Ŭ@9^1 nwl3sg+6GLpOk$"iA@N*@r6C[!B _1zDhdɭ K1ƨajB 7)PA*C>$dpPE!u).Bо00fQg+IR[S^D=[g35]X_s@%R>30uqD+(Cy>reA8#\^)Z/=e1P}ZLD)W:|_<BECAڑ]oѥIvbP)4[ 7 `$[TЁ'"꼥9S)TO0&s&G7ZyFXb6q| 0}s?iN$!oȟAo2Z0Kڶi|a]wYJLW埡ejF!S5_BzG$35>c/K-sPȇWl68=GL V,Ozӯm a--endstream endobj 102 0 obj 2412 endobj 107 0 obj <> stream xWɎF+xt8p$" gZhKX<ߧYUf0@W^=~P[|^|TY]bR"9b<*V8!#JXkrx7WFEt&J5J|*/$dP)IҾM^R4.?KQX˅ۜAD[ +!V;-Lw~o mpNWZ~k&`!NR25D)M٪NZ\}ѪWleQ %I,h A}0UjtS7R-RZxTfWe'*Yc2;L_ΝL[+Rp3c!4Ms(BZcش_ `e-ݕ˕6EnO+|TǶGd?_'\pq;Ń7C,0뼔DvȢ(t0t3-CeMAkGc9 \ec>3z\odnv}s1/ o ^Le!Eu+g%:7@@UYi.oeQ3@y3j] '9hEfA}m %.,"{dxvJf1y7\ .%|UB^F}8.(1}vL/SR&`-=<6SDh29,c#݆e;l x?dI]E=vߖq'7u]Hryx?s5`Pn9tZN1SSo |I2h3f =ì/2aaxKt4_ˠ;!Eu':ӱ<؃,(y_{EB6O%)O䈶*O=?x<!ʋ"4沓OO_ɝ7ݡ!Y >/m7*R9oSeQti0'029N9N-os}kJDŽ6/;7'Y>ف$S~R!0@EeX [;Il mjDo:WԳ[8LAb ojhO*&&Bo~BT%^~,>6"Gf@5XQڥɛv09#By tN0?"m!S!N|6۽2Ca<qõ"pUqgŢI'@Î XϹtay!?b  R\p'KѲL 0Y{츘;@F(Op" 88 $rwqȁf6H'}_*zH.Y<"0>ӝaLtDDuO) '(x>z(X˵~}F4endstream endobj 108 0 obj 1465 endobj 114 0 obj <> stream xXr#+QQ!G X7RYj,52*~Gf%[pD'O<_OjB1/~x !X0F,0d)øҋ7_w1齇io~N:/yT Xmd>> ~ I<0+2/yɤqx8uɥ:8?J*ftʣpcy)as4# 3K$K֦X" ي)ڳťxr)n^W8|x3¹^^0$ngw/%Lvď5~[jOA1t~3+M!6 6?T I!󜷗ضt$^S-A^`~z4s"h5fRݰYX>G_usi.a9KO )Ěy?_ RȽߝ| ǃB9#~^@w5 '<:ӇPse+4R`Ru8{v"):ht Q~ _CG=zUUM0%dcu9 D]O]a  ~`iaU w}ĂcXt!_8gs!|kN=nxF @Ͷ.撇s!gD~:26^2[3TaCM8OZ zu?dk^E(\Sj08Q5HR dl Ló:WI'H nI#]=Iѽ ܒg [OJVûMơZ*a+8-g.[)Bg'O2w܁9fBYl1g?Tx,T^ dH񸦊 JIE4Vs)`uT0 o۸{ %$o>+ÎjR ;mZY/>0F{ڂZ=W MПz k#I0<e"//  ϓ]cQ$|=GE&E67)&}Y?Ʒ -}R)#`fxjx{4\S7Q5I]0jD}L+oE$Rj]fDQ麤7Y,Y3bۦͯ+c-04jg|^9 [,endstream endobj 115 0 obj 2149 endobj 120 0 obj <> stream xUMOA W̱=xzCF9$ ld!YJΎ@QEVrUPWvr0Xɻs sf1 Q ցfɛvF 4[N|<98@t6?FTmh耾e?}>t0)lBG#D0qjMjj# SH]7&B1v%(bvRX)SDϭ55L/b<=)Pk_ Oij> vm#Wlf4q/4űrImSb(HwelJ> stream xWnF+xQr$ra %@_hS-RT/U{ZݵzXq&*?{{X=+k{~ܬ.f;QmnW`JŌq_?LbJpϼpps[}hgkۤ_h'\Ӿg3%/]3>Ss]^Y[ Ǥ0&2ed9g&͸hN1u(G)bܖpHQ2c.8Jg (8s &@D"}y%؟է @٘!0#em>Ť-^)z)"@]s;S P1>Vi f,H{8+_ 7ב@eTJcT@ݐs&9Utīs*ZQʵ]r T ]ˋvHIg'b+ x8]ZG il}]x&:A!)UN1i!jExڷ[o&qk߅ nkb24vD 4JZjL3^r7__Uj_:J)N,#d9Gcι`}Q"?]W8/H@ jĨ-ɇ+ʴ8b ؙuוD VRԗB5AJ+b6="Н#4du ?t)03yRxI{b(h% RBiS`lH76<\`ˀy<4x# 4 l"x$dqK#a {ݵ>LaBaLp72!@~6CAt;2J_)c߿f+0!p>1^XJr:K;U=~1!OC\rUҤ(+l]Jպ薶,VTM~IB9X楁%|h yT]ZȰ$eajs栙wc3i4 bE\<=F=,K65c:Ia*3_ veIjHi>??&[Ti-A؄S?Ljendstream endobj 127 0 obj 1299 endobj 138 0 obj <> stream xWrG +TnPR Tcr$NLrhP*\à7 )*]:P xxx|8w||D\+?M|pk-$]WqfL %Nn(Ʉ5_N}8h9-}քcڟ.߼ 3XEE+t^}1 )fR ap_pX)ƝWЋh[0n\]7]?4dLh0ptGű{9U*q=S6c%F돇 ˱i}ZO4)2ŋoIZP{2PPC!- zʧo̞?"{M QY߹U2#E=~;< EGEPU-|2:4AxeoîpQ #,}An5o7NbY UݯPb"zSvWJQbN} ǭ%`'¤y$$/&8> stream xZr}WS%pM*Q +"K]~wwY(ݘےrJbtӧ}]Xwg_Ͼx?ֻ۫ן_q^x,~W\Y &jw(d/g9Ӯ6g?|ŇU - qVX}z*眧?|iFPR4E43p4Ts_xW?^ndfagFw`VB0bKXPջN옜*ڨrp^}_fKeNKᗶcN?t!u\(VHW簼Xǵe Z+ dP0Ƭ# o 1 )0 *Adtƙw)~}e ce`\ZO}Ѫ~Zv_HzP] T܅in%E%[Y_ۺ_Cq0T|a_Z wMcBQ@Rȿfc !z>aLuP1:ɮ(q>\V*)Dͷ} fqZ` =vh7Ӛic@%ـ0 ,m6 `]vNMYߜPavc$>/$qIthT<(Ue[G0\N n$\U_5-PD~SxQTc~R{>Uo$ F"P\; _m?A'FcjYz(Bٵ@8dy$ދgGaq:tS(ZP¦\~ZO5ஜK?柦e(x)ecT[b/0~ !(I b*p&GbohZN\/mS]LFc\1HU-IE_Ecv0χ@Ij.@yگc$P,Pxmk4KQ0&+C2v%B] ըy7 5%,_a!CCwͱ3w3)I/TF6C/д} 9dsU kRtYlq&XDnYw[M ,U֑n#8'"?d0\5V31)'0bA x QVQMęz% %+'-IS^#Kb N::9@эDnQH?پ:E}&hQ:>Ao8fFtbU90;&Pފ Xk#9"_%4h8_1ѕ:\x 0kRS bOD~[%@a޶t}X<`hO (5caʷyP=@itEn ( "2>`DPD9G@ qOן$MGw'${h(Zb/WۏH ut{"V.H2>+┳=I)|j:i 1^Psct/iɈ?f H\B3O9$^rC"c83.T)(d)2 )vM>MgȣA('=IC>jnr )cÙ6NjoyX2 x=ppkׇfչs璀<x#itXVw nnT~tma,utTL{YfC j2B7T]Fwkcn%P#e`|PkkQiڦ4u}'$B喬Nrz=yMRޑGzۡŻv,m[u]z1dX ]s#TCJhb«MaB_9ӜQ|ݮeW\zy3++Nͅ%:#{r+5/a4cv?ߙ;~ ksPVF#!U"cNREyIsk?O/Z3t!qI> stream xXrF }W豝{-m3ij3}mbJHnXH*vgX8O ĂǿjsB5wY< !X0F,7'Xza\rs.? -F'bK8>/.ǍV2oT($k3h?|}%,:a7g^,~Ζw1&/4i)`r!ȅ< ?'TIiYeFU}U+ P}VLy1ĺf̈́˦ڦ epqLsnRW5U_i0S0&yH;o)Ux Qh-`:yaF6픰mIׯB1t{.MwV)+ʿV)3_M3ccQ_XBpG؜2"!}\q8#G'-Vȩq4[m:p"}ݯݎ-7;A"||2V(f8\^ ZHFU*o@.nӜ\C^2%ҏ3\BV7}}WdLB ܏IJut_uʕݑ;غ)2hf UWu[y@Q)GWQ)azto7DD\]0`%6ZOXāh*hdӟB.ZQ:7m) %]WeM;j}!v:3wYӵU%(SS=S΢I*/BIyAikKk]SR9t5DnjWhў('njab_*4u}P}NT4XNL jWX[˦). Ǜ,<䌒M %G!svS߮ ʆo_X= i8]9MF X-:3]]Z威~[ R9= &ఔj{[駱68.K〘Pd`@|Q^/Yq+a6{mW㐞 W,6FapoV84jPpYt]+ . ࡓ)2Izc,34Pu׍ &O v2Ю%X JbBWȖTStx'{k7(j=&ÒܸCH+-V Qn7EAv*H4Vy ^GB,fAIgmWL x76~Mc7:6Λ VhDI|Q Sja[:Ĉ/T|IYu})19;DD8'~ &{YCZTsZy+snp*-jχu oᝄΖfEmG*k*֛&hU|r}ň' v1"a.ƒvCƀ./"QD܈`YASUHIɇRJ"מ垈{Ӓ~"ULb|}h0mkXZz݋By-]Rx݂PK󞨛O>e |Oy?-ҷendstream endobj 151 0 obj 1703 endobj 156 0 obj <> stream xuN1 E /ƍd5#*Pu;@4W|#IRk @W ˦(KM@(\B J!b¨,ι$[16,m-QZ92"Vz_EQDTzUdɲ,ޕAZ~j5i E`j*la^p{%?'L )!BK+[(9g ٛX *y$=6)Cs^\P9#E)g#uO^d16>2r)DyuNj/0yEendstream endobj 157 0 obj 305 endobj 162 0 obj <> stream xXnF}W1/}kZ1m,$(Z-6舔 T I^r~^p&<߫ ѯffy !X0F,7'Xza\rsJo -&'bK8>y~]dި!Y\@k.?^c [㢄E'L^|{.cR8L)?zMr&9Ps&)Ŭ_ܤ4N7 AfL;irA09ۥ}}a^k@YmP fG;|x3$pL=L1O° d#\WmoeBpG 'a\0}4Gp=GFފK͌WS'e!d5tW)f(s1ӚoRV=5 W*rG%ylۮ>A䀤1@~hWuRCQKV'C)CCiдȑv4uJpT@WfYu U =l۬jB s63PPTgYG܀dXLbxu~sg6HrE˒Ljs 7aVfD$z%SXjR ^Ore`SND#DX"b;~v2M&n2RdLM 1H0Ch5 xE f RHHef8)ZQn7Q.-qkačZH${f|?4'}T# 6f4ռn5e)뒙o{z !FFYj`9徰W`0fS$k OP3j*6d-v)ØWZTT9Z2}8\LނجZX=_:=DyLB1"SKD\^'Q7gmHծ8+ӦMǑq=y[v9r|roSXsb"Sev 3/Gn*Pt{YWHaiLN;`]B묜_mw;ך\e}'컽XI#t=1` `:D_#\)p.I]NhLw_eAS|ߏkuX, @e79~B1r=5 L&8h>SԈO;MvRؕsrLe4*u*3(v Mҷ FKlD=*4S(xJJF_YGf9 18 hg$T@CS2!'!@CvA*}Uj~4)#4Mì9 n#x HlKyIb:yګ}h%ժUNÄ 8for!-Gǃ,;((i> stream xVێF }W1/-m`ϊ=^eWwT̐w `ry8_~m6H6wկͧoWR3睨vMv,XUYqu9Nj1mѶM뻦K>20e˗b@uXlF14LI.yhqLޟ _ H՘VZdP,.Yi6`cT|SJ[7Ls2BQFbmF \鬅Ũ)0+UꜲc{,4T4i_%<*Ew(0+j8}jS SV{Z5t_Yh*7S( ڛ[ZIkypζ%Au^^x+q59)cKhE_/m@&f^cdRqf־<qKlWwaW(=RbRPښ<_6XHtVeb\`XOMYAm#3WRPP0ʼpH,=J5x<P54:8@+Puh nsf!+nMJ",z1yj[ PN`3"1 "qb\)&`>38@jP[sa̫p%I-zOfMcf-I\ b=x Acz``\ao0\2wFOS;uEfYjnG`n mp .eY9bE5H @vUi1)GEPTH_ in^ 4m"G, wsH˺3uWaNWbi36 }fܲ4 \OsL(OG)ajQ>J@zl0r}>+xXYղ&Ep }cl̝1`c_HwfѠs 5o{Jp/4>o]\`< 룂Z^<*pE9NC V$;=E6y2E6y@Zjraow՟?q!endstream endobj 169 0 obj 1119 endobj 172 0 obj <> stream xYr7}Wmo/YW9Nbs7/~#qbCCkUm ЍrR~ aЍӧOC_g׫3ѯ_Տ 1bJygNƕ-W/}bI_-VW/^śqk3hqUYf}yw~W Lշ޿/;fG{^)KNK)aK俵3DJ\q֌>:UȡE-U}8&υp3Kˤw/zr3 ,bѯ?>I )w\1˥wɒe{LB u޴,h#/IIkq_-38zwv2Lrݪߧ?^neh1n,Zxl@BMLI͕Wk9 4\=@ڒ3qߤ5ﯻӡιќ 8 GtB(T )|#)8x Sw)U2v* sP|H@҃ +[ t/2AL*gm21p>Q&Sq{^(@W}pݨ]s֡r-1 Td=UU<ne;DI45ønO7  J0{9v2̏(s(ސf %ήV 3@7B= CDž<(yҌO~Ky= =PI K4^+\7C!w YDؙu컘uUoi|? Ƣ}5 ЂX{ܧʂ^>ӀG/%%"ϦӺ S7`aS?of1$8 @'o@Z2f4qTKp MD(eۆ2o`VŒ V$xsasj⏦[g6rdRPv "Л)yfgB(P[&C7I-JE,yמ̐PԛYAsSQqyE32=:`H^Ē^d:M]R͑9 l2RF]:vdԬu@90C}t`yZ۶M- %خ3Ame%hda>^CAt6&بMKΗz =\υ D֚ȫ^MQdJ.]nR Sd  GfZ~9PIn@S1Y7R yKu@?NdK7) Htx4W~/qSe"{Bu,X҈\;\ׇms<6 ]9(H>`\n0 +{\Q!-ɄpSM&KBb$NWA)L> Z.13p/e\Gs%'RuS'JGIV_HXTeH5`r-%Jt.(z/"4&hahPXo-uQus_ I]BT>v c(ZD) NNkwg|@rq) YrB 85?QyJ 4o#YԬKea5is@$@g$NrCFA+Þt$$KT0?(BQj䒾zS/; -w<}u7cCssDŽTvV\O};xIkܠ9*MxOD> stream xN1Fěәn[T ˾1#mi &E_|;'ߋNNbbZtÚQ"7e*N?tU$-PIJĀyڂv΅E M)L} Qg:20ȇ5Mym7rDiUU2촂sL$9ڈُ_,h,[h?Y-69U*_uj Ur2endstream endobj 182 0 obj 330 endobj 188 0 obj <> stream xVnF}W1/N4q䙕hL"m7__pwgHk9gL|ɿ}!b mowB`(67tAB*.2+]lnWoi'bvvn_/l.V2oTPl Do/ r1jԐ:E?\}Î11șTć!Foyk%%\6ZA# (:z=4sKm$;g[7obl@4`\F!do[ e3%VU}NbTl:0t{̮gf*&NljNk4H]Kg0Tn뮫ۦcYP3C*)j4k YgF6{ gG͑{}P 2fiTr' #k.;8 +ۧCe:^& ۰*bYV> stream xUMo0 W*R ^ҵsknAhYT4 ('zbiu~c@h-]5(J3-Q~K !PtQ]O.'6`<_tNqh2탚qv|o łH&Ar@>g.:1 S1>ΫCBoehsndЈ9> stream xVr7+({ ^*0.؄LU>ʀUAc-)m3?xۃUO_qUf2`?nGjr!^^' ݣW7. n/uUye Y_>]\zU+0DQEjhckp͛mICrdY'OM¬"Yn׹Xmj3;D€:cT;O b 8~-*[J<,ѠORܢYvQƲ=$0j!;]-Y1bw2#dpYS[1Xy>&^ñ2nE;mtgIgC֑" ՐF}yYN"6oMܯ7+qEai4"V\q}@K[2+-b(NnCcTW7VDj1=Vtz2֍XQ37BphbED9,<ޫv=';zĎu)i|SqHQ؛j-n/HcBPRNPtE9UADF7%mdx4DH$PX44ɲ*{:cOjO҃z׌.J@"4:/o-e"hЂ>j O<[S3,轙=>e2Așue';nIuܥcY;W7vl $[1{ge?65uOh.Hcݒ:u/ZcкX >tCAǽu5{φtQ ƵdQ-U3y-.w(x樹I?^Cendstream endobj 199 0 obj 1013 endobj 204 0 obj <> stream xXrF+po^DU,|HEJV~* 8I,ݯ_cF ˨q`ß.{]H1FR,[ ,`"3B*d^ "7[kab5{uu7 CH?FJ&?\h_nfpʼnL9k.G  r(ifRU>Nu}*+dR)bU>&XD F#MX%J4z!R[+o҄VU!jD.MY,~?V&$xl accDfbΝ \l.$` S~+rp CG qh\q`' 5rŕ/>2_nH1 %.]&&ETEES^nmnK/ 5?2d@\uY!9HpUC~"hA1M~pD IdhHaMYGjPWja~6gE uinOQ٘ nu6HT0E/4r20C.˄Y:yD uH`3q1(qN `2$%"esT%g +'I+Oz&Hө>*@[~ 2ʦhX[ڰ yk(X:<ySH(c;.fsNQ FI=T 8>ԇ|YLFBЩ"8ԕ!TB}-2JݡAr;([(H&#* \6qp"|iWYs9|8RFTuQ!XS4-9.9㜖}2S'!^L+B@aUN1ߵM:BZu:E Hέx d +J;v*?8[@r8EHeR@w%pSb_Gt`0CF/ݱzޣ{W_G|>m)'l?_KWz*0hmJ} U5kE@@(3<> stream xZr7}W12'_MqoQU^B##GvS_Ơ17RV ЗsN7q%*?w{Jc~wdXIYEk*/+tYym+0r+nvW߼/7ޥNUU~~{F\Gz~V華߼Ձw~PT!~LCjCxëw;Rtֱʬ.D4٘JHgIc  hE?W>y&fUe,sᥴd78ۋJ ̿)_a촵*p6\?om*S![cš jv뗫JHE'ۤX'.BFhmܣwwLW ^oV>@śȷAiAy-"J2پ?~ɶyd"N \ɑ7mM绺a/^[KvspIHX1fP"<>cN_r̙VZ4QgBauEN6sD|ޟE"z eaEiNt g>r$(e\MDp|_}rןDb qhÄ4>-m L|=xVx i` n愀"QEcY-`5s o73*_)1ILbz3VFF/HmG·ZhoS3vLÈڨjaINQ~J@1^`Ǻ]cAH0ʹۦ%I(I0N+">v A+!eZ(-$~A ] R(>9TƇ$aZ,,9o0!\Zj9^OؑJ9I!<9`=e8-jN47MA0*.iߝ>-ڳ2h[jl>S(ɧ`/ TzdI//ę쏮8 5ʎprtrdA|wT"K ыw)Ah8ϨޢrRZ3!(Gg* (9R ww4s$?2{8k@#X3K%YE|KG;~)g!X$3)? 4(y! g"Ez\8X9 9=@lex^OߩA# 6E'mX7zWaJOd%w[*]`b1zCaQ .%XJ?'bH -u%&ҵL_R QMxhQ/M?fSKBݛ^Vg%Z]^`#ƫŒ=Ar 6vh!*|D B@@"+?&DW(:dSF01JljEäHX"4&.c0q;ì[ͱkc}ܥy)f\\cz>,885kٔy) V[M@k)nZ.- Xz7 ʕlqޱXŠs1* rJT-<:Hf0C zk}m2#渹mST";/F>N̕:fX 9 "=^6gF{u0]"V&ZIKx{$yCs@Qk2st_j T@o : t)ٝ8T>&rcy`s}@0'3dԥ.r&SGI |!Z-Vz $=W* xzmS` e. C8j氚`0r}+WҰzv8;RsC M4-^_rjqJN?]dGRZ*jIC1ryau>2dMK#O;CnjL ;Sm2.9R^0>/8{K]-|_\%S MvU Dcł6/ _jY(ۣ\Ie;q&jK ԋr n_RRN#?U))J?b_1*'8 ,ץuʿ hg k79O>DaF)E~j[OB{z՜T@::UuͥY`6x)J0UyfSS8r?DѳawC ɻDa*}/ۃ( (q''Cj_>zI6k@jQԜ@&S䮇LZyEQ0ޙ֔l93@1A/J4d)C>GV+jA/6\:6E?hv=Y&$ǸfĹHyLA?zЂ,ID*0:)ה@޳%K#Ry5(LRs9ȧn/So8 hs$EQ' > stream xXnF}W1K߲A,Z@^H#QvS/pf(R~00{gkX7_g ƈSICZF(B,fA$y:g ZL-&O~ǘ#z3?,,Z/_MJ޽ 1o߼-VHmUW f{whgqLT0b4u}ؔX)> 61/7!^F$,Va"#TWaSDmuV@s+?5NЛ0ȑ?j)W9N[6 jJ+ռYn CM:bC?P)qh懌OHw۠ 4Z_RӼ2.努G6c5/Lb_~f "X48Mg 3trjo~W\D1jQmb.diͶZgzet.71r+Is)>լ–ZC _W(Ra - H_pΊI%TST(Bx<^^U j lT*}>Eb<ɴ9)nO%µ~m 8q,xג1`piuߞ挲:+Rzp-;t,6dhm%dԷ}BOfZ pOpe~Y~Ѿ2sG%tPfYol K?Aczl&M R,ec"fJx}h nTcsT,uҍe?Ų=*:&TBc)K)&!S #pఋŏ 1A\Ǘyĺ؍ijр |1y81tXmF1MAmkdDFOËrsY8|l4oK|m]絚]PcraA,J6ȇvӺϢ9cZfCSFdj) hdf2-:"'g9Y* 2Q8s>UDeN? |kI OG   C:YJzЄ6^g8 PJ7w5]g:@':GyԈ}T~MO-xF WEU."@`O cC?蚳;-re-W.ͽQnkb52Ӿ.  tC>DX:fծ&3g9(lbGFp:\dzh~]o, > stream xXr7}Wpߒ7e%g]x7 k2"Wl_aRofnjxșhrL T6ۻ?֮cR_+XzVpCvďf>ԧ}0lN_~#@$ޯjvc?]ɕi"@| ki:~*5 #u7鉐<#5?ʙgS4M[x M*-5Rr\2,pjf.ob#\gJK7L6;^!Ec֝٦ Jf?pfi Sf֐[S3: p +pMiNYL}k3%'lHȸuGhz>NO@KmǼ< T}}itiɔWa9b0`^:C ~>?K 8VQL(k;Zy nm|ij!哀b hZr9#SP 80T9SA+GN&\~/-ozW'89˿bjlWi`>HJq>胤T|*q'!Y85AIK)VJ#ȶU3(CaÎ@iv?cXA|c[b;PۢHs`cpQJ9g[r1ZA.#NҎKO]q}䩋hpf @m%5̮d9zHeo$o D+L;7sWg*~$Qv|O6ӽ q-E!YB̀ D%8 EvKyhI6k'hM&AV|Ea T'H*Ne$2ƍ&I 'g*>)NXM$\ m-u xSNOݾ!*JO%MIUY?e4T2 Yq B/s?Ry09k"[ $Q Gj%p `+ }QEqq3Η1~l9Ǽ[we{;@eqt7zh}R w c{MU~Z A[7szQ`r`.zn(8}FG2-x_M.C%=$^e͝01 X@|)g_F>Sbɔ.g'JЂYDoա rMeF z drME/d=c.QnۤL&8{nDOOPVϙ$'; O52eq4kIo2":L T2X5w3^곚I( Wp#SHW=N8˿*p$3~* l\q'5 @7)J56QA4E_ EXir Ab!· s"g-QxMŠKA>;Ȩ&qA[w r/8 V+i9O]mb5kɉsP @[% :_=5 Ᶎ +{|  \б6cFɨmceѣ_G+ m&` lFnXV.Z]%MХE~B-Э}{z7*>W jz#9|X x!-UϵI9-h܋Ơ\y+jAEi1u _讫RÔ"}csa"ֺnrS:f2MyO ~ssp_*J|Cv̰=Hb |!s-[bVvT/Pߜz6z[ Hr񡡼\6O( $ޟA5o`~endstream endobj 226 0 obj 2241 endobj 236 0 obj <> stream xWnG }WcD_N MW@_WjI+IUrf܋APA̐<<<__B5[- !X0F͢; KVNƕ.V+ {g!{ض[tZfDr(:UZLYpo\rL T^M:FÅ2o&n^_ B$S2_U:7ŗC@FV;eȇR4yuo )TTSn6~102.xŏ}WxuyӚf2 }'jM~^&~XJ-b));5Kf:h{\LK,$ -9|v9=ڝciYsm&߄>>V?@7ǻ`ZS|D3|~J7.o 뫺Ao=5; }OX&-9p>( TC#~jץr9H%>t$ytu2S}DwC:LJ&'ĉ`lN,];]fP3ﵚ@}yn3תGیyׅӔ e((A7>sJNq?pH,k0=TPvX Z5s6ϳ^x£Qgk#^Zw:\RVz47y&_5Mۙ0E**[M# sQ!%}m0ݗ\F cIRhp ޱvAp"b[s<cyUu}1 FP0RZl^p' WZP>nyӄOϬt?⼟hQQ*K!d~\s#fu :QY$sK4NġE wU&e) =5e> stream x}VrF }WL],$rim*щQ)}U^ QR2~_*)Ol&/ Z6G@5@RWy3Q0r5_Mn>~|88Z%b`E+>?|V#)0{Q \`r fӗǧT)bAjԈ!wԝH!TI9~r3kv_&"Uf@0shUSXƠJU3+!);mU]d{}u`>% P+i+q>:K4ΰc]Zb]/o-' H_7RM4v+ .GՃ#_oM+ L-Zˉ' ,GoVu}hFUSBk3nUD:(i@ZH[w3:-jϸv1T,6/aQ||uH&HHS+?=E]h,&GA,[o #xG#£!Bzǝw%\¾_o6ivhMr:ݢ+t5`jX)> stream xuTMs@ +8~hw{lSߓ238cLlf+Kj;<: 0W3.;dK˿ǼdB$Fe}V/CsRP蹲\gwvH>lc=~$ B߶gAzFW9 zj1gKBV:AnfDP3ļp忶~,6,w~[$m XOWhyBǂ!F36m#xmbX]7gňsaWF_:px9mފ @ ֺ:D2.i*b ʢx-j .gO'w ˧`8¿ RKVvW A9\\\mRR6Tɿg4aq-B- F{3w.>yeF?׋1,0/7.7oC=~+I+>z V8YN(&w-y&b͢>ᯌFRYlx:r6kD{|F>endstream endobj 248 0 obj 599 endobj 253 0 obj <> stream xTn1)|lnP*4Ynd!mÛb{=*a/3|?'(',ҷj'O'#%ٜ[9uJqRBG}C6%\JD2g!gs&vP@DXDb/n;:N C?+m~oSoG(2pKl)qvXYQgPO9S6sw459,<Ӭ}یr|NRA$ULEQc8^ѾY9s.swyC:Y R8!%Bm\ 7= 1YNR6vCmNb))FY#@~;r5/yuUKIWMUFVu9l^J9%ŚsյghM~A\~*l{Hx~9vgQvtPt~UFu~endstream endobj 254 0 obj 741 endobj 259 0 obj <> stream xXMsF Wt&b{KgKf[ʤ#Qu].@Җ?3Y/^|_|T>6o/FUJhVU}Pad@y->?s!=d3)bq <qF_sA\ .z_!3md)W-!Zۢc*9Q3U[&PIV;*1z3V$ʆ$4C=֏61ac{P ݵ^> J雡20}Jz5@^Xn++1XSJ$xnߚ]6`7xQ@$Xք1?0^Lq 2ၔ7 棍SulsoCx&\w;jhƍCLW"J,t-8-Y^* ySX:K ^lvc$>7(8#rėt]+EmWҩoi^O0fĹԄ,q,N1ASOfq-K3f l]7W/][8Ou!=(!0n^R@<dD:|Ž*+ 76= ɉHN`!s^ =sOTXx,srإq$cɻdxY4<=0ʷ]98MD8=;xԡ/GކQnIRHPkOTYcDs֓eDlK*&P* 'Fw>0@F}jqLRf ݁ QU #-nse/Xe;VH1miE8+HOÔ=48{%FAjY4x g†aֻ훢Yp,hNٔgO:5RvѤBj6d;*τH)> stream xYrܸ}W̛7,)6qՖ-=,F3X~1 Er@w>}L,x^m.\|YdÿVş/~ BۋR1)øҋ/g+⇿WB+46*dǫ˴R f4Żftw/WjnjșhrL ɁK%%|Kgqg7hLL'oN/R`VKe65 3{LV79Y{kWcӵպI39B|3(H_ƙp^cvCFnrlCibiS-qbmvMb&LnSԶ}nVU1 ʈ*q:wMrt4pF>%[BM 6 &_0m(LtAjKpU YLJmdcetn3RiyKXmwTJ^ҶG$Xĭ)ܞ(a5'!Ūͮ;I>ȍBQI6%lq?e[@ /Y!|>0Zq _{d`6`^oVvZ?!ǤNGg`2_e> 06l\ٙPO`mlBTc.m ~ubw 0f 1N!-PqCCdX \Q 8èӈv=Ѩ2zUƺHh(c%-qC^Bh!vf~@S C]8&(BSGig=s/ tȩB׶o5@Tj]) Nh# '07}]dLKN$FL3b&FPAڠ)٪< =BO(w;,.,{pU x C|ͭ[2|];i+H׿WmP%zn)jK# 1E琙H 5=vK?5-θPI ͜xNJ rGh;+vS[!=S?((ghq qE?▷eZEN1-5P>&\!(' -i.~`˨CF?nڤ ХG$#]~e<;>tuJ1{ [.'rϳs+Dj:зV90bAPֹCHeUxK>o?|> stream x}VMoH Wkf[M{YY{Qm%"6 q U>g8|~`O^ϋ S|w`ZVVCNW^[PTB|lY|r{߷SDA499),?b7qBI1B8-w)TKN靊g@F~c6rǾOV*tHCiS]U_6xg"6a&k$:1!sD'3HtP=,wTI@"7J"T mڨ%ߺf=6oci秌ϧrrLcz, n>ʳ=㜓@QdUcIu: ]iUeL^:G9eD'5ւPk0!S8LoRxnk1K>M.֯?չ<1g$9d1!~ oեvT862+LT`3dQ$OZ%r-WS;fyqJmP}i VX;x5q¹E'NypeWPsCHG n'+w#KU U)r0c*:ikN|.eiQߑq2&$1mU$f6=Z`Uҵ~^aOøYyQL QŒ/$u1x9XbÒ7KmPv]4⑲U/۝/e!aP0t;O9JvXuX޲ }v?-TT̼Tx9+?nIt~Aꨠ<8k;Džߕa$2)mod.yszẞ?1k3̊endstream endobj 275 0 obj 1039 endobj 280 0 obj <> stream xWr6}W1,>9f&&Dl$Q&xU.(ggٳ]ٷ2R~P,c१Y4$V/>Y\h˴tܳq3iMa2 Z}9_\^ )2Zs)=s)߈V)ƝWtȗgXbi&J]vr1oҜf iST]Wm7d:%g1D1 џRf붼71Ǹ6f+P`0A[cPx7L@aTPqiu6;Q;ͱi;PuCܧsb*LR^nrf+B PY.v^u?Yсqx 1q½L} Lxv}:<].Qljʋ8\%>KUBaIgTC-<'4y*4]rAIo\ 3n pJ07*8Ou%4)S5: =VNP.nʤ $!wyy14"V6JٓH5wv3tS./Vƍ h9ǶBQ' Z>|2HE|걭W$D3;?tY[$y[ gzD̨Մ[RB(  *qgC kS۸ܘr[1䆿-;RYGn L%Ot}GSUCf$i^a'TPf'qQQ*_&r^qW ԥS< )q6$Y+Leg)ۊ9,k' ׆Hw zuy Va@pޘZbOsdkj*iNi+I^K3éz'_i("t]0CSWܟ۪'s'khȚދScS5]3"=F^+bzڦwB.{r3˧I ?>a"OMlxt츹xԀ7L49בJ"btŲMIu"nD qR#뼙}}_$endstream endobj 281 0 obj 1220 endobj 286 0 obj <> stream xYێF}c X_$`7AJZ1DWs[&%(!y鮪s?n8xFLk?nݽYy'6xU+3ovǻqcݿ~'g^8swK[\fT=62s쫱NCg74f:6߽53ӝ1%<*\U:q07Om^WaqW%˼t&]_H Y$3%$ooqs1f\˂jBUJfZr l~ӔŌp;4wOi]9xD졈 ,3JjqtaZs=LަjANz(1q]j$UV,$be\C 洽t.% p.:?3%Zy#W2㉼OC,``9Az`w!es)J4 ,)I2LFhSU] ,@Zc/e geo~>[u%n+;VP:t{K[5N~sk P0+i0| _tqE_#K?os/bYL&9hMCVry]/fK}#$UkMn l읚`!mN m;2z OHb3{=uvZR5K7jI5peR?5 N2A/|[,;<;*0Pry 7_ATБɫybz* BШ5!,HPxI(e1T>bޢ?$@n,+ʮ/),u4RU2NKߧMJPf,^Uf+kqK;k^,0JN:PLBG07aAX ͰwЫi'aՀ9I%:9Xg{6`މOZhAĔ*b^' |U^n/jAx] /C:ׅo=5 Ws,MKӀ/Rzl|-\ө]A%pYi^t䦤|L2xq//->I?a>eǡ&,K=Hx1@ǟr5FŎ̜;~^漕z1a+ 1I.Ɠ "B\,IT,7巣غ00!$Q|F^ CCjf㱣)ۂ:] ? `ir|NxiUH7x!VNw%Ĕ b*TV9נ)UZTNהW-{endstream endobj 287 0 obj 2041 endobj 292 0 obj <> stream xWn7}W[Rb8ѹ41&FR%-m;Krf%km( `Dr9VR@%Oo& RlB P P"HSymԦm&m0pX]OgBD0&cDK쯳g}T;BxcZ ѳ?ߥV c+?ο| s/X6w2*_j!>˝if{6cz=usnu״})@ΩjP!Z :C]U vIVʖXBRo< ҕ]F_?sXRUݥ=Nh(3t@ ۻ CFiR-N |nUꠜ˂8.mbBR֩^n FcKB>$ttϷٵ0#]`(v>oEC^8Ve3f~ndU}Ů*:cSv1ힹԡAC%,?̪ɬd^ Q)-^2N)Teio.};_͠18]4%}2} )}X,}Wr:E9&}6tZGOPR/sfX/yO^-ȃaJ,JFQЬK.i1bkiEp/ .ƒHFmS6sMA `0]ZȾcPtȧATA=zU6M.CE&! >5Y8~`@u C:(zch%iujK&?ڶ&3Nko)o1H:{B0/^QYnE mh"?ڻhV{(G'4!(Aۗ_)J /^E$JQO6< 4ͧfXnX`:"# djɲ1J9Ig 5'&}^pBۣ(,tqCgT#xUrRb1+ͮXW>'izNQuEʰӄ,ngU|l9T[[ > stream xTn0+xLj]Ah)YpD%"%uEQ `4G+ t~^a]S.,*DHΡjմUdmjGE(ȴ決 [C"C'agv цc^!ˠsS!بjN~c7> stream xXr}W-r0%oc;eYB%/~XkX Wӳ݃]VT)=4ӧB ]>_}^qwo?PJ$bu{U>P .qBX^7ª։ |\oޯ7z-p"(T2 ~zM^5^xq m\7nwZXks6ݾx0 h#zxrxh%\ғ G$(uݮ"tY*:)15u]]("at^d{.{D&=q{u>!'F/hp)D6ixNW_`n6Pca0V2˓N){aBBtyH~QBDŽl8j?F>K),!F-"&WlZ(A.r*?Ni!1S {L9WwǶ8M:).Xd6g\W|ѐ#O-|#>kYPv]eĮy t濇3 R;zsa+%y=/M0b"q>Y*|М;V0 ]UÁC?D:xm.\խM"VbaX-`gY@YxMmO L?EMxB.ѧnCȁ~A))֧} h#u u6#]F*{ K`MZɚb O[0@HZ>mTDzZ"mJPm#3Dq7;2Z0ׄydEe.Yq@ww 'C7ܓYr,:/@&V dn:/H2ΆhOɴt@z@PZ73)ZőL⥗H%?@K3h$gi_1^Ghٴ5?l|<4GBZf4zo?G`%ɳ@#> stream xUMO@WJͲG*BJ+zĿxI r;͛'('loΞ'bM~s$_fN@F+5eR|h*> _??\+j1]LTrEDg̀+KP, -J^N.nQ0ÙgrZcUH[MYER2}ė]!AvI$< Gd)&-QrXM)onS_⩞#ww1)|0lBQlA^SGt *p@H $[UATuTɼ+*5CG26_Pm@A{ *熧09vP΀p@[e$$6$JaAMR.b$̛֧+&55FFp' CNwqڽZbА&Ly `*_l;oISu֋2,N"i[zGT@.YjFW#)["4ZkAjws14V"ɲ`joqZ@M˄DUDp2b +CT*2n]CFk9[83_ZA}y@ݦHx|h~*u>s%Cڙ|ư̢r)`(,H9}_m˧|(ҟl)"YzOwؑYHYm׍ݢw2-)wh:endstream endobj 312 0 obj 821 endobj 317 0 obj <> stream xU10 EcYLi2* : MK'/@+9jQ ~1pJ DD[^3VP[4Cӟ^jqL#AK!y`Ca8LCCQAq6,J̸MpW6\endstream endobj 318 0 obj 167 endobj 321 0 obj <> stream xVnF+xaޗ&3`&h)D$eG_5b/ES= ]˫W!etnxȘ?K]rqum%1ְl^,8-2Qf ʼnQ\exW5exlƉx~< ˔kQڦ3Nb&>)қϖ!TG0YnĭO%Tt+I3ƫs&~_ DKC %#Laƺj! d+XNKr-'CHO슦 I"8xhũŠ=xB1}]xh=sPe9):jb<VJt|Sz9FBVY7/zbu^jsR誟+| :4Qgۯ*oYMbXm'")2.E.4f{թQp-N&v;T7 Ơ޷m5\*Nš ɳ+ )u­ -OC&}`l]'$RXaH Z%:BP$:},'xa23Ňg"z (Dq[UTKQT_\(v޽^|){B1t. !DTc*j CahwP`00\DJ (OƬ@!q:zw鄴51&_?4k!>>a)R鼛?C@0AUbZZ&= rY"ܨHc/ W7W{6MhS0UM_AB ވMqgKUmSa$C^w&YԴCf웏sb'p> stream xU@ >EG\jz0b`0Q@`/r ß|vA&AN4 rL3"R 7A)U'vqB?gZE3]ߞiJJLw&TiFMwGS옜[" 5Kendstream endobj 326 0 obj 161 endobj 329 0 obj <> stream xTMo@WDAxwӕ8*$쮽QAZogg޼7O!Mk :/.Lx:DJ+xB"Y(P:LwEӼJA &*]gE*[X `*a|i0xqg(O?;J sCj8 hFSLrןm(@_n&pvb&Gj!jնVLi92r]c7qa] ]_4PqQe^뽧7"l &A&I2a'bBc.gt'\ZIk<&r7"@>OnDr/3 $fC+NۀLQݷefgG5p&~xWu]5MܶIЌ ?  JI:nBz ⼮кLmp6ū3Ru}\W7Ezq{{͖ooo^[\˨TV]m`ZlICԹJy -qh\Զ̳ǫ]NmU~|Tendstream endobj 330 0 obj 625 endobj 333 0 obj <> stream xUα0Oq#.gzeD$b;.[@#4E-@5P"%o+ZY»YB GVx0 1Y:dÒ.5F ;mMd!&tߢ+_"O9eG?nAXc pSqc8endstream endobj 334 0 obj 170 endobj 337 0 obj <> stream xWnF}W@"\RuFܤU}2(qeHEýdn?Μ9g.OF$_]l&&2lgNf%HiEr/Ld$$eH(6W?lN+[_Y Ĕa` Ո0 M2$GWHj쥝nnJQ CJ`k# [UlK)3BC9 \y 21brc\K3l ٜJDq7ΗE( ^>6<մvbaCL"_ymoG~{U}lQڶz Hm[lPk!oFh4B|RGrbKendstream endobj 338 0 obj 1240 endobj 341 0 obj <> stream xTMo@+CZa?Y85E۱mz021Q{Xj"EaЛyͰ G lN:ZGDZqFrC/A*I&3Taq^hm5W^gaLJz\n@*;p[k.<"zaaf d3~[e8sòwlRj:]-su|Q^gL!RCփF 0%>٥(I.Mmؼfȭ7STe$$Xy㿪euT]"i9f7IpWeCC6*=`F:S*Xv.|#e0f~6(Nܓg;P2^%endstream endobj 342 0 obj 444 endobj 345 0 obj <> stream xWKsF WV{.Gm̤M*=LZl_kft }/+Π첂hz3x"\%B52KrQ .z=3*g40U50;X5Elnx慩A1t5?}jM@)MlSg,<4IM{1Y!g}u($A|fᦫ0˕릾ؒfn5f^6LkCP1t!pI^"8Hf$Ћ:b{1Ouwo.󌮥/Ɍ&iB(Jʚ2 ZptoXRKƋ2Q="e#BE` 4NA#1gDS6A@`B~{۬RwZN"NxFm IRj-Rq*V0'R|H?Lrq ЅBhJk"vm<:^'l0LB͌J-Z5]? qM56 rGz LsKlpl{j7 \ d/ z&L7Ν8ʙ'dScg̪i=DI6|M:*D/$(ΌpRu'fy6#yWz"MHBEQɝׁBLuDAsij)cg-H=>04s;6R(y&¸MlqAt]_9A=(^H"\){|a% -u&3Jzy:MJc"g(P'!T"xEW+)w"(-<+.hH3(nRo[t08Vu޴|w} 20|[פXnYǸ'guy\]|>^q/\s,=OV9]=IN,]@1.xhܟ nKz츹V9$Wn}Y\HR@B YK + E %`2Oqpr n$vuI.&y G&L%8@YT"F0$`)$(o;Li4+Na߻5n~!Ê0L)W.7^P>wN c t}LM WF#>޴AE]+2MC,= TO.5}"q^:1kJVE1+3LI]rqXi(f%=/+9KEVq<߿endstream endobj 346 0 obj 1350 endobj 349 0 obj <> stream xuOo@>vfC%@5kl(vQOzkEUff9ϵ]\=kWMmN)* FbBֆuURi~sKV٠j6ͧҵbr#-\8&X9C~O%Usr*@-؂@zTo֏>e*Qn:By# (# $'>E ҳ¤IS~=m8Д[\ͳXͣ sy(#1c:OR::&[ 1cb U/e1SI!~"DȃUṈ-_WoAe}[2*v'rh1O)p )_ws Y׹v>}Oq7! T]9OP/`C,FE?}h "g`Bۇ"d.H;͙9AC2(C5ax+"҄_;{=- !3!-7n| ҙp5He.HmvRB8~JSaFoig2j=(8_+qtfӎ[oGr溩?W/Rendstream endobj 350 0 obj 625 endobj 5 0 obj <> /Contents 6 0 R >> endobj 19 0 obj <> /Contents 20 0 R >> endobj 29 0 obj <> /Contents 30 0 R >> endobj 36 0 obj <> /Contents 37 0 R >> endobj 43 0 obj <> /Contents 44 0 R >> endobj 56 0 obj <> /Contents 57 0 R >> endobj 60 0 obj <> /Contents 61 0 R >> endobj 68 0 obj <> /Contents 69 0 R >> endobj 74 0 obj <> /Contents 75 0 R >> endobj 80 0 obj <> /Contents 81 0 R >> endobj 84 0 obj <> /Contents 85 0 R >> endobj 93 0 obj <> /Contents 94 0 R >> endobj 100 0 obj <> /Contents 101 0 R >> endobj 106 0 obj <> /Contents 107 0 R >> endobj 113 0 obj <> /Contents 114 0 R >> endobj 119 0 obj <> /Contents 120 0 R >> endobj 125 0 obj <> /Contents 126 0 R >> endobj 137 0 obj <> /Contents 138 0 R >> endobj 143 0 obj <> /Contents 144 0 R >> endobj 149 0 obj <> /Contents 150 0 R >> endobj 155 0 obj <> /Contents 156 0 R >> endobj 161 0 obj <> /Contents 162 0 R >> endobj 167 0 obj <> /Contents 168 0 R >> endobj 171 0 obj <> /Contents 172 0 R >> endobj 180 0 obj <> /Contents 181 0 R >> endobj 187 0 obj <> /Contents 188 0 R >> endobj 191 0 obj <> /Contents 192 0 R >> endobj 197 0 obj <> /Contents 198 0 R >> endobj 203 0 obj <> /Contents 204 0 R >> endobj 209 0 obj <> /Contents 210 0 R >> endobj 218 0 obj <> /Contents 219 0 R >> endobj 224 0 obj <> /Contents 225 0 R >> endobj 235 0 obj <> /Contents 236 0 R >> endobj 242 0 obj <> /Contents 243 0 R >> endobj 246 0 obj <> /Contents 247 0 R >> endobj 252 0 obj <> /Contents 253 0 R >> endobj 258 0 obj <> /Contents 259 0 R >> endobj 266 0 obj <> /Contents 267 0 R >> endobj 273 0 obj <> /Contents 274 0 R >> endobj 279 0 obj <> /Contents 280 0 R >> endobj 285 0 obj <> /Contents 286 0 R >> endobj 291 0 obj <> /Contents 292 0 R >> endobj 297 0 obj <> /Contents 298 0 R >> endobj 303 0 obj <> /Contents 304 0 R >> endobj 310 0 obj <> /Contents 311 0 R >> endobj 316 0 obj <> /Contents 317 0 R >> endobj 320 0 obj <> /Contents 321 0 R >> endobj 324 0 obj <> /Contents 325 0 R >> endobj 328 0 obj <> /Contents 329 0 R >> endobj 332 0 obj <> /Contents 333 0 R >> endobj 336 0 obj <> /Contents 337 0 R >> endobj 340 0 obj <> /Contents 341 0 R >> endobj 344 0 obj <> /Contents 345 0 R >> endobj 348 0 obj <> /Contents 349 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R 19 0 R 29 0 R 36 0 R 43 0 R 56 0 R 60 0 R 68 0 R 74 0 R 80 0 R 84 0 R 93 0 R 100 0 R 106 0 R 113 0 R 119 0 R 125 0 R 137 0 R 143 0 R 149 0 R 155 0 R 161 0 R 167 0 R 171 0 R 180 0 R 187 0 R 191 0 R 197 0 R 203 0 R 209 0 R 218 0 R 224 0 R 235 0 R 242 0 R 246 0 R 252 0 R 258 0 R 266 0 R 273 0 R 279 0 R 285 0 R 291 0 R 297 0 R 303 0 R 310 0 R 316 0 R 320 0 R 324 0 R 328 0 R 332 0 R 336 0 R 340 0 R 344 0 R 348 0 R ] /Count 54 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 24 0 obj <>stream 0 0 0 0 119 126 d1 119 0 0 126 0 0 cm BI /IM true /W 119 /H 126 /BPC 1 /D[1 0] /F/CCF /DP<> ID &S5pA$_@60zނA A&oL=&oA7 膹 "A':߬?PD0aO /%l?OA>}/o~kZ}|6_m/ 0li:^΁O\2ew @zm/]l%pm.zAa va-l aav%a, `5t ,0B0Y4 EI endstream endobj 25 0 obj <> endobj 35 0 obj <> endobj 42 0 obj <> endobj 55 0 obj <> endobj 59 0 obj <> endobj 63 0 obj <>stream 0 0 0 -94 72 -43 d1 72 0 0 51 0 -94 cm BI /IM true /W 72 /H 51 /BPC 1 /D[1 0] /F/CCF /DP<> ID &An`HoocOMCm?  EI endstream endobj 67 0 obj <> endobj 71 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY(b" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?fQ=ْ%LJIRO$$18]od{q띘7Ux#mZA|V桥\^j!mY.a@cr#GC@Kx5Vt6"d^Q*3kKl.8D M[wzgf3]VGk=k!,}w: j gдŐ c|?aP- ._:~jw-gj}'tEa ZV6]9PʙrskI$} CnĘgg(SCQ ._Xlc4G!N҈YiȐ|88[hk<6Ct'c,.!tuq@$ "Iu?Z?EnkoXͨT$KOsW8<3= m$C2ح9`i KS%kPKz+֬(,mWƻwQ*OUtM!KX.@#x|>ϧ`s]OֿG$ "A.=kOxeV49Qxz/nvcwDs8N:?1iJ1@5_Xlmo;N7c2[]Oֿ[V6>9VxUk^VIC׿hisj]Vu퐪(P?mjW1[Wg'd:ks-eIs8`pFBF-O}eoe]c1wJ ԵɪJZ¢ ʌ9/Iu?Z?E޵("Ԯ2gPb}*lKz(SCV= ._]OֿXP$ "Iu?Z?Ec@޵(t^$ԚdR֤CV-I|Gt%7$i$iVg?ZҿVQEQEQEQEQEQEQExj-l䅡C i;bU8;ysWuצMqMnvlMq8$s/_.ZQM{|8Hw[隋ITF3);x ߁V/_.K5FO9 c㟭EfY!Ē62@n֟ttg_?]>h.- rDx6`qzt I")~3J?RԿ:NH`ыhS/MDi#2K?RNԿ:?/_.4K?Ro\OC*smieS?R 峜ͮ3D#b,$cZWy Ӭȵל?:(((((((uh9#lVS9[&ܲBZh"s a}"I=XEmuqk:4N c= ,ךtKvPyr @Fyn.[w [W,{TH69YJ g֪3M m`I$r2I"]ۅ.Ulc?ƀ-QUlc?ƀ-QUlc?ƀ-QUlc?ƀ-U=7w 2lRJh_F-Zh_F-Zh_F-Zh_F-UY% cy6InU烎9-j /aӚt|$TZJp34NIß-i_+N<9"֕^p(((((((&;V$IwЊǺGb0tѳ.;0=ۃ|V0j-K+YXʕL>k;On4gi ?&@ Gv@?#j[;On4gi ?&@ Gv@?#j[;On4C4 Nh:uWO(KNp23.H0Aǿdꖖpqs[#JкJT3i_;lP*TUWV[ylO${g$gGp9b&WK#}CrZ;On5N\F"I% 91J,a$Cv#q8@tL[ΙcDg T =AradQ)vQD5x^X#+Y=z=N(G;On4gi ?&@ Gv@?#j[;On4gi ?&@ Gv@?#jM#k 4;䪛h끊+ #Ӵ2GSIj'yTuElܖ ԕJX?rz@kJ8Zu@@Q@Q@Q@Q@Q@Q@Q@*jbA1 a]B ֏kՙ%x4yQCl&aعǾ3Qj7"m;by*88#Gca>լl?V'Lr:G6El}=946 l4B;c(ڵ hV@A_e!"3RPgڵ hV@Ai@j??6Z5Ef}X Ək֝ca>լl?ZuR3+ĥ~lr㑜gހ1moDN0w?"-R4 NzV@AA?ҮjXsl$e`dC tլl?Gڵ jǛqo)@`WQoZ1,r)1*ەs1(V@Aj??6MEi,ƪ7nVAH2íX7hW;cPqg$Zca>լl?V ~\Mrg8l0xI=ՙBI2FFcAca>լl?N@Z[a$)^X9DĤJ#=/ڵ hV@AX9Eȩ&| c9@O V~}uwqj,Rkds@>լl?Gڵ kNV@ACy>-񾎱\Åu~{'H`Tp_:Rj HpܥOC?ZҿVfxsE+iEPEPEPEPEPEPEP+y׼_cWvq>|f$b*&Zio,V#i!C9QU~Qޕ/"gXm֏ ϲٌ[4/ϚUcH'˟-wN?٭D#αH"Pk)!Ak$Ԓ@10I¢AOB? ?:_&OD#α3hhB? ?:_&OD#α3hiX ǹ,ňϧ=):_&D#α m[F/{om<=21VV&(OrB#yx6u㎆bA=cW hL&F:F8>Aj-r ?)᱀F1q֧bA=cW? E;:XK{D^=˰bH?ZlQtj&UYaq+ rh£^ݴP4-$^(0b , 09zP.nWV s4\DFb ds85\©r ulJ `{4PAEsx{I~(O@i 'OI?tW? $M<=A$oVNC$n_m8#*&߷ ?4POokO<#izt_]K^^"[3J*q$84"2IyY z(c-&,dNF?X@ h@!y( =9 /<ߗ+-mChvIws}qCγM*ŽVL>ug拗7;ayosS!Ke+&wԊƎ4ӛ]q˯?Q5$Qr1`QYBzgg˼7_^9ӡ3$ȇ$hXcxF, x#Wta _+n0>3קlPM=h{I}i?G&F$DO0j^{2r啙H,AN^g:K{mƒI*Ws Ph<ϯxyWd7y*X~'+JkQh};Kտb}W5Sw%II <A=hL0e)f9 xO}DG2&wKn^Y&kfʉH.75'&FW ]2O*pjJ.h{ß-i_+N<9"֕^p(((((((UZ 'KHR0Nl׿S5pLQOBXvB%IqfGhB2ԎGff]` ⁧ `|VyKX̪Cʎ`=z;5M5Mj hOfX&qLJgKi iw`K8Dcv@ ٯGhٯGiWCmo4KY K5*pFyF,`3Pv{?7F{?7ZtPf{?7F{?7ZtPf{?7F{?7ZuRkaW_:D rs$Jƾ]IuOyn8J:s硭o&տb}W5i%y8H˒<='=(-o&o&mL?8Df^3O̹# V#$X#-ɸy䎄8S3ץ3ff\e,* 9)'xR6 [pӘ</㑀;w(5M5MLT+īq戌a9 dmlUٯGhٯGkNٯGhٯGkNٯGhٯGkNٯGjM.; c*̗AC$vFvx=)u J#h#c#@YkJ8ZtQEQEQEQEQEQEQEƻmԒ3o8?pT)`[c8SUSi-kվ0#\1? (mER8Pneʀ,6$ nn$X,1(#q9.m)cTAdExр*s)zD9 O0##FV"w)F =|4g#,yN1UoG7G#? RZP\΅s뜂?OM I1FT{Yh?"o.G7@tVg#?|M>&{GtMD0QcϷ&%hP|A@1x{YYؐark/?,-u+kcsu]@Kqר玵~MD2٢ s(@汊iVg VpF?v<0ngWK"1TA#'IBRL#)s38'@joG7@&hiA]``LgzӒ511y]˱R{ch?"o.G7@G K=_-ww~l{t<*bո6 q,ܛ-D]iYh?"o.HY6|B(ZMEqVs)E;|M>&{Gtg\QA?&=πD`dRld ~:ȵל?:ZWy ӠI"EI#*"pQ֬e-gs FWiU|akq{mB EfՀ`HP OZe[ksˁ?:`t+cՍWȫ4)2R>V=38S.kh1k IgJ᤼Ѭiy} MJDV\}Av 98Ϧh3A>nI4E#䎻sְZ~۹w )aI =m%&×Oyw4Vo6fe``wޜ>S@Q@Q@Q@>"*/M73"y%|;4!L&U58Aޏi?P;yZY۩bVa!I?wUdTG(r琧m@tVg? ֓iYX6ZOEfkI@}cڏi?P`mGIe>z*:A[֓X65o=_GUHGE$,\eA7'X׏6Lpkg\gOhkI@}cڀ+3*a%`zu֜4BhZi+d;3n[ g= O'j?>m@^X-xdyaYZ(Ym9YҚVH%sv94X6ZOKV $qGz[X$D2rЃ/rX6ZOVi#Oq&$, |t{ҫ귂Gh c3? ֓T m^$- Tѡlpvd^i.' ipmkQ%YB rOE\֓Eq~}#Y:?mX0EX]Zkv9r7;c:đ\O]h2*H=RkI@}cڏi?P-?VaFcX|\k#FuЯف#O֓Cy=𦑫6PM$b7tuc0{bXY6 |ѓ\M3^:vܖv[{g8Z9"֕^pyoyxaSImsb`v?td1޷FRx3Z [(0NҸ@OO~ r7(j$&v #t[·OѿDv/6x0M\ZcGdOW45!y/,[b7vh{~gھ۾=fcvEw~r_o=[yjO=2H9EQEMqMnvlMq8>{&kh1?wf;Ƣ?@yl@L`sQ&;I-mh,# Jeԏʀ$]JJ:1 ج3܁L:}l² 8穨n!y/ 7=OvH8mpwp8["/pWS~T$p4U.Xt3#/mK %6v8u< ~ȇN FbcIk'l%rApO@XY-,.B4ip\26Fcfxd ]ͼ 6}69U84p2N`i.4&ip\FL5LҀ,jG#HBZv 1pʱ};Ry>Sh4ClU)pf^BvyS洙XFF c'@QEEoiW'|Q~zРOE[L%T88?&#Jһ6Onuo=_GV<H=R_?i略)c&1R_n=@*q}nmpQnیV >T6h|$)js۩=iCV$<8ڀ,yJ yR1CCK#W}涓/O,U*qՋ6ᘩFlDKcc@Ml-6!ʭzթomG#g H\oE,>|mxEz84fW`\/eESÎ '0〤 `~4 q>_H>=j%xo%xw嘆R sS+x"^7C ?̊6Io6$;чr3NJh7Nn3횂X.-sXlbA P -7fn$;c`O?p1Bc`8#8sڬUkG*II8gff .jUw\_A4@YkJ8ZtqED>JqSp:@g_?]O/V"Y]3HwO͞:TI 8m2?K?RHPDChvkf2JI*#Zo~A tu9snx-}N'V 2bUC?R 峜ͮ3D#b,$cM+gRJOUi5q?΀:/ȵל?:ZWy Ӡ(((((((3vkk3@Gp .T70 mzKdMM2 :;,vI#1x=M6-&G٫X*zPMyVW. }F3ȨJws6d=Nlt?,rA?6k=. &N8ԻFp`hLw`Cg q^zTl7vϚ:u? Gv@?#hHɾ߿^EYѱK7OH? @ c?Ə4t;On46?oWhѱK7OH? @ c?Ə4t;On4\q/G.ۮv0lt9/tPVGĚ-Jyэ؉#?#Od M]m9:iZM`[uA]#/4O'P97IL9]ic+q?#Od ?2sN0Mݹ ç4ntو/wnH`2=8<2?€9-ݰ%B^8i%ӥ}ݿ&2?€9BͰ2r{зb>Z?2?€9sp ͸}F"]t?G_i @Zt̬P@+q>¢]Q0bIQ@?(EFxsE+i#!##@UFS(((((((vUFI>PT742u94<(H9n1  0Q!osGڵ hb#IRnAؙ}XqFYᶶf0 H l${ X ƏkGR(YLj#  '#pM>+7d:|7OcTլl?Gڵ hNV@Aj??6 :+3Z4}X ƀ4ϵkcaӮ{C>Ϧ5"y vp78#Wլl?L]VC jGۢ8`w FQָ+GZ#]؋UW/DrMN{~EPEPEPEPEPEPEPEPEPEPEPEPEPEPEP"f[}.)Ej~0j纎x9*0AFlO<:UfӠA{hՇ(*V"/J&%&6 s<4wI ^@wIL%T|HH`ylt:l5h-1YiflYR8$9px叭hQEQEQEQEVlwo+쳲P p9Gz֕f ) !ɎW'<}z{FQָ#n(k@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@*+40Hv:*0Q _"ȳ7 ~t `=@c+Q _"q|m~^{Tq\u0@&ڹEzc9 ? EرOX)u: M.[ H@,3;8"\4zjRF_Gpyal[ŏzG,?%Ӣ3?c+Q _" X'JbA=cW:(3? EرOX+NɴZ&.olg(ߵwtFZ(((((((((((((((]+kX#IAUxo E"I6:dc(\wn0n:Tv yo 80 E1|>m=c;,buZ-% _)8LzQEXG[(G[(IOIOŠ(G[(G[(IOIOŠ(ZY,6pf&WEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE endstream endobj 72 0 obj <> endobj 73 0 obj <> endobj 77 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYA" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?+3} Ol9Uʩ'zО ]Y+xd0U'jբn5;TŬq=UdFYe 7sU[cVԮ[.4 .gڀ:+Tԣ0%eW pp0d9K#Qn->T8@SEEs^f8+a7\9IgM4+3C),I'3N]iq *7/BpLsr`2 e{aj~\ݮ,/1aNsӁ@-aln̓yt۴x֡Gi䅼del!H #u[u?Go˻>^bi=9ֹxvV5`ǫ}׶9"YDH}һnt rz{g5-Ɵiu>\FJ2bYm 1j:=ͽM ;6H F82qӵhm-CEMcik+Ȫ#9`ے;o/9:zn\vP}^o/M 089g8 }גp#a%OV$Eo0t;JsQe#Bf?h_ț~Dh_ț~DhFF" sț~'.mm6.h:B4٩)'R|?KZc QEQ!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP焿'/q?a\'/q?aYKshlQEIaEPEPEPEPil;2Y"m*I?ZmYg f%icEbrYNI<9+FγҖU. +lJ9|4taaV(2؍c("A[6U܋dqA0 ׮]xwJ֥MFf1[s)ǡ*FG֭V,0D6/A'߽OEW vMmwyyW)ܪyl̚jb3O *5".JAlr֤xnFpJ/9PY} <B"_ȃxC~(} <B"_ȃxC~(} `{<@b4"_7RF.Dk8 W'*\8UU4@c!dɤg|QjM%:DI*#ݳWv=)IʄSZdaF@Е`KdCmMsW5ebȎo6hͿ裙":Hmo6kf?!go&HmN9r#Ϳ?!go&:(aȎo6hͿ裙":Hmo6ko#Ѭ 2;pLn'9 ?4CmMMqyĢeNc_نO^T"]/J->Xǵ.3haȋG$6mҵ~%fHK˞lH.LaW|coO⣙"o6hͿA}5[Tgb]QY:>s(;Q#,A7`'E9CmM\s0GY ?4CmMrtQÑg$6m ?5G3DuG$6m'E9CmM\s0GY ?4CmMrtQÑť-m^hm,ϧF^{+Ƀ2ʑ{Ԟ5Ђ 9Y6N;bjֶW } n9g$hiwv<}~Mki "=ֆZg?vƏݿ_4Soݿ_ojoݿ_ojoݿ_ojoݿ_ojoݿ_oj5m: FFPLDeP3kE)5/ \OVRh%?ƹm;D7CM"aKܜ)+\g=뼮N5MtZ)<ԉ8OnsRYɧY*hm0RG ͧ"$gd̊}ivkiV'푌=s[ƺ8' n[€4l. LQJPFY 9=pŸ!_8ƖC*4{T ڪiMu#bXYRO۷{TZ.#[hbCC#sw3_Im G4#p}Gwq2*+)iVnOtF宦kX;aY4R32 #풗Mhoe*̈bbK`I9hǫKyw x=|;-i?oJү;pw!袊(((+-A)ݑ.:cX^& cwt :~v̇֟/vxSN pd?w9^͍X|.<~4?u>g'ϙ5bϙ4y_X+_eI5bqvX1.u9̑m˸7)in+?sO܎XVd.HI+c+u_ ۨWMG"o_ ܬۭj܁<Ie_Et;ƖŃ7@Jγw8GE{$F2pʦI9#_O24rw(WM[>Uw(WM[P"o_ ?Ufٰ[qfWSdџ~IIĭ-J tOӊw"o_ ϲvi*=:zL%OEt;+u)a+u]7nQ@w(WM[P"o_ ?VEt;Ea+u]7nQ@w(WM[P"o_ ?VEt;Ea+u]7nQ@w*+Y'8ttq] TɿOP(9Š(((((( N_%¸ N_%²(Š((((((((> +n{CbPÃr1(hb O??*5"3\Hms3XI=ɫ:B5KEXu i#cq;Ag5ih,ZK)Q?{>\^V:z#g8)kS*3i'8=>MPK?ɿ ksXCEfLyY,ğRrjmN-f< gmQ6(p((((((s_ k?_ k6 (c[ƕjOcqԳF) 9#x,ԤtUdep&S2Wѵ[{8NgeIc$d \c#\ oGa{F\BG#(#8ßN_Oc$D{8ʘ9>]d\IhZosiRrmʂx&ӥA60>Y~F1)zp*ͮ 8y#>D.d9p3А2N!!MZB~_ѣϗzjo睧";OE\}\ܵϔB'~1*o睧";OEg޻1vfhNLӟӈذ/P)kXa=+n> '6 9%f sVUW-b#8l2 UOE3)92jM.Gr-.bR4l'L[+ iF]2F}zέGd,i`{do2pcEPrLjCq%Ŭ<(0 Ě֧qi$[-t*9-Z68UiG,?ܓKZc A[.Pe?렫Iug$򋝘OsHlY2pG<,A;_b&I?_RY*J >E)nS?b&I?_@QaޝU>']Mb&-U>']Mb&-U>']Mb&-U>']Mb&-U>']Mb&-U>']Mb&&i͖%Y@[,@Gj}O?>']M[}O?>']M[}O?>']M[}O?>']M[}O?>']M[}O?>']M[}O?>']M[}O?>']M[y7 >']M;WP' _&fEA%FLY9ivUk3ћ?N?Ό]t!AsŚ[!`Jd&~cM3j륚oBGTC*V5'8Ef"^Vz1}c?>34Pon[qq'ϳ3԰[E"L؀g*{_) cu*6?[Fo 3?[cu*T`9\V/xQJrd宾MK[Zl[6۫kIl =vg-a=VΙT0Ñ=-dAKilBK *V&!uK ( ( ( ( ( ( ( ( U`XBSNsudh $?ZDdY?~̧9hI$wԞcr̲*|>8H*KK%n߆a(OE/zK~_*_zK~_(d^ߗ EWd^ߗ I-r&;zU.gh.Sd>;59CcOKKu!Yԕv0t.!YAZB\B袊Š*s54CОW.|fo5Kl ~}+ݟgOuR:M-EΞPȎW$,r"k5<q !kus9ESdu 9ŠQHeH#REPGp; "De*3qf㛩c~?sRm-ʌ\:;R"I7H?9?ji}ż`yi3{W;8 MI6n 2sJϞI]zQEPNM29RT fEP]TvƁV$zW,}~<aH6>},yRddV?3h皕s,ڣ`=Yć(9'$?DѤmk☵ VDE,eu>Qud^`jIP1 n'8];שY5{ Iw c;v[H]p~'qwW"i'dEURWd dSduʮH̶o'ܺiAV4TE 0 =Q_I62^VTR=O%\T:_Ie,Hts}~﷽iT{KB0i'=%OGTƑ HQEQ)V8QEQEQETT=~3ۛ[q , CНUWf)pN뚵GLf;2JR\w;1NLQ_޴ {݋]=k; <^Qo-ے];I1 9*#~+?&ſ%[OZ#-H#Es}9+\nArˌ69 {V$E[)l?!ﹷ9z- 4?M}?4뎅02Q ӠӦGCG*F*ԔQEQEQEQEQEQEQEQExx>,m~wϥt\-8dmo.aa9Zje*2dovߛQmGE9'睷}y~mQG*vIm5o89E9%̓L38>Z}SJnt.!YAZB\B5ź(_i(:z,e @ObFZӫVggqoɬ>D.oGicd T}tTQZc,FAiSŎO%PEPdI>kFkVI]ɀ=kޞBz_ʳ[fMjxvY5$#qٳm-ξt@0WD-QZzУlIP((]dVH"4p gҺ88B}I43Ňx/!JE׻&_QV* NH|=as}ٴpH$~Py^JlQG t 1K))5V9''vr4R#"!Pk_G-OPk_G-Lˢ+s(((*{_* j0$ ]ꫴ9'>k'P mR6uiY%3}Nҕ9lfH"aqy5Հ ڑQBh`>XW;#c>é.|@ L3C0=~=V$bU>S+ z"RHXՎ>kgJH<#P#4 >%v4袊(((( wG7d3*H\d_ZuW(\(g(84NnRHG.6671*K۬$n}}>/hO4$S%x20~\R!ذ a${ O4l?һyMO%#,1_gSZ%afM7[?ֿޏBZVIRK8 _Idz!3.(p(((*{_(j1Ρ鑟ZZ2 ?Xc|?EOOL>R?~_Vij͛SKJgjYQuK}^[Dq$ᛌ>P:}XzrHL;ֵ!6wVg` V';u:md 4vR<]=}6e3[T Jt\ 2S ])n8QEIAEPEPEPEP~t^xO8nqzf щ1q8+'Ҳ|EZ˔_[Ui/V '=hm&\V;GhW*zE ۘ>c9ٿLZxoN"E{S@?+"{r[kKd{%1@\%|9kVɮ5}@ kiic-~#w#/4O'V@?+V[Ӭݿ; Q+gj3>g>Yϥ_4V0+}}-`KVhvV[ߵ >g>¬E ?k}}-Y[o~([ߵ E @ -c끎kӴG0H { $c5]*$P",K&zZ[AFELҥR9]7LuMvvi[,'Ah?w$FBwR稩, .bۘ9b?2Fg=qUUE ܌c{ٓ~(̟K?Ty7?U'd߇ ?'?R7?UM~@ ?M~Lo"Bw2ٓ~(̟QNױA拨XnQ /^_ _ٓ~(̟Ii/+^[,! 9'Jl.vu[@Q3ݷyG򅳳cLѳR6_ԂSF.C9n1嚓2[מ9W٩/ h٩/ inB=A8*A6Z~鞻Ӛf  *{'q?6#_>k€ݲDw~UmA-Y+ֺ8nm^V `U(.0[ڤtx-C/BH$׹_|sJqaVԏ>J|klDsdܰhMq<|?ׯHfILAso~݋Nv-'i_JWf4a}}O54@#u cSL ?.Wx#P7pdf :c"g&D7?p~U(F"R,IcԚZwz? jzZwz? hBf]Q[EPEPEPSPTPvąrǯ@x6w7H%Nw(}ooƣCMLkuW5O(VB,A[iDKfi'=+)X AhVGzp:?MK]ErЖRܨlQEIAEPEPEPEPEPEPEPEP\ό?M\ό?GrgEQEQEQEQE/|A]O!'BTO!YOshlFx}kJ<k5~֕y\TMEPEPEPEP]G=W?*:;fsFYpJ1?co`q{ 0*>u'إH˖p,y;?LRdqvU[).(2@!;jnŘI9 h(B2HiSF,,2' ՖR=EU!%6A9~;e}vȍzXv\dHq#2}^s4i)^rclJ Jmմ"{Pl w(Ctp EEp٧ Ie9##yxx2Y2;@@ gy/ .2qȨC^鞴6FgH( OνxKi ~f$94TmP'4Q@Aǻ=Aǻ!3.(p(((*{_(mY&C 0r~Aykɣ˷$-3o\$dx(+r;{JŝWFWL>Y(_1'8J<=ms]O8'WU~n5N>~Ujޏu cYÚO](i qo k_ßoQZslQEIAEPEPEPEPEPEPEPEP\ό?M\ό?GrgEQEQEQEQE/|A]O!'BTO!YOshlFx}kJ<k5~֕y\TMEPEPEPEP]G=W?*K\.Z$}wx*o. ?}8Z~%eZ@ 9> ( (TV1*nfa I;{U?ɿ YQo$v9goOjŎq{F162rk~+pQۻbn ORNUP(Q9\W/ qo k-ʆETUkBg.g*uO=EK O ,mё%TR2B6֝KcR (( {֮m&hU#`Y@IܤERӼJ#Uh{[b ׸@ҹ:vw‘2nd#ir;>J/oEomq"\E9 s0 F8|Keq`P,n5d'qvޜv)z,渎kYɶ$g!URAc5nk;䑟$1_ל泿F ^L{c1/9hjsm5ndڠ$81<"H.%ɷk*5n"n&FKQmt"7N=sT=2F[\ bi;2w1*1ӥ^Mj57-q_Op@<+/DƕIcoSH O5 8'y4/Jeimyyas+>ڒ]^]h {p1rO湟˟e?G_i \}2FgAUɞ=[o~([ߵ Bi$XycgkvUv0q5bM6H> nX8YKKvr>M'rmE ( (?렩 B_ B \O+)m iYǜfZҳ8?*ɨ(((ǡ}?1T*P ܗjTV(((s\U74r+r{$~7kv+y w/?9,$ >f ch''sF=qLkŎ6dd#( Ss177sA&U=)xBQU@ "ޣ8s{gYQgquYMG6nN={խ<%}\goL҄ 5]CWBIu7$Ҷ͸Kau^k_sUc;v>?ZjveTZ\9Gm9ms=kԨ3WPSj #YiF͋i>\s߯zO{"Y5)Gl,;pN}8OK{D=qAR,BEÍXP@_ew~vgʋDnh=?T:m4ڌ; 3VvqZvnz%?QQoagj9V8…b1Pani[8upb8"Hv''RPEPEPEPEPEP\ό?M\ό?GrgEQEQEQEQE/|A]O!'BTO!YOshlFx}kJ<k5~֕y\TMEPEPEPEP]G=W?*^Vꦟ%eZ@Q@Q@Q@W Պ?ɿ oacJ&DPOAՋJmc+3)j:xƅ)G%'a.N qJҍb(W JCw"+B0  ! 'w@ 8WnKqF8> nFz>LKw̦&ߴ A-! ]/ 7`QF?7'$%F! ќ]zMY).?:<}F!,jQb}B%3jI#)V@$2p0<@ k=% k=% tQEnsQ@Q@Q@Ok_AS@!N eqکZ4 UdO>犳%͔d#U$$ȭ6 \fkQ哖.yTeR~Q*8-tA+Ce[’ r^U=22O8Ēpu9洵$k/?&ſ%MK]EtsQRPQEQEQEQEQEQEQEQEW3sW3sQܙs4QEj`QEQEQEQE ASA?Ѕ@t=VSZҳ8?*_>gp5U%QEQEQEQEWQCbUG=@/*պVEPEPEPU75bDžrohiCwH_SMc}M:_7!J2;4'i墼JA;F0; Q%Lf]|Nyԯ1ew7H(ằ=N O?{&#)qSm0C.668PsӞRIt>U v 6O!vi-aD/'?TZ@na9rx_0c#`c>ֿޏBZֿޏBZEV8QEQEQETvH:4Pޟ_ΩQJùs1߹wcj]X.t~`ڛ`S\'/q?aYsXlQEIaEPEPEPEPEPEPEPEP\ό?M\ό?GrgEQEQEQEQE/|A]O!'BTO!YOshlFx}kJ<k5~֕y\TMEPEPEPEP]G=W?*^Vꦟ%eZ@Q@Q@Q@W Պ?ɿ o5UGfen{ lgj$2\\fg_zIPIg.?Oe*b}/\;ĖR1o-FG'U,t4,bRBcd|Fɰ3$d RC52u y@m'ϢY[h] -lh[Y~Rsd’8n`m5d[Fm0?]5s>0?Uɞ3EVEPEPEPEPt=T ASA?Ѕe=͡+?ZVs_RY5Q@Q@Q@Q@u?*_{O[ܗjQEQEQE^<.#V*x\&F3+V 5l[|=wKo:}*mjkZX%lL!P@q __1,m> +fFH_$V!g $&yC SҞr*! ,}r:\$>c*@F'HѸ)Qӯ>)Nv\#wqsSiqXJ܃Jn[$cn:jѬEG^:c5Li IF\>OJKkX1MgkQLAEPEPEP焿'/q?a\'/q?aYKshlq- PkHsf+=Zܢ2J[xehOcqU4m:m  Y8s3ҭ0p[[ Rd3FAtV׶ }!%c~VR8pDZc֍ WH۞Glw r4,] !BG.7.27ѲɇOS+ˆR00O=xȣSW:/6/Ə6/ƹ߳r:/6/Ə6/ƹ߳r:/6/Ə6/ƹ߳A{BJ((((((('BZ+'BZ+)nm (,((((((((+Z(c+S(((((((((((((((((((((((((((((s_ k[C`*K ( ( ( (? endstream endobj 78 0 obj <> endobj 79 0 obj <> endobj 83 0 obj <> endobj 87 0 obj <>/Length 2843>>stream xŘypwuF-[ | B8fڤSh' d8С 4Mi'N9?B!$L Co&ȇ,[lJڣݷZɎI w;g)no2v|=<#~qsˎILՉ<w~Eԁ@hjjprKKly,#;羼T]]c4MJq er޳z~T p驳}"C\~qV$;o_ye}$gɐQ)J0oRUxggL&ۺuy1j(`];Yed|x'_ieXT,pe`v[[::v#sYKǴ 8> ڵ-~G׭[k;ђPA3 (ܙRnF5:y&sC{=nP]+эTߐ w4oJ(B$ń!X60XOTeb?E9}vn޷'3 &Si7Wiht͚Csq<h/^~*fT'H@;=!jCR_W,݀a88>9J{#D , Xɝ]oss˵W (YqP]nrpKtaM-li3famE!e͊W閼ح7;z\IT$ Rt(!ܵzk'1[Xm}d:d0 Ĉ!O%RK9 we%J~V4z;#MF s$Ѳp9*'׽=b"Ni8Ip ?uX #CƩIB &a%{@ g~E@ÃV+xꋧ{"B#7`l`s)^4wʗZ: ׆;YIa]J :LW fWcGnY=_}u۹ *"rAp ;f/U}Lc0M'@ϰ3'Ćvjw;UkxɨDavYqduGڮ0A(zTqЯ7W-}a߾*ɬ aw'ZP"Dp-#bh.v0ztlmm ʔQ$<O@3%6j4>M)TKLr$`G pE {  )~XxmdWtDQ's(\PF{ywwony jD3?% ټa* ǹfj 4,U Tպ_Gq4o,*$"%Za(Zr f'՗.[6PY~9EKlҍFBRf8_hbwSacBv‗`(ld b[\9F5Ά3#4=V bfzÏw ͕6˨2$/׸Lľt =#Ĥ mوUg"ɗN|Ģc5F&{<mu:4 k)}.R&Be=* fQKH6dsyCV"$JbmKK%"0c-\_sV8z RKE"E8;DoxПW(\8qWq@HGϘ>yET*BTXP4kfB]FZ|3OHs_91TJep ~ohγmbiӦeggO2%==]TNi <3J_Z"P]a~Kh`=H:$B).0̒Ja7OT'T,WEѣ)Q!;1$|GUdɊphx@xc,Tuˏ8B&AK ]ڀܑK* }XILI]RW8]Ӂ;$Ah?znvS\pb>n0vEXr,րAμKj5rP&x$PiR sp!PN &V*MbJZJjj*D `McIT,}$v+{ PAU6uάE3!Z!}ǝ/jb|$ 9Or+Ƞ(q]E*PTA1C%hF/r"'r_ ARpqfff~~>RAHVh:WP!2V"F,hݴ<(o<PflAjl[$ (z'&@ԂE T`dc*ł!hȐ̅g/\R5P JTy(坃(_ SRRªT*\4P(OP$ڀ$Pٞ*0 *H endstream endobj 88 0 obj <>/Length 2941>>stream xyPWgz.ʥ$1fwFFCnf+[ &&dI*e{*#31Ĩ aF䚣cf1&VOhuvIX,Aظrzn/3+W$M>4VtEQЁG2p )$+ipح&3}ۨ/XWbd2It:B0<txb]n$0nxiB( (@c7vNaDo{1oӿyh4]]]s̉  ]V-u])E`{ @ n ' FAqH._8?!25Sf-&%c遒s[TU` %g̕unNalKZvMNUi"1!%%.(+{o/2y!0OXLoN՟[܊ėOի_\]TEDH(U&''ͲXyq^ZԪWwVh g|]!?7sMuz╫Vvv]=^U?M %է9\(++Çew.^jew3Jm6)qDS}tj@U(07Ae׶}.ya^EPg_~g ҭҽƮgWX\?]/z"-W _6@|0Cu'ߜ*&Vh47kΝPk5  EG ٴsNβ7v| ˵gΝժ#r@i(<4K@{RE BTrȑlӦ /YhY115JFd .}vF8:vCdo| t: %-aʊn1vuQ_oK*#{2s#Bf$iXjir511ԥaeUEB xp(g(‡"?; pq\96P !Je_S&]OُƄ:w؄r=ܬ2`ub8`-7(6l2`(wűڡEf])eU1dzfsE<+P`ޕLP2`06[14I#[L{=Be;?0Y>n0P(0na$rS#qlS 3lD@d⋿ 5:r {8ERNC*EGϗ| ";[l! .f7tр=K~= vvvE%,ݺw? 4dRL4W"<006ДD"&XW,S"J>\O~o Y9=.52f n]zDDtq|Ϟ!iJY-!EY`wFTWs\nB ^$\ A]b7tݺ /!/_W;p"h$N) R ֮^_VVzGFFj/ w ^oZVpRpPfGEEF}||DnU(%Z#CC:A8W6o^B=㢃C׾?_ψإ G,%l'%b DN'u==;FKJsK| * Ʈ~Y~A{gBa{2__ߤ6G% `MfBMô6ilb`0FeRq8q@ܸ5kݫ QhEܹsˎiNQadk`0Xb33sCBB~/=D9 endstream endobj 89 0 obj <>/Length 3846>>stream xyTTWk_ e)YC1'5"gz jw&MLtdL P.bQP*b^z|=}2g毾B֭{]n, 6FqØ?hppptt`00Lj6%8ā\)ɉNA]NAQH0[Q; f&Uo?,-qh4†Qu:l6;<< 1fjY,|M7|0#\. pn‰:jd>ܽO~HV.]422_b~J.ˠu 7\$ _`B9™aE]>c2+F춺6 F3^JJJzk͚]xK0tkB`.`E C6l13`I.  oTU߻qC:/@yyyBbA5p8gDvNh2 :̌RaI+dfd!jK0 zw5^.lhn9hrɤ3abhM?~u5"Ƽ5/ӽ`Ok殝wk.+Z"TށN??~CWg;,69 /0#rJo#=@gN;#V9QB? fC7K, t3[xsy,}ӻ0Y<wn)䕭m"z{ށrr͆Ç]]Ο E\IOG$qy`ZZXwT,KrؾT3S8FpjhZhn y#ϖp%D>%ᒐ6O!>Ewa"c?s82dw}ve7]lim NzyQ[3o^)174?(=<ީVAAKdq>2qdji)JߵeE[[P$bFˁ7KQZ<|'$oIstNƢase7x#99 LldD[[[$**uk權`W5nD0BJ@6nQ@9ͲBͺTOSlقa8sΞ=+E^8K(ZYhx,‘k{?,,l!FPY~AA%GQAP}g~+ 4.5m6x yq_샇=pyΞ)LonS(*v>I X?wvkLLb !22qp=c^UjG@ktsΕI;w:QjSQ!"8-jjc8P[$ LWOhE r^H9v;{GDm]q}ˢ7;;UT=y rY ˮ.ڳlb~i]܍?-"I~x,==өj 9 7%ݻH2U:<2a6WoXc?P_Ncp^rЀ|~bRґ#o߾//j|sg+W*uhßkZΜ_Ο?p}w}9xE~{]~X,h= 1dž-aWkpY{׭[R Jړ-: @zo@d^dB?i! H$ !^xnݺqRPe|6ߟ=XjB=)~}9_&qPɓ3`؆ 756>0[,ky=הXY$ŻqLB/2['g^:J5u}@d>ЉԴnzNwvbr=Q@ JJY*+k6UP[_19}$7oںu2IR R}m۲zz&' JMjԏ{UQz!`q.+˫ee۬ /SAa6mڴv`|pݺUdZ l٥RG&<@- ML=^B"/𦲜5fϲl:da0#)""t:FFFT*UOxv@87/o<@ݝJYlhGYP VJ07Сjpʨ _̄aC >BPNfA E * igCgУ!9u$Y)?)eX32j9~"+t^IuNh{.c]U2*^x (.USd?P @ C_\e2>9j]p!)!&bpaȔ1h@( EPfa#by0l͊ ;w zc܊ |`ؐZqRiXK7)J1Ƅ@yJC@(t:pH岘<E|@ Q~lJ΃3vX' A۷g@tsL&өSnqacVg lr7yQB0tz=ymϘ,7/CwX&?Ν;/>1T) O`R,Xi\YXo̚ft`0FaڡЁrE/ [^Vޞ 1|>G;zO %jiZ58-eˆ𰨨fc`@5<< ;;1@7oX6C%npW8F@<>D"1']'ffRr=KJٺ>OQG ]!0PII1$))0Tq-6N^L"Amvh֑I&B~BR,.-mGll`sNBj>6++/$$&?>/Length 1586>>stream xYHU]ǯeejhZ8@~F$NI"*>hR9fN  99TZwsswpg=Z_uԌ$@qqqfU*+.5Fw]zÇ2@PRRҥK" i=<~|^š̀͝a<>yϞ=߷o_uu^W,$~.b=V}}رc?d%W\}pGeNFFHȄ-q\ee!Y64Zh b'O w@#lfccÇ'Nxxx!quuueee˗p9CҶ;X\gOn~:\F"g:tLv Mhh阇Î9Utd~sHa<g>KWl昛s*b*lG~v/ꚟ_KKHWisq:6&uss3/MbG\$nxdNYF$oq0CxK0gii|$$jBB))|z61XZc(+++@C$166X PepP4$hDh D2!޽{_0˗/ 1/jGE>#J^^AFe_~ 3zT D/aW{2nЅ P?X"8.IҕHsP?mDBCC5Hj #C *P0 F%Ð]G bz.X5Cb98$D# 0hf(CÞ1@ 6հ#"k׮ݿ_лworr} i\S"_R6̝Uƻl[_\ M'=SB@Z91]o&0v,;Q;R)Az9}<=#DŽ~ۭ ccc{4}HD@K  J>ΣVnx$=LpA-=Z  xPIzj!?oHz%.PJm4Lj$M4ik? endstream endobj 91 0 obj <> endobj 92 0 obj <> endobj 96 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kk纂+lG1c$yQ֓$Vt/3Qy[nswR̻<%lnqw[UK J{Xʹ۽bBxU?v SxC׿ҳh"hҟy$_MS.iOq?^*̶hB7_p@eVĊHh!K`d~C=r \ H Uq9*;dXUUO@ڙS{KkEe:l. 5uxr7Fp8${g5)HT%V}J;tr ?#@=gUhgxUv ]6$sFZY@bFzqU϶t6~ahnŤpn7u89?)睧E?H!h(ˡF^t`b{ ggh67+c^wbEh3#iO7 7G#:,E{w3ύWQ@ έ>7 7G#:,E{w3ύWQ@ έ>7 7G#:,E{w3ύWQ@ έ>7 7G#:,E{14I$NrEP\G{ N +t1aщ~l1Eo&&ͧМq ez&=kg<%@p3߁@4S"&$XCO(((((((((((((og7A7SL3mݴ*9.m.t佚̼`Y©+Hv2b͵!$Osșl?.zF@=j+[dL6=s(WXu1Tc8;z|%\i> '1p nbϨ.;ZU<7n\:=+b ()]iݤыym2><?ZcAcҕ-/& aۢW5 [i%iB4P^};cVU1}>T6qgH_=8Ki?8H۴0FO^Mn ;k)\S2Hv#nw v%w0mP ͸Ǡjg`"+6|~ӌ6?8ju\jWM^T戓Id2u]FXDHKJQ(?j [ٺ?$ 7זtPG\ٟf987:|zGis|YyɌcx99=yك_k_<ͻqsӵg f;#خcjV6cXjPEPEPEPEPEP\]$l,]V@ wsQ@o|5[%34?!%~B;GZ Ь-%XEW>ѻZ4PEPEPEPEPEPEPEPEPEPEPEPEPEPEP5:}qd+g7 IЮ73E-7Fi(P8낹k2-tРfv8lBz+?GЯӭ^KgUp[̑Yd#99 ;-.?[}1//Pn`|s笾Y|ٳgNycE @ )h endstream endobj 97 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYX" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?'F9?g'ΐgxtkiIM2} um*4THU`(=X%f4N9OϹ^USt qry&GOt򛩎8?*\17o*t[h.EܫS`2zJ<3 ng΀3~MM*o.?wt3vg7T]h?K3?G#:gn6.3~MM*o.?wt3vg7T]h?K3?G#:gn6.3~MM*o.?wt3vg7T]h?K3?G#:gn6.3~MM*o.?wt3vg7T]h?K3?G#:gn6.3~MM*o.?wt3vg7T]h?K3?G#:gn6.3~MM*o.?wt3vg7T]h?K3?G#:gn6.2.oR$.@8<|xjZZ5f hҤFG呆 Ɉ#xIS_!31F`#1ڀ/}_ T]i3vggLo5>M֗#:gn6.Ftl]f_ T]i3vggLo5>M֗#:gn6.Ftl]f_ T]i3vggLo5>M֗#:gn6.Ftl]f_ T]i3vggLo5>M֗#:gn6.Ftl]f_ T]i3vggLo5>M֗#:gn6.Ftl]f_ T]i3vggLj4i6MEs|-!rFtAw~8  iR##rM~zKPKF# ;X^܁~a+ 1- $I^xIS_!31F`#1ںFtl]x``}L E{ò;;坎KI'PGYxE_>:Ӭ{<"_iEQEQEQEQEQEQEQEQEQEQEQEQEVf~/3KgDE@tQEQEQEQEQEQEQEQEQEQEQEQEfi舫N4DU@Q@fk~ZNfjZ]\,@ }w#o=@Ea6 _ ߬prL.8ӵnPEPEPEPEPEPEPEPEPEPEPEPEPY_?"*{tV7r1Jz'W/& GhZC*0pR(qϸ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TIecqw(c 2qSYVp>j~ {2 7+PEPEawR]W2Hfv|72ŒћL֒Kσ`Ԩ g@oXnY$?jOv9U~xQl|7|699 +?[\hEVC1B Fy"ֺZ#2@*H ֢ji3^]>a]qɷB xRܤ2,K<4Eem¥R{{%2G \bC ,5]Gsh^ȱס6lqEx?s,X-g=8נ((((((Ͼ9%&YaBNQi2^vk'6@p!8€4(Pk7f?]qM]F%7& ǯմfCHʑ2=<h_[u,тpB`}krRIufCNP͂Xޒ+.@ $zE#0U,$Veoy^Gʹ!7 1p$pO@Uh$HdHf9Sݱ E$,Sa4=VFyo-啔8DK# V((((٫+,2][ ~# =(flu(-5 ^}=#&gyjI}o%ԳFO5 x9$*- l\@f`80E֮[-6C?OU#8HmEVKO3Rdf:(smfBa1yy9zw7`+J w\/'N:,`[r(d"3c ?xq4ɬhfF|Wwa^siIh|n%LGU^vǑW$l#>\R0#bT 9t<ęUܛUARCa缀UdH0rdɭ hVEݼJ+nP͟߷Tu4vkX 9A,B }nIrqfups *<jZdzƓqa3$ UC:toEQEQEQEQEŪ\Mm# m!1ВaS{:[MrIȶ1IKIv2ݪcV–w 09#H%wϷl5 kgmp oL,juߐF}Qz~e{n"xPd2 0=hGvR\\Or$ a!T #vNiz7wϿ̆QY7g;@ǮzӴ[gh愭UV<>R@L:s+8`8Gd @A'Qtq>_nIf wI9Tu+{kckkkf]i8-N14`ȿnp@(ʋrG*8{?ڄV4{UgDLW+=~bxx..`fS3FsK2PK$Rm wj>3 {O"7DT>}.2ٛ\Is7`"1e}ϵnMڊ(,nnu{ [QtA10$ǩj迲>ڷmvgE6g-e|2ff[Wh ( (? endstream endobj 98 0 obj <> endobj 99 0 obj <> endobj 103 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY(C" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?fQ=ْ%LJIRO$$18]od{q띘7Ux#mZA|V桥\^j!mY.a@cr#GC@Kx5Vt6"d^Q*3kKl.8D M[wzgf3]VGk=k!,}w: j gдŐ c|?aP- ._:~jw-gj}'tEa ZV6]9PʙrskI$} CnĘgg(SCQ ._Xlc4G!N҈YiȐ|88[hk<6Ct'c,.!tuq@$ "Iu?Z?EnkoXͨT$KOsW8<3= m$C2ح9`i KS%kPKz+֬(,mWƻwQ*OUtM!KX.@#x|>ϧ`s]OֿG$ "Z,#hvs#${W׊<RWPEPEPEPEPEPEPEPEPEPEPEPEPEPF}HZT0%SyG5^,Mzddіn&$ۜgIZ36+$2qOG5^,MjYH ׈wB' sߧSqW-b b-8`T G5^,MjYj(y5{FTLyݴIk)S+k()sWu@V<_ן /G#?_&ZG5^,MjYjSgGƌ UA㯵r^ mT?~U-3 .k$6,\ s_?RԿ:Ӣ?/_.K :+3?RԿ:Ӣ?/_.K :+3?RԿ:ӦY'1 $y[׏³/_.K#D-Y\u W7k3CksY!S|IV-A"|ߴ/nxU7 c[(JŸJX' _t;On5f7OH? Vh t;On5f7OH? Vh tGgaV*vDpGQӭ\}qBZt>+)rGQ=h&RDVbl IFrN<{W׎:\)K32EaN1xϵz#99 f }I945&^9uK VV@TiVvW3.e(i IH0 '&vF^G]c- [}I4{sBJ a=fK7I$yl?vcv}YKhy$%m~ WG L\2ܪ=7,,x}wB#sԚחop%z6' 27tAlmH&`qV/omfbp SP\Z.aS<\oc6>Z$Dfn)]ǯaM}f-!$ģm'ndP$Z ;?OH*0[ J+:=j[Sq", 㪔 œńv=gsdd+dhu1o#+F8zgDYa ݈`CnOHBmNK=jtfH$lGEqKu`iH1v |Z>լl?Vd-E ?bEhEfۻ#<㌎ڵ hV@AX8du1< ڄ+,qpJb} j??6Z5~ xSg8I@j??6Z5Ef}X Ək֝ca>լl?ZtPgڵ hV@AiKKƸ`p UFqOzhDkjHBى)oֻ$Hby%uHfcu$,7(Ҟf98ēm )=2:'0>s'l|%w~[F͝VZIfdg|!Nх85j(+PSm)kԺ)r8e\cٽq(epƶvc%>Bዪ0r=* tx-ۭť.gČG~ҭn{n>eP"$Z.9} KF -oy%lIY[p$8#wNEQ-f\rcf]c$@ 95Z.hŖܶ _uk^Ѯkiװ1 cٵ88'=xtqTBJZ <޶hzB2j7ki?l\4d(^q}j߈t5KKu#.bekQ@SPwm?k+4n6 G ݎ0*8t˟As3B%k]JIUCDs';qKek AN y&pSåز{<\ k@hڍoSI9Nd2RYFr6zS7PEbqk{-Uٷ+:x(t+<j1_B4]^<W]P9q[P3:еafh`;_@C,}'όČWZ`_|d.Cj gls رOX(Ḻy[1q#p1Ӏ:s\Jlis 4X'J!Auutp4 k )pGS3? EرOX(NŏzG,?%Ӣ?c+Q _"4X'JbA=cW :m}"BK1b3JŏzG,?%̲ޟc%dYc Q .1M ;?hwyn&W MG~EPEPEPEPEPEPEPEPEPEPEPEPEP"!OxX, M0X\[[HŌg+j *(!1"C8!GZB I*I dn/Į+s?CQ]H5mx 8ϙqYme+jcD mHg۟uiV-beF] ޝ 1$7FD=$cGsZ4!`U`$  0b]w;b/o'hDOtPh{I}>75'&FRٖ+,Abpz#=)[l4O:IT*`zG@ y(һ!yRČ뱮(۠?5EPEPEPEPEPEPEPEPEPEPEPEPEP 0Ny1<`.3ٯGj2.CJ-PTK4]L8̏Єe @{?7F{?7Q.CrA#N)/fO#֭F Tݕszvk奔6k奔"$"@П<̱$L8'סzAp1Ǹހ^}Mѳ^}M6h"nljTY g8 o&o& ͚o&o& ͚o&o&ꥄ7A®t8*I~R/NJF[s!'Mw(߽wtFZ(((((((((((((]6Id*M-d1)GuѴsI.e6PJ (72pN@O[7G,m8ԗvq^aapi"vJe=GI\AYEϘdtm#c+^ID zWޑe<`Fzǧ*#?|M-KĨ.gB lAҦ$a#P=G7G#? :+3|M>&N{Gt=πӦĢ|g۞71$̚{GttM4r(u>| FQָ+K +hD<ś͑73һ(((((((((((((?fxUxi l(sIܱ f21 kI@}cڀ)KO 2HG'%8>F{<9^?>mG? a2d(fi?Q'jӢ?>mG? N֓X6 :+3ZOkI@}cڀ4LCog:K)Q՜ǔ0: *? ֓q.#L qPooH=>̊Y'=pG\̗~*["< $hkq<猞̽Tx  Z}϶:%}댎: 56X˸&2{8:NN>;oc⏴(p9MZT;-P[˸VBp$cjYZOjY#ӯi#vzd}=GAi]I,f֨,YTɣ-MI8#qm|<qW05ևx- j#Gui= aIRzP[ ]F$Fs {)gOxVB62'85դ6/%& 8G # q$C zʀ5dyjsUVDeMd.8 /ca^Q< c5p]I< u퀖S$`H# 㞽hk %F.+Fl/w AۙPϦg>ت3PNUޢ6@z %ƛ$;nk<`HɜFWPmV(iYQn82_ۙV0ϸYO 1ym . +O>rO#ӊ|֓5r:1Wd d(B(2_:үV4Zih֫w U k˥͖l7.mEgsmT?&<H?"SöZt䙦S 8^mV[!h'  ?W?;GφƫNug4{1;Hՙ"H v8Һ:(O|?y{qn!,z$@{c GA:g{ h@Y 騠{QH"󆡷e/99{R/9ԋ[#ifC= ~dw*Cs PK@Td ӣjۤ;Z 'mnzm%ǮE=וe{bꌀGldc?슎 47yw0|i>=OTN2$i1n;Sfit=cK$g a}&ql1|puM?~on_Z;On4gi ?&*tL-ϘuU4t;On46?oWhѱK7OH? @ c?Ə4t;On46?oWhѱK7OH? @ź4ricGһZ,bD wQEQEQEQEQEQEQEQEQEQEQEQEQExrDKX$(p*mgIo G@ʜZdCWk9lZ4[Tknp7 Ls>q8ST[ Y6V~լl?Gڵ hͣ© VL&5\A8&Ǜ~dc2|덝>Voj??6Z4Ef}X Əkca>լl?@tVgڵ hV@Ai=ƟgH<8vj??6C.opš50;#n(k\E"9 f&=Zh(((((((((((((3-"G?A5sG< u휕Q ` '玝*ƳiE =jV+k{%C CtF_j;褆UWy/ de UtN[bkh>`$n$0< :6XMʴGFP `zSh6Lo@pG==S#n(k\QAzk(((((((((((((t$}KTVhc;cWl(ŏzNYETȂ:PL`v رOX(ŏzML|8>G6fg?/N8 M m\a1?M _"X'JԺf&zم |cU[F5[#Xjcv> endobj 105 0 obj <> endobj 109 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYV" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Ӊ^ߡQ|_5deq;IΓNÁz? ֿ/Kk_?%ƺ-bx][Sm@RQ??_/9^Ex :K}E(\)憎{E/s|g%| I9i=0z ;Bo$hhG(v' zV/#:,Ez=?ҩ?-mϝ!L͟w<gV[|no"+Y4nw18j-MerAapqp%Pέ>7 7G#:,EzJ5x<;mn%EՓ0vp<-?tϥH7SV0^cKei$3Mqs2q(T,P2{HKy}ZwiAmoy?-Z#[[t}O kn;z+<-?gފ>' O7Gi--R2ZI%;ܹ2ƸAmoy?-Zxg7Z:2lxXU 5%uO\w?ow(YIdͦ7FE69|)涃ef![;TcH9G?1P-1312ēnj3O³jGSZwm`)VȈNqA?w߭;w(?@<96;d>w> ?cH9@(cH9G?1PK7O?@V,+4ڷ<UklH<8m߼QTtҥX҄15F}?ȊkC= 2<:'8ܒlĭq;)%u&H# $sFj$٣$RqSOMsHE *@Vo?~to_@TVo?~to_@TVo?~to_@TVo?~to_@UWLY i*y0G^_J:?C~ ]\$2lf[g#j[$)Zo5<)z@3A;odMAO~34 F8#!z\yx戴mO88#КQa4ht;f BI-+< J&";aA'7 O>/ȷ "/ F*&XHp\rp]=P +|9S9on Ai7-IasI)swqpcc#P|dv:^$N=2✒YG!t?ho&FI#TwZ\̑F! X$rpxG_ҥ1\H$,Jv͏v8<:Qa4ht;fd,c8!9Wіy.GCzU6 <UFm=o΀.QU+*fǘ:IM?v(jK7U]E}7[K=29|DpFQA'5+\y;H>+OӦIxrhU$x"<϶@ GtҨIq+\܎%s,-zs4hS\"EI :~ "H.IS\8=?w?/h]K}ޔ٭@s?fĿ٫/ >s?fĿ٥kgFbaڀ4}~%3oJ<~%EJR7x8={dc4-*++U,K,tܪvax@uiVvVάK@:vC_Jx$|Gn 3gi?Hֶ*2t?sɆf%W=GT;NG^hcv4}Eh?*aw<Հ>VPcv4}EԪr39#Zv?/&;OHv?/&;OHv?/& u>qSdL @@ KvAHӛ냅\*pY [7`(`(t/M~~j(ğOI֢vG'=PZ#E}}E!_E6 \Eq%Ku+ X8VctSް?69Emm>rBM_QE KUr' ?69Emm>rBM_QE[ϜУkoQ@&/(|P } ?69Emm>rBIq$34Q@ endstream endobj 110 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYVt" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?5k]Y,R PAg3DI$u'hex"c*GPF hM%L?UK^-K< ! MdXjZmm=2Y@_j޴(?u@T2 xⅬ3*-7Mx4l_Hd\T{&iPMz+SAQ 6Oz(cmO֟G$ڟ? " I?ZEj޴(?Ǣ=yRd`yF4(85ApF CDd#M Ro>o"H89?zu6 !8?j J,c>R,`@O [ѯ G6֗OC vĪpB2"տf+.wVhs0qQm;n|#FN08#?տf(gV-D=9) wB' sߧSץ[;2~SJFuoY?տf+P7oقy1U]/Z-Iٲ H_>gV[|no"-gmѐbsOg H\=gV[|no"fk`Pb?@mέ>7 7G#:,EzM D ~,jPs d^'&Txa˂?+ԭ'x XFH,܀QZ>25;ZH"zd5RImƬxj x@ڋ0DŽ[ F''A5읅̠:LLRE(Y"F$@=bH/Wiۛa@Aec8jauv.$dBq^yVyA_9Gد?3 (YI%I1Q]i-7Oj+ >yA_9@ 3Es3l!|{QTw?sۏơAbH/ U?^g$Q+ ESAbH/#_S|]E{pZ(G77h)ES-qiousSP;l,dW{WHj_5Mg<2E,4r)V`` 7w(ܡ] w8œׁUM{`αsrpx$q/NW +.>Dk7Y3 @)nfoL ȑv dǃzr4k|A6,q;lʖ$I<^f1abM<<}8oF9P:`?@/] TEY$ZH n p{~O ߴl hɍi+IG4?JXz؉pw @ Ȉ b]!y¼{rmb1ݽm8' XX4K0,4C2Y<N*x?J}Qeә$B! &A}R(/1)>`HѠ 4T?kG/P/?sZ)<^20e19Px,Rk ݙcbI@I$IJm,'?&(& If)Iwv?/&.N?MHag4Uʉ#f"%py c@?"h+2dž YTS{P_cv4}EP?cv4}EP?cv4}EP ib'N^q4k`+ij2!-\xcMlP ,k%A߲Ͻ257&,YD@U  Qmo>rB(|'&ۋ}\(kmo>rB(|[ϜТ?69G&/(M_Q } (kmo>rB(u5s2vQ@ endstream endobj 111 0 obj <> endobj 112 0 obj <> endobj 116 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( BnP 7KxBBHl uۃVL:\\1n,BW$L>p{3M͗Q9PLh$+rS;OJi5kV:\6WKoF5VхW;yWv5ƕƚiQ偓8O)睧E?H҇eA& $qx'Icec77un8Vl!*Pb3=8)睧E?He_\(!59gSV S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H).BK#dL>V+sqdciA`+4Uef4I josƸf827EhG0_%ѱ[Ҁ#~fOB=Z((((((((((((((5–#,LJ<:ֽMcFYZ"O"oQRJrA'D<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉@RBX5\n0y%K}MgsFM7F˟/[6#,7utQEQEQEQEQEQEQ\{,wu[ D@ fVF8 h~=Iդ?JlLJ(gy*kp{k{6*2BrG^x<(R}j3p;@)G,0x)Oton{ ـwdJ(^,/nc9Re|py{t?[mBbqn,SHp9@6(-Z[Yw&~I = S[0Qr#8 V|;3g <<}j)u-ˉT U@8ns'5h3jpoL!]?>heî9-IfԦYv$8( 5g89kSXC!(vXtqP\,}#؞5˫\1[tn|p>4]-Qockd,+nr=ZǼ".V^ֲ /fcGoĊQ$PDˇok9L4%^j&>p6#]$z\%$W-$]ٝ1S@?2?”d*Μt(N`((((((((((((((((((((((`98GC:( ( ( ( ( ( <wH[[Rx"[_pA: 76 ŹoJ+$)q$jm!rxLب!n- [;Hcm<硫ϑ4_#LasEG>[\I& !(P#<@#N|m |Ҳ9sk=;ZEf%^x#Zpk7 p1fǚFɞ0޵5m|d3$m.zeXUNkC~I$ Av!-򟝺MӴt-Lw*VEˈme;^XmemST34vmkvTPWy sUIlR2[e*)X2Kw3(4eUP [; nd#{"RA$rNtڞr [Y2iT͂J񫏫Y%ضiXHߍh7\Z\10_RuY$c13|Nەr [o.%F,DmY[iszU4[Ԣ[~ |c 21ѵ=}a.1s?Z*jV>yom;|U7c2y*xII"uxVS |AƫjzuDU*C1qݽ mk@4}NT0YS,N2ѓyq@=rל?wACUjW wnY??]ӝn>`S[t~UE~X-n6Ñ{Sڝ"ʗG# /~d;DSדu4ގ2o˜ZZ$R}dΗ+&/ B.є@7 qpt]F8&2D6ݶswVf4)T0nxq[F9gSX(((((((((((((((((((((((`98GC:( ( ( ( ( ( ȹ]Z0(p3 F7qꧦxz(L 0}Qǚ<_ CF9>$\} \§xV^]k.mv"O:N? Ӵ/zԢ2'=HZ;EnƢLijeXϖ$ X[9~5r.\)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq:\NLo ~ڷk|wZ?luY lr@9o+N O@(ZwZߕ ?+rυ_+N O@*mFX?o*ӿTVc}>ѣ61S HxqqYiil ƹfct<?#Od ׼jfA20}G8 tE[iF@$pH8WH=9}Ttܬb+rScy˜qnM0o^-G3ϯ=(Ya } \>I3>pɿ9T[l۱ޘ隚;d@i@E2Ƞ ;M檬JP'499]r -V/!8l?v(j*_أv(j*_أv(j*_أv(j*_أv(j*_أv(j*_أv(j*_أv(j*_أv(j^EtB'/Sl%D.g(/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5/Qo5MyUDLr~h2^sqPWEPEPEPEPEPEPEPEPEPEPEPEPEPEP\#,-uuk2^pr&sZ\sFFIu5g+N OP뤟,֕SӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_f=>an%V/[ߵ3+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®v'{ /orkºm #/cXwehH{ӿQυ_P?;|-?ZwZߕ E:8"$E :/aRh2^sqPth2^sqPWEPEPEPEPEPEPEPEPEPEPEPEPEPEP\#,-uuk2^pr>!}'IiVn!}'IiPEPEPGbI]5ʖ'뚻)c9/! c^]-Ɠz#nKx'[i^T/Yn-#b7H7mU3V+XHb6">&QEQEQEQEQEK3QܚkȱC=$A5m^Y/g} ]5mN0Lŝ銖+s((((+{BG?!X5ǛCiKFI);{]<,POq+ V<kuMzVԷ䳨@~]-Qoc+2}Q^`j<&A͗/,lJI}>;?p?)lqc#gޢS5+^N./fSl/w3ēi^7Ig'{7$Y۫1?xO>3ߛVjN GS-hb Ҽ͜|dU1o\5fEQE3ǜ_ѣyCǜ_ѣy@]Q@OY^jҘ停PO0cQ^wYnHBPf9ܣڢfp$}YS n7gb#%UbJ ~bɏZ+/>EFHQNgbMV;xs2IDccɷwoJEg˭i-5~ҬFc 7:5judA   ((((((((+?e宮McFYZ?/I?Y*?/I?Y*((+oeWt"O7?OSuuk> /*'%vDYI4Յˏ-MEf.cc$QmPY@Mj:MC<7 qWi#+s(*hI+Lg/Wcxqj(((? y}2sCo_`{We\αx}$Q7$qo,u8Xխ @՝oh:UwNUAžfu15kEQ[EPUtDҬ˻Bnz}=Z ( ( Bk{C7 77˿}ƅ#a ۻIi ٽԳM-L-M-Xlqj,^w"lgɉӀ5sw'm x~LQLU?*&c s?ko_ŷC{|-X`V`#|u˪,-#K60N|8sqEfyijZiڡKL9Qip嶮N68Fխ^Hx%-R}.ti̮qg6{ _pr 3.㴟\9׽nPy"RשuS.p!XʸdzzZMt6VvYr]ʞ'^xE]Gmq\d.2pkj=B[;Y\1'ЮĶv@nfX$#@#5~{}A崽H~IBeo,<>l_j!+)Kܼ3| +g'+R !}'IiVn!}'IiPEPEP\FG$~kapX3pQ/hĘ/ CޔP+F$!dZسa 렵6hPN}ߑ8)*H*m:R&U,P}H* "xX u!O3 ( ( ( ( ( ( S?H.7tړ\#r<ԟZ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@rל?)?y@'5Yz]%m$pWW}(j*̚aTI,pg: m`} h/Z<jY۳=d {xA?]7 粲K {;0]I'*t60 28Zi M.eM K.ws~aD$@Ԏ:}*_] O7Gۮ照? n'FtJrT}L yw9O?pqlŊnn*ۮ照?;Hќqsgw|1zʊ+fl}I~w<-?!iQYnn] O7@TVoۮ照?iutEfxZC>w<-?!iQYnn] O7@.ك ϖ)\\BVH^dņw `q3槂QVօN '>{=FKmbW9JyNJ<X#t,ҳI28۹G9Զ񦨳hY- =n c _O;O€2y#)UϜVٔ[ox.6cwc?ҵW}(_;igmK8ϽY|W}(_; |W}(_; |W}(_; |W}(_; |W}(_; Uh3k7guTԣ+4HfVdMUpNi\kR(RsEƹsIC}X2؀hƺuٶ$3gyU8# 5;[noK )820ByU.5˘Md|R}?1mۭe\/4$n~4b,FJcWi^#>by^*/GC? tkU]N{ 5,3sc8*9#< .c< q!f1ݐw`)~iEo4 _"-Z_i?ڶr@eGlz)`t綖q~2pSҟsO(bs\cͦÇ= gq|T~V>5Ͼ!MQT[I7r.y]-?לU Hc3 H H;T?לTEQEQEQEQEQEQEQEQEQEQEQEQEQEW)?y]]rל?'z|7jyyO_x՛0zD7E+TN~fCƀ0/5*)Q^[ny$&&a|ԲCs)8jjwa$x*ĺkdbBŸ.I^:]J[ ]5c]'=Rv3Fq-i\G"+QSo~PTes?f(,EAEOY>7?Q@QSo~PTes?f(,EAEOY>7?Q@QSo~PW'rۉ$3 w`A$GCƀ4߷j4}PD? *+7ڇ%n?/hJv@G۵KҢ~ݨ"_Cƀ4߷j4}PD? *+7ڇ%n?/hJj2ٵ5-^{?n?/hv@@TVo۵K>ݨ"_CƏj4EfPD?ڇ%iQYn?/hv@@TVo۵K>ݨ"_CƏj4PǜͿSv@LP#ɔoR#@??לUZ'@QHk "Vt`98((((((((((((((SXC5g89h^<GjJ"uFOCP}|?okFOXqY ?›4:lochmЩb' oz?#&h4du:d,̑`MNx8h1& ;, '{Y Ooz?#)tԔ+i1*.s=z(fvјM*^FOG?oSӿQυ_ kF?;|-?ZwZߕ OG?oSӿQυ_ kF?;|-?ZwZߕ OG?oSӿUk[; ĦfWJ­W>OG?ocjmrY첶\%Nyʡ%߄ ף[7^㲳iP+L]Ҵ=?]2dԮ)bĞGzbX?o'D:4h yyݹ9kDB7N舃#1 g=~o ף[7^ҴLwi tCa IH##9lh7U^EPV3''RpSOG?oX:Dml[1;ٻ* 㒪2FO'q/G>KŷRy@E O,F #שF\,cE_)dǼNNO(qK ͘6]qg6{)\ "N~dkFՋM\'1AMɀAurF=w_ ]ˌdo\d+[7^oz_ ]ˌdo\d_ ]ˌdo\d+[7^oz_ ]ˌdo\f }G\ע ^n ?#׬_IlƐ۰7 CpOP9;-?'P?o^ZZ --HA 8 _Y[il@2I\qבף[7^"p+m|_Sǧ < ,;t#< ף[7^l" XKY)du0zwUmdEd gˑMߎ9 ף[7^J.P$h ?MocΤ*#c4OG?oSӿU+Q3*)#GglkFOY3[ptcXm=siRMHJMM =GA@kFd:|G E7; N5 Gy"ҢK6c1=:P?oB]iQM1*zn$jchD+?_7 rd۷ ]FX?o*8"$E :/aRh2^sqPWEPEPEPEPEPEPEPEPEPEPEPEPEPEP\#,-uuk2^pr&! 7[Tu&! 7[Tt$?x:OoӴ`P_pw]CeĞicbpzVrdyG._WErdyG._WErdyG._WErdyImiskna Y9;==[JgE H1s'$RXff#?WE/WvE=s$?x:s'koAmNc Btǧ,XB?7Lv cؒW<<tEeZ0[K0\-G9?/\YԬVI3Z+\8Fq.dc/bHrzg1Lח;D>q0;;qqZٺd[woni[s?su-ྚx/JE+?;* tȏ~\}-{Kh+ v<njFinB#mK8جFsե&;p$6, \#Я]ukUkv"] [W,LҰ'P:]˜'吡S GrFO?Z/3,g7l巇gQ 2r˕g[7o='i:3*AE_,Vk'˟0mgyFӁuܹmbwfWsDysQ@ k+2˜'=7tWˑݙ_q`s+=Et-X.s~_.kipbYdbF@PÌ tCӯriku6ks3#$oW'}}1n0^2!f(Rs٢'A냝F?!{PP7y?ZsipL#O v<€?N1@o7wQZi1ZN[L"$[*2J$6)7lg1mH۷q(G5{g󼝸;8;hS"t+ n~cǷSEy% ŵpO zzz(-lO&$0Z=NG cZ0İAIFW)PqGKF#,7 qGKF#,7utQEQEQEQEQEQEQEQEQEQEQEQEQEQEk2^prW\#,-bjޗEGRjޗEG@C?*iQΗCDyVV$?x:ElMsnkl,`q.s 8Nry5bK6[p i#+i#;V]:jNRDf%I$BN1MIňܸ.$(t(Uw[|ْwt۴x֬m[r_`@VܗGշ% m!4m[r_`@VܗGշ% m!4լG bXP2OS׭a@cMɟ;cUOevo%U !]Ys'-+G+!UH$?x: <5-B#H@ͧ[2$ɑ.s֞ *bKwA$ x̛2F1&nm\yww@Uw3H u3K#!ܨc:;vָJ46ny,Y~~řc!&]x'AzuH22Ngos;|28+_iZq7O5@yh.uk=/ x( ;+uV{Nc:v|®#hw8hRnj ˘o!70\+(l>mq[84,8ݒ:u<@E WXi $$ nGmvIvXxmITfyol@5Q@Q@Q@Q@Q@Q@Q@Q@Q@rל?)?y@4mQԚ4mQΏ kAZ?Y c^".QEQEQEQEQEQEQECSYe]EIUj֧7ͼ:vs<[UwPw'QΣH$%2%2eWpG^{cxe8Q;8Z[ M{]~ x(A}{r*ޥ{$R-71ebG ]f'hXD>閳E"Ipqi ETV6S5 L{A<EPEPEPEPQ[u VcӃȩj+c!hyKP/AS(׼DN#XB3ؠ[\ƫ:4_b$y#REuo;x`aYp[ͤI"cv#cSz&YgRCbpSҀ5bnQ@G}m?%f>nQ@4#DM΍*]Hx'f›ϗק}9th2^sqPǝφƫk֚dÕQq[joZ*(xWO{Cawq~HX[-b?x<-7a9x*?*EVvdX e7Iea#38q׵r "5㷲;ymLw'nSj}^H5 ֡l|̼"Y>U'$z }۵"FK$:)fiY<)rAb?M]=N%TʒH$H?pyҬ:.. t<* !?)ՒY!P,׶*T,㼊 Q<0OʞW((((((((((McFYZ?e M[Bo趨M[Bo趨HGugG5{άx@(((((((kSYe]EIUhHGu2]âi[c*aXGt>Ѡn#ݭҀ'k,r+\Ls)oOK]TrOOCD4X&; GnFah}a"XNݕ\ X@r]~ZTsFǦ@-6x$~>p ȭpg߱2Mo <[A@dld=*{9̸XUYd4vL]Lo^Ifd@] dLth2^sqPth2^sqPWEPEPmJObE?3Xp[\@$s7 k`:&Q@#CSlm/d eX2vT}j{M7׏tw3$b7Ja$QnnjQEQEQEQEQEQEQEQEQEQEW)?y]]rל?CMz_ICMz_IάxU]՝@?(Q@Q@Q@Q@Q@Q@Q@5?_ٿTVj,*IάxU]՝@?(Q@Q@Q@Q@Q@Q@Q@ y8 P/A@> hnHdq .IWÌp)^:[ i\G"\̒#e°8 ?{Yy?Z7 (($㌏C{P7m>4G|،=HRK v&BV O'R- C$-8#%Opr7{Zu-Ւ*d]d{SOpb8[y'`Č5 j1"itf01(7ɸ3D_Ery' ƥ9KY&K #+3=z%&eTKA 2z~js$r>6:du?Ae<6B<`vV&o?Z4`98o?Z4`98((((((((((((((SXC5g89hV-:V-:?Y c^"C?:??P( ( ( ( ( ( ((j,*ZYfRUZ?Y c^"C?:??P( ( ( ( ( ( (3uA^qT>!?_*!}{ךC7vܬ3GL"A'j^\yD1lN^VR/(WUJe-!~4> 7jW8X5חPy7+CR$}F ,Z$FЀwQIf.8VF@?HUGE!hдA@#йY"UwVHsE>;1Z6h˳<'w=6?hg6As$-+L`B'xt5K?i$-(yzI.(d,|}B}(%g ߛ;BLmϳL&)Z2$VʤgVʆ}1yCqZҹɁR1gvYsS*ix/ wѹ=lO&$0Z=NG cZ0İAIFW+>{˘XyѢ*;d{Uie3UmȤ=<Y(f8%GC8%GC:( ( ( ( ( ( ( ( ( ( ( ( ( ( 5g89kSXC15oiKڣ5oiKڣ !]՝@?*?x:E\(((((((7խOevo%U !]՝@?*?x:E\(((((((7P/AS(׼w[Dlw8V%N>׼7 0<ɣ,&q#?(ɰVyn%>dFfh zFs%kfG2˴ksc" EK$מjK9n'A컹(&'dw q[<Fc,_9AY~Rb< S KqݼG*RZJr+P;U#46#U0[ r8岂WVd bB{̒L*l L0 zc5n)xZI !b+̸Nl-! ]#NۺT7Y:A%Fܡ3@aK<]j2 x>ZrO>hYauY2&`>tt\- ,KH YQc'=T C&Qro@'CIӭnP:70>` f xIf,Oyh( <FX?o*<FX?o*袊(((((((((((((+?e宮McFYZտ!/jտ!/j$tVtX׼Ώ kAr((((((( /*JV?_ٿTV$tVtX׼Ώ kAr((((((( CB׼UOBCoy^'8biݶ jJx #TeVA䁏TG8Gzpz*I'(KFW%`Hʖt'8S"t2+Fd%!)cjђ% ," 89GK<#Ώ*kfZ3+).Tfe#@zp* ^u *¾ ?3vST,2F[h=zt|>c;7 V+VJ+S6s3Kyy>Ohcvz/Nt][%#!gijgw.@ U1g*)zn 2[$%]e9 U( <&.{.~i!@?JnK)!}.0xXM/'+>\~5,ȒZ2^9_7 r$7WFr :F&wO/͐ ժ(/he⡿/he((((((((((((((McFYZ?e M[Bo趨M[Bo趨HGugG5{άx@(((((((kSYe]EIUhHGugG5{άx@(((((((?!{PT y8 A'jè4jV%p&RY,0zK׼mF69ǿJxI)W\9 Ro$2GYfrI''Wb4 DIP1lq`QGg$qP%4ŎƋ!_8׭=lO&$0Z=NG c@QGpibX $#P/he⡿/he((((((((((((((McFYZ?e M[Bo趨M[Bo趨HGugG5{άx@(((((((kSYe]EIUhHGugG5{άx@(((((((?!{PT y8 A'jߙ&*,wr2*sy?ZOeovL"<pO4 2gPRK1,9Aqs>jȡ8$nc޵$4|IP2Gj8!_1䁼E(EL%Fd}3BRՍ1)hBx;KoV0G+Hf`AҞm!3yX6r@rR> 'Utu"Ta)vzY^?1k q9ۓӯS 0جL#>cVF4~QP/9BѼ@;Ҥ6^thJy8#.%xGf,᱓٢bTIW'*O@h{ie3UmȤ=!?_*!}{$sɫ,2Ċm2Ty^&1ܴ m<̨6A$=(-&6o*$ 8Gؙ֢˒=2+CviD.imu= \Nm,Lֱy.Z-G!?_*!}{>By$2m"r@<}~FA'kBK`Xf&b#6rgZ[[ɉW"H<0O8pF=*u[w|*FrI89ǧJD$y`y"q~3MRHfe n2y GO1q;Fǯ:DgxMˉqysom}rDGe!|?9瞇߃J+I$op3ېG5"^`ȭ3:qD׌ irlx_ErWtB<'@{;T+Z#qx9|'Ҷ'e̐?ZocIFnI#c8 je69sյ'm숪[ԁ֫DYgF $cVgdL# ((/he⡿/he((((((((((((((McFYZ?e M[Bo趨M[Bo趨HGugG5{άx@(((((((kSYe]EIUhHGugG5{άx@(((((((?!{PT y8 A'kfx ]V>epnzʎ:LSܼ-ɓ ,>d^f>ٞv̠OǦj[$0#+#I?xp뚝7-jmT '>}~n ۍҏygyLZW}+I3<S,2r2NFqҮGP K~'#tqO vn^.g{vZBِ pgڑ^cـ$w*K%B6g\4ϤڽĂGx r}JKXxŹ$b $ Gs+.A'kF%[wn,j?W!pH1p'gw_ⲵ mɲ"ᕢ|~ kxm.eVFv2R@>_O^L :u"āٜ8xSŔ>Aev`}`}g"f'G= #ۥUW̓k#-#F~PV6R2bNsa@]Ӵ< JXp:;I 2|X`Nzɵf-B>DU\3Ɍ!㱠 6MN&783Ndn$ vH8*8x̳Lp!l 8Dw23 ¼6g$zNdn$ vH8*PEPEPqGKF#,7 qGKF#,7utQEQEQEQEQEQEQEQEQEQEQEQEQEQEk2^prW\#,-bjޗEGRjޗEG@C?:??UhGugG5{EPEPEPEPEPEPEP Oevo%UZ/*J@C?:??UhGugG5{EPEPEPEPEPEPEPn!?_*?!{PP7y?[{ @5@\·6䄕 :qE+sm,HIP#-QEQE+mmIH '4[B@z sR@Q@Q@Q@7y]-?לT7y]-?לTEQEQEQEQEQEQEQEQEQEQEQEQEQEW)?y]]rל?CMz_ICMz_IάxU]՝@?(Q@Q@Q@Q@Q@Q@Q@5?_ٿTVj,*IάxU]՝@?(Q@Q@Q@Q@Q@Q@Q@ y8 P/A@> o?OQEQEQEQEQEQEQELth2^sqPth2^sqPWEPEPEPEPEPEPEPEPEPEPEPEPEPEP\#,-uukCYGCMz_i˧yGO BwnRcM / GugG5{0R"v@<]s;khA9H %?eyCPݗQ}C(*o(v_9G?/hP?r!eyCPݗQ}C(*o(v_9G?/ Oevo%U죝gYtŀ 9Rэ'-甿_v2]՝@?*豁X/;Ev@r @KCy@ EM}C(e 7?/ݗP4TP?r(v_9@SyCP<CEM}C(e 7?/ݗP4TP?r(v_9@ y8 ٖ)gI]g% ?G-甿_v0/y^iA,F9H {՟(v_9@SyCP<CEM}C(e 7?/ݗP4TP?r(v_9@SyCP<CEM}C(e 70p@#懐yeP?r8%GCC)pmfbZXGP?>hAX7dzl|4EQEQEQEQEQEQEQEQEQEQEQEQEQEWjH)BJm[|0uQ@i_*M4w|/EiH[ɻJ~E^i(M;x Q 'Ҋ((((((( endstream endobj 117 0 obj <> endobj 118 0 obj <> endobj 122 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ?ɿ^<.#@3!wH##Shb"?'sP$EfW()Cȥ&?BSU(e t4Յ(YkL2r)"pA՘n%1*4+(AAzzVFQLD'WTff8 ROa@e g4͝p3ҧS2#IrOEsE1q6X}"$ ٖpHq>TQEU{MXs\Usů&h%* pz]s :ԇִfQ$W`erV[2R@U}V!r|θܠ%)%Wܲu)$h#nVR]=rzu8i ۈ`'l C"(cccCkiB;;}IHW+?zC'UeSm"fǸwci= n DE^?:|1ŕ3ukjF,OѿDVh.n 򭧍3 *pFG#4JQ#8 F+ g,0K6f&n29]d|~n m11o,٫i7Gv8%*p0L0ncqow,vxLW9ud{U@p8$һ-m]/" `2p=PWSS8ԧd;Z"`s:cZծB&w JD+Q5iagev[Ta7}q֥f1I l7;Xwހ9.4;;[wV[KKbI'zD:Νe% SBc"43C EhY#,8r3U"(lmca!P{s{Nu m%kJQ|m!ޝr+fkkɧsn!Ad88UX 0Ac޺oe%T*%kgn..nSԬ<^yB% b##W;o:סFG Q;ץ}ɏ<+hٷێoXX^}|MɉSvp9h5mJMX& gs:֣{!bt=uWFGPEbo Xm]WhT  =ZYYc\i%qH$(ЏƺֱqS 9":Ӵ!905D+nSCkHv>zt4[{xb5W@],I3+A7MK{72C,@3iQE33+#p(((((s\U748hc="Ҥ02[ Xn=d_b3=-"24-BZ(ܥ#B,D\?*܊$0U>w (QYQ@Q@Q@Q@Q@W Պ?ɿQEjiF%TVAA8x4lR<6k*21J$Pg } cr~n1F*@~y宮d[m/%+ru*%%6q`eR9' +KNծB*nUlg+fEEU#) (((((*x\&FU{M%Q݂Ney- 0fWyڧF k*|J?/' sȮ@KfQ4`sЫy\7#8%MphFr ` w:$kkT {yT LS{/IfrG=sVwk!bd0G NH{ ~jޛQ^[,wӷؼ_tDƊ1'ufc M'b43>y]9܏bSY0qX<1>aΣ^?5C{#lZTմv9EQEQEQEQEQEV^rؽsGرPqۤ@̱NYeQ݉ U3jY_\k,yTpIhcJ(F0?ROsNV֬SȲKI*dF$ ;KEjSxuE5ƔȱsXP:߉bBz:1wfMT̥TXr"QBI*Sw;(6 ( ( ( ( (Ht4'a ݃p*Ho+ormqRW\a@F[-DžrojW ⨢((^Gif#v8%vTb4VvW ˼ac>D[j$vN{EVfEPEPEPE$Hby%uHfcu$[R{h` s/'ijRwI#7v'׀=iڅ28Tn0F@čРDžrojW ⨤vڌރ5oI4ݱHn1:gFQ*["B @1Xr,f(ՎBR##goF;-ڮ 9 ջDR6(=jZm&+)[յQje˼|9;rVε<jlC0Lf+\\r@n{ iۮ63g#s$'y] C5w7WFISLNjK*AI:m*O.4e^=pۅwS_}3Vx"M;62nG#a9p}_^")S<1EH4H0ܼF r$ 8ȤZňT/pu) @; tާljo\\Nm# 632=ű닉y"e^dvd8(]9@yt\|Q}jN<0B>Ћ sNV5~m܎Twfn&|ϴBHB\sUAEZM13[Ċe:'fPm-CEvP}W܍AA # OouVQLl9VW ]Q%#%QER}ko/(mqYr :,AEVt[-&\ [q㿶i7 Sٝ;A qf .cܣ*G9sUU ܀'J=A16)TzJCՉY<. I' Nyp+VVڪ0j75D }u&J Yƴk:jiz[F.DWwJ78I\ArM]S1Gk+s6ap'vr?S| *yǹq+2c9*i+}t2y6nvF*ou<+#$q(UX6H Anpy:>]I mpK0\%-gL\_Һ7*xek?$֏i]nm|m1 XHec+pHꮝi.ǎ  @Q@Q@qFdc \`8^09+!@4I$NrYF|qnKM '{G͐^<.#R"MI2748sm%DjI83(UG$Olib!-=9LSF[ɕ@@ 820x#WK"6Ì㞾Tޝwfr7lžicco/W]E%I-(I ITn'QEji;QYQ@Q@Q@Q@Q@F|qnKM '{G͐]HisI+)`WqVTSA<9"T0zptwbPNMlbAEB`qTf$cV&v/%wEf-~`~Uz.rGzTʜl5J:hKEVg9EQEQEQEQEQEU{MXs\?ii5NߙX}k^]ho'ݑGz +#L$d{O`0`1$+;t}asa$M8aT꓎N+P(((((s\U748; RgAA 0P Ic0B[c2zsZӺ947!\h$tY"6Ì㞾TiX2qV9n[Paf0Rܷ3MET{EVFEPEPEPEPEPU75bDžrohqTQEj`UTkI1O5Ao4!F,{ uc)UQvEq) (շܵ < ;}cDk&SWEV@ܺYOTYXrI&4$ldǛJ7NBbGqn[Ҳ767z;YH*g Fs5lc4DE,| zɶSkKfQLd ~^`Ys&MoOq)3I汚6GhYkv2Ʋ+̱j[ȁ, )n>G{#Tfb2N9 +,j>fi;Y-ıQ)2Ns#3c@=hF̺,mtMCkVx܁IǿZi!.#46̀n\A= }~U{MXs\U#gi@8C)SY:O,s]C3B`ޮR9۲,$ʪ1nܧܞ*o%`y7gZڔ˺9h%Oqi-Rc/l!1ҹ)B4YJ0ڽE2O^ _WUDV,?a wcVTb\'ҲZŇMaA*Ќ_4F)IvHRWD Ͼ;jj˷-gp !8힟jWU)ޜtv2Z`G|FF=CUK.iUn'0cwzgעsT]?L;Ib!BvFsZz+)'ueYVEfwU(>!  G<*6ohtctKᆺҮl^Kia EûV]dWEaj)u7oV[kpnA#6Fw`k>D +T RIs4rQ̫@Jh {6Qek*w<˜ 3ŸNjzM]?IkI k;06]5ih:|4K2FvAw\i72{,zة-^rN 9<N@?¡tuel؂-#l{Mye[ߥ _ -rhكnknv(yV-3I$_g8wdY*Ѳ6p+$(GN\͊ǭl,  %մL,Mw zzt*Xƈ395י抵99%J#dH8< ?k^h3%lyJN EAEPEPEPEPEPU75bDžrohqTQEj`RLI^'c) h5цVB`:.zVbyc{أzmr4q3n)7|AWy'u9S!)W;Rw ( endstream endobj 123 0 obj <> endobj 124 0 obj <> endobj 128 0 obj <>/Length 3150>>stream xŘ pTnMrnMb @GJAұjAEĶtu:SGΔ%T ! r dsl6͵xGwn֐7y,ˢ0LUU:]/?0X,ǎ}^Wsqq@}ę#v-{jVq+ [$Q[[ٙ7F=ih{/Ξw rT4 @;=٥k#}᫽6.7oWT%έ[Me+.^`2F9St\*ikHT<~ӻw[%@;RD2Ry [r(HfZ㐽v@`mn}i?z@E[ 8\Ntngg ly1N[eoE C%(aYPْs L 0a2g-}vqz]Ųi"[L"A5ZL[o Y/*ntvZQ,AL1$"D,=mrI6$^1A[(xHÐ0s ~C~yppO܃) 2F_Iý+2g*SSu7M. FX@,)rblL^ߡmc(NBoCHg6ycdƄ%N$8 Ӱ}===Oύ9l5٬˗*Ϟ; );KNo@\p/0'.(ouMkwk8I" <[XliylM;0;Mݦ!_|꺙$|-ayb|'Is&F YX&Ab9V8cA$mu-ߺ}˫!@V ϫ ,M4۔l82aE G>z`,{zi@<`.-zhǎbpJd^@*쬼NξpJMuUP0plU;î?f^﷡v#Ĥ*H^FU\z܅E\5_W(nIPPPi+]<]G`xk$\mdr1ɉzeQ@<C 9BfҥeeedohŒga@[f$ߵP`PzqB(,+Ѭ4EEEi[ EDjG-p0X`bB!4w޷oxp|g&tY=x mVL<苀Z~(%,P#4@jlKRr^OQ#OfDfٳg믿M1 !4㙪9?/)` k+?24" |w ,oL'q9OcoxR.1Mnn.1AZ }x8M5||?v.KŰ'~K5%ͨL@Rb]է*屑R(o=l IC[&A&\'M}hPP>fӇ~oi ['F{9%V.04#BPl3DJr'uo[jղ8`KJJ,QNT)|ƍa=++ȑsVk'`/@ IP%"Du;|ʽd T*dqhz ㆆ&(吗|sn1a">>==!55URd8 8p5B@ a lq)LFb2B)Pej:;;h#66PD"n@3KJ 6́a!BUԢk g08A#0Lf,UaQQ"wVsLjIS$$$ %H`ڰkڵ%m%*7eIII,×Nxc"@¤h1vas$͘h4 `JA5\n7&>Ѽ%+"\}xUAjd~QX@+^ -ft1㡦̙W8%%P JTPys]{wۮ\mpכV9p$BU*o- ڵ~{c1+o3/ɉPQ EDDʨ(۷5-U4ys~íwʷ@EζOw 3s/l8H &6 \.w{k endstream endobj 135 0 obj <> endobj 136 0 obj <> endobj 140 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYT^" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( +<]8KIḅa_ w#ֳaBziw''ӳ)|s6~#PG#6齂G0=ưI&Ide28V~ol(((((((((((((((((('JZ!?yu$~_浉Vϋ7зJUhd):⢅yt_W-T?S??6JS\SF5kW0Š((((((((((((((((((8Fҧ9 _ A?*JgP}ƒ~5j7C.߰tx+GvWԐmQxoҋXN3Σs-6%t2Vd!]~>#8 =,p<ݠ/Wki0LLp7w?w`vez1슛{]fZokV.B_>P~4),gr:S)( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( wYjZrb $n'@RO8 ?'ޮz<Ci/732ޤѿ2pv[`|7BA"2GCץ.6d .@/@k]Wu:-izX:*鶒iiFaNFܝ>RI?(ikh0 uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Vegfv2I" vtW;/4-N SX\]Bm#=AR[lw8T ':rڙUfVB3rxKytһ<4Oֻ%KmIrG%$SҹOe^*J#>UI.55}$̑q9aGF{hm$! n #r^Xު ղ*##/H#33c. qW2cȥ|rH=*{BU4\ 1 Jîx8˶#ynˁ A8.f?[q&NP>Xz^IZuIZo&Tq$.%Yydb23@tW-/ⷖ6ʷ'kwnxzJJ\?G:4Oz}*I%;x<#kՙQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ƹ&kq4VȐ3عg97kCQo*.V1pO`2kѼbn]R'm޲gc2s\Ey`EZJ=m fyz'8NI>B<~],jZZ}T[>ſTpznl_z>sU_vQEnqQ@]4Qn38.='y5]V}K1eubI^<1+ҫʼ]qumMbQ^d싦bM7tCI?Rż+lwxϽW-})&v(%#Y˱,՘䟩d|#AB%h- 8ij##`9%v e٬Tjtb8((((((((((((( xN'pBשxů* UG\t#$-Q95xQ1p"G=+ҼcḳRPeJ[ej,>#Hdb:U [HTQ QHSr((G>2 ֽjmn#?-D4eݎjL?+P5 Ԡj7T Z8GJ|9/X:+uJ%JN@SE# Tr ((((((((((((((Y-PI k)\kKi|˾F;E*:pn'fڋĒII''ipJ.H%IX8ƒ8'-ՍE?<rv̀:sB}VY-{{dV;}HN#Fqz(Kڝ9/>iNP'?ZJWv\( (((((((K6vLI7q'9 }k^c'۝Йb;w‘ v=cJǝk7W/hv1$}yjbKټ?Q" MX qQe;u'E>D@z:ppHs VRn%%*iO!s*ޖ4)c chY]%WUgk{A"  vӲo<;B%𪉢iCi 2I8`r:EQM&-R@]|QayeJLX0Hdv߹*(i6f%.t,OvM2gd]3A5EQEQEQEQEq<=/^xGcy<=D, c?iړ#󬦮ΊRIjU-RYDחQ)9,!P2G?vzOĚ)ܶ.?$d AxlZqdέG3,:dzZs$Av~n~^t{ NN{,m1ʂ>oN1 %욤FT%B9?~t3֭%Ҥ8AwtiUQL(((((((jz|:5&):r[8𖟦yEAQ"nTN8*lqHON~X b{y'm76w1̊3LA:Q@-k[="!p%ϦTagN$i4O2XHO&;c̆F92FXdY8RyꤜQ@Q@Q@Q@Q@ZWI0?B?)%Z#{BVܶߔ95׭VNfk;yee(]RH#;PVuyi-.VGU"o5Id{h0 36>r>|r84 n%)~:s˧Mt2p++D0qȉODDDP,W9B<{6k )ܡ<8zgHJƊX`d$YwPC.rv;QOW8-@V@n-#zL4":e^NJѢKxGͪqeʎP~>V;{JA6RJ2=;Z+8&Rg]QEQEQEQEQEQH(%w4SH?1]Y?xLӉE?.q=( ΂5/SL^bX,cn{$CS~n܋H!?WWXi$s;I$p1|w \QqdIN-ntR)%A#JZdQ@URFQ219 AEU]'2BNLOJ^GUTiZIXdxIi\@\sƷpI(9C oEv4i$HX ?iքjQԵL <mcGo pvsjw=#@ԭ"կ.q6Q@%~f<[PO~d.&qzkYfyO"3k@\ÕEUQEQEQE2 /e m(nNYws`m@ HB '33WcL"P9~qU\i9`?>VDyf݆c Ϧ=%UfG}>f/%W]8uJeھ9s4匀s柗<@zy~#T*0NOMnA|<dnd҃y$M]IZ(HfkY@P:v*:ȊCG:((((n.Hdv F8?irH'%s;8G`Wqb3̜`~'I˔%z/( X=rOj%#s1ʿ~4Oq$|,E_ -X9\,N b(T#?S&$ehđ3\jGLB41SԚQv;(8Š([\\H^5h7bIhF#8iwW;?9*o"[zMa_?k>gJZ܎u&gep?BM-L-SWׄQ`lg8$~֫~#+ ~ӫx-J ((((+6djb26~y;ԆKdrz]Oyza1o\MΜO!3㯡Jo>V2|x<,jTe#r~߶<[tܯxshȰf$M1QE71lbe:}`h]yNJdV)2/Bn73C@߉U|/Fky$pc>)LMI3$h |s㨣V8u # 琬zAdŃga3urxE#SDfdG9&/ y?:DFroݜ{V? +/(J(((( xR'pD=5^98ы^TlJ=*M)jajnKTRz('3Zt -J[,Mz_øLZ p@ڠ,56:*?5DcP;Z69SAQEYQEQEv5!jYK 0WO G`;<ڤ65ypF5^ /H{-뎭֯B-9@UeQC히 [29kf*Š(((( (K5b2CqQўB{A0#}BfVP@}G(we$(':@ α K~?̏ELjz LH2gG:nA^2!ຓ[XGg.g ʺZB&9kykx֗0*1}*zftHl Q@Q@UnߦZ^l K9۹A{UMykiS/&Jx83@^q$\$@Y~4d8]R*̤I ]*k[#kDdc9M6=JfxU  6z +^[>魡yIVrXŭkq?Ɉnip3c$q]MQEQEQEQEfF ɶmQ[[P& l䇸A g;XP_|.bU2:T=H8*Jy'X݁9t"A~u4`fA 888@niۉqy}>ňD =1v8xGKؕ!=!gpx}=4LƑgߧZMoO5F>^wڱ?8$Ο0qZ_CQϔ?dk:Ɯv3JJf*qOlVe\Z_CUa% *%Q@Q@Q@Q@$+\\H"7LOU g$TVeiec,ǻOrIza3jD\HG=d:((b F!rOԚ(((((((((((ԯOLivW>_Mu/qgJ(9u Xڕ/$6b_'nQ@k15@=z20Kl NAc؞+ ( ( ( (P3Os3ހ,jY* C,k]Dxyed!ϛ,͵TjR-M48R51JMZg{xM-71ݺW0U}nfѤMtإ2! f=OMm -ϨN@$jsө?һ;J%+Wy@ē$zn#jAkI u>j͕PFB=NWPZFs3*a.FBm2;%-Zc w)Ta_3ޖ[577Ic6ցn<=Ars 4kVAGuSu j_Y]P3]f %pN|c6qi^XRGk%hnTi}G=MKoq> endobj 142 0 obj <> endobj 146 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( (#SFɠ h->X,b"C%\6F/29] a4QYsil{>loټ뻏V.ͨM<ð:a~/Y76x͎,}U?;`}=Rmfo$ a|FM' EgKIm$K؈ CIZ4QE0F]CE'UoM>#%pi`=c].R f$6돭$ 4˴QE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cunv[J dh`P5mjiiV^ko \Rev0dcyvE4 ٺc߸>aEsVn+ߴ@gA8#<ܽVH#]yRw1Qȣz(>c`M)RJ"89ez-·$>^=FuB^aֺJ(kkz$m.rL 9=+$-AukB9ՙ`xAval:GmrV2&DJX׮6"?,Ox?Dֆ}FMoq# Hy-!/QRn,yQnasa㺠-SKVNGB$fv/#3>{zWhPC+n<pԀB}O***0HZ(9Š((((((((((((((((((((((((((((((((((((&όn5Z>Lyxb`._]Mc$l/ < go8z~U[ +=$II@ >O:\QgROe> ,->l4+ӧW*73PO;G'ܳ \((ڹ]ZK~nU뱽8=TVEAet\FVA!;09v {K{l*4.pazrW# Bv9hH^70==>((((((((((((((((((((((((((((((((()HJꑠ,@I(mM3mEbI$$䓁U`[}v&c,! HĪ3c R-,GGqU=:4(((((TLg$? ?H=9ӦIM*++ #Y7ZN$3d8 hPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY&xv{RU ?#e qDJ qѱ=@e,nCG*F*EQEQEQEQEQE\̻܂9 9dUk)Y䲺mGr<v;U[O2+S/ d 0A MZ|r's<سgb Z((((((((((((((((((((((((((((((+OmNdLۈ9sS$ERl|*n!g r)XsYI:WBA @IZ *YwFr=4平m.g򬮪? QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEe}沕K1bAD̏x2~gy21}tTE6|}*.٥=Wy^$a.瞹cT48~ϡiKxН'ж8[QEQEQEQEQEQEQEQEQE! +fmkoIq Ơ3 r0WEukB9ՙycS^h؈P[Ƿy<G`i7mJnk/29w$-'=Nsk{ͨLRCIizx?T-VRΨӱ>bǕ6 ~;)fgb3;c1FZTDj@g!A>]= vc`M\uShnfYTrѰh F׽k*PoKT[,Zy21hNF ;yӴ/P8ܳI#,Rݢ9tL];A#M727 2~lzc"Wx*YQVq\ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ?֫nWW|EzZǞ{Su$KS Sod kOQҰJ\ SQ ̫n-! q3l<wp.G 8>4-/OV;E, PFz0=pAEPb9Š(((((((((g>1Y׬גxeED5eTVy3XX锒ܮZ1_@ UFb cw+H-niq{g9Z CpAAyb;NFQZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TwIkf lq-#vP=x'I h-Bʶ  Fdz @<|s}} Ռ왦o$$u88Y%*s0ꃁ'5qmQi0Jfn0*(f-`mªZ}ds|qg# `FZ/iMaA-/DZ ݪ]D#Fݘ^H A̦*](Mꤎ0( ( ( ( ( ( ( ( ( U[ o}q -o 6H+@^y .QEQEQEݪ]D#Fݘ^H AitSkv.nxYWduRGPUAwjQbwG"pѷfג=$A"s) J7|,zr2:#*r(((((((((((IM*++ #VR=Eat's8  P]ڥAX:Ȝ4mفB H vwO$܅Pg][!\z<Q7(((((((((((((((((((((gGiȇ) =?G~%8a!n%S/ppA-$i IH0€EPEPEPEPEPP]ڥAX:Ȝ4mفB H vNe6aRFzo_nFGU$uYTvuV,tr' v`}y#ЂA*+K2[twʽ7##:(((((((((((yiFMYqp2= X]]ʙ~Y'&'%O^B#*QU;U4|I 2x'p'F@bh\Bۑ؂8 y`ԴQEQEQEQEQEQEQEQEQEQEQEekѬqn23abC@ Z*0,pE+I PWyRgk$vFYPxzr9fͺԌWq,m@\yW1Ü.e[MyoÐ'C=03@R5Wvpȥ:g5^Y }oޘ s+ڀ4h^q$\$@Y~èO2 弲bdV F--r2 @RPU/l"2])͌#5%4s)4Xڶɝ K|3cݧaWe&vD!o*[h@PN #EtbDŢYpOA '+hWj.{I'$y$O$(((((((.R YNN6G$TP;K2[twʽ7##:* T+GS90>A N?9KIxv' dP QI@ ECqsFKR$YMSv4MFPSFIƊ<;xukiu]^rˉpz]=Wo1 8=,QUmnq{ͿfEvcGϷU5?\dc&v(x EV}vD'6'8<LMSOy/ZidL@9*ڕ\I^U8'Ѓy[+f~lt=(QEQEQEQEQEgKw4C\D-^WA v9hH^70==>%S ˌϻp#vbdNJ(hSĚfZ}e .gaU5brG?`xfR8'9xk>(YQy,Nx#өIn|N~G៥J.+mۃՐbDi_l(P?9@)!z~d%'}j2Փ/5{NA'zGܨYۜc p\qfwc"D*"RI1zmsYaKDO-FБ }9%IԒ_xMu$ڟQs{3OʪO-W.,IWWCEQ3ycy}kwO# 6kT~ `h8MzĺmM)RdF .g(((((((((((!WPz2 :Ne)jn~F>:{8֧zz-L-SY]2ƺ+RHD?PlUR*;K H݇%ν6iEKH8=_)s;QL((((((( A4PjWz <$Ur6Õ?U W;Zz-M-I u2mK+*s~ZKMF9͚iZK$nq(#ZdʢE'];H|e8H\m Iҭ-m7ʕ86 Vl)s;QL(((((((C:a}wcmn+?YLJ*}KRz S@OA\;d<1tj p?'vZWlxQ=?*c*l_ քC+Ҽ m,gaߕvtRQH6maMƨ=ME ( ( ( ( ( ( ( ( (mC]H-m=Ӓ˸pq7Bj\O 4͵$NN`ޡufYF  + {LrVP81y{.ycײE9d\^ZZ\D$zUZ[ <#hM F0FA*joF'<9@sݘiedV$|-:S HʄnWTe@`Zfk~&+JL`2{wR7*UmFd~guޱ;aDwïBwfY  ʆpA 9˓@V 圦iFB <Pt$.TlCum4sBe88z(((((((iwZVkHYJ`tP ?:nŪg»'šv7IJgH&T(€)h!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE$Hby%uHfcu$y} v4@yG~'5JRhKaY>%8JKx$Lm2i~`.a*7$W2} Q%dt+##B+1:~oEň ]IFN@Q3Vc!##@UFTgi\˟*,8I#'@ x)3& : ,;tY$on@9#8W eW HQ]pdbv(' lNI'%ɦڽ ӕkȖ 3@,CG*F*ZM'v,_mF-G&؁r ܞ:̃F[=|A?@%+}qp8 9?um ̳zY N#g r^BHh9Q^7YXd0=As|Kp%1g91LQ&<+b>?n*O^4e m+Hb؜` -bIJ*OTņ`ƸN$Ϗ 4dƤ 捣 gOdinCH`@| ':]Kȝrc?8> "VEƜ4vѱե*S F* [izD^ QC܎H 0 I fdr$$:n+)`z{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETWmM3mEbI$$䓁YIuw+YY;x 8R'k[a&p1!9cgɾkFCEeq~$glIuh$CGYXL,b1+x"av$rI'I$Iɠ rsw';%tEȌ EEq:9228n-bIJ*OTņ`ͻ(ZҭͰ;X1_o`2|~@6h6N̽tOf<B9hH^70==>((((((((((((((((((((((((((*6tEJGerHϒYiq GNF0F<idʶos@>a+s x$IE@O{yJFc}AEFkgv0mGW#z]A%&8Fp,lǧKIU!v)K>c\mii E!VǦK1$9=O@Q@ D'WTff8 ROaTn㽙8 -q3g*&w"simhi|u.`ZtYۙ *ՙUQ2Iy TZm@9Vn>}|쀠99& _ދʹ9[^LrCiT[g>6­Ѥc vU?i˃YQvCs ejV61ĥ>TQ@}^vէY}^vէ@^~7)!ϦY[Ө/mRR9hP`ߚJ{6 lʽE;]G`G~M\kdW_ɉ@aבЂAEgSU"Uh. <2/RGBFG̬20T}r/aN%C#=BgxǗ4j2drsՀl'/beYTnt8?CFy\]]ʙ~Y'&'%O^B#*f}m;9<yH\q邸9̼gy3B'R$܏'` תwvFYDʍb`r8#' So4m lFGLN*ffKQAǙx' 2 ͻӸ/mGD2٣E{#+jӢ4I$Nr@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2II]R4(I=V-፧qA.!냀HGʓR,4pXEq@S3w7-yV/G=b^ww9o^#bi43 / cs,c>N(-[tE:DBŏL+0=ΝA{jYVA!{08 ̢Ъ](p]ꤞWI{iad*2óGb.e+w ";\r2Jm;]ٮlyd08Ёب*+i⺶ $FR2K@][#dU;ݙOUaOSij/ DF@/\Ν&`4[yXܿ y=3*KK4h hRyTeNNO6^R6"rlz`e@m#}{P+3ͻӸ/mGD2٣E{#+jЎD$'Wee9 Bq@((((((((((((((((((((ϓP3jĪJI6A4nximI$pp*n.IefxbJ?:ܞj[}9Vuwk"F?r}XNmiGEz rGg;",1gs id.w$㩨R@ J; {+:Ģ+0r/M3,kU,t?-#wb}x(Em ErI$O$I䓓RY<ǧ &N q~T:1+_ދʹ9[^LrCi#!##@UFS(3Wٯޚ$$rQc"Bʪq:uG.k @oANzzw:(̃F[:̃F[:*jlUgY,w#`:EAet6qʡ#>}BӠ@~,H[齤PPkN ((J^+Uuo#獊Nx 908lOմW6fA"6ʑp}ZeﭥA ~[X|+[=@%I;죯Qd=II"uxVS G :( wdeOo;[\*!\L2srizeq[\\23yWYmb^HpSrd17vbYN'7fSXg0ESTwt8 !p2=So4m lFGLN*Awio{%TRzve=Ux#U?6N̽tOf<Ndr$$:n+)`z{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLD'WTff8 ROa@lWmK G)w2z sU6%Ĥa/#~6vQZoei%LyŝI;Fd o\<ߏ"ˢ0o0SʧK{6 xSQ*+ŵث&vC7O$G$HeTRdt!"(>b*mޣŷej廦٘3݆x8^CUx"av$rI'I$Iɩh((]dqs.|'pI-b 4n $MEcj4Z}0IhcYZ}$.d?4fA'$ڢ,aUU*$<*-6f]D t>_@P|LoEq&@̿Tn9!4(׿{r-k F@ l`ڥTE:VPEPd2ם5id2ם5iEPe6i0nѭ;N$i$ƣ&C vۏǡWc&$pYNCЃP袊*+"u cuR0FGKEQ甼wMq0>`p1ުw2-TOX 88%EKet\FVA!;09v m*ˈ}6~_N$i4O2YHmӳ`L',?(Q@Q@eNNO6^R6"rlz`nZ]ddU;XՇUaA=S2'TmCUϦ9M<+i/$8)۹~2zgpTiMѴh2Ѱ8>:9228)Qf  !W>## df[K{؄w1,r)3"'<۽;2tM)=4_g2II"uxVS ( ( ( ( ( ( ( ( ( ( ( ( ( ( J^}O3Op[8=?A+z $iecл`^'#MJo.c;'ˌ;Siy^ۘ#%b҈f.ܜrIX y! k7>ƪs-[660GºU4)6yO-ז kZXWOպ|=nu6' zR*#+:UΎM싺ipe%#N@8*UQ@Q@EqFIrrۿZѮK[tG9ЀW[V$QE1fKb?r)n'hZG=g4h̨INqUxom2V[g85xL"9q.@>W:omZC^mxW$#p#ezViiGkui 0$ db # tn #E:̶hzJpP˻banI=1 nB~@Z&Q0P rqla( q/ࣟdcE_W sآM {RW !w<˜Vvٴ >)n'hZ5ҎUkkPL*c*mgG]G< gI{vrSˀ޷ʃ9b=xK}>86 E*2k6*#Sb T,18?++̾%En^[Yu]~Oh\\XI{u,ʊY*.lxw,aq*ʕ985fe+JӢbmӀݷ$g+IkScc>dH8E ZN2w7&nN:V3zTu4;tz}AT%=t[ ̀IXiB}TgRzDAi'OjU; ښ9;n3'4nsD`@ʐp3V?-"E.p]ꤞoF*Y3bGBGjOydG7S6E?P^I[FG˟ǯI*0r{l.$FJ+\2«k&>Z4-oOѴXc3.EK鎦I`"8QNǧ#i<7MϘW Oվ3Eהm[pz,Vt'2Zs<$=O000MVbci x$r98pqMB+Lovs[JW A^G :|;K H݇%νȂL;OLR8$pz: "z+$˧L!g䋄 s($6.k Ke%e`Vf^K,p^WTA՘ O=2͛VF=kyLY)ralazt2ؾGkmq 5H=Zէu$.r:*+fQ@Q@Q@Q@Q@TԬuGO'uGo1I$0\sրGno8yݘ˜ `pG?dwHB[),BGp='Aqo?fda}~$Wirk)T{3;hH$z?6IС Fym_urj՝ٯ*[O;##A+>F_[] Y2wmn~F>:{8u90Pyz[@%sY6H,YgG]^)$"MJl{ok m5A*jeQYqSWid8X 16IpPǠ=j<~&I<%@ns`n"*p$ӭ$sZC9@d`~>8Rq$]oLA~=@ ݏA#'pY,q F6=SP򮦆}oO ΄8 Wוx) * Y+Wև5gyeF[QlzKWqQ5{(L !Jx]L#iR*5br IDFO]NNGyoBt; 20(#洪"U[q͔[7WQ"^ێ*W8QѷLʀ=VdyM Fx62J?Z{E!PU#pOONi A@ 'K5ēev}3}AVR:Ins;wXT"2 ch#?5jaj*hh'LH#{ yWB~R5zmMhsVwc󧳁[P7ZsU GOGJ% _9;{~UrܷVj-JG>zLrC"'cF#?Iv|~k4Bacu9Ej#ZtDgY+` $#f.ei5Icj"a8 $=*5%]1%&))AL"FTG Z*gssC)gi(_vl{PE[-SI$LT#,@Q8 dsԮ yi_y1 V7\rpH_[05 jŎ{0E°Q)%X$ҿL(v_rMJrǼiJTPa*݇iH <>n(ʧݽ-HoPHPH9«isNwt@BOϥh`jY˭2Ns#3c@=iǑd*]wFAag^ι`%F-4qAdJ? VxlMC'D;vcvq1ҭΗ0,щp$`9y?JZ۟ݓipP2O\RZgt_5-@}.oIv|~j;Js&]R{!1rWNo5"))*KI%yc ]B6Oz hvmUc+9RLFtqttE1r+6<}jg4YϴH_C@U|O8M0{ak5ٶ0Fr7nF׊~'s&=L%L.Aajk8$Ջ:R`-->`sRKrj"I˷~Q,xӁ]eƩm&2jU!6eyP"|xP9QZQ@Q@Q@Q@Q@AylWx6#u^W0Lf#@I@Y.-eIqt98?WX۟uZvc[hq֍aRE1Q@Sm^H&+ЕP=j2T:7 r7;h2wٳؾ3q?yv{j.oϳn՜mOvR7Ē(`T }a6v-&6w ";B7FzU&M\/yk` sW8\פn$ lz]ԎFHfbpIV _h&v T֕4؃M ]#&zt* 7 ZCc!Ҁ']GK:վ?h#LHY#'?xA=s :Zմlq¤p=*8t˟As3B%k]JIUCDs';c^B|>ͧgtb^_㟯ٵB=~7 vî8z(+94W,nd\$VYNS==N (d|#m8]E{\-giG Ǿ+ 1+yQ}+b$O6U@Lc{lYk-fhdeX?Uoʀ8\פn$ lz]6;MQ@FM\fE' q"xƟ@ٷ!X&߳Aq$In$أ~Ar@t;@6k%Le$Sfs ӹMEs2x~y-+ )N%v=ǽhYi ՔEAјmtaɭj( 6OΆ8-ͽC.rCE.HssLOge,TCc?V֫kkrm0A!Xm Iq6 ,bEVmG@'c< ckfs~m 5EnEPEPE@HZd•>8jz((((ÛQIxong#-83K9Sf91P0;rz,8jh"e>p^Hv%lA}"_ĹY. < ĝP+9[TGHd{ln =<1ӦEEa-]x^vX/A>4 gQZAv8r9ZBdQ=M:>K 9{ݸAQ޺(IӬDC!}FX!P K.߹sW,×N$ɐ @ N|` Gӎ\[l2E"e$rx5rF%,} 2cc.o8@49дbm$( X\- Ol\[aE*wҪۗà_I/u[7h@Җ|}` ޓNՖx|9lo-@9ed>pyjh[II]-U͙XG8ϩ5˭&[ۙU7 il E(fvO>Q@y1/QUe3Exc9xڙ2;w(((sX2D&HF=ttP/yh>\/K4>_j̹՞}%KǨEaǍs}?'vMf62y t&qu5Z NH66st54x dDǾTWa 8bPơUG`_S##M6mPf .C]=h}8.FpGKEQEQEìw|_iv3_Mum EIyr7b([iBNi Qbgku%m^rKg}({ɴ]9\^qrb9y'f3Q@]и6lj W &^P0f0xl}[WK帏FE9lxPrIƊ5)n"0xRgk.?TF3ISCV.y>Wzq=34 ϖ')ӫܰ#iEQE.ea[[oJ6qQ[P'tn;[YO tdJoqs,zZ\Hn|H@s;)hnR.ම;HI̿> endobj 148 0 obj <> endobj 152 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?fQ=ْ%LJIRO$$18]od{q띘7Ux#mZA|V桥\^j!mY.a@cr#GC@Kx5Vt6"d^Q*3kKl.8D M[wzgf3]VGk=k!,}w: j gдŐ c|?aP- ._:~jw-gj}'tEa ZV6]9PʙrskI$} CnĘgg(SCQ ._Xlc4G!N҈YiȐ|88[hk<6Ct'c,.!tuq@$ "Iu?Z?EnkoXͨT$KOsW8<3= m$C2ح9`i KS%kPKz+֬(,mWƻwQ*OUtM!KX.@#x|>ϧ`s]OֿG$ "Jo/'?E4J7,/# 8XkѶk&[aXE7vc5_@_q^O-kx/#/a nTjw_S@j-l䅡C i;bU8;ysWuצMqMnvlMq8$sf/ ㅙV;3?jY?y5P9:ehsWu׫Q@S@_ן /^EyO#?_&G5^,MzV'k]:0 H@e@RE &6BFO8 WAṟ1$ ᔮG{?Cc#dP$V$K2*YJ{۫t6J>ޙ$JT}&8!sG!`2xJ` -qR'<(Ŭ lH5*b$tuH^i;.UF>hH6?oWhWF-6?oWhWF-6?oWhWF-6?oWhWF-6?oWhU0wގa?G[dךuC-ݻG"a恐Fz^eOu?^c?Ƽ$ ut*e9iiOacmIQIiWR=*34 xrDKX$(p*M,\$wLamPݎv/9 Ku"xR$À)rS#2䎣{ +!i0 fubb3#@ h~uBh|wIDor(h%̝HxGmӮ.,TmI#ޥ0J#?w47OH? Vh t;On5f7OH? Vh t;On5f7OH? Vh tt[Y$,JD<xU=]M#RHTd(t:$qC 1( jz9zuy?cEwKu`iH1v |Z>լl?Vd-E ?bEhEfۻ#<㌎ڵ hV@AX8du1< ڄ+,qpJb} j??6Z5~ xSg8I@j??6Z5Ef}X Ək֝ca>լl?ZtPgڵ hV@AiKKƸ`p UFqOz˞mH:d{<ku rca.cѿE2.Mё܃Ҁ*}X ƏkP eu;zR{r9ϫƢ28 \Xsdgլl?Gڵ jyry{;fs׎VԘ)_I~𪎹/ڵ hV@AY{Вh&% ݜ<3T7:qiiPhےTրca>լl?S2:dl<<N(ὕ8@~Pokca[tS6דh;C=GAO%Lm&8hڵ koGE&1*Ɏ1I"hFO\tzu6sJ</U+8>31_i}HJ >+41Ί 6tbA=cWGlLočONuΗq*ͱ@ϖc+S_H_UMIs10I¢AOX'JbA=cW :+3? EرOX(NŏzG,?%Ӣ?c+Q _"4X ǹ,ňϧ=+;? EرOX(Fj* =Hk"}5"tȖS//ǝ6vpEX'J4tRפ)nꭷmI1[؃G_SNpUð$/ړ$ dqӿc+P"kyZm.<$yjegp[; ہ'Lr!G,?%?c+P+XnƱ3ŧJc܇}^K9;v)رOX(ŏz@[: i-n zG/>~_?E _"X'J(LBHf`A ~zqRK|-ocox'bA=cW? EIq`Ҵrnilq\Qݩй#cŏzG,?%5̛y 1*Nnf#bA=cW? Ek` i-fฌ?*_IO€5謏IOIO€5謏IOIO€5謏IOIO€5ꖗ@=U7$>Qp0;qU&? ?&? F=?Q5IC~c~יF9OWm 6?|W⛨/ugI*ᇰzx{M2C$4ڹ?֑]O h#,p?QDhX[[FcǦݑ BØ0,q٠ ~B4 v^C鞜ԃQÌoR4@;$}gYbޫv&X:AN3wdE^WE˛<7`Q[9cಕ;EcGkpiͮ8r 矨h(eM(=3_Ze௯^}CtdCђLV4z{W1EBV @諺zΰ/߷y{oӶ(&FM=GEI紟ѣi?Q@}o'j5/=br̤ l3ҝPY[cIdKrن~2+2!l'"Gne|0AЬۿoxFk-1mf~~1L#P*GyS+.Byu%x| Bsc95$RY*&HmbY-tI!$㧿7hB] I7 Ufx]K$hBgZ(]5;v'5Ձ|j34>YP8#]XuX N_FdL>ڹf19沦K k,\OL,1=,.$m"U#0/ H$`'}o'hDOtPh{I}>75'&FM=GEI紟ѦMzI4ȱƥ' J@Zuռd'E--Gx8?1>WxY%dQ9p?:,.m2054SA*- ^L{D)ll' oz6k奔LD`PҋT(o,`U;{$S83#4!@G#^}Mѳ^}MKܰH@ӄp ٰ>Sk|Ѽ%,fU!eG\0Gho&o& 4'3,I8&%r3}}ޥ4gE4%" u;wl׿S4l׿S4%ۆ%8#pE^}Mѳ^}MP˨j }>0~IBa{y&{GtMD0QcϷ&%hP|A@FjֱO2 --cϤik:dZyi7$s5h:(pC$/e?~thY/I4ҫc㑌<gFK,cQA>&$*%-lq?"4V[.;EB;aK!awRIö{~ *#?Gh<@Mǟ7Њ=sHdRLydpE:k144+Yw zgcTN?mڥo=4RXFȨpGetGThFwr:gu=(YbuyHnسA*G7G#? QYE H2sOW5% oD$??h?"o.G7@tVg#?|MG4IqʻJ02h?"o.G7@,I=m@tVg? ֓iYX6ZOEfkI@}cڏi?P`mGIe>z*:A[֓X6F=?Q ]bf0LHA;㚧=NnE =lzfkI@}cڀ(jڀC<'nAʢ{~E,$w[JgW>mG? =LHe˖< C?hXާ_#EGQkI@}cڏi?P^lv^LR>2In[9::71l]{PJ`n0=>mG? eZH_?1|=z?>mG? N֓X6 :+3ZOkI@}cڀ4Ɪ&|wh$ 2Ix? ֓i-v+?Ճ_XWF9OWu'jZ.ſU'cl@54eۿɳI6`4<ۻϐǜߑ??TR1Dth')*QR?*u++<ăbzdr2SO V4f@$gE伂8$TGn0PJ X| kZ۹RDzf ( ( ( @e+T O֦e XE,'%]!=C8s@vÐqtϿWF9OPtZT0Q`d'QtupL@e6@X#5]G)./$zPK?Rd]yN% r9'?xsҒK}7E R^N?RԿ:H)%hUS,g1q6v{dT?RԿ:ο>xemeJ,k K?RNԿ:?/_. K?RN{ӮQ\IPT742u94<(H9n1  0Q!osGڵ hb#IRnAؙ}XqFYᶶf0 H l${ X ƏkGR(YLj#  '#pM>+7d:|7OcTլl?Gڵ hNV@Aj??6 :+3Z4}X ƀ4ϵkcaӮ{C>Ϧ5"y vp78#Wլl?L]VC jGۢ8`w FQָ+GZ#]؋UW/DrMN{~EPEPEPEPEPEPEPEP"f[}.)Ej~0j纎x9*0AFlO<:UfӠA{hՇ(*V"/J&%&6 s<4wI ^@wIL%T|HH`ylt:l5h-1YiflYR8$9px叭hQEQEQEQEVlwo+쳲P p9Gz֕f ) !ɎW'<}z{FQָ#n(k@Q@Q@Q@Q@Q@Q@Q@Q@*+40Hv:*0Q _"ȳ7 ~t `=@c+Q _"q|m~^{Tq\u0@&ڹEzc9 ? EرOX)u: M.[ H@,3;8"\4zjRF_Gpyal[ŏzG,?%Ӣ3?c+Q _" X'JbA=cW:(3? EرOX+NɴZ&.olg(ߵwtFZ((((((((]+kX#IAUxo E"I6:dc(\wn0n:Tv yo 80 E1|>m=c;,buZ-% _)8LzQEXG[(G[(IOIOŠ(G[(G[(IOIOŠ(ZY,6pf&WEQEQEQEQEQEQEQEQE endstream endobj 153 0 obj <> endobj 154 0 obj <> endobj 158 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY7z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( BKn\cIV>؜}+ի5;˻]cQ֒H 㸑X ]q e^Ig>LHoA">q=?[Y, ;8_]IPm']IQ}>~Tn?:(mEI}>~TeϴGۏ>q=?Reϴw'@z㢏OtTw'G]IPm']IQ}>~Tn?:(mEI}>~TeϴYңV'$*@rxiR+\'ar :qҨYvO#lْ' OjŤG?@ Uf] y(t]BI5y. )";GNWQYԠHfٷy8zR{kal v3,e9,P2:Z̩Pnۻ3z{5X ,rO@RMs`-$`1[v1un/^[ PS@8EWhs@5w(@Jm##[Ws+-]6$뵎 Oʀ#mEm?Oʏq=?Gn?:*O.}?OtQۏ.}˾i?*}z㢤˾i?*?Oʀ#mEm?Oʏq=?Gn?:*O.}?OtWq6aCpf@H1';xzOʺIu[^Fm9c!8mxl dP<'zOwUM4<WEPEPEcG,:Ⱥq VHLQ2FrX>X,QEqu<DV!h +N95;+k;$V Qp_~uږdu H]f O}(zV#m"eGPnrAoGdu T(qF7ӢomnOr qppyP7sGۛ r@Vw}ٌ!/ NH prqJ[|'mO$ȱw@~@1?{8tVvjMuK1/)|20r ugM_Glo m!G'&43 [l۟lȍu.1",}I(!yzۈJGn0r* 6S}@|2Uj韻 t#m0˕.%\M[q9 #Yִˋ6͢EHGW\ ֕ս^mAqW 34ɯY'$uެxzr?1@{@żS=ͱUCHSiёim_}[MiytnYHcp) ӎEj{kon H=9%K(I(<Ʈ{[[gT*QEQEQEQEQEQEQEQEQEQE/F5vu/F5:{7y<'J%rKc!8O@=lRvX'zcj4[/sӥX6c<J0>Pݷ PT3-Ur8TvsTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEkF״u1u?O :((OYV5&kY%UHr%yUWwr\\٭1 :nrg8$t>t4P#AsEO9nu8ϘBDm'9Pc= i qxDk F\r8SWOEghfp,rKuPxcC*QL dp?!@=AC,12m`˝wVtLuh-&Hѻ:sA8[r1HFPHE[dVP&dVKCcivA84 [KpLZh,8s6svO v>իEa^GOq<y" CA[Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@qfэ]pNAH 0>ڀ$?zW`9\Uxx n!'O r44o{IG]=s7SУ ( (9mGIYZ(m" ]KM%}*phU۽2wF^& E >`Fsս뭢2tuԶZ$\#>wsҵ(e t4QIn K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@pK 뻮=5?sMo?IQǼ_RPEPEejLb}k76Xi6t7Dnrߍ:Ͷ4)9cr!Z|tue]ؓ3#PwbJѹQEQEQEQEdf=c,JÐ2+"iV[1ϔ'M\`^jvII?aS\G؆eH?zF?tO d䐡rϵJ݋.Xh((챻Ck ->'|XԜ 6?ʆU,+'7bI(éNzzW5quyqȅq?3NI6v; Iw0+V- lnoʤq⼳H _|!kkig2\rvӧ6 ިV MGRAF״u1u?O :((բ[cPeS;6@8ZU`[ 2nA# 8uPf-I>B2{О1Ulͼ+'#Wa+!.I#!K` +9G9",^nLr4Qλ9$CׂMPj7\/"ՠK{a#*Dm$qQ@K<}ZK9jZpdvm!'ڬltu9ssc=Az;ǞYַ7xX6θIF$lE?_–J0ג?^nmHc0U*s+"Z(1*ue"HDE#h;S((S]uw>`V@ksz"ҫZ]^DJyl넔bB]/W6sv4? Dk [p@; 1U*sh(+Y"p14Q@Q@uvs_\uVs_@]i$J :cM.ٺⴼRxR?tStjZ6Bx/'X4;#%:dU9M>mia-$g3uU h&Q(+XED^QIsmYε[I$[cYL+3Jw5kaɪ I|:ˤRAI-YG1yg1?y;j?疡"o{IG]=fm-CEvP}ZtPgݧ?_qQi<Efm-CEvP}ZtPgݧ?_qQi<Er~(N'y 'Q1GQu8E%L4YgyO9AzgI ;9k7e9- X亂)fl]dQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@pK 뻮=5?sMo?IUA4|8K1YLY@,7Gs45G4Rs1 qɦK4&,U-Rp?dMm)٨ks25Ŵr2gJ҈ _fUC2)'ӄ:1qgހ&KHY|^}R@ A%LП_@j`|䜙THb(.ǚ#jF$jrڝTQT` ~NIP*_?>NIP*_?>NIP*_?>NIPmn.6щrïQMhE сZB np2S݋6pIZr?ҀxԱdg=*HniLaXgLgΚi$8*LtӖ)VO1ts T{?*??@QQ7\όUIEG|gs>3QT~i]R671 j[F!R\BXJ' ,MƑ- ڵb5`~q Pq)DU,n p7p:*cz b܅p@?{54P +HHsN5;#0))mR9 (w럛wہ;p7q~[KVUebSn@A<׶k*wW ~ua9`\(*4}qc||d@ RA|go$Er72b{u?O :ѿ:'tQEQEQEQEVg?ZҿVfxsE+iEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW }t޻]O$ys<SԤiƏCO:,wI-ɶ{l֋[i,rBgv NH:MP)|d#Q9&Tymee2AЊ}"*aȿ7r/2]܋}"*aȿ7r/2]܋}"*aȿ7r/2]܋}"yIUFY5%&Nd.QTɣϴd.QTɣϴd.QTɣϴd.T2(TGgҡ&>t}Gh?zES&>t}Gh?ES&>t}Gh?ES&>t}Gh?ES&>t}Gh?U_7QGh?ﺚ=>bְDʶN44o{IG]=s7SУ ( ( ( ( ZWy Ӭȵל? :( ( ( ( ( ( ( ( ( ( ( ( ( ( ( /S?w\%zjCz[x6E [  )Vi>߱[ͧ?ue#ʩ=IYdZdƒNU4}}`bϬWYg<4exraX?أ6exv?@V@X)#b{ɚK{m<;a&f 5N pvz t:}ԑ,4V۰rp\cޢ_>{kq!WR9hY ӣTK (Gye@3ޖNx/UtdT20pc>Zjy^A8`Ď"$N=:P:[Nc}>@ˁ#Fx=j0i7V:|i;FWŒ1$qĚI ;7eOZHÉ.="L0i7OZYm,a2in푱o(qFNW׿NĽs(]K?|€5Am9\)4ttĽs(]K?|€4=*;Y=2кGn+3_tt+c @$c/`_:Va g5+;| (q_ EF63yxQF8JxiHb iq[ !KH!VӍc#nVM6^i߸X )V ݠ D.$ڒy(s8' cf6Dk8Fjw n`r+~Tu RޤWȠ4ۈ- F7bюp#\Ǔ6xKmsUaw^t)1gqv;tAZZƁݩ$0#׭A,4| o{IG]=s7SУ ( ( ( ( ZWy Ӭȵל? :( ( ( ( ( ( ( ( ( ( ( ( ( ( ( /S?w\%zjCz_>wI6;"%*?4 y Kmlc8^E <0S:(ߪ9e1m篭>-PÏ.$* g~5Ejm3o昿t})D~sA﷕r{gmZ?`dFOy- mnPSϯJfRʟh;73ʞVc( A˂@@XK}Urqά@mH]N@l} ( (;pI#f L3#⦟0H&ǗϦ9 un< g7?ZT(dp9`9N! ?F*{qQԐ}&&ѿ:'thOBz((((+3ß-i_+N<9"֕^p4袊((((,?hm*/?8s)oCȬ:,+kkxkS&1+"v#';WI{cFO?+`GPȑq$3HC),I']5Crm"φ4&4wj/5F:wjB@`^2[CI2ľfvA9 uqu xM^+2 ]io,PCTuR; <ܤ`g*[\rNKK@s55[ᝈ;K~4[Z^5S22s@!:v"1ہh%쒔Ĉ@$sZ΍YUf'$y/ r(WX8'!sg?Z[+3{ydXBH,vsꬓ]#F~Ta<ˏNjm |!? *ŜqC9Qh|8H8VہO~jn"F b6#Gp;~5H@$#ڀ3{_*vl>?7j $y>,| o{IG]=s7SУ ( ( ( ( ZWy Ӭȵל? :( ( ( ( (WjBozEPEPEPU&FU}CA_ɿ OCdrZc}ʲH]w)Lm,>B1+ szԂ/l8'Gf l) qS%I#¥SrLt!?hEV2*2̬: 1`)^[10.AvQ9 F9ҀBG??NyH,| `Ep'ש<,>BrFӜ:KKdi!xlq44Da;˓`b7*>R6> x9B$Oj| Aa#P0}&&ѿ:'thOBz((((+3ß-i_+N<9"֕^p4袊((((%BU}?AQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUt?b&Q7 QEQEQE_P}rojW?u\o~<5 ,qMo~PI6}~ >U!/2ɶA#1qqҜʈ6/jn$*`n#~ HMK qa>,ő3cws6I=q֥-rᐒHa;gZhS P2nB d, i6z}$t䶀#GH9@1m@hcO猜:[k#l䬙;~X&m `2Irӆ˲.јP>2ȮmN9)b; "4*H>qQԐ}&&ѿ:'thOBz((((+3ß-i_+N<9"֕^p4袊((((%BU}?AQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUt?b&Q7 QEQQi[_󷃍 1E|dgii6e=R{ a7l*XG\m(]Z(@ϳ͞WRqӟ~UR8g$|^X'ңZ!?yA'3=\wЂ=o@|gn-sX\DH.X[#1vnžlIn~RAoŮi䛌 >zjѿ:'tKs1>[K!n]B&7h/K?O v? ݢ.!?G%'hvCMh + 4]B&7k3ß-i_+!CTu v|0L c?ƨ|=2Z_I䧖-ë> ӽzu v? ?.!?@V%'hCMnX_h4Ea]B&K?O v? a񦀤|r8Q'@!RM'6,Dqsh z38€-pph3( jqt|7=})|emc?t1x9?@U?:}"uEES/_Ϥ_ U?:}"uEES/_Ϥ_ U?:}"uEES/_Ϥ_ ")$U5SIel(![h/*>Ə:}"\h/*>Ə:}"\h/*>Ə:}"\h/*>Ə:}"\h/ʮGޝlnd/@rn zZjBozEPY'B*K}dQ 6[D5$9}JGle tv>9dƇ0;zUY)J4l(OCt}=#n?u9+:zGG!:A;o !cw*8Ƣ±!Rv'>b .<xsW.o%LM&7;KFz.<-o jgb\<BM1ntML12F˻mzgV߿퍻vwzQ-FW/$ܖcZ˨\=yNfav''<)Sxk1Z.R\eHc$ ֌C! 8hpB,FiI.č=NNdh6U-s!v:Ӈ@E˴7 9#*gWXDKx r9s>jO Xyi g""s\{͵7{vKU@pg>szNoXm4=3<; i6M$wk)ȃc88Ɍ~w& QV20W5(]۔o8S9՘mr(.bKdiyv9eX+o+9W*rDd2@$6g/ZQmY070 99cYO x(@U;GAO>͈E$kv[wu,}Yc(nxݞ7t86,6w͒Fsz$n}04𾪱\f Լ3 =71Kh6d ߟsԷVBtYH}}y__HOCt}=#n?u9z#W([v!C9^pxՋO noE暗R/&ܢ cv##G8Kk}y10*H~hv64'OE…IF⾧*jvJiH0;z{JÂK٠M^  9L/O֡[,$u[IQeTq'O\P#70+:цAT{U@E{]R\zT׺Djyd( :mCI{5X|:3zn`6 qf5;d; 0wAUi?P@(n?֟bO >i?P@(n?֟bO >i?P@(n?֟bO >i?P@(n?֟bO >i?P@(n?֟bO >i?P@(n?֟bO >i?P@# GާeE4r!XBozEPU/uCZU/uCZEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\6! s\6! K7Zf0 ""3g`4:7Z?`4}{I|v?h{I| '@{xu 'G-紟goo΍֏-紟`4:7Z?`4}{I|v?h{I| '@{xu 'G-紟goo΍֏-紟`4:7Z?`4}{I|v?h{I| '@{xu 'G-紟goo΍֏-紟`4:7Z?`4}{I|v?h{I| '@{xu 'G-紟goo΍֏-紟`4:7Z?`4}{I|i'! lpjBozEPU/uCZU/uCZO4eϬ_M 3 Ti7ǭF50Lӿ?٠ =h??٣#֌ZtKqgQeϬ_\#֩eϬ_v?@2=hv?G]|̏Z2=j]|c>4s#֌Zc>4eϬ_Mr}yec(UG4s#֌Zc>4eϬ_\#֩eϬ_v?@2=hv?G]|̏Z2=j]|c>4s#֌Zc>4eϬ_\#֩eϬ_v?@2=hv?G]|]VfⷴU5K!G B4HΚ%8#%Ed}757Z=G@S{#E]ZTEw;O0bcgh%ުdH}D$zSa?i}!sMe1]cˢIo"پKޡ.yI{s2 <(sm#+n` N>Qꊚ^% ED 9{6 5ܲi,؀z_y/!p2=I s+ oVg? N>l.o?A,PҒktgBc_Sע;b9!0~PWky'FUXq%1 3WzWsۀK H֪ͷ 4jV 08 hib1ƣU?9-D7ȑI+#p7m t]i|\18h?sysy=G@>?d׷ JpGp>TC)I#$f95[79ǝ>5 HWPg‚L8o[ ۛyU #zc*?hW9ǝ>4k{ iǮE0FHHNX~V4+0q@}74}75_psC̒G@f¯'&Q7e 'ITPC&(!@{ ]c֮yC ~[ݟ ?}EAq!K?$jSr (:$j0n]ʨ=>s*V|f/֯o59XIL'S2^ .F.[4Ir2?|ey{:bx)9lgz>~.#MstLfsbHY:G.,,ďo,{߽P-`cp=җZPZ%.e# 68jQ@hVd eS :`!kjQN(&m=V@sSbl䱳(I<9cb( g-Q TLb2~m3 ;eg 6Lv?m@)Xa۽8=? υzυNo=db`F+`מEbnG'QRm`te6:ڢ1$ЭҳZ[;c暚[K6OAB?*ݢ0Ɓn[KeF1Ǡo[߱Wzm5bخUG=3rv{!U;vԒ4Rch;V.n![;` }ܪAH+5t-gnF-k@XZ (X E#p,&.|y|C*H®xwB%. ] `] 6^tqH,YU?QyUWR?ZT?)g-\(FC^-y iRA3^C6\qCg)c;5WFԤg%Go+Qgl(~uXz|{--!9T*݈|?lz]"z֨k_;oϲZ ( ( ( ( ( ( ( ( ( ( ( ( ($oO ]Vft} PuohE?܇ER"C֢ l/0.q$^Ҵ(Fe30Z|.Vc8ވD!NG88Fn8ٗc|=Kik$2} pj2LȵJ4C\2 ց{p5hԖfÑ; :(>r UŃ8?)4h8G9ZtE ʞ3$B4-6$;:iE2#P@>B@Q@O4w ġ4N>rhMBMUI(TbI V\>#^9-БZEgKs2)܄2KɉA~?x@\̰+Rx_7%fm;<Ut'ۮf$kMV?[Od ORU*XhS^ϰc?I5N9l^ս*9;N9:;l`7*G桇O2jg:fej-aE]*' e7D{vGp%.p2:^'m|'^)`P @:Fnf$d8)], #9GZ| ^&.cmi":Y|=hqA$۵1v?7$E?Jo3)%ZkĆo- )fnˁP=4Jd\sPfm8XczzN#dqgqPO&-4r[mʗ !C3?J֪%yW%ݹcAM;0S,PĹ #UOjL@,*@ӓ@n@'PɦIJW,spcŷ6ª6'4E|`CgTigY{g;qV9WtNr+k%c'ǩ=[VRc1Ѧh $ ^6=4Ei `J$cig-WzP4FS ITxfB ߅:})`O&Tn,%@YqPWҀ-}g f !uFBTfˀ!<n;XlX9(1Xیt3X?Rn$w-\+acfYI-qzg+&;ViB'? ҢeHq=֍VL aY]* ׌ϭ9mfFݣE!'׌ IA`ڕ(cs\XO<ғ ܂3Ƿi qlrvq؃԰ڴs,.O @(ro?aW<;! &sfsÿP9((?5kVG wՠGSoe*}O> wzI?3VO ժ*ʹ7FpF?ZN=TBjZl\@j#q<[_y&HwzSG,%R%v8 ,%caȘSk/İƟq! "֭-ⶸhD+m?urܤ`.zC(e 2X} VА Ekb)EPEPERS#uPNs@Nz92c- 3^7#C+ە8G=k/g*A}I'j* ufXQEQEQE#ǺWB5޷{pZ.3@,/?j*orYoBC1TʤG֪-䥔0/Z$ cl(N2ryQRqnCCbT@v(II9,W H\XSdݝq18nniwƁe nFl @( dQ7s.zESG6Hv9;sOգea‚2 =@Mv'\kY\6I#3@Vp^DP y`>^LeEbE3rsҢR19RF =1=+F +*MNEy2:9)/ `8f4nU08 $W %"psu==@Vt`NA@9?M 4&wP9I~?70rT _(EVWY^#;Xj#ݷ>v?PP;=?UWNOi'jy٢exqLvü3!QXeo?6MQL|EWFy;p>Yo'qVJ0tw:kޑm2(r 8q64HY!]%j!'`|bIJMXSQmܳETQ@W77F3a|P'+KNby2\ۜAXAtܜ,_^EKRkm<6K/|(l Wbh-K3I?$((+=Jv5K: mb3I;3S0+1EZZ&4' #IʷNigoemƿ쎿Z"PA8lexZy8'N}{~I TW/eo^(6 xs/Mk8Fu4E0] h(( =B-CB_տ?o+?!u][f~!kMS~!k[S_@:xoNiՠÁVEĐϮʒ:˴m`H *s${.nd9notVGK$80$NN?*ͥO+M*˵Lzcy)~D[w9/!sdd1sTbۀY'|? lWK-D=H@( Qښ Λt >0 tUxnLmͤr81MX*׉ IK3z`gfׅ~V,KM81@;Fh˨u*sH?T*QmEh [mʏ'23>8?@{ l.Hc*5\a@ ~$.@ aBeHrr@"{ `2?)y#NA 4UHS8ڠKq}Wf_8 TUf y0 ' |w1!EݜAZM*!}\rU8®xwB%t4QE?uFjWmOݷNOi'i:X0H.iwzI?3V AS{r:͏,7T#= ?Q)LYۆӎqOB/3p3Z{HI c\P?dO2W,(6q2K;l?*΋s/G֓χj8S`j*& b{xJITg_#RPP=4Hd'#=4YC0$y8@8e sKri1(6St{3ۆ3NHz<'ZD*cnM%!67<0SՅubNJcQKn+ @O wujP4؛,O(&-mQ=H,I>EVQ/ܧ9niOim͞3֬$ 0aJeg[v[)jTr9'ԀHp}hH®xwB%SM*!}\rPCEPY^#;Xj֭ex@]aѫ@v?PUۈDlAS3)Y?ƀNOi'jRӣ@R;R6I$ C9L}cT 䖅R9ϿbY9,s,Qdn"tex5nVxD%Q@Q@G,fIM(mۆtQ*K~am@|@816:phD:ĒWcqe4P,pVݞT  ;?j XЍF{hdQ@U["GjNP.gP8lY<̓6[\䷣wB==N|+PA+CǯsN<-HrJETQ@Q@7{pZ.3]ǺWB4"Cֶ.?_y_|Ktj7^s88=!{z3pdr@.3| &7!ig L4WӡX$IY<*1ǥE5(m)88 ?h` #0 l~gRGMXqIgݜcdq޴hF\ZtL |OGMwos;cR9CүQ@Sʶ!n T2U:Rj̲er]V # _(N?70r@ Q@ex@]aѫZ?uFsgBoT/TgBoT/P= A#Z"kB dkYV" dgTԌHpph \T(1>j4NYB:|eO'ӽjiୌ`` u%Մlel d\Oo[5ufQG;Vh@p*ۭ?(_֟}~+I4q(J4~GЗ.謠 *N~^A~5g֟}~q/523aO?:l2׮e:1ޥuAn? ~e}̊w! }^)O CV(7o*ۭ?(uAE::4nKxv_֟}~,V} {4}h۞XuAn? ;;{Ssx7lGr*ۭ?(uAVD$(?ʌ@^iY\Aoܜ~b囩SwT*ۀ L3$KtosO >i?P@ԤW@@3/ {SS _}@rfs3V`GZݐr O: 㿹 ]L`8 $W %,)לaW~i?PGۭ?(m(U zOSC<0c;H#i dڟO >i?P@# _(mq0h!2B?+GÿP9((?5kVG wՠl^Mj%Ŝ8~dFcS?. 4C ?_ xs| c'|_BD/յwc:b:,N>JdJ)4П'KzqA?7ߔ4sϛzh}=#}C@<F>oѪA?7ߔ4sϛzh}=#}C@<F>oѪA?7ߔ4sϛzh}=#}C@<F>oѪA?7ߔ4f{48;`38 c{ViŔ/#iDυFvvP~?uo*|nFi?![rT!;tG1pͰwùоy=((?5kVG wՠl^M=p*^M=p*"kB/AЍhPEPHHQ@ [{Vu>8ɹ++}!-E|NYnr7;W<zw')()BIR{5,0VV'ktTֳu=sU$ Q߭P\6o:g㯨NNIhtz+i B[cewU?+1Ԉʆc(@QEQV,cF,k1d=- l:=n ͢emH%I#"i}$NT).ThfY*Š(( =B-CB_տ?o+?!u][ؼ3 Q$iz(W)?(u=v?Em@?!Eb;?"GcVy??[tP+)l/n7V~_v?Ehkj`idIǍuQUoۿ ſ ?!c6zoƪ]iv;M E!%Hqh{)^kV)rTz<__i#mg.t | kN-!&Ubr@I{VXeͼcBfBHp󜁅yQq;!j 7CX k.ccK;,i2Tp9-q{4nЧ21wɴEPh*I\mZ[h6%4UL&2҅AtI8ّA$˓-6T#d\dv Z]|IlօY$;+cx郎.V E!<\{[zUr[Eo s^d/2-+˜zVs$I~`H 2p>}*] $&a-oEUQEW'C>N:klM҃)݈ϿY^WFz8<_·MYREFdXϽP} $]>ІkoBqʹ;? Q#Ċ"̋uWD6pA*Swe*(*ՋO,޼UZdH4l_"'oB(V˝{1EG}:YǼy})w0iK5 Q}A$ɮu/6Ha@fqL}VԯkD,O BGxat ,I!$}8€.^-k#6nl;\ qq^k_sӢ? :+3ֿOTyij4;Z ?Qk_sӢ? :+3ֿOTyij4+Zwφƫ;_V:SlU<ȹ[c1qǔ;v?PTmI,#3^-~+[2rO@:wzI?3V.81~L<:૫˨n,ƬBO89Ïϕ'sH)ћ|ޛ #%Ts޽MGhsu$d5Oie-@ʥr;/֖It\%GoQ~BC2zz`aY& s(Hے~«ۼG3nUPs׮ER[\IW$GZvkY\\Vݑ)޵@Š('K8 C'>5h|P]ٰFH{籧d$Vc =(K3/ Uwu1;&8fZ^kLق'}q,]F{@r17/X,}]DH )c,ē8&E;R iL?kʡTydgPFy,0 @W([j (Pv˰OICBͅ2Fs=6i/:Nsԁ=PDb6v$gjVOﴓ'_i9?_Z0+{CtS\`ʞ폯jѽ}6 .XW-rX|0DjPUUD"Bm>~USE'|2\1 q@U{G,@?+2m'׊@Q@Q@7{pZ.3]ǺWB4TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?uFjWLڥAp3̝qG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P IG$_'%P W*Ldg:fH,OJ(`p͎ q׷v}pV3E endstream endobj 159 0 obj <> endobj 160 0 obj <> endobj 164 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYr" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( *OO`n|̍r=Gk{i 3 \#mlJoܸ9 'q@M,ٻ3mnjs:uvM[1{$ ~7 ڻW$vMgXis&_cPU*3Jn\=(Xi$Qwc@&xvdY+uh4SUkYZkRI1=e#AEZoanc$s:9ϽΑ{ >q,^yÒ?*\Ũ Cj1C\'#̃ i끊ƑUΗc;\k6nae(bY!?1eR6w q<Εk b{ib.1(@pq8UO[Hn3(2nǏU]L}fqjV[g[-zkI+?KH?w'+((((( 4˻͞gyvg8nU/b#pd- .8S56Zoki#EbT?mk|ViFu.IbJՊk 'ƒE4j6EAyoZUW1Է<di7qHoޤM<Gz4KKO$ioR& I r#kڅh6S0TC⁨iW\R>5 $'s)@0OڳKKO$ioR& I r#[5U&(F17$z}G&oKo$+8LXRsq' ҮhKkɡ7\ iӉ4aye>9Ft. C8%Vu%ݺ[7ݕ4r$:0ʲ=sSi!-d6J] RtڶxtءKDRC$r9s QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEAyw F ʌ!@I$Gg[_}zIF˞VU?:reX:s790܎b=˅%hB8e+<ǚwd&Oh.p02+28vOp -LI3r|PgEq7wWs=lii3n7C4Vpyis%a[ 0Urݜ@EmV[!h' f^K}>=m#r0C29 ֕# p ȧ9'z=VIg=-pnR69sW5{֡hTK>ApjonP8#iX/Rdߊ_] +lIRP$)x c9zijtI,{ ]1"ہEQEQEQEQEYX]H H#i(UV[K=4Bs$88 @\7vjfbmK%p=s{m^Mn>a6ܻ>LKEr ͨoVFw<CR}$d1YvY U V|`w 9e +RʀV rZT] {;`.]\&=-cڼ)G= Z;%\>s2;oEq 0}7G?vZ2<|E[҄[HӶmH1=zPQE`h?a,`ha힙oEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPXw-ЭuQ.l6UoB1ߞ;Ow/Wvܳ0mʲ39 wx*( ( ( ( ( ( ( ( (9{TQZ4usX':tgR&FܮW~Cgx rEw >!wݨ@Z$ Ip8}m3 ,RA$2y1<=허m"=~gQ`\8 B;AKwYuەg;ę۷=qҝ_~=ݤ׽h$Yd(Ud`|ۀzz%UZo'sRmR@^SOGb.n|4\&Y:o\3Lvx۵IqaImD%0VX9_$=HZUdc} /DuO6 VoHH~{Z/,7jb.ߒ=lxh"22;0 C8tO4r[Ԍ  5]2^3(sԇfF{Cn%w"En*C1Qӵ0h^! jRIǜ#i>%gfc܂2۴?iǭ޴CK4&&%1#8ޡXJo GݵƄEfR@yRĊ cl|JuVdU.]^5\$7I$^#2C^e2^{8T Z$~';zJ<|QU#8 I^A'4( qO\2o5nHu!G82jg~_jܞex.>jrOM>-H NDYe(?s~$|IUԭv/oiZFmw̗{DUd$⪗oGo@|IQK="O*iZFmiZFmw̗{DUd$⪗oGo@|IQK="O*iZFmiZFmw̗{DUCuzְMtFPI 5oP]"G۹_۝NP華sNa8HV#1]O&ޡn$*O.dF*B:D.sd/>rk; Ojg8:^j0iIX嘴SZXHVI\c"2y5!a}1Pȹ@/cNKyV$xCǯ+KH>BvtҴXh_̗{DUd$⪗oGo@|IQK="O*iZFmiZFmw̗{DUd$⪗oGo@|IQK="O*iZFmiZFmw̗{DUd$⪗oGo@|IQK="O*iZFmiZFm}FcH 9$h u7.<;74Ӫ[9r 1kC&T1#:w!/s@7l?F.?Pur8e4hoS7e4hoQ`,hoF.?VgF.?7q[jX.?7q[hѽˏUvYѽˏG\E \?oj(]oUvzeQX!EPEPEPEPEPEP7mv͌VUKw _I?oxO!DIսAa˱GJiXHўxY 0GOh_Gˏ?&,QU'\~Q4}OhGYh¾,q@LϳiNhH }8-/v_Y3d۹Bd q@Biv2 @`珻3Mt&fN6uRe?Pp,̓_@yz'^>é/dp'h/<g.?(>'\~Q4by?@(g.?(>'\~Q4b4WWt\c8My?ypG#4NZ~tnۻ}*XBK>N02}WHsu&eFq4y"gkc'oL0OMoVݻuTe@84My C5@XaϧUбRSV>?_?MXqfФ>'\~Q5Zkm]^0HRBAozw9y?@+ ~wiVˏ?&/2:BF?(M>)IP zh:m#$&$(((638c7̷ˆܠ7cQ\Vr,aQCYviF]F9c2 W2FG?—1q5+ p)(/YZ)32<r=4䌆dW7h! l O֧tk^Gٜ=zPK r,n I+;N~!hsܯ pJ ̱>l46p ik|kr ( ( ( M봶FzZgv?7)uÏzPN YmŎhXlx  C{iR H$c@ CE CEl9QEQEQEQEQEQEQEQEzeQX!EPEPEPEPEPEP3vK2EB u+ EwBQy?5GK$Ad7=ݴv7,Y2w5c햿*;[

l3ԒTx?gx|͎t,$nfoV1"H"o]`&}(ͨlyڇR[9 {|[n*9ucGE@gq}3@yڇ??ܿMY{ICY~q) Kj6? v>~hO/W v>~hO/W v>~hO/W v>~hO/W v>~hO/W v>~hO/W v>~hO/WGQ@v>~iRkfQeƝ>:j2[)qyKc_Uwid݋3C$k:- 3rotPLܵ(Ρ_­@3ro:- ETΡ_Œܵ*S:- 3rotPLܵ*źbvz~ǻC[-ynQE1Q@Q@Q@Q@Q@Q@Q@EVHQEQEQEQEQEQE8Q[z_-aҡ)Wssb@u/Ru&s:&&].:{4^tr2&^'UZYE,H% 0r@!?mހ9?jh> ֺ(> ֏jk9/jR{[፭j G#rd=q߽f\cI% f\YbI>jO_iɥj1SMHA/Ndžr .3Ut6'3. agUG5__[W2+`ۅ8''p*kn>bCO$˺FMQ~:(/Z>ςQG$N2lTgTTV͙ɍ_mRۇn W|`ִS/`{R$V<20$cڳP6Ll95qd k[v~ָ-_Mi-ĬWR$v?̹?²dbtO?6[.̹?ªh~th~to̹?2 i? i? 2 n%6FH#=OOΚqcY,OKU̶;G1/aTNbѩgjt?+.,隸qYR"b;n~=SEq<02&(:nmy$ gRR֢gC=.KTAnFiK`r1֪gC=.K@ VL\LFOݨ [SgC=.EqmkmfU'!?9 `PzcO/œP%&xT[Şh+6?_Rj O>_ϴ5 2;ꉀ>54ӹ-4/|knA e--c2!LOqO4gC=.1cRNKGt?*3!W|"rRpsGҾEEqMrnOyzc2f9ޜg^:rJMET·z\??ƨsZ68U_:sht9U·z\??ƀ-Q(@7rO%p++0;Q\X_&QXzs}u ¡S.һ9zXaakNfoN[QJ4TQ T*}e[KEOXHX (NwQEQET=F{`7|O] 7|O] ESQEQEQEQEQEQEQEQE`tQ@Q@Q@Q@Q@Q@-\s嫟TVʓz$i`U?\v6]v"+YYA0'>êJ`,J)bxHb#,Hc{K}z}`՜Ǽ+m\9>?_31ؑ)ؽP1ߝc}:K?EP4tqKn1˓gR?ULR|::jvo' ssN0 ؗ~?˻;,:9H"Q sw(7sFQȌ<ӶEBuI;ܪqԍY,F])EU0N(4*ubMI?o ?Uq{g?y"gsne7' GO¡寧"/pxPt2ԟʬ* ^^J@~ЍNy]N3+d $~QG}cU?Њ;FQX;vť]^lkʹOO.KRGE!UEf!EP\׈LK} ɕ/StxhsliO)v ChrAn+PAR2+4iҁr\#(X6;GʣwOƀ4((i0,R3. ֡l 8qkJ\ؼ3AN>nT>*XZZ/Fbb3UQEQEQEIݓ*?ȾQT?Iހ,QEgjzVAUy#FzuUUnՏ\ m61ʂ9mMvƲEIX~fϕرPsvEnU'us9.W`)QE wyA#@ CE CEl9QEQEQEQEQEQEQEQEzeQX!EPEPEPEPEPEP3VCr:LH@>\L+E{tat f[d]"S6*` q΀#hmݷI ŚՎx­IZY1U;H䝪x?#Z4_K<.OK<.OP/i?/i?¬Q@x/9Fi:63> ũ$~x\dNj_ԫHQ 7 =9Zi]+.5!rL$I$zENT(^ᐌmhwn~%|~Ж > ru`˜6,I3\';Mhh=tf+H01OJiR@-;<J(enA>Q_]*Ɲ ?&z'tCklKLSDcU $-\WiWMRm*58TQ@T3AoiU2y?Aހ&N'cy\j̓Ǻ'2(~1JMnKESQEQEQLycEU^Y7:AYM qV&DY= ( ( ( w5QoEӠ1 @QE ( ($M?o_vOi$o@+$E{nrϭtuP'yS-)Fc9=MDV4'߁[~ pLx_ʲPlURwaOҶiE [%cQLAEPR/4?t4P?t4Vc[QLAEPEPEPEPEPEPEPQ\eeƫyQ{r%cli6ÞUo#Ylk[A-,Ò= =k騮_P5kJNQ;*8}ީGqx`KC6ʮ3}zu W4j YyYJ2C1}Eƹ.}8S W,q$ss@ u2( W_^; {nYh[;^6 R}.YUC!3BvebyQfoP-iYٷ?5GmPwACTfoP-bF5ݽ a I֯xxWr(αgiUeϷ_ 4}ofn?>/14Prۯm>m|7?K?Mfn?9Ps>Ϸ_ 4}ofn?>/14r}my|UA 7NrbPu >٥ۏ?&K?MBrofiTIfi@hfn?>/14to.'@UMZhAcT6{8 /s;b~^Gv\Okbmf7H8</A+/"˔g 9%w|Q9%w|PFwxOm9ϸVY!3gu;Xq Uv =+IE%{tW]..7~|Z{K#{a`~fXcc\\&) *:`J7Rtt )Cѐ?ZF}4KYls[h9J|u+g񤖥IhQEfAEPEP}?\\M?o2H|4H)P/To->15"dن8$T~@H% #<<<<[D !:O'b$QEQEQE wyA#@ CE CEl9QEQEQEQEQEQEQEQEw i!i!@d2y=ޤjk iidsn]?&$-& {+v)9&FW%UHt2^5! AnF80=Z4t;{'|WleFc =)aln̓yt۴xְ`դn{;E+K|C0ݸV-:WvdXܳ%zqӽ9/$h;'{ ~AiXwh 0=jz\p4Q6sC`g=rՃQ,\/ ppz=:E22BWieJ}QEQEIݓ*?ȾQT?Iހ,QE2I%P謩H*WYwZ 3)THΠsӭ-eiSqqª J-4Š( ({GRo(o+e-Š( (((((((m&j YfBJoGff$qa0`c,Kn2e1[AZVIe[h'yaв g1xbI[WȻ[d$*c\< ֍At+L[dTY#\\ RRXXr*<(=^kaRkv}+7&j;ɛxM~(f߶ آv?f&o7oɛxM~+b9{4gȦ]zUX Eh&v[TT2n%;C0POWɿIE#G&Myߦ ܛ7QM~*Jwht]JJ<ɿh±ډo/1hJ6r8F`fᏙX\v 4roG?7o𬛍R;yb[z۞ƧҐ]Cd 98ܛ7QM~*!ɿ(s0}-t^ݝHx@$\qMM~)ciS^]e*!cgdߍ8\槴#EO,%,sXP4roG?7o(ɿh¤#G&Myߦ ܛ7QM~*J(?4roG?7o+P˪NmoT6 hwܛ7R3&9SPgd.mdE#%b Zپ-x]ЦI ۯ*]NDQ#Q+Jhr ;U:"~<C dX̬ mQu#Thg4m~q,!@U98LG}Epa-]}$pd$`LZYah jU~f!F@zyR-q,,Zqn#_-cQҜ gd *$v޽:@+\^yxxFH[5Y`4|4-vwqjfngUEsmGm dBc'GJ>Ǯ1D1w:z+WW }=#g~uKN~(fwTW wKi}?;_=UuR*=yjWL '+MsSώ`g[GZI]X0+G`*֭@7䚥M-?VuݪC0lZަG0.xRM=qhMQLG{EVFEPEPEPEPEPEP \Gy 6B}FA:|[!8КU"e W_0G8j)IpXa8?=?9>ҁ8UY(((qunQ b$sw .bd_ F>CV|ᰱ5[PF5Z-5(N'ޔΣHd8?k|эCֿM猏PGzCֿ?k|պ(5Z-4cPV ?k|эCֿ[*cPF5Z-5nIoQCֿ?k|Y/Ax|bF[=t<>7} Oj޵[hơ_ƄgxuJa0GNӹi53&a/-X*֞V&ӓWLlY%A'vu$$Iu 2ǽSơ_ƌj޵[jkKq,M?56}ʱ]r@1zoETơ_ƌj޵[jS1zotPLj޵[hơ_ƭ@1zo+!%x!]ƭ6䮔Izԓ5#q#j6)f~Ϥ½;\4h?/QϤ½?pdz=K}&ma_7oO sK@_Ϥ¶5wGbX" F ;u]UgߥX8[jn\1OU^_H$߹oTQ@U׈-ne$@sNOxUH@m[% nNƻ(ON$jH {tp)@!|](Y?t܍~W} 0}1Sjlwrqր`%Qsk! #6Ö oEPԿo^Ey>߶ ?/WRn#<=K}&ma_7oMQ_1x篵y蚒?dmI3wf>~ںv)r=Ey;-M u'ց75pJAZpUڱ;u;~Q0֜f:Oq@b?b?Xx4}x4b+o+ol*FvraPx5}j Cn Z,=}_o;P?o,WjŖ IA=*ɖ2>`rʬ6 G'+]+##mۆ;gPw|#*9=KnzY krq[dV 98_MHB@v$=9_{k 1Z@ @VEKEbTY=jxRPOԱt u0c?6 xogeEld6z+$UlgYwM?Ҁ:*+Q c3֫:V8 q]ErQeN2Z^0B G>::+k;)G@_$dweYa}FpYƀ:+ޭ}ѽ[o^|"l0?(KY(hU>^^Z9H 0w{T/5*[l[`s׵^XQqϽ zPoU/@ '}T?6_ŷo*-U6_ŷo*m~[ tUMm~[e[ߖSe[ߖ?!| z)'i#|]ry9Vv_ŷo*m~[ `R] rszЭ<I^e[ߖ?\7;>Ț97L(#ޮoU/@kfnJ;EvP یڮoU/@,nnIces;VC <oU/@誛/F-P*-Q~-Tn~-TloU[dloU/@ Jzޓ\s6_ŷo*m~[ zEUr* m~[ybe 29*\ƒʒ(e1'_|?'pP9  љ$I֋c7{[ZCja@OMޟ_Δ0nzSfŢ(EQEQEQEQEQEQEBq5a'qVm%QE ( 4 U͉r"oOtZ{+鳲KA#ZU[4xuA$x|T4ݩ1,\D޼ F s?kt"I-J.[iJyg @9?Qm Pcc}IVtA淚I sϷJiY63O^'pj̩eğM_ߗI՟ŵXTqOO6 c9"ŗ4lY~_'W _ߗIeğM_(lY~_'Yb;uf6,}=t5RFր9HZWq ISztJ]&d[~XQ[i{*60t8psWuI )B89Z|z*>V~6t71%8i%XXG ;Ë^9 lچ 02W߹ޓv| OP?0XٽE4r3q'qNgyUN9#nʛ+E),$uMx1Hx,窊߹-y\1 3~LVw'@G^J e!U@wnLrXº[xb7W'OƚP`_G<V`2|SiN9ڹ<ߧqwVKKw29\' @z="FɅSo?κkDG6@ !s];B0 [ 2r7rc@?49vE.6198vhG7Vu~|]?@ ?&0q_oNUs?UO[jӢ(Б}@4 +11aSj[}N駻34L&T'_jwpMi!\ofBq`ҸQE0 ( ((ڤ:M:;8@ VJxosDz94? VnoGcZiGS;|i`>s/Am::T+)PO??V\+;(b ( (#d2p?@5SPQދE?UAbI!WR$q؎Eb:Ÿ?qM2 L}U/Mf2‘G+Fzf-$E~u)iZ۴cX1̌g8RAr$z $G]x%氎uQ+;qb8$ZA,eRd ޸04:EQE#)X) PtW*x?.ܟ|qOkU6@wUTۗsӞ֕EF` gʮY$qqFWݤrv81R$኶B4ϵCqpq4gXd~U"B͂>-̻TdӑE #eͼwQ\CqoSy`==1*IdHci$`$ Pc 7 .#9" >dpA8Tv 2O8<9@7EBߺ[}(qthVQtƺdP"@0w IW@8;s.L%@'#yZ$B77_e sWct{y&PKh5r 9!wc'#m*aB0SrܽEUQL^LgbǮ(UGut]ВQ`mz?n6/Lwր9N 3K$!i#zgҫk> `rjF@__Κ/{.q ghZmYԜH8Z߀M/#Ä94vd2 cG@Q@Iݓ*:/'P,yoY$v Ku=ͽ HO'sj񼚓?'Jɞ\֣ʆSͰϵYǥo"\z[(XK$ϯJ# [ x{RF.=-/1<lsO8u2ێ}\\z[(ǥo"#-Ɍs`GlT'O̲pwڭbF.=-V{b!2ɑ|zO &ˍt8|6*.=-b@ER 9\9JW/ ӂ8JKoEPywjc­xQKoEIU*L\z[*+m}>$}. ?&0q_oNUs?UO[j* gv&=v-A` 1~Q(\b4z`8򨣲HeUbgz~حcABs~ EEp(sKcKES$9WldSa02N1F)\sG"MV UDe+(cm .'U02A׊WXWtb)QEQ֊(۝>Azԛ61֝E@ְp9mcHasn82qҥ]P)!w@ O*^ؠ1lw,wn5::ȁу)ޝ@TQ)h ( /'Tu$_vO !'rO3˿~ $jC͒ǩnw? 'OS(̓LD*o-P#(ڣDwFX!~gߏ'OS(̓MVF2*ƪ &# 2y9? U?M54!`O;AVMU?aoͪޝ ?&0q_EPRC(Mʹ&LHʫm9gj=ƅG9O_dp_%;xHpY*e'jёOAPZ[yK?.'' QEQEQE!\77.O6$'i21MԓR.}dc#_0|# NUs?UO[j* -\WiRQ d8ubdI`WS@ C iQGKor3):)"0w%[8>NKhbrň pIs/Jg۠'8C >;b1'ppxjU]0rp'aHgUsO€,QEQEB-@ R1 8$ge~fgX& Cq#bz``RJhw̠ϖKr cTw F$i=~?ٰFY`N4VpOPUsBOր,EUwUfI`9p~*D8$t8?vYvm;S⽊EBw.*2= ҝ8I˩rz;Z\ܭsvh{k$k4,0"hRYsr@* (0:SZ' gbᑑPf1u^C2TgքpYrBOVgdnMÒdt-*SSO-&*GE\ͭȔ۸QEwQEdnQEQEQEQEQEQEq-_MXu \GՇ[Gc nQE2B((( V_yT=q[}ж-Yq֕fq֕!TWZ8e h6GAJz9QEQEq )S Οq )TMր'aDQI'V]ڿN?NLJ_8"%jŵӯ/y2TI#K76^t ӿNp2K>n\:AG|̼g'C;+#e-s2{qTݯ9\9 = 8u$Ҭ0pUhp?y# Yq27r=:OƘ0&E8=x2L8u+&Gx?fcs,+PrCMIRBBH$DIƨ m=iя.2–,}9 $~jH 7Pd!>x-@QEQE^|"Ux?4Y35T6ilPI*QIboͨN(*̖vrC̍pڀ,Qg_[u%.AĞBm vo.eFH D eHi`:z(Q@Q@Q $~Y>vpAX[kGUm.IET*3,𬬣rqV ( ( ( 84W4!H|vp}j͞8}## ݳ6uMJ?##- ( ( /'Tu$_vO 1߻.i:/Tu /t͈!_qW:^X?L2Iڤ{U-:cCc$nQ[V*Yݘ?tv㱢@ʀpzV-cU`L Z#}IOSB(h(((((([!8Кsſ (dQ@Q@Q@q*{*e UH?V/slZ5*Ͳ5*C 6Oj2 ]MSr ( (3.?7ѿ*ԷDxhʼn,@PI?VmaSXvNj%.NUs?UO[j* -\WiM4,Ti*0nGҀ&/-嬖?1w7A4-  g?ʉ.#!Xaݎi6w&5ΜV/7ifݡ{${!h@9Elʐ]EX`G˖I0kd|Ż@5Ŗ7B:r w(J),rEbv@T/s3) w@ q{,RYo,;=:ķv{ E F]b`%a'<E4!{_΋$;6'BO5,Iyh#K-~aҀ$˟.E|us}QP'ƀ&[T)' s Ȼx>({B nӟQ-pʳ$'< tQ!G =i,l,|WC3{ܓV6d gOQ`50N9>YYqLKy A=-Q@Iݓ*:/'P5/0<0NbEb?V_h1+yBX%%y'zb@0AB ItsTt&ֱ 0 }z۰Gv8PĜ/^}tGcnPvҧ M>fɄ,QEEQEQEQEQEQEQEBq5a'qVm%QE ( ( (-Y>URUnA?Ǽ?/^BصeckZUo4p)jm稤2_Q(=/=_'ѭW+3Mm>|"5[mb(mb(mR@S}BI1 G mր'&3"FELYic1B?29 pzsOJƐ1[\%^btC}jjat/CRL/qr E4CVztV|x!bBFfv%b Q#B(*8#(]ݜ3 >x-Q't ԖAjբ((Ab_P* -\W[ӿg\Sf+ڀ4&͌q r?V ! oJESΌ(̬?G)(IUv2)'nP1B EfG2#.v(v!h͵t}1 2̥O$yZ4P[Kfvr'?Z*Z+N$$m [i^`Vh Q0M^1K$ɧ@Q@Iݓ*:/'P5_'C~u%['j]oΒEoΊJ(( ( ( ( ( ( (8N/?&:o#Bjí (!EPEPEP/ʪAʮ驾U'q$j7!@/V/sld1KZd'weq}>em}3"-oem}~=Kս.ڹh؟L>5oj[O Ȣi3R[?V((_U|]?@ ?&0q_oNUs?UO[jӢ(_PŢ Qi RͮYpvqMol59Ti!wRlRv, { 9èXn8֤VGqlѧͽ; @[(((ky I;>23Uv/3τq"T!173o"ayڒ1-RGq2b8T^GqNpG@qV#][y62j ?ֿԶ.EQER3R@P2I)j9x~%* <jy:ch֣.HqR3"|Db`J(+Y.. i@a'oׯ$•:̍['qO,n ` OLAEPEPREdw}!Iڢo"?TUv0EUQEzeQX!EPEPEPEPEPEP \GՇ[-_MXuv0ES$(((g2Hi''kg4d;?餿ƍoO M[hM&4( ~yF{ՍoPo/f6l6I>,fi7og4.[E_5ӟEp:k}N @'VZxz,5ӢU,S};@R58;d]k2<,zGS& ODt8}6%e1Ҽ IҧK>Y #,y@!;hK+lϸj[k-X:b,QEQEG Eb>3R[?1>x-@QEQE^|"Ux?4Y35T6zwКP1fȄ2e1B(\@wMe?J{.uu*4ӌ0pq}0(6&CH:g sޓI-b 8i}۟֩Yz%{wT$mB2={ԫbOȪ˹ʳ7w€A>L *IjS9$cڪK&82m#p'/y z*h(m-}SP) #-f :A$۷w=<`y!A2 O@U3 lsMSf<@lKߒ>㵘OʥIg׭GsКMReذj?sF0bnֳA O|uހ.Y"8BP#csOJg48 I>v(*iP) X`OJ:#dOVW:q k/񩕷f&[-k`֜D Ar?^jtVF G~g<7ȑ Ü@D5g"[nH[Bt#,QKrp:M{+'N}jhd@˜PGC(Ҋdr$C@#I]C5%}CZzO-EPEPU*W>.NUs?UO[j* -\WiEQE5jIQK$tj{*4uQ@EQEQEQPϸjɖx']ڮ.6?̐X~W.lEbwp){cҵm, ⋃IES$(((77[=:标TeR6,cnJբ+#(("EGREdwž$mQToͪ*;Op* (=2(((((((o#BjíN/?&:;Kp)QEQEQEQEQEQEVP_ VP_ $ (`QEJ.[9]?ZC&_ >Jd|S ~euU.3qVE{ Qeh߷9lc<-#0 Uz韥XDrwK+a8IEQE ؅$Ec't ԖAj}?f? PQ@Q@W>.^|" ;AVMU?aoͪ֞iVy ~i sm@QE\Bn?Rgҙ,k*nӭ#Ȱ#RH2r:͎VZPԓ]b{jk>;2O\(((1#8;Mfq*"Drv坏=iV ʂ9wd],E[WJėPGjGZgp5UKt$k[!$aTqGPj$)QE @&EsN159G\ -YҮbB?:ms<ן$jy]-WDe%;UTgUWۡh\dG5``tP(("EGREdwž$mQToͪ*;Op* (=2(((((((o#BjíN/?&:;Kp)QEQEQEQEQEQEVP_ VP_ $ (`QEJ.[9]?ZE?ljTtͪQEQEQEQEc't ԖAj}?f? PQ@Q@W>.^|"1!H#i!hW,!D9ڠfhj?#{N!U @|ᑍ~qPI9W$rF}9j{WYexBzH|!عec޴( ;K6]nTx6 ߟO^*CWbIIT <2MkQ@33)$p}jP7*@늡mg,1ۮUc:Q@g[Y P Ig$d֍~0I q7l~GOn§\8 Paܑg}jAu0M8X7kJφ;Lxݷ6q;iDX8֯Q@(FlI˸zc8Hykc~t:(*HQQԑ}?1o"?TU-['j(B(L+(((((([!8Кsſ (dQ@Q@Q@Q@Q@Q@7vCjU7vCjI (Q@tN_ְ:QkO[/گU?lj@Q@Q@Wvx\ R`-7מQEc't ԖAj}?f? PQ@Q@W>.^|"2m?ZǴJi jQER1 '-WB>"d+4[Sŭ`&rG`=i4ITvv1l0/~Ux_~Sx7ON=jI7׮Ѯn J$g`3'5Bh.x; lzQEԞQD\8Il[4$NHq\M")lY4ȧ3Pz֛SJnqjÒKDQEhHQETg8Hd@>y|m$k:}~&M܍ȧ5f-2"w N=fHʁ1֑ɻ Ԍ~ʡ ( ( /'Tu$_vO [rOK}!Iڢc ((( ( ( ( ( ( (8N/?&:o#Bjí (!EPEPEPEPEPEPk ]ڬk ]ڬ@Š(EP"5ӟEp:k}Z6GO[/گPEPEPT{IW*_x)(Q@I]C5%}CZzO-EPEPU*W>. _V??km/Axm^Tr~~ I@1 P;hET%`Kx{[n76c:cU{/ʐIۜ|bk@@$b#8F?/΀*izt{u `m9Ӭh#h#A>jIdPgar8{yrL(*=vy+ Ū+(_YU[ q~=ܲ:PAzN)##dadjo Ҙa2 E HVSrĘ,9渺*0! ~hEQf~cWInfE]?tw9#ڧb#c%꧌zsjMlJ :RD.#EP@;:+ q88ւ.QYq\;l9nqU'|)9ZE7)##r#9-ͼK/&oʍPK/&oʍPKSctUcL~"(\}4ԮbHNyZ7+!  `V$7ZM}ܪ1* Or;~45, jzq@]Gw_߇*aP>u⩢pq'9Ъ_ ʀ~G?U?7_*>u< (P.nO ʀ~UtpuaQ3w_߇*~nT}x?@vn3 spZ@"?UIaP>u]Gx?GnTϵ~>uaQ3w_߇*~nT}x?@ ]G@ 'QqzTaQ3w_߇*~nT}x?@ ]Gw_߇*aP>u4ҙƌ=V ʮX[ dG rOK}!Iڢc ((( ( ( ( ( ( (8N/?&:o#Bjí (!EPEPEPEPEPEPk ]ڬk ]ڬ@Š(EPH#Ic}뜂qW?m}4mv<J?m}裐=5?m}[_Ge(hO[_GeVk.93SVjz_,OǽW!)swVhյZˢ@յZ?m}裐=5?m}[_Ge(hO[_GeVk.93SVj!f4+Agj92??Zϛ9ۏܯsV@~VZ92??Z?9j(h?PϜhڇ|+U=,mC>sߕjV@~VQ۸66f!SF?֖Xo/r9~VZ92??ZrѺYˏx3U(eD9?ƏD9?ƩG";.j'|G4j'|G5N9sϜGϜT裑;.j'|G4j'|G5N9sϜGϜT裑;.j'|G4j'|G5N9sϜGϜT裑;.j'|G4j'|G5N9shC<':(Ai|Db]!FH-}QTnQLAEPQEQEQEQEQEQEQEC5kx`1@N?:|ZW:|_o~*\VE_/KgYϝ_TQp*gYϝ_:|ZW:|_o~*\,_o~(β;VdUβ;Guߥ E "uߥ ?/U(YXZ?k1w/Um<%˯%ipW:|_o~*\,_o~(β;VdP:6I'M$& ?tY߄ E(b_ b_ ~2'Q2'U(.@/G.@/W i%XTJH6Kr0 ymd2ם5buߥ ?/U(_o~(β;VdUβ;Guߥ E "uߥ ?/U(Y/Qe>v­QEȫe>v/Kj.E_/KgYϝ_TQp*gYϝ_:|ZW:|_o~*\,_o~(β;VdUβ;YXZ?k1w3A GEş/KgYϝ_TQp*gYϝ_:|ZW:|_o~*\,_o~(β;VdUβ;Guߥ E "uߥ ?/U(Y/Qe>v­QEȫe>v/Kj.E_/KgYϝ_TQp*gYϝ_:|ZW:|_o~*\,_o~(β;VdUβ;Guߥ E "uߥ *\,(aEPEPEPEPEPEPEPEPEPEPEPEPEPEFIQ@ 1.OWEPEPEPEPEPEPY}^vէ^1^-k+nM;+FA{=((((((((((4.|u'WDXd 8GῈ5CSe{Ù1 r,b=(((((((((((((((((((((((((((( 4˻͞gyvg8n҂ʰb6ܳ!PkpKu.4\*@>GRPүH綖5i t@aҮ~}G#i0O^>6X#X?\#Wv88=5zĺmM)RdF .g=w6YMVEy0r0@hEQEQEQEQEGRGmsKs7ILj0$+vONLOt[4y,|[< 7>daWˑAÐdZk} y6=ȦN tMi RRV73. s5,,-(,Mޙ'Q+5 e_,q)3e˩n-meĖ2E`u?gFr۞LTéX57Վc*' v5闩 u YZuoiP<{b,BN:{ JpN<"K .eR ZߗP%[xu.Ҩ rzr?1V KXKA#FG9<@Q@Q@Q@Q@Q@Q@Q@U=Ŕ[7}cs>sZ7K5!Wʑs9t}=mdVi r 5Eictv:n ~{K"i6NK#t+&I!)uo%47|x$9ހ5laYYCITR2j4*K]?-F5])X#k~ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (+-O$(]0 :$S' i~iD--1}LT{1Y]QHHt?)cb#4l#?Biɦ> endobj 166 0 obj <> endobj 170 0 obj <> endobj 174 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?u;_$vm|9e'fAx:΋鑲a*o?aּYk,ot+[-$ S8'F8,Fs7ϭt)' ɣL]Bŗp# 5Qa} 4Kz*Km{W8p 8%}k(GحSH^Pyp1bNr3UiUK<6sK"ۧ\sw'4sj2T1d/G ._İZ}9,l`: !|7 =}RmP.m5(,2*?Z%kPKz+-EyZntȹpᷟ}*pi70:[X#T]r ͻsNKz(SCVhbVm=e J+#]jKmن0gq~O=WAKz(SCV=}xLehTjگ$W:|0ɲT(bvڬx!'W?WBZ4+2)7d+)&~ѓOkVo_N>c1i.ӡO%1.Yvqzڴ!Ӽ{wNs޵(?%kPx"v-\X U;T ._]OֿXP$ "Iu?Z?Ec@޵(?%kPElKz(SCV= ._]OֿXP$ ":֡?Z#Lyp]g9_fi?(((((((/id̍-aΐBåsjY/7żW{xM$5Frt@u@_ן /^5 ѱIJ3 ?9U{.XLI8d+29<_ן /G#?_&ZG5^,MOekVWqiFH$YT5%NF~^W@a{kWrBIiX-N>^jYj(y49:ekը)sWu@V/:xr\#;;Cu6G,MqeuAx@R@kY5;j>IQ,H_ :۴- (Ĝ(ʿy49:ekElk̹V. wa7WQP9:ehsWuץF,a 0Gq/ lŀ zG1sWu@V<_ן /G#?_&ZG5^,MjYj(y49:ekը)sWu@V$*9$*sWu_Owm<d+ɟ>oArbbH!\QW#V; ( ( ( ( ( (9/7z,e2vvU;[mZ;X*PkIny֓gͶKWg\=V9C~0Y YDJcƢ6'9 r>՟F#kY?_*$kY?_*F#J*?F#kY?_*$kY?_*F#J*?F#kY?_*$c]H6O(,>ȫt?wg?`W _trI$FI?nj"i6^[O4ɯ-k9 0BAC~G\wj:{d|~(`A8Q%eGj6/tI@U/V_Ə/V_ƀ/T? Y? YEP%eh%ehCkK_kK_ o5$r$ C 1F0<8 Yjj:3_+Hw9 ,pO<?@i_&dxs*(MC8RsU|{Y]]6+y5fŮ.a]E@R. .p%rd9'893jdP_(ʜ>^iOK<-y.7u I5<2iP1i>=Oq@Ϋrreco$jG;jS%[ܘ͍_-H۴ J?RJJ6Vzb9IݿȧA=VԤ7ek dN?$$"[w73 ~cU.^'ٚ&܇M0K|ql#< ݻ=PiMT rK8֭ lH5*b$t* ;~ہ8^&呤{rͳ'ŗbI +9͹$Y[Ö]=_ʧѱ@6?oWhѱ@6?oWhѱ@#kդѱM&nTF(@Q@Q@Q@Q@Q@Q@RI$#1g\rH@*tr$V:f#☭v/7z$QIqXZ-vƤ/MXn~k]2 F,I.-#fE4EmJNd*H+gxg[ޚ~(F73yd|-=3(I6P*a9WU`8N6q7OH? Vh t;On5f7OH? Vh t;On5f7OHbnaUʩmg{%ʷ8h6<AcNfKGnx dt˝;LIsǭ|VGtrQ;uM`qnǮ8(V\Ӭ2:fEjO?G{3Eq"-,rO*Fs'chtR~^t;On5HBg )U-:xRmV:3ր;On4gi ?&Rb 6x#ZDv 6_)F׌{'lPA8pWr@g5)VFxʌi$NI\084eFL̍b?B}={-55:edmL6 TeNJڻۜu15\L|pN{@ Gv@?#jR,A0Hv?U>/s8@ 7OH? Vj;2[ʊp̅A+mM>dfGSXƂ8-OlC I: BX6[rǿ^ޔ+G`ѫ@Q@Q@Q@Q@Q@Q@eΠȶ[O/ Q}qޠV@AhܙBCT7B|תyv S j??6Z4 K; 5jԂw$ޝ&ofCr{c9Z4}X Ư2dd#?RPgڵ hV@Ai@j??6Z5Ef}X Ək֝ca>լl?ZuM/KOr=+r:g /ɨMcڴ嵍n#m'1rzXSD;Kng4pA]F?ksl=C)QC4{}hF*> 4kԃPh3W- ~~ᨠ̆he >ڵ hV@AX]BH9hß}NnV";. *2xT}X Ək|# t1#4m ?Z`Qu;n-\-3Z4}X ƈeߜQDDnvgc9u_R8]dtdSTH#>Eca>լl?Z;If'"@j??6Z5Ef}X Ək֝Eu:q %"Fv Ԁ3QV@AK>eݨc`I D'{Ԑ^ gbrQ}G\i4DO1;UpaMgbA=cW? ESm?[]ݷ~W3=>+K^;VyՔmne/j勒HE&6]1%VsI cG2H()l>uرOX(ŏz@ihCw{}ݏ.7n:*sTc+Q _",\Zә&I`^*/0ƃcfe>TOB/ &$iرOX(m-7&eΑXUGz"V8Y-$rgG,?%?c+P _"X'JEfbA=cW? Eikݳ΍݌#SŏzG,?%ݏ.7n:*sTNMGVI$`yOe رOX*_i-&{Cy0Z迱-?管 .Սź_#K fJǭl@{Oj>ysjc6"X+@WVfd`$6Fp4Me_}jYOr-Gi7I N~b:+=syv;,b!,NW';M_U|ݺia״7y7EFFO55"H5ޢ"׎hD] ͒OZuӉ2 gpqRM-EdM-M-EdM-M-EdM-M-T"kAƩ8Aɏ)1ש'^j$?'G$?'@x$G58X$UR=\>KAqm3[7"e{\ Xd6A<@乖+ ֗ib#1_(O+B֗~nv:8L],ⱑIo4B0$o? )uX>ѪY- e>~sw&dze dm^8p88D.D]Aq~TRfˎ0 /8?Hx̱ǔTawc=Uxh{ _\F?K>eL)sL| }&}A'-m$_'ÿV~=Zap;S؞>S֠ {_˲6ʒtSh0dX[k3H08׎bn.BZr@~v c=8:ԒZ'a.eL(Wt 78g t˅?j)51$]3(:9]ˬ "̋1|<,mܧ*@UA/oʀ6?}ϗ|fDOd3\fLA>pr7ڠ >74}o'j:(OM=h{I}i?M{#Fy.A,zmWu 42{ F@ `H]1ΠfO*#b@&DS3%ApH;!O)U+G`ѫ@Q@Q@Q@Q@Q@Q@e՚y>ey7޾Np?36k奔o׬inn%I|<@&qhٯGhٯGizw1čg 0g/nIepMnuϙz@ ٯGhٯGi#74QhpowUp;2ߵtE#l!8,@@׿S4l׿S4XG3F"rLV\Ƨp:c㩫IQgm=QٯGhٯGkNٯGhٯGkNٯGhٯGkN=wq"TQpq[Nzzb7iX9{ZR;KHvsY0ӭQ9mrI#I 2#M 4t&*l׿S4ׇ[$:3XAMs;Mp?xvj+mf9̪R:De R@q8h5M5ME>s%m!>p?/8GLUwpo~-ܱ$.tϵC^}Mѳ^}MӓQ7˸۟3;KF8֬CvrXcߟʀ*׿S4l׿S5Efl׿S4l׿S5Efl׿S4l׿S5Efl׿S4l׿S5P^}n&6nq 4Of|>khқmː{04s‡ǿ۟G?5h((((((oתIdd_,C3٦<~ AU4#-#_2|}hb'_#j >iYoR%UWR:ttWK%` 2ARCh!x(fB|*H? \{]'pGq!%H~f&{GtMD^o|?x>&$^; >aʒ@_ l.31Uvgzfcckq3JBv+fCѣW Sdq/ԓ %Hʖ+S`3 |srjhZ"+Y(723 ;|MMFIDM$>cm601wHض9XƩ=π?D]L)nDJb+'.naIdd1_a q~etV,IC^h?"o.4YʱOH!E$} \M>&{GtEd͢hI4AcK8d?|MEuZo!!%FF+1Q{Gt=πӪW#VDYdkg*i?Pe1rO0"RK &oٚkI;C杹` V? ֓YZG̬XH㚵YX6ZOEfkI@}cڏi?P'j?>m@tVg? ֓i (aJK(mvkmОzտi?Q'jֵmG? ;ծŬ,@c-?#U&;TG[, ehNH $`p}i?Q'j>dS2nP<^1iEO86Nvu#?`cх'? i%m3\߁9~$yݯ x3Ng[IL?rH~sX6ZOD2j7<*paڣBxzn[9a?Z'j?>m@ݵ>s$wGޕ?5j? _%nj|紻_:q !8^;Z( ( ( ( ( (9/7z[e7}1umߥh7Yk$Zih֫w U oaU<ى<4"јW`0IL<$k1 VI7uq֡TD%Zxf*n@[ZMw4/#sCܤg#P!_D'fNc)/m*LȪ\l%,8@Ջ9*p~V *,+S[HT??3}O&d-ƱTcp?@)$ح88?CE'?1;N:~j k6H,u{c=lb1 uMc#ϥL`͂=z*h 4aq3A`Z3p>~$9B6sP%T=GTȲ3#?S)T 4jWn^_(i_<ZUG[FvQEQEQEQEQEQEqvO#ê-~lcIaKV/7zȳ KvnV 7E+`:tg_?]O/PiCa# $jHee'<𾂦H;n+q<zPg_?]O/Q ]䑄h]DH<ې}ZծR 2ean9&"Կ:?/_.r#M 2]fEm۱9#?P_O/G~A ֝ttg_?]i@O/G~A ֝jmԋe֬Ӭƪ,0Kc9g]%މ7mb03e;W_JB9OFWc⫫9OFWc⫫9OFWc⫫9OFWc⫫9OFWc⫫9OFWc⫫9OFWc⫫9OFWZ?5s]KxA( ~@Q@Q@Q@Q@Q@Q@ݼ Vkc$yT"}*Duw\n ~v[ )$Ill昳n9$gFeZ}/gJzMvѭ͸[lyC.<9M*ۆ!s§k9JXh{N?GTm!<.F|8ck=IܲgiGވl#-;OhP~##jO?G >ӬV :qF#ON8bXPk\w>լl?@,D)[rcqws8it9*bl݁j??6Z4cm KWC%@p,xcw9$UaFNj??6Z4Ef}X Əkca>լl?@tVgڵ hV@Ai=g3 ;a3ncWլl?L]V)K3,I=I 5G*k&է-ko7Q>N1rzD((((((((((((((i^㽜y_e*w(c9r8ֵ5(YOHLr93ހ,/_oc;/Uc{`[w7:]$ ݺ@s鲟ݭʭ'o#9G2$s.yIܙdyx<Ҁ4((((+6KS'X)s8cckJ.lG f2Ŵn c> endobj 179 0 obj <> endobj 183 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?"b24d~jZ4#Ggv8 0OV%ϲ1y7鑮=r}<ǫ"Gs%jpb{w.ۍ/pj?mP bG–}ր+*Z LN8iճ"G %:,"]z{{Mdڄ*E5ien>Lơ1Mb]OڔrG exᓕiQ@ G~wq@$ "kWW-[ 9>i֒x){cmNo- ¶ɌzPxZPu5xȽucP< q2z9Iu?Z?E޵(֭Z$ p)Y;{;aesr޵(?%kPh\xh||ȱyfGSSj6y< o6nE$.IP' ._]Oֿ]de G閶E1`E8ہ 88__Lq䫬Kt0FFv>@?%kPKz+luKl5; ǰ=Lnf5 5M gkǥpq Ut-Yoǿq{wYHaq$XdgSңSCV-k+{L^"4r$:=<WռLU eqmSH9 K-[\GVOڋ9޵(QC+xzF.9n* H {Ue`r}x"9Iu?Z?E޵(Ǣ6?%kPKz+SCQ ._z(c]OֿG$ " Iu?Z?E^ѵ^  kқM6b3tccrq޵(?%kPr@-"e[VX|<ǽY4&᷇Jy[٤V`b28>P' ._]Oֿ]c=ZK(W#U[HFa9[ؾa8U7 s@ۺپӲ߰Cv3;1s]Oֿ] ?. <7;T>\f#ipGNO 4lKps@$ "Iu?Z?EhGeɴ>%Ѥ!_ FGQZ^%} +A-HɎU??|s]OֿG$ " Iu?Z?E޵(Ǣ6?%kPI4ȥH,BZ<:KxoJ,I&"I Ҭȵל?:(((((*-?`RhXRlj*R?jY?y5y3[Gw!9#6~5 :+&"'39:ehsWuס5w7`pp@8"&d# (?y49:ekը)sWu]?]#. 7_Z]cn^EyO#?_&G5^,Mz?jY?y5P9:ehsWuרN\H H Ds a=:uV: m|8ۜ`zvG5^,Mz/{??Zn5X-n"P NLQϿlP9:ehsWu׶&f/ȱamwMqc4h>amFݻq>x#?_&G5^,M{3kP Fcl2|2,rN6gVk7|sm϶s@#@_ן /^5̮S i\qY?2-:20>"<3_ן /G#?_&oG5^,MjY(y5wHүZ8Rm޽{R\ xm+G{ qxfhf<_ן /G#?_&FyLA0jp3 KDe@pwq?@g@Z~uXI\l|,sǯҽ 1y^fsLu*DuPGN.sWu@Rx w;Tf4g|d;Cv9:ehsWuר}//~Ӝc#]B2͗I8(?y49:ekZ%_vUI?憸Q_vCݠyw#?_&G5^,Mzr]#ܘBV =乊I6+d@_@_ן /^4a՘?L e}F(y4=$N_&N /ZWy Ӭȵל?:(((((*_իCYtDʲ̻>b@ 4n =^?^ bҢ,'2qMԿ:?/_.l-<)綃ef![rol#f ř؎f,qT/_.K :+3?RԿ:Ӣ?/_.K :+3?RԿ:Ӣ?/_.K kݳ΍݌#Zi2QB/S?VO~A ttת쵽}Ms{4х`19#vi]I їkA]Oc GTu5a&$$|8Ggo{lt-o٣iȓFGUƷCtUb?. )-e[IHt\ٴ:{vCM aھn>f|3n1=;VN5 ƷCtUmEȚ\ΰh2~A ttbKv>qڍ@ QQ;` 93L/_.K ZDAˡb@v@wG4!DzY_?RԿ:ȷ>gCrF׭G `G)H'->ttg_?]X; (aڎ񪃖+EOnۘg翯zttg_?]i]OAwU/_.[94B6.rF9~:ȵל?:ZWy Ӡ;DQpU-Z;>He@aX0+x# qߥ:Si{mp2V)U+[in'm†Gl${VΡi K) 2[Y|2A<֨5մiҺl;nb4pO\_Es7Zƭy5 i 4Ca#924*T5/6cV4OF0XttV?,i'?i@g˶gmQ׃VQEKUDjڥǢ?5hK"|2A'<8׵TԜ,>\ѫX\Y.znEhyH;ۖGzQMιl7| T+(o# 2?kVliSI=haj[EUѱG[EUѱG[EUѱG[EUѱG[59^K&$ppB*Eq c*dž?{UWFI.])zyԬ$ےy$ʿ@oz֖tĨa[{,)-&I9P0QOG?n~Zr 1Q9;: w$0=/<}GAȸ7;>9={Ӽ/~osfzw]*A(k޸v"ppJsZZi/yH=O֧[Qd^X][6?!)#[}?߿-3<i.^.&7i\NOhgT`9:h_F-Zh_F-Zh_F-Zh_F-U╵mFiZ'DC Lry?i?Ъh4WKpҶ>h_@*wo=ƒE# FpN7{PZ-,V SP2k9nM=lbm/ ́Ng=HI4$krɝgzi43Cw-#(qyn9ܳFD9cqL[[hؽ9͙J/uФ\`0#3c=iiw9m1G|Ã#!yDZHy9&uE>[UVq TdN?Cx'fkq/Q `R2Ghv@?#j9,$};O +lAH8'iT08ad0v!0ly3@9nڀ5 Gv@?#k+Q{阐 cqjҲp:0`=ZuݖZ1kvKdB+q#ʉim>wЊ;On5B+Hch, RN3ךGO/UcÈL;9ʞ{ڀ-gi ?&?G՚(v@?#h$MY+gi ?&?G՚(žnlX&ӎ=Žq20ZQ{TE)]$XEOswqyL2ȅI2rzPM@YkJ8ZtT76G"ʣ$a:P[:{DI8Xmtmsc3+Jwamy qs׊ pvJ31IǵhQ@hztl gwfW629nk)et H.$NHq֍Bm"o/0UG@p?j/GtoZߡZPT5)Tif\ex 35~jZլl?Gڵ jܳ4W0ʗ+ẏT-zoH<'%3sy=_j??6Z5*Q"0&7ĸy@zpF1Ʋp>zڵ hV@Ai@j??6Z5Ef}X Ək֝ca>լl?ZtPgڵ hV@A\%Lm&8iHJN':g=:P?c-xS8̖nb;Fm:uqkGZ5#~^57_EunMl'W͜7Z4}X Ƨ/fE 'L]EIPca>լl?F$112*܌>rfyw0 sd3€)X Ək&, qM^ȡ2yڭ.L p  H" V@Aj??6\_I fY$"ČFs=иt12*ͣk2m$sߧߵkcaӢ3>լl?T 'Nk/Hq'g; N(amH#޿1?"# YO#RޠV@Aj??6uYnmfxWɍe2۰2!:{Ӎʩ>.rJF3q@}X Ək3Mrljn8l0xQ6h@[ypWQ}r2ߵkcampn w$Tca>լl?ZtPgڵ hV@Ai@j??6Z5Ef}X Ək֝ca}Z[9}cW Cƿ~IӸu΃q+ C'N@#؎|9"֕^p3ß-i_+N ( ( ( ( ( Ǣ?5jPT]fq2P ݣݴU98V*ُ3&C+}?NX?4!uMf#Ɩc-9~GX''˔~ 5?4H5a#~Й c'z PB? ?:_&OD#α3hhB? ?:_&OD#α3h;ky *21^*6tQ>"gX?4߬׬kN{:ki7m$2c{e=±/jI}eSgg\UX'JtU2@8IwM.,]$~^N6*{bA=cW? E:]:Y$i HlU  MḺy[1q#p1Ӏ:X'JbA=cWeKtH {v9UU2#}ٱ~ _"D*T6 rpN@9NWxj72yKVv>dV;*OCK, iqmagJHe0=:-T>']B'VV`z1ҙq E[sHY~hWWke _;t Ӡ{Y筕ꤏ1Y" ƙ7+q{iaoZw%ʟR|N2Ӂǰ "yIh±Y<8 Ӯj^Bv)9+,^O@i 'OI?tW? $M<=A$oQ\&߷ ?4P#JHDpAA,.A8Wu?w7&߷ ?4PZ׬_%EY`@$;4`'>*zޚ*uydRCFV[z#-y(r= 77QOJ9<K~gGGO%~RhL+]BV_pc9@ז-Zۋ_)^zӞi(̾*.v7'#5A>P1yhB߿Pݿ>YmN>)hiD.aAF8 {E~o< yvK&J\[r$1=syegjC $7P!B3@ gnX2y&R2t3vOM/lg;A]rvQAownߟ,v6\qJ_]dWC2C@ ϸʦƌJoܱ*FFJu_lneeeE A;_64IuG':P*I !wy_(A}9jײ>ˍm8"gt1,J$+@'vC(3" rʖm"ဉXqx b"W'>~lx|A2ȭu Yx#kN&k 0$1nQYhhkYhhX% 1R|Ɗ'|(>Pq隫jrNG[*޿6{x.T8(ZWy Ӭȵל?:(((((*_իKUDj+IF˙r g#PGy+@`H=pOңbKF6Ȓ0N2÷j%6 r/G]U$O^auX)̝ ~ukkqkmmo&9I6p F E!OH?@2K&[ =q׭L.f 3zư͵(;ټLb>n´íK(Q @'ڀ,o'hDOtPh{I}>75^M,,qv;&Uð9j@Zuռd'E-歰1dwiG9 }>y4-# KnSίͫO[ws2".@z o??=ƛFy%3$mh̙ r;hN:+Er͹@n?FH_PE )3z|}+:K]H/'ݲG&c$3ql`.4}o'k.vdq5aL0|9_nUgu10U}IǶ@>74}o'j:(OM=h{I}i?G&F$DO紟Ѩ >75\LdҐ!Vm oʯVnH@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PK?1*hv6O{Ǣ?5hٯGhٯGj̑!x#"e\@'8zfc=tZ؋p1(ٯGhٯGiW<`Pۿ*dcEǝ9M7JffY|9 R: p{jmđ@87W#Ҁ^}Mѳ^}Mԭ~FP2f* 5z36k奔6k奔Ӣ36k奔6k奔Ӣ36k奔6k奔Nֺu`'u А 榈NA"h>@K-L#iv;?<:s׌V{?7Pi7Z-&_9#,h8:}h5M5MEkHY2N.BJg88ПRKlp8g#(]o&o&uEI2$|FJmDdK*yb?R)h?"o.%M68!hF]G@xF:K04&{Gtfk144+Yw zgcV3|M>&N{Gt=πӢ?D]h?"o./\A$2R30jgvs$Տ6B <G7@i7ZXn,GkLjvf+mgYrN잽3AKJ]@%~.@9 1Fp)MFIDM$>cm601hNV6c\Ip}(:&&y<l|­@Ш2~1imУ1V17{ǩh?"o.Kaw($} >’ciA=8ID]h?"o.4謑h;,ϛI?*:+ ds/~tEf=π?D]iYh?"o.G7@1sࢳG*OG7Un>Kc]i[x= ۸D((((((((((((((Zz'|CV eZб /@9'P-Zm8@} ;?R}pfC1$1vcqޭkI@}cڏi?P $_my;6y˷`׽mG? N֓X6 :+3ZOkI@}cڀ$WubduJ-QWXy\"֓X64Lr٦?hwy&1NjZjm~at>m@md*L0qܟ^,}ė2r>cQүkI@}cڏi?P:D=tn^]EL:o~?JKk}nnf=mW`7|g/? ֓SN"&Bw]߻$|? t,m^{CFsIۜկi?Q'j$+vdG#@Ʈmf9(fmL0Ryӊ'j?>m@-鲺T[9]X| U v\I9[-lodH0wnT~!joF؋dR}Th$hR<ö}{ ]OQ,/7t'jW-ôL7qNyzsjqzG*'-#m@y[n8(@̆4*NK0fHmpwp8["/pWS~TpofXFoim b!fn2 F$`EifmK? O owXMopvGݢ4IZТ( Bmݙ#p3mVsFnMF1)-|0~AUub? j(--mN#@(GA?To??浧$&Y;oJo??浣sK"AhH*}GP5؎vIAP#WRdAR=Q, 7 =xMBtԑ֢xR?/fm wsA%Ϲ傜8?Z a$OVmhU%rh.O 2_qx2\E$yzKsƲ !Q%C$y?V=O'P8뎽~8 4aq3A`w Gm*.#Q>-r W1e8+:F,+nd%R$.pNy~c?RԿ:ȸ7;>9={6$ uC3 qx#@ ttg_?]IMr$TW?G+~b:P9kwDe dc?RԿ:1omg~A tuEfg_?]O/ZtPg~A tuEsv6_jpǩ?љ.xp~?׎tu#~^5)yR8W7)è獣/_.KI"[?4~F% -s%:O@g_?]O/O[ DI0x9=*.5khBy×~DQS@%Կ:?/_.ZY䰅.Iuoݱtǧ.lGo?ك;nq׶:wԿ:?/_.̒Sd5USrAT%EXÃL4?~A tt]\+^y) mi6qy^X sG{@/_.KtbX򘙔9tiPg~A [Kn~XŢ;9 q{4}BpUZc^䞝ޯH@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R?vk1*+B2 JgӮdp` r*4JG1I$x$sNJT3i_;lP*TT-t`@8 ٠ W"N% so1w M/q10$99֬-ŀ,~S4jlz\o> $|@h\鰼ղϚ98ڕnGQumBK(9'z;On4gi ?&+#1WgͳfzwXѱK7OH? @ c?Ə4t;On46?oWhѱK7OH? @ c?Ə4t;On4 F?Xym:jeS%%=8Nug(Rb}Cq?#Od #bȗV2|W85:O bXT"lB$q޺G_i G#/4OfY4vnѶ}zGit.M;JO8q]/#/4O'P=%#wnZ&އMEi_ho;ۜg?#Od ?2siСHK3ORj 싲} vCp5?#Od ?2s/.L@ 1[vйPi* HTd AlHkEF?#Od 2*+BUWn>}sVl#/4O'P+ dIMG] 'g tWv+ R0m8]g#/4Oǡ0ʒEؤC+-t @QEQEQEQEQEQEQEQEQEQEQEQEQEQEKUDjڡM?rH4$"-dcSI<휓$`qAwntf<&Isl cNkca!f_.`|N1 d$%Sf{wwZ4}X ƀ.533,|/ߘ7r}>97ma9ca>լl?@tVgڵ hV@AiYj??6Z4Ef}X ƏkUzޯMEYԅ؅ |!OOf@ha2nr ڵ hc׿ݶ^|!綹=GKrcU$v ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( Ǣ?5jR? Ybn $ z4]i $mpOV.6#`NBGTiS=B*p2arN3>=+D2L9;r1#ǡ{闒C#nWóF9FtdIgWw0=yn_886m橑Z&vtpT99(Q@Q@Q@Q@]{v(fʪp 1~TpM:] {35+ A's5\TV^%,P,N`9=ׅc׿ݶ^Q@]ƻ] Ky2^E3c~Tqy\g(O }8el  Ǹ4{ȆDBm(.N\A#!ʗN8D{pЍ c8momo?&? ?&? (momo?&? ?&? ( ['I-{EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE endstream endobj 184 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY<" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( (9O8Ʒ%Qapx<\<6ڛ^&}H ?*> '\gy?deϴmg(ӞKMZ+ cƙONH)睧EUgySg}<}ޏ\M\ҟy$_MS;OtP)睧E?HE\ҟy$_MNj/hie[! )p:γ+,#PFVn'o2ʐvrG<{i-HfϖeW W76C2rIe tѾ [xZ<7ّL.q5{no>)ZRJnfG?6>|:j}B+{F?١w/rr}(P/d)o5 tK0F%Wi69z@s?Hc)!>[a_o85Z wz.cNSpRM0[%zV63|?(QI`S~m'cw|9)睧E?H5.+k#f+h«m<\}ccouA4Z{4;c,7Er^yEhd}QXx֢ҟy$_Mlx7ck M؛{1eov1g9_^8?)睧E?H9co[ĖA2-,RN>scެy@åZ\E<ҭ[0@dg`(ҟy$_MS;OH %+-y#0 -_R mggpg\H9cWfO٠>/{7c;s8v ]l?. <7;T>\f#ipGNO 4lKps@?"hҟy$_MnGeɴ>%Ѥ!_ FGQ\\ҟy$_MS;OtP)睧E?HE\ҟy$_MvÐ`3@p9{ןקxW cصhr}?{t;aXYU˅@'l]fߡ\TR9!(ϕaqƾD` K9py9QcEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+-,:X(Oz"&U5 >*_~-f̺4Rr)L|UK/O<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(?/猿_&K/O<x~%jվuXIlD6>gV]{n9}~4Pb_ĿMؗ_/^Ey%K}'bI b9eÞO1ϥ%ZfU,0KSU#G)R7Gc\͖x"sumk7,ʅ}J#U$o5n5$dӑn`{@Q@Q@Q@Q@ixW?LUZ^~oEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE⯻2mixetgae7QGO_-(%eQK'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PZ^~f}nO/ n]H]4EPEPEPEPEPEPEPEPEPEPEc.qw}woY%7,OV$*j6Lwַ2>K̹3q@(G;GK0Y$~5etv+9Lr+d끜zP*ye M& FrSO'x^:-SOehodXT&Rր.QY֛q_[f.( HiZ~n<̻ݽs hXEeq5}[y%yYb“9%Vu%ݺ[7ݕfdr$:0ʲ=> ( (0liYwf4|}~j9+NI -onY0pO+9xf.BZma-'+$( 7oj7f̱]#Dݷ,A=XsS]C"rqWHMdE,D2I,O-=OZUmnq{ͿfEvcGϷE./bٷh(V/u'WD2 z66OGS$WbHІ9%F9=1޻o+jݿ ~*_~-fԞ%tM[n7?7bC9ҳ?n憎ʮ0{ \cUd d PNHm<zOO@ۿ/.O@ۿ/.-PG|SSd d O66 U?O@ۿ/.O@ۿ/..QT?n憎>?n憎ESd Kkɍ@wn7t\+&5y@u6U'gԼ2 tO PTS,GK o?2v/@OK*^;zOL݋'P4Tx\e<#"$<:zO~(y\U7K)Цf.d9 ʙB 8fFv6Tr3^qRȊDq[>A7k Yw=N` &\U,Hfb]|Sʈ p xo.e'Yoi&2ҀGAA$rNX AA̯Py.z( ɧ Xx2FzzO.u(TQ`x?ݿ8o^שщ]Dv4 ?蘫6+uO&*ߢ((((((((((׌֍q3\=bC8gm5gi.ab "T9z`}k8R/uI:"mj22cgd_t:r˥J܅QWpkBfӠuJF/X!a{ֶa4p4(&+m.n+bt&׮"3nlS1)9n fKB-]( p' ٥R[-V~=6϶{VNd5kc#]$ 'A]]붷 j:Ft XdcCQbaxW-1[C%Q7`njeErUւ\Bb<(Ud;Mx~o&?ncn:cb*Vgom7cp9jP_DY⯻2mQEedy$`g$86<{dg֔\4 [4bVU "w vgngk!b3r3S7_m1aYDEQ{kE7m;ʓF87ȇQ`>ѐ>EAP$ rNImn;bAz~Gb(((Ρ*4rɝf–8<(&Q%`s~>Cy'#c4PVb??ʰJu]* %d@9 gVH=Բ& qҤ؏|j?#-CZ+\%LdJ֘r3x|7 ϖG+P[q}:m]f}3S+`.Nq^jޓ#Cnݓ< {q'+Qj " K99<:DtlLv8,p}rUUeg`AdTfeLA죀?,W}~%mfdF(c=E+kq[[22" ƪ?9鑄-e꫟+糚:\V".][ |g$^Aۆd)[xs=RVG#.‚rIޛ3e W?9?zjFuwo+wrNc@*Ab<9y/JN+Bw9zGOo:&u*HzĊ?׻q_1VmixW?LTEPY:텤G㡬$r,e{ vŝs?o8+ew6ѮZP.s*C'+1c4Q\壤"dIp,|[#(}WWVYWOm>)DoP|3 @|Y͵Kr-/d:GOzRD`[u G1s~]%-$aDwu9CeMO\0<6&.nDڬR# ׅmy9~fVC@T}s*އ4ѱ득9Ҁ.QU. :#?PEPEPEPEPEP7?soW/?ΩǜͿ\:?R?fYү'бh47z"!ݸ'GzP*=;EXhڨk~cǡ{370ˤH`+&q! qz$zi%JuwB߲X$S1 iXyl\Zks7,h W2H#ȕ~|7K1e%p@P}EYj}+RY$gF l09o\vዽBtEDP;] (,c幑A!p=~TZ^~`f=.._*<5̺/Fۭe,<]8jx6(u(PaBړEs'.#~cg@=Ś3X:v;:yl.$Y {^~-qڕݼgL[=Jcp.B`ڦBIPO\V5i[igt Y$]Xpu4P's"ǥ]z y{ܵ|Izu9MGw}0j@ zɻg]a ,p03.\xӽkMXgc2gzԵtzSqp;n\ns]/h_DY'buh˃Ix/QOo9@%B" !hV&@[)J~P wY_[_ܟΟEFD"g(8:r"(Qp9'$t(鱫Z8I1HڹR0{S[K3$f Hu9PiV7,ܰO4}?y۟wc#?ZEW[g\g=zjPEPEPEPEPEP7?soW/?ΩǜͿ\:eda#\Uk;Q[8RՎT! t 77:, /'dbK`n sk1èd ,v*bqQ(YNм^N׊fU&|8JsxwLţݵqۑʼgPFGdhـ%_cF~גJ\#Q$ko!TAkFcǩ2s\M$Ӊ =Ohʧ|ux5U<v+uO&*ͭ/ S7袊*Z={Xr2lV_꺅6ZYvF$q5m2H) )`i#i>İceoyQZ±idҒ-X30[qfū\6k).hЭn"ģLJs'>~׀TpAX#0qFp;j]OR1`V.A88/&/R[FLefݸp1Piopnݧ8̆5,pA<S.,pw6֦ee 4d9{TZska.Zcn33SFEegAlU$e<#8%+*)%QrOԒOL64!3$ؠ/='m%" ,z/~t:h[ I"Щ I5vsoc6tǵA&,ajH0Щ,=9PI4 n%)~:sԱ[[4Q1GT:dSQ@Q@Kug.:JnV@"t1rrkOMuVU nʝ6ӣ v;Й<{j[k[{8X" S>g"ino$4jDx鷎:\Xt@F @0G1@0~al[qeXKyHJI ;N߯LtfӬn qJU`R0qʠ|4-Q@Q@Q@*_~-f֗_DYۼVIWԁȐ^Zq  @i= cԨܺA9;*sϴ&-o5NIC09OS[\W˳KW"5#A,c f9r M{0tbtnWc۠ݴ*NO<~VQ HՊʫ?N0dI?QmK239kP9:9cѷyQ4++C]65x{+G &8W*W2FsJtki`yxa㎾4)62C#\J6lf12:a~yeҴfyQ;]Du^-GCX֋l8yK SX(((((o?ʮ^ѿU6XΥFHjtH ņf~#FF _F!# I傮>\SWT<e;.Pc~e>TKP7٤. NsyNp  Nc矟yExf`p{pϨ*1du [1۹-#&?tQ?ݿ8?t yDIQQ%V=/ SkK¿wTb ( t{/5r#eAP_[}uywyqZ|O$R yb2?7`HVWgzp];?\wRPu]4B?V}7G[lr'p Vf|ʱvm%ݮ yd-PWЀ}ҵ8gt=8<JƊ},^\O-:b`ar3_P?];?UiVbM\W8?Z c^"Pgڴ?eJ8SZ}[ l9nAOn*1TbzI>ا(J k`'RH@l2y^3i׷Iecqw(c 2qOEPEPEPEPEA{tV7r1Jz'TQEQEQEQEQEQEQEQEQEQE⯻2mixL@ E{-QEP֓|4Џw/;jbOIndkwdBc\xd[P<7wdy.#e]dګLFGGP6Ks᭺(wi-3Lwcs}}j??TurỎPGY3ԢiA<_&(?K.aa%M!2G˒הPjI?w /@*}iTiA<_&^j́ sIʹYkTw /G%h[Iq;6㢌7{qfg2M!$8%h҃y$M\iA<_&(?KE\+P4$)rJB>Bտ(?K1I9' Xgi`eY Cd;qxAP;Jw4rNhue{K"M݃|ǃ޻(?KI&nF9>]>qG##޴*!ojw[r 8#demr2wV1g!Áq?ikw I\)q22=_1VmixW?LTEP\m3Wq[O(u8tU'uP/y=úDH=Wj4ֻWӼCnK4GM2\q rܟ8K

F,rn[tr-}w @xPSL[KMP0*7rMmxwPj[VF2ff%rȽ2#֊I> -8'OrfOݟֳM:9nRt (WT2*|s{ꨠjΰR1,6yG@:NHjn$pqk86Q}Vivq`/` ǹʊ ⹌-CdX(Z( ( ( ( ( ( ( (0=TUHIث/ -W>) ^Ws9@G < S91IuWPA O/-Q6$X0\ߺ',<6pɠo,o2it+7H%_gU+uJJM-Fd!1+tC2!QAM5 n]>q Ox (n-.~b+񻼍k$_ڙrIsqq[0AfGPHTQ#'А{q PydQ-8r{@n_(((((((( }/kK_wKe(_P-/ho}'*rH뜑EPEԑU(v8@n$PTq烺2'3ZN>*:>?n憎>?n憎ESd d IG$HYǢpG:玴#Epvb9*QuRcs`Nr G~?VS;O@ۿ/.O@ۿ/.Q@?n憎>?n憎H dgLSVhY"BY;\{v: l_]l_]\24IQܸ <r2l_]??Uw}Ew}E>tQ#&~N'd|٭GCpqnq#0$?ˑ.u (l_]l_]MjwD9㎹#aS^&ݣJʹ qך[9^]Z >DClI?4Ѭ׻n>q;8\tMjyC,SeOESKGȯ"*|Loc(ixW?LU9m*U~"unU.Tk7r~lggi(UU0ܺ<d~k̚Ns>{u"}YPd& 9',\֖vQb@\ Hh9Q^7YXd0=ApOŦp 2J8wA])ԯ5:@IIi ;+ bߍLJ85֏ewucun$RlJ {ӯ/WPf9\?.3M$:CqK"Cm2l:9ӭZc+B |I8/yO:~5ZN ) h/>B[ b_>"F9b_ɨOé[$1w7n<|'ں8lyMNA:gRiv\o +2*s3s^|I@Lǡ\#jjsS+w9C1~sV汶iY<)rAb?MveR*b1KOLPMmJl ׃>OPWhH Wk:ŷ-#n;hXmTQ]H7 U_\8g ysgxayaDI VV'=+Q/4g֯H؄}Bi=-[.r3ze:6v3BH,ZW(\lqڀ3mT70ivh[VU|PLWkTvmѷe6y$+/^85~I*H `:FC}7v`c9 ( 7 SӼA/|^ޡ]OUHJ !dÓxGAgϵyGݿfgn|fmT:|LJ}ۏ^ێ( ui2#5C[ vq`sx1SZEgG m+HIՉ=Q@Q@Q@Q@Q@Q@Q@Q@*_~-f֗_DYP-/h[׼_XUAo"D!y#[P16Ub66GyIqg&1 1UEc]Is=7I9?xsIsHܲ7H|.<:6G " q ?*>*:Tw\40e#U*ϭ[uԓEݛvbIv[8Px$O[j?i-S;3Q[O o7PΚۿ!|}Yq?(Jj?i-5t%4x=r? QG@*ϭ[*ϭ[E\4ml=QnC c?r5t=Ԛ=>Bnqx`WK'S_4/#!qm?sK}ؖrg95a\mtc1?WrssGàm<s5 b0Iu8*F9u#_ƊgfE;[VvjIo p"V5 3Nxk'H"rNTzPOE POPZ^~f֗~_D@QEN0 :+2}2D` TG -5J-#ΈO>(8B H@ECT i'xw+ {0*,maexTq}NzmΙ g2ԆEܓoJK绞 $I>I|UP6}"j -- lyr. <@t)j}--KDGl)b1ҪˤE-ҙTXx]СVf{@䴎ւ9m' ]F*ˌGL=\3$\.x87y(A ӯ> Hc]y;(.MhTh* $ݞq@}k"MPXvrX녭8%ɏ~bL8-pIYGOAZO觢?z(/ SkK¿wTb ( λVZGk=XEsh^K~H\m 0z~T7Kk{>xalOc?(5ifU ˂@ҋM}>[+Kk,2C8ݵ g62ceHc 7SD |:`g@HI+ܫC ܗQˉ7)m&G9i,-Y.Y4b-)QwaI@ d+eE ilc98ֽf[^M;oͷf"hxҬG.;{8G TQEQEQEQEQEQEQEQEQEQEQEQEQE`xLZ^*_~-fBx8̴#Dϙ';T j(˗zZ?<祧fFpw&@*NQn[$e2b xU$<`V|祧˗zZ?l-`rrrAZH#)|`1LbO"._i$(dm$&0B3#eFPAseӣ{r!)S}yW祧˗zZ?ufed1 $㧦S}#kbó+1ʥO"._i$(@ 8.g>iq57f6G?ASyrKO'G/B,Aݴ.AS^H6@@=A{YO"._i$(H񳌴mNzR4aPI8CtU._i$(O"+ <\YJ$4핋yeC)G'yrKO'G/6 Yi|cɐF'|U._i$(O"+( +IREHXA=-?E\IPo[lے]NFr0zbanF603s+7H[+@$w]N)dyBǜ?T47._K5 7._K5 6I$/# pX%|>s>%G$Ѳr#$ M<:(K K4}} CEMK4}} CEMK4}} Uhif`IZϖ@#\HSn/+>;ƽ"i.Dn9O3ϖG+P,/IHN ϱErڣ;!;WۮX7c#-CZPV tVWS~|.H#=G5v#-CZPV *+7b??؏|jҬ#n_ϖIa}#E,b[$Bǜ?T5vZ)gu!aI㨪?ϖ@TVo+Qj TͼI{6;qPlG>Zϖ@_$N%D2 5;O8P]2"8miOl{+Qj EflG>Zϖ@TVo+Qj -'02Üv܏ONܙ#Or}H9PVb??O:ghQUþ78/TNK۲ ܠ+uO&*ͭ/ S7袊(((((((((((((((((|_,pC4ky;kWNOEjihӿ/Eںw?t4Q@?Ə];?P_WNOEjihӿ/Eںw?t4Q@?Ə];?P_WNOEjihӿ/Eںw?t4Q@?Ə];?P_WNOEjihӿ/Eںw?t4Q@?Ə];?P_WNOEjiko<:ȒFל20 >((((((((((( endstream endobj 185 0 obj <> endobj 186 0 obj <> endobj 190 0 obj <> endobj 194 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY^" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kk纂+lG1c$yQ֓$Vt/3Qy[nswR̻<%lnqw[UK J{Xʹ۽bBxU?v SxC׿ҳh"hҟy$_MS.iOaU{Q\R\H#S;O^ E4VIikʁbz픆Mq-Pl  ?j⿴v G"kӭ$R;[yJmڧY;&jE8LiOқM6b3tccrQӍ(c).dy%GfQ(\doP5P=<#4?ncnzwUv ]]Յ1Q8m04@zlbNb[nk0OU?29)睧E?HE\ҟy$_MS;OtP)睧E?HE\ҟy$_MS;OtP)睧E?HE\ҟy$_MS;OtP)睧E՝6{N?LoGn8Zʭ/˥?9E6(&TƲ5"ӭVk[.ɔAbE<=5en:vc1*%VG]"AG!#2Jo1cp簢77PȻ8g`aG;zr84E=̟Ev:??UIJfhyc%Kק@a}m?b6wlb Î@Z]{n8RΧѣ8`m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}>m?b&]E}Cڀ®Q@+eii~W*O+N OGV>º 3NKًmfg<4eii~W(ӿWag<4exqZwZߕ ?+exAwe !ր9o;|-?ZwZߕ tghl'[my PA9#殾j˅VChӿQυ_ 0NqQ?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ESӿQυ_P?;|-?ZwZߕ ET^ ڂ9B~yFu MyFtoOF!B4PxPu?ojm@?*#n_iQEQEi?f-'A~?:%Nbs =O_ɠ /ukK%/l^Nk8N)2)_ʸ VV&{XfcˉrG ,/uq "![8>Ԝ4TS7?Q@QSo~PTes?f(,EAEOY>7?Q@QSo~PTes?f(,EAEOY>7?Q@QSo~PTes?f(,EAEOY>7?Q@QSo~PTes?f(,EAEOY>7?Q@QSo~PTes?f(,EAEOY>7?Q@QSo~PTesZ~?ʶ/?βIՙp{JԼ:McC7'hX|I(tX׼~_xj kA-?n5c#GOG?o`}|?'l;l@FG!ʀ:oz?#뛅laҝ}`Q { }tԔ+i1*.s=z(W[7^ozˎMsipMG銧haM>VK3 vܟAPAOG?oe]iV:`O X-4٤Η Mr A}F?@kF?;|-?ZwZߕ OG?oSӿQυ_ kF?;|-?ZwZߕ OG?oSӿTv:}EmDģ0^ ?oz?#zf"́vzsv߰٭v .3ǩ?tkF-?'R}ͮlTdyr=@ף[7^eii~W(ӿPoz?#V>;|-?\ף[7^eii~W(ӿPoz?#V>;|-?\ף[7^eii~W(ӿPoz?#V>;|-?\ף[7^eii~W(ӿPoz?#V>²`죘Tt_kF-?'Rad vLR<ctOG?oSӿQυ_ kF?;|-?ZwZߕ OG?oSӿQυ_ kF?;|-?ZwZߕ OG?oSӿQυ_ kF?;|-?ZwZߕ OG?oSӿQυ_ ݽ~y\!#D+Z7?to@If$Ѝk?#EzN kAoAJ c^"-)@R}YҒ?a,&cF`|/۽OJ]Ir%/"e16ۥ"ҧrR8uSs!,[84YjRʘ"%@᷒[d,ϳg9$zdҫ,6_d%]vp'ZuyvmX'[wp[+&89}GC׈H#gG"$:˿{[dM $Hwyj6,iDm$NIV(((U_%U;`}2*JH[)1$(=} Jcqt` ol3ħv?Uۿ5{_J:JU/RRR}YҒ6(((((((+m]ѯ[נԖ38:BVojEQEQEQEQEQEQETן?toPן?to@If$Ѝk?#EzN kAoAJ c^"-)@R}YҒ?"A3JBGj8!_1䁼E*z(ۮPb)OTD#BGMXg}QEQEQEQER2C  Z(vQc}^Ҏ?V_ ( ( ( ( ( ( ( Ç[ika5%*q@QEQEQEQEQEQEQE5~O]55~O]k?#EoO@Ef[RX׼ PԫV__%lQEQEQEQEQEQEQEV;|(b>iG@ Je_JJJU/RPQ@Q@Q@Q@Q@Q@Q@a5rVoBVoGRZJ Z( ( ( ( ( ( ( ?'?'5 ğcC7'hI c^"-)Zz??Ve(jU/RRR}YҒ6(((((((+?uXW_%%*՗|)(b(((((((VoXpo7z}Ik!+7󊣩-%o\fqPQ@Q@Q@Q@Q@Q@Q@MyFu MyFtoOF!B4PxYo=@?+2m~?5*՗|)))W>iI@QEQEQEQEQEQEQE{_J:جvQR}YҒ?EPEPEPEPEPEPEPXpo7zܬ8շvF>qQԖ38V(((((((::McC7'hX|I(tX׼ V kAoAJ?V_ ( ( ( ( ( ( ( olV;|()W>iIIJe_JJآ(((((((8շvFnV?M^RZJK_ [TEPEPEPEPEPEPEPS^ѿCS^ѿy&!B4Qf$Ѝ:??Ve+OG5{̷[_MJe_JJJU/RPQ@Q@Q@Q@Q@Q@Q@c}^Ҏ+?tV__%lQEQEQEQEQEQEQEV?M^+m]ѯ@-%o\fqTu%*բ(((((((?Ρ?΀tc?(l\qy"4R7C$zW3a k hDHU@i>o<ӧ@d'ԫ(= ~Uiƚrنُ~@W?/ݗW+ > endobj 196 0 obj <> endobj 200 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYHC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( > ܕG3Duu|A$?O'8ym,ma7ڼMqos~Uŧ=̖WAǍ3:[)hA{>ѷgZw?w?]g~4iO[a_o85vY^{#k7dH;v9#Vof'k=,$u k>~5k-F N~l/[}⨥ FvÊ).֯sOQ@FQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW+-,:X(Oz_wKe0 kXcP zLuhqS#@<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(?/猿_&K/O<x~%hľ2߉(ϮK.Kb!<;q?ؗ_/^Ey%K}pc֩fM@lw|o9>Z5Itdg G<=9c\7HAVzw dE\Q3HnK+.Oo=O~qϜ].Jq15huY)ؼ Fw ~9du!s)XOخ|ߏ[Sc_#y7-s(VDo'X$8$dQQ;^0ևmm_AfFBDc+)`O,~G*1듊ަEp#4^~FRK n.Q3ץ2akJܨǘPG {u;[xi#$4knӉ@V-UFV6 1Kǽ6kzDs'@;L?^Ek5!+PIt#(\tǥbOjOs |S\}jm>Ě,QgK~}[MĒF ''D^w'IEPEPEPEPEPEPEPEPEPxF;Q@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX*_~-oKڮ퇄R^Úͨ&z?_V`ǖ 8:lwe[(/ <k Gսϭm}nO w5#hEAV>'Q_y?€3dԮm/ j3@F 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@mG3 t?'H( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( Wk~T,R3+8\ ϯzE$A{s,B;Gz(ͼY#@Z(gwhz((((((((((((((((((}/_wKe FUqPfhE1RKE&у篽 Ew:Q@Q@Q@Q@- w`.ߚe z(**QtdH=I}Y#?W(**oؿ#]P?ԯPTTiߤ Ӟl(<md_?±,BYo{P~O]Im+кikA#f@Mp~Ẕ"Gڠ:d1iĩ0loN:ur*=\U,Hfi bc`I<\T0*rI#{yI!(PI+ zO)~7 [u DP  |P 4@@Wpb[A?L~5Se̮Td?׻qDv㢨ͼY#@Z(gwhz((((((((((((((((((}/_wKe ( ?Hϰ:Hp>l(xϭj_gnh@hĭ4EgJoc[|²9ldzб9?C|0hZrnw''q?J^= cgPz$ޭ* "'crOUtk.!G%J* &{G}x4i c$a珥>$fO6RG\lc u2JUkWFH!zt55ͪy?;b}S{ؚF,s0UW\$47|S"EsrBÞZ Jʎ+ Gp\ R"(vݘ?tLjT'byf =sn&?:! "3p<ՈeX&Y36 R9?elG>Z[ 9v݂>?1U#-CZPV [DJ;6 ss#wm>>V؏|j?#-CZ,40\JA%n?ҫlG>Zϖ@-%`Wa~ȸCjb??-9<:DtlLv8,p}G9@#] 3sd{s^|W*2 2i~s?fWV̬y<|ʂ?-H#'4%nH}#jX,̖WYe q'9 "Y#i؄*{0ҠT4ΑL($}+nR)i6~Gd\ʤv<䊽Z0]췛朓X X }*8);(\Eڹk{{^F%t_/4eWtU3gR4,H++ ++"(^ECc<ş1?w( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( Wk~0s9/n`F# Gp±hNjnw''q?Jږefr< 0su(B̏[9wLB*:<}*gccH!jϮ} U5$ic1'; 0sϥIivh]x 94b(((((9*9*yFu MyFu uvs_Y4!4L,cGXzZs_\(o|hVʃ nOHD"g(8:j"(Qp9'$uQt$$m\\t=])=Xi9#1X|F8㯹>k(敤fpg7,?SY+}?y۟wc#?Z[kEy<%qsשQ@Q@Q@Q@Q@Q@Cys6U5Cys6Tr?'?'8ˑX9 uVm0*G+It;ɾ{EMejr[PH#8Z/&r %bG{ae;By;^)l|eTd g=(jYkE+mWpsrCWAfle} ^R%hm|\onFqn#[y Z3=I$G O%t_o\WI>utcaf$s, _'{GOo:(ͼY#@Z(gwhz((((((((((((((((((}/_wKe ڊ+IwH̫@TP\r$\H.F29OBr:vl9%0à9>ܺA9;*sFtDh"ea!~FMNAms0E_.._|s^._!ۃU9X*Ls41@+Px=EGiu5*<>b)@yRr~-f[]8g#p0#=Qү"* "'crOUM^I2FʕL1vr3niVV%G^LqY ci$;mR9ϿOFgH@*8sO9i3yY@ [FZ63rsPqd#EAyfcH'9<tWT<e;.Pc~e>So,/snF? (ӀhZsH<=Mon2tN:r\6OQǥ7r, Fdv{=zpd)@q{{Kr<2{S\S4`&O(eǧ=jXXh[hmXmP\r=+klgǿuEQtQF?Fd#KE _./@lxi6AtFaձQE,-xF;PՄ+sp9!%:b:8JtQ3Yq &x;Gn0WsښĈu# 73G;?W{{-ZʆSRqUq>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>7># =iI6nr9~M Y$ic.%īpJ/5]:ma5$YWSКYoM8&6 4 ;+6KXܐсq:=׋SCFRrJ]>mĐ6{_E z}ϬsyD0q"ۨbpFXpH=h}+A,nyKY,X)yl8ڶtͩS3jr=mo^;xذKyjd`(S֢eϷ@Xu㵾k4Qϻی{b:-JA>o2n=@;~L68YWJb}Yqd6Y~cۀ:vqS*wl-0)H 2P읚=eB1ۦ:P&Scne3(a[vy?*MWHPə:l$g{QM <3#f(rI[hbm]N+H898mt_\DH,F@ēd{ =ȱ:_ɷb5ުDzQ!HSZq-2"F:)lXbQмnTIFe2Fc?60A v6^ЯI_QOA>} sҼ7a6a}\bGPh%TqvzTB{}zX8:CK^[B` RKu+zp~˛J+dx n"gfX\PQ5|Yib.,HӲdT1^[U𮝧Cw ġ之lBzU޵^kp] )r x9uMjk&_1Ǘoku2l6ۻnxcGG̗Q>`6!([v䏔hz]W_D1 W|=q|ks[Zhܤ8(_P-/h(((*~}ْApȨszP?];?ںwTX׼ 6I !GZ?hݴq}ӏUirnIB4hvztCOIљ@ef܀~cOf?l0Fp1\e:! Ar?am2FXpc؟O)}@cZ1'$nw"n7yn\TN/ ׼?r?z(O觠(6gwhş1?;@?*S c^"PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTNN>?*JEP-/h[׼_@P֓|4Џw/;jEas[ 9<Ԑ}不v&c''jӽlQ@_4R݈Y#jInq5sF;ݙ;_)֣_EGW+.uu8?NP; @X*yXpH|,(?KI*P;R?(?KI/NyB6%9'6f㏗oJw4r^LR[Qn%$`0$ rC?w /G%hk{qfg2M!$85S҃y$MP; OG5{?w /U4Bl+i @U$:e 2Nqn9<iA<_&\Ft70[7~L\~'D])(ͼY#@Z(gwhG5{TX׼QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU;ӿ*S;.QE/o@Z(_PHHPKږA c,$]7(,=G(cbyj /`ךHn!!". $ L6*"NLIs A$ ږnn4{$|ci8>,1339,N3=#GU;/p$P %IDC?-q$ʒ.֔ O=`DW# CN{Zw|%\wRU)Jo3g:}Gu40)2 㜗#= ԙ.d13:)* "'̌u.NVn r* kArx@(N8Q~rONMM@$3ONx[2US$T 3mw!VJ\eOߠ!BU83u^RP>)?i (<ş1?wtX׼OG5{@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S;U;ӿ(Q@xQm^ EUk{.y>iW.G\U(( C?Ȋueq$W<є~8w}EeZ|\ l_]l_]\rI$Őz)q?n憎º =ud^]nl Whoݿ w}E{Zw|%\ l_]l_]\$PH@3G('mG'mVVhY"BY;\{v:?O@ۿ/.iWs.dOp @4x?(eZOG5{>?n憎>?n憎G888$ >P?O@ۿ/.O@ۿ/.-?fg.f13ʜ`/;ӓI@?n憎WVgH!RO'?)"j_x)( POPO@Q@mG?c Ew??UʧE[gTv =I-FXsH]Y@= =hSK ('OZ<߳z4)-xf@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S;U;ӿ(Q@xQm^ EcVmrZ^,G/p< !6Ub66GyIqg&1 1T]Is=7I9?xs[4P-Ν#rq!d0'\Ұ7,XgH8U(}j??Tur`ha9 Gȫ?KTκych3<[nI.݋rp $yKn.U{i-4{pUT{1ۜ[j?i-1GKH4U?3Q[O o7Gϭ OG5{(,AvN?)k'5Ң}GT?hJʓMRSP *+7*O j4eIAMC_&4}iTT?jkk=pfaVRߞ6(E{-/o@Z(dSI8P Hج4+7 d(Z)O `vxJc*dr 郊6zU?L֠ Cwu ~Fs hgvFFoʑ(0X L"3#QP O'l(c{@QP47psҟ+c@ (L/s2Ҥ2q@P I(Fyb.vrhj*!WqN;(3UʄrqP4BFTn8Ǡ>LM qGKPqL8-pHOYGOAZO觠(6gwhş1?;@?*#n_MEC *( ( ( (4Csas@ Ef^kVTcs ?,,ڶHcJ NI6u~by-}GjudXZ2Y3Z˜ dahQEQEQEQE^%IQBy&a^lF,p*wo Ʃj!u 3>y sOi,ѨFd`8|zŤ^?ѹspv{S?x?a9ץ f<9hi2}0rvӾ=zQfc?r貪v#[ĐCee vқR RF8=#΢(֝_EIW*}iTr([׼_@QkZ|g̓~\IPMdV zS祧˗zZ?``J<?4._i$(O"QYv1RWǓEK=-?E\IPM N0$u,(jO._i$(O"|q{R4._i$(O"ȯx+CrNr|b=-?E\IP HT8⠐OcK=-?E\IP<."gs._i$(O"#1'rq}Ni\IQ=-?E3LM$=Aӥ?˗zZ?<祧yIqߊ<<ҟ=-?E\IP H{ iLjC piNO"._i$( oقf3;>Sv<MiyrKO'G/GKnZ'ˈؐ2;W>)O"8LI-pQTw>QEy?c E,-xPu?ojm@?*#n_iQEQESe8#<3Ukąm*̩ha_롦8A0#1ڸY]4 Ks4\[O٠lse㟭$+FU.x>D;Mvt(H|W0gvkʖ掊<^q_\v+XqVVG-WyQVdQUu +e19F2ęE4j_&x`np꽻w撀 ( (:?pB8?*O  ({Xmgm+Yd`su|Q2Ģ#aM^>RsF2za"[Kڑ8[sg>A=D5mePăpxm2e go&xezъ}@w(Gv &%F[(O41 1U\fYtf~Zhl~p@+Y9K7jk7iQEU;ӿ*S;.QE7._K4^ѿC@}} dyP@}} dyPxp]A#M^%|>s>&%|>s>0 ?/h%|?/h%|xt8e=TN?>8>\nIeiu?oka_ɨ%|>s>&%|>s>&%|>s>"DuDY%G$Ѳr#$ M[%|>s>B)p2W\ϼh s>\ϼj9fԟ _dyL) MF@@8$ 5}ؙ#h@FXБ@tQEy?c E,-xPu?ojm@?*#n_iQEQEU}@N>?5bg]/ l~F>:yj#WߚPdj]&vvY-Q֥wu)߲--9 sVUB!t[dFO3h@EHQV9ۻQEv=9(((ʡB_ :<k)?/m\%Уvhhv-:[<$P\`̩G'N}s޹[q zVU DvqjWR-mgT.@vM3K#Mf9TfC[zt:e[y۱ n:g\Yj1n0[ <ϴa9,G'Q/-%t0F1aْ1Q]s>+2gDI>޹Tr|܁$/?ΡΡ(֝_EIW*}iTr( ?ΡWZMw3%)v!3בQlG>ZiQYϖG+Pb[YG妸@^W=7דۚj lG>ZCm^4`7 [oha}%H D~Rw~gN}p8#-CZPV壵GvCpw\lnSVVWS~|.H#=G5+Qj EflG>Zϖ@TVo+Qj iu?oka_ɫEFXķ%HIWWZhԅ&~9'$#-CZPV *+7b??؏|jJѴG*8c0GJ$q-r ,ѐXAy€}jPVb??k,2+3ǰW+7b??؏|jҢ#-CZPV *y L7L4p1w#ӧ<4_ϖG+P4{$qI[O5KN2.d`@+U[|mcJ佻(08 (<ş1?wtX׼t~76 kASV4(y?@*;VX\!CB1TZZirbF6O$}-n&f)k[q9d ,cvҵ{V=v)[@.ȿ1;^>O=in9H c עn'U[hH®N3ԚuKƭ"\1a!ڲm:u=y J*,3d@dA^1׊@Q@Q@Q@Q@s(W d" b_ UKAS_^g斳]44bM݃pp'uM&0\ a61>ǟk3@?+q&EQEU NXIH[vݿsW ںw?t5r_WNOW( ںw?t5r_WNOW( ںw?t5r_WNOW( ںw?t5r_WNOW( ںw?t5r:ӿ/_¿_[4jihӿ/{Ep_ںw?t5@?Ə];?wP_WNO]jihӿ/{Ep_ںw?t5@?Ə];?wPxXD6ۆFwW@ kAGORGY7lwA{G5{̷[_iiA<_&(?K*(%im"2<7,0TJA媔P.lmDPR.%K(iu )oU +wd/]*E38s ;9#'5EoI-:VVJ\H$$8!usU/&yiۏJ{}&I?w /T P;Jw5JI?w /T P;Jw5JI?w /T P;Jw5JI?w /T P;Jw5JI?w /T P;Jw5JI?w /T ɨB8ĕ7{OOV~O]qk¿_[4QEQEQEQEQEQEQEQEhxYo=@?*쵈mrf~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oPG>~oQG>~oP=|b?'h79+_|\筚.?sQEQEQEQEQEQEQEQEpZ??VPOqx{v.5X {]@?+2m~?yCPRyȺK"6;qW>iI@6gVH[Kg*ؓ?<_-6S \]4cL EL;OG4^u *¾ ?3/l57c鶡<>lB]2p0 =jrC3nG$t:]6=)]y|! f6`zc@&O/S _:dREbk7m8mj-SAq4 ic:̤;ObxM]FYZF$b{0A*+^qys[v)4n{s`IS$19#V\$YDFؼ[E ̶;9*.qU#h< tv%I,cdGqҺZhZ,D&{N7s\7v< rʡ1?, ۿB 63~]YwJnVXqHՎ9^zjvvAv&'w8y]qEa!۾Mؘ}vMhnD7bbqsڽ7Vt݉>^zjvvAv&'w8y]qEa!۾Mؘ}vMhnD7bbqsڽ7q.Wnͳn~>1qڿAһd;w |]\лfh`=:?V_ ( ( ( ( ( ( ( Ç[ika5%*q@QEQEQEQEQEQEQE5~O]55~O]qk¿_[4QEQEQEQEQEQEQEQEhxYo=@?+2m~?5*՗|)))W>iI@QEQEQEQEQEQEQE{_J:جvQR}YҒ?EPEPEPEPEPEPEPXpo7zܬ8շvF>qQԖ38V(((((((::.?scxW@k_9f ( ( ( ( ( ( ( (8-@?+2m~?Ef[R&_%%*՗|)(b(((((((>iG[{_J:JU/RRR}YҒ6(((((((+m]ѯ[נԖ38:BVojEQEQEQEQEQEQETן?toPן?to@^z٬o G=lEPEPEPEPEPEPEPEPEf[RX׼ PԫV__%lQEQEQEQEQEQEQEV;|(b>iG@ Je_JJJU/RPQ@Q@Q@Q@Q@Q@Q@a5rVoBVoGRZJ Z( ( ( ( ( ( ( ?'?'K¿_[5_|\筚((((((((X׼ V kAoAJ?V_ ( ( ( ( ( ( ( olV;|()W>iIIJe_JJآ(((((((8շvFnV?M^RZJK_ [TEPEPEPEPEPEPEPS^ѿCS^ѿixW@k_9f+ 5@Q@Q@Q@Q@Q@Q@Q@Q@ kAoAJۮd<@\qm-tuh[?#R9@R}YҒ}/Tfkg[2#{fxՅ^էG4n~?"?7E?VѺ/ƀ (ZDF#(t_iOhէG4n~?"?7E?VѺ/ƀ (ZDF#+?u/ƨ43\^Y$x؋>h*՗|)*OM6h&u"9wnq׎}XP(ZDF#(t_iOhէG4n~?"?7E?VѺ/ƀ (ZDF#(t_iOhէG4n~?"?Vo/ƨEb=&I<3*Ԗ38ODvR2B;hn~?"?t_iQ/ƍէG4QF#7E?VEOhZD@n~?"?t_iQ/ƍէG4QF#7E?VS^ѿC/ƒծ+s ؂slW@k_9f(ChHA{筚(((((((('\"6"B"7mŽ1*$GE[^/ D~ ux܏EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ EAmAx$[^/ E/-uxIVAmAx$P 4AmAx$P$hI"p0`s3?9[4Q@Q@Q@Q@Q@Q@Q@Q@Q@ endstream endobj 201 0 obj <> endobj 202 0 obj <> endobj 206 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kk纂+lG1c$yQ֓$Vt/3Qy[nswR̻<%lnqw[UK J{Xʹ۽bBxU?v SxC׿ҳh"hҟy$_MS.iO,6}-o`q稦xsF]+!t6>9VxUk^VIC׿iO^x>5utE({9*:xҀ9&ne LiR8yU[8bz6kR֭&(mj '*3׊t^7ME@WXmD%YZ To"k%I/Vkץ̞|~aaov-7p"g,|ῴv G"k'Q;-T@)WNҏ{{tFU>Lxn@'Ji5,7WgmZemGV8^u ;)-[4 l>C@J+Z 2Y,.k2 >e8)睧E?Ht[7F :X%Xq!Q LUl籵-Z@deXnAIqS;OJi5VG20PKs{ m\ҟy$_MS;OtP)睧E?HE\ҟy$_MS;OtPW-/nm\uM!T1֜ULL$?Cᩡ'$5 Hz|2qG2@wgY]\Gb*ۤLGhdQ|C"Ӛx( mbt2xW('ҵ+YnYsؗ_/^Ey%K}K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>X;aolBɵmNvz(7{ߙ?h.ceSuz;]o |/PƏ kArxW(((((e 92i'Fc}7g=%ՄkrX|z|ܔǪ篜qgR4a\9S &G?:9'sǸGFyq>3_==e Y R ?{͂:Qe Y R ?{͂:P2[G-,lK@LѨ,WA@<8Hb9zCE |g=!{{g9 \uc#%3s.:?sO1qq||P3p`u_=M{iHxaAa9y Gi[M 9nNl'R2+;7M%Ɯݤ$F^"?/jҠ((((o?Aj(Z c^"U=<';;y (%e_=lc./!(mlsEYU[NA߹-XY݆Bl%yaCe>X(((((((((((((Ze|"NO̿?N ݤlHO#oJeMs/Qw"KU @[P-P3Z*?7ؾfݻ:>VoVxmm]O|Mx{1fVȎFo.q-c淦rh"B?:Y`xIʀ9{ L@ǨE]~`,pdqU4#Y*U%ge(ZDXt=2K%Q{

v*7*+-%t6yn$`jb*P g+ۺ:<2;ne(c}MH@1KH0@)h((((((((Z'PO;_4y"@{e[(/<@<k Gx_?&}nOlwg z[yJ|T՛8MpEO_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'PEe[(/<@m}nOlwQ_y?ϭQF 6>'P7C_ x8ѡ >м(܊(cG5{TX׼QQRT3>ԋ6G%P h̫$*KJ @PQ9az2p:Ҁ$Pm#-КD0\$hZ*8J'8Lw$9KE3_/8C0X; (tUd@X)P[p$cZ)E 9@#  H- A$j}sUX| hZpw( :ҬlqUKEF"1p)qT MEG掁XxȠʠ1 ۟ (9]NqǮ3MkP H(j*#:Q̻pCf%nz B3@ EP7C_ x@-ElhxW* kAre$qޓYw(`@,/ ܐvTP~P̧G92m9:`dH9ba q(,JrO'4!fc%-|{i(pY8۳*rI}T(0" H!Fy%NNpsO+ۇw( ӡw]J(%siHb[xC0oqp)]۲swO(vfS#椢bRd˴9F 1J(?/ ,A=TtPEP7C_ x@-ElhxW* kAr ( v*j:>u&Ӭ晤sJÒGU]E}>m?bOG_i G#/4Oov(]E}?2?€9_أv+EF?#Od m?b_خ'W XY\i,V$& __أv*;|-?ZwZߕ v(]E}+N OGV>€&]E}>m?bӿQυ_ m?b_ب+eii~W(o_أv*;|-?ZwZߕ v(]E}+N OGV>€&]E}>m?bӿQυ_ m?bGY|l3r3υ_pD'j(Q{ mQ@Q@ߎ |/QC_ E\z??U(+K?+Ikmix'E{o7zАM6,Ku,)HFrIpsOE?FC-`^5&OPV8.-碀U\d2[hI#u|QI#u|W?VȖX,~Ag'4*>;3Fn dq c`9 OA/"WRd y<{dڶU{|6q;`Xed4Irۤip:1N(AyuԵoGVRFov5Kk<#&13\v*Kdcҗg%. EmZpsGQ^yG]%э^^yG]%э@TQEQEQEQEQEQEQE3ǜ_53ǜ_4QEQEs~94? QG |/PƏ kArxW((~ժ\]A @kTFIfdB]p;A@_[NO^gϒ?Tw?5ؚ_'*M/|?@_[NO^gϒ?Tw|? 뤿1'K$U`1+,qEK@jߢMQ'?*o*7(?)?qSTyI +O\TURzr7G޸ܢMQ'?*o*7(?)?qSTyI +O\TURzro?Z|MV#ҭK!ORI((Z=;@UOUsӽ@ԴPm]36׭-F=8UiPRrTuN^z֝E!U9<l\chږhE@p83׭PEPEP7C_ x@-ElhxW* kAr ( ( ( ( ( ( ( P 0 'zJ? %|>s>&%|>s>=ʱѬY'ho\ϼ?/jHHΡ%:p[gȞ)qc@>s>\ϼR@dڅeu 2 @} dyPRD9P\ϼ?/j(o\ϼ?/j7P,8=Cӥ6mm4PVW͸dp8 b"?/jҠo?Aj(Z c^"U=@?*QEQEQEQEQEQEQE5~A]4eX&Y36 R9?2؏|j?#-CZv%#4>YrP>^]/Ohڢ'*SoQҥ؏|j?#-CZ!tFS#) Kd\::#9Y䉐`~`3lG>Zϖ@ 7i$JZO)ԗ%{5fK HL*oPVb??=ǝo r V۰ ЎW3F#$r60/=ϽMj lG>ZiTWQ> endobj 208 0 obj <> endobj 212 0 obj <>/Length 3409>>stream x \SOnB !;"iZ?b[{9;kj>gSc}|6VJj}Үb>-ժXGxB(&2J՝Ƞ^z"c(?_e2!!lUV5qRS3ue_IK 0Xpfp ?/={^Y1m`sR͙F}T\^^a46֎m9;u]˅FS6/J_(**nj2֧(3TXk_k8w%v#1K:Hqߞ76Fc bU,֦R8b4AuPwsМ͆ܡw5ءľrKU\|3=QN)@duu~ B5fyѢy:] au6Ge*j)5a{GkSJ-G!%0י.떿)V;m}֍e7~Q?[,LHհYFl1ۣi NUYd1 HPȱc'/?}"I(CaIϞ+:s~v7Nnis/B^k01Ea%a(g-ÎY_gl`6{ _nrÙRK#D0T7C""yyyP Qplh1G(A7+=-pVpظ*VF1n! Р٘@0}IN}]c7d:i?S]_%,U6l""d1Jp B~܌59pxB NuZ}-_҃w]Ik"dr<Vf|"-h<|?h1ȦIRR#C!Bq9; }tː! #?`qR;"zE09 ӂ@ IYG} ӕԻȘisf/uǫ wT2 10ŰFRȅ9'mVɈK\:`uu&Nө]`*nA v{wOw)iQ*f 8OtZxMU~Hą"*0f' nRcUGJ+f#}%k(}il5X^e%mY8~/7YuOgy\)D8c1rgk[ng\1ЉR$a*@I.qJU7ӝ[Ty2ү{=&L^\(q0h8f!zWs 75iݺ`q6\ک}v !cS;T6d9v~?<NK I1^w;9+>vPfqRSa6Џ[p(k^Pr Wݰ8WGJUWM#qSУLwz}__^ع+S^~U1{;d8j 'z#Mz'qn蜣͆}t"\1Th++GV :INOi !Jf@bϜ^e9n#USf wzz6)r?^p$)n1"ybn\WwZS_沜5w' s'L"s555UGpE4ۜlNJ xꭠAjdʭ1ٯ!QEZp-';4vBF3Ξ绥Kwjh^YYAGRL}Bn%$e_?emX NSm@>޳ _|d=R7<諸(Zp@D½w2f~:BE ]L\\m#o\e9AFx 4H }ΞgܠBaE; X:)hU $ ᆴ"\OMMh4#XOYY@ O<{q}N)SQm T7^輅l:Rp5@2eJLLLdddhhm 2Xsܥ/D4=2Bz%D Q29( 19}ZxxxgQQQ* \[*vN~[x;ghj 4[ 3B&ž Y=  2̘9+664&HG(_{~'WL(`wϾ\J bbFO%&D@P&_,ʿ>5UPyҋ@4HΗRء"r#ecȱ(k o4 ARL']垔C@" .";Ηy f /'SNV*̗Z~>)!цfhU}EH$3"Bdr)>"BD / ,C@@a+-N |ݼ@W3]BBb%^!@IP$B-. C^J_C:b"d ~-28J\f(Al|Y'% d+"(_a[UUuvQ!RRe΄^gGHW՟Gg1NJy!& m(aihnIB\y$Q}Z endstream endobj 213 0 obj <>/Length 3221>>stream x pSU}%M&;}JEAх.eqg3>fX)`QAqZb+A--}ϼg{OcR .);$?srjh@5_@7 PM(~Jit=P(++ tPLG1c,X:uS; EaAdڏC\(iy^Pp~@INc8D,2 ߡ3ʙ5@p5E,.m q384*r!J60c8¢ɲD)",K<Q?Lʊͫ.&CCj:圔uP1@Œ[,Ĉaw֬ʼn=nuTpCTom]Umby6g J>R >_QYt, 座),x]GAVBؘ;FpMg$bTJ?|2Y^8|X+ uҶ@U4Pߑv32J&G?Ysɴ+Ɍ5^~yP"IYboI9p8~8-80캢jO nbȷæ}rBw3a]@ɕ-+oG<%{Uoy;V{YW~G(΅KjP_ ~71Bz| O/({߬\ e(eSg8tX3_A QO;f3q'N^P(UՕ?-f@TG+,,zaMgHPF c2yL(Ai oflFz,zvNj@9Ӹ&˚kxJyJ_TGO a1Æ\!$g%}PEyNw ?  Jc`;rpmi<ۅ8bw%EL]o\,;xg/2Y^hH$"MS~g?\5/ P;WVVVTrqA[J5cD uK=d"BtaSO͜M[WmxtcrtV=IR%]3b9(BQ w>MS3Hjήoy߽:lnH,7u6po:y3~r~Z>֠ lk (ZQ@jfJNeǸ$WRdR+A߄C?պQ'P je0z ߬ u@Ɉ+P뢳+r)auvp1&6kT"VCQt$'k痥@ܿ橊V+iǪ1j\ʻ珢O.9J թl4h+'j{Rz)ߩ^;Wq>j)˩ʏV=qNڣB:yKmeϝe*kRJ8oua w=a(u Hx^>&> T* (7d<$D(5Æ?j4։g~{TW+lO u!!HzC DQkw Dx$%ei?.- endstream endobj 214 0 obj <>/Length 2864>>stream x p,ɖde1 C@MNgLg( I Mi N3ieI궁 ͤ$vSߧ|ڣE2)2giWァgϢ)C`i e42hB4M PMS()A@?֗s277w2L&ӢEl5)P/^ݾKrB B:Nk G.>[J !u| P}P||<@E_><z27Ov)4ZhCqUhT$II5a*%?ZW]Yռ;G,ѳ@Z[[-օ V8_ܲ¥ϋzĦP9~hV%R4vCJdqʓ>t֕jk{] }G(PC [m\՘' M1Eģy ,sXԁ= U&к=G@S(3PVkVYͽ,xx_LQFCxSSC]DaQ3DI`gk6Ν:tyfzɼ{NHF[PMƘ~Wѕ;SI: -(ꑌzתw,^bBͯX *҆HVs=(=GnUjֳCH5IR24ga\r${K%hX.x^pQ|E9{ºO.p-f~D#U?ޘٮ]NԒD;J=%|Ƽx?ws.!2iW6Uw)qi3rjiIi'k8wwv"B|iDuvegΜ2w"3nH9!%9zeS@ʼdFf:ҳ Plv-oO)(봦|O/"6Q>elt /DqbxY8(%W'PqWBPZ O8·HT1N+ͽN7X؉ <+gT>>\[ni)euuMMMmJ\v0%!A<{xzv"JΉJTt "oYk찻4)A_oeԜӭo追Y\~P!NǛ.JnQ+X^ŋ(uA-HQ(?/J2 \ Cm ry>΀-0e8lLQ{ymRʢli#o\lnrÙcz8 JWJʋ9?v^׈3r% 5V&Wʗ,Bɦ5! ;_aC Gp*B[$h +YwF (`o(~b D4n}~T꤬>1I#SY&be6&Ej-.ߥF,WA( v7?3b(GB~\NV y;׃ҳr])D$)L ?S>O<2an{yNE d|@H]zq-V;QD0DB b@N qMS By4IF8WӫH.| ?ldgt.LM;YwHdU-MnP}drp%S[p-Ѹ8VPPpl/:<\kf8ĹQĆ~@ 5,ccc#""`:xرyol^GIC yf0B2h5Pbl###l SⱾ;7S&@p1$"NhIKv`C N NNK5h7!B]0Z=rtl`i>$$q}Pn[*8$J3 !6f4%& FVoTUU-ٷ&69͢։r錛782-61 edȆ4o qfYh%e\SC42h7w- endstream endobj 215 0 obj <>/Length 2928>>stream x p,ɶd/abLaӆCөә&@9JBhI 3m46%B`I m n3) `1l#S>uoߓd RdgiW}{O;9FQ(åQa(ʰie42lE6 FQMeqqP_"̅¡ʀ23g\zֈ@ 5kP_K-()Ex鑅ix9Z&(),zEv˲ Äf ũy^g7 Ec' $EB(F CtᆲP>Ǜ"-UCMۈd*㰂}Zed;wٳ@$n^/*m+B _ޖ~ /v54$$F(,$]~&ހmx :EĿjG d+̟?W~ RHs/\RMS6d3F#qG;YV!zQm|KhÃ' @jxxqOc5(;3{v0Y[!/RHd$ߊ `ݖNpCW'%LAihih7اOu\?zaO}zjF_lJuZ{'Ud5Ze^H"'NHB9l]3nj]WW %TWqˑDQڮJ @IH#If$gJc{I!FCy kҤ1Kn~jcc͢Dt (BQx<@Ke%D^P~+mhkohmmkqdhwe8i!h̔iI>c*,y^}<2嬵煞 &u$/l7EެʸL,KCSYc&Omsv\7>;@Q`6)qkԂٔ)=sWB];lh$g~ -Ͷ)SfZR!BEZ)rpb.2J2niv|?_uiv!rҬ} %ǎ9u(E/ 2c* |S%(UE9q*>>u>MW[^NhE΢gZ[ݵ^~:UO/42WO[։~s _v3`}(nJK[۰[*".ɜ2gVYf:/pGDÃ!^Z@3ȸm ({a*Zr%5w#E,/_kmWuoc΅6lJ(9"un+˘*ByMVyϞ9}BٕIIk8wq"Bl;AsҕWW~憮q?ზk`C!8FHj@ce7ü}\b[ B=RnЛ_!=SC;`mrɩлr݀ш]Jx'*N7R J[d{ĆxAK wg@ u0Z5;W3,<,vl7=#|>%BGaySoܸQQqqvRt]'Z?ɼήr Ȍ$*ҥπsLNeJcTNPD!Ps5lkb]z IYʕ_K1atDEP#'@ikFBɖWQ"ʹ>(Jh| rIm8ל'gvp&Cɉyޥ"^{D\0VtwJi6ؘD~Uu:Ij%uƏBPfAEýJ咥VHɆlv8#D"Ѐlh3۠i8P+P~':)1no0D8)#Ԩv7vւ¢Bez [WaJ''e QZ#U,\#5 9HOl!L)aPe2Dԛ<~LZ&{g!aTwk8,ǚF?҈ r00Cnv[3l'M)** !%(KE(1Ɇ߀ ](-C:;\^p"6df?p8JJJ [_JsL}kK%X!rH)Ŗ {C-U|mR:6l8s0SXR2dUc`C-KTTV%O;wno&>ʍ+)"# Wv{8eBy':<@ee; 6D]PnX1_ps 9111|DD˲+rP!QxrɜN6Lz~dB$ ʝZQQ1f^"GO`###G׮n{W_-3)5edȆ> endobj 217 0 obj <> endobj 221 0 obj <>/Length 1291>>stream xZ[(tm.P\;5r*PP.H9䬑7"rA!2)rb~vs߷~L^Y]k{c)-SSS YPX<D"Qppc7砠vsZ9 +gAA,WJNܲ*ՐyFtigRҬ,0lDaQ %]֭}mڷͭL m*8 *8k?f2 [@gAg픊\%v]v/׀C8+SY`PY߹a,r*8 *8[pr&0U52F-#FCV y RRqTdԟf>3ϕjT$aoҔr3fm;S  T);jD$%2 =1֗=AgAg''b2@$A>PX45љjjv_"Jw D @galT*-_3'3P]]s>V??N5m缼lii?99qvvJmmm1jvvkJJJO_b;f=)//_ZZ~nnJ77 v6[ bbb*++q wvvVWW\RRbᥭ$Y,77x<;;kJ 766 gffNLL(\]]AdhXFFc?%>a}ȁ#Ɋɭ;եo=DԋJg 32D###0@3\.7CRRBƘވׯgȽёb_WWg g{{GJͬOHHkjj?<<ԘMcTcc"毨 6$A0Iy''ggffPh{{{ p yyyAٓ`sYY8'''c큁"ic1f8DS}}%.tsNN5)Ksll cy$ z'O\>>55E^bii)k`o6#} W?Z(1#byssc X}=55(پ36u:6xkCM?|sU*5kYg2{?Ι{< #'Y(@?6 endstream endobj 222 0 obj <> endobj 223 0 obj <> endobj 227 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYl" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.X+`6ѱɍI$䚯?H5OOE-S S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?HeaTnUi[35iww3FD$9jEooJ ״77>(\e㸙ˬTjeXQIB8>֪1Y7ֲ3 vO~kI-/Um/f5ctQ42OsFu{o ,c,oHX@W^9QY@czDmE//67u?2d'ɮʹ w0]5~Nb6$N:+֡^0Xo"#[ n+]Skxb@9/u?4!oަӮ/Pi#34o;;>MGW`ʷق?:C흖*hY'G_ƮGNzL`6qGIG[Y-@DC(7"O8էR#Wt]T+us Fd?ʩ\ K .Vh"`:?UwGi6oi1@tQEQEQEQEQEQEQEQEQEQEQEQEQEQE?WמxCpײM@ M?EUr52*8kE&^"SNq*R㚣/?:tu{Fijw\վ3SOdKGySZs&ZDdD9a_.>R rSGaeq%u {~h`@nHET((((((((((((((((((+<!?&C<eК:4k{0AW?lѢO(%pxE^DO4h_h{I}>74GF-6?oWj&FM=QѱG[紟ѣi?@lc?Ư}o'hDO4h_h{I}>74GF-6?oWj&FM=QѱG[紟ѣi?@lc?Ư}o'hDO4h_h{I}>74GF-6?oWj&FM=QѱG[紟ѣi?@lc?Ư}o'hDO4h_h{I}>74GF-6?oWj&FM=QѱG[紟ѣi?@lc?Ư}o'hDO4h_h{I}>74GF-6?oWj&FM=QѱG[紟ѣi?@lc?Ư}o'hDO4h_h{I}>74GF-p^9)ZRE2KDOם|Av}rXy'??U꣢OhW(((((((((((((((((((((<eКBjt_i*Q ״QEQEQEQEBYnԤ8ϙrKc)%U  :F)w%żpHD|JT?{ͧ52ͳ@FQ4AO+ۼNp:883^dH&1}rF~&Z8-dZ$w;F4-^Yŝםh^Tiq2I4I,\N\a|-qgR3Y<1-Y!q:()nTstUtxlb ?yx}ך^Kk5En(JcXs|T0j3kk< v48'- ]K@0~QN:Z-1QG9"% A0RR{ EFuԢ`1cp;m즎$ ]&A*]!-%[+X+9O`8_|,[_7uyiED$,ɩ~\~V>}qӞ5Mdf2]zR?&cXL*rp3<Ҁ Fx%)GCpoR0|T}mv>^Fpy sCw2R<=iYq"zUy2 \Mr8`~qy~Lr\@EzHU]yI&Y@ $`>S Hڤ&p:>&o-;#HdNsZD#wOJ"vړ61ϩ5ZSo.SNŴ֖̌BnS8cրQa"YN͍6C06=#XL FwǢFWmvYZ˻2cO~0O|U((((+<!?&C<eК;]@{GTt_i*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?WמxCpײM@ M?E^:/4Az ( ( ( ( ( ( ( ( ( ( ( (TeU^i?Q Ctd%Z*OM=h{I}i?LigcKN4Th{I}]\&t<CA (:/4Aro1$#>io.FL  zG2͜]s?͜]s?hDge$8Kwq0b |6C0ތzzA 2g7\ă02g7\ă0*Zs*_Ni,32ǟQ]u4=,,ӫ1`y7{/niKIMA@C:W- ^5v/4Az?U(((((((((((*IAPot{dqހ/f, o}0||͏s{G[(G[(6h3,Y|2cjt2;mc<=ҪHXTsRM-M-1|/ 9!_6^x2=j#ڈt\Q_G[(G[(^ / 6?|U{i2\xT`H>OhV_6ނQtW}j/4AWpapJ si#,l?ZoC8?{߾=7tHحÝG(H}JZ e%vz_^źP$vz}| (g;c={7WXd8atHźP$vz}|['ArGy;SS kmC *A˱$Io|n3sCxJĎ@9?kv c?!xCpײM]TڛqlNsBjt_i*xtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@ExtWQ@^y ^5rP endstream endobj 231 0 obj <>/Length 1952>>stream xX?HK+&"``-;!BH<Z{BYXPH` R($@Hq 

&>bP_1X_{&iGӬ 5)·1Y&4ah؀\SZ@R`5d6TSs|{Tɍm祷@R*@@ctБbetFVq+4`{ޠȟ7_]X_]ǂBMe2ј,CXޱj,%D H$@%  ""uaa (z X! H!psl8hRMVxv6"V 廮Ugj`vpn"殸 ?CDl XY?7x?u*~6"xvWʷP7PCt[If`Ь6%C`VXs+hI) n&IM}i@@qRR}V${ܰae>O:{T 虙yqN^x_y&ZR&r߯!0s }0ɡJXiiX`,e#Gzt\!&7mK5]B/2 ֈ17#T`C_准x\=w`ahP\nx2>[^zI$/Gn{MgN[:H8A0m$dh˜ég)aC1ZkVĤ" 1[`7#1Uz*gD(Ir٩?+vveFtwi:h"ִK{CW _ TT@ endstream endobj 232 0 obj <>/Length 2031>>stream xXOHK!)` +DXB*4|}` z{B/,h9xȡ++ m)OA*l2\87Ε;rct 1Yy|>qD2Z:H+~Ӏ=m߹M뛯[„BMi4UB:ѩi,%D`I 29XGk% ĕQ:`"4"/?MmZ^Qqr6Y!؈X|N8^u MA2 b.@`u~cqbq.Zt̍p`o%fP 7PX!: eb.nazY,JXR돜hI) &Iuig&L /3m耵(ƍ_ E}ZR&,WC aL ` @XҰ6!GRszt\!&7MKk]_e9cW\& zz_Aqz`̓o"yy_>raw~\[: Ŷ'A0m$d(ev~f-<>/\+C+" [)&`7#1Uzʽ̲oxT.ڕ`ٙ#>?`JL̈ ^hFFdUˠ DZ1riB0j F\8md,!4r>;d5?*@[X1b7Tɠ5Pl1]п\bC0eunh*DZ' ײ0y,mJ3*Ë('K-_(jR(bR#L  U2G*b h'wHoffa@0-B"g!j6{HjSmvV0UN![m!0$l w:QcA-N0Eԥk^tLeP?LĔst&rcƭ T:Xz[:| $Q̌5˱*e٥X$% *AGn3̬!ozʭmA݁@ORaAle\iwz|3%bv@PB{S=ofa QoLh#e Wi2@Mo IX%@> `] X`EP]@ᴧqJAUI:aܴtL udF$D?vuE}7eQSF=m2wףò%#,e(`ґ!`{E5Mnt=t/վjVU@S= cs .չ7op8FB՛qbyw{q1UmtFk,ƃt>qwo 6#yF*G5А|Tu@վeghh&ςt'P^؃|NdT5Å}vg< `Y̯$;r ֨4Tڈ=#l7@Jwh}TXt@CnEҡZ鮝a\I {~w5 |?XgBɮB N%lOoj~ endstream endobj 233 0 obj <> endobj 234 0 obj <> endobj 238 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYKR" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?MK G0\SO$b*)3^ġI{HLr acuHu18z`cqsb]2G?u M j?նЅGU O+t⦷2;fO[2cH n$O@_' -zk+PTo$mیc5k 9ϙ.@ڲ|\emKB3$ʣ@U"JQwt}\wnjfW,}~z(m᢫@\Wu΢wf1/lGzVX#M彄hdE V![m8m?ζz\Ki&#/kkm4DG/$h~` sԚH4֗^MR><~Zf-Z0F냜Zͽi$Q''fsʤ3U%Ec؉nݤhdq1Vu\7W (Q5qChɜ.~95}٤IK!*xIg 㩩Ū4hRDi$Cҩ,z_]Bv:E-6-mVX@q8h[_ZG&䷌dHc>GȰg5wxˌ?ߪxQZ;"7)i{ SZȂK)IUxnM.%v(%n#jok><O=qK %FCW8+@e\fI`[# @^J+Kao F`V&VRO$e/LҲH ( {I(nRU)C ^߭!8'GQ:kZmItfM8rV ((hu OEP"VcQE)DAIQ@1O ( (? endstream endobj 239 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY*" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ]L}fqjVZoki#Eb@XYӯ좉RApdA(Ei BsCk]YF_ai%,I=qT{mt- (8/Y\Mk$7vbI^Vp62NAj "xRhqhsiӉ4aye>9Ft. C8賓[kfʛ ?+J=zmƞ}n-{H+ Nq`3! Xm =1[^-&$axǖ;P -|rA+[GMHUGNBrG? &oKo$+8LXRsq' ҴdnKf!ⱴ:q&/,gٽg(e<xH k!U\VV 8$p"K )#6Z2}~)<&5t! f2RUfP8z> mykvnap18a;eX~ҹ++E%џN6-%ކ7}r0ssp=jR^GJ~oAXǔ<P4"KT3(hL^yڈ{BˊY> k};X}5 <`" r~l)qw$-r1 )e8' Wmtg 3IVYLc CNn#y`Y.0H8=8A5E-o&o07|Wz\li$VF  =8:~_9GR]6V%E影oʩMb붺j)XLp4M ;1ާb{mxYI탂O#=x4j=^*Cw _1'.z{Vsm]Kkh{U9:.=ֺJ((((((((((((((((((((((((* ۔F0HQzڼ;B!󙭤؛wI\\v{tkOE}~88sǕ r].agoym1m,ɹ`(IyztAa-#.yGwSf/Nk|duL`NwG;U?-JADrs*>V9(=X]51AywӦr"&~ k.ccK;,i2Tp9:xe"FjJM_m&isom 0f؃yFCppmixnnl$x 0cG@=( 2K{ -;BR&C ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( a+MBğ63NÚ+ϊ.9$/$(\qG'p=+:e.Y$YalQvqzP|Ma)o/;[zpzWAT2I,[h$OrO$}\+za?e?t@A5=PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEwmRmrNɑ\'zg?;?猿WEr_ohL2;@]w3xutW) ޙ4A-$eY̱4Ŕc!>+!ڷ69s@sOb^HyQ3mN@ MeL~hwJ\|1{u GJ'NX5|G 7P1V$Fd e3qڲ=hZ7C"u`Gu9A߬wMZĥFb2yS4?C&}$7?nͪD|# { j6O&hԾA,=+SKRd$B#up$q޶Y c#LOW3o<8vO d&ab>`1y{ӥM $-튯7n ?<]i;[lڤK [9^:ջwOԬ(n5HY2؂kf[$>ZHΣx }9 zooeYk{FS,݌pr܁z+MxQO5n N{`ZKoku5Xufp>Nie]ir ZV(E&x#Ekj7L~>o4J^YQoZЬr!wIjpr۰{,OԖzZLTI#Hp8YY-̪̒!I4^զ-3ryL>`GCHT[ks-"r_O,]Fm=3!ߞ pӰN{&[Y]܂:z=hy4O7;>|Osḱ\O,Se!@)Z+]>lPgUf}wNTQbGlc'[IȣzeH\# Km Q()+iQLu [k]Y@ Vɼr:EW|CcigG-ų&I'*^ݍAԷZ6qG,7;Ll98ǩu#sYS)Hc8/zղU^n!km%Lr9Y߆7+q`&5"瓻*@?ր+R FЬhFԺsr*A}`Gp-Ia &3.ǂ;Vl&Sjb`T|Xij4\y%Ur2s߱@yEPEPM 29Q^7YXd0.2+k)LӑI&K(Ȑwn$H|AI+FQ33I=uiWI%. ##{߷jZ3X4.8 @:%w:uB+SNqa 7((((((+ - ASp?WE`E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ6?]]E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ6?]]E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ6?]]E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ6?]]E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ6?]]E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ6?]]E~[/]utP)lo.Ccu@!_? ~"-WEr?ߖ#1j7Q)+ c8'zyV!B45Q@Q@Q@Q@Q@Q@pZ??W{\ kAr(((((((((((((((((((((((((((X|IZcC7'hj( ( ( ( ( ( X׼-@?(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yV!B5ZoOQEQEQEQEQEQEhx]pZ??P( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( cC7'kkʵ ğ(((((+ c^"X׼ QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEZoOתוk?#@CQEQEQEQEQEQEWEwhx@e$lϧKrFƳq,CC!H0z)~}cIߛ?'>CghOyxƑX,w7-8^?GFl1k߿zқ\ClFq'P'&@6*e tY ?'گ2+z~>?Zբ~ݨ"_Cƀ4߷j4}PD? *+7ڇ%n?/hJv@G۵KҢ~ݨ"_Cƀ4߷j4}PD? *+7ڇ%n?/hJv@G۵KҢ~ݨ"_Cƀ,jWMgc,뀫I:#}@B`{0tyN}GRsҧcn#?ր4h߷j4}PD? *+7ڇ%n?/hJv@G۵KҢ~ݨ"_Cƀ4߷j4}PD? *+7ڇ%n?/hJv@G۵KҢ~ݨ"_Cƀ4߷j4}PD? *+7ڇ%n?/hJv@G۵KҢ~ݨ"_Cƀ4߷j4 &Ps<|~^Uf$ЍzSIsX|I((((((-@?+ G5{H[+ZU*(*23@q 4h_ضߗZu^KO*<O[oc)^ӚI"D8;B=5Եinȗ]xD^cy2ɐBHOOj$ph}"$X5,muS]\J8\1!TAR(((((((((((((((((((( ?μX|I7$?3}_F>(((((( G5{k c^"!? ֕fu?okJ ( 4E3\tO[5[|D"R3y{M%AQry3/f/\vM̃p0Siy4̛kl'yLcZp|?%G?Rs`K~;ՋΕ%gHp OO¶|o۷?GsWY-3gdtQ-#ѫտ#/tjB8tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEMyFuoO׭ѿy&!B45Q@Q@Q@Q@Q@Q@pZ??W{\ kASV7H[+ZTQEWI:/7\8еm'km?ײxڙY^3 YT:(b-ޡ KHB{º+RI5)~* *bB#uFMz7t>[|9?S[vc_|sZ%QZo!]-sZf?3)EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5~O]גk?#^yFuoOQEQEQEQEQEQEhx]pZ??P:GOAZҬ#n_iPEP[MQA?)=1XPS ,r!G {,[Fu_ih^RӛμOܘXE*!S:{sRV<7K=+ۥ1.G9'- {Pk2\n\Kw- T/d~Tޢˋ-&Є0%I11'}ןJֲ76wmq$( p X > Yi템ۼ|YG X(((-@?+ G5{H[+ZU(&3X7޸ܢMQ'?*o*7(?)?qSTyI M[im-m+G^{'?*o*)?qSTr E0.s/T Eug1[g;Ǐ}+7G޸RKDe:9ggbQ/$FqҬ-̗X"uU,@}Y:)?qSTyI +O\TURzr7G޸ܢMQ'?*o*7(?)?qSTyI +O\TURzr7G޸ܢMQ'?*o*7(?)?qSTyI +O\TURzr7G޸ܢMQ'?*o*7(?)?qSTyI +O\TURzr7G޸ܢMQ'?*o*7(?)?qSTyI +O\TURzr7G޸ܢMQ'?*o*7(?)?qSTyI +O\TUMk i9R8lܼ:McC7'k?μX|I ƆU @8~BL lF$/±u!)2G8XӝgS}Qϔ<_!qNx>u^ݝ'2ĬG"ɑ|cF'ipį=+6Tk- fX|/!Ϫ♩}Of҂B󁌞dP<&=Fwmۻ>xϧKwG[Hկ&G-]+ʒ`vH (%ORRcMX⳼3H>|M$oobxmU .@_E1]%O<^L̀{du h(+ c^"X׼  T~IE7 -@1(zSf[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=Mo?i4f[MdZٖGe=MOi)*o?i4#pt?'5 ğZe{]NU}^Kf$Ѝ{뺆 }¤qG9'Ҭ|b*تg' `+SgM=/"jSGC1;sr8mjvlZ5Cn*21q}Nb-+W 'OAWZ;4hղxV*HW򬻍bp%kq7(v`orv%[Ft{R^;"Ecc/Ne߭_m:6X:lFc&MOOK}xgcs1J5[{K1vQme=uέb&ʜ22M$J96jk Igb(QI<ƵdK"I|1ouTmcm$P/-̈L$@_j26^1o4XrAqsAjG6AuQzޣTS]maH#i * ۤ1V ԅ85%FwA89Zk c^"H4_ \VG#+ Tv4է3ΐ< 2r(${؊?.lbKn9B~[:x.B6xN v@\허l;*y $Y!?䉯8L8 z|n?/hv@IiCuqjБ.|~~eM$unY0?qG/۵K>ݨ"_0fDI;1`?~#ܼqD#`1|Hx n?/hv@RG'~:n2=BF;,sAr zo۵K>ݨ"_Ո%|;x?^p?Ow<*4 0̘9;F:{CƏj4˭JWWE$Iv^p}3B @n?/hv@ZTPo۵K>ݨ"_֕5k/\m E;R1?t]-#mP'_@j_j5 ՗|)+b3~ݨ"_Cƴ ߷j4}PD?*(7ڇ%n?/kJv@G۵KҢ3~ݨ"_Cƴ ߷j4}PD?*(7ڇ%n?/kJM^E,d A w@Ơ[ikU2CK)`3ԟn?/i38V3~ݨ"_Cƴ ߷j4}PD?*(7ڇ%n?/kJv@G۵KҢ3~ݨ"_Cƴ ߷j4}PD?*(7ڇ%IiQ@?*i#v1\ד?#^yFuoOŤEH'w rQ8lq1'1Ȯi&yXo?_ʯQ@Z<7SJy|y `c@>gq{yu'^208@ բ3촛{/yM!,/ Tn99Atőe/Grͷ|.^y!F|˜* (s׎PxWNKkVw 鷧ˏJݢ2%УH8o@pZ??W{\ kAoAJ[_M@ g2y3GaQ޺uVI;,Gk-U|)+f+h!qi|6gO:YeE#S a5rMl12-Dᦄ`;zEU yiGI@ e_JJجu/RVQEQEQEQEQEQEQEa5շvF>$qZk!+7h(((((((k7$?3}_Fn?'5 ğ(((((+ c^"X׼  T *jU/RVc}YҒ((((((((?tW_%lV:՗|)+b ( ( ( ( ( ( (0Vod?M^@ZJZʵqZQEQEQEQEQEQEQE5~O]גk?#^yFuoOQEQEQEQEQEQEhx]pZ??Pe*jm~?5*՗|)+b>iI[QEQEQEQEQEQEQE{_J:JVQP}YҒ+?@Q@Q@Q@Q@Q@Q@Q@po7z}2m]ѯO -%o\fqVeZJZ(((((((?'5 ğ[:McC7'hj( ( ( ( ( ( X׼-@?(2m~?5CoAJ?XV_(((((((o%+|((W>iI[e_JJؠ((((((( 8շvF>ק38V%o\fqVQEQEQEQEQEQEQEMyFuoO׭ѿy&!B45Q@Q@Q@Q@Q@Q@pZ??W{\ kAoAJ[_M@ e_JJجu/RVQEQEQEQEQEQEQEc}^Ҏ?tV__%lPEPEPEPEPEPEPEP?M^L[ikK_ [UYV38V ( ( ( ( ( ( (&:McC7'k?μX|I((((((-@?+ G5{̷[_MPR_%lV:՗|)+b ( ( ( ( ( ( (1>iGIJ{_J:JU/RVc}YҒ((((((((m]ѯOC5%*լ_ [U@Q@Q@Q@Q@Q@Q@Q@^ѿy&!B5w?to^If$Ѝ} EPEPEPEPEPEP\ kAEf[RQ[[cʓyhV_ueJRVQEQEQEQEQEQEQEc}^ҎjaLyR7M1?Yn)\wJנ((((((( 8շvF>vMW|?& _ [UYv˩ۆ&nR ( ( ( ( ( ( (&:McC7'k?μX|I((((((-8΍bL >]x>#`8jG \!aih?nc?k(Po( <LhGau݋Ͽ9qG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7G?/0XG%$ 4z_7B s0J5IkՅ̹ &=?ޗK|?(?!'Q F? ?€=)[rN:Y>'^xk+*i^ySIc$ endstream endobj 240 0 obj <> endobj 241 0 obj <> endobj 245 0 obj <> endobj 249 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY6E" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( Ԯ淚$E1x˞n+F׼TOZ{:}V^IRʄYpAқ đ 2y~E*8rr t?/?vk;\^M08i3eiI㚞)k`p$1GEmk\x?_ rcSkSp죺pTĆ$xXkap*;ƱjIPIs=Shֹ)h\y@βD ĭ‘#eZ4K*IyWn1s#3@WOZ{;ussnƱ11R=}B4_ ?/?vh /k;GO(KZ{s=Sk6ֹ)k\x͢4_ ?/?vo}< V`3 ]#1ҳJkǹ60:׷\ijox_o=2U9Ov=Vs^ QA k8aLcV}@Ķϳ !/e%O9Oz䰹o jb?oy sr~t C2D3'_ܙy_ː6ϮiM,-?`6sяU,4Xk)hzeYQ2}H }Jekki! r[^Fdh0"l5KP)nQJܑ,*g;H <+KDKynevJ;\Lg;gۭ_FM#8KtH`c98XڤZyP۲zAay=]x \̱P,cȋvW9{63\OmճA*$m0R2Tu,|Ui8ϓ ֲ.l4fImP˷jC3|M ߙ_q}zo:c_FX>o9*${G@l幺>j韻ҤM1mnRK,j߸?ԑ}~mu-p^A+в0'Lhb)? w4O}il.YK$AQyP^ǀ`1~{Um/Nn+ r[l0OPs(`Z-ش7P 2!2 ֤hig"ygv Msi qxDk F\r8SViĭ@2 8 PZy ?ڠd< 8=Ihsa%O;G$TE#8QM.i淖{EXQ7Mo)|@N ߃yjӝTaI|ǗO/8~=(`\B|Kc1=x棸,fHn.I"7`xb_ Hx4V9ݸjMzS]B(eh Fw͝@|;_6=dP}8F` n/mXīe"Yhp]xﭵI09QchV&$Rͻh8׸xmO$Fn`<sWkwopR+XV7ibBni.n>y7ߥ}mnfXHX`@OyM_ѵXu+V3ۛ-Xcq,9zG5 {g$"* 'ް}"^RIblc-Z9K23p3GnlnQ4eѺsP€:Aij ( x# :g5=QEQEQEQEQEQEQEQEQEQEQEd 2(.q.UVFQ21V`*mGD9@rN]A$:t$IV?+^mV9|k(f =Jڱhf]*}OCx?ī~sD!Bqmv\C亓νh '4K;|֏q>4 D.b?ZmF{Xȁ$Hf^hB<%ؿwq$:z5rޕӂGPqڀ1R Vf9Sږ]SD/w2*p$V_LE@72뚯>MtfeYN&IxB+|ѹ՟+M6UK?Fi_Qtc{Y4_WE֧O[vy6>jlE2J ~af2J:]K}>s?f1J:]K}>s?f1J:]K}F4gc)!V6$@?:&K2p?JH&ͲQZ^uKO[\\ Tb#sw?/h99bpaЍ]EsVy 8 +'qJ`'{YcDAm2]=7NUx0\:Sj̓Gy-wpc>u{v` 1HC֯ 4ŏKMN-0b:(9xc۵Ha4E{woր.jvVw$4[Hl#k^Q..tҐJɐ,8%Jq=*֔moҡ0-™~isݹlZk:;[kQ4@p~PYv~ZՍ?hvyU;{񚹬]gQI>[8$ >#qn͜.7.9#pjVCXGsfy0`Ȋ8Ryi%вF̎8g@[1nFVH8g Ɖ]H#'SWictDݝ] m| UKNv afA;##r;:~7;d:tkԴSTRlG3[!*(`F=+ӅF,;cL[y9HsҀ-U]6e/3gZ|3o%9R7sNō qR1Mm<P>{vl,"FC0y4\/}>h"6yyV>>pS RkpnmD!m^ezȠ(b F!rOԚmRYF 52Ǘ0NifYCKs:à+q@VK{3$c =\Zsig֒A$if0 UV gx =v3$vvq-evxCX@ҸE, b W\IIԤnw)oQC>2kBk.}s[,rY2n9 g4˻͞gyvg8njl3 lR3eK@Z(h g4ږnDat3emPqEPEPEPEPEPEPEPEPEPEPEPEPXO*٬cNmnY <>fA*x=z'}i-By~J]K8 ױ"9tmL9qA }d:Ö3 O  y^^r:t9ާX%xȁXpYrg$ztFu_E_:,ov|ls|o<9L&]N|˜< t[_:?9tq|?џSV I$*n_A3FG֠daG:-fIHvnsOnE\ά#{dc=kOWgG#:"/΀0k0{89M3GFvT9uFu_E_:WgG#:"/΀!gU_ΫAȿ k ZZs) 1?At:wREMb);yYFw &EYL1p>VMΫAȿ Wg@x/FaZ&mq"I33J2ֵQP^]ci-Ԃ8"]PTpM E;2 2.&DIE~= -k0kiOW?Z (..kh1k IgJsA\pW3FO IU-PEPEQխm.MhiB Iv$Jʬ[\Cwn۸'VEkm PFp` j(((,n. c6!FN= 袊((((((((((((((((((((((+3-j7kNsSg[d0@8[jl4岝Az!]lnzJCIt7kol dO,.k чS"s8$z7xXkx^r6Gbg}Qmz[$x;0˖~7cl0m>wrrKtQ@ŴOu.lڴpkihĥd/ Hs^MW./;^\,nJw\_Erlk(f>s'9 c jwP4J&9O +9 >\Kp>f##8sP, ݴ$Ŀlx˶j0sGj.'06.~f`?@h3ZkP\9co XWv7_2sMj7ZW*cy3#<yx8u+جn'A=i"#fKG[iW3q%e_#XI[("fQǸj6vQ܈_2 vqϡ .o<ys\ҹ",hJV<3m[Nh_Ujp*O [\wVK TiaP]OPrT7gVS+F>\ =I* Z+mXʭY2N:1[f42Ƞlr@>׷G.vrD= P-R!UgER (|ߞLFKcp ?=y%ŮGs;{K\.?窃O9̈́Q[I}3*a@>Vqi=<4BQM[h`rTawS>AuXd 9\c<ϛQuΓqm0rF&`YCne1$pΛcy*uem<0,JbE-ΝcxPYPaL+mdq@ݭŵ2"EG$*gRln %[1Ic 9$qUxkJ絼~tTyΖ溻V ҉wmǘ 8Yn- ;lS& A'ZZݝ*CΊ2>P8=jeD%PJ8AzU Z@$`9 gAPkh.9Ecm#'?qW'/oq;\kꡈ1W~y1n3n}8$h숪@c2}NEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVgZo֝fxEW iEQEQEQEV~H,adqd?hQ@W<,D:ic-]@ )RO'$۞f((((oS_4- Ǹ)Xr8`cܜ,m",c5Ku!F}z"ZӠ(((((((((((((2׼I{m%M+]7 _o%?"!['S )q>V3%≜ˌO?-:ƺ͍Ԗ\ep8Q, O{Pfa SfX5@, O{P?`jEv5?w}Ah{3\}=?qPa SfX5@, O{P?`jEv5?w}Ah{3\}=?qPa SfX5@, O{P?`jEv5?w}Ajj7vsI5Ihq?@, O{P?`j]'kTΖiȍq#`W O 5?w}Ah{3LC\/f3X#`c_ā՛o h^hy]6B&% cnܑ, O{P?`jsJ>.̓^~D=ݐIqK>kyww6$Xx"KS@=?Eš]Mym^KȀKg8a޹i \Ĭv6`NOu5?w}Ah{3\}ZQI@2<4=YҦ{3\}=?qPa SfX5@, O{P?`jEv5?w}Ah{3\}OFimiIC"e^z`jEv5?w}Ah{3\}=?qPa SfX5@, O{P?`jEv5?w}Ah{3\}o`# GVKEdxje{0$e2>jޟ4cQf $-Djw$RWTfհx(Az-xtE^@Q@Q@Q@Q@Q@Q@$QOؽ\h2 {S_VNdar?5tVa&del!,bRI9;|-?y.?_K5ZwZߕ ?+dyG.?_קeii~W(ӿP}} dy^υ_+N O@aK4}} zV>;|-?y.?_K5ZwZߕ ?+dyG.?_קeii~W(ӿP}} dy^υ_+N O@aK4}} zV>;|-?y.?_iIh%rICzV>ªjezM륕0Aiq@wK5fMJeIcD-nNo;|-?ZwZߕ )5+}%~;G:jzEŜ""@y+N OGV>€8M?V4RS"@+N? lZNc}C$%;*Fs]V>;|-?yM攽$|>n1튣K5ZwZߕ ?+dyG.?_קeii~W(ӿPidA)8CKK5n`^ُ0ɉOFtZwZߕ \ϼ/k+eii~W(>q>\ϼOӿQυ_0%|>q>?+N OGV>€</h%|;|-?ZwZߕ m8 %>C/.?_}vI$6R]YQ~]?VV>€</h%|;|-?ZwZߕ \ϼ/k+eii~W(>q>\ϼOӿQυ_0%|>q>?+N OGV>€</h%|;|-?ZwZߕ tNKK&p q݌PQBT3qOkXʓB2)rIQ#ڀ5({kִUo*XuP{G5nI&y#c@z=(:ȊCGV6Agr:*l*Qqj]Zy vxWK+V l_@)H'vr,HK3B6s2*ҥG>nWe { $C8=>z?gݜgG_=񌡒fΎYV*v.q8ft7RF#m~; psI#8D{i"wga}|UYDX`[ xZ}ڛ|ퟞ?ZD33#~Hqz$|oCKyxazs4D33#~Hqz$|oCb`cl34 ;H߰!Gvq=E $C8=>z?gݜgG_=Q@I#8D{⦰"Q1[--㋋m!o0 n@KI#8D{i"wga}|axFG/tH|rJwjݠgݜgG_=ٮ-FwKԈqJ$ Aa6XW>jxg3 E9' bYqgMTX׼fV&Uȧ$I*3Ώ}j4EC@yϴ_UKcn!F=ŔddOlڬ\8PgegXI<:)kۧ.fyHXr9ןJ/>Q1g$GssgS@/x}QƳH$Vk7P]$f6[#ٝXB=itU qGKY[p?8&B7q@tUtUR1ig=(HH31JG>~oQG>~oU1#C$qb.==AGĺ{uklHc >c߭t3I\E-<~X38$m\d''{\J((((((CO|?9+(((((( G5{4.UPGUX׼OMIQ\3@ yREPGHFOd]E}>m?b#E+a@NOy4yywn1hݏ7v(]E}x5XFc(x((ϙ>T̠ g/Qo!E._=~&;C.Lpy*G\ds,}~"k@CTc3m3eweB!ͬJdv,@8݃c?]E}>m?b1.Ku27`&BY0/XAv3|n}~"k@zBmyW>ߓ郆8 H$|m}~"k@i1:6Z5eSrzr :ƎJf7wRX.A px6m?b_ؠ o!'3fpIgK L=y?/_أv(5K L=y?K L=y?/_أv(5K L=y?K L=y?/_أv(5K L=y?K L=y?/_أv(5K L=y?K L=y?/_أv("MwGffa$!'>Y$wO=;gӒkG/P:??Uʇv(]E}u"Y.ԛzTnx$VWn=?m?toPBF DT]0+'7G6Uٺ?ɷbu ?OjzT,yhQ"dkldж:@mqGKU.ҸZwzn' r O*5|ݻ=z~TcYzTf& Sw'GZ HB)ȬzTf& VX䃟bFj{\zTKљHg7O=@4T?kG/PT?kG/PT?kG/PT?kG/PT?kG/PT?kR C+rt=m9+:CO|?((((((X׼1M( h 0z??U;/yJ얟i~*KQatE" "UʆA'hO+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+eii~W*O+N OGV>®Q@+ѤVֱĊFGSO i?&Jk_dƀ ( ( ( ( ( (8-@?*F%\ c^"qͿbPT7y?ST7y?@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE4КUo\ 4%v5[sI2Wc@Q@Q@Q@Q@Q@Q@ kANC^mhxT81(*׼׼ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( VMPgBjCO|?9+(((((( G5{{!6щW4X׼w_o ?O ?OQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@o:-PN \On޷h((((((Uo\ M?&m9+:CO|?*y`0>Ul~lOXߎ4R{0 H\ǭ^WM.Khys/(=;ڽa<η+n1I c9c#ҐVvٗ*."yG8~6N3c;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>¥HDpPojUs?PlVu- G)pʐ ºG_i X6L 9u'[ c#`=s[nciťd&hÎ"L]AP";ܱȂ<)\}~g}oz`f2lVʣ}N/>˙`[ˁP`3BA 2^\^RY#ŕUwr@%oJ鷳-p[cm\Ȯ0-]Bzb/db٥a#?7w~69MREiVb̫Ub3YpFSa+%ɜ\J<rAGjl:V.f F?6p=1@_#3`fIUm+cv{u=G o%ъ_6BvP~\cJAJn`"(7>yn;h௔0JrޝZg{l#l`p pAjk6p܆GcX|($d:1{+W$rng:"D(Jco} ѕy9">ks o pAA`P閯ijTO4oL< ( c^"qͿbU@?*F%%C{ @55C{ @4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSO VM@sI2Wc\u4%v4QEQEQEQEQEQEhxT81* kANC^m}{}{ߢ(((((((((((((((((((((((((((Uo\ M?&m9+:CO|?((((((X׼.5rƂq%qL c^"M4P&H`@ o?i5ƑDH7g}eeu O iho&?&&?&&c'hc'j2,Gtr(e8Ag'*?^:G=(ߓ?G?P@y1_4y1_5Ye*ȌvaGO /</ɏ~bɏ~bh /</ <1N1FE>&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'hc'j(o&?&&?&&c'h+G0HOCELo!'D]KWԢ4oId-@9`i#D~nJI 4ghڒܪyc,8Vq3hziS.h* (^j&ME_ &q9# Θ\k1CI}mC.zsHjV6׆Xc,s,Q#TPh((( c^";w@ZQ9s֝E\ [Mm4+x;$D VyT󋆍p2N=涨 K7YeU1n # dU<~ ZӸ8o8ٓ`׽h@j-4wY%>z8g%q3 * &hdA!de4xwxAZ4PEŦ F\)?6V4d?ٖҼ$3;:( Zq4Ƥ x)kᤍ$ۢ1#Wv&C@tr9oD\mTdW|QɦY<p2t{NO F M5 ;=U3Aʎ%Ŧ F\)?6ZP-ҨH7`RO>ޛmq h3;vFT9{VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE[sI2Wc\u4%v4QEP*sc/8$r3#h=Lh'[K2G`19[a㷗WKnV0f@y-'OlBheh;*UKO晥M7QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<MwXѝ*(bp5^VAuon:3װ Mϭ _h[~|$`8ʩeii~W(M+N6ПZdW8.[sI2Wc\Vu- G)pʐ ºG_i @Ķ>;NHDA'O$ r;n_ecepñ:x=^xb6HCnp{1>. xfX-|ufPE^y'ﭖ6H q$jJe`@pߍEˋCL 6Ba@d?.8w@:dQ՚39*pelj.r/nKdr1SM6^PkcpcR] !A#(S0tmx"exJ]AZZE-ZIh\/8n;>^t QEQEpZ??UȿJE\^Ԡ Ι.$* 'gSγ i!,Slぱ?lj`秝y:"YM#ows*̖ k3v%wp|tf xe̅3#'n=jm#f#ׯJTԝhD%QʂX͈컚GqȨlkuA; Ǯyhww?/h]K}w?/h]K}w?/h]K}w?/h]K}\4BFd=#[ ,Լɐ yʌH>SSHŵl'R'<n+|=C¯%w1q{}q@6dw+ nbp>sʹ\٫J,Eg#d|b3/y?lo7fo?Z̵Hfx y=3Z+F'Q.JFi+ۨڻ'ryY+Y.wKϔ1$(M!<<l"/kbnDsJ59DcyVڬ l:Ɏ+XVYmcabrd㯮82fW ]r3W'n=>ȯ,8NSi]+yV\YVri'ǚ~S!ynTHT`)_j]K}>s?f&]K}>s?f.q 6 ?6]<r2#5a\]aԧU | ^ǽ?FӤӒU9<$ր"ӝYKNMsJL[]I 31IPOz4m] kAO}|+_kf_G?G"?W٢1">ƶh oEȯ4/ϟE(}|+_kf_G?G"?W٢1">ƶhR 2[#Aa \Կ׏N-<WA+MQ~%Q4ukH.EEsp}kMHH[2c(OO SMSJI&͐f$gnSZ,Y;Xir4U2ceĠncq~vQ:0cFBa:{t48\H09%Il+M 69Sɍ<~dS{Se|[>S㵷88"D5T!=MMEV.- ]ò`͌du>$D"8b^-QEQEhxW"c* kAr/z?R;*$^TFFGYe'UEfU_ Q]Wq/eZTPou_ e'UEfU_ Q]Wq/eZTPou_ e'UEfU_ Q]Wq/eZTPou_ e'UEfU_ UX/K5b%n| nuT{I@ {I)+mϹQ@U-5y$U.A8*(7캯_ʏ*Ң3~˪N/.A8*(7캯_ʏ*Ң3~˪N/.A8*(7캯_ʏ*Ң3~˪N/.A8*(Ť߹m$::JơToS (KZOYh֓_?͢4O&i=e(KZOYh֓_?͢4O&i=e(KZOYh֓_?͢4O&i=e(KZOYh֓_?͢&NH=NI$֡y4^ HUMԞNRk'S֫}RCgn|uں(tY-%]AÓ9OܼKV4'䓎޴lNu=p,a0w3'@U_ SNF*K[$]gsJsJ 'zm?k?A+/"П+w.?x~?\_dƸ(,:ƖW`+Gɏnsֺۿ ſ M>Qn ,ʄ\ӃW+ʼWv_)B3 Fx:ckm 쬮"[$k$ı=K9u};9lmYUBW+A=OLՊGVoq(RF,Ҁ:Z+"{聰mn;#~~?ݩ-KF;sd-vO9Y3#tۊݢHЮ.,Nr\&[ز(C<|@Q@Q@ kAs~09%cTX׼m}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O*K=>BcIr!B.m}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEb[O(<Em}m??l_iP/xϭT7Cg#v>Q/x¦c'hc'hϭm}m??𩼘/</l_ib[O*o&?&&?&!<Fؿ ɏ~bɏ~bv>Q/x¦c'hc'hϭm}m??𩼘/</l_i9!FUQTP &c'jS4MȓfN<Ko!'D]qLQ\Aa&]d$|R]JldXZb'Ohe;"xѣ 2#5Z=8ecɖ&3P#u *xVoURM6S Hwgaqy ,i&T"'4ǿA]ʥ*3 ]g[hcXbw\s?\aa-۴ē@Ósր. Zsb\qœg=3UF;{bK)8>%S# d81QAe$vde6߂pq/~(SV+rtF}=AƯ:,`z,TZ:,Ȼ|W`udWӍK<»`e|ڤJ8ƛ V>SV49+:CO|?*+Zx5HEx#j ˨ywm\ (bNԒ@Ač5̷.WRFۜ{i ^m{ܮ6m;gޒMrm{kdWgR6$=~*yfM>$>dp<^ Ͷ Ap)X0شX溵%*c 3R Y#YGt nBncWظ8O]>C5ךc@]d_$rNh~mlOso7qd @]a806;w~m+MI9 HhZ( (8-@?*YnXhf+2 l~ujv6HU[ӿ/MWLItWX( <+J xm1„jg׊u; 4KfvQ*NjihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihSC7_%ںw`5k7 jdukTt4jihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihOWNOG?ƀ.QTt4jihURgEʍv,O@uMӿ/_wk_OѻZZ&ӿ/_wk_OѻZZ&ӿ/_wk_OѻZZ&ӿ/_wk_OѻZZ&ӿ/_wk_OѻZZ&ӿ/_wk_OѻZZ&ӿ/_wk_OԚ]r>W<\FāQJw?Ə];?\_dƸm>_R Nr8dhѠ.c;V @4P?iׂYq}4r@B"Gɸ ?7J&4Nݫ^Jаb/mN3ߵk@ J|ɾԂ$|%]x:%X&I:XG914`w==V˟L4SYg5MntgVƛ8;GzW((( ȵל:ZyӠ(((( WZ|d*ŕ@ }/z~O\r'h)_a@’=A@?I?]}%uȝI"ee0d9\`I&ry|<_vqLf:q>/d{8<E$2fۆ'@IYh:d7b;DYU}qq@I?]}%uEok?_X4PI?]}%uEok?_X4PI?]XERk(L+ Lx zHk2NWkN rqww1Yu|Y#dg3ß-i_+N ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (3_3?@ !UpB[<0q4T%@ 4ə?4əES?&g?&gO#L/#L/ U?3|f.3|f..QT4ə?4əES?&g?&gӥDPS;-2x͌y.?;#L/حlFUK @w?ZҿVfxsE+iEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPsM,QWv j+K;&7y2۞5{asKiI HRFx'{ZN9_$YbnR\J~p}(^qY9KrYr961ۛ fַ3G,Lҷ=x\iOA$wjp薦IrA$QS_jbjٗ,.!$Q+Y?} tS4$m.Aƹ'Gg:/2}%W^ƛto-$0UcS3$8SQ\Oam]cT~$U["d9qF rp7|_O>s̏#[j+I~<[.rǥuV^[j3b'q+qggڛ_]\Pݾb[ @Sy=(X?Z.b(\Dӡk)}"Z51IR02,G'= dyr*3{ƂK,+C2gʀҟqn̥.@s#j'' u?UQI(݌q\fVPƭwJw{g-":; Jdp?sK ?ƨN[_$;HT5Nu'ڀ7oݣs!۰4Q#@v5rGsz^u^h`e7+,aw gs;Av*I Efɡi-1aACs/~SEG+*A#օ^ 8-2D9!,XU3r<栶,IcY;<&F8 8@ψ,71# L2xYg]ok?s\fΗ (\ ϗLϗL`qv'l aOI'użnUee3HOO? ϗLϗLc\K"Ild#@9W-I+йTvU.KN 4ə?4əES?&g?&gO#L/#L/P?3|f.3|f.Q@4ə}/MYeTPǜͿtkJ8Zu@@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ψ$KѮIOb99k#U-s[] !(܌=K ?m>?'ES?&g?&gCys6UF>_3?Qϥ["،~:ȵל?:ZWy Ӡ(((((((((((((((((((((((((((( c?'p9k֤O+<vs~r)}"Z51IR02,G'= dyr*3{ƂK,+C2gʀҦD7Zݒ^8Rw-9N>Ƿ[u?Un@ T=ln2.V {Su3 Pf ʁ\2rG~yr*7SONAPY]XrřC;# n~3n^$\φ9VO?9G'' ,I\5șPan  r2)Pѣt`;)N;u?Un@ twHħ>thfn6y9ȏwh˒5 ?gyM|JPime$;N9P J'y!@-6x8#>4̊6rc)jZHܘ` =1րSx%-eHգmsjބc&i e]@}ym͉YdmgXs'6BT9O@((*ß-i_+N<9"֕^p((((((((((((((((((((((((((((6$p|AɗOk##L/c?'p9k .7İpɟ?*CJ?&g?&g`Z%t#=[ji1hHB"VЌ4w#L/1`8`.f8??V9qXÐ_6AD"+{UdHK؜ۧe*4g{@%~zm @Oc+\CyooI-%p#yNہ:^{vR#yQ(mr?OϗLϗLZTWYO= xvhF>_3?GF>_3?W( g]G>o,b2Xf~Шo?ʀ:Oȵל?:ZWy Ӡ(((((((((((((((((((((((((((('z:6Xd2p d3 } (kmo>rB(|[ϜТ?69G&/(M_Q } (kmo>rB(|[ϜТ?69LV$doR8Ȣȵל?:((((((((((((((((((((((( endstream endobj 250 0 obj <> endobj 251 0 obj <> endobj 255 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY\" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (3 -m[iy9zTOGbe$BVs$.nHaG W-˔ڲb ,E "Y/F ]x:i8ϓ ֑o[ݻNsĊXxx e'nW76ݏ1ޫX[sC RY.񃸜 h(w 2gx^]N3ۥUKدmླ%b\0K`M-և[HrXdl5{E_*UvKq؀yҀ5cDEU]v-^TITL@Hk+Eyvo #pB鷌M/aimsmk%WRDșB!R[>oliƣg_q/MدMKh-m, #%Ձ 7r8,n]"mBH-Erpr:f:kwضm4,;>}? Mqjf. X8jƣK%I929jh((((((((((((((((((((((((((((((((+ϊ.9$/$(\qG'p=+:e.Y$YalQvqzP|Ma)o/;[zpzWAT2I,[h$OrO$}\(3Ҿ#jvmq:ޡ͜2;sYxgFe̱XF 0ڎ($.q+ qh(((((((((^%崖{q4Dt0?sҭ}ܗ,:+/!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>!%|>q>[feLߦk-ZMΡϦMa `M<*H翥rEyoBFڒCmviV+_V|zZ2\(6=ɩt\sFѶ= *Wԭ-Ao>6g~3jz͌8ITm+c9U="Wӭ-_Sc+On3h>sa#E[&RWr1Ct}hz" H !T76?jQ<祻*՘##M*+v:mRi+G Ψ ADzEޡ8yny(cʳ~s^P͍:IV$>O*mM.B瓎{tǹη\(R;ֶ񭛨e3ޠ#k;/gf!cFFV8*}jeh76OzgJ%i;H%O>+V;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W(ӿU(V>;|-?\)eii~W*e[i7Nmlsƪwm8޶PZ "fV@m"-DZi ЅB Y]/Le 6dB\> 2jPrx gqa{V9 7'';MG6ON)uieii~W*=5g0Ob\z@QYP0q՜mz5Ư4qbāSb_v:+O+N O\BhZ\]B) szW?;|-?\Z/Z߸_4! ]:t'@M+ +?V:&w%Z Ug_%x sv5&GY?`3y8?ڶ}qXHRI7t$ZrkVBw)Ǔ'Ws\5-D1pʐd$ƺH4_ R#NE)4A_OӪ4˻͞gyvg8nxLҴ[OoL\"“듌`zqU4xZɠH5 z0\r_n}:|iecBّ 8Vmίn.O2d,Ǟ*x:)5 *4Ȟ{icV۸8NN2Zk\,_>1U"rQ׽k[^Fdh0"-幔X]I(@ss1`ln@Q@Q@ kArOk[ܑx9* *hUV]V ;!u/'PCooHZن1>wGE!hдA@#Mϭm}nO Bg* ! ϷoIqi-ź$[ TW6>'Q_y?€ ~T1ǹbNSOlwe[(ϭm}nO6>'Q_y?€ (/'Q_y?€ (/'Q_y?€ (/'Q_y?€ (/'Q_y?€ nn @cʓ9glwe[(jqi{+)t>Mq46Xr?] ܳo!'D]qƹth~dQEh;0 q"mVQБU4]M<yK3n!T~Q]"3&]9wϥUetQd3U-GqUy)<~nd`gO\ U-*[SRW$ʹ' 88ҊthDChaKyCwn3gmK%E:+iz (f.1}ZxWhK|vhZ4X c9{U L-FpF0kǶcEPE%ޥO$2gtX׼cBJj QFKfSXU y\PWGۥ^RKPr4#+c1LK_P[4] m+~t߷K@W >/_*xvHgF_Fq}jq4nzI}_'TqB&yX!=d@y _K@W >/_*O/U)?K@W ESt  O/U)?®Q@/_*9Loc*m\pq֕`k?s@#-CZPVNJ,y[s)xZϖXPkpP֗ƒlܜglG>Z`GPOzMi>C0Kc=@?ϖG+VMŅͽZ"Ҝ oSYwf"h TP;:v؏|j?#-CZŝɸ6oZϖXs?!zv ?PVb??>Kof;nX@yO#_J,Myø~hcb??؏|j’7HU+Qj ՁEn lǐpGN؏|jöEuiR%>g~?_ѥ ZϖXP+Qj ՁEn h2X0zтEΛpHǜͿv:wtO@[sI2Wc\u4%v4QETW3km-Ppdjޕb_7 ?unG@u6yCYa4HC?Zɥ܋-ā+2A@"uغ€fEy,;0 ju8nc K%YFyH+hЍ~9~[Ԛ?utiW tu ȏhp-58ښOvÎ`;~O(ֿogX1hdKbVx ZQO(*o]kG.?S=`5fSEҮ-{D0WB4M~8oORiɤkK`!8 (&5"LqvS38?OU5{xcnnT ߺ9$cۏJ:^gő;v}s5gcŜ}O[L.%hOo4lt3Sb_7 ?uCEMO(ֿo 7.?ZP;N^ikB$i,0~uv𵶕@P :CO|?9+(((((( G5{{!6щW4X׼w_o ?O ?Oo K#UO̊ʗ^BZҲ<*Oxhz[~B8Dm ՗TiKD^<s޺9{ۗhvQq1<[o3铊5Ti4E,d(op. Lk7VI z&Q0v U?bwJSv[3)Ff& ?E F:H Ui,Kx°vィ$ZQEQET771ZKB#9'GQo.[)JH.@gԊ Υl y%e̒.9FHΪķFAL !x{ 1%$0]b .B=HPy&ty/}B2gHmXu*3m9~hwn:t@se/Fpx(n <1N1FEc,VW6%S&ol`) t;x pK/ǸJܢXqDy@ c'*2iRdS8Գg g}]_$l\0&zp v3]ճE1vi#d1@M:t@se/Fpx*֙ u (@vw Sq=NI-mw z`DoiRpqt kx3ۻl^`{Wl7p̪ Pא2=c1f4qF6Cp1>k9YIIt^A?$hAw?(ܥx=lK/BDؔaGEU$<E_g1ק4줴VJݎL#׭\vŔm|ȝ?-fyQ~}w;1{tQE645pOw V AjP,b©r1S X]U6 #8wN:Pw9aK`zA*kHX̞&%mC)<9p;ZYZ9dkku$y/z{LyR7\m1 Ephu!ULpN0}APYSBfHu¨0$o9nXĐ c49ZxE'h=y Z.THAq9隧{<*9БnB;YZ(m앆!?Ҁ:+ЬKjfiBI$#,Vexz|5 tos8i6NLR@87x})r]ܵ)%dVҬ칊 _ɫ[NROX=xZn!U*$Pb_5Q@((((((((((((((((((K˅=v9SiQ4T@T`S((((uQ3yjZ((Us?T54К!_dƸi?&Jh(((((( c^"qͿbU@?*F%%C{ @55C{ @40_ Dn#9Nȶemh..& en6.1oquE"ry?&p=q\zB]@  vE&ކ6q{vM,2a0<`i x.$.!\NخI"K{+^ٸvpC24Vp@䄖a#Gvg-] 9c[,UdX(#jm5jnr{q1V5I1w h ǂVVxR6Ϲ15n{H:D6GXcm5bRɖ#IXY??2{իK.TItm$?SK ɥHڿ3E8Id1@4YrHchO힙@Q4w[ vsKudnfAu<>Qܢ0*{1$s20? Po+\E2,aFpHT{mMyr9ekBgqW0a11ANֶ3h) Ls($=.&-2w)^=Fzzb4R&%|#Q@mcݱeq2'Op(,*3`zփw6Pb?{ hz*+Y!r\*Z(<Ʈp6pO@Q@Q@TK2̐w+ XQPr*1!s>5T2ܤS,LF|x5TQL2( =~ (ZVMPgBjCO|?9+(((((( G5{{!6щW4X׼w_o ?O ?O֤HTyw@O\pijH$WmK/ a B988#JˏOK0jќ*Nm0y593HI$_Эf;CCTCun^۷$N-4؊ỲP2IxkkF)C+{EG%m FXgq[fR[gҭi[Bn7oOjѢ(_ݴR,-*B{`.moFc[wm ~ocӿӢ! Iځ\ufb%&w5x]`@5Ee̒_yTrEi"ԯ3ӚqRZ D+nHKnxִ yQ~}w;1{tQ@Q@ -^&<-IC: qrk@5Ti4E,d*v4f"ASR0ysZbY1p*1b ]{A  F4ybH?ٚFNF l,h*PTmDN%_zZQ@ZYYFgD]IsR6?raFyCn1od9<(Mf|h|q[Ȣ =򱲅s^Q@BG^bĜ MP> wH}q^iԭє ~I ỲT7 0sNM[x ¬nYx۰ tgjtԕ#es-"rLJtU1u6-cE0JF{W'5ͳ^ݰo)u@`am9xm^Kkr#vS `d-/QKokS(om BT$q+nݦhsscr9Hڀ(%| (%| 5wӠKo\U-E#`nuQڀ.}dxYosrЈ6V1*qîqO:— un/&cmL19{(%| og㹶H乜K( c`W.Q$l*h?w=1P-/QKoiK<[AsK%o7q#`JO%0n3'@>^}@dxG-/VUusoc3Xǘ^ yv{7a{{-4a0Sv;>Lm}}dxIi1R:pO@}dxU dI"6$zH+hzX)`r aHP[ϼ_+#O%0n3'@>^}WٯQg:<̳+29 Ko}}RytƎEy2Av0lJShR_}!xj9r09 ;O(%| t.S<#;K.z~5%ŁoV,AG!P3:=h[(%| ɚJ9Cev 1:.RYb77sY, Qd8sӒh[(%| K*$S_w]#`Z-/QKo5-/QKoKm6X8+wɴ7 2HϹG/mۡ`;s&Z$px#>i}dxUurD%HCcPɪsd#qUeݘԨ|-/QKojw˩I&'}#``+d{5Z] D$&>nk}dxT_Ueվ"`&Qqy jP?dxG-/U+Bu)m-ls)33Mg^G̾hќ*.X>Ko}}cG)эʸP>d=bvs٪Z}Lv[wc.ބF{ ?[ϼ_+/v_NUe/ 8 GI7l2ܠ2/ pHI%| >m>tvFۆ2̪ aAO#{CKo}}MECKo ,tj_Cjo!'D]qLEPEGRGmsMs7ILj0$+vONzm5I_PTd4wAs}i<xn +=0D̲M2f @4{K#9XluXo;-gb}8o@A 㢯@Q@ kANC^mhxT81(*׼׼^K(^/4`8zv"y w7' 1@& 0FGuqY\m6HSAaӽ/"O.USoȒ׶n#}ݸ qK^&R9+\{Iޗ'SjV6*Eڪ~u ܖ^%e IbQ vlZH1{u\ԩ/ʑ;bڶ俐?/?Ɛ`"[y%G ct\ 7{i 6] sLGS4.Mg`rWMۊOoKjChXc>O\r#}l}--d_.O+>gđPm[r_Vܗ@æC tyDmǣ{2<7F`(p@m[r_Vܗ@,R`PKǒI$$m!4m[r_\KIK獢b@a~j}?ʝfT#Mm\P3?VܗGշ%x|!>q{E-ٱ3Bԅg'oKjCh׷L/r,B<. OlԷvF鹺 x`~2>U/?ƏoK 6lЂ)㊣a 8Zd(bcRJ${?/?ƏoK ,;Aڟ9'֖MH ~R3)~g'Em!4m[r_Om` %3m(.ߕI{*fm[r_Vܗ@tVgշ%m!4SEX[X^G&1b#ޙ隅C=!D\68xjChڶ俐sc ƙ-*HLڥv`tAGگ 3&ऌВNN:oշ%m!4M 5ddb n:U%ſ5b* qAT?VܗGշ%r\\O嫬NFAG p*fm[r_Vܗ@ϦMqyD&Q !`A2֦FHW(R0&fB8m[r_Vܗ@4H$73I!_d(y!ٷI?iFwyn:t󨿶/?ƏoK q5X5TBJ2s?UM'{ U8wQMڶ俐?/?ƀ9#ƚDvIs濓΋p17', s]y}tmR+/'97rctҺ'ÿX'ÿX|;@[O:Z/O i}敥F鶊cIo!'D]pPiZq46v *C< 2iY?G_i @Ķ>;NHDA'O$ r;pxN"o>+_8 x_c MP> oEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETgBjUs?P6Lo!'D]QEQEQEQEQEQEpZ??U;/yJESכĠoy^oy^7袊(((((((((((((((((((((((((((*i[35CSO i?&Jk_dƀ ( ( ( ( ( (8-@?*F%\ c^"qͿbPT7y?ST7y?@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE4КUo\ 4%v5[sI2Wc@Q@Q@Q@Q@Q@Q@ kANC^mhxT81(*׼׼ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( VMPgBjCO|?9+(((((( G5{{!6щW4X׼w_o ?O ?OQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@M?&ji[35Co!'D]qLEPEPEPEPEPEPESכī??U;/yJJA'jjA'h~((((((((((((((((((((((((((((Us?T54К!_dƸi?&Jh(((((( c^"qͿbU@?*F%%C{ @55C{ @4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSO VM@sI2Wc\u4%v4QEQEQEQEQEQEhxT81* kANC^m}{}{Hde qHo޸oG@ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSTyI @ 7G޸})?qSUȡ-Pd$<[35Co!'D]qLEPEPEPEPEPEPE=q4ۉ,xcf kA )ig Z#)2>/f[MGqA5-)6M1AzZZ&4l ōdo&2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{2~jkyi7k_OO{7v¨& ;}5"[`Eg%gb$VE[iVWW&WDǜQXO sҥ1'K9.N㩩Ef4,Ne/<:g<&=SYdX;}3a@mzs[a8BqN:Ѥ=ƙo-O1VʶweA`P( ( ( ( ( ( ( ( ( ( ( ([8K!r2Iz@(*i[35CSO i?&Jk_dƀ (I"C+F3'}6ᠸm!qUyP+{ʯ=3CX7Vx+O&qK43@xh9+[in'm†Gl${W3Oiaur YS#vc:5i@m](8rx9#utVE`7+=UZ1g9OAUo$u[gqoak}Px9#t4V=Q[I}3*a@>VqlPEPEB2^oMEB2^ojM*˷Af5CDvq&K \#LROh}cq=חR#H?mC/+$/N8T39¥"+ "$*XCӂ3O$Ēy$9_5T=ɍe˂6f&g%T.sVෆ1h;(fwseVѲ1t-&\\P2G9+z*ұm#]P&DPH<(ҳ|E Ku;!Zu^ڽ*y J'fp'>^vX%-|(WU<|K9!鉤[t/q?ʦ1lO,2Mm'Xyr"e^U3 *=-YW xؾ dDiYܾA'=>2)ϕmnoN-gEOxegw~BRТQlC`R@سf=I94*k y-.r95v:2kK!fd* Xy YIOU8]d3!?>cC*QL dp?!Q46ޫp= bjwᇾ bjޏiz\=1LJ3($+ߥX҅o$Lm-P7~xPC u\6!&&-o38-jڭΤEh@Vͻ6~4\zBPY/'l&g: wt"m.ܴ@9'{/ENp/$Euc`sJۮd<@\qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCm*~"k@6Ym=eCkG/PͶ_?6Y⪟/Qosm*_?o}~"\m=eCфKbv3>֪}~"k@[sI2Wc\UK+s`匕EPU tۥ nzzU(Kk-+N01h|&B4l33rI h }iqoI(H„ >P֑3xnH\Ί:P@'U(['> endobj 257 0 obj <> endobj 261 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kk纂+lG1c$yQ֓$Vt/3Qy[nswR̻<%lnqw[UK J{Xʹ۽bBxU?v SxC׿ҳh"hҟy$_MS.iO?H:}ܺɊ̈́qi3ì\c 3] 6ooJm6i,m{wc94[]]\o64#E,#,N_Z.n-neD1d/u@'Ӭmd{tD|y Sള_NPMR@PZˈ8' qS;OJi5]ݶ f0GuHa.Hn>`:s,# G>p _S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v TG[,^^Z6BK/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k0ľ2߉?/猿_&>K/x~%k>\q!̛VO@g;ki9U;'Q7@-ElhxSq_0['G5{/Bn$72۵YE0rƺKyJ bL򒀃i%ŕr&_-%8^~Q僞 m5dCNu rx.r;PEL{#x #mQpO5Hه፧ò^69$"N͸/߿9 :?*:?*[mB#L\5;̘;m+I^9^MC%.HWM<_zh7h7⫟gFۊ28*6:TWYO= xv5/</Ώ}Ώ}h /</K@vOD-xqA#V&}K=篥;Mht "#*7g@8j閒wI$(qTX׼n{RiDiEE4]_hI/ v胫4N]K}Ԙ46KI 3]n ClIoIXɰ )#'nEM2VP̹zAA-Biw2e sֲ M;jyB[;rF1)Nf`f O@kYzjRI4lk1#>[sY'4~\ USWLaMD4H(':񚝿/k&I$ڥT!ݜc<w?/h]K}QII+\0&=ݣۃ|4F}y4L=>s@_5f(VwI24aRJT8]Oo rgEgo~%f}\?9ۧvEhD -!od w\oiQEQEQEQEQEQE@-E94? Q@??UʧE%ޥO$2gj QFKfS@VO$Ky@'?gl`nzV׭vk۝ٷan~oC@VSk}۰7g?M|tݾvvmc[AyyqQEoc- 30tP3Ns-[׫;nݜ6?ކ׭vk۝ٷan~oC@v@Q[_[Q4.f,{sk}۰7g?M|tݾvvmc[ݨ"_CƘnmzs61c-hmz7o]ݛv4j4}PD?6n^ͻ cvsz^MWnwf݆19l 6[dH_zx;Jϣڇ%1tݾvvmcmzs61c-hn?/hv@Lmz7o]ݛv46n^ͻ cvsz۵K>ݨ"_^MWnwf݆19l [׫;nݜ6?ކCƏj4׭vk۝ٷan~oCCk}۰7g?M|PD?ڇ%1tݾvvmcmzs61c-hn?/hv@Lmz7o]ݛv46n^ͻ cvsz۵KdzLzϝZ^MWnwf݆19l [׫;nݜ6?ކ.i<eRG + (Sk}۰7g?M|tݾvvmc[oLEE`8!FG֫o_Lmz7o]ݛv46n^ͻ cvsz?~to_Lmz7o]ݛv46n^ͻ cvsz?~to_Lmz7o]ݛv46n^ͻ cvsz?~uVMFXJU$)^MWnwf݆19l [׫;nݜ6?ކ4/u;+xc) 3m'ayǧ5KJ:ck}۰7g?M|tݾvvmc[J:ck}۰7g?M|tݾvvmc[J:ck}۰7g?M|tݾvvmc[ޱ\hQCwB=jk}۰7g?M|tݾvvmc[nmzs61c-hmz7o]ݛv4Ee6n^ͻ cvsz^MWnwf݆19l jYM[׫;nݜ6?ކ׭vk۝ٷan~oC@VSk}۰7g?M|tݾvvmc[nmzs61c-hmz7o]ݛv4Ee6n^ͻ cvszM R4o "eAxs?Aj(Z c^"qͿbU@?*F%%C{ @55C{ @4LM"Bm WM*׉Xb:"),AҰXdŀYgGB cjrqfDBRm'sϨPL)juR6K+)?vpd1,c?7aּ]KV bxMz߈Zo҄ Q:+MEi x|鏾˶hP(,B㍈3.)F | \4DDTUH9#IxExeawI\ۅx8"|$`x}|uۛlc9DzwiXLheY )APT1YiG6|X9kuۛlc9DzwQ]v3Nq}n.#<2O.M>ǹgkq*I=2g@~yuۛlc9DzwQ]v3Nq}n.1q'3ֹonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:+]FvQ9޸|Eonnmiۧ˴uonnmiۧ˴]FvQ9޸|@:J촳]6Ívn1qڿAҦ]FvQ9޸|bd , (^݀}9_?Aj(cG5{{!6щW4X׼w_o ?O ?O~6.{2p}+T}YmB˂8#j㼘#PG$.X7~Q7sch;3f3K y ƮKˆط~P3Қ~eqh*PwP]NrfhL0Gaa5:$OUnٗGoN;=Ff&M0+ZѮ_Y!Pʀ,qNG v4ڸ*/ a JȊT8=Mr-UH, bҘ7F*e?5(W y#<ӧe_,2u*UWΖ$e2[,q aD$7]y/%yA\~[i<2]oy|W&tTsT}:Qï֫f̶v1F$Bp[:q5$w 8 }A|jYwvQhNiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE4КUo\@-E94? Q@??U;/yJc}!6щ@ P> MP> YY&$0䎼@LےN;#Q OAjl4E²۲:)8݌%q|r\iTIyXHeIf2HUx20yP>gnLfEh[+ d6GSӿS>Kk!3*]I+M[24FwF:TZyeNǩ$}ǰjV2ڃ%]8wvdrk?A1 9041QЏJ -0p?Iݡ?j`&_TɎ*a+ks,lc;\JEۈmb1OfPa(8:d *.-l%K1u9MёHeXy-5Xc@kt9X0&-ʬ.7quҥinoۖ-Ro,_98WL P 9>6 v1tm 7&IJFc.x o&;f> 38v9"4x2?*D"UT)2=8' Y3\N O0tͻ?Jv t ILgۃU& Znh>mYa8պP"妖%Jrǐ cV.Kmނ< vگ-D,,o Eko$iFإ Aڀ3\km97#YZkXeuΊ} *&KT@QUKTQEQF3K((((((((PS@ cqM4(((;tE=e)3t*Qo!Ki?h*qk)S&+v U4К)Տo\~Z

hloJi#ڀ9Ҁ6Q(maš#FoHE<:PdZZI>6EsMa(= 'e鮛hhg3t5MtG!P{P-i?h45I(P4ƥЈvGszRh(tG4յEcGVM/#ESM>%횘[ *j(**鱱( Gޜ4Ƚ*MtGj-N*j(qڈNjBE/%)i(>SEQ,n |E~((((((((((((((((((((((((((((((( endstream endobj 262 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYep" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?֎8R kc#$JI$S>TW #iJm#}jm-<(T8| Mϭ^ %e\:R+Kq$2GlH :~D{aKE6m#H1h/xš %} sn;VMk#Dگ/^٤N?Jɸ3E)g~T!-Pؿ 6>VTy q4VLImͻՍ,aJ0i~@v>Q/xŠ(<Jx,2푑r<jY dvxl#8eCfkw0m$]4D#%kn|E @nktA%h8 eewۑ ed 'ObŚ6$H94cv4}~"kG$_M2X4P4~YW?c "o}~"cv4kb\m@<9kG/Q;i G$_MkG/Q;i G$_MkG/S"N G졙s8APicv4}~"gkx4l3Z?cv5[Ţ^ѻq7t1ڭzҿﹿ<[zi_EE[lƖXRW8JѪ~^=4o"/VW7@+7_u7M+z5ߟ."[[c4$URmgkm^fM\=m!6p?/8{V7?8~jђ@B.ӕ8>%Z*pgRG?,򄴁$4lmkȲ}3+.zSEܡ CHu34 p=q%U. s/j3yϴ jKmUSt0q>m䴷F 9.2I9'43njw}8}UWR_j y᷾(\A<2]ԆA9} rfxݲyۙNGLߎZXC" 72^1Ӑ:֭Pe').wy,gv(j*_أv(jo\]E}!}Rhٌg0&4AnNbš5lI( $ri~c@?"inFӑ`;e6>V٥E9kYƖ%קZ=ncX•ZkFୌ~QPYGI>PGMx>k<meGaS鞭翯;i G$_MTғaTN0r|UkKh④o U?9ldS3_-:#>yQGv]XtoDW'qc Xd\hTv7D_<{Ųv{``4KhЁq;i G$_M3N26KvsVh;OH>c@?"jj(;OH׭b/;q-`jos3)|l*\vqk4Q@&?h}"P E}?6HEms>FM/E\Ϥ_ѣk4Q@&?h}"P E}œ^MlʻI r(? endstream endobj 263 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYe" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?֎8R kc#$JI$S.eYؤH\mpxտ_E ϞַXխ$WS#xEnm}m??𦩅kmڠ>^z&4 3"&;Hv s9e3_$,*pW<~/x«ql Uz0A8"^5O.%K{gwT-tH9m̱B~8qP\E:ZmQEb[O(<Em}m??l_iP/xϭQ@ؿ 6>QEMAM8A*Om2 7P̻d s5m=ki1!0-h632 ${ypo;@(/?Ίɠnm3 d˸@9pH鞴/VW7KK,! yd2qF9xUm$1$IJ(osM2x3Ի8L}%j#X $䳌q jJ(os]uuxedX7J0u;hׯ0eUGPo/VW7GM+P?/VW7GM+P?/VW7GM+P?/VW7GM+P?/VW7GM+P?/VW7GM+P?/VW7GM+Pލr$a= )/?Ί+-Ii7E?fzވ1ȿ09ϩ5#Q-շI$vF'v䞦 ;F$(BJ jCffyUU\F1Uϱ;OH8aќŌ)P@l'X0:o}E;i @/Qo}E;i @/Qo}E;i @/Qo}E;i @/Qo}E;i @/Qo}E;i @/Qo}E;i @/Qo}E;i @UyFtRޜ\*FT(=iF{$ g-~nR؋V "0%1vTh15ɏhIKc`8Lg?^=4o"*Hpf=|9}jK8[BV? POտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(Oտ禕}QJ(/?Ί[ѶnVČ2@8EzyVQIemzF8N@"3G.sd{՗oo:#} ~p LC6&\3Ӂ< Sr!d'*&v~VԞ]2wX>ml};#mI'+8 ؖlA?_Pnh!ؚaeWd~}j $ȗII2x 5"%/]!)žc4Ɔ9odMrzsҀ%7y(԰-[8*E0d@ARuc+ WA."X(^?=MOżq7hufuɠ MBH`,3W9s?S- 0FM/E\Ϥ_ѣk4Q@&?h}"P E}?6HEms>FM/E\Ϥ_ѣk4Q@&?h}"P E}?6HELlIobQ@ endstream endobj 264 0 obj <> endobj 265 0 obj <> endobj 269 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYQ" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?֎8R kc#$JI$S>TW #iJm#}jm-<(T8| Mϭ^ %e\:R+Kq$2GlH :~D{aKE6m#H1h/xš %} sn;VMk#Dگ/^٤N?Jɸ3E)g~T!-Pؿ 6>VTy q4VLImͻՍ,aJ0i~@v>Q/x²kP0zc/VW7GM+P?/VW7GM+P5!`e,N}֊_oPhaXkh+0֫kR_yy+F1߭YK+!:}6,ֱ$$FIɥ ]B$;:9vrv0e c#ӹlyZEA"TŧJO\8WE:}ʹS`T8#< Ȳ}3+.zSĶH$(3"/U;OH>c@?"h64G Y=HrvM;i G$_MQh,ٿ7$]n_zUnP̋-1G4Ňu'"/guj$_MWIoDLWk_zX2#!-qcv4}Eo}~"cv4}Eo}~"cv4}E] 9Q8V. C L]FV{2( lHx"YvNHE"rhp~B3}>/Length 1090>>stream xYM(tQ a [ Y`hÐFR,5RlXQ1#!OٰĆ""{rns|{γyyseee::v]k7G.bvvvnnK\r˱ ΅ȂfI9-OzawxGX__Ü>Դtrr2990a777Nsww);;*,, ¹SkyZuaa4##&..Nٲx-5m1[]YY9??.ƆwO *++noo-#EEEEܬlYrvvvEEE}}};66 BƢM188Iher'&&wǕ-K'$Tn{MjHպ-k?>>bMMMM7??pppyy./'TWȤ9Z*e ޑXkoo\76 ##""D!𫫫SRRJwr -y< )Hۙaz WWW. r$2Ի;i566vww(+YdA,Bڐ|$>㟐ˀ[XX'XqRR`677@H+YdA,nr\^N+Bb^^.)>>@/)B999&)((H/)͗}`g&?jhjh4`R|0ߡiT#"ȕ+FBv'$$Ƭ,9Цpn0AD\1.==w\&IN(iVSDl6`P,U2ȕ+F#V+UN(iVK2ȕ+F@}%:brUTrŨ裣r.)B j IN'HLKKd9ߥ;ؿȥF.E0r)hq endstream endobj 271 0 obj <> endobj 272 0 obj <> endobj 276 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYef" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? 6p7mGWc{M?l_iTѤФDR O8VxE'h=y '{x5{{@6fNN 4ϭ[+Y=8%ǕtzT706> BB|=2(JX-mDg*]ϭ-@Im,F(}"\Ϥ_Ѣ?6HQbylt,ZFog8k4ms>F(}"\Ϥ_Ѣֵ5xcH?-E endstream endobj 277 0 obj <> endobj 278 0 obj <> endobj 282 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY," }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( (2`hK8k! /mb[n"݀"I*zrk6L535>\-aHel zMS:>m&TX,Db7䁕`nڲ][}ImVn%R9J- ^4Xݿ^QyǙ_˷={wֳm]w]v,j3KmuP^ܥԀ6BT!{fg`I?aCq E ӥY"ݔ7<>fog9\]*$}A$Onfy{]V?OyM9GpSæĚ^d.*<2ڈԶUCx'94U-CP`[v b9흤~N 6vݭ-F -ۻ}gXDouyFdJA*[&@(9x箴kxF Il.3Kn`z>2cb9Jo|3@= oWH" #O{'QLV}> "F Ho(6e` (CRWPkKn%vIJ(,%P S&PiW* H޹zvv.,g~ELU卥1Ng-=>e$,@Kq5Xcޥխ "Km~EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEs~![7#T|sbO&H;F X6y":'t5L( ԵjJj ss dv.E qv\[x{8j *CDa= #N%ٿtEȩv \F0ilٞ L`N:uԶZ$\#>wsҀ51EQ .3qHu8m>"ׯW\v>6ҥM,%Fc{%vqހ:8d-P̄U$EI\c5/ݮ`/!MR s1o[=o ^h/I&-~\&H0I#uřFPa9C\ո{gӕ^2fӢ%P{}ឃix&X䉢U bҽ NEg<>$KYYYN Ƴ Y\O-ĀM!pҩa x_xh .Yl6niܲ `yѥ:y5?cw[0]d #9hs@C"_EhCy T̺Y2f,v1gkxv69V{q AІ%N;R'.Ktq2]5nWva,>dφ`p1Zz$uxw/u`F79$CׂMi[%1`= (Ƕ~=pu}Uվc,#<8սbYYIҖ=IUjvfDF%a<ݟm϶kRRMAun`pOC t}- EJOl1`1ҹk˛}YD)͇$X .j(, 6So4nduc)Q8's@0Q -qM,wZES];k[]"&"[~CXrzc#J*noFlFvws zzY{tV7r1Jz'To\qXe HȲq!O̓#wTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEFIQoeky-o_pg#ֲj>6fky%Qn#!u2ay>ѿIrH|zQUu5Zi*]^&I`U5M.]Ӿ Cp%`gm.n%CEOS_` c 2>V8Eo\겍cF죾YqzyBsy&.S}~ ThG,HR@ϧZ念u4j?wkVoq1#[C$GTc't: #RKEʄ u'?Zu5{Fm_Y!ԧIݴ;R=lk:3xrѮ2;;cw o$Xi2xW}+ΐ6Ʀ' u$uWQW,>}*AdPȾsF# :n5<'wjUlOp^X46~EV1{tdrS(WQZ:-ж{8C N+[[[Bk{62(#bP|ϴ&'l\#w ]GںE\7otP]GںE\7[SbnIS&VZ(?Ə]GS.j?wh7:(?Ə]GS.j?wh7:(?Ə]GS.j?wh7:(?Ə]GS;-C~jГ*͐N2~6cI$T}΃֩ZWGʀ#Ȋ%#aW,,e'_υgE#@]%oqq,Q469=Es2 !]m|g֛zicE\> jNŞ)ُRLdtEu/C<WP?.Eu/C<WP?.Eu/CUՋ`J0p?:uy"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^Ey"!t+ ^S[3:ؙր<]CxK??焿Ih7h7Ϳ?焿Y!̼lA?Q]ljˆ,}3\-/, 1`C(-8}3]CxK??焿Ih7⪅-QG#+HHp_<%]zZKds;3G7Ώ}6WP?.Eu/C|/</oEu/CWP?.'Ώ}Ώ}6WP?.WѼJ ~'i?7Ώ}>eν4ZN𲯗::@?焿]CxK==:. FbA!fbK3adfSP+ G"!u>tUtUy"!t+ ^G>~oU [>5GW$9'?*?焿]CxK($vga'ЏZoE@m<%]_פϴ_Ts 0 ǐpG7WP?.Eu/C|/</oEu/CWP?.'Ώ}Ώ};O#O,` '?!Kziסϴ_UBO(f$$Iʀ],$r0?.JF64XG s9?+3LƲW 7ƀ3-ekm:InBFc-q׎ԖKqb!ٝ?p0]ur1۾{ְ5XFc(x)d?ne0ԏZK)|T}$H9OHQB0-QEQEQEQEQEQEQEQE4?ЖcuH.Y*I8}h*6~~W8F ?v}ZkUJC$I#ugIMTK-PyRCPpS99 $ڒ{39=G=N;'FWY T8O~Tnu ?Oj/U cWҼ$m@mqGKXi=ȇ-pX}]Ll~ճ4g"&d|n`3?6f2nܸݜ~Wn>>n*H^Gڡ'ntF?mck)),!A(#n._f<;r3:Tw %j.LaN?q$~'yM/ܲ|n4Ӱ|Gn #$֬3>6mҜ^Җ22/_LP<$X‗6# }Σ:Ρ!}'I=cВd (Cy,rW">$;X~iE*H>kyLGp`f*+ُ[Wh0 D5Bd'[g8?-rT#mfeP>mr9* 9di$v¦_AoZґ%G#[wy;?4QC_ Efk?bV kAPיщ@ y\T y\PO˛yYH#kJ0wzVSZHm>ӓ׎EkQ~y^r#Rqnj=.y#~\g#]B;Fwa&1``U-uAVg\U4X}JČWj1Am~ñ?b)^+X=mRy~|ٞsȏ>)}7`l;ڀ,iq.o!gUT2:zU lRx.ʣcl9֮KݤcH5넖gTV9'4 (_$ "uM=ەذt)+ǯC<?"W(qӾ}{E@ ?\CqAqkys41q$ma b-Mvl z.5;ſv'zm?kջ/eEFxQО< ƭ{,A91yltlU_G?G"?Wآ1">ƶ( Eȯ4/ϟE(}|+_kb_G?G"?WتnѫM.΅?@">Ʈ-E%l0=r8_'#I4x0H9ƏEȯ5f Mg'[y̻,o8\ޛk3[ȲL*.ߜGԃA>ƏEȯ5(OQO Eȯ4/ϟE tQ3zdy,w-RUZ4)`K}|+_j7,9$ϗ#zs{prH##+!kns3">Ư4 $Ƌ2)9ך#*!YL 럗1ry8 _h_G?Zp$Ukarcc&5+$oEȯ4/ϟE&kmk!i\drNzJlWG*G$%OUFy䎘A>ƏEȯ5rgYfGa[D\1$_G?G"?W5䋨#yOͻټ';fs}h"?W?"S[UHU nj>O}|+_j 9cXzsi~ @J9: >ƏEȯ5=؆O,E$s;WTu2PqF=-!+8>ƏEȯ5uv}s&74ci(O84L$r ?v z?ƀ(/ϟE}|+Z{՚+w#%qyONJڊ$SI,3G`2:qր*/ϟE}|+_]^)!L|܌ӎSDlI&] gր2">ƶ( Eȯ5bH-,m8vp0ʚVM@ |/QC_ ESכī??U;/yJJA'jjA'hODŽq]hۤ^onsj+-̆ ?NOVrٴ*r;W71H >J, q]ujv66M21g)9=Jw xcfXǝlbE鏧;t8UU99A=j*Ch$6'f 烖9պ(((((^[9#7XY)˺i pizIe3i6|B9\ v%yϊM?pWsOz-=a,y f:?5~;\|^f~ǎv!Oîic"ihe07ÐT J&f!ۅ=s8JXeW2K8yтch=I?.n Oq*bm rxf(pgG sJTp99f<3s9랙W(V9ϜH c+}ֳH:J#4y;3lu횷Eg\1Orl&Lo`8'zԳb/=qr59 L$c2}zxFvvGnb?iQ@/tnB$c bY duj;hd8zu`^n4٤1eb g_oQֶm & l\0y$hj( ( ( {m=„4gӚu<:(1py(ʏݿ^G KчD=NAi@Keu{Ē.|efڛ}H={ɕ?u,:@?-Ӹk9D%{lJ.kw?(zWߥi\0wF wdvդkHZqJ)q%((3E,N 'P:pʠ? }^&3Au}j$ ym<=@V&5%1)ϝ ^q:Hyݮfh˒}\B 4bfX zױeJe2 :ݴ 5Q\p0[.frJc?y↿l^\rJ.N9 pi/̱;|ċ3;Oͤvp@ rs‚1zMM D:u*TIm,Nr89,stQEQEQE^f/Li-3E V a'$Kyڬݳ͍v3ff$$1gNq%G"`6~9Nyot.R)ded mqkJ,;lzfiK9?J7ƪ2c<ΛbmMUR1 ~FFzHC@ VI6Kke̍vYx#Dx9TFKqS[Xks~ :l?".x99۟s@$EG$I<5t_0)ߑ=}=C'Z-dC7eW8#dtӦ( $P, ~OВsE!PJ06usb{Yґ.gBjUs?P+C_ x@-ElhxT81* kANC^m}{}{=v`4뫧IY2 }?d˭YiH %s`9UF(O|Gkmdkg)|#|n䚡aDUQF\.߭&M5EE7(^h@pZ6 3KHAE4:(oTP <1΀E5cFw`%Ө((({m=Ĥ3PO4%IP1h ?OP^> mQ4#B}ܐ+[H nQY~aT1^)̴,^.iPai*r2q{}*9WPcG#UH9$n8-CoNj*I9nLZlH9'q3^Mٵ7%Oc(a2*Ť"uR9wd:FU`;Lb0*H,{N=mRcڠDuq+$IH,~| cq׽,mOO2$-巘By9[>[zQ7s[>6i F|!quC Co';_/I'"cڞ-hIH,?vczCi' OhH]SG>Ԃb!$-xyr2> p?Zh\vҀ2hbKYafYϙ#JY@Xj8]mI^fQ8<工[zP%ҹ{`!|qz4!,N|msޔym@6jJvwk )i[bf@sL@lMv6PIN ~MO[wnBO66 |͸=C銳V~'6ƀ2_׼ ]_Z)BcwO}{VjO-(NΏ /8?Z$GE34e^޾工[zPVwmql! /<.Hyr?twggymَ6>n)-YG+)r VϖޔҤv ;F8ZOl *KI@Ki0?i(6㏛?;cv^Im&%&ݛqglvEBP>|%˻#oʳ3o9d;Wq#F rAֵ5̢H#FL?)xU4z 1rΡcYJù=ZP {bqu,(-d !Qsu<;H`? +IHdVSFE:91\.Ӡ~'_HƊoJ?[ҷ %Ny`iEf 5jdzEU$~G*TZ; E g9m}*j({Rڦ!׵ z(QSQ@6=7 EU$~G*W >TP_G) iTP?lg*j( EU6 >TP':j֝ӐkF8b}=ZPaV鋊Ԣ0M9ޕE`f٭[P> endobj 284 0 obj <> endobj 288 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.X+`6ѱɍI$䚯?H5OOE-S S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T Q$'"jB[=`QRx@S;O0I\Y]]oh<4#nnNOwJc)u@lsހ0mծu5c^q #}Q9_S;OD b(/<~p2>ڹH.bMW,YVL8G&9)睧E?HVoV;h0{;lXyj; #1hgr7CN4)睧E?HE\ҟy$_MS;OtP)睧E?HE\ҟy$_MS;OtP)睧E?HE\ҟy$_MS;OtP)睧E?HEOz7E,HE 3vQIu"ӹ)fHsP`ϼ/^OhWoo}y(oo}yqAm*/l3@ʀ<}y?ooWV pFy?-y? 4`ϼ/^P2Jv@"@-y_&k('y_&k('y_&k(5ԭumO}m6[L2Qy_&b"4j8'?yW 4`ϼ/^ qsDۣC2ȩ(oo}yd$1<0TE,{`ϼ/G 5ʒ<8C%y? 4`ϼ/^Fn @N4ԺIV4pqH77>Ԃ{DT!JGᏥm@3ihv|, Zտ72bcqE]1MD1=I6;ـN1GuWL8L!`NVCs( ;2S$hmB>WQ`WgZ-&]mrC]+ Ң1I!c!y`" vqyte$ÌP:TYG e E++|ϓqWt6"0ycN:Ea3\R n ͑}zqULxfAh#2KWC9$Ԃ{DT!JGᏥm@3ihv|, ZiV2e8<`$:(ΓZAqfg+#,tȅ{@Җ[YHL^}@lݾdk(ÕqʀP8"ØܗW8f[ !ˏOR3ZP|T1mɦC܋%[rF9)  ("[if+^C$oFEQEQE0-xFkPh?U꣢OhW(((&{6H*RBO<~#g;&YvO, +p@q Xa]JtqH$TAT` ̋Sl[kL _JGnHpҘT.UshlZ;x @3IKo#<^Ns*supA:!!Wp9{kMIQ A<{x$WY! 8'׀?*/e[RR6 }8'OOE#A#=0}ͣMFrȬ>p!vls2zZkknDN]B 7֜BF8##ӂ:ȇU1QdEdbWs*I6sҧksg~RO-O@:O0wf4;;|>a@QEQEQEQE0-xFkPh?S&R֗OVw qS_i*]+G`ѫ@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@g4/Gg4/]fxG4fxG5Q@ZwxXޢO)-21CЅs0-xFkPh?TW#V ״ɵ$qyۼƥ3jsH{G~(=#ky_픢4 Nv6~ո&1$MF=GX{7QowQCIIڈ,z(T_R6IHT$.;=EhSL8q 8RV7? \#FP}t$zy?f E0-Z/4Az?U(((((((((((deJqgUWNC7`98֣STs}$,H3Mq==||Mw#m|U'ס籖K]V5d y$3?5I!'\>?!'\>? %xo%xw嘆R sU[-lodH0wnU]!'\>?!'\>? [G ,ǣ;0 exMZ޶ٺc?"w~ć8sxvGmhV7 tc2K9v` :'zع?ΨC)+}X.$VF@8GcUg_y"Y d3;yg?€JkN˖3KP돗\hۉV .8t#sK 3iܟ@DHx1Ɍ'#= m%_-7[ǿh19g=b?Œ_'P]'˿T,`3{kRF],ei&G9<3^?yWOGI/Q+LpyglPFFEglglPFFEglglPFFEglglPFFEglglPFFEglglPFFEglglPFFEglglPFFEglglPFFEglglPFFEyϊWr"KlãȽQ@ endstream endobj 289 0 obj <> endobj 290 0 obj <> endobj 294 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ?ɿ^<.#@3!wH##Shb"?'sP$EfW()Cȥ&?BSU(e t4Յ(EQEQEQEQEQEU{MXs\Usů&h%* pz]s :ԇִfQ$W`erV[2R@U}V!r|θܠ%)%Wܲu)$h#nVR]=rzu8i ۈ`'l C"(cccCkiB;;}IHW+?zC'UeSm"fǸwci= n DE^?:|1ŕ3ukjF,h(((((*x\&FU{M*Ϊ?Y:ԎT@,(l2Ec\i%qH$(ЏƺֱqS Eu/iLBs`75jW#,(%]<R8р|5h,j Xg*VoneRY OPgߊҢfg{EVFEPEPEPEPEPU75bDžrohqU<{&Eu#IEj`eK@<zȿ?Zf{ZDd+ h[QCJFX/\~UI a#P; }$&QE;(7 ( ( ( ( ( ?ɿ^<.#@34xlRKfgMbUW2G-O&G-O&2#0(G-O&6iM$*?9EG4>.ͅJ)?%M:wU):v{ER((((((*x\&FU{M*m-%B;T`lns-k[EhV(`Ior>>}G{aAo;/ՕN !x\c^Ʉ[$m%m@yOٗl?-K-Ć9 IT4>F%TVAA8x4lR<6k*21J$Pg } cr~n1F*@~y宮d[m/%+ru*%%6q`eR9' +KNծB*nUlg+fEEU#) (((((*x\&FU{M*m#_.ʱf@KfQ4`sЫy\7#8%MphFr ` w:$kkT {yT LS{/IfrG=sVwk!bd0G NH{ ~jޛQ^[,wӷؼ_tDƊ1'ufc M'b43>y]9܏bSY0qX<1>aΣ^?5C{#lZTմv9Uo}gwILaku;嶧wslsjD flFx0SG3 pp1֤-}$eLy TQEQEW^9m[lqҴ˒c};''ӎ2{TP6S̰yo,$Xz4g$9aNM؛?;:vcoy3ESKsO,̒Egr9[V //l3 ul'(+g?~f?L~5f?>Ot玽1ڕ %wn.OHLs ^+L֤Sx z "/QUb,{->*_>#%7Nߑ@ ̘[|p*dG\ll8 q1ҬfO*hݣH8$QKurNB~5n,#i 2sZI((d-M]2#! n>gAEtK? G7څÕ% ;}$ 5Yjo3Ni]Yw#47 wK{(!Z.%.DxlaR:VAqt[F\bLt#?>CP/lڽ{[ӷ|V] 'yLJڅBʒPqq,I" 0 O>EFI- Bb #>I@Q@QԠ.Wuݮ2 zx`YmAAr<0is\7K-nVnf;R6;Njx\&Fg7?5gO2C9 nH=K݂pwV-ؼ=E7c, 1` EqsR8 jpf ?\zW7ߙ H צ:PNMVqL 8 RsϽSP\njҴ̿.Q3Q-t:!#7vVP$`U?5]3VH $ `x5'D8UkaeVJ=Itv*眡ueb߈D3G*?D35Hp8篽6UV:㌜Uf;k,'EmXi٩o3 3A*7-'SGQE9EQEQEQEQEQEU{MXs\UQZf"LFSj F8[&Q ±hUT]\JG20w8 >m-f!<A;ɻ2mU/#<,m.VkdwQEdnQEQEQEQEQE^<.#V*x\&FgHv8$fPTcԺ{F}k[RwG4 d3=%[e$9;F2zW-(Br9F20|WHA9R(Egl!~jrʌUw0 dVC?X (?OZh>i3N*@dy~MYvpD3?@}J58Ӛn(uQ@Q@Q@Q@Q@W Պ?ɿU[d*I(yS5j mآe /|fG%Xsţk GQ.̛K1Z6FdH2S!_s%dnjhMSR2RTK>8-cT$enïO_񮕥[Kw<=Z;؜V?bg5?vıi^$qbr k YuIJ͞~5~iC6:)B6;((((((*x\&FU{M*(L SiI1 r1~Ҟ-F0HLGEP*> endobj 296 0 obj <> endobj 300 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.X+`6ѱɍI$䚯?H5OOE-S S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T S;OJi5N?H?v T ;ILvvq\HX\ȢmF@vq[ -hHOUfi3Um | dTOK9Y 䁎J࿴v G"k#eiCR;Ȑs$Jnzw,:min HiOf"uw`ր3.QӖ m䅢9Q2OUԦkVbEAAًlw&Y3T$e+7 Fz{~]ymof>v6Ҁ-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE,-xF;P{E\z??S.͠RmIU܅p P*$LeD}v_LB\C$46q$`%xf,"9 X}h3恒}(J*twYee8!~-ݳ2DY2MME@׶u#o sA$ѡ h_(;vn3}\Gȯ#M;KsMYO$/*#Ɓs$9Tr :;&Ǖ4odm`r87vnn!+AG&((((((((((((ͼY#@Z(gwhG5{QK讬AQxKwY:D2w~n#)R_M)ҡq"K $Ǿz7?~to_@ ik g~X>tf8^c3(D# y.7c7uAO+ҿ/΀Մ1[<pxSO{?hPy1Lʾ^G?7J:?[Xv42A'ޯV~29QDYX`2kB ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (!T?!\uw_'+6gwhş1?;@?*5/p`GG5{@ΏgXP_c=Ak uEll:???c@ΏgXP_c=Ak uEll:???c@ΏgXP_c=Ak uEll:???c@ΏgXP_c=Ak uEll:???c@ΏgXP_c=ڪv q{VEPxF;Q@ kArxW(((((((((((($Vqr:fG#<-A&в? \o?Z`])}8ހ5s?fĿٮsWh$h»=&~\ >*K5{4혴J$!W+tF{]K}>s?f u[7@uAj&:HO?Z1; B;PH?5Hjo##,rxDSV7ng[(WP/-ƃ4?γ/"r 7Ec{qgހ/JADj8'R}~%ss%x#%G#ֵlJHrw͞J5]}i<$7g' /#nCd{J:Ң3J:Ң3J:Ң9oXӮ4{d!TEy?c E,-EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP endstream endobj 301 0 obj <> endobj 302 0 obj <> endobj 306 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?AM]*# %HT2:CYeY\ZEUJzg3vM}(IDM M1X:LNYVVFѕ}_JciݎrB“VJZI9S*ʪbNyQIyRl;`Z`lGƼXfdm;}8$<Ѣ;0bPWY)"0t?Mr/<F*rb {ԩrQvzs[b)Ms 4ڥ=IOXb *02YAp%D$Ag }j3Yۀ+tZ\4sн@ٜ)m<1aHעWU?-vNfs|l|@qqEd̋4mu>#,W\SwT`pBG:E}TIFK+W?C۽7b`}1WNe?Q~têYk'L13M( #ڈ4Қu;?N~*EJlORRLp* OTu /d96{jukQMEP&@]:)XQ&Mo8M:MAq:Aw<:MƓn:?gk%Opv>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYk-" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?5k]Y,R PAg3DI$tƺBK r؈Zy(̺lH۠ M%L?TcOǂm[lYq̓{X$йp08#!}j/I?ZEu6My!. Bldr2:T,m-Wwm¾GٌDK=zb9I?ZEYW-o%[E- ܌ZR]vOZ"E#՟5Oxmn}#@SAQ 6Oz(cmO֟G$ڟ? " I?ZEj޴(?Ǣ6?&iPMz+SAQ 6Oz(cmO֟G$ڟ? " I?ZEj޴(?Ǣ:[lᝠn!?%H֧uPkk|+#|CR ( ( ( ( ( ( ( (7 7^Ey#:,Ew4P3ύQέ>7 7^Ey#:,Ew5kzL+89#oBѵ fkKL YP?zIP{Uyѻ-Lr_ۑ?xE(+3^4 ?헾aB5X,{'ڀ4O%1k K%7#ܼ qSwĶ>#w#@@t@#=p{}Cvb54x J6'8ʞA[Xn#[cOH7u5vV~tQ,#Q`%Pd|k+RH"󆡷e/99{Vhon"Y(6sA#i/-`8 ##6\qV'8g)dfֳ 4F=7N{Y"SH)gGR]JK {D P6PFFsS@j6PIyomyT'8[]tZ;p<'JyI- [ ˗B(hAiԬ0JNx=qր:u݂' +9<ŐHg8HE[IwQ*G¸be\K).%FBYc3`ʜc'(r1p bp>=P֮H,.F=-_< yA_9@(bH/Wr+ >yA_9@(bH/Wrsٸ֏د?3 (Af-*S7`G\.28ǥw?¸Nip>o L1{8עPg#/4O'V@?+7^fgO8u uҺZ(𗅓1]v2\l\'~:ɨG-0$W6p P;V&pUCW%ҮsFYʷ(զ; ŠtZ]>+xe*< 0;q] vLB/n nWlz N Qɴo< +J\Ms8-.ᢂ9[wa 5> fKB-]( p'ꭅ-]6,X~䌙v RYF 52Ǘ0N&i*j B淸{d`1>42qsBC5%q6VzTwd]-j0#Vc-!H<2DZYT@@()`ed!1D,J) ~@#uR|ȪqLֲ+t~Tw1kՁ(c8>7y8_?񃍿{?I(H[\L4?jOf0t}h-~ y.X^f2AnY7Wv(IMXG/F$;E)ӽ…hA r(C7ZY)[ *^]O4QEs>Y 8y]t̀&v9FnP$+8_t C7~ k=̂2+Ĉʼnl o!H]xR0QVXZ/6-1R$&eor*r9'<V{%$Fɷ9Iv*۹ޙ_)sI/&i 2*.8RH '"YIlVPyز]mʹ8n@"C*n AA-B=v3KEQEpoG46;V$IےzdLbY;dD8 jhhR")gk@' -RYI!tG < }]v?/&>/د)ZȦ4h>8,w=zmmm׷xO{r޼=z߱;OH>c@?"kx峘EǓ~=X*@n~[exv?p(Wv?/&|hrm"f_@-!2p:0`=kJ7ԈfVW?+GP`MϗXCXȨ~c@?"j܆Иr4eI *ҵ MT%%4;i G$_MTfAC|HN;gz[ΗqH|̥=\jE!NO922ͳX4l;K%LMU$L%tUYGS.d@2OC2q>c@?"j]ſpf'*Sl#V[cE$,K%D9<cv?/&;OH˙'H@Q"/(#AOҒ;C"Z# hWn6HjE;i R,hT`(zR -L6vq1[`@ȯ@ ~a  W{@Q@Q@V :x$,ZsL3L`MoQXr [Y2iT͂JSAkk35"fT *UIRz4EAwwBIq4{Ryn۾88 AA 4YٜJa$DUm[#'1TY%ضiXHߍhB=bGUwR7ݸǾ*͵Wp } 6  @0aR@3 ?_;%{s@u?Un@H!I+ 0xbxGy$1yRč V@>l2x'@u?Un@fk lH.)$Z lHs={7SONAQ ?ۢU}mv~֣mE)dipeu#h|O?9G'' 2PI@O?9G'' OTyr*Q@O?9L3Fc})/S_(j1iUFp?w'' OTyr*VV3$S#Fgʀ;^֝k}nw' JwZ=俷##~^@Q@TW3km-Ppdjt0v8j=23N p\Hbis;r@ '4oRKx@Jyl <ϥjϮv\jd/*$Y@sԁ PTz%Z1r`ã2c}A%Z\1r`ã2c}Ft SQĈ]AjIomabbQK܃\^NVVwy4qAH.!Y-9?9v+K+{X1`c5mx-l185O%Ɵy0_(VQYZefC>3%7 D>O O-DMҪ* .֍uy]tpz.Ay"gP0U {U:Ο$ҖmX6ܞRCi0K#hˆ*ryrg4`}34-xpy+_ΏW XISI#>?2(_'̟~=Ϳ_{U:+?_{U:+?_{U:+?_{U:+?_{U:|:s l#fFr;S\o?toj/@,Ҡ0E3}y5˂ szWy@?+]V_⸹y#7s G_i G#/4O:(3'Tw>n-2/1 o#ڵ+ÞMXP}E Cd2NO'Ym?Q}>{ KkkY-ʺ&D qk0[kåI0 :~Q6LI"-2xf~"% ViYb[y!c3CQ?#p95n|-i$*d|yt py$uUm+IK[;xEo0M!-ټ/ O3VV-5œ:[\Tٔ;b[VBdPT69 C ElС! M\HPgU5-FVG<-ykG$w#*8 3'ŠRf{HiT+`JF$1:-A-̢IBk8Ɍ{` uz( endstream endobj 308 0 obj <> endobj 309 0 obj <> endobj 313 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYj" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}U.ߴ_;62h}[)ibP\E7i:]Hy  ;w?/k_Ed< .D?taH={ާjPZO4̏ #wrcz~s?f򼎋v$$zdgRc{F&Tgި"Mj\Ђc3~%k\xXGr7k 1Z~3u}]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f&]K}>s?f#4џsZvZDq&0?!i>ߺV밞\?"ߐ s:i1R~%CEM4}~%CEM4}~%CEM4}~%CEM4}~%CEM4}~%CEM5\( (86~W=gyntR83Hp7vw?/h]q/k]B]@ƞ\ѐHp'5-o/e?g±.O ([C-̄Hy1vTHrrm~1s i'p0㠥;oK $#qukG_-.LR)#']K}>s?f䁜Ͼ?Mص4}~%e, OHH?W N9R8 ze2$t5W5F/hQEQEQEQEQEQEQEQEQEQEQEQEQEIq'U-PEPEPEPEPEPEPEPEPEPEPEPEPEPPFCRyH9񩨠'MOSSGcRT,ktpE;w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h*oĿ٣w?/h { 4}~%C@89joĿ٣w?/h-ǞO=}*oĿ٣w?/hm'B1~?K\q3į49 tQEQEQEQEQEQEQEQEQEQESdbu4y Χu-u|zNШޤD>ʜ9=0}kZ;hVT*/ARЕN@)QU.< 슄䢇qyªK`|4*VCuǭD.Lj ]ʍ8=OaÚ4VL"9J&2Ȯrxe`#i,C0RxaJ ^0S=tR!QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE\#ti?FZ((((((㨢(*K 0똆y`)6RqS)XҜ9vcOeNNy]h[Gssc\]r⚰Zdҷ|~HWVӆ4_UM[j&-IUvB[xaH]mx8I8cY^zNaUշ (e^K<+Vۉ?a [d10q֭0*H#68ljYRUd [Ucn۫\$O6o+.U .Lq : d~sB qpl6kbOs'=n/铁n\&㱷oO#r eFg4!䁴ʕUs1N9 kxm.eVFv2R@>_O^L e"ͶɔБniQE^ZC\&e˭OY[J/64 ꓣgVS7ȅ7Jzt<.Ua5Tv$h0+l0>*Py&?6N ?ka 9SΊ.d/08lw i@rҐˌr@y@ÞpYm$gc!%$ttVR!o;K9m @TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE\#ti?FZ((((((㨢(((*+VXBG\*Z(+VXBG\*Z((((nm *$u⥢"nm *$u⥢((((((((((((((((((((((((((((F/k#tQEQEQEQEQEQE endstream endobj 314 0 obj <> endobj 315 0 obj <> endobj 319 0 obj <> endobj 323 0 obj <> endobj 327 0 obj <> endobj 331 0 obj <> endobj 335 0 obj <> endobj 339 0 obj <> endobj 343 0 obj <> endobj 347 0 obj <> endobj 351 0 obj <> endobj 17 0 obj <> endobj 16 0 obj <>stream xyXTG{=9coQDK "E@D`U e5C3 .*c,1&FMbQc4fͷπ{oA}|Yg}׻֑P;QN7m|DJAפ~8$A#~+ CoJ*,\=~(3fL)_'3`6'< ykak||B#}j<'TNQȽ6.w ޴)gm. ۾fQڷ#v[$*s&;cO;q3ޘ9cք#\'ֳsk=@%(j:BS37!fjIRjZDMSk:j15I9SK(j=B6P˨j#rQcM ʉNTWj05^S-ՃD);'*ՋHQ>T_P~T+ o EJB$?vZ)/yXΟٸ<; =a~벭˵ =;>X 7_Zκh_dVklꅁ! t5[W{~}GG _7Mpkp:y] Vmp2;3Y {z}="k&v3r}-]oN\\Ȼ? MelZ&3AV>mm,2r=@5J c=uf[& G-2N㉆DЀ.p#rr\kP.^Y1`P"a:=L7E!F{l:#;rM'CPr]b[Dz)F- Mv`pkM)+O'z,⅃:5C v9ʙE(톬'r$ |j:vR6B5ݐ{3YxYhX-{B+&tv}@zu.C{vw+^7/&ůpx!Ezz>ʞOq^a:#WȂV4O{kyv@`gI*F9y &/b9|YldlbPơ[b&Beq7G2$bTpG;XĎ3"A2ɷ/w`7vˏ־ ޫ=\}Pq1U޵[`l#<5hh`٦4 MoE蔘ZБ$&f({< uyX/\ (98/^v%򠎏۾U LMk<Թ̏%üLtTVsHAQ{j4$` am1'%hʝ<~W%5WvtᚙA0BǶx;XtNJ(Q[#WH'VHQdD6@ O>N.;*iG ^(AX`x6 3tzFB[cRƻBxo[,Frf9:C!Rj&[ eVL\fYTvx)v ? Mb4!:ABUIxff^{FЪC~6DPS-hIW&nM)lt:ҥM h -Lr]/Әjf;߶uu˂ty5qn-VŇǙw 6"'+K~(-Ӄ;GM{cG#)vQLUFjF!sx5iF,!hk5xD.3Pں}"/<9`GBQx2h "4MB[8| gaoP hxbp9Po24 Fșhx<~}]Nb.մ|^V;nͼ+N2Ul/DSLzRa9%FL9öiICy2ł<tGM^" DTKb"R$GDߔ.?/@[^dVVa%u R[[Y=dh*`O2rI2s,H& /fq^K-^֮VTs+W"ͤ>gL败/!ߚ_ D٧_'.@~˴UA{} l9Qw 03gBB J-Z)-<|JzP+9mw`"/j]3.ŝQ !ߜ0Qc&.H2Ԣޑ`FZV2 {!a2]K/22zGp|Sϝ:zCxH因vho͎DFv^ӈ֑@v2*[w<<ԄÂ"#C"*kaÍQ/Vk04d)- rڻpkD할Z 3ٶ'F&BSHƤ%B8f ~+@Ɩ}#&yGA^^аKSOIbvÞݖR2M!E $tTFLs_=k "% ~Ki¥XSVrc1@d( q1Jlԩ @F(%@f+ g 7-? |ȂL}VI#Fa܃JYХd/dg_9wHgc҄ 훂m~dbbqA };rܮ(2KLL*ޥ?NlA2jaVJ܈Ų~q+GN'!uРgГ~ckB4d.()@DRh { ?r|ٚ['r| 9J6wus쳁\ꙊCͿgϡN\;F; 'U.pH_"f8TCWN,FrX Ѡ4x\d;Փ!ݮ$ Vr 4y YQSv ڥ*vUh |E9L<"%P䑡ѐn(~mFN: =+#y.6(ۺjVjwL(ָ92k}^IdbIOonBw`f,s^"7ƗWT4B_~X~`3i3?p%lx8U-9ΎrᲵEo[_\* 6'b7( 4xeBJܱ,Ͱ˺c]-j_b(B mmVB!9:܁4x_CqkշV'!תvrIq)I,>fn3뷾 o< 鯠]07h/;=Mʼnr-5)z>MT&vZ|DTՉw!wi" R( xhn:r4k3L\nc)B8&)Rδ}uFjdA_V`ԘQ ,BNm10|)Czn*Q﵈Yϸ&MIU$6 zW< 32I|i¤4w}{;}9uf%P$P%$!b-9?s2a{?# |F`|<:"$QSU`qh̀uyn4UHJ#Ew,D+\l(URd9sb2m1q5s$y @vo|5a[AJ L9Ry2?mWo#̓x7h;^hj"`~A* A;YdB1_lҘh[."dSJ yb#e?YC>(|(,dSAՈ?$= ldk|7֯T( %'\5w݄)OWn̄rze2tӌUKCVo$iy''wBIDN`wEF{smnX=Q=\ЧJz<( y>7U˪^t@XJZE6RE QN"/'pje RҴZER|SrzlI>CUk/#H@UϘ{΍\j?./A2m nHO;~gr*8s郦.npZڟ[QS{$V0s0ksR[ )@\";Mt:C,V2l}z]()gBSg z DeI񄢶'>rS #O$w60cMUUx,rM.0i>c&g͡]Ue?{袸M7V|eG*8q:3uRJQbN+HRa45I 6k+WrrĦ$fò^-Ʋʪh-2E?cۺ毘*Y4Vzd]4ϻO[3Ύ1oWmrfwXaD5<(\^+dG~Lؒ߭E3yZB *}Z Q.{C!v]2 Lq#4kܗޅ! _ߒ K̂EšCE*u濿^'&, iXkf aR3\(x.DZ`Ur4AlN|QjZy/ڒM[68ȟ4m Lo\DTes%,N), d`cƕE((W=hKKݸw1t~{N* endstream endobj 352 0 obj 7609 endobj 12 0 obj <> endobj 11 0 obj <>stream xuUkPWac@|AՈ #,%"&`5(ap ϙ9 /y(41ɈctQXBJklV*񒸍9ws! g'$Iаob'T2|(tyo1# w=HrӖtMrbVbrO@"(MIU)cIʴXLOVjx)RSS72L&[q4uVQUjTA Wh zɗ V!#IJl'vnBK'Jb&NH)r8wxd&e6z#rSz# L_Q5Tfq00/vkwi6)TՐi fFe?'v:D~Dvз alQ3NDq9m#µx y'r-CɐoBҢٺvDko뺐mG(3-@ VYeӄi5Zɩvإ3FFWxF%Ϊ,(Z0WU7/dOZ7AMhn u'xN [&S&ʟV[PuJueJ3X~ݰl x?Dzʒ"ciE LR; -t=|>j_?_H>peoSG"O"xKiOkp?j|ϫ!!Ҵ*"(%v[?HȼK@[+ܠp{~y J,Ԍj=ѩSyJ8dxa~8mtLJ:'uhwHF:}%w(~_Ce,dXSz ГAZݒr oU4 t8 n*NPCC]Y>4?K_\PUQtu㮪*C-xCEMeT'=[Q%?Cqã-YYݻO&9P`k[ss[O"vGJ>oa=;W{,\宷Ocx&?IGdT@#z]1eOt!`n1T6F!w{Qfըk?(W, 9fۑk-D-@^,MY;ΆAP]>en8~!!kJv@N[bNW>GІ{V Q^>WP[:kr( Kdl&_f0)*AS1]cw1:%2We5FG5`Z,9bo y4ԂNޒ@#]V?'QZrza{vt!;h<_b57pBagMگդӵv3D C: _%ƍDkJSz>05!'?<y "v!§0#M5_4tEeX,تNa$x}R=wQ8%uz2-.eMZ#藾 f6f7,F08u>/:(b cpKHҳm6ވd8f ?r>cuunru# endstream endobj 353 0 obj 1874 endobj 9 0 obj <> endobj 8 0 obj <>stream x]T{PSwncaJAwR]QR "BW{@xJbU1댻n;tsw};Ixz$I.};2ؘqC?$$ʃ_-';cVQwVPrKH򭨤RVKFlܴ)TM.SdH%RuL.U y=Z$ٖ'sWJd2!YS\Y$ъL* eLLUSWH;N"xCkw] b;&\APL<^(|ɳK==}eߓJA5$)Bs_d+*kf#χq~m@TR-[98 訰Kh- bŒNVx_ &1FxnDGhSp82ԣq4i9xIUɰ S:<ĉN[;A^w!5R(iE1T7UhEȣ s {=lANɴ5QLmЭ#yl1:b6:)П_ހwTЖ3r,`+jA;%_@eb @ {^W}sێjWq2-Si֭˛Kp6P?0ent8y>"kT.~[uu¶-Mu}9eg9Dzcz(@&WO;2wIVR6Q]7ZqGN{*ph,ʈ8wZک4uA--7s_l`Y@i l0ԛЮ*T6:i}|N|F;mScYkd 5fh+Զ -z܊qĉ:uN͓ZI 3'˳]++Ydblc,F0:XtzFI M388KQ ~{ۚާ0-r]=8>#h=A ĝ6uQF](lst19+a=@7| ]n)v-,M-i{3]"tLP)۷mQx[㏠ 4mHs*K{ n—pf}mF>.CO_}>#O[V1g@-g`pv4 )-U5T1c0^|4~b'')=WO?trlqZ9!;ʭ1a=N&8_vwfУ?4bː7{Z^!ᆰ:A۽)/(VB_3/5=iz)H;$~> endobj 32 0 obj <>stream xXyXWDŵT Dh\\QPٔU@ٷC ;5Ҋ(45fμqI$!%/Vc/y{wᏮu=Ε1}L6x5+Nvr]aF 顝LG-/ FYvY52y~>[L)xoTomz u  ?lf0 vEZP];; u 0̬ v.޵iŻݜC|ָ [4|ύ+6zk3f2T f+YLc0Lgd0.=3Y80uRf3Y,cf2,f"ylbV2Wf3¬b9 gF2k5f3ƼEXI S,Y:[v kօ`6U;V_[SG= {ca74dˠ naș`a|*5gb3fuhP\"SUFm'4C#j),y ȑKrPA!F P&ā(+2Ui{A kyٌvMOOѤ+I_Ma9"T!`tEמqRl"8CANQ_͜1nUݖsVF5v "{?A}d^8v)g.*J{k |:_ Z)M&je\Vrĥ .rb9թFQHt.au3KF};ǣCr9ARڦ$YㆱC34Pɉ2X!;^P 6>#3$)j//~l'vvQt)/(7bρ%?޽,:y9߬=|ڹ'oY@> / 8r"}d"ѝžپ*Ig(Wx}>hAǕ'~",lU辭lC9pMv&DB)Jq".| kFs \`_8ٳƐdē耳m* &_mK8H6u?0(rr 0~//?-1k5jp !1"Q*Z|Z7ᄱ U7ɏ8ݢQVTSXϒ0$_7cNu!*/_̔Q3EhhNe0LW%vH .j’RuFGA&GI!֋y^XX9YpWT0./&<ת˞ݟة-Ҳ]/_H؅1gb_`|r4Dq^ci˙MxL sXȶFV#] ݕp\ΟwiBٙ+^P| VQxO r$'\o6|7:g:jSq.^WvyGtf6Uy F*6( AuA3)=z@ 8ޣ$6Xw}cQ/%,`P p9d[/sU.s E :ZV$ A TcJH<ܻyeIgRɈ.ÔeCrqJ*C'}?29 >cd눟nCފpPs 1 J8ٸ%@=鳟Kcq3biDh7bD7o7WWxirc~Wޏc)^gTςEI5ɱeꖀ`XWt$$* & tt[EBA k5+ք+dw+G7MM\Lp0!s4vwnl;S. X W>͉8T<=IICreO.?oƆ,&˨ ;~FalWq2KgfO1~X9J~Be (/vv> # Bfh_X Z隄DA5İ$Zw MEg7Ny<@]Q[ 9U\b1(q\)_ }/pXLc"Q"y ̽ޖ|ID:l{!RFncYs)Omr^YWW6󷯚 最OY 'P}w7}g!̈́gexL`m~$ TQ{NC2Y}A_op[b,};[O&~U t5\iS 2,;{=ؽ3qW}Z ЫgIzT^ժ,dnJU[_gh.O.jZ-ގʝ,Af r{"ֶ nP}/Qr+38";Ox+dzo  O}^WwR"@IyXJZǧI<{|I`Iᯞ M ybOzM< O|D^}$i5vy5>՚C "7,޿I {ћ4jӳR!&~+S85jfon3qzu_}ַ'qKcKWd;g/ wK̗]liyiyIřOHjSngZA@.kCw+=a >}Bceğ2M[h@RX~5NKT=k1[)h`y=0dtC\o$~HSAbO.:S+9\$zDO]i9dgsҏ|#TpF4I\dD@@:{V[Qg Gd`\'JOǝq{,=NK#ITPWP~$Ml(Ө!5A5~{Gi6]\$D+I-yڌ\>pO`\'C^YtOQxi_=QpZ#s;ݓUWG3EhEOtid<ڧS=H5;NWq=hѡ~V}Ie BKlL`+ %ť[l4B*B帳qtNNaO tkϯ߱w.,Z쇋: .某%?}q\Gyg +}OnIP3k[oOs_ЩӾ+$B~F(6wO.WRj]a4a VLSuxnSpKU劣С;QTm 2W2 hsFA7-N1="@BR<8@ۨƯV/Z^MS6T54N: m mtR)I LH'&ZߎCaM샮R[(102+MZ<> endobj 26 0 obj <>stream xXyTS>1sD@= Us3}VQ(*( L("s$;,cD(+JZkVϡRm>GWmڷ{$ c7d~e(pO'8SYlaϪ 4bG^#j aﶥ/ (#~c7$]@`-Gb7Naga} uŮY@v1?Y1">rr󨰒AOO?:rF>HvI:TZ~=c;N9~:Ɇ Z܄zZVsYzhFs^ކ]sc'c~ y̴;d7&&3h3hJWng‚+a) .~.OHgxRsp2%]@˾KeYyS.dugl=8Gep c{L8Wg\r"|v65Xhϯ4jshI=t`>Z *UnxcYDq`GooR(n996+s5n[S_ sh39UAZTCA&~.\=}޽ [\,74tKȅ˗\bi&wsh9:.SF.Wl:~W}ЁjŒSh*p4,9H 3] f|ɟE'q_ u_Mh+vbD)@C[rKv><j wH[S̮8^ДFy \Kzf%J<fX8}|(7-1* !Nx#%seiD/_mYMY+.ݤ{9u1D*qV2} $Iܮs+.\Wv}ٕQo:eӥ:(+wF+RJ*4᲍^T<˞ 5Zp;k}70+@_+fiLjKy)T.Ed+Z|g?{_M(Km?N:CfWA^y`(*V54|V$5-9#9]fny%~J6x%YuiU^S7!iqtQgDE"ɰPf=2Uz+S{_yEd@?hI.pDPg"Pv}NŶC}Ct+E*6љ/(/$66G}Nd G%[FC`&^bqiТƜ:pBcQ ׿AzZxciqIUp{tI;krsu:"EW+lEiyYm:w,zd=)J[o!9dHtCJ^n^vA_PWt(]*U@H«f䐽fiE6/@j~f^vq,Nku.j):i}/$kj BaMVxk- %'v#ٻ3l`\z*6\1P.!9Gm՚}%JKQ=o&s;rWNǩa'~PU a*# yI[-A';bUZ:ȢC4RM?B}$B̰UJgp14M?*J,WH|*"$tAג¯%*P҆Q> ZڣڜɓɾE""a-d=R4b?468,1fo hr2^RP=k=IY&u-O;T#v'+,/_ S+?N@._?Jd_}% ~`+++jn:~Rr=q<(珝9WA?dm>va癔Z;{j R5mIYObm}R}r1[)3h#`-6N2!YQɴ"aY3˓JjSmVÁj*Q(lc8Ja⻭SŊ}~L)Iw[*AwY*_-&3.];y}t44 9\fim|r w il*W@J̳@MD{9>e&+&r7j12,jb; +@g ehp^&hgdi~j8g*ڎ|YCkOY=mu]KtG9"_ytWbrM<U$T|\ TcVY @/۴%Xm00 + ֢hڣQQꙏ7d<~'[2Qyo KD v _|"PӱuG ퟂ Ȟ=`]>Qւr}&Q:.)%EFAV R:ͫqxeuNGg7R endstream endobj 356 0 obj 4118 endobj 50 0 obj <> endobj 49 0 obj <>stream x5TiPSW/<) b$ZԊSEV!0!F (LE@(˥UV.P-BԱ,1uZW8 ^{3| b#!*X |p2?cI~ Rr(x"aT˔c)}uEᯜ5+P7''f)"-iD -2qt%g"8#CaV,қXL:ޤ4MY!dCQj2YMܠEh>A(Ї(-FHh:@!h Q9HBLsy,n>lָ˨oZ6_lg +R6a~w>:-{|ͮ,%9ăpGc܅ʆ69d;O2RVG)":q4kKdd -(í 7~ݣ%CuԎV賂KW ,^g'GF6i݅s v\p̫L:G)O^SWC:vg2bYoBMIZʛǷ.yu*eaCh?ge+Q7uLu>]ximKRw,Xv;=^T*)-cdVa_gSKݹFSQ&wB\ep/(;'ĕ%+pxs8$.*тp#hca2_|djI|1$fveS Yx',<)`B䘌ܛ+1 q,r΄r|܃w7QQﭿ + n]hHr4xp.%o$Ar1l5RGWDU dYFt Fe͙tby gk,u@Nd0\E&5\nUwgZ٦,mm:A:0)MO嶒 B@z*ꎡwb{D'Ki}Pj\?ppD0W1G4dء TX&L&fmgD7kB3Llg5XN-FᙪgJ\RYق3cicCj NA5ey?Qe-RLh"sP> endobj 46 0 obj <>stream xVkTSWI+EmT{Fh-ZkSA *V*3@w$S| XŽ֎R-vGLߖξɌs̴3dd{o &e$ɤU+C6_2?B!gJdyhwL)X0WOތL"Y9$3+_2W9ɒIԄ ex|nJRz|.LHMJ\z#G>)'INJRg&&2bfbVR䜔Ԩi 2Hf9Y<άd3~Ll`V1KBf g^d2)HcO풷 ,Q6[6Vs\7̷MX;mo~{O{ҤHv`;~.h dO`\.l TS {n\9s 8 TA 74 kEŤ2*n6*I,nZd⛢ItFCYeCO_CmteFو瀏!m*|ꭗ7fI|XPL'~x {d ZfM%4BN7wu2Im':ggQl Wh̵o 8蒨KBI$lR`+nN. xAIJ LqXꂉ-?:9ΥH2xo^BTC`$'>@Abt}ԬcnF*,U T͡c(Id(W,U=u6ۼ'ߖi?XR^4lbcA,Rz[D?ܼ`e)H\68k4Rk**1\븑ؗYA H;N;&K1.[q\Ma*Ef4' ]۽#LaM*6tG#")Dٝݹ~f-Tus1,->DCqCɏ"0C9ZbȘٳI; !C6GoݲzR)if A?#:s/Lgv8 .ʖI0]kTJ0d,Jc{q`i/;E,:$C3^*'O*@ٞkpwpô\xp]Hc〸@xw-vZcUd^N0YN ώ;= )f8}0(yX^GfQ1߁B|bbΎ6̶OZ̹}>mjޣtB?=%i:ഡu\"7/Y;i ^(?֜Wh(wU(kZtt%{N-4ɟ, ڪ6hڭJe>:ڒSQV~R3@07ADMEq`XNV?h(n`.h;Kbk3ʀ?[q '%TPeUloy> endobj 39 0 obj <>stream xWyXT>TQ3I:ǤFIDQXcUp)*1j•E@@fYΙam@s%i5M]۸[[ͽ1i3>aj7}c`﷼D)sbZjlEQ忄K/(7Wv[#hI( yfo)I۔>&vlxԴiSggmL OMML%6/ޘ[>{ mmJN~Jr jlv於ܔ䔜,4fYf9o͝t_:n WL~-2j$GQK/T5zD&Sch*BM^^X9jJFR?8R85ʠ)iASF0i QC rX𗆟:&b^Җm<3 >W!ͣM,d:CgkhH{W@E۽[,\є'* x/&{F\PoMYJ hou4ǣ_kKx?P'k䮓އv^tBz bmg rx2} jx=_j5;ë `8=o(q4K]#E(ѻ{_UA&e[`!)l9Pnp;fPܰ_{UZ~dA6܅PiOGKS5;#9cUm: VoAgީ4'ߩuU*8eaX/`RC(EnCxsz! 0ÿ M E&UGʽ~)~W,-.%7{tNjFA'+!^"T jT} S tSPWIFj/\%ebfo+<6&T#U=xz@ЛN v FQw2ЈCמٌXE<ۋ\n}fǂU3'aÑ6~u(bw=m44K7N[!ʨRg.h{p'"(V6d2[4 %~IO q"^WԘA7?n/wZC1rZ ͚-83GˏT/v3c` 6 HoѬ{R`_81x NKF1h"F?4U1h&{\jty0v`7фwD#œ Ơ0*\Cxb<~dn'b3'VtE3h4=w 5"DZ? ꟰am(9Nyѻ ߌ] ͞Seb?CQy>Z*/5rAṬ'oDz?]v!BI7i>UHszB뭆Ifa}i,1zo$ӭ ޠ϶}68md`ǝcPu$\lf8f*ކ.xnW&h*AhZg7>{?Y 堿hhKE s|a%S9B?Kיs9הEk`5X4̄$`w4鴟NnΨd&TxirԕBxc&vV {QWl:ߩ}D &Y ; yb$nׁh{nB{ʎ}CN~J\Z~XX<M~mw8+d-|oP\?NK e͆Yΰ8-iTSJm+?ZVW15@$3mq8z"s&;v Vk[jkz_q6 B2{+W82*6Uu?H,K+67~ 3b[GbH^IϦ*d!c;bO%:B4 "nTNj9\uNh ]b[^+B:F_cˮV0Fe"RD2VtQ=# %h" ҂DV$0 /w>L3-h2L&jKy=i!y]c 9&ay \$zvh%s@ɕg 4HX!lUܢV b[:9Yr)OJ95|E$Xbpi]'=[v)G΍cX"Wډ\R꪿F4;kHފ[nh~JbE &6h2 :(Q:hh7o7 +߼h?h$ e:?T-t n~| - UE?#tm6v+o-vs2qB@h[xXgʈt˩9~椽S d*K2^ټ SUWRwn-Ѯ%EO.HĠW-4qܬ YB xy@(ͭcuщK%V9ntV}ck7mۜSPZvUhg٦ͭe =vKI9ˊ Tb٤]i5Q}2DctSɠY%ϡmElZD@_`)AWԲ<($lGtG{?sx~qV/JWw65gX$/M3'Іi37Dp j4 O9y3 I_P8]&Ӛ3 ̨2"yjݥ|NLWG{O-dy~eC)8Fse>^WYS*jn/mʲrj{][%6>m Vt ᄮ3p{-ʮqb` C5CMBQ 0 endstream endobj 359 0 obj 3534 endobj 130 0 obj <> endobj 129 0 obj <>stream xcd`ab`ddp pv44f!CnOYW~.B1w}fFF7hʢ gMCKKsԢ<Ē 'G!8?93RO1'G!X!(8,5bs~nAiIjo~JjQ,<.ȕ}C3Ǵ?^2TQ-:wrӚ'7tvuUu^Čޮni'O9rY1M^!:oJn e6~Q\?}FiLT yRޞ3_{i~'Le_u[|>I<< B endstream endobj 360 0 obj 356 endobj 65 0 obj <> endobj 64 0 obj <>stream xXw\T׶>#b($ أXPo,IE2 HJ/3pҫHDƖ($ޛg)DYl4Mo3.k}[wd#Ɇ,rsZau3g9H_ډ/WQbWCXo/Le;U[sg.bE?ٮ7vAP*HU1>};;EGFغF0LLq![]w }g6?HUKVG/ \vEǬfe?afemL0LaF3wETf ,f1c7ƉΌc0jf)3qg13f93Yx0k:ƅYf왕#3Hf3 Y2hs:=>3+j9'0w2b^R\`ǰR~-],?U 9Hjrajh0a;o}|A?o0F3pX{)ҝ 8[m Q@S=S؁4`FqyL3O쎄dǑ@PgA4pq*^ p j5_-). GXcn1EhuC;PO'ڳ䮘#G:,.=[C6ď2@\L@W d7V QЪMci"RB!\!NȢK̤]!I61C$A^T !:8(2&`ao~JcA#gi]Fnΰ_{K]h ,Ty$WTl*죣N"yՑo ؁:MFoiKR.c?8RڤL!}Gi;@#q$;jRN Wk|}uc_C䕯thF.OdTڦ $]ܟZ 1`Ch/) Z ϊj》R)ju73qX)9!l,;YR6/]M=f JShۉό$TH(g)3`A_`B9ױ8os (P؆}pd@֐ye8~J*' 9`aJ3 \lP_8ٳƐd)耳>¡7wW٦9tg-<<4ȼ ]ל0-0cb3]щ&pĖyڜ>Vi8`Ioad]RY"}{\Gg1ݽ]|漾:pa &L8L# \Qq` {G*B}rz5q'?mTjѪ F|â‚$ةFF1ЄbL=py5zKh'fw{Rzf-ҺBid*Go|tBeyFΔH*S==`9̬X}=4ߖ^;vDž&HZՂNIcLqA4L]Q}8}pԏ(LO^v]Uy% ~?8Uvλk2q Xʮ6\݈o&\\|ol:\Ǎ&jkPbd:NG:1C|Y'1N/Q6:VU1P@Kt~;gp)NS_OO"H$E&?⇶E;H//f߳2 v'\?7}Un.0&&Yச~ &B+ˢ;Nc="JHI]pѻrH7- -+}2bAv},Qa$(~\f(i5zagJj(7zw(wjU'DfD*nqϭ1X[3i٪vҢ=ѣp]pڴ f)OڕD7Z~g/^R'7ҿ㒌-{i 8]pޥ'6x&Be'6y)m,|QL_XBpRw1>md &|"o񕐷3C;,urz:l2b0dhݜl4d¡CŽ9b9u Uxb@$,KtPV%< *4)F wk~Mኢw8}F~qNN̗rj/47, Ts%~/$bxmơn䰝^^n3\Sѷk+̟`C;Wɖ}"-m p?()OIܡMO*3ń H0+:a ThTUpv\Ww,:A YD~w}pT.d&@y3?F}Jw7BN h+ ]Y jmJQ$z1o9Ҷ%'=el|&UcڼrY%N] ;RȏuQȞs КwR$PE,IT,f=2Y\{Ĭ"jS;t53GsO3~{m=N:CtGdVQF-@>47d!4[t-h3S$ QHxl,Df1n& qEC v2k uU\} 5w . Ro$Yq:-+#KQdbLsx-+.SSt4zd- [N<%)]9Y9%RW&EdGi2jV課+hIOc(7mԩaɘnĒ8fKq3#Bݏvс%ψnBT Tc_sRC4AoH4-xiسRbYM\i{sγ9isSs2 #!4t-fMfGQFMqJ)_ + 65ϫ^Tݗ)fІ 8K҅r O~HV^-q MEv]߹ʭ,u3tb/UmN8·v) j9";Op d-)4= ߓ[xr"Hi4VC[]īן)_J20",6ܿ @[&A %}h1@c*nST_B;f6S{1ߴݧN7Ӳ6b}r}IN Y6 "E%5M)aڝbq)O}yڄ$7. L,)]%Ɠ jˎN`.?"ɕFueU'֞N>$ gqrݸ#[ۓdE'm0a6êm ύ)UCc`ޗ_ TMiBVQ~Z&jJU7zW%bR$ӤlaȨ^8џ2*B4҄)YLHCk%O_ E/kt'ݹy\¥̧0£R),F8I\Fi`g@{߱P 2 (Z$zP|JdN:))ТJv(J?U,[f>RGs#LvCqV)¦ ɫi,<6:5pI$i+L*e %mcȠm%g]{մ7l qg?NqdVϴ@ѐN>ɫG7.pߩ?ަJ0ί!e[?MIR 8IIVe}~DeϡA]'?'LŸN^Cj`%Ǣ;E>f- Al ܶVþӛύ 9b6 zT-j\@t9n䵡s.NϠ RS{Ɨ.qǯXcEin eezrw\5*Aކ&QLb0o@`Kow*Kh[C*S㙩Q!h愤SmE^ uLΔZi/ZZ|rSj|,&_kYV}3:(W8t+ێ:z$Ħg/Qo6Y3dRK6,0s3&fYNXP M\GHWH״kߍLk5|!|p@|6> endobj 52 0 obj <>stream xX TwSA g]jEk]к[\.({bXKXsY {6ApbKULm,Zkmkk[kkos9g{weׇDWmtq6G1(Y}QxF SbhRJ3(y ίϚ5yax<8//*(0/Js^+ R8/ s|#+02Pbi,:*P)((MEWWk%K#E]NBUI.[gO3%nDLmVQoQ.?jj 5LRSW(/j:5ZK-Qޔ5ZGSӨ zj5z@yP3)OjZI-\@ P=5Bq0ʗ#IIm->.}L*7v+O,GKJLs߆~?8hQ7 9 7jȷCÇ>>b}50_/8xiSL9tYm}j4ϰӥuа x* z(;!+3E7)jH*:4U;ID;yNmb|UR@ARFj(ܱ1$bg^ a| هE>}; Bx=09MFYrvJϬ0*ns}ٺ7ec "o&x1:ݐww jp=Τ#o7d vMoٜ[{(y|lT`S-r|j}iBo<Olk2; KQ'8FW8Ί?Z!^<)e2/-(b䠎P'sޛ"z}ߓ\` UeWV2ߛ8$yQ9oKX*w9-D@Q}fe%W+ Bߡ[`9͊lIAXnvg;tQI@ ec32~Q-di=ҒԻ^oLg_1#VudOJKxMooo2ͩϔ_<י>F*Xjqٲ כV 8JHkV]7G8@>}ﻺ,C2-5>qOW+}|ɾ|m: y-I2˻R/$r+Y<SO܈[z[8KI>xE*XrnASRz +%K~;:۬]2aI|V;OP+lf{2Ni88ľ kV$AM*JRJ,&L"É÷QtXAϓH_Ioq"]7xlzXlzr[ Lh3=M\Vj!~ۦrK,5QJ^9rz9^F̈́Yc6id݃'a63C-^aadYm;s˒^'/Y1˾Zc,:AlnJC)8lW$]-B0ns_Z QdLp _|.w=TWZ7. _7֊m +/[NHT؊&\k:zQ^I>p*7/%4'k7զiJkr˲ 4hk ת|3BB)0S,o'fCUH S`;C(a/1d p[f7'Nk泞o N,?x.+|} E['XGԈFQ G&68tYءa?xm~ZK(6Dz`FEiP%435ؿFz@7$M̎ ~c̽r`ID2dAO$o*Lݕ(*34CT왚 $kYd? WNF Kxx3_-Kqd0nѕ1&K *|W]CȔ N\lݵ|bC.!~vFܠ8jӦ&=al#|u>z&+I1:}Y̞"|]n~Թq%| -+ΔǦ%gr![KFw8aߖ㕇HΦOD8ԄoT 3lz;t7YTܬ6x._?0CB!:Ӭ\8Sc/ɂ ZN.W(rV2:P m!~k(k5OMxr,_kOciq[Q+.Ym՜i4Z¶۷ݵm'2cʼ5Qۋ9e!]ܙW?;0U$kt\ABB@")ğfA$.2[Ed#*Yˢ}:|Iz#:ng T<-4{V:lm#^Փ(ѡc qMC$HYEf1px**1b/Ρcp W\|$dK%6$&B 4E@Nt+|7?#;ԛmUH~bM]<դGrOé p>oGo$F{ Q׺IeԆ@(d$V(FdEx߳ Ϯg/Atr uW_ȭg|~nyN9D]Tmd -:Mnu:{Wx6*,U sgsfkx5f!)H!bu֚ O;aG4]?> 9uno9 Vf1ʠ- mM>|%L5,N ՖpgZOAv=u޳Ll=BC#<ɷO~$ȟZ2YD6iK}u_u\Dar!un;Q d<')b FɈη"#6oVhFPpV}d3BX:E*`»CޡU(S1表:}T/}RT> G[i)zHAL$63۱ڂ"(cb 4¾TPuVd("ꘖO&!6I_M$GRZJ ;)+Jp(Y A*K*+/-q1͊fEM\KPiJZR˼:vIRV bo׼{Z;_YkNmō \ k ?LCtޣ ;-h`=}͛6^i❻U˗ia .̍%ulI45uV'tb(Rga9ڋbmDuk,4po _1s[#v3#yß={`ǨcwsLLT2}aW/^[E%Q|IGsiGڭI)xHgdC9-QDs%eP.PBDb= en{(dKUTd54@]wDTG6w~OF1k(STI{9/xFKw~Y9 @Fd#aP  Zv 87n\G&a}W# msN g q0`K 1BFJu @rtTa•iAS!%azW顡\]Kp.w/7Iµo:9!6/'lI@N y-k0Htb@fAA?X%el=@1۝Mw0PZ_ZǕ;yןm6wu[x"#kS23!ɩ7q6[HD p ƪ} Beep(H֩WX˙ !  Qۗ=CLH$€ H%)<#IZ3jwMT{$~\?;t@_)T endstream endobj 362 0 obj 4905 endobj 229 0 obj <> endobj 228 0 obj <>stream xcd`ab`dd v 44f!C^㏋?|YW},Tw}fFF7hʢ gMCKKsԢ<Ē 'G!8?93RO1'G!X!(8,5bs~nAiIjo~JjQ#g`bddYߏ]gs#{/w;#|TE77uqDbw)M]5rM5͓-j|W־>qdoLz\\ǎ%݅e iuݝ:LY4Qnֱyvs,Ϋh/mw]~rES+[~SNʾ|SxxM endstream endobj 363 0 obj 376 endobj 176 0 obj <> endobj 175 0 obj <>stream xX TS׺>!sĩG 8:OֶHb! Ife O@@pZm{Z]V}-նnzkZﭷ6ap~d#F]aiK7ϙ8[L|N|F^B=mcsG2rkgذx)ϹYhذQKoΰK""KoĹ M :3:rwB|pwtPplä?vIrNAwņxŅݐ1)"`Sd_p^0sy&af0-2f&0˙:ƋY2+g *fYgg fƛY,`^g<ˌ2# f*cO &[";dlgIN~~!3EW9rM܃a/81iA)÷ s2b+#W<3ɣ*G?/:fW6&CWy?|BB撕fSl΅M  oC%^`]~Ӻ g52q{"^]=Q'ϮFkb5\Jq4B| Z&@0D`hV\"f Yr[L#d^|]CZ+6L.f#xcY~eis!vSd4J2 O`9"N! | ]f{`RN4^! h7@+g3GF%m xk5KUve]!xyz&NAg9 HI>RO]C{a=^H_ XQ"k^: t8/I.-GPٽrppz .jst:VhRA,pdo 7#,yY,iF@p~kP: D-4gB"0&ktū^ƳRuzp9=?H7fT[%cS^*!E!!4З=> c!298NVZq*o* #+k 7NwWAtz-5褨-,_2RMgh<ƳbFԬdY0Kݛsp8Z 'c8nQZNTmh]]~-P^l+7v nn%ME5~GC-z!.Xߗ:e&Nx9U^ m ?(w埞:ppx@Yf4A p`SR&NJ*FinP'tƾ>8wS>w*Y(s{=ǁrчIרTSJA=-ۈ %1\܌1|׷Rt$28} ;EIVƬ^O-&F{CQ ~qֿI+0*rr'߯tZ/#s/$r;'wt,M&-Q]# :x_@ycYZ#bxCFh#7@?e{ z܈ZkBO*2* Rlab8|[AaaǭYFVQľJ!<]4&&϶.~zWZ~E q]֋qf!/tՏR>TZj.#SPm5y|* !-[+e?P$6FfN2GM89KUA^*/T$J/l*!.Ӱ]B [$qDٯ*HM oDLS)>7H];|.u4Yp 6$r"oQ^VVG`Q@!i"IkkS(X7.l`i!*`B[B+()*6]7M"4|!^:N*j2AT)u pQ'Es]t;܆7)?(~(|Ae^)QTb R0Lg =7C9[ޖf"u 5?3/(r@Q4uj:9h3F$-VLA*L W7  }%%-5<|<(b`ΗH\=KsNnhj4V VSEʝ,O %]Ǚ.P}/t)̅`ur*#['Fؒiw1 gxci~5*m'd .0 C9]I@(3eSkљ%@,bN$B*"0zi ɣ`Gnb?y!֊50  1KWC,ZП2}[Y]Y]Qӵ\z$n$|f]=UH cVmq[3a: iΊOJ]s^Tq^}ixALjTl>e#pp"Ju͓ <5im(aJjd'1+#Y TQeA{su PBN-eK/⭕jƠ. 2*I'E"P()k='L #v-{;LSfiiV-@'{G䙝Y*!ECҨcR7w謥Z-ܔhͅ4>h|g(x1)[ 3;OF ;w5{6p>#z/އ/MEO,)U @璉Xt@ǢHj"2R wz i䧇]\uJrOřScБf:OG-o*Hi=D܁4ClX[("@9FbKڪR1#5%LJps` J 93ǠCy~Az+"0q|gwzx.,YC#GV XRv~St yoxݺ } hp>@ITR/}T R(.CGuf&۾ɎsDv'LK5ś<UJI22)P'^QGo-fCoc&o$;⯴ʛkj `#E}L7dVUûguKDI񔃍GOfZ tFWdd61a1`m.IրrF:S/-!&Q X#ʜG5ÎQV<\0  endstream endobj 364 0 obj 4188 endobj 133 0 obj <> endobj 132 0 obj <>stream xcd`ab`dd rv 44f!Cgf%/}w\':9(3=DAYS\17(391O7$#57QOL-SpQ(VJ-N-*KMXꜟ[PZZZWX an.e@I?3qU|gJt+kle./=SNwÌ?u~$mZScGuc\s_OwzdzGts(*Oj4o~7>ս%9>JtOl&oz-b>s,LT endstream endobj 365 0 obj 344 endobj 34 0 obj <> endobj 23 0 obj <>/FontBBox[0 0 119 145]/FontMatrix[1 0 0 1 0 0]/FirstChar 0/LastChar 1/Widths[ 0 0] >> endobj 28 0 obj <> endobj 18 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 230 0 obj <> endobj 177 0 obj <> endobj 134 0 obj <> endobj 131 0 obj <> endobj 66 0 obj <> endobj 54 0 obj <> endobj 51 0 obj <> endobj 48 0 obj <> endobj 41 0 obj <> endobj 22 0 obj <> endobj 2 0 obj <>endobj xref 0 366 0000000000 65535 f 0000086298 00000 n 0000770289 00000 n 0000085825 00000 n 0000086346 00000 n 0000077029 00000 n 0000000015 00000 n 0000000309 00000 n 0000724457 00000 n 0000724221 00000 n 0000765996 00000 n 0000722238 00000 n 0000721975 00000 n 0000765193 00000 n 0000086415 00000 n 0000086445 00000 n 0000714257 00000 n 0000713753 00000 n 0000764387 00000 n 0000077189 00000 n 0000000328 00000 n 0000001339 00000 n 0000770230 00000 n 0000763405 00000 n 0000086488 00000 n 0000086947 00000 n 0000732250 00000 n 0000731937 00000 n 0000763590 00000 n 0000077341 00000 n 0000001359 00000 n 0000002928 00000 n 0000726744 00000 n 0000726394 00000 n 0000762605 00000 n 0000086988 00000 n 0000077485 00000 n 0000002949 00000 n 0000004240 00000 n 0000741424 00000 n 0000741128 00000 n 0000769911 00000 n 0000087042 00000 n 0000077629 00000 n 0000004261 00000 n 0000005163 00000 n 0000738492 00000 n 0000738235 00000 n 0000769571 00000 n 0000736720 00000 n 0000736477 00000 n 0000769228 00000 n 0000751613 00000 n 0000751215 00000 n 0000768733 00000 n 0000087096 00000 n 0000077773 00000 n 0000005183 00000 n 0000005382 00000 n 0000087183 00000 n 0000077917 00000 n 0000005402 00000 n 0000008374 00000 n 0000087226 00000 n 0000746102 00000 n 0000745757 00000 n 0000767933 00000 n 0000087476 00000 n 0000078069 00000 n 0000008395 00000 n 0000009591 00000 n 0000087572 00000 n 0000105661 00000 n 0000105693 00000 n 0000078237 00000 n 0000009612 00000 n 0000011162 00000 n 0000105780 00000 n 0000129796 00000 n 0000129828 00000 n 0000078405 00000 n 0000011183 00000 n 0000012918 00000 n 0000129871 00000 n 0000078565 00000 n 0000012939 00000 n 0000014933 00000 n 0000129925 00000 n 0000132967 00000 n 0000136107 00000 n 0000140152 00000 n 0000141937 00000 n 0000142002 00000 n 0000078733 00000 n 0000014954 00000 n 0000017970 00000 n 0000142056 00000 n 0000147923 00000 n 0000153918 00000 n 0000153961 00000 n 0000078901 00000 n 0000017991 00000 n 0000020477 00000 n 0000154026 00000 n 0000167111 00000 n 0000167146 00000 n 0000079073 00000 n 0000020499 00000 n 0000022038 00000 n 0000167212 00000 n 0000172580 00000 n 0000175826 00000 n 0000175874 00000 n 0000079245 00000 n 0000022060 00000 n 0000024283 00000 n 0000175918 00000 n 0000213077 00000 n 0000213112 00000 n 0000079417 00000 n 0000024305 00000 n 0000025180 00000 n 0000213167 00000 n 0000221248 00000 n 0000221283 00000 n 0000079589 00000 n 0000025201 00000 n 0000026574 00000 n 0000221338 00000 n 0000745292 00000 n 0000745067 00000 n 0000767784 00000 n 0000762152 00000 n 0000761949 00000 n 0000767263 00000 n 0000224688 00000 n 0000224723 00000 n 0000079761 00000 n 0000026596 00000 n 0000028153 00000 n 0000224815 00000 n 0000236199 00000 n 0000236234 00000 n 0000079933 00000 n 0000028175 00000 n 0000031077 00000 n 0000236300 00000 n 0000264313 00000 n 0000264348 00000 n 0000080105 00000 n 0000031099 00000 n 0000032876 00000 n 0000264425 00000 n 0000280067 00000 n 0000280102 00000 n 0000080277 00000 n 0000032898 00000 n 0000033277 00000 n 0000280168 00000 n 0000324779 00000 n 0000324814 00000 n 0000080449 00000 n 0000033298 00000 n 0000035326 00000 n 0000324858 00000 n 0000371034 00000 n 0000371069 00000 n 0000080621 00000 n 0000035348 00000 n 0000036541 00000 n 0000371157 00000 n 0000080768 00000 n 0000036563 00000 n 0000038965 00000 n 0000371201 00000 n 0000757651 00000 n 0000757325 00000 n 0000766460 00000 n 0000387821 00000 n 0000387856 00000 n 0000080940 00000 n 0000038987 00000 n 0000039391 00000 n 0000387957 00000 n 0000410740 00000 n 0000439107 00000 n 0000439155 00000 n 0000081112 00000 n 0000039412 00000 n 0000040648 00000 n 0000439199 00000 n 0000081259 00000 n 0000040670 00000 n 0000041494 00000 n 0000439243 00000 n 0000454301 00000 n 0000454336 00000 n 0000081431 00000 n 0000041515 00000 n 0000042602 00000 n 0000454413 00000 n 0000488051 00000 n 0000488086 00000 n 0000081603 00000 n 0000042624 00000 n 0000044398 00000 n 0000488163 00000 n 0000503073 00000 n 0000503108 00000 n 0000081775 00000 n 0000044420 00000 n 0000047668 00000 n 0000503187 00000 n 0000506798 00000 n 0000510221 00000 n 0000513287 00000 n 0000516417 00000 n 0000516491 00000 n 0000081947 00000 n 0000047690 00000 n 0000049493 00000 n 0000516581 00000 n 0000518072 00000 n 0000518107 00000 n 0000082119 00000 n 0000049515 00000 n 0000051830 00000 n 0000518197 00000 n 0000756840 00000 n 0000756627 00000 n 0000766317 00000 n 0000526076 00000 n 0000528228 00000 n 0000530459 00000 n 0000530520 00000 n 0000082291 00000 n 0000051852 00000 n 0000053556 00000 n 0000530623 00000 n 0000532942 00000 n 0000553221 00000 n 0000553269 00000 n 0000082463 00000 n 0000053578 00000 n 0000054740 00000 n 0000553346 00000 n 0000082610 00000 n 0000054762 00000 n 0000055435 00000 n 0000553401 00000 n 0000589796 00000 n 0000589831 00000 n 0000082782 00000 n 0000055456 00000 n 0000056271 00000 n 0000589908 00000 n 0000624414 00000 n 0000624449 00000 n 0000082954 00000 n 0000056292 00000 n 0000058066 00000 n 0000624517 00000 n 0000636793 00000 n 0000640338 00000 n 0000644669 00000 n 0000644730 00000 n 0000083126 00000 n 0000058088 00000 n 0000060409 00000 n 0000644809 00000 n 0000648487 00000 n 0000649779 00000 n 0000649827 00000 n 0000083298 00000 n 0000060431 00000 n 0000061544 00000 n 0000649884 00000 n 0000653313 00000 n 0000653348 00000 n 0000083470 00000 n 0000061566 00000 n 0000062860 00000 n 0000653405 00000 n 0000675470 00000 n 0000675505 00000 n 0000083642 00000 n 0000062882 00000 n 0000064997 00000 n 0000675560 00000 n 0000683511 00000 n 0000683546 00000 n 0000083814 00000 n 0000065019 00000 n 0000066268 00000 n 0000683636 00000 n 0000691153 00000 n 0000691188 00000 n 0000083986 00000 n 0000066290 00000 n 0000066870 00000 n 0000691243 00000 n 0000696836 00000 n 0000696871 00000 n 0000084158 00000 n 0000066891 00000 n 0000069254 00000 n 0000696937 00000 n 0000699983 00000 n 0000707724 00000 n 0000707772 00000 n 0000084330 00000 n 0000069276 00000 n 0000070171 00000 n 0000707851 00000 n 0000713179 00000 n 0000713214 00000 n 0000084502 00000 n 0000070192 00000 n 0000070433 00000 n 0000713280 00000 n 0000084649 00000 n 0000070454 00000 n 0000071725 00000 n 0000713324 00000 n 0000084796 00000 n 0000071747 00000 n 0000071982 00000 n 0000713390 00000 n 0000084943 00000 n 0000072003 00000 n 0000072702 00000 n 0000713434 00000 n 0000085090 00000 n 0000072723 00000 n 0000072967 00000 n 0000713489 00000 n 0000085237 00000 n 0000072988 00000 n 0000074302 00000 n 0000713533 00000 n 0000085384 00000 n 0000074324 00000 n 0000074842 00000 n 0000713610 00000 n 0000085531 00000 n 0000074863 00000 n 0000076287 00000 n 0000713665 00000 n 0000085678 00000 n 0000076309 00000 n 0000077008 00000 n 0000713709 00000 n 0000721953 00000 n 0000724199 00000 n 0000726372 00000 n 0000731915 00000 n 0000736455 00000 n 0000738213 00000 n 0000741106 00000 n 0000745045 00000 n 0000745736 00000 n 0000751193 00000 n 0000756605 00000 n 0000757304 00000 n 0000761927 00000 n 0000762584 00000 n trailer << /Size 366 /Root 1 0 R /Info 2 0 R >> startxref 770339 %%EOF gworkspace-1.1.0/FSNode/0000755000175000001440000000000014753500006014235 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/0000755000175000001440000000000014751213523016614 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/ExtendedInfo.h0000644000175000001440000000220514751213523021340 0ustar multixusers/* ExtendedInfo.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef EXTENDED_INFO_H #define EXTENDED_INFO_H #include #include "FSNodeRep.h" @protocol ExtendedInfo - (NSString *)menuName; - (NSDictionary *)extendedInfoForNode:(FSNode *)anode; @end #endif // EXTENDED_INFO_H gworkspace-1.1.0/FSNode/ExtendedInfo/GNUmakefile0000644000175000001440000000031413251572110020656 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = \ Role -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/FSNode/ExtendedInfo/GNUmakefile.postamble0000644000175000001440000000120613251572110022644 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f TAGS # rm GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/FSNode/ExtendedInfo/GNUmakefile.preamble0000644000175000001440000000132113214346535022454 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. -I../.. ADDITIONAL_LIB_DIRS += -L../FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) \ -L../../FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/FSNode/ExtendedInfo/Role/0000755000175000001440000000000014753472315017525 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/Role/ExtInfoRole.h0000644000175000001440000000205714751213523022070 0ustar multixusers/* ExtInfoRole.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef EXT_INFO_ROLE_H #define EXT_INFO_ROLE_H #include "ExtendedInfo.h" @interface ExtInfoRole: NSObject { } @end #endif // EXT_INFO_ROLE_H gworkspace-1.1.0/FSNode/ExtendedInfo/Role/ExtInfoRole.m0000644000175000001440000000337314751213523022077 0ustar multixusers/* ExtInfoRole.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "ExtInfoRole.h" @implementation ExtInfoRole - (void)dealloc { [super dealloc]; } - (NSString *)menuName { return NSLocalizedStringFromTableInBundle(@"Role", nil, [NSBundle bundleForClass:[self class]], @""); } - (NSDictionary *)extendedInfoForNode:(FSNode *)anode { if ([anode isApplication]) { NSBundle *bundle = [NSBundle bundleWithPath: [anode path]]; NSDictionary *info = [bundle infoDictionary]; if (info) { NSString *role = [info objectForKey: @"NSRole"]; if (role) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: NSLocalizedStringFromTableInBundle(role, nil, [NSBundle bundleForClass:[self class]], @"") forKey: @"labelstr"]; return dict; } } } return nil; } @end gworkspace-1.1.0/FSNode/ExtendedInfo/Role/GNUmakefile0000644000175000001440000000120713251572110021561 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = Role BUNDLE_EXTENSION = .extinfo #Role_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # Role_OBJC_FILES = ExtInfoRole.m Role_PRINCIPAL_CLASS = ExtInfoRole LIBRARIES_DEPEND_UPON += -lFSNode $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) Role_LANGUAGES = \ English \ Italian \ German \ French \ #Role_LOCALIZED_RESOURCE_FILES = Localizable.strings Role_RESOURCE_FILES = \ Resources/Localizable.strings \ Resources/*.lproj \ -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/FSNode/ExtendedInfo/Role/GNUmakefile.postamble0000644000175000001440000000010613251572110023543 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/FSNode/ExtendedInfo/Role/GNUmakefile.preamble0000644000175000001440000000120213214346535023353 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall ADDITIONAL_INCLUDE_DIRS += -I.. -I../.. ADDITIONAL_LIB_DIRS += -L../../FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../../FSNode.framework # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/0000755000175000001440000000000013214346535021472 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/English.lproj/0000755000175000001440000000000013214346535024210 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/English.lproj/Localizable.strings0000644000175000001440000000025513214346535030046 0ustar multixusers/*** English.lproj/Localizable.strings updated by make_strings 2016-01-18 10:37:12 +0100 add comments above this one ***/ /* File: ../ExtInfoRole.m:39 */ "Role" = "Role"; gworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/French.lproj/0000755000175000001440000000000013214346535024024 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/French.lproj/Localizable.strings0000644000175000001440000000026013214346535027656 0ustar multixusers/*** French.lproj/Localizable.strings updated by make_strings 2016-01-18 10:37:12 +0100 add comments above this one ***/ /* File: ../ExtInfoRole.m:39 */ "Role" = "Rôle"; gworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/German.lproj/0000755000175000001440000000000013214346535024030 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/German.lproj/Localizable.strings0000644000175000001440000000026013214346535027662 0ustar multixusers/*** German.lproj/Localizable.strings updated by make_strings 2016-01-18 10:37:12 +0100 add comments above this one ***/ /* File: ../ExtInfoRole.m:39 */ "Role" = "Funktion"; gworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/Italian.lproj/0000755000175000001440000000000013214346535024200 5ustar multixusersgworkspace-1.1.0/FSNode/ExtendedInfo/Role/Resources/Italian.lproj/Localizable.strings0000644000175000001440000000025613214346535030037 0ustar multixusers/*** Italian.lproj/Localizable.strings updated by make_strings 2016-01-18 10:37:12 +0100 add comments above this one ***/ /* File: ../ExtInfoRole.m:39 */ "Role" = "Ruolo"; gworkspace-1.1.0/FSNode/FSNBrowser.h0000644000175000001440000001534714751213523016415 0ustar multixusers/* FSNBrowser.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_BROWSER_H #define FSN_BROWSER_H #import #import #import "FSNodeRep.h" @class FSNBrowserColumn; @class FSNBrowserCell; @class FSNCellNameEditor; @class NSScroller; @interface FSNBrowser : NSView { FSNode *baseNode; FSNInfoType infoType; NSString *extInfoType; NSArray *lastSelection; NSMutableArray *columns; FSNBrowserCell *cellPrototype; NSScroller *scroller; BOOL skipUpdateScroller; int updateViewsLock; FSNCellNameEditor *nameEditor; BOOL cellsIcon; BOOL selColumn; BOOL isLoaded; NSInteger visibleColumns; NSInteger lastColumnLoaded; NSInteger firstVisibleColumn; NSInteger lastVisibleColumn; int currentshift; NSSize columnSize; NSInteger fontSize; BOOL simulatingDoubleClick; float mousePointX; float mousePointY; NSString *charBuffer; NSTimeInterval lastKeyPressedTime; NSInteger typingBufferColumn; NSColor *backColor; id viewer; id manager; id desktopApp; FSNodeRep *fsnodeRep; } - (id)initWithBaseNode:(FSNode *)bsnode visibleColumns:(int)vcols scroller:(NSScroller *)scrl cellsIcons:(BOOL)cicns editableCells:(BOOL)edcells selectionColumn:(BOOL)selcol; - (void)setBaseNode:(FSNode *)node; - (void)setUsesCellsIcons:(BOOL)cicns; - (void)setUsesSelectionColumn:(BOOL)selcol; - (void)setVisibleColumns:(NSInteger)vcols; - (NSInteger)visibleColumns; - (void)showSubnode:(FSNode *)node; - (void)showSelection:(NSArray *)selection; - (void)showPathsSelection:(NSArray *)selpaths; - (void)loadColumnZero; - (FSNBrowserColumn *)createEmptyColumn; - (void)addAndLoadColumnForNode:(FSNode *)node; - (void)addFillingColumn; - (void)unloadFromColumn:(NSInteger)column; - (void)reloadColumnWithNode:(FSNode *)anode; - (void)reloadColumnWithPath:(NSString *)cpath; - (void)reloadFromColumn:(FSNBrowserColumn *)col; - (void)reloadFromColumnWithNode:(FSNode *)anode; - (void)reloadFromColumnWithPath:(NSString *)cpath; - (void)setLastColumn:(int)column; - (void)tile; - (void)scrollViaScroller:(NSScroller *)sender; - (void)updateScroller; - (void)scrollColumnsLeftBy:(int)shiftAmount; - (void)scrollColumnsRightBy:(int)shiftAmount; - (void)scrollColumnToVisible:(NSInteger)column; - (void)moveLeft; - (void)moveRight; - (void)setShift:(int)s; - (FSNode *)nodeOfLastColumn; - (NSString *)pathToLastColumn; - (NSArray *)selectionInColumnBeforeColumn:(FSNBrowserColumn *)col; - (void)selectCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath sendAction:(BOOL)act; - (void)selectAllInLastColumn; - (void)notifySelectionChange:(NSArray *)newsel; - (void)synchronizeViewer; - (void)addCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath; - (void)removeCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath; - (NSInteger)firstVisibleColumn; - (NSInteger)lastColumnLoaded; - (NSInteger)lastVisibleColumn; - (FSNBrowserColumn *)selectedColumn; - (FSNBrowserColumn *)lastLoadedColumn; - (FSNBrowserColumn *)columnWithNode:(FSNode *)anode; - (FSNBrowserColumn *)columnWithPath:(NSString *)cpath; - (FSNBrowserColumn *)columnBeforeColumn:(FSNBrowserColumn *)col; - (FSNBrowserColumn *)columnAfterColumn:(FSNBrowserColumn *)col; - (void)clickInColumn:(FSNBrowserColumn *)col; - (void)clickInMatrixOfColumn:(FSNBrowserColumn *)col; - (void)doubleClickInMatrixOfColumn:(FSNBrowserColumn *)col; - (void)doubleClikTimeOut:(id)sender; @end @interface FSNBrowser (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode; - (NSDictionary *)readNodeInfo; - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk; - (void)reloadContents; - (void)reloadFromNode:(FSNode *)anode; - (FSNode *)baseNode; - (FSNode *)shownNode; - (BOOL)isSingleNode; - (BOOL)isShowingNode:(FSNode *)anode; - (BOOL)isShowingPath:(NSString *)path; - (void)sortTypeChangedAtPath:(NSString *)path; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)setShowType:(FSNInfoType)type; - (void)setExtendedShowType:(NSString *)type; - (FSNInfoType)showType; - (int)iconSize; - (int)labelTextSize; - (NSCellImagePosition)iconPosition; - (void)updateIcons; - (id)repOfSubnode:(FSNode *)anode; - (id)repOfSubnodePath:(NSString *)apath; - (id)addRepForSubnode:(FSNode *)anode; - (id)addRepForSubnodePath:(NSString *)apath; - (void)removeRepOfSubnode:(FSNode *)anode; - (void)removeRepOfSubnodePath:(NSString *)apath; - (void)removeRep:(id)arep; - (void)unloadFromNode:(FSNode *)anode; - (void)repSelected:(id)arep; - (void)unselectOtherReps:(id)arep; - (void)selectReps:(NSArray *)reps; - (void)selectRepsOfSubnodes:(NSArray *)nodes; - (void)selectRepsOfPaths:(NSArray *)paths; - (void)selectAll; - (NSArray *)reps; - (NSArray *)selectedReps; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)selectionDidChange; - (void)checkLockedReps; - (void)setSelectionMask:(FSNSelectionMask)mask; - (FSNSelectionMask)selectionMask; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)restoreLastSelection; - (void)setLastShownNode:(FSNode *)anode; - (BOOL)needsDndProxy; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut; - (NSColor *)backgroundColor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; @end @interface FSNBrowser (IconNameEditing) - (void)setEditorForCell:(FSNBrowserCell *)cell inColumn:(FSNBrowserColumn *)col; - (void)stopCellEditing; - (void)stopRepNameEditing; - (void)controlTextDidChange:(NSNotification *)aNotification; - (void)controlTextDidEndEditing:(NSNotification *)aNotification; @end #endif // FSN_BROWSER_H gworkspace-1.1.0/FSNode/FSNBrowser.m0000644000175000001440000014604714751250146016426 0ustar multixusers/* FSNBrowser.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #import #import #import #import "FSNBrowser.h" #import "FSNBrowserColumn.h" #import "FSNBrowserMatrix.h" #import "FSNBrowserCell.h" #import "FSNIcon.h" #import "FSNFunctions.h" #define DEFAULT_ISIZE 24 #ifndef max #define max(a,b) ((a) >= (b) ? (a):(b)) #define min(a,b) ((a) <= (b) ? (a):(b)) #endif @implementation FSNBrowser - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE (baseNode); RELEASE (extInfoType); RELEASE (lastSelection); RELEASE (columns); RELEASE (nameEditor); RELEASE (cellPrototype); RELEASE (charBuffer); RELEASE (backColor); [super dealloc]; } - (id)initWithBaseNode:(FSNode *)bsnode visibleColumns:(int)vcols scroller:(NSScroller *)scrl cellsIcons:(BOOL)cicns editableCells:(BOOL)edcells selectionColumn:(BOOL)selcol { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; id defentry; NSInteger i; fsnodeRep = [FSNodeRep sharedInstance]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } ASSIGN (backColor, [NSColor windowBackgroundColor]); defentry = [defaults objectForKey: @"fsn_info_type"]; infoType = defentry ? [defentry intValue] : FSNInfoNameType; extInfoType = nil; if (infoType == FSNInfoExtendedType) { defentry = [defaults objectForKey: @"extended_info_type"]; if (defentry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: defentry]) { ASSIGN (extInfoType, defentry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } ASSIGN (baseNode, [FSNode nodeWithPath: [bsnode path]]); [self readNodeInfo]; lastSelection = nil; visibleColumns = vcols; scroller = scrl; [scroller setTarget: self]; [scroller setAction: @selector(scrollViaScroller:)]; cellsIcon = cicns; selColumn = selcol; updateViewsLock = 0; if ([defaults objectForKey:@"NSFontSize"]) fontSize = [defaults integerForKey:@"NSFontSize"]; else fontSize = 12; cellPrototype = [FSNBrowserCell new]; [cellPrototype setFont: [NSFont systemFontOfSize: fontSize]]; columns = [NSMutableArray new]; nameEditor = nil; if (edcells) { nameEditor = [FSNCellNameEditor new]; [nameEditor setDelegate: self]; [nameEditor setEditable: YES]; [nameEditor setSelectable: YES]; [nameEditor setFont: [cellPrototype font]]; [nameEditor setBezeled: NO]; [nameEditor setAlignment: NSLeftTextAlignment]; } for (i = 0; i < visibleColumns; i++) { [self createEmptyColumn]; } firstVisibleColumn = 0; lastVisibleColumn = visibleColumns - 1; currentshift = 0; lastColumnLoaded = -1; typingBufferColumn = -1; skipUpdateScroller = NO; lastKeyPressedTime = 0.0; charBuffer = nil; simulatingDoubleClick = NO; isLoaded = NO; viewer = nil; manager = nil; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil]; } return self; } - (void)defaultsChanged:(NSNotification *)not { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSInteger newSize; if ([defaults objectForKey:@"NSFontSize"]) { newSize = [defaults integerForKey:@"NSFontSize"]; if (newSize != fontSize) { fontSize = newSize; [cellPrototype setFont: [NSFont systemFontOfSize: fontSize]]; [nameEditor setFont: [cellPrototype font]]; [self setVisibleColumns:[self visibleColumns]]; } } } - (void)setBaseNode:(FSNode *)node { ASSIGN (baseNode, [FSNode nodeWithPath: [node path]]); [self readNodeInfo]; [self loadColumnZero]; [self notifySelectionChange: [NSArray arrayWithObject: node]]; } - (void)setUsesCellsIcons:(BOOL)cicns { cellsIcon = cicns; } - (void)setUsesSelectionColumn:(BOOL)selcol { selColumn = selcol; } - (void)setVisibleColumns:(NSInteger)vcols { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; NSInteger i; updateViewsLock++; if (bc) { selection = [bc selectedNodes]; if ((selection == nil) && [bc shownNode]) { selection = [NSArray arrayWithObject: [bc shownNode]]; } } if (selection == nil) { selection = [NSArray arrayWithObject: baseNode]; } selection = [selection copy]; for (i = 0; i < [columns count]; i++) { [[columns objectAtIndex: i] removeFromSuperview]; } [columns removeAllObjects]; visibleColumns = vcols; for (i = 0; i < visibleColumns; i++) { [self createEmptyColumn]; } firstVisibleColumn = 0; lastVisibleColumn = visibleColumns - 1; currentshift = 0; lastColumnLoaded = -1; skipUpdateScroller = NO; isLoaded = NO; [self showSelection: selection]; RELEASE (selection); updateViewsLock--; [self tile]; bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } - (NSInteger)visibleColumns { return visibleColumns; } - (void)showSubnode:(FSNode *)node { NSArray *components; NSInteger column; NSInteger i; updateViewsLock++; if ([node isEqual: baseNode] || ([node isSubnodeOfNode: baseNode] == NO)) { updateViewsLock--; [self setBaseNode: node]; [self tile]; [self setNeedsDisplay: YES]; return; } [self loadColumnZero]; if ([[baseNode path] isEqual: path_separator()]) { components = [FSNode nodeComponentsToNode: node]; } else { components = [FSNode nodeComponentsFromNode: baseNode toNode: node]; } if ([components count] == 1) { updateViewsLock--; [self tile]; [self setNeedsDisplay: YES]; return; } components = [components subarrayWithRange: NSMakeRange(1, [components count] -1)]; column = lastColumnLoaded; for (i = 0; i < [components count]; i++) { FSNBrowserColumn *bc = [columns objectAtIndex: column + i]; FSNode *nd = [components objectAtIndex: i]; FSNBrowserCell *cell = [bc selectCellOfNode: nd sendAction: NO]; if (cell) { if ([cell isLeaf]) { break; } } else { NSLog(@"Browser: unable to find cell '%@' in column %ld\n", [nd name], (long int)(column + i)); break; } nd = [FSNode nodeWithRelativePath: [nd lastPathComponent] parent: [bc shownNode]]; [self addAndLoadColumnForNode: nd]; } updateViewsLock--; [self tile]; [self setNeedsDisplay: YES]; } - (void)showSelection:(NSArray *)selection { if (selection && [selection count]) { FSNode *node = [selection objectAtIndex: 0]; FSNBrowserColumn *bc; NSArray *selNodes; updateViewsLock++; if ([selection count] > 1) { BOOL alldirs = YES; int i; for (i = 0; i < [selection count]; i++) { FSNode *nd = [selection objectAtIndex: i]; if ([nd isDirectory] == NO) { node = nd; alldirs = NO; break; } } if (alldirs) { node = [FSNode nodeWithPath: [node parentPath]]; } } [self showSubnode: node]; bc = [self lastLoadedColumn]; [bc selectCellsOfNodes: selection sendAction: NO]; if (selColumn) { if ([selection count] == 1) { FSNode *node = [selection objectAtIndex: 0]; if (([node isDirectory] == NO) || [node isPackage]) { [self addFillingColumn]; } } else { [self addFillingColumn]; } } updateViewsLock--; [self tile]; selNodes = [bc selectedNodes]; if (selNodes == nil) { selNodes = [NSArray arrayWithObject: [bc shownNode]]; } [self notifySelectionChange: selNodes]; } } - (void)showPathsSelection:(NSArray *)selpaths { if (selpaths && [selpaths count]) { FSNode *node = [FSNode nodeWithPath: [selpaths objectAtIndex: 0]]; FSNBrowserColumn *bc; NSArray *selNodes; updateViewsLock++; if ([selpaths count] > 1) { BOOL alldirs = YES; int i; for (i = 0; i < [selpaths count]; i++) { FSNode *nd = [FSNode nodeWithPath: [selpaths objectAtIndex: i]]; if ([nd isDirectory] == NO) { node = nd; alldirs = NO; break; } } if (alldirs) { node = [FSNode nodeWithPath: [node parentPath]]; } } [self showSubnode: node]; bc = [self lastLoadedColumn]; [bc selectCellsWithPaths: selpaths sendAction: NO]; if (selColumn) { if ([selpaths count] == 1) { if (([node isDirectory] == NO) || [node isPackage]) { [self addFillingColumn]; } } else { [self addFillingColumn]; } } updateViewsLock--; [self tile]; selNodes = [bc selectedNodes]; if (selNodes == nil) { selNodes = [NSArray arrayWithObject: [bc shownNode]]; } [self notifySelectionChange: selNodes]; } } - (void)loadColumnZero { updateViewsLock++; [self setLastColumn: -1]; [self addAndLoadColumnForNode: baseNode]; isLoaded = YES; updateViewsLock--; [self tile]; } - (FSNBrowserColumn *)createEmptyColumn { CREATE_AUTORELEASE_POOL(arp); int count = [columns count]; FSNBrowserColumn *bc = [[FSNBrowserColumn alloc] initInBrowser: self atIndex: count cellPrototype: cellPrototype cellsIcon: cellsIcon nodeInfoType: infoType extendedType: extInfoType backgroundColor: backColor]; [columns insertObject: bc atIndex: count]; [self addSubview: bc]; RELEASE(bc); RELEASE (arp); return bc; } - (void)addAndLoadColumnForNode:(FSNode *)node { FSNBrowserColumn *bc; NSInteger i; if (lastColumnLoaded + 1 >= [columns count]) { i = [columns indexOfObject: [self createEmptyColumn]]; } else { i = lastColumnLoaded + 1; } bc = [columns objectAtIndex: i]; [bc showContentsOfNode: node]; updateViewsLock++; [self setLastColumn: i]; isLoaded = YES; if ((i > 0) && ((i - 1) == lastVisibleColumn)) { [self scrollColumnsRightBy: 1]; } updateViewsLock--; [self tile]; } - (void)addFillingColumn { NSInteger i; if (lastColumnLoaded + 1 >= [columns count]) { i = [columns indexOfObject: [self createEmptyColumn]]; } else { i = lastColumnLoaded + 1; } updateViewsLock++; [self setLastColumn: i]; if ((i > 0) && ((i - 1) == lastVisibleColumn)) { [self scrollColumnsRightBy: 1]; } updateViewsLock--; [self tile]; } - (void)unloadFromColumn:(NSInteger)column { FSNBrowserColumn *bc = nil; NSInteger count = [columns count]; NSInteger i; updateViewsLock++; for (i = column; i < count; ++i) { bc = [columns objectAtIndex: i]; if ([bc isLoaded]) { [bc showContentsOfNode: nil]; } if (i >= visibleColumns) { [bc removeFromSuperview]; [columns removeObject: bc]; count--; i--; } } if (column == 0) { isLoaded = NO; } if (column <= lastVisibleColumn) { [self scrollColumnsLeftBy: lastVisibleColumn - column + 1]; } updateViewsLock--; [self tile]; } - (void)reloadColumnWithNode:(FSNode *)anode { FSNBrowserColumn *col = [self columnWithNode: anode]; if (col) { [col showContentsOfNode: anode]; } } - (void)reloadColumnWithPath:(NSString *)path { FSNBrowserColumn *col = [self columnWithPath: path]; if (col) { FSNBrowserColumn *parentCol = [self columnBeforeColumn: col]; FSNode *node; if (parentCol) { node = [FSNode nodeWithRelativePath: path parent: [parentCol shownNode]]; } else { node = [FSNode nodeWithPath: path]; } [col showContentsOfNode: node]; } } - (void)reloadFromColumn:(FSNBrowserColumn *)col { CREATE_AUTORELEASE_POOL(arp); NSInteger index = [col index]; NSInteger i = 0; updateViewsLock++; for (i = index; i < [columns count]; i++) { FSNBrowserColumn *nextcol = [columns objectAtIndex: i]; NSArray *selection = [self selectionInColumnBeforeColumn: nextcol]; BOOL done = NO; if (selection && ([selection count] == 1)) { FSNode *node = [selection objectAtIndex: 0]; if ([node isDirectory] && (([node isPackage] == NO) || (i == 0))) { [nextcol showContentsOfNode: node]; } else { done = YES; } } else { done = YES; } if (done) { int last = (i > 0) ? i - 1 : 0; int shift = 0; int leftscr = 0; if (last >= visibleColumns) { if (last < firstVisibleColumn) { shift = visibleColumns - 1; } else if (last > lastVisibleColumn) { leftscr = last - lastVisibleColumn; } else { shift = lastVisibleColumn - last; } } [self setLastColumn: last]; if (shift) { currentshift = 0; [self setShift: shift]; } else if (leftscr) { [self scrollColumnsLeftBy: leftscr]; } break; } } col = [self lastLoadedColumn]; if (col) { NSArray *selection = [col selectedNodes]; int index = [col index]; if (index < firstVisibleColumn) { [self scrollColumnToVisible: index]; } [[self window] makeFirstResponder: [col cmatrix]]; if (selection) { if (selColumn && (index == lastColumnLoaded)) { if ([selection count] == 1) { FSNode *node = [selection objectAtIndex: 0]; if (([node isDirectory] == NO) || [node isPackage]) { [self addFillingColumn]; } } else { [self addFillingColumn]; } } [self notifySelectionChange: selection]; } else { FSNode *node = [col shownNode]; [self notifySelectionChange: [NSArray arrayWithObject: node]]; } } updateViewsLock--; [self tile]; RELEASE (arp); } - (void)reloadFromColumnWithNode:(FSNode *)anode { FSNBrowserColumn *col = [self columnWithNode: anode]; if (col) { [self reloadFromColumn: col]; } } - (void)reloadFromColumnWithPath:(NSString *)path { FSNBrowserColumn *col = [self columnWithPath: path]; if (col) { [self reloadFromColumn: col]; } } - (void)setLastColumn:(int)column { lastColumnLoaded = column; [self unloadFromColumn: column + 1]; } - (void)tile { updateViewsLock = (updateViewsLock < 0) ? 0 : updateViewsLock; if (updateViewsLock == 0) { NSWindow *window = [self window]; NSRect r = [self bounds]; float frameWidth = r.size.width - visibleColumns; NSInteger count = [columns count]; NSRect colrect; NSInteger i; columnSize.height = r.size.height; columnSize.width = myrintf(frameWidth / visibleColumns); [window disableFlushWindow]; for (i = 0; i < count; i++) { NSInteger n = i - firstVisibleColumn; colrect = NSZeroRect; colrect.size = columnSize; colrect.origin.y = 0; if (i < firstVisibleColumn) { colrect.origin.x = (n * columnSize.width) - 8; } else { if (i == firstVisibleColumn) { colrect.origin.x = (n * columnSize.width); } else if (i <= lastVisibleColumn) { colrect.origin.x = (n * columnSize.width) + n; } else { colrect.origin.x = (n * columnSize.width) + n + 8; } } if (i == lastVisibleColumn) { colrect.size.width = [self bounds].size.width - colrect.origin.x; } [[columns objectAtIndex: i] setFrame: colrect]; } [self synchronizeViewer]; [self updateScroller]; [self stopCellEditing]; [window enableFlushWindow]; [window flushWindowIfNeeded]; } } - (void)scrollViaScroller:(NSScroller *)sender { NSScrollerPart hit = [sender hitPart]; BOOL needsDisplay = NO; updateViewsLock++; skipUpdateScroller = YES; switch (hit) { // Scroll to the left case NSScrollerDecrementLine: case NSScrollerDecrementPage: [self scrollColumnsLeftBy: 1]; if (currentshift > 0) { [self setLastColumn: (lastColumnLoaded - currentshift)]; [self setShift: currentshift - 1]; } break; // Scroll to the right case NSScrollerIncrementLine: case NSScrollerIncrementPage: [self scrollColumnsRightBy: 1]; needsDisplay = YES; break; // The knob or knob slot case NSScrollerKnob: case NSScrollerKnobSlot: { float f = [sender floatValue]; float n = lastColumnLoaded + 1 - visibleColumns; [self scrollColumnToVisible: myrintf(f * n) + visibleColumns - 1]; if (currentshift > 0) { [self setLastColumn: (lastColumnLoaded - currentshift)]; currentshift = 0; } needsDisplay = YES; } break; default: break; } skipUpdateScroller = NO; updateViewsLock--; [self tile]; [self setNeedsDisplay: needsDisplay]; } - (void)updateScroller { if ((lastColumnLoaded == 0) || (lastColumnLoaded <= (visibleColumns - 1))) { [scroller setEnabled: NO]; } else { if (skipUpdateScroller == NO) { float prop = (float)visibleColumns / (float)(lastColumnLoaded + 1); float i = lastColumnLoaded - visibleColumns + 1; float f = 1 + ((lastVisibleColumn - lastColumnLoaded) / i); if (lastVisibleColumn > lastColumnLoaded) { prop = (float)visibleColumns / (float)(lastVisibleColumn + 1); } [scroller setFloatValue: f knobProportion: prop]; } [scroller setEnabled: YES]; } [scroller setNeedsDisplay: YES]; } - (void)scrollColumnsLeftBy:(int)shiftAmount { if ((firstVisibleColumn - shiftAmount) < 0) { shiftAmount = firstVisibleColumn; } if (shiftAmount <= 0) { return; } firstVisibleColumn = firstVisibleColumn - shiftAmount; lastVisibleColumn = lastVisibleColumn - shiftAmount; [self tile]; [self setNeedsDisplay: YES]; } - (void)scrollColumnsRightBy:(int)shiftAmount { if ((shiftAmount + lastVisibleColumn) > lastColumnLoaded) { shiftAmount = lastColumnLoaded - lastVisibleColumn; } if (shiftAmount <= 0) { return; } firstVisibleColumn = firstVisibleColumn + shiftAmount; lastVisibleColumn = lastVisibleColumn + shiftAmount; [self tile]; } - (void)scrollColumnToVisible:(NSInteger)column { NSInteger i; if (lastVisibleColumn == column) return; if ((lastColumnLoaded + 1) <= visibleColumns) return; i = lastVisibleColumn - column; if (i > 0) { [self scrollColumnsLeftBy: i]; } else { [self scrollColumnsRightBy: -i]; } } - (void)moveLeft { FSNBrowserColumn *selCol = [self selectedColumn]; NSInteger index; if (selCol == nil) { return; } index = [selCol index]; if (index > 0) { updateViewsLock++; index--; if (index < firstVisibleColumn) { [self scrollColumnToVisible: index]; } selCol = [columns objectAtIndex: index]; [[self window] makeFirstResponder: [selCol cmatrix]]; [self clickInMatrixOfColumn: selCol]; updateViewsLock--; [self tile]; } } - (void)moveRight { FSNBrowserColumn *selCol = [self selectedColumn]; if (selCol == nil) { selCol = [columns objectAtIndex: 0]; if ([selCol selectFirstCell]) { [[self window] makeFirstResponder: [selCol cmatrix]]; } } else { NSMatrix *matrix = [selCol cmatrix]; if ([[matrix cells] count]) { NSInteger index = [selCol index]; [matrix sendAction]; if (index < ([columns count] - 1)) { selCol = [columns objectAtIndex: index + 1]; matrix = [selCol cmatrix]; if ([[matrix cells] count]) { if ([selCol selectFirstCell]) { [matrix sendAction]; [[self window] makeFirstResponder: matrix]; } } } } } } - (void)setShift:(int)s { NSInteger i; for (i = 0; i < s; i++) { [self createEmptyColumn]; } currentshift = s; updateViewsLock++; [self setLastColumn: (lastColumnLoaded + s)]; [self scrollColumnsRightBy: s]; updateViewsLock--; [self tile]; } - (FSNode *)nodeOfLastColumn { FSNBrowserColumn *col = [self lastLoadedColumn]; if (col) return [col shownNode]; return nil; } - (NSString *)pathToLastColumn { FSNode *node = [self nodeOfLastColumn]; if (node) return [node path]; return nil; } - (NSArray *)selectionInColumnBeforeColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; if (index == 0) { return [NSArray arrayWithObject: baseNode]; } return [[columns objectAtIndex: index - 1] selectedNodes]; } - (void)selectCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath sendAction:(BOOL)act { FSNBrowserColumn *col = [self columnWithPath: cpath]; if (col) { [col selectCellsWithNames: names sendAction: act]; } } - (void)selectAllInLastColumn { FSNBrowserColumn *col = [self lastLoadedColumn]; if (col) { [col selectAll]; } } - (void)notifySelectionChange:(NSArray *)newsel { if (newsel) { if ((lastSelection == nil) || ([newsel isEqual: lastSelection] == NO)) { ASSIGN (lastSelection, newsel); [self synchronizeViewer]; [desktopApp selectionChanged: newsel]; } } } - (void)synchronizeViewer { if (viewer) { NSRange range = NSMakeRange(firstVisibleColumn, visibleColumns); [viewer setSelectableNodesRange: range]; } } - (void)addCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath { FSNBrowserColumn *col = [self columnWithPath: cpath]; if (col) { [col addCellsWithNames: names]; } } - (void)removeCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath { FSNBrowserColumn *col = [self columnWithPath: cpath]; if (col) { [col removeCellsWithNames: names]; } } - (NSInteger)firstVisibleColumn { return firstVisibleColumn; } - (NSInteger)lastColumnLoaded { return lastColumnLoaded; } - (NSInteger)lastVisibleColumn { return lastVisibleColumn; } - (FSNBrowserColumn *)selectedColumn { NSInteger i; for (i = lastColumnLoaded; i >= 0; i--) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([col isSelected]) { return col; } } return nil; } - (FSNBrowserColumn *)lastLoadedColumn { NSInteger i; for (i = [columns count] - 1; i >= 0; i--) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([col isLoaded]) { return col; } } return nil; } - (FSNBrowserColumn *)columnWithNode:(FSNode *)anode { NSInteger i; for (i = 0; i < [columns count]; i++) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([[col shownNode] isEqual: anode]) { return col; } } return nil; } - (FSNBrowserColumn *)columnWithPath:(NSString *)cpath { NSInteger i; for (i = 0; i < [columns count]; i++) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([[[col shownNode] path] isEqual: cpath]) { return col; } } return nil; } - (FSNBrowserColumn *)columnBeforeColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; if (index > 0) { return [columns objectAtIndex: index - 1]; } return nil; } - (FSNBrowserColumn *)columnAfterColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; if (index < ([columns count] - 1)) { return [columns objectAtIndex: index + 1]; } return nil; } - (void)clickInColumn:(FSNBrowserColumn *)col { if (viewer) { NSArray *selection = [col selectedNodes]; if (selection && [selection count]) { [viewer multipleNodeViewDidSelectSubNode: [col shownNode]]; } } } - (void)clickInMatrixOfColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; NSInteger pos = index - firstVisibleColumn + 1; BOOL mustshift = (firstVisibleColumn > 0); NSInteger added = 0; NSArray *selection = [col selectedNodes]; if ((selection == nil) || ([selection count] == 0)) { [self notifySelectionChange: [NSArray arrayWithObject: [col shownNode]]]; return; } if (selColumn) { if ((pos == visibleColumns) && (index == ([columns count] -1))) { NSPoint p = [[self window] mouseLocationOutsideOfEventStream]; mousePointX = p.x; mousePointY = p.y; simulatingDoubleClick = YES; [NSTimer scheduledTimerWithTimeInterval: 0.3 target: self selector: @selector(doubleClikTimeOut:) userInfo: nil repeats: NO]; } } currentshift = 0; updateViewsLock++; [self setLastColumn: index]; if ([selection count] == 1) { FSNode *node = [selection objectAtIndex: 0]; if ([node isDirectory] && ([node isPackage] == NO)) { [self addAndLoadColumnForNode: node]; added = 1; } else if (selColumn) { [self addFillingColumn]; } } else if (selColumn) { [self addFillingColumn]; } if (selColumn == NO) { if (mustshift && (pos < visibleColumns)) { [self setShift: visibleColumns - pos - added]; } } else { if (mustshift && (pos < (visibleColumns - 1))) { [self setShift: visibleColumns - pos - 1]; } } updateViewsLock--; [self tile]; [self notifySelectionChange: [col selectedNodes]]; } - (void)doubleClickInMatrixOfColumn:(FSNBrowserColumn *)col { if (manager) { unsigned int mouseFlags = [(FSNBrowserMatrix *)[col cmatrix] mouseFlags]; BOOL closesndr = ((mouseFlags == NSAlternateKeyMask) || (mouseFlags == NSControlKeyMask)); [viewer openSelectionInNewViewer: closesndr]; // [manager openSelectionInViewer: viewer closeSender: closesndr]; } else { [desktopApp openSelectionInNewViewer: NO]; } } - (void)doubleClikTimeOut:(id)sender { simulatingDoubleClick = NO; } - (void)mouseDown:(NSEvent*)theEvent { if (simulatingDoubleClick) { NSPoint p = [[self window] mouseLocationOutsideOfEventStream]; if ((max(p.x, mousePointX) - min(p.x, mousePointX)) <= 3 && (max(p.y, mousePointY) - min(p.y, mousePointY)) <= 3) { if (manager) { [manager openSelectionInViewer: viewer closeSender: NO]; } else { [desktopApp openSelectionInNewViewer: NO]; } } } [super mouseDown: theEvent]; } - (void)keyDown:(NSEvent *)theEvent { NSString *characters = [theEvent characters]; unichar character = 0; NSString *characterStr = nil; FSNBrowserColumn *column = [self selectedColumn]; NSMatrix *matrix; if (column == nil) { [super keyDown: theEvent]; return; } matrix = [column cmatrix]; if (matrix == nil) { [super keyDown: theEvent]; return; } if ([characters length] > 0) { character = [characters characterAtIndex: 0]; characterStr = [characters substringToIndex: 1]; } switch (character) { case NSUpArrowFunctionKey: case NSDownArrowFunctionKey: [super keyDown: theEvent]; return; case NSLeftArrowFunctionKey: { if ([theEvent modifierFlags] & NSControlKeyMask) { [super keyDown: theEvent]; } else { [self moveLeft]; } } return; case NSRightArrowFunctionKey: { if ([theEvent modifierFlags] & NSControlKeyMask) { [super keyDown: theEvent]; } else { [self moveRight]; } } return; case NSCarriageReturnCharacter: [(FSNBrowserMatrix *)matrix setMouseFlags: [theEvent modifierFlags]]; [matrix sendDoubleAction]; DESTROY(charBuffer); return; case 0x01B: // Escape DESTROY(charBuffer); return; default: break; } if (([characters length] > 0) && (character < 0xF700)) { column = [self lastLoadedColumn]; if (column) { NSInteger index = [column index]; matrix = [column cmatrix]; if (matrix == nil) { return; } if (charBuffer != nil) { if (([theEvent timestamp] - lastKeyPressedTime < 5.0) // seconds && (typingBufferColumn == index)) { NSString *appendBuffer = [charBuffer stringByAppendingString:characterStr]; // Try selecting if ([column selectCellWithPrefix: appendBuffer]) { ASSIGN(charBuffer, appendBuffer); [[self window] makeFirstResponder: matrix]; return; } // unable to select - fall-through and reinit as if typed is first char } } ASSIGN(charBuffer, characterStr); typingBufferColumn = index; lastKeyPressedTime = [theEvent timestamp]; // Try selecting if ([column selectCellWithPrefix: charBuffer]) { [[self window] makeFirstResponder: matrix]; return; } // Selection failed, reinitialize and use mismatching character as new buffer beginning DESTROY(charBuffer); } } [super keyDown: theEvent]; } - (BOOL)acceptsFirstResponder { return YES; } - (BOOL)becomeFirstResponder { FSNBrowserColumn *selCol; NSMatrix *matrix; selCol = [self selectedColumn]; if (selCol == nil) { matrix = [[columns objectAtIndex: 0] cmatrix]; } else { matrix = [selCol cmatrix]; } if ([[matrix cells] count]) { [[self window] makeFirstResponder: matrix]; } return YES; } - (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize { NSRect r = [[self superview] bounds]; NSInteger ncols = myrintf(r.size.width / columnSize.width); [self setFrame: r]; if (ncols != visibleColumns) { updateViewsLock++; [self setVisibleColumns: ncols]; updateViewsLock--; } [self tile]; } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; if ([self superview]) { [self setFrame: [[self superview] bounds]]; [self tile]; } } /* - (void)drawRect:(NSRect)rect { int i; [[NSColor blackColor] set]; for (i = 0; i < visibleColumns; i++) { NSPoint p1 = NSMakePoint((columnSize.width * i) + 1 + (i-1), columnSize.height); NSPoint p2 = NSMakePoint((columnSize.width * i) + 1 + (i-1), 0); [NSBezierPath strokeLineFromPoint: p1 toPoint: p2]; } } */ @end @implementation FSNBrowser (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode { [self showSubnode: anode]; } - (NSDictionary *)readNodeInfo { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [baseNode path]]; NSDictionary *nodeDict = nil; if ([baseNode isWritable] && ([[fsnodeRep volumes] containsObject: [baseNode path]] == NO)) { NSString *infoPath = [[baseNode path] stringByAppendingPathComponent: @".gwdir"]; if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { nodeDict = [NSDictionary dictionaryWithDictionary: dict]; } } } if (nodeDict == nil) { id defEntry = [defaults dictionaryForKey: prefsname]; if (defEntry) { nodeDict = [NSDictionary dictionaryWithDictionary: defEntry]; } } if (nodeDict) { id entry = [nodeDict objectForKey: @"fsn_info_type"]; infoType = entry ? [entry intValue] : infoType; if (infoType == FSNInfoExtendedType) { DESTROY (extInfoType); entry = [nodeDict objectForKey: @"ext_info_type"]; if (entry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: entry]) { ASSIGN (extInfoType, entry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } } return nodeDict; } - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *updatedInfo = nil; if ([baseNode isValid]) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [baseNode path]]; NSString *infoPath = [[baseNode path] stringByAppendingPathComponent: @".gwdir"]; BOOL writable = ([baseNode isWritable] && ([[fsnodeRep volumes] containsObject: [baseNode path]] == NO)); if (writable) { if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { updatedInfo = [dict mutableCopy]; } } } else { NSDictionary *prefs = [defaults dictionaryForKey: prefsname]; if (prefs) { updatedInfo = [prefs mutableCopy]; } } if (updatedInfo == nil) { updatedInfo = [NSMutableDictionary new]; } [updatedInfo setObject: [NSNumber numberWithInt: infoType] forKey: @"fsn_info_type"]; if (infoType == FSNInfoExtendedType) { [updatedInfo setObject: extInfoType forKey: @"ext_info_type"]; } if (ondisk) { if (writable) { [updatedInfo writeToFile: infoPath atomically: YES]; } else { [defaults setObject: updatedInfo forKey: prefsname]; } } } RELEASE (arp); return (AUTORELEASE (updatedInfo)); } - (void)reloadContents { [self reloadFromColumnWithNode: baseNode]; } - (void)reloadFromNode:(FSNode *)anode { [self reloadFromColumnWithNode: anode]; } - (FSNode *)baseNode { return baseNode; } - (FSNode *)shownNode { FSNBrowserColumn *bc = [self lastLoadedColumn]; if (bc) { return [bc shownNode]; } return baseNode; } - (BOOL)isSingleNode { return NO; } - (BOOL)isShowingNode:(FSNode *)anode { return ([self columnWithNode: anode] ? YES : NO); } - (BOOL)isShowingPath:(NSString *)path { return ([self columnWithPath: path] ? YES : NO); } - (void)sortTypeChangedAtPath:(NSString *)path { if (path) { [self reloadColumnWithPath: path]; } else { [self reloadContents]; } } - (void)nodeContentsWillChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; if ([operation isEqual: @"GWorkspaceRenameOperation"] == NO) { [self checkLockedReps]; } } - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { FSNBrowserColumn *bc = [self columnWithPath: destination]; if (bc) { [self reloadFromColumn: bc]; if ([[self window] isKeyWindow]) { BOOL selectCell = NO; if ([operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: @"GWorkspaceCreateDirOperation"]) { selectCell = YES; } else if ([operation isEqual: @"GWorkspaceRenameOperation"]) { NSString *newname = [files objectAtIndex: 0]; NSString *newpath = [destination stringByAppendingPathComponent: newname]; selectCell = ([bc cellWithPath: newpath] != nil); } if (selectCell) { [self selectCellsWithNames: files inColumnWithPath: destination sendAction: YES]; } } } } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { if ([self isShowingPath: source]) { [self reloadFromColumnWithPath: source]; } } } - (void)watchedPathChanged:(NSDictionary *)info { NSString *event = [info objectForKey: @"event"]; NSString *path = [info objectForKey: @"path"]; if ([event isEqual: @"GWWatchedPathDeleted"]) { NSString *s = [path stringByDeletingLastPathComponent]; if ([self isShowingPath: s]) { [self reloadFromColumnWithPath: s]; } } else if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { if ([self isShowingPath: path]) { FSNBrowserColumn *col; [self reloadFromColumnWithPath: path]; col = [self lastLoadedColumn]; if (col) { NSArray *selection = [col selectedNodes]; if (selection == nil) { selection = [NSArray arrayWithObject: [col shownNode]]; } [viewer selectionChanged: selection]; [self synchronizeViewer]; } } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { [self addCellsWithNames: [info objectForKey: @"files"] inColumnWithPath: path]; } } - (void)setShowType:(FSNInfoType)type { if (infoType != type) { NSInteger i; infoType = type; DESTROY (extInfoType); for (i = 0; i < [columns count]; i++) { [[columns objectAtIndex: i] setShowType: infoType]; } [self tile]; } } - (void)setExtendedShowType:(NSString *)type { if ((extInfoType == nil) || ([extInfoType isEqual: type] == NO)) { NSInteger i; infoType = FSNInfoExtendedType; ASSIGN (extInfoType, type); for (i = 0; i < [columns count]; i++) { FSNBrowserColumn *col = [columns objectAtIndex: i]; [col setExtendedShowType: extInfoType]; } [self tile]; } } - (FSNInfoType)showType { return infoType; } - (int)iconSize { return DEFAULT_ISIZE; } - (int)labelTextSize { return fontSize; } - (NSCellImagePosition)iconPosition { return NSImageLeft; } - (void)updateIcons { } - (id)repOfSubnode:(FSNode *)anode { if ([[anode path] isEqual: path_separator()] == NO) { FSNBrowserColumn *bc = [self columnWithPath: [anode parentPath]]; if (bc) { return [bc cellOfNode: anode]; } } return nil; } - (id)repOfSubnodePath:(NSString *)apath { if ([apath isEqual: path_separator()] == NO) { NSString *parentPath = [apath stringByDeletingLastPathComponent]; FSNBrowserColumn *bc = [self columnWithPath: parentPath]; if (bc) { return [bc cellWithPath: apath]; } } return nil; } - (id)addRepForSubnode:(FSNode *)anode { return [self addRepForSubnodePath: [anode path]]; } - (id)addRepForSubnodePath:(NSString *)apath { if ([apath isEqual: path_separator()] == NO) { NSString *bcpath = [apath stringByDeletingLastPathComponent]; FSNBrowserColumn *bc = [self columnWithPath: bcpath]; if (bc) { [bc addCellsWithNames: [NSArray arrayWithObject: [apath lastPathComponent]]]; return [bc cellWithPath: apath]; } } return nil; } - (void)removeRepOfSubnode:(FSNode *)anode { [self removeRepOfSubnodePath: [anode path]]; } - (void)removeRepOfSubnodePath:(NSString *)apath { if ([apath isEqual: path_separator()] == NO) { NSString *bcpath = [apath stringByDeletingLastPathComponent]; FSNBrowserColumn *bc = [self columnWithPath: bcpath]; if (bc) { [bc removeCellsWithNames: [NSArray arrayWithObject: [apath lastPathComponent]]]; } } } - (void)removeRep:(id)arep { [self removeRepOfSubnode: [arep node]]; } - (void)unloadFromNode:(FSNode *)anode { FSNBrowserColumn *bc = [self columnWithNode: anode]; if (bc) { FSNBrowserColumn *col = [self columnBeforeColumn: bc]; NSInteger index; NSInteger pos; BOOL mustshift; if (col == nil) { col = [columns objectAtIndex: 0]; } index = [col index]; pos = index - firstVisibleColumn + 1; mustshift = (firstVisibleColumn > 0); updateViewsLock++; [[col cmatrix] deselectAllCells]; [self setLastColumn: index]; [self reloadFromColumn: col]; if (mustshift && (pos < visibleColumns)){ currentshift = 0; [self setShift: visibleColumns - pos]; } updateViewsLock--; [self tile]; } } - (void)repSelected:(id)arep { } - (void)unselectOtherReps:(id)arep { FSNBrowserColumn *bc = [self lastLoadedColumn]; if (bc) { [[bc cmatrix] deselectAllCells]; [self notifySelectionChange: [NSArray arrayWithObject: [bc shownNode]]]; } } - (void)selectReps:(NSArray *)reps { if (reps && [reps count]) { FSNode *node = [[reps objectAtIndex: 0] node]; FSNBrowserColumn *bc = [self columnWithPath: [node parentPath]]; if (bc) { [bc selectCells: reps sendAction: NO]; [[self window] makeFirstResponder: [bc cmatrix]]; } } } - (void)selectRepsOfSubnodes:(NSArray *)nodes { if (nodes && [nodes count]) { FSNode *node = [nodes objectAtIndex: 0]; if ([node isSubnodeOfNode: baseNode]) { FSNBrowserColumn *bc = [self columnWithPath: [node parentPath]]; if (bc) { [bc selectCellsOfNodes: nodes sendAction: YES]; } else { [self showSelection: nodes]; } bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } } } - (void)selectRepsOfPaths:(NSArray *)paths { if (paths && [paths count]) { NSString *basepath = [paths objectAtIndex: 0]; if ([baseNode isParentOfPath: basepath]) { FSNBrowserColumn *bc = [self columnWithPath: [basepath stringByDeletingLastPathComponent]]; if (bc) { [bc selectCellsWithPaths: paths sendAction: YES]; } else { [self showPathsSelection: paths]; } bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } } } - (void)selectAll { [self selectAllInLastColumn]; } - (NSArray *)reps { FSNBrowserColumn *bc = [self lastLoadedColumn]; if (bc) { return [[bc cmatrix] cells]; } return nil; } - (NSArray *)selectedReps { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; if (bc) { selection = [bc selectedCells]; if ((selection == nil) && [bc shownNode]) { FSNBrowserColumn *col = [self columnBeforeColumn: bc]; if (col) { return [col selectedCells]; } } } return selection; } - (NSArray *)selectedNodes { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; if (bc) { selection = [bc selectedNodes]; if ((selection == nil) && [bc shownNode]) { selection = [NSArray arrayWithObject: [bc shownNode]]; } } else { selection = [NSArray arrayWithObject: baseNode]; } return selection; } - (NSArray *)selectedPaths { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; if (bc) { selection = [bc selectedPaths]; if ((selection == nil) && [bc shownNode]) { selection = [NSArray arrayWithObject: [[bc shownNode] path]]; } } else { selection = [NSArray arrayWithObject: [baseNode path]]; } return selection; } - (void)selectionDidChange { } - (void)checkLockedReps { NSInteger i; for (i = 0; i < [columns count]; i++) { [[columns objectAtIndex: i] checkLockedReps]; } } - (void)setSelectionMask:(FSNSelectionMask)mask { } - (FSNSelectionMask)selectionMask { return NSSingleSelectionMask; } - (void)openSelectionInNewViewer:(BOOL)newv { [desktopApp openSelectionInNewViewer: newv]; } - (void)restoreLastSelection { if (lastSelection) { [self selectRepsOfSubnodes: lastSelection]; } } - (void)setLastShownNode:(FSNode *)anode { FSNBrowserColumn *bc = [self columnWithNode: anode]; if (bc) { FSNBrowserColumn *prev = [self columnBeforeColumn: bc]; updateViewsLock++; if (prev) { if ([prev selectCellOfNode: anode sendAction: YES] == nil) { [self setLastColumn: [prev index]]; [self notifySelectionChange: [NSArray arrayWithObject: [prev shownNode]]]; } } else { [self setLastColumn: 0]; [bc unselectAllCells]; [self notifySelectionChange: [NSArray arrayWithObject: baseNode]]; } updateViewsLock--; [self tile]; bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } } - (BOOL)needsDndProxy { return NO; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { NSInteger i; for (i = 0; i < [columns count]; i++) { FSNode *node = [[columns objectAtIndex: i] shownNode]; if (node && [node involvedByFileOperation: opinfo]) { return YES; } } return NO; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { FSNode *node = [self nodeOfLastColumn]; NSString *nodePath = [node path]; NSString *prePath = [NSString stringWithString: nodePath]; NSString *basePath; if ([names count] == 0) { return NO; } if ([node isWritable] == NO) { return NO; } basePath = [[names objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NO; } if ([names containsObject: nodePath]) { return NO; } while (1) { if ([names containsObject: prePath]) { return NO; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } return YES; } - (NSColor *)backgroundColor { return backColor; } - (NSColor *)textColor { return [NSColor controlTextColor]; } - (NSColor *)disabledTextColor { return [NSColor disabledControlTextColor]; } @end @implementation FSNBrowser (IconNameEditing) - (void)setEditorForCell:(FSNBrowserCell *)cell inColumn:(FSNBrowserColumn *)col { if (nameEditor) { FSNode *cellnode = [cell node]; BOOL canedit = (([cell isLocked] == NO) && ([cellnode isMountPoint] == NO)); [self stopCellEditing]; if (canedit) { NSMatrix *matrix = [col cmatrix]; NSFont *edfont = [nameEditor font]; float fnheight = [fsnodeRep heightOfFont: edfont]; NSRect r = [cell labelRect]; r = [matrix convertRect: r toView: self]; r.origin.y += ((r.size.height - fnheight) / 2); r.size.height = fnheight; r = NSIntegralRect(r); [nameEditor setFrame: r]; [nameEditor setNode: cellnode stringValue: [cell shownInfo] index: 0]; [nameEditor setEditable: YES]; [nameEditor setSelectable: YES]; [self addSubview: nameEditor]; } } } - (void)stopCellEditing { if (nameEditor && [[self subviews] containsObject: nameEditor]) { [nameEditor abortEditing]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [nameEditor setNode: nil stringValue: @"" index: -1]; [nameEditor removeFromSuperview]; [self setNeedsDisplayInRect: [nameEditor frame]]; } } - (void)stopRepNameEditing { [self stopCellEditing]; } - (void)controlTextDidChange:(NSNotification *)aNotification { } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { FSNode *ednode = [nameEditor node]; #define CLEAREDITING \ [self stopCellEditing]; \ return if ([ednode isParentWritable] == NO) { showAlertNoPermission([FSNode class], [ednode parentName]); CLEAREDITING; } else if ([ednode isSubnodeOfPath: [desktopApp trashPath]]) { showAlertInRecycler([FSNode class]); CLEAREDITING; } else { NSString *newname = [nameEditor stringValue]; NSString *newpath = [[ednode parentPath] stringByAppendingPathComponent: newname]; NSString *extension = [newpath pathExtension]; NSCharacterSet *notAllowSet = [NSCharacterSet characterSetWithCharactersInString: @"/\\*:?\33"]; NSRange range = [newname rangeOfCharacterFromSet: notAllowSet]; NSArray *dirContents = [ednode subNodeNamesOfParent]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; if (([newname length] == 0) || (range.length > 0)) { showAlertInvalidName([FSNode class]); CLEAREDITING; } if (([extension length] && ([ednode isDirectory] && ([ednode isPackage] == NO)))) { if (showAlertExtensionChange([FSNode class], extension) == NSAlertDefaultReturn) { CLEAREDITING; } } if ([dirContents containsObject: newname]) { if ([newname isEqual: [ednode name]]) { CLEAREDITING; } else { showAlertNameInUse([FSNode class], newname); CLEAREDITING; } } [opinfo setObject: @"GWorkspaceRenameOperation" forKey: @"operation"]; [opinfo setObject: [ednode path] forKey: @"source"]; [opinfo setObject: newpath forKey: @"destination"]; [opinfo setObject: [NSArray arrayWithObject: @""] forKey: @"files"]; [self stopCellEditing]; [desktopApp performFileOperation: opinfo]; } } @end gworkspace-1.1.0/FSNode/FSNBrowser.m.orig0000644000175000001440000014604714751352021017360 0ustar multixusers/* FSNBrowser.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #import #import #import #import "FSNBrowser.h" #import "FSNBrowserColumn.h" #import "FSNBrowserMatrix.h" #import "FSNBrowserCell.h" #import "FSNIcon.h" #import "FSNFunctions.h" #define DEFAULT_ISIZE 24 #ifndef max #define max(a,b) ((a) >= (b) ? (a):(b)) #define min(a,b) ((a) <= (b) ? (a):(b)) #endif @implementation FSNBrowser - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE (baseNode); RELEASE (extInfoType); RELEASE (lastSelection); RELEASE (columns); RELEASE (nameEditor); RELEASE (cellPrototype); RELEASE (charBuffer); RELEASE (backColor); [super dealloc]; } - (id)initWithBaseNode:(FSNode *)bsnode visibleColumns:(int)vcols scroller:(NSScroller *)scrl cellsIcons:(BOOL)cicns editableCells:(BOOL)edcells selectionColumn:(BOOL)selcol { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; id defentry; NSInteger i; fsnodeRep = [FSNodeRep sharedInstance]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } ASSIGN (backColor, [NSColor windowBackgroundColor]); defentry = [defaults objectForKey: @"fsn_info_type"]; infoType = defentry ? [defentry intValue] : FSNInfoNameType; extInfoType = nil; if (infoType == FSNInfoExtendedType) { defentry = [defaults objectForKey: @"extended_info_type"]; if (defentry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: defentry]) { ASSIGN (extInfoType, defentry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } ASSIGN (baseNode, [FSNode nodeWithPath: [bsnode path]]); [self readNodeInfo]; lastSelection = nil; visibleColumns = vcols; scroller = scrl; [scroller setTarget: self]; [scroller setAction: @selector(scrollViaScroller:)]; cellsIcon = cicns; selColumn = selcol; updateViewsLock = 0; if ([defaults objectForKey:@"NSFontSize"]) fontSize = [defaults integerForKey:@"NSFontSize"]; else fontSize = 12; cellPrototype = [FSNBrowserCell new]; [cellPrototype setFont: [NSFont systemFontOfSize: fontSize]]; columns = [NSMutableArray new]; nameEditor = nil; if (edcells) { nameEditor = [FSNCellNameEditor new]; [nameEditor setDelegate: self]; [nameEditor setEditable: YES]; [nameEditor setSelectable: YES]; [nameEditor setFont: [cellPrototype font]]; [nameEditor setBezeled: NO]; [nameEditor setAlignment: NSLeftTextAlignment]; } for (i = 0; i < visibleColumns; i++) { [self createEmptyColumn]; } firstVisibleColumn = 0; lastVisibleColumn = visibleColumns - 1; currentshift = 0; lastColumnLoaded = -1; typingBufferColumn = -1; skipUpdateScroller = NO; lastKeyPressedTime = 0.0; charBuffer = nil; simulatingDoubleClick = NO; isLoaded = NO; viewer = nil; manager = nil; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil]; } return self; } - (void)defaultsChanged:(NSNotification *)not { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSInteger newSize; if ([defaults objectForKey:@"NSFontSize"]) { newSize = [defaults integerForKey:@"NSFontSize"]; if (newSize != fontSize) { fontSize = newSize; [cellPrototype setFont: [NSFont systemFontOfSize: fontSize]]; [nameEditor setFont: [cellPrototype font]]; [self setVisibleColumns:[self visibleColumns]]; } } } - (void)setBaseNode:(FSNode *)node { ASSIGN (baseNode, [FSNode nodeWithPath: [node path]]); [self readNodeInfo]; [self loadColumnZero]; [self notifySelectionChange: [NSArray arrayWithObject: node]]; } - (void)setUsesCellsIcons:(BOOL)cicns { cellsIcon = cicns; } - (void)setUsesSelectionColumn:(BOOL)selcol { selColumn = selcol; } - (void)setVisibleColumns:(NSInteger)vcols { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; NSInteger i; updateViewsLock++; if (bc) { selection = [bc selectedNodes]; if ((selection == nil) && [bc shownNode]) { selection = [NSArray arrayWithObject: [bc shownNode]]; } } if (selection == nil) { selection = [NSArray arrayWithObject: baseNode]; } selection = [selection copy]; for (i = 0; i < [columns count]; i++) { [[columns objectAtIndex: i] removeFromSuperview]; } [columns removeAllObjects]; visibleColumns = vcols; for (i = 0; i < visibleColumns; i++) { [self createEmptyColumn]; } firstVisibleColumn = 0; lastVisibleColumn = visibleColumns - 1; currentshift = 0; lastColumnLoaded = -1; skipUpdateScroller = NO; isLoaded = NO; [self showSelection: selection]; RELEASE (selection); updateViewsLock--; [self tile]; bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } - (NSInteger)visibleColumns { return visibleColumns; } - (void)showSubnode:(FSNode *)node { NSArray *components; NSInteger column; NSInteger i; updateViewsLock++; if ([node isEqual: baseNode] || ([node isSubnodeOfNode: baseNode] == NO)) { updateViewsLock--; [self setBaseNode: node]; [self tile]; [self setNeedsDisplay: YES]; return; } [self loadColumnZero]; if ([[baseNode path] isEqual: path_separator()]) { components = [FSNode nodeComponentsToNode: node]; } else { components = [FSNode nodeComponentsFromNode: baseNode toNode: node]; } if ([components count] == 1) { updateViewsLock--; [self tile]; [self setNeedsDisplay: YES]; return; } components = [components subarrayWithRange: NSMakeRange(1, [components count] -1)]; column = lastColumnLoaded; for (i = 0; i < [components count]; i++) { FSNBrowserColumn *bc = [columns objectAtIndex: column + i]; FSNode *nd = [components objectAtIndex: i]; FSNBrowserCell *cell = [bc selectCellOfNode: nd sendAction: NO]; if (cell) { if ([cell isLeaf]) { break; } } else { NSLog(@"Browser: unable to find cell '%@' in column %ld\n", [nd name], (long int)(column + i)); break; } nd = [FSNode nodeWithRelativePath: [nd lastPathComponent] parent: [bc shownNode]]; [self addAndLoadColumnForNode: nd]; } updateViewsLock--; [self tile]; [self setNeedsDisplay: YES]; } - (void)showSelection:(NSArray *)selection { if (selection && [selection count]) { FSNode *node = [selection objectAtIndex: 0]; FSNBrowserColumn *bc; NSArray *selNodes; updateViewsLock++; if ([selection count] > 1) { BOOL alldirs = YES; int i; for (i = 0; i < [selection count]; i++) { FSNode *nd = [selection objectAtIndex: i]; if ([nd isDirectory] == NO) { node = nd; alldirs = NO; break; } } if (alldirs) { node = [FSNode nodeWithPath: [node parentPath]]; } } [self showSubnode: node]; bc = [self lastLoadedColumn]; [bc selectCellsOfNodes: selection sendAction: NO]; if (selColumn) { if ([selection count] == 1) { FSNode *node = [selection objectAtIndex: 0]; if (([node isDirectory] == NO) || [node isPackage]) { [self addFillingColumn]; } } else { [self addFillingColumn]; } } updateViewsLock--; [self tile]; selNodes = [bc selectedNodes]; if (selNodes == nil) { selNodes = [NSArray arrayWithObject: [bc shownNode]]; } [self notifySelectionChange: selNodes]; } } - (void)showPathsSelection:(NSArray *)selpaths { if (selpaths && [selpaths count]) { FSNode *node = [FSNode nodeWithPath: [selpaths objectAtIndex: 0]]; FSNBrowserColumn *bc; NSArray *selNodes; updateViewsLock++; if ([selpaths count] > 1) { BOOL alldirs = YES; int i; for (i = 0; i < [selpaths count]; i++) { FSNode *nd = [FSNode nodeWithPath: [selpaths objectAtIndex: i]]; if ([nd isDirectory] == NO) { node = nd; alldirs = NO; break; } } if (alldirs) { node = [FSNode nodeWithPath: [node parentPath]]; } } [self showSubnode: node]; bc = [self lastLoadedColumn]; [bc selectCellsWithPaths: selpaths sendAction: NO]; if (selColumn) { if ([selpaths count] == 1) { if (([node isDirectory] == NO) || [node isPackage]) { [self addFillingColumn]; } } else { [self addFillingColumn]; } } updateViewsLock--; [self tile]; selNodes = [bc selectedNodes]; if (selNodes == nil) { selNodes = [NSArray arrayWithObject: [bc shownNode]]; } [self notifySelectionChange: selNodes]; } } - (void)loadColumnZero { updateViewsLock++; [self setLastColumn: -1]; [self addAndLoadColumnForNode: baseNode]; isLoaded = YES; updateViewsLock--; [self tile]; } - (FSNBrowserColumn *)createEmptyColumn { CREATE_AUTORELEASE_POOL(arp); int count = [columns count]; FSNBrowserColumn *bc = [[FSNBrowserColumn alloc] initInBrowser: self atIndex: count cellPrototype: cellPrototype cellsIcon: cellsIcon nodeInfoType: infoType extendedType: extInfoType backgroundColor: backColor]; [columns insertObject: bc atIndex: count]; [self addSubview: bc]; RELEASE(bc); RELEASE (arp); return bc; } - (void)addAndLoadColumnForNode:(FSNode *)node { FSNBrowserColumn *bc; NSInteger i; if (lastColumnLoaded + 1 >= [columns count]) { i = [columns indexOfObject: [self createEmptyColumn]]; } else { i = lastColumnLoaded + 1; } bc = [columns objectAtIndex: i]; [bc showContentsOfNode: node]; updateViewsLock++; [self setLastColumn: i]; isLoaded = YES; if ((i > 0) && ((i - 1) == lastVisibleColumn)) { [self scrollColumnsRightBy: 1]; } updateViewsLock--; [self tile]; } - (void)addFillingColumn { NSInteger i; if (lastColumnLoaded + 1 >= [columns count]) { i = [columns indexOfObject: [self createEmptyColumn]]; } else { i = lastColumnLoaded + 1; } updateViewsLock++; [self setLastColumn: i]; if ((i > 0) && ((i - 1) == lastVisibleColumn)) { [self scrollColumnsRightBy: 1]; } updateViewsLock--; [self tile]; } - (void)unloadFromColumn:(NSInteger)column { FSNBrowserColumn *bc = nil; NSInteger count = [columns count]; NSInteger i; updateViewsLock++; for (i = column; i < count; ++i) { bc = [columns objectAtIndex: i]; if ([bc isLoaded]) { [bc showContentsOfNode: nil]; } if (i >= visibleColumns) { [bc removeFromSuperview]; [columns removeObject: bc]; count--; i--; } } if (column == 0) { isLoaded = NO; } if (column <= lastVisibleColumn) { [self scrollColumnsLeftBy: lastVisibleColumn - column + 1]; } updateViewsLock--; [self tile]; } - (void)reloadColumnWithNode:(FSNode *)anode { FSNBrowserColumn *col = [self columnWithNode: anode]; if (col) { [col showContentsOfNode: anode]; } } - (void)reloadColumnWithPath:(NSString *)path { FSNBrowserColumn *col = [self columnWithPath: path]; if (col) { FSNBrowserColumn *parentCol = [self columnBeforeColumn: col]; FSNode *node; if (parentCol) { node = [FSNode nodeWithRelativePath: path parent: [parentCol shownNode]]; } else { node = [FSNode nodeWithPath: path]; } [col showContentsOfNode: node]; } } - (void)reloadFromColumn:(FSNBrowserColumn *)col { CREATE_AUTORELEASE_POOL(arp); NSInteger index = [col index]; NSInteger i = 0; updateViewsLock++; for (i = index; i < [columns count]; i++) { FSNBrowserColumn *nextcol = [columns objectAtIndex: i]; NSArray *selection = [self selectionInColumnBeforeColumn: nextcol]; BOOL done = NO; if (selection && ([selection count] == 1)) { FSNode *node = [selection objectAtIndex: 0]; if ([node isDirectory] && (([node isPackage] == NO) || (i == 0))) { [nextcol showContentsOfNode: node]; } else { done = YES; } } else { done = YES; } if (done) { int last = (i > 0) ? i - 1 : 0; int shift = 0; int leftscr = 0; if (last >= visibleColumns) { if (last < firstVisibleColumn) { shift = visibleColumns - 1; } else if (last > lastVisibleColumn) { leftscr = last - lastVisibleColumn; } else { shift = lastVisibleColumn - last; } } [self setLastColumn: last]; if (shift) { currentshift = 0; [self setShift: shift]; } else if (leftscr) { [self scrollColumnsLeftBy: leftscr]; } break; } } col = [self lastLoadedColumn]; if (col) { NSArray *selection = [col selectedNodes]; int index = [col index]; if (index < firstVisibleColumn) { [self scrollColumnToVisible: index]; } [[self window] makeFirstResponder: [col cmatrix]]; if (selection) { if (selColumn && (index == lastColumnLoaded)) { if ([selection count] == 1) { FSNode *node = [selection objectAtIndex: 0]; if (([node isDirectory] == NO) || [node isPackage]) { [self addFillingColumn]; } } else { [self addFillingColumn]; } } [self notifySelectionChange: selection]; } else { FSNode *node = [col shownNode]; [self notifySelectionChange: [NSArray arrayWithObject: node]]; } } updateViewsLock--; [self tile]; RELEASE (arp); } - (void)reloadFromColumnWithNode:(FSNode *)anode { FSNBrowserColumn *col = [self columnWithNode: anode]; if (col) { [self reloadFromColumn: col]; } } - (void)reloadFromColumnWithPath:(NSString *)path { FSNBrowserColumn *col = [self columnWithPath: path]; if (col) { [self reloadFromColumn: col]; } } - (void)setLastColumn:(int)column { lastColumnLoaded = column; [self unloadFromColumn: column + 1]; } - (void)tile { updateViewsLock = (updateViewsLock < 0) ? 0 : updateViewsLock; if (updateViewsLock == 0) { NSWindow *window = [self window]; NSRect r = [self bounds]; float frameWidth = r.size.width - visibleColumns; NSInteger count = [columns count]; NSRect colrect; NSInteger i; columnSize.height = r.size.height; columnSize.width = myrintf(frameWidth / visibleColumns); [window disableFlushWindow]; for (i = 0; i < count; i++) { NSInteger n = i - firstVisibleColumn; colrect = NSZeroRect; colrect.size = columnSize; colrect.origin.y = 0; if (i < firstVisibleColumn) { colrect.origin.x = (n * columnSize.width) - 8; } else { if (i == firstVisibleColumn) { colrect.origin.x = (n * columnSize.width); } else if (i <= lastVisibleColumn) { colrect.origin.x = (n * columnSize.width) + n; } else { colrect.origin.x = (n * columnSize.width) + n + 8; } } if (i == lastVisibleColumn) { colrect.size.width = [self bounds].size.width - colrect.origin.x; } [[columns objectAtIndex: i] setFrame: colrect]; } [self synchronizeViewer]; [self updateScroller]; [self stopCellEditing]; [window enableFlushWindow]; [window flushWindowIfNeeded]; } } - (void)scrollViaScroller:(NSScroller *)sender { NSScrollerPart hit = [sender hitPart]; BOOL needsDisplay = NO; updateViewsLock++; skipUpdateScroller = YES; switch (hit) { // Scroll to the left case NSScrollerDecrementLine: case NSScrollerDecrementPage: [self scrollColumnsLeftBy: 1]; if (currentshift > 0) { [self setLastColumn: (lastColumnLoaded - currentshift)]; [self setShift: currentshift - 1]; } break; // Scroll to the right case NSScrollerIncrementLine: case NSScrollerIncrementPage: [self scrollColumnsRightBy: 1]; needsDisplay = YES; break; // The knob or knob slot case NSScrollerKnob: case NSScrollerKnobSlot: { float f = [sender floatValue]; float n = lastColumnLoaded + 1 - visibleColumns; [self scrollColumnToVisible: myrintf(f * n) + visibleColumns - 1]; if (currentshift > 0) { [self setLastColumn: (lastColumnLoaded - currentshift)]; currentshift = 0; } needsDisplay = YES; } break; default: break; } skipUpdateScroller = NO; updateViewsLock--; [self tile]; [self setNeedsDisplay: needsDisplay]; } - (void)updateScroller { if ((lastColumnLoaded == 0) || (lastColumnLoaded <= (visibleColumns - 1))) { [scroller setEnabled: NO]; } else { if (skipUpdateScroller == NO) { float prop = (float)visibleColumns / (float)(lastColumnLoaded + 1); float i = lastColumnLoaded - visibleColumns + 1; float f = 1 + ((lastVisibleColumn - lastColumnLoaded) / i); if (lastVisibleColumn > lastColumnLoaded) { prop = (float)visibleColumns / (float)(lastVisibleColumn + 1); } [scroller setFloatValue: f knobProportion: prop]; } [scroller setEnabled: YES]; } [scroller setNeedsDisplay: YES]; } - (void)scrollColumnsLeftBy:(int)shiftAmount { if ((firstVisibleColumn - shiftAmount) < 0) { shiftAmount = firstVisibleColumn; } if (shiftAmount <= 0) { return; } firstVisibleColumn = firstVisibleColumn - shiftAmount; lastVisibleColumn = lastVisibleColumn - shiftAmount; [self tile]; [self setNeedsDisplay: YES]; } - (void)scrollColumnsRightBy:(int)shiftAmount { if ((shiftAmount + lastVisibleColumn) > lastColumnLoaded) { shiftAmount = lastColumnLoaded - lastVisibleColumn; } if (shiftAmount <= 0) { return; } firstVisibleColumn = firstVisibleColumn + shiftAmount; lastVisibleColumn = lastVisibleColumn + shiftAmount; [self tile]; } - (void)scrollColumnToVisible:(NSInteger)column { NSInteger i; if (lastVisibleColumn == column) return; if ((lastColumnLoaded + 1) <= visibleColumns) return; i = lastVisibleColumn - column; if (i > 0) { [self scrollColumnsLeftBy: i]; } else { [self scrollColumnsRightBy: -i]; } } - (void)moveLeft { FSNBrowserColumn *selCol = [self selectedColumn]; NSInteger index; if (selCol == nil) { return; } index = [selCol index]; if (index > 0) { updateViewsLock++; index--; if (index < firstVisibleColumn) { [self scrollColumnToVisible: index]; } selCol = [columns objectAtIndex: index]; [[self window] makeFirstResponder: [selCol cmatrix]]; [self clickInMatrixOfColumn: selCol]; updateViewsLock--; [self tile]; } } - (void)moveRight { FSNBrowserColumn *selCol = [self selectedColumn]; if (selCol == nil) { selCol = [columns objectAtIndex: 0]; if ([selCol selectFirstCell]) { [[self window] makeFirstResponder: [selCol cmatrix]]; } } else { NSMatrix *matrix = [selCol cmatrix]; if ([[matrix cells] count]) { NSInteger index = [selCol index]; [matrix sendAction]; if (index < ([columns count] - 1)) { selCol = [columns objectAtIndex: index + 1]; matrix = [selCol cmatrix]; if ([[matrix cells] count]) { if ([selCol selectFirstCell]) { [matrix sendAction]; [[self window] makeFirstResponder: matrix]; } } } } } } - (void)setShift:(int)s { NSInteger i; for (i = 0; i < s; i++) { [self createEmptyColumn]; } currentshift = s; updateViewsLock++; [self setLastColumn: (lastColumnLoaded + s)]; [self scrollColumnsRightBy: s]; updateViewsLock--; [self tile]; } - (FSNode *)nodeOfLastColumn { FSNBrowserColumn *col = [self lastLoadedColumn]; if (col) return [col shownNode]; return nil; } - (NSString *)pathToLastColumn { FSNode *node = [self nodeOfLastColumn]; if (node) return [node path]; return nil; } - (NSArray *)selectionInColumnBeforeColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; if (index == 0) { return [NSArray arrayWithObject: baseNode]; } return [[columns objectAtIndex: index - 1] selectedNodes]; } - (void)selectCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath sendAction:(BOOL)act { FSNBrowserColumn *col = [self columnWithPath: cpath]; if (col) { [col selectCellsWithNames: names sendAction: act]; } } - (void)selectAllInLastColumn { FSNBrowserColumn *col = [self lastLoadedColumn]; if (col) { [col selectAll]; } } - (void)notifySelectionChange:(NSArray *)newsel { if (newsel) { if ((lastSelection == nil) || ([newsel isEqual: lastSelection] == NO)) { ASSIGN (lastSelection, newsel); [self synchronizeViewer]; [desktopApp selectionChanged: newsel]; } } } - (void)synchronizeViewer { if (viewer) { NSRange range = NSMakeRange(firstVisibleColumn, visibleColumns); [viewer setSelectableNodesRange: range]; } } - (void)addCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath { FSNBrowserColumn *col = [self columnWithPath: cpath]; if (col) { [col addCellsWithNames: names]; } } - (void)removeCellsWithNames:(NSArray *)names inColumnWithPath:(NSString *)cpath { FSNBrowserColumn *col = [self columnWithPath: cpath]; if (col) { [col removeCellsWithNames: names]; } } - (NSInteger)firstVisibleColumn { return firstVisibleColumn; } - (NSInteger)lastColumnLoaded { return lastColumnLoaded; } - (NSInteger)lastVisibleColumn { return lastVisibleColumn; } - (FSNBrowserColumn *)selectedColumn { NSInteger i; for (i = lastColumnLoaded; i >= 0; i--) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([col isSelected]) { return col; } } return nil; } - (FSNBrowserColumn *)lastLoadedColumn { NSInteger i; for (i = [columns count] - 1; i >= 0; i--) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([col isLoaded]) { return col; } } return nil; } - (FSNBrowserColumn *)columnWithNode:(FSNode *)anode { NSInteger i; for (i = 0; i < [columns count]; i++) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([[col shownNode] isEqual: anode]) { return col; } } return nil; } - (FSNBrowserColumn *)columnWithPath:(NSString *)cpath { NSInteger i; for (i = 0; i < [columns count]; i++) { FSNBrowserColumn *col = [columns objectAtIndex: i]; if ([[[col shownNode] path] isEqual: cpath]) { return col; } } return nil; } - (FSNBrowserColumn *)columnBeforeColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; if (index > 0) { return [columns objectAtIndex: index - 1]; } return nil; } - (FSNBrowserColumn *)columnAfterColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; if (index < ([columns count] - 1)) { return [columns objectAtIndex: index + 1]; } return nil; } - (void)clickInColumn:(FSNBrowserColumn *)col { if (viewer) { NSArray *selection = [col selectedNodes]; if (selection && [selection count]) { [viewer multipleNodeViewDidSelectSubNode: [col shownNode]]; } } } - (void)clickInMatrixOfColumn:(FSNBrowserColumn *)col { NSInteger index = [col index]; NSInteger pos = index - firstVisibleColumn + 1; BOOL mustshift = (firstVisibleColumn > 0); NSInteger added = 0; NSArray *selection = [col selectedNodes]; if ((selection == nil) || ([selection count] == 0)) { [self notifySelectionChange: [NSArray arrayWithObject: [col shownNode]]]; return; } if (selColumn) { if ((pos == visibleColumns) && (index == ([columns count] -1))) { NSPoint p = [[self window] mouseLocationOutsideOfEventStream]; mousePointX = p.x; mousePointY = p.y; simulatingDoubleClick = YES; [NSTimer scheduledTimerWithTimeInterval: 0.3 target: self selector: @selector(doubleClikTimeOut:) userInfo: nil repeats: NO]; } } currentshift = 0; updateViewsLock++; [self setLastColumn: index]; if ([selection count] == 1) { FSNode *node = [selection objectAtIndex: 0]; if ([node isDirectory] && ([node isPackage] == NO)) { [self addAndLoadColumnForNode: node]; added = 1; } else if (selColumn) { [self addFillingColumn]; } } else if (selColumn) { [self addFillingColumn]; } if (selColumn == NO) { if (mustshift && (pos < visibleColumns)) { [self setShift: visibleColumns - pos - added]; } } else { if (mustshift && (pos < (visibleColumns - 1))) { [self setShift: visibleColumns - pos - 1]; } } updateViewsLock--; [self tile]; [self notifySelectionChange: [col selectedNodes]]; } - (void)doubleClickInMatrixOfColumn:(FSNBrowserColumn *)col { if (manager) { unsigned int mouseFlags = [(FSNBrowserMatrix *)[col cmatrix] mouseFlags]; BOOL closesndr = ((mouseFlags == NSAlternateKeyMask) || (mouseFlags == NSControlKeyMask)); [viewer openSelectionInNewViewer: closesndr]; // [manager openSelectionInViewer: viewer closeSender: closesndr]; } else { [desktopApp openSelectionInNewViewer: NO]; } } - (void)doubleClikTimeOut:(id)sender { simulatingDoubleClick = NO; } - (void)mouseDown:(NSEvent*)theEvent { if (simulatingDoubleClick) { NSPoint p = [[self window] mouseLocationOutsideOfEventStream]; if ((max(p.x, mousePointX) - min(p.x, mousePointX)) <= 3 && (max(p.y, mousePointY) - min(p.y, mousePointY)) <= 3) { if (manager) { [manager openSelectionInViewer: viewer closeSender: NO]; } else { [desktopApp openSelectionInNewViewer: NO]; } } } [super mouseDown: theEvent]; } - (void)keyDown:(NSEvent *)theEvent { NSString *characters = [theEvent characters]; unichar character = 0; NSString *characterStr = nil; FSNBrowserColumn *column = [self selectedColumn]; NSMatrix *matrix; if (column == nil) { [super keyDown: theEvent]; return; } matrix = [column cmatrix]; if (matrix == nil) { [super keyDown: theEvent]; return; } if ([characters length] > 0) { character = [characters characterAtIndex: 0]; characterStr = [characters substringToIndex: 1]; } switch (character) { case NSUpArrowFunctionKey: case NSDownArrowFunctionKey: [super keyDown: theEvent]; return; case NSLeftArrowFunctionKey: { if ([theEvent modifierFlags] & NSControlKeyMask) { [super keyDown: theEvent]; } else { [self moveLeft]; } } return; case NSRightArrowFunctionKey: { if ([theEvent modifierFlags] & NSControlKeyMask) { [super keyDown: theEvent]; } else { [self moveRight]; } } return; case NSCarriageReturnCharacter: [(FSNBrowserMatrix *)matrix setMouseFlags: [theEvent modifierFlags]]; [matrix sendDoubleAction]; DESTROY(charBuffer); return; case 0x01B: // Escape DESTROY(charBuffer); return; default: break; } if (([characters length] > 0) && (character < 0xF700)) { column = [self lastLoadedColumn]; if (column) { NSInteger index = [column index]; matrix = [column cmatrix]; if (matrix == nil) { return; } if (charBuffer != nil) { if (([theEvent timestamp] - lastKeyPressedTime < 5.0) // seconds && (typingBufferColumn == index)) { NSString *appendBuffer = [charBuffer stringByAppendingString:characterStr]; // Try selecting if ([column selectCellWithPrefix: appendBuffer]) { ASSIGN(charBuffer, appendBuffer); [[self window] makeFirstResponder: matrix]; return; } // unable to select - fall-through and reinit as if typed is first char } } ASSIGN(charBuffer, characterStr); typingBufferColumn = index; lastKeyPressedTime = [theEvent timestamp]; // Try selecting if ([column selectCellWithPrefix: charBuffer]) { [[self window] makeFirstResponder: matrix]; return; } // Selection failed, reinitialize and use mismatching character as new buffer beginning DESTROY(charBuffer); } } [super keyDown: theEvent]; } - (BOOL)acceptsFirstResponder { return YES; } - (BOOL)becomeFirstResponder { FSNBrowserColumn *selCol; NSMatrix *matrix; selCol = [self selectedColumn]; if (selCol == nil) { matrix = [[columns objectAtIndex: 0] cmatrix]; } else { matrix = [selCol cmatrix]; } if ([[matrix cells] count]) { [[self window] makeFirstResponder: matrix]; } return YES; } - (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize { NSRect r = [[self superview] bounds]; NSInteger ncols = myrintf(r.size.width / columnSize.width); [self setFrame: r]; if (ncols != visibleColumns) { updateViewsLock++; [self setVisibleColumns: ncols]; updateViewsLock--; } [self tile]; } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; if ([self superview]) { [self setFrame: [[self superview] bounds]]; [self tile]; } } /* - (void)drawRect:(NSRect)rect { int i; [[NSColor blackColor] set]; for (i = 0; i < visibleColumns; i++) { NSPoint p1 = NSMakePoint((columnSize.width * i) + 1 + (i-1), columnSize.height); NSPoint p2 = NSMakePoint((columnSize.width * i) + 1 + (i-1), 0); [NSBezierPath strokeLineFromPoint: p1 toPoint: p2]; } } */ @end @implementation FSNBrowser (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode { [self showSubnode: anode]; } - (NSDictionary *)readNodeInfo { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [baseNode path]]; NSDictionary *nodeDict = nil; if ([baseNode isWritable] && ([[fsnodeRep volumes] containsObject: [baseNode path]] == NO)) { NSString *infoPath = [[baseNode path] stringByAppendingPathComponent: @".gwdir"]; if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { nodeDict = [NSDictionary dictionaryWithDictionary: dict]; } } } if (nodeDict == nil) { id defEntry = [defaults dictionaryForKey: prefsname]; if (defEntry) { nodeDict = [NSDictionary dictionaryWithDictionary: defEntry]; } } if (nodeDict) { id entry = [nodeDict objectForKey: @"fsn_info_type"]; infoType = entry ? [entry intValue] : infoType; if (infoType == FSNInfoExtendedType) { DESTROY (extInfoType); entry = [nodeDict objectForKey: @"ext_info_type"]; if (entry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: entry]) { ASSIGN (extInfoType, entry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } } return nodeDict; } - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *updatedInfo = nil; if ([baseNode isValid]) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [baseNode path]]; NSString *infoPath = [[baseNode path] stringByAppendingPathComponent: @".gwdir"]; BOOL writable = ([baseNode isWritable] && ([[fsnodeRep volumes] containsObject: [baseNode path]] == NO)); if (writable) { if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { updatedInfo = [dict mutableCopy]; } } } else { NSDictionary *prefs = [defaults dictionaryForKey: prefsname]; if (prefs) { updatedInfo = [prefs mutableCopy]; } } if (updatedInfo == nil) { updatedInfo = [NSMutableDictionary new]; } [updatedInfo setObject: [NSNumber numberWithInt: infoType] forKey: @"fsn_info_type"]; if (infoType == FSNInfoExtendedType) { [updatedInfo setObject: extInfoType forKey: @"ext_info_type"]; } if (ondisk) { if (writable) { [updatedInfo writeToFile: infoPath atomically: YES]; } else { [defaults setObject: updatedInfo forKey: prefsname]; } } } RELEASE (arp); return (AUTORELEASE (updatedInfo)); } - (void)reloadContents { [self reloadFromColumnWithNode: baseNode]; } - (void)reloadFromNode:(FSNode *)anode { [self reloadFromColumnWithNode: anode]; } - (FSNode *)baseNode { return baseNode; } - (FSNode *)shownNode { FSNBrowserColumn *bc = [self lastLoadedColumn]; if (bc) { return [bc shownNode]; } return baseNode; } - (BOOL)isSingleNode { return NO; } - (BOOL)isShowingNode:(FSNode *)anode { return ([self columnWithNode: anode] ? YES : NO); } - (BOOL)isShowingPath:(NSString *)path { return ([self columnWithPath: path] ? YES : NO); } - (void)sortTypeChangedAtPath:(NSString *)path { if (path) { [self reloadColumnWithPath: path]; } else { [self reloadContents]; } } - (void)nodeContentsWillChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; if ([operation isEqual: @"GWorkspaceRenameOperation"] == NO) { [self checkLockedReps]; } } - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { FSNBrowserColumn *bc = [self columnWithPath: destination]; if (bc) { [self reloadFromColumn: bc]; if ([[self window] isKeyWindow]) { BOOL selectCell = NO; if ([operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: @"GWorkspaceCreateDirOperation"]) { selectCell = YES; } else if ([operation isEqual: @"GWorkspaceRenameOperation"]) { NSString *newname = [files objectAtIndex: 0]; NSString *newpath = [destination stringByAppendingPathComponent: newname]; selectCell = ([bc cellWithPath: newpath] != nil); } if (selectCell) { [self selectCellsWithNames: files inColumnWithPath: destination sendAction: YES]; } } } } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { if ([self isShowingPath: source]) { [self reloadFromColumnWithPath: source]; } } } - (void)watchedPathChanged:(NSDictionary *)info { NSString *event = [info objectForKey: @"event"]; NSString *path = [info objectForKey: @"path"]; if ([event isEqual: @"GWWatchedPathDeleted"]) { NSString *s = [path stringByDeletingLastPathComponent]; if ([self isShowingPath: s]) { [self reloadFromColumnWithPath: s]; } } else if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { if ([self isShowingPath: path]) { FSNBrowserColumn *col; [self reloadFromColumnWithPath: path]; col = [self lastLoadedColumn]; if (col) { NSArray *selection = [col selectedNodes]; if (selection == nil) { selection = [NSArray arrayWithObject: [col shownNode]]; } [viewer selectionChanged: selection]; [self synchronizeViewer]; } } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { [self addCellsWithNames: [info objectForKey: @"files"] inColumnWithPath: path]; } } - (void)setShowType:(FSNInfoType)type { if (infoType != type) { NSInteger i; infoType = type; DESTROY (extInfoType); for (i = 0; i < [columns count]; i++) { [[columns objectAtIndex: i] setShowType: infoType]; } [self tile]; } } - (void)setExtendedShowType:(NSString *)type { if ((extInfoType == nil) || ([extInfoType isEqual: type] == NO)) { NSInteger i; infoType = FSNInfoExtendedType; ASSIGN (extInfoType, type); for (i = 0; i < [columns count]; i++) { FSNBrowserColumn *col = [columns objectAtIndex: i]; [col setExtendedShowType: extInfoType]; } [self tile]; } } - (FSNInfoType)showType { return infoType; } - (int)iconSize { return DEFAULT_ISIZE; } - (int)labelTextSize { return fontSize; } - (NSCellImagePosition)iconPosition { return NSImageLeft; } - (void)updateIcons { } - (id)repOfSubnode:(FSNode *)anode { if ([[anode path] isEqual: path_separator()] == NO) { FSNBrowserColumn *bc = [self columnWithPath: [anode parentPath]]; if (bc) { return [bc cellOfNode: anode]; } } return nil; } - (id)repOfSubnodePath:(NSString *)apath { if ([apath isEqual: path_separator()] == NO) { NSString *parentPath = [apath stringByDeletingLastPathComponent]; FSNBrowserColumn *bc = [self columnWithPath: parentPath]; if (bc) { return [bc cellWithPath: apath]; } } return nil; } - (id)addRepForSubnode:(FSNode *)anode { return [self addRepForSubnodePath: [anode path]]; } - (id)addRepForSubnodePath:(NSString *)apath { if ([apath isEqual: path_separator()] == NO) { NSString *bcpath = [apath stringByDeletingLastPathComponent]; FSNBrowserColumn *bc = [self columnWithPath: bcpath]; if (bc) { [bc addCellsWithNames: [NSArray arrayWithObject: [apath lastPathComponent]]]; return [bc cellWithPath: apath]; } } return nil; } - (void)removeRepOfSubnode:(FSNode *)anode { [self removeRepOfSubnodePath: [anode path]]; } - (void)removeRepOfSubnodePath:(NSString *)apath { if ([apath isEqual: path_separator()] == NO) { NSString *bcpath = [apath stringByDeletingLastPathComponent]; FSNBrowserColumn *bc = [self columnWithPath: bcpath]; if (bc) { [bc removeCellsWithNames: [NSArray arrayWithObject: [apath lastPathComponent]]]; } } } - (void)removeRep:(id)arep { [self removeRepOfSubnode: [arep node]]; } - (void)unloadFromNode:(FSNode *)anode { FSNBrowserColumn *bc = [self columnWithNode: anode]; if (bc) { FSNBrowserColumn *col = [self columnBeforeColumn: bc]; NSInteger index; NSInteger pos; BOOL mustshift; if (col == nil) { col = [columns objectAtIndex: 0]; } index = [col index]; pos = index - firstVisibleColumn + 1; mustshift = (firstVisibleColumn > 0); updateViewsLock++; [[col cmatrix] deselectAllCells]; [self setLastColumn: index]; [self reloadFromColumn: col]; if (mustshift && (pos < visibleColumns)){ currentshift = 0; [self setShift: visibleColumns - pos]; } updateViewsLock--; [self tile]; } } - (void)repSelected:(id)arep { } - (void)unselectOtherReps:(id)arep { FSNBrowserColumn *bc = [self lastLoadedColumn]; if (bc) { [[bc cmatrix] deselectAllCells]; [self notifySelectionChange: [NSArray arrayWithObject: [bc shownNode]]]; } } - (void)selectReps:(NSArray *)reps { if (reps && [reps count]) { FSNode *node = [[reps objectAtIndex: 0] node]; FSNBrowserColumn *bc = [self columnWithPath: [node parentPath]]; if (bc) { [bc selectCells: reps sendAction: NO]; [[self window] makeFirstResponder: [bc cmatrix]]; } } } - (void)selectRepsOfSubnodes:(NSArray *)nodes { if (nodes && [nodes count]) { FSNode *node = [nodes objectAtIndex: 0]; if ([node isSubnodeOfNode: baseNode]) { FSNBrowserColumn *bc = [self columnWithPath: [node parentPath]]; if (bc) { [bc selectCellsOfNodes: nodes sendAction: YES]; } else { [self showSelection: nodes]; } bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } } } - (void)selectRepsOfPaths:(NSArray *)paths { if (paths && [paths count]) { NSString *basepath = [paths objectAtIndex: 0]; if ([baseNode isParentOfPath: basepath]) { FSNBrowserColumn *bc = [self columnWithPath: [basepath stringByDeletingLastPathComponent]]; if (bc) { [bc selectCellsWithPaths: paths sendAction: YES]; } else { [self showPathsSelection: paths]; } bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } } } - (void)selectAll { [self selectAllInLastColumn]; } - (NSArray *)reps { FSNBrowserColumn *bc = [self lastLoadedColumn]; if (bc) { return [[bc cmatrix] cells]; } return nil; } - (NSArray *)selectedReps { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; if (bc) { selection = [bc selectedCells]; if ((selection == nil) && [bc shownNode]) { FSNBrowserColumn *col = [self columnBeforeColumn: bc]; if (col) { return [col selectedCells]; } } } return selection; } - (NSArray *)selectedNodes { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; if (bc) { selection = [bc selectedNodes]; if ((selection == nil) && [bc shownNode]) { selection = [NSArray arrayWithObject: [bc shownNode]]; } } else { selection = [NSArray arrayWithObject: baseNode]; } return selection; } - (NSArray *)selectedPaths { FSNBrowserColumn *bc = [self lastLoadedColumn]; NSArray *selection = nil; if (bc) { selection = [bc selectedPaths]; if ((selection == nil) && [bc shownNode]) { selection = [NSArray arrayWithObject: [[bc shownNode] path]]; } } else { selection = [NSArray arrayWithObject: [baseNode path]]; } return selection; } - (void)selectionDidChange { } - (void)checkLockedReps { NSInteger i; for (i = 0; i < [columns count]; i++) { [[columns objectAtIndex: i] checkLockedReps]; } } - (void)setSelectionMask:(FSNSelectionMask)mask { } - (FSNSelectionMask)selectionMask { return NSSingleSelectionMask; } - (void)openSelectionInNewViewer:(BOOL)newv { [desktopApp openSelectionInNewViewer: newv]; } - (void)restoreLastSelection { if (lastSelection) { [self selectRepsOfSubnodes: lastSelection]; } } - (void)setLastShownNode:(FSNode *)anode { FSNBrowserColumn *bc = [self columnWithNode: anode]; if (bc) { FSNBrowserColumn *prev = [self columnBeforeColumn: bc]; updateViewsLock++; if (prev) { if ([prev selectCellOfNode: anode sendAction: YES] == nil) { [self setLastColumn: [prev index]]; [self notifySelectionChange: [NSArray arrayWithObject: [prev shownNode]]]; } } else { [self setLastColumn: 0]; [bc unselectAllCells]; [self notifySelectionChange: [NSArray arrayWithObject: baseNode]]; } updateViewsLock--; [self tile]; bc = [self lastLoadedColumn]; if (bc) { [[self window] makeFirstResponder: [bc cmatrix]]; } } } - (BOOL)needsDndProxy { return NO; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { NSInteger i; for (i = 0; i < [columns count]; i++) { FSNode *node = [[columns objectAtIndex: i] shownNode]; if (node && [node involvedByFileOperation: opinfo]) { return YES; } } return NO; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { FSNode *node = [self nodeOfLastColumn]; NSString *nodePath = [node path]; NSString *prePath = [NSString stringWithString: nodePath]; NSString *basePath; if ([names count] == 0) { return NO; } if ([node isWritable] == NO) { return NO; } basePath = [[names objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NO; } if ([names containsObject: nodePath]) { return NO; } while (1) { if ([names containsObject: prePath]) { return NO; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } return YES; } - (NSColor *)backgroundColor { return backColor; } - (NSColor *)textColor { return [NSColor controlTextColor]; } - (NSColor *)disabledTextColor { return [NSColor disabledControlTextColor]; } @end @implementation FSNBrowser (IconNameEditing) - (void)setEditorForCell:(FSNBrowserCell *)cell inColumn:(FSNBrowserColumn *)col { if (nameEditor) { FSNode *cellnode = [cell node]; BOOL canedit = (([cell isLocked] == NO) && ([cellnode isMountPoint] == NO)); [self stopCellEditing]; if (canedit) { NSMatrix *matrix = [col cmatrix]; NSFont *edfont = [nameEditor font]; float fnheight = [fsnodeRep heightOfFont: edfont]; NSRect r = [cell labelRect]; r = [matrix convertRect: r toView: self]; r.origin.y += ((r.size.height - fnheight) / 2); r.size.height = fnheight; r = NSIntegralRect(r); [nameEditor setFrame: r]; [nameEditor setNode: cellnode stringValue: [cell shownInfo] index: 0]; [nameEditor setEditable: YES]; [nameEditor setSelectable: YES]; [self addSubview: nameEditor]; } } } - (void)stopCellEditing { if (nameEditor && [[self subviews] containsObject: nameEditor]) { [nameEditor abortEditing]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [nameEditor setNode: nil stringValue: @"" index: -1]; [nameEditor removeFromSuperview]; [self setNeedsDisplayInRect: [nameEditor frame]]; } } - (void)stopRepNameEditing { [self stopCellEditing]; } - (void)controlTextDidChange:(NSNotification *)aNotification { } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { FSNode *ednode = [nameEditor node]; #define CLEAREDITING \ [self stopCellEditing]; \ return if ([ednode isParentWritable] == NO) { showAlertNoPermission([FSNode class], [ednode parentName]); CLEAREDITING; } else if ([ednode isSubnodeOfPath: [desktopApp trashPath]]) { showAlertInRecycler([FSNode class]); CLEAREDITING; } else { NSString *newname = [nameEditor stringValue]; NSString *newpath = [[ednode parentPath] stringByAppendingPathComponent: newname]; NSString *extension = [newpath pathExtension]; NSCharacterSet *notAllowSet = [NSCharacterSet characterSetWithCharactersInString: @"/\\*:?\33"]; NSRange range = [newname rangeOfCharacterFromSet: notAllowSet]; NSArray *dirContents = [ednode subNodeNamesOfParent]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; if (([newname length] == 0) || (range.length > 0)) { showAlertInvalidName([FSNode class]); CLEAREDITING; } if (([extension length] && ([ednode isDirectory] && ([ednode isPackage] == NO)))) { if (showAlertExtensionChange([FSNode class], extension) == NSAlertDefaultReturn) { CLEAREDITING; } } if ([dirContents containsObject: newname]) { if ([newname isEqual: [ednode name]]) { CLEAREDITING; } else { showAlertNameInUse([FSNode class], newname); CLEAREDITING; } } [opinfo setObject: @"GWorkspaceRenameOperation" forKey: @"operation"]; [opinfo setObject: [ednode path] forKey: @"source"]; [opinfo setObject: newpath forKey: @"destination"]; [opinfo setObject: [NSArray arrayWithObject: @""] forKey: @"files"]; [self stopCellEditing]; [desktopApp performFileOperation: opinfo]; } } @end gworkspace-1.1.0/FSNode/FSNBrowser.m.rej0000644000175000001440000000512014751352021017162 0ustar multixusers--- FSNode/FSNBrowser.m +++ FSNode/FSNBrowser.m @@ -270,50 +270,60 @@ updateViewsLock++; - if ([node isEqual: baseNode] || ([node isSubnodeOfNode: baseNode] == NO)) { - updateViewsLock--; - [self setBaseNode: node]; - [self tile]; - [self setNeedsDisplay: YES]; - return; - } + if ([node isEqual: baseNode] || ([node isSubnodeOfNode: baseNode] == NO)) + { + updateViewsLock--; + [self setBaseNode: node]; + [self tile]; + [self setNeedsDisplay: YES]; + return; + } [self loadColumnZero]; - if ([[baseNode path] isEqual: path_separator()]) { - components = [FSNode nodeComponentsToNode: node]; - } else { - components = [FSNode nodeComponentsFromNode: baseNode toNode: node]; - } + if ([[baseNode path] isEqual: path_separator()]) + { + components = [FSNode nodeComponentsToNode: node]; + } + else + { + components = [FSNode nodeComponentsFromNode: baseNode toNode: node]; + } - if ([components count] == 1) { - updateViewsLock--; - [self tile]; - [self setNeedsDisplay: YES]; - return; - } + if ([components count] == 1) + { + updateViewsLock--; + [self tile]; + [self setNeedsDisplay: YES]; + return; + } components = [components subarrayWithRange: NSMakeRange(1, [components count] -1)]; column = lastColumnLoaded; - for (i = 0; i < [components count]; i++) { - FSNBrowserColumn *bc = [columns objectAtIndex: column + i]; - FSNode *nd = [components objectAtIndex: i]; - FSNBrowserCell *cell = [bc selectCellOfNode: nd sendAction: NO]; + for (i = 0; i < [components count]; i++) + { + FSNBrowserColumn *bc = [columns objectAtIndex: column + i]; + FSNode *nd = [components objectAtIndex: i]; + FSNBrowserCell *cell = [bc selectCellOfNode: nd sendAction: NO]; - if (cell) { - if ([cell isLeaf]) { - break; - } - } else { - NSLog(@"Browser: unable to find cell '%@' in column %ld\n", [nd name], (long int)(column + i)); - break; - } + if (cell) + { + if ([cell isLeaf]) + { + break; + } + } + else + { + NSLog(@"Browser: unable to find cell '%@' in column %ld\n", [nd name], (long int)(column + i)); + break; + } - nd = [FSNode nodeWithRelativePath: [nd relativePath] parent: [bc shownNode]]; - [self addAndLoadColumnForNode: nd]; - } + nd = [FSNode nodeWithRelativePath: [nd relativePath] parent: [bc shownNode]]; + [self addAndLoadColumnForNode: nd]; + } updateViewsLock--; [self tile]; gworkspace-1.1.0/FSNode/FSNBrowserCell.h0000644000175000001440000000367614751213523017217 0ustar multixusers/* FSNBrowserCell.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_BROWSER_CELL_H #define FSN_BROWSER_CELL_H #import #import #import "FSNodeRep.h" @class FSNode; @class NSImage; @class NSTextFieldCell; @interface FSNBrowserCell : NSBrowserCell { FSNode *node; NSArray *selection; NSString *selectionTitle; NSString *uncutTitle; NSString *extInfoType; FSNInfoType showType; NSCell *infoCell; NSRect titleRect; NSRect infoRect; NSImage *icon; NSImage *selectedicon; int icnsize; float icnh; BOOL isLocked; BOOL iconSelected; BOOL isOpened; BOOL nameEdited; FSNodeRep *fsnodeRep; } - (void)setIcon; - (NSString *)path; - (BOOL)selectIcon; - (BOOL)unselectIcon; - (NSString *)cutTitle:(NSString *)title toFitWidth:(float)width; @end @interface FSNCellNameEditor : NSTextField { FSNode *node; int index; } - (void)setNode:(FSNode *)anode stringValue:(NSString *)str index:(int)idx; - (FSNode *)node; - (int)index; @end #endif // FSN_BROWSER_CELL_H gworkspace-1.1.0/FSNode/FSNBrowserCell.m0000644000175000001440000003747614751352021017226 0ustar multixusers/* FSNBrowserCell.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "FSNBrowserCell.h" #import "FSNode.h" #define DEFAULT_ISIZE (16) #define HLIGHT_H_FACT (0.8125) static id desktopApp = nil; static NSString *dots = @"..."; @implementation FSNBrowserCell - (void)dealloc { RELEASE (selection); RELEASE (selectionTitle); RELEASE (uncutTitle); RELEASE (extInfoType); RELEASE (infoCell); RELEASE (icon); RELEASE (selectedicon); [super dealloc]; } + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { if (desktopApp == nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } } initialized = YES; } } - (id)init { self = [super init]; if (self) { node = nil; selection = nil; selectionTitle = nil; showType = FSNInfoNameType; extInfoType = nil; icon = nil; selectedicon = nil; icnsize = DEFAULT_ISIZE; isLocked = NO; iconSelected = NO; isOpened = NO; nameEdited = NO; [self setAllowsMixedState: NO]; fsnodeRep = [FSNodeRep sharedInstance]; } return self; } - (void)setIcon { if (node) { ASSIGN (icon, [fsnodeRep iconOfSize: icnsize forNode: node]); icnh = [icon size].height; DESTROY (selectedicon); } } - (NSString *)path { if (node) { return [node path]; } return nil; } - (BOOL)selectIcon { if (iconSelected) { return NO; } if (selectedicon == nil) { NSImage *opicn = [fsnodeRep openFolderIconOfSize: icnsize forNode: node]; if (opicn) { ASSIGN (selectedicon, opicn); icnh = [selectedicon size].height; } } iconSelected = YES; return YES; } - (BOOL)unselectIcon { if (iconSelected == NO) { return NO; } iconSelected = NO; return YES; } - (NSString *)cutTitle:(NSString *)title toFitWidth:(float)width { NSDictionary *fontAttr; fontAttr = [NSDictionary dictionaryWithObject: [NSFont systemFontOfSize: 12] forKey: NSFontAttributeName]; if ([title sizeWithAttributes: fontAttr].width > width) { int tl = [title length]; if (tl <= 5) { return dots; } else { int fpto = (tl / 2) - 2; int spfr = fpto + 3; NSString *fp = [title substringToIndex: fpto]; NSString *sp = [title substringFromIndex: spfr]; NSString *dotted = [NSString stringWithFormat: @"%@%@%@", fp, dots, sp]; int dl = [dotted length]; float dotl = [dotted sizeWithAttributes: fontAttr].width; int p = 0; while (dotl > width) { if (dl <= 5) { return dots; } if (p) { fpto--; } else { spfr++; } p = !p; fp = [title substringToIndex: fpto]; sp = [title substringFromIndex: spfr]; dotted = [NSString stringWithFormat: @"%@%@%@", fp, dots, sp]; dotl = [dotted sizeWithAttributes: fontAttr].width; dl = [dotted length]; } return dotted; } } return title; } - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { #define MARGIN (2.0) #define LEAF_MARGIN (5.0) NSWindow *cvwin = [controlView window]; if (cvwin) { NSColor *backcolor = [cvwin backgroundColor]; float textlenght = cellFrame.size.width; BOOL showsFirstResponder = [self showsFirstResponder]; int infoheight = 0; titleRect = cellFrame; if (icon) { textlenght -= ([icon size].width + (MARGIN * 2)); } if ([self isLeaf]) { textlenght -= LEAF_MARGIN; } else { textlenght -= (LEAF_MARGIN + 16); } textlenght -= MARGIN; ASSIGN (uncutTitle, [self stringValue]); [self setStringValue: [self cutTitle:uncutTitle toFitWidth:textlenght]]; [self setShowsFirstResponder: NO]; if (icon == nil) { if (nameEdited == NO) { if (infoCell) { infoheight = floor([[FSNodeRep sharedInstance] heightOfFont: [infoCell font]]); if (([self isHighlighted] || [self state]) && (nameEdited == NO)) { [[self highlightColorInView: controlView] set]; NSRectFill(cellFrame); } titleRect.size.height -= infoheight; if ([controlView isFlipped]) { titleRect.origin.y += cellFrame.size.height; titleRect.origin.y -= (titleRect.size.height + infoheight); } else { titleRect.origin.y += infoheight; } [super drawInteriorWithFrame: titleRect inView: controlView]; } else { [super drawInteriorWithFrame: titleRect inView: controlView]; } } else { [backcolor set]; NSRectFill(cellFrame); } if (infoCell) { infoRect = NSMakeRect(cellFrame.origin.x + 2, cellFrame.origin.y + 3, cellFrame.size.width - 2, infoheight); if ([controlView isFlipped]) { infoRect.origin.y += (cellFrame.size.height - infoRect.size.height); infoRect.origin.y -= 6; } [infoCell drawInteriorWithFrame: infoRect inView: controlView]; } } else { NSRect icon_rect; if (([self isHighlighted] || [self state]) && (nameEdited == NO)) { [[self highlightColorInView: controlView] set]; NSRectFill(cellFrame); } if (infoCell) { titleRect.size.height -= infoheight; if ([controlView isFlipped]) { titleRect.origin.y += cellFrame.size.height; titleRect.origin.y -= (titleRect.size.height + infoheight); } else { titleRect.origin.y += infoheight; } } icon_rect.origin = titleRect.origin; icon_rect.size = NSMakeSize(icnsize, icnh); icon_rect.origin.x += MARGIN; icon_rect.origin.y += ((titleRect.size.height - icon_rect.size.height) / 2.0); if ([controlView isFlipped]) { if (infoCell) { icon_rect.origin.y += cellFrame.size.height; icon_rect.origin.y -= (titleRect.size.height + infoheight); } icon_rect.origin.y += icon_rect.size.height; } titleRect.origin.x += (icon_rect.size.width + (MARGIN * 2)); titleRect.size.width -= (icon_rect.size.width + (MARGIN * 2)); if (nameEdited == NO) { [super drawInteriorWithFrame: titleRect inView: controlView]; } if (infoCell) { infoRect = NSMakeRect(cellFrame.origin.x + 2, cellFrame.origin.y + 3, cellFrame.size.width - 2, infoheight); if ([controlView isFlipped]) { infoRect.origin.y += (cellFrame.size.height - infoRect.size.height); infoRect.origin.y -= 6; } [infoCell drawInteriorWithFrame: infoRect inView: controlView]; } [controlView lockFocus]; if ([self isEnabled]) { if (iconSelected) { if (isOpened == NO) { [selectedicon compositeToPoint: icon_rect.origin operation: NSCompositeSourceOver]; } else { [selectedicon dissolveToPoint: icon_rect.origin fraction: 0.5]; } } else { if (isOpened == NO) { [icon compositeToPoint: icon_rect.origin operation: NSCompositeSourceOver]; } else { [icon dissolveToPoint: icon_rect.origin fraction: 0.5]; } } } else { [icon dissolveToPoint: icon_rect.origin fraction: 0.3]; } [controlView unlockFocus]; } if (showsFirstResponder) { [self setShowsFirstResponder: showsFirstResponder]; NSDottedFrameRect(cellFrame); } [self setStringValue: uncutTitle]; } } // // FSNodeRep protocol // - (void)setNode:(FSNode *)anode { DESTROY (selection); DESTROY (selectionTitle); ASSIGN (node, anode); [self setIcon]; if (extInfoType) { [self setExtendedShowType: extInfoType]; } else { [self setNodeInfoShowType: showType]; } [self setLocked: [node isLocked]]; } - (void)setNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype { [self setNode: anode]; if (exttype) { [self setExtendedShowType: exttype]; } else { [self setNodeInfoShowType: type]; } } - (FSNode *)node { return node; } - (void)showSelection:(NSArray *)selnodes { NSUInteger i; ASSIGN (node, [selnodes objectAtIndex: 0]); ASSIGN (selection, selnodes); if (icon) { ASSIGN (icon, [fsnodeRep multipleSelectionIconOfSize: icnsize]); icnh = [icon size].height; } ASSIGN (selectionTitle, ([NSString stringWithFormat: @"%lu %@", (unsigned long)[selection count], NSLocalizedString(@"elements", @"")])); [self setStringValue: selectionTitle]; [self setLocked: NO]; for (i = 0; i < [selnodes count]; i++) { if ([fsnodeRep isNodeLocked: [selnodes objectAtIndex: i]]) { [self setLocked: YES]; break; } } } - (BOOL)isShowingSelection { return (selection != nil); } - (NSArray *)selection { return selection; } - (NSArray *)pathsSelection { if (selection) { NSMutableArray *selpaths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [selection count]; i++) { [selpaths addObject: [[selection objectAtIndex: i] path]]; } return [NSArray arrayWithArray: selpaths]; } return nil; } - (void)setFont:(NSFont *)fontObj { [super setFont: fontObj]; } - (NSFont *)labelFont { return [super font]; } - (void)setLabelTextColor:(NSColor *)acolor { } - (NSColor *)labelTextColor { return [NSColor controlTextColor]; } - (void)setIconSize:(int)isize { icnsize = isize; [self setIcon]; } - (int)iconSize { return icnsize; } - (void)setIconPosition:(NSCellImagePosition)ipos { } - (NSCellImagePosition)iconPosition { return NSImageLeft; } - (NSRect)labelRect { return titleRect; } - (void)setNodeInfoShowType:(FSNInfoType)type { showType = type; DESTROY (extInfoType); if (selection) { [self setStringValue: selectionTitle]; if (infoCell) { [infoCell setStringValue: @""]; } return; } [self setStringValue: [node name]]; if (showType == FSNInfoNameType) { DESTROY (infoCell); } else if (infoCell == nil) { NSFont *infoFont; infoFont = [[NSFontManager sharedFontManager] convertFont: [self font] toHaveTrait: NSItalicFontMask]; infoCell = [NSCell new]; [infoCell setFont: infoFont]; } switch(showType) { case FSNInfoKindType: [infoCell setStringValue: [node typeDescription]]; break; case FSNInfoDateType: [infoCell setStringValue: [node modDateDescription]]; break; case FSNInfoSizeType: [infoCell setStringValue: [node sizeDescription]]; break; case FSNInfoOwnerType: [infoCell setStringValue: [node owner]]; break; default: break; } } - (BOOL)setExtendedShowType:(NSString *)type { ASSIGN (extInfoType, type); showType = FSNInfoExtendedType; [self setNodeInfoShowType: showType]; if (selection == nil) { NSDictionary *info = [fsnodeRep extendedInfoOfType: type forNode: node]; if (info) { [infoCell setStringValue: [info objectForKey: @"labelstr"]]; return YES; } } return NO; } - (FSNInfoType)nodeInfoShowType { return showType; } - (NSString *)shownInfo { return [self stringValue]; } - (void)setNameEdited:(BOOL)value { nameEdited = value; } - (void)setLeaf:(BOOL)flag { [super setLeaf: flag]; } - (BOOL)isLeaf { return [super isLeaf]; } - (void)select { } - (void)unselect { } - (BOOL)isSelected { return NO; } - (void)setOpened:(BOOL)value { /* This was commented. (To know if something goes wrong) */ if (isOpened == value) { return; } isOpened = value; } - (BOOL)isOpened { return isOpened; } - (void)setLocked:(BOOL)value { if (isLocked == value) { return; } isLocked = value; [self setEnabled: isLocked]; } - (void)checkLocked { [self setLocked: [node isLocked]]; } - (BOOL)isLocked { return isLocked; } - (void)setGridIndex:(NSUInteger)index { } - (NSUInteger)gridIndex { return 0; } - (int)compareAccordingToName:(id)aCell { return [node compareAccordingToName: [aCell node]]; } - (int)compareAccordingToKind:(id)aCell { return [node compareAccordingToKind: [aCell node]]; } - (int)compareAccordingToDate:(id)aCell { return [node compareAccordingToDate: [aCell node]]; } - (int)compareAccordingToSize:(id)aCell { return [node compareAccordingToSize: [aCell node]]; } - (int)compareAccordingToOwner:(id)aCell { return [node compareAccordingToOwner: [aCell node]]; } - (int)compareAccordingToGroup:(id)aCell { return [node compareAccordingToGroup: [aCell node]]; } - (int)compareAccordingToIndex:(id)aCell { return NSOrderedSame; } @end @implementation FSNCellNameEditor - (void)dealloc { RELEASE (node); [super dealloc]; } - (void)setNode:(FSNode *)anode stringValue:(NSString *)str index:(int)idx { DESTROY (node); if (anode) { ASSIGN (node, anode); } [self setStringValue: str]; index = idx; } - (FSNode *)node { return node; } - (int)index { return index; } - (void)mouseDown:(NSEvent *)theEvent { if ([self isEditable]) { [self setAlignment: NSLeftTextAlignment]; [[self window] makeFirstResponder: self]; } [super mouseDown: theEvent]; } @end gworkspace-1.1.0/FSNode/FSNBrowserColumn.h0000644000175000001440000001122114751213523017556 0ustar multixusers/* FSNBrowserColumn.h * * Copyright (C) 2004-2022 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_BROWSER_COLUMN_H #define FSN_BROWSER_COLUMN_H #include #include #include "FSNodeRep.h" @class FSNBrowser; @class FSNBrowserCell; @class FSNBrowserMatrix; @class FSNBrowserScroll; @interface FSNBrowserColumn : NSView { FSNBrowserScroll *scroll; FSNBrowserMatrix *matrix; FSNBrowserCell *cellPrototype; int cellsHeight; BOOL cellsIcon; FSNode *shownNode; FSNode *oldNode; FSNInfoType infoType; NSString *extInfoType; NSInteger index; BOOL isLoaded; BOOL isLeaf; BOOL isDragTarget; BOOL forceCopy; FSNBrowser *browser; NSColor *backColor; FSNodeRep *fsnodeRep; } - (id)initInBrowser:(FSNBrowser *)abrowser atIndex:(NSInteger)ind cellPrototype:(FSNBrowserCell *)acell cellsIcon:(BOOL)cicon nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype backgroundColor:(NSColor *)acolor; - (void)setShowType:(FSNInfoType)type; - (void)setExtendedShowType:(NSString *)type; - (void)showContentsOfNode:(FSNode *)anode; - (FSNode *)shownNode; - (void)createRowsInMatrix; - (void)addCellsWithNames:(NSArray *)names; - (void)removeCellsWithNames:(NSArray *)names; - (NSArray *)selectedCells; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)selectCell:(FSNBrowserCell *)cell sendAction:(BOOL)act; - (FSNBrowserCell *)selectCellOfNode:(FSNode *)node sendAction:(BOOL)act; - (FSNBrowserCell *)selectCellWithPath:(NSString *)path sendAction:(BOOL)act; - (FSNBrowserCell *)selectCellWithName:(NSString *)name sendAction:(BOOL)act; - (void)selectCells:(NSArray *)cells sendAction:(BOOL)act; - (void)selectCellsOfNodes:(NSArray *)nodes sendAction:(BOOL)act; - (void)selectCellsWithPaths:(NSArray *)paths sendAction:(BOOL)act; - (void)selectCellsWithNames:(NSArray *)names sendAction:(BOOL)act; - (BOOL)selectFirstCell; - (BOOL)selectCellWithPrefix:(NSString *)prefix; - (void)selectAll; - (void)unselectAllCells; - (void)setEditorForCell:(FSNBrowserCell *)cell; - (void)stopCellEditing; - (void)checkLockedReps; - (void)lockCellsOfNodes:(NSArray *)nodes; - (void)lockCellsWithPaths:(NSArray *)paths; - (void)lockCellsWithNames:(NSArray *)names; - (void)unLockCellsOfNodes:(NSArray *)nodes; - (void)unLockCellsWithPaths:(NSArray *)paths; - (void)unLockCellsWithNames:(NSArray *)names; - (void)lock; - (void)unlock; - (FSNBrowserCell *)cellOfNode:(FSNode *)node; - (FSNBrowserCell *)cellWithPath:(NSString *)path; - (FSNBrowserCell *)cellWithName:(NSString *)name; - (void)adjustMatrix; - (void)doClick:(id)sender; - (void)doDoubleClick:(id)sender; - (NSMatrix *)cmatrix; - (NSInteger)index; - (BOOL)isLoaded; - (BOOL)isSelected; - (void)setBackgroundColor:(NSColor *)acolor; @end @interface FSNBrowserColumn (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; - (NSDragOperation)draggingEntered:(id )sender inMatrixCell:(id)cell; - (void)concludeDragOperation:(id )sender inMatrixCell:(id)cell; @end #endif // FSN_BROWSER_COLUMN_H gworkspace-1.1.0/FSNode/FSNBrowserColumn.m0000644000175000001440000011072414751213523017573 0ustar multixusers/* FSNBrowserColumn.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import "FSNBrowserColumn.h" #import "FSNBrowserCell.h" #import "FSNBrowserMatrix.h" #import "FSNBrowserScroll.h" #import "FSNBrowser.h" #import "FSNFunctions.h" #define ICON_CELL_HEIGHT 28 #define CHECKRECT(rct) \ if (rct.size.width < 0) rct.size.width = 0; \ if (rct.size.height < 0) rct.size.height = 0 #define CHECKSIZE(sz) \ if (sz.width < 0) sz.width = 0; \ if (sz.height < 0) sz.height = 0 static id desktopApp = nil; @implementation FSNBrowserColumn - (void)dealloc { RELEASE (cellPrototype); RELEASE (shownNode); RELEASE (oldNode); RELEASE (extInfoType); RELEASE (backColor); [super dealloc]; } + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { if (desktopApp == nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } } initialized = YES; } } - (id)initInBrowser:(FSNBrowser *)abrowser atIndex:(NSInteger)ind cellPrototype:(FSNBrowserCell *)acell cellsIcon:(BOOL)cicon nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype backgroundColor:(NSColor *)acolor { self = [super init]; if (self) { NSRect rect = NSMakeRect(0, 0, 150, 100); int lineh; browser = abrowser; index = ind; ASSIGN (cellPrototype, acell); cellsIcon = cicon; ASSIGN (backColor, acolor); infoType = type; extInfoType = nil; if (exttype) ASSIGN (extInfoType, exttype); shownNode = nil; oldNode = nil; scroll = nil; matrix = nil; isLoaded = NO; [self setFrame: rect]; fsnodeRep = [FSNodeRep sharedInstance]; lineh = floor([fsnodeRep heightOfFont: [acell font]]); scroll = [[FSNBrowserScroll alloc] initWithFrame: rect inColumn: self acceptDnd: cellsIcon]; [self addSubview: scroll]; RELEASE (scroll); if (cellsIcon) cellsHeight = ICON_CELL_HEIGHT; else cellsHeight = lineh; if (infoType != FSNInfoNameType) cellsHeight += (lineh +1); isDragTarget = NO; matrix = [[FSNBrowserMatrix alloc] initInColumn: self withFrame: [self bounds] mode: NSListModeMatrix prototype: cellPrototype numberOfRows: 0 numberOfColumns: 0 acceptDnd: cellsIcon]; [matrix setIntercellSpacing: NSMakeSize(0, 0)]; [matrix setCellSize: NSMakeSize([scroll contentSize].width, cellsHeight)]; [matrix setAutoscroll: YES]; [matrix setAllowsEmptySelection: YES]; [matrix setBackgroundColor: backColor]; [matrix setCellBackgroundColor: backColor]; [matrix setTarget: self]; [matrix setAction: @selector(doClick:)]; [matrix setDoubleAction: @selector(doDoubleClick:)]; [scroll setDocumentView: matrix]; RELEASE (matrix); } return self; } - (void)setShowType:(FSNInfoType)type { if (infoType != type) { NSArray *cells = [matrix cells]; int lineh = floor([fsnodeRep heightOfFont: [cellPrototype font]]); NSUInteger i; infoType = type; DESTROY (extInfoType); if (cellsIcon) cellsHeight = ICON_CELL_HEIGHT; else cellsHeight = lineh; if (infoType != FSNInfoNameType) cellsHeight += (lineh +1); [self adjustMatrix]; for (i = 0; i < [cells count]; i++) { [[cells objectAtIndex: i] setNodeInfoShowType: infoType]; } } } - (void)setExtendedShowType:(NSString *)type { if ((extInfoType == nil) || ([extInfoType isEqual: type] == NO)) { NSArray *cells = [matrix cells]; int lineh = floor([fsnodeRep heightOfFont: [cellPrototype font]]); NSUInteger i; infoType = FSNInfoExtendedType; ASSIGN (extInfoType, type); if (cellsIcon) cellsHeight = ICON_CELL_HEIGHT; else cellsHeight = lineh; cellsHeight += (lineh +1); [self adjustMatrix]; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; [cell setExtendedShowType: extInfoType]; } } } - (void)showContentsOfNode:(FSNode *)anode { NSArray *savedSelection = nil; NSMutableArray *visibleNodes = nil; float scrollTune = 0; if (oldNode && anode && [oldNode isEqualToNode: anode] && [anode isValid]) { NSArray *vnodes = nil; savedSelection = [self selectedNodes]; if (savedSelection) { RETAIN (savedSelection); } [matrix visibleCellsNodes: &vnodes scrollTuneSpace: &scrollTune]; if (vnodes) { visibleNodes = [NSMutableArray new]; [visibleNodes addObjectsFromArray: vnodes]; } } if ([matrix numberOfColumns] > 0) { [matrix removeColumn: 0]; } DESTROY (shownNode); DESTROY (oldNode); isLoaded = NO; if (anode && [anode isValid]) { id cell = nil; ASSIGN (oldNode, anode); ASSIGN (shownNode, anode); [self createRowsInMatrix]; [self adjustMatrix]; if (savedSelection) [self selectCellsOfNodes: savedSelection sendAction: NO]; if (visibleNodes) { NSUInteger i; NSInteger count = [visibleNodes count]; for (i = 0; i < count; i++) { FSNode *node = [visibleNodes objectAtIndex: i]; if ([self cellOfNode: node] == nil) { [visibleNodes removeObjectAtIndex: i]; count--; i--; } } if ([visibleNodes count]) { cell = [self cellOfNode: [visibleNodes objectAtIndex: 0]]; [matrix scrollToFirstPositionCell: cell withScrollTune: scrollTune]; } else if ([[matrix cells] count]) { [matrix scrollCellToVisibleAtRow: 0 column: 0]; } } else if ([[matrix cells] count]) { [matrix scrollCellToVisibleAtRow: 0 column: 0]; } isLoaded = YES; } RELEASE (savedSelection); RELEASE (visibleNodes); } - (FSNode *)shownNode { return shownNode; } - (void)createRowsInMatrix { NSAutoreleasePool *pool; NSArray *subNodes = [shownNode subNodes]; NSUInteger count = [subNodes count]; SEL compSel = [fsnodeRep compareSelectorForDirectory: [shownNode path]]; NSInteger i; if ([matrix numberOfColumns] > 0) [matrix removeColumn: 0]; if (count == 0) { [matrix setNeedsDisplay: YES]; return; } pool = [[NSAutoreleasePool alloc] init]; [matrix addColumn]; for (i = 0; i < count; ++i) { FSNode *subnode = [subNodes objectAtIndex: i]; id cell; if (i != 0) [matrix insertRow: i]; cell = [matrix cellAtRow: i column: 0]; [cell setLoaded: YES]; [cell setEnabled: YES]; [cell setNode: subnode nodeInfoType: infoType extendedType: extInfoType]; if ([subnode isDirectory]) { if ([subnode isPackage]) [cell setLeaf: YES]; else [cell setLeaf: NO]; } else { [cell setLeaf: YES]; } if (cellsIcon) [cell setIcon]; [cell checkLocked]; } [matrix sortUsingSelector: compSel]; RELEASE (pool); } - (void)addCellsWithNames:(NSArray *)names { NSArray *subNodes = [shownNode subNodes]; if ([subNodes count]) { CREATE_AUTORELEASE_POOL(arp); NSArray *selectedNodes = [self selectedNodes]; SEL compSel = [fsnodeRep compareSelectorForDirectory: [shownNode path]]; NSUInteger i; [matrix setIntercellSpacing: NSMakeSize(0, 0)]; for (i = 0; i < [names count]; i++) { NSString *name = [names objectAtIndex: i]; FSNode *node = [FSNode subnodeWithName: name inSubnodes: subNodes]; if ([node isValid]) { FSNBrowserCell *cell = [self cellOfNode: node]; if (cell == nil) { [matrix addRow]; cell = [matrix cellAtRow: [[matrix cells] count] -1 column: 0]; [cell setLoaded: YES]; [cell setEnabled: YES]; [cell setNode: node nodeInfoType: infoType extendedType: extInfoType]; if ([node isDirectory]) { if ([node isPackage]) [cell setLeaf: YES]; else [cell setLeaf: NO]; } else { [cell setLeaf: YES]; } if (cellsIcon) [cell setIcon]; [cell checkLocked]; } else { [cell setEnabled: YES]; } } } [matrix sortUsingSelector: compSel]; [self adjustMatrix]; if (selectedNodes) [self selectCellsOfNodes: selectedNodes sendAction: NO]; [matrix setNeedsDisplay: YES]; RELEASE (arp); } } - (void)removeCellsWithNames:(NSArray *)names { CREATE_AUTORELEASE_POOL(arp); NSArray *selcells = nil; NSMutableArray *selectedCells = nil; NSArray *vnodes = nil; NSMutableArray *visibleNodes = nil; FSNBrowserColumn *col = nil; id cell = nil; float scrollTune = 0; BOOL updated = NO; NSUInteger i; selcells = [matrix selectedCells]; if (selcells && [selcells count]) { selectedCells = [selcells mutableCopy]; } [matrix visibleCellsNodes: &vnodes scrollTuneSpace: &scrollTune]; if (vnodes && [vnodes count]) visibleNodes = [vnodes mutableCopy]; for (i = 0; i < [names count]; i++) { NSString *cname = [names objectAtIndex: i]; cell = [self cellWithName: cname]; if (cell) { FSNode *node = [cell node]; NSInteger row, col; if (visibleNodes && [visibleNodes containsObject: node]) [visibleNodes removeObject: node]; if (selectedCells && [selectedCells containsObject: cell]) [selectedCells removeObject: cell]; [matrix getRow: &row column: &col ofCell: cell]; [matrix removeRow: row]; updated = YES; } } [matrix sizeToCells]; [matrix setNeedsDisplay: YES]; if (updated) { if ([selectedCells count] > 0) { [self selectCells: selectedCells sendAction: NO]; [matrix setNeedsDisplay: YES]; if (visibleNodes && [visibleNodes count]) { cell = [self cellOfNode: [visibleNodes objectAtIndex: 0]]; [matrix scrollToFirstPositionCell: cell withScrollTune: scrollTune]; } } else { if (index != 0) { if ((index - 1) >= [browser firstVisibleColumn]) { col = [browser columnBeforeColumn: self]; cell = [col cellWithPath: [shownNode parentPath]]; [col selectCell: cell sendAction: YES]; } } else { [browser setLastColumn: index]; } } } else if ([visibleNodes count]) { cell = [self cellOfNode: [visibleNodes objectAtIndex: 0]]; [matrix scrollToFirstPositionCell: cell withScrollTune: scrollTune]; } RELEASE (selectedCells); RELEASE (visibleNodes); RELEASE (arp); } - (NSArray *)selectedCells { NSArray *selected = [matrix selectedCells]; if (selected) { NSMutableArray *cells = [NSMutableArray array]; BOOL missing = NO; NSUInteger i; for (i = 0; i < [selected count]; i++) { FSNBrowserCell *cell = [selected objectAtIndex: i]; if ([[cell node] isValid]) [cells addObject: cell]; else missing = YES; } if (missing) { [matrix deselectAllCells]; if ([cells count]) { [self selectCells: cells sendAction: YES]; } } if ([cells count] > 0) return [cells makeImmutableCopyOnFail: NO]; } return nil; } - (NSArray *)selectedNodes { NSArray *selected = [matrix selectedCells]; if (selected) { NSMutableArray *nodes = [NSMutableArray array]; BOOL missing = NO; NSUInteger i; for (i = 0; i < [selected count]; i++) { FSNode *node = [[selected objectAtIndex: i] node]; if ([node isValid]) [nodes addObject: node]; else missing = YES; } if (missing) { [matrix deselectAllCells]; if ([nodes count]) { [self selectCellsOfNodes: nodes sendAction: YES]; } } if ([nodes count] > 0) { return [nodes makeImmutableCopyOnFail: NO]; } } return nil; } - (NSArray *)selectedPaths { NSArray *selected = [matrix selectedCells]; if (selected) { NSMutableArray *paths = [NSMutableArray array]; BOOL missing = NO; NSUInteger i; for (i = 0; i < [selected count]; i++) { FSNode *node = [[selected objectAtIndex: i] node]; if ([node isValid]) [paths addObject: [node path]]; else missing = YES; } if (missing) { [matrix deselectAllCells]; if ([paths count]) { [self selectCellsWithPaths: paths sendAction: YES]; } } if ([paths count] > 0) return [paths makeImmutableCopyOnFail: NO]; } return nil; } - (void)selectCell:(FSNBrowserCell *)cell sendAction:(BOOL)act { [matrix selectCell: cell]; if (act) { [matrix sendAction]; } } - (FSNBrowserCell *)selectCellOfNode:(FSNode *)node sendAction:(BOOL)act { FSNBrowserCell *cell = [self cellOfNode: node]; if (cell) { [matrix selectCell: cell]; if (act) { [matrix sendAction]; } return cell; } return nil; } - (FSNBrowserCell *)selectCellWithPath:(NSString *)path sendAction:(BOOL)act { FSNBrowserCell *cell = [self cellWithPath: path]; if (cell) { [matrix selectCell: cell]; if (act) { [matrix sendAction]; } return cell; } return nil; } - (FSNBrowserCell *)selectCellWithName:(NSString *)name sendAction:(BOOL)act { FSNBrowserCell *cell = [self cellWithName: name]; if (cell) { [matrix selectCell: cell]; if (act) { [matrix sendAction]; } return cell; } return nil; } - (void)selectCells:(NSArray *)cells sendAction:(BOOL)act { if (cells && [cells count]) { NSUInteger i; [matrix deselectAllCells]; for (i = 0; i < [cells count]; i++) { [matrix selectCell: [cells objectAtIndex: i]]; } if (act) [matrix sendAction]; } } - (void)selectCellsOfNodes:(NSArray *)nodes sendAction:(BOOL)act { if (nodes && [nodes count]) { NSArray *cells = [matrix cells]; NSUInteger i; [matrix deselectAllCells]; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; if ([nodes containsObject: [cell node]]) [matrix selectCell: cell]; } if ([cells count] && act) [matrix sendAction]; } } - (void)selectCellsWithPaths:(NSArray *)paths sendAction:(BOOL)act { if (paths && [paths count]) { NSArray *cells = [matrix cells]; NSUInteger i; [matrix deselectAllCells]; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; if ([paths containsObject: [[cell node] path]]) { [matrix selectCell: cell]; } } if (act) [matrix sendAction]; } } - (void)selectCellsWithNames:(NSArray *)names sendAction:(BOOL)act { if (names && [names count]) { NSArray *cells = [matrix cells]; NSUInteger i; [matrix deselectAllCells]; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; if ([names containsObject: [[cell node] name]]) [matrix selectCell: cell]; } if (act) [matrix sendAction]; } } - (BOOL)selectFirstCell { if ([[matrix cells] count]) { [matrix selectCellAtRow: 0 column: 0]; [matrix sendAction]; return YES; } return NO; } - (BOOL)selectCellWithPrefix:(NSString *)prefix { if ([[matrix cells] count]) { NSInteger n = [matrix numberOfRows]; NSInteger selRow = [matrix selectedRow]; NSString *cellStr = nil; NSInteger i = 0; // Nothing selected start from first if (selRow == -1) selRow = 0; // look at or after current selection for (i = selRow; i < n; i++) { cellStr = [[matrix cellAtRow: i column: 0] stringValue]; if (([cellStr length] > 0) && ([cellStr hasPrefix: prefix])) { [matrix deselectAllCells]; [matrix selectCellAtRow: i column: 0]; [matrix scrollCellToVisibleAtRow: i column: 0]; [matrix sendAction]; return YES; } } // look before current selection for (i = 0; i < selRow; i++) { cellStr = [[matrix cellAtRow: i column: 0] stringValue]; if (([cellStr length] > 0) && ([cellStr hasPrefix: prefix])) { [matrix deselectAllCells]; [matrix selectCellAtRow: i column: 0]; [matrix scrollCellToVisibleAtRow: i column: 0]; [matrix sendAction]; return YES; } } } return NO; } - (void)selectAll { NSArray *cells = [matrix cells]; if ([cells count]) { NSUInteger count = [cells count]; FSNBrowserCell *cell; NSInteger selStart = 0; NSInteger selEnd = 0; NSInteger i; [matrix deselectAllCells]; while (selStart < count) { cell = [cells objectAtIndex: selStart]; if ([[cell node] isReserved] == NO) break; selStart++; } i = selStart; while (i < count) { cell = [cells objectAtIndex: i]; if ([[cell node] isReserved] == NO) { selEnd = i; } else { [matrix setSelectionFrom: selStart to: selEnd anchor: selStart highlight: YES]; selStart = i + 1; while (selStart < count) { cell = [cells objectAtIndex: selStart]; if ([[cell node] isReserved] == NO) break; selStart++; i++; } } i++; } if (selStart < count) { [matrix setSelectionFrom: selStart to: selEnd anchor: selStart highlight: YES]; } [matrix sendAction]; } else { FSNBrowserColumn *col = [browser columnBeforeColumn: self]; if (col) [col selectAll]; } } - (void)unselectAllCells { [matrix deselectAllCells]; } - (void)setEditorForCell:(FSNBrowserCell *)cell { [browser setEditorForCell: cell inColumn: self]; } - (void)stopCellEditing { [browser stopCellEditing]; } - (void)checkLockedReps { NSArray *cells = [matrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { [[cells objectAtIndex: i] checkLocked]; } [matrix setNeedsDisplay: YES]; } - (void)lockCellsOfNodes:(NSArray *)nodes { NSUInteger i; BOOL found = NO; for (i = 0; i < [nodes count]; i++) { FSNBrowserCell *cell = [self cellOfNode: [nodes objectAtIndex: i]]; if (cell && [cell isEnabled]) { [cell setEnabled: NO]; found = YES; } } [matrix setNeedsDisplay: found]; } - (void)lockCellsWithPaths:(NSArray *)paths { NSUInteger i; BOOL found = NO; for (i = 0; i < [paths count]; i++) { FSNBrowserCell *cell = [self cellWithPath: [paths objectAtIndex: i]]; if (cell && [cell isEnabled]) { [cell setEnabled: NO]; found = YES; } } [matrix setNeedsDisplay: found]; } - (void)lockCellsWithNames:(NSArray *)names { NSUInteger i; BOOL found = NO; for (i = 0; i < [names count]; i++) { FSNBrowserCell *cell = [self cellWithName: [names objectAtIndex: i]]; if (cell && [cell isEnabled]) { [cell setEnabled: NO]; found = YES; } } [matrix setNeedsDisplay: found]; } - (void)unLockCellsOfNodes:(NSArray *)nodes { NSUInteger i; BOOL found = NO; for (i = 0; i < [nodes count]; i++) { FSNBrowserCell *cell = [self cellOfNode: [nodes objectAtIndex: i]]; if (cell && ([cell isEnabled] == NO)) { [cell setEnabled: YES]; found = YES; } } [matrix setNeedsDisplay: found]; } - (void)unLockCellsWithPaths:(NSArray *)paths { NSUInteger i; BOOL found = NO; for (i = 0; i < [paths count]; i++) { FSNBrowserCell *cell = [self cellWithPath: [paths objectAtIndex: i]]; if (cell && ([cell isEnabled] == NO)) { [cell setEnabled: YES]; found = YES; } } [matrix setNeedsDisplay: found]; } - (void)unLockCellsWithNames:(NSArray *)names { NSUInteger i; BOOL found = NO; for (i = 0; i < [names count]; i++) { FSNBrowserCell *cell = [self cellWithName: [names objectAtIndex: i]]; if (cell && ([cell isEnabled] == NO)) { [cell setEnabled: YES]; found = YES; } } [matrix setNeedsDisplay: found]; } - (void)lock { NSArray *cells = [matrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { id cell = [cells objectAtIndex: i]; if ([cell isEnabled]) [cell setEnabled: NO]; } [matrix setNeedsDisplay: YES]; } - (void)unlock { NSArray *cells = [matrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { id cell = [cells objectAtIndex: i]; if ([cell isEnabled] == NO) [cell setEnabled: YES]; } [matrix setNeedsDisplay: YES]; } - (FSNBrowserCell *)cellOfNode:(FSNode *)node { NSArray *cells = [matrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; if ([[cell node] isEqualToNode: node]) return cell; } return nil; } - (FSNBrowserCell *)cellWithPath:(NSString *)path { NSArray *cells = [matrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; if ([[[cell node] path] isEqual: path]) return cell; } return nil; } - (FSNBrowserCell *)cellWithName:(NSString *)name { NSArray *cells = [matrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *cell = [cells objectAtIndex: i]; if ([[[cell node] name] isEqual: name]) return cell; } return nil; } - (void)adjustMatrix { if (scroll == nil) { NSLog(@"FSNBrowserColumn adjustMatrix: scroll is nil"); return; } [matrix setCellSize: NSMakeSize([scroll contentSize].width, cellsHeight)]; [matrix sizeToCells]; } - (void)doClick:(id)sender { [browser clickInMatrixOfColumn: self]; } - (void)doDoubleClick:(id)sender { [browser doubleClickInMatrixOfColumn: self]; } - (NSMatrix *)cmatrix { return matrix; } - (NSInteger)index { return index; } - (BOOL)isLoaded { return isLoaded; } - (BOOL)isSelected { if (isLoaded && matrix) { return ([matrix selectedCell] ? YES : NO); } return NO; } - (void)setBackgroundColor:(NSColor *)acolor { ASSIGN (backColor, acolor); [matrix setBackgroundColor: backColor]; [matrix setCellBackgroundColor: backColor]; } - (void)mouseUp:(NSEvent *)theEvent { NSPoint p = [theEvent locationInWindow]; NSInteger row, col; p = [matrix convertPoint: p fromView: nil]; if ([matrix getRow: &row column: &col forPoint: p] == NO) { [browser clickInColumn: self]; } } - (void)setFrame:(NSRect)frameRect { NSRect r = NSMakeRect(1, 0, frameRect.size.width - 1, frameRect.size.height); if (index == [browser firstVisibleColumn]) { r.origin.x = 0; r.size.width += 1; } CHECKRECT (frameRect); [super setFrame: frameRect]; CHECKRECT (r); if (scroll != nil) { [scroll setFrame: r]; [self adjustMatrix]; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (index != [browser firstVisibleColumn]) { [[NSColor blackColor] set]; [NSBezierPath strokeLineFromPoint: NSMakePoint(0, 0) toPoint: NSMakePoint(0, rect.size.height)]; } } @end @implementation FSNBrowserColumn (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *basePath; NSString *nodePath; NSString *prePath; NSUInteger count; isDragTarget = NO; if ((shownNode == nil) || ([shownNode isValid] == NO)) { return NSDragOperationNone; } if ([shownNode isDirectory]) { if ([shownNode isSubnodeOfPath: [desktopApp trashPath]]) { return NSDragOperationNone; } } pb = [sender draggingPasteboard]; if (pb && [[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) return NSDragOperationNone; if ([shownNode isWritable] == NO) { return NSDragOperationNone; } nodePath = [shownNode path]; basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (1) { if ([sourcePaths containsObject: prePath]) { return NSDragOperationNone; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } if ([shownNode isDirectory] && [shownNode isParentOfPath: basePath]) { NSArray *subNodes = [shownNode subNodes]; NSUInteger i; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { NSUInteger j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } isDragTarget = YES; forceCopy = NO; sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: basePath]) { return NSDragOperationMove; } forceCopy = YES; return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; if (isDragTarget == NO) { return NSDragOperationNone; } if (sourceDragMask & NSDragOperationMove) { return forceCopy ? NSDragOperationCopy : NSDragOperationMove; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *operation; NSString *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSUInteger i; isDragTarget = NO; operation = nil; sourceDragMask = [sender draggingSourceOperationMask]; pb = [sender draggingPasteboard]; if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [shownNode path]]; return; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [shownNode path]]; return; } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([sourcePaths count] == 0) return; source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } else if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask & NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } } files = [NSMutableArray array]; for (i = 0; i < [sourcePaths count]; i++) [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; opDict = [NSMutableDictionary dictionary]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [shownNode path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } - (NSDragOperation)draggingEntered:(id )sender inMatrixCell:(id)cell { NSPasteboard *pb = [sender draggingPasteboard]; NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; FSNode *node = [cell node]; NSString *nodePath = [node path]; NSArray *sourcePaths; NSString *fromPath; NSString *prePath; NSUInteger i, count; if (([cell isEnabled] == NO) || ([node isDirectory] == NO) || ([node isPackage] && ([node isApplication] == NO)) || (([node isWritable] == NO) && ([node isApplication] == NO))) { return NSDragOperationNone; } if ([node isDirectory]) { if ([node isSubnodeOfPath: [desktopApp trashPath]]) { return NSDragOperationNone; } } sourcePaths = nil; if ([[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { if ([node isApplication] == NO) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { if ([node isApplication] == NO) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } } if (sourcePaths == nil) { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) { return NSDragOperationNone; } fromPath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([nodePath isEqual: fromPath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (1) { CREATE_AUTORELEASE_POOL(arp); if ([sourcePaths containsObject: prePath]) { RELEASE (arp); return NSDragOperationNone; } if ([prePath isEqual: path_separator()]) { RELEASE (arp); break; } prePath = [prePath stringByDeletingLastPathComponent]; RELEASE (arp); } if ([node isApplication]) { for (i = 0; i < count; i++) { CREATE_AUTORELEASE_POOL(arp); FSNode *nd = [FSNode nodeWithPath: [sourcePaths objectAtIndex: i]]; if (([nd isPlain] == NO) && ([nd isPackage] == NO)) { RELEASE (arp); return NSDragOperationNone; } RELEASE (arp); } } if ([node isDirectory] && [node isParentOfPath: fromPath]) { NSArray *subNodes = [node subNodes]; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { NSUInteger j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: fromPath] || [node isApplication]) { return NSDragOperationMove; } return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationCopy) { return ([node isApplication] ? NSDragOperationMove : NSDragOperationCopy); } if (sourceDragMask & NSDragOperationLink) { return ([node isApplication] ? NSDragOperationMove : NSDragOperationLink); } return NSDragOperationNone; } - (void)concludeDragOperation:(id )sender inMatrixCell:(id)cell { FSNode *node = [cell node]; NSPasteboard *pb = [sender draggingPasteboard]; NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSArray *sourcePaths; NSString *operation; NSString *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSUInteger i; operation = nil; if (([cell isEnabled] == NO) || ([cell isLeaf] && ([node isApplication] == NO))) { return; } if ([node isApplication] == NO) { if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [[cell node] path]]; return; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [[cell node] path]]; return; } } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([node isApplication] == NO) { source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } else if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask & NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } } files = [NSMutableArray arrayWithCapacity: 1]; for(i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } opDict = [NSMutableDictionary dictionaryWithCapacity: 4]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [[cell node] path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } else { for (i = 0; i < [sourcePaths count]; i++) { NSString *path = [sourcePaths objectAtIndex: i]; NS_DURING { [[NSWorkspace sharedWorkspace] openFile: path withApplication: [node name]]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } @end gworkspace-1.1.0/FSNode/FSNBrowserMatrix.h0000644000175000001440000000540414751213523017573 0ustar multixusers/* FSNBrowserMatrix.h * * Copyright (C) 2004-2022 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_BROWSER_MATRIX_H #define FSN_BROWSER_MATRIX_H #include #include #include "FSNodeRep.h" @class FSNBrowserColumn; @class FSNBrowserCell; @interface FSNBrowserMatrix : NSMatrix { FSNBrowserColumn *column; NSUInteger mouseFlags; NSTimeInterval editstamp; NSInteger editIndex; BOOL acceptDnd; FSNBrowserCell *dndTarget; unsigned int dragOperation; } - (id)initInColumn:(FSNBrowserColumn *)col withFrame:(NSRect)frameRect mode:(NSMatrixMode)aMode prototype:(FSNBrowserCell *)aCell numberOfRows:(NSInteger)numRows numberOfColumns:(NSInteger)numColumns acceptDnd:(BOOL)dnd; - (void)visibleCellsNodes:(NSArray **)nodes scrollTuneSpace:(float *)tspace; - (void)scrollToFirstPositionCell:(id)aCell withScrollTune:(float)vtune; - (void)selectIconOfCell:(id)aCell; - (void)unSelectIconsOfCellsDifferentFrom:(id)aCell; - (NSUInteger)mouseFlags; - (void)setMouseFlags:(NSUInteger)flags; @end @interface FSNBrowserMatrix (DraggingSource) - (void)startExternalDragOnEvent:(NSEvent *)event; - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; @end @interface FSNBrowserMatrix (DraggingDestination) - (NSDragOperation)checkReturnValueForCell:(FSNBrowserCell *)acell withDraggingInfo:(id )sender; - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // FSN_BROWSER_MATRIX_H gworkspace-1.1.0/FSNode/FSNBrowserMatrix.m0000644000175000001440000002562114751213523017603 0ustar multixusers/* FSNBrowserMatrix.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNBrowserMatrix.h" #import "FSNBrowserCell.h" #import "FSNBrowserColumn.h" #import "FSNIcon.h" #import "FSNFunctions.h" #define DOUBLE_CLICK_LIMIT 300 #define EDIT_CLICK_LIMIT 1000 @implementation FSNBrowserMatrix - (void)dealloc { [super dealloc]; } - (id)initInColumn:(FSNBrowserColumn *)col withFrame:(NSRect)frameRect mode:(NSMatrixMode)aMode prototype:(FSNBrowserCell *)aCell numberOfRows:(NSInteger)numRows numberOfColumns:(NSInteger)numColumns acceptDnd:(BOOL)dnd { self = [super initWithFrame: frameRect mode: aMode prototype: aCell numberOfRows: numRows numberOfColumns: numColumns]; if (self) { column = col; mouseFlags = 0; dndTarget = nil; acceptDnd = dnd; if (acceptDnd) { [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]]; } editstamp = 0.0; editIndex = -1; } return self; } - (void)visibleCellsNodes:(NSArray **)nodes scrollTuneSpace:(float *)tspace { NSArray *cells = [self cells]; if (cells && [cells count]) { NSRect vr = [self visibleRect]; float ylim = vr.origin.y + vr.size.height - [self cellSize].height; NSMutableArray *vnodes = [NSMutableArray array]; BOOL found = NO; NSUInteger i; for (i = 0; i < [cells count]; i++) { NSRect cr = [self cellFrameAtRow: i column: 0]; if ((cr.origin.y >= vr.origin.y) && (cr.origin.y <= ylim)) { if (found == NO) { *tspace = cr.origin.y - vr.origin.y; found = YES; } [vnodes addObject: [[cells objectAtIndex: i] node]]; } } if ([vnodes count]) { *nodes = vnodes; } } } - (void)scrollToFirstPositionCell:(id)aCell withScrollTune:(float)vtune { NSRect vr, cr; NSInteger row, col; vr = [self visibleRect]; [self getRow: &row column: &col ofCell: aCell]; cr = [self cellFrameAtRow: row column: col]; cr.size.height = vr.size.height - vtune; [self scrollRectToVisible: cr]; } - (void)selectIconOfCell:(id)aCell { FSNBrowserCell *cell = (FSNBrowserCell *)aCell; if ([cell selectIcon]) { NSRect cellFrame; NSInteger row, col; [self getRow: &row column: &col ofCell: aCell]; cellFrame = [self cellFrameAtRow: row column: col]; [self setNeedsDisplayInRect: cellFrame]; } [self unSelectIconsOfCellsDifferentFrom: cell]; } - (void)unSelectIconsOfCellsDifferentFrom:(id)aCell { NSArray *cells = [self cells]; NSUInteger i = 0; for (i = 0; i < [cells count]; i++) { FSNBrowserCell *c = [cells objectAtIndex: i]; if (c != aCell) { if ([c unselectIcon]) { NSRect cellFrame; NSInteger row, col; [self getRow: &row column: &col ofCell: c]; cellFrame = [self cellFrameAtRow: row column: col]; [self setNeedsDisplayInRect: cellFrame]; } } } } - (NSUInteger)mouseFlags { return mouseFlags; } - (void)setMouseFlags:(NSUInteger)flags { mouseFlags = flags; } - (void)mouseDown:(NSEvent*)theEvent { int clickCount; NSPoint lastLocation; NSInteger row, col; mouseFlags = [theEvent modifierFlags]; if (acceptDnd == NO) { [super mouseDown: theEvent]; return; } if (([self numberOfRows] == 0) || ([self numberOfColumns] == 0)) { [super mouseDown: theEvent]; return; } [column stopCellEditing]; clickCount = [theEvent clickCount]; if (clickCount >= 2) { editIndex = -1; [self sendDoubleAction]; return; } lastLocation = [theEvent locationInWindow]; lastLocation = [self convertPoint: lastLocation fromView: nil]; if ([self getRow: &row column: &col forPoint: lastLocation]) { FSNBrowserCell *cell = [[self cells] objectAtIndex: row]; NSRect rect = [self cellFrameAtRow: row column: col]; if ([cell isEnabled]) { int sz = [cell iconSize]; NSSize size = NSMakeSize(sz, sz); rect.size.width = size.width; rect.size.height = size.height; if (NSPointInRect(lastLocation, rect)) { NSEvent *nextEvent; BOOL startdnd = NO; int dragdelay = 0; editIndex = -1; if (!([theEvent modifierFlags] & NSShiftKeyMask)) { [self deselectAllCells]; if (editIndex != row) { editIndex = row; } } [self selectCellAtRow: row column: col]; [self sendAction]; while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { [[self window] postEvent: nextEvent atStart: NO]; break; } else if ([nextEvent type] == NSLeftMouseDragged) { if (dragdelay < 5) { dragdelay++; } else { editIndex = -1; startdnd = YES; break; } } } if (startdnd) [self startExternalDragOnEvent: theEvent]; } else { [super mouseDown: theEvent]; if (editIndex != row) { editIndex = row; } else { NSTimeInterval interval = ([theEvent timestamp] - editstamp); if ((interval > DOUBLE_CLICK_LIMIT) && (interval < EDIT_CLICK_LIMIT)) { [column setEditorForCell: cell]; } } } editstamp = [theEvent timestamp]; } } } - (BOOL)acceptsFirstResponder { return YES; } @end @implementation FSNBrowserMatrix (DraggingSource) - (void)startExternalDragOnEvent:(NSEvent *)event { NSArray *selectedCells = [self selectedCells]; unsigned count = [selectedCells count]; if (count) { NSPoint dragPoint = [event locationInWindow]; NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; int iconSize = [[self prototype] iconSize]; NSImage *dragIcon; [self declareAndSetShapeOnPasteboard: pb]; if (count > 1) { dragIcon = [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: iconSize]; } else { FSNBrowserCell *cell = [selectedCells objectAtIndex: 0]; FSNode *node = [cell node]; if (node && [node isValid]) { dragIcon = [[FSNodeRep sharedInstance] iconOfSize: iconSize forNode: node]; } else { return; } } dragPoint = [self convertPoint: dragPoint fromView: nil]; dragPoint.x -= (iconSize / 2); dragPoint.y += (iconSize / 2); [self dragImage: dragIcon at: dragPoint offset: NSZeroSize event: event pasteboard: pb source: self slideBack: YES]; } } - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag { } - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb { NSArray *selectedCells = [self selectedCells]; NSMutableArray *selection = [NSMutableArray array]; NSArray *dndtypes; int i; for (i = 0; i < [selectedCells count]; i++) { FSNBrowserCell *cell = [selectedCells objectAtIndex: i]; FSNode *node = [cell node]; if (node && [node isValid]) { [selection addObject: [node path]]; } } if ([selection count]) { dndtypes = [NSArray arrayWithObject: NSFilenamesPboardType]; [pb declareTypes: dndtypes owner: nil]; if ([pb setPropertyList: selection forType: NSFilenamesPboardType] == NO) { return; } } } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } @end @implementation FSNBrowserMatrix (DraggingDestination) - (NSDragOperation)checkReturnValueForCell:(FSNBrowserCell *)acell withDraggingInfo:(id )sender { if (dndTarget != acell) { dndTarget = acell; dragOperation = [column draggingEntered: sender inMatrixCell: dndTarget]; if (dragOperation != NSDragOperationNone) { [self selectIconOfCell: dndTarget]; } else { [self unSelectIconsOfCellsDifferentFrom: nil]; } } return dragOperation; } - (NSDragOperation)draggingEntered:(id )sender { NSPoint location; NSInteger row, col; location = [[self window] mouseLocationOutsideOfEventStream]; location = [self convertPoint: location fromView: nil]; dndTarget = nil; if ([self getRow: &row column: &col forPoint: location]) { dndTarget = [[self cells] objectAtIndex: row]; dragOperation = [column draggingEntered: sender inMatrixCell: dndTarget]; if (dragOperation != NSDragOperationNone) { [self selectIconOfCell: dndTarget]; } else { [self unSelectIconsOfCellsDifferentFrom: nil]; } if (dragOperation == NSDragOperationNone) { dndTarget = nil; return [column draggingEntered: sender]; } return dragOperation; } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSPoint location; NSInteger row, col; location = [[self window] mouseLocationOutsideOfEventStream]; location = [self convertPoint: location fromView: nil]; if ([self getRow: &row column: &col forPoint: location]) { FSNBrowserCell *cell = [[self cells] objectAtIndex: row]; [self checkReturnValueForCell: cell withDraggingInfo: sender]; if (dragOperation == NSDragOperationNone) { dndTarget = nil; return [column draggingUpdated: sender]; } return dragOperation; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { [self unSelectIconsOfCellsDifferentFrom: nil]; dndTarget = nil; } - (BOOL)prepareForDragOperation:(id )sender { return YES; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { if (dndTarget) { [column concludeDragOperation: sender inMatrixCell: dndTarget]; [self unSelectIconsOfCellsDifferentFrom: nil]; } else { [column concludeDragOperation: sender]; } } @end gworkspace-1.1.0/FSNode/FSNBrowserScroll.h0000644000175000001440000000327314751213523017567 0ustar multixusers/* FSNBrowserScroll.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_BROWSER_SCROLL_H #define FSN_BROWSER_SCROLL_H #include #include @class FSNBrowserColumn; @interface FSNBrowserScroll : NSScrollView { FSNBrowserColumn *column; } - (id)initWithFrame:(NSRect)frameRect inColumn:(FSNBrowserColumn *)col acceptDnd:(BOOL)dnd; @end @interface FSNBrowserScroll (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // FSN_BROWSER_SCROLL_H gworkspace-1.1.0/FSNode/FSNBrowserScroll.m0000644000175000001440000000526014751213523017572 0ustar multixusers/* FSNBrowserScroll.h * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNBrowserScroll.h" #import "FSNBrowserColumn.h" @implementation FSNBrowserScroll - (void)dealloc { [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inColumn:(FSNBrowserColumn *)col acceptDnd:(BOOL)dnd { self = [super initWithFrame: frameRect]; if (self) { [self setBorderType: NSNoBorder]; [self setHasHorizontalScroller: NO]; [self setHasVerticalScroller: YES]; column = col; if (dnd) { [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]]; } } return self; } - (void)reflectScrolledClipView:(NSClipView *)aClipView { if (aClipView == [self contentView]) { [column stopCellEditing]; [super reflectScrolledClipView: aClipView]; } } - (BOOL)acceptsFirstResponder { return YES; } @end @implementation FSNBrowserScroll (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { return [column draggingEntered: sender]; } - (NSDragOperation)draggingUpdated:(id )sender { return [column draggingUpdated: sender]; } - (void)draggingExited:(id )sender { [column draggingExited: sender]; } - (BOOL)prepareForDragOperation:(id )sender { return [column prepareForDragOperation: sender]; } - (BOOL)performDragOperation:(id )sender { return [column performDragOperation: sender]; } - (void)concludeDragOperation:(id )sender { [column concludeDragOperation: sender]; } @end gworkspace-1.1.0/FSNode/FSNFunctions.h0000644000175000001440000000314114751213523016727 0ustar multixusers/* FSNFunctions.h * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_FUNCTIONS_H #define FSN_FUNCTIONS_H NSString *path_separator(void); BOOL isSubpathOfPath(NSString *p1, NSString *p2); NSString *subtractFirstPartFromPath(NSString *path, NSString *firstpart); NSComparisonResult compareWithExtType(id r1, id r2, void *context); NSString *sizeDescription(unsigned long long size); NSArray *makePathsSelection(NSArray *selnodes); double myrintf(double a); void showAlertNoPermission(Class c, NSString *name); void showAlertInRecycler(Class c); void showAlertInvalidName(Class c); NSInteger showAlertExtensionChange(Class c, NSString *extension); void showAlertNameInUse(Class c, NSString *newname); #endif // FSN_FUNCTIONS_H gworkspace-1.1.0/FSNode/FSNFunctions.m0000644000175000001440000001464014751213523016742 0ustar multixusers/* FSNFunctions.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNFunctions.h" #import "FSNodeRep.h" NSString *path_separator(void) { static NSString *separator = nil; if (separator == nil) { #if defined(__MINGW32__) separator = @"\\"; #else separator = @"/"; #endif } return separator; } /* * p1 is parent of p2 */ BOOL isSubpathOfPath(NSString *p1, NSString *p2) { int l1 = [p1 length]; int l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqualToString: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqualToString: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } NSString *subtractFirstPartFromPath(NSString *path, NSString *firstpart) { if ([path isEqual: firstpart] == NO) { return [path substringFromIndex: [path rangeOfString: firstpart].length +1]; } return path_separator(); } NSComparisonResult compareWithExtType(id r1, id r2, void *context) { FSNInfoType t1 = [(id )r1 nodeInfoShowType]; FSNInfoType t2 = [(id )r2 nodeInfoShowType]; if (t1 == FSNInfoExtendedType) { if (t2 != FSNInfoExtendedType) { return NSOrderedDescending; } } else { if (t2 == FSNInfoExtendedType) { return NSOrderedAscending; } } return NSOrderedSame; } #define ONE_KB 1024LLU #define ONE_MB (ONE_KB * ONE_KB) #define ONE_GB (ONE_KB * ONE_MB) #define ONE_TB (ONE_KB * ONE_GB) NSString *sizeDescription(unsigned long long size) { NSString *sizeStr; if (size == 1) sizeStr = @"1 byte"; else if (size == 0) sizeStr = @"0 bytes"; else if (size < (ONE_KB)) sizeStr = [NSString stringWithFormat:@" %ld bytes", (long)size]; else if (size < (ONE_MB)) sizeStr = [NSString stringWithFormat:@" %3.2fKB", ((double)size / (double)(ONE_KB))]; else if (size < (ONE_GB)) sizeStr = [NSString stringWithFormat:@" %3.2fMB", ((double)size / (double)(ONE_MB))]; else if (size < (ONE_TB)) sizeStr = [NSString stringWithFormat:@" %3.2fGB", ((double)size / (double)(ONE_GB))]; else sizeStr = [NSString stringWithFormat:@" %3.2fTB", ((double)size / (double)(ONE_TB))]; return sizeStr; } NSArray *makePathsSelection(NSArray *selnodes) { NSMutableArray *selpaths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [selnodes count]; i++) { [selpaths addObject: [[selnodes objectAtIndex: i] path]]; } return selpaths; } double myrintf(double a) { return (floor(a + 0.5)); } /* --- Text Field Editing Error Messages */ void showAlertNoPermission(Class c, NSString *name) { NSRunAlertPanel( NSLocalizedStringFromTableInBundle(@"Error", nil, [NSBundle bundleForClass:c], @""), [NSString stringWithFormat: @"%@ \"%@\"!\n", NSLocalizedStringFromTableInBundle(@"You do not have write permission for", nil, [NSBundle bundleForClass:c], @""), name], NSLocalizedStringFromTableInBundle(@"Continue", nil, [NSBundle bundleForClass:c], @""), nil, nil); } void showAlertInRecycler(Class c) { NSRunAlertPanel(NSLocalizedStringFromTableInBundle(@"Error", nil, [NSBundle bundleForClass:c], @""), NSLocalizedStringFromTableInBundle(@"You can't rename an object that is in the Recycler", nil, [NSBundle bundleForClass:c], @""), NSLocalizedStringFromTableInBundle(@"Continue", nil, [NSBundle bundleForClass:c], @"") , nil, nil); } void showAlertInvalidName(Class c) { NSLog(@"Class %@ Bundle %@", c, [NSBundle bundleForClass:c]); NSRunAlertPanel(NSLocalizedStringFromTableInBundle(@"Error", nil, [NSBundle bundleForClass:c], @""), NSLocalizedStringFromTableInBundle(@"Invalid name", nil, [NSBundle bundleForClass:c], @""), NSLocalizedStringFromTableInBundle(@"Continue", nil, [NSBundle bundleForClass:c], @""), nil, nil); } NSInteger showAlertExtensionChange(Class c, NSString *extension) { NSString *msg; NSInteger r; msg = NSLocalizedStringFromTableInBundle(@"Are you sure you want to add the extension", nil, [NSBundle bundleForClass:c], @""); msg = [msg stringByAppendingFormat: @"\"%@\" ", extension]; msg = [msg stringByAppendingString: NSLocalizedStringFromTableInBundle(@"to the end of the name?", nil, [NSBundle bundleForClass:c], @"")]; msg = [msg stringByAppendingString: NSLocalizedStringFromTableInBundle(@"\nif you make this change, your folder may appear as a single file.", nil, [NSBundle bundleForClass:c], @"")]; r = NSRunAlertPanel(@"", msg, NSLocalizedStringFromTableInBundle(@"Cancel", nil, [NSBundle bundleForClass:c], @""), NSLocalizedStringFromTableInBundle(@"OK", nil, [NSBundle bundleForClass:c], @""), nil); return r; } void showAlertNameInUse(Class c, NSString *newname) { NSRunAlertPanel( NSLocalizedStringFromTableInBundle(@"Error", nil, [NSBundle bundleForClass:c], @""), [NSString stringWithFormat: @"%@\"%@\" %@ ", NSLocalizedStringFromTableInBundle(@"The name ", nil, [NSBundle bundleForClass:c], @""), newname, NSLocalizedStringFromTableInBundle(@" is already in use!", nil, [NSBundle bundleForClass:c], @"")], NSLocalizedStringFromTableInBundle(@"Continue", nil, [NSBundle bundleForClass:c], @""), nil, nil); } gworkspace-1.1.0/FSNode/FSNIcon.h0000644000175000001440000000702414751213523015653 0ustar multixusers/* FSNIcon.h * * Copyright (C) 2004-2022 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_ICON_H #define FSN_ICON_H #import #import #import "FSNodeRep.h" @class NSImage; @class NSFont; @class NSBezierPath; @class NSTextField; @class FSNode; @class FSNTextCell; @interface FSNIcon : NSView { FSNode *node; NSString *hostname; NSArray *selection; NSString *selectionTitle; NSString *extInfoType; NSImage *icon; NSImage *selectedicon; NSImage *drawicon; int iconSize; NSRect icnBounds; NSPoint icnPoint; NSCellImagePosition icnPosition; NSRect brImgBounds; NSBezierPath *highlightPath; NSRect hlightRect; NSTrackingRectTag trectTag; FSNTextCell *label; NSRect labelRect; BOOL drawLabelBackground; NSColor *labelFrameColor; FSNTextCell *infolabel; NSRect infoRect; FSNInfoType showType; NSUInteger gridIndex; BOOL isSelected; BOOL selectable; BOOL isOpened; BOOL nameEdited; BOOL isLeaf; BOOL isLocked; NSTimeInterval editstamp; BOOL dndSource; BOOL acceptDnd; BOOL slideBack; int dragdelay; BOOL isDragTarget; BOOL forceCopy; BOOL onApplication; BOOL onSelf; NSView *container; FSNodeRep *fsnodeRep; } + (NSImage *)branchImage; - (id)initForNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype iconSize:(int)isize iconPosition:(NSUInteger)ipos labelFont:(NSFont *)lfont textColor:(NSColor *)tcolor gridIndex:(NSUInteger)gindex dndSource:(BOOL)dndsrc acceptDnd:(BOOL)dndaccept slideBack:(BOOL)slback; - (void)setSelectable:(BOOL)value; - (NSRect)iconBounds; - (void)tile; @end @interface FSNIcon (DraggingSource) - (void)startExternalDragOnEvent:(NSEvent *)event withMouseOffset:(NSSize)offset; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag; @end @interface FSNIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end @interface FSNIconNameEditor : NSTextField { FSNode *node; NSView *container; } - (void)setNode:(FSNode *)anode stringValue:(NSString *)str; - (FSNode *)node; @end #endif // FSN_ICON_H gworkspace-1.1.0/FSNode/FSNIcon.m0000644000175000001440000012310414751213523015656 0ustar multixusers/* FSNIcon.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNIcon.h" #import "FSNTextCell.h" #import "FSNode.h" #import "FSNFunctions.h" #define BRANCH_SIZE 7 #define ARROW_ORIGIN_X (BRANCH_SIZE + 4) #define DOUBLE_CLICK_LIMIT 300 #define EDIT_CLICK_LIMIT 1000 /* we redefine the dockstyle to read the preferences without including Dock.h" */ typedef enum DockStyle { DockStyleClassic = 0, DockStyleModern = 1 } DockStyle; static id desktopApp = nil; static NSImage *branchImage; @implementation FSNIcon - (void)dealloc { if (trectTag != -1) { [self removeTrackingRect: trectTag]; } RELEASE (node); RELEASE (hostname); RELEASE (selection); RELEASE (selectionTitle); RELEASE (extInfoType); RELEASE (icon); RELEASE (selectedicon); RELEASE (highlightPath); RELEASE (label); RELEASE (infolabel); RELEASE (labelFrameColor); [super dealloc]; } + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { if (desktopApp == nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } } branchImage = [NSBrowserCell branchImage]; initialized = YES; } } + (NSImage *)branchImage { return branchImage; } /* we try to find a good host name. * We try to find something different from localhost, if possibile without dots, * else the first part of the qualified hostname gets taken */ + (NSString *)getBestHostName { NSHost *host = [NSHost currentHost]; NSString *hname; NSRange range; NSArray *hnames; hnames = [host names]; if ([hnames count] > 0) { hname = [hnames objectAtIndex:0]; if ([hnames count] > 1) { NSUInteger i; for (i = 0; i < [hnames count]; i++) { NSString *better; better = [hnames objectAtIndex:i]; if (![better isEqualToString:@"localhost"]) { if ([hname isEqualToString:@"localhost"] || [hname isEqualToString:@"127.0.0.1"]) hname = better; else if ([better rangeOfString:@"."].location == NSNotFound) hname = better; } } } range = [hname rangeOfString: @"."]; if (range.length != 0) hname = [hname substringToIndex: range.location]; } else { hname = @"unknown"; } return hname; } - (NSString*) description { NSString *s; s = [super description]; s = [s stringByAppendingString:@" {"]; s = [s stringByAppendingString:[node path]]; if ([node isMountPoint]) s = [s stringByAppendingString:@" isMountPoint "]; s = [s stringByAppendingString: [NSString stringWithFormat:@" gridIndex: %u", (unsigned)gridIndex]]; s = [s stringByAppendingString:@" }"]; return s; } - (id)initForNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype iconSize:(int)isize iconPosition:(NSUInteger)ipos labelFont:(NSFont *)lfont textColor:(NSColor *)tcolor gridIndex:(NSUInteger)gindex dndSource:(BOOL)dndsrc acceptDnd:(BOOL)dndaccept slideBack:(BOOL)slback { self = [super init]; if (self) { NSFontManager *fmanager = [NSFontManager sharedFontManager]; NSFont *infoFont; NSRect r = NSZeroRect; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; fsnodeRep = [FSNodeRep sharedInstance]; iconSize = isize; icnBounds = NSMakeRect(0, 0, iconSize, iconSize); icnPoint = NSZeroPoint; brImgBounds = NSMakeRect(0, 0, BRANCH_SIZE, BRANCH_SIZE); ASSIGN (node, anode); selection = nil; selectionTitle = nil; ASSIGN (icon, [fsnodeRep iconOfSize: iconSize forNode: node]); drawicon = icon; selectedicon = nil; dndSource = dndsrc; acceptDnd = dndaccept; slideBack = slback; selectable = YES; isLeaf = YES; hlightRect = NSZeroRect; hlightRect.size.width = iconSize / 3 * 4; hlightRect.size.height = hlightRect.size.width * [fsnodeRep highlightHeightFactor]; if ((hlightRect.size.height - iconSize) < 4) { hlightRect.size.height = iconSize + 4; } hlightRect = NSIntegralRect(hlightRect); ASSIGN (highlightPath, [fsnodeRep highlightPathOfSize: hlightRect.size]); if ([[node path] isEqual: path_separator()] && ([node isMountPoint] == NO)) { NSString *hname; hname = [FSNIcon getBestHostName]; ASSIGN (hostname, hname); } label = [FSNTextCell new]; [label setFont: lfont]; [label setTextColor: tcolor]; infoFont = [fmanager convertFont: lfont toSize: ([lfont pointSize] - 2)]; infoFont = [fmanager convertFont: infoFont toHaveTrait: NSItalicFontMask]; infolabel = [FSNTextCell new]; [infolabel setFont: infoFont]; [infolabel setTextColor: tcolor]; if (exttype) { [self setExtendedShowType: exttype]; } else { [self setNodeInfoShowType: type]; } labelRect = NSZeroRect; labelRect.size.width = [label uncutTitleLenght] + [fsnodeRep labelMargin]; labelRect.size.height = [fsnodeRep heightOfFont: [label font]]; labelRect = NSIntegralRect(labelRect); infoRect = NSZeroRect; if ((showType != FSNInfoNameType) && [[infolabel stringValue] length]) { infoRect.size.width = [infolabel uncutTitleLenght] + [fsnodeRep labelMargin]; } else { infoRect.size.width = labelRect.size.width; } infoRect.size.height = [fsnodeRep heightOfFont: [infolabel font]]; infoRect = NSIntegralRect(infoRect); icnPosition = ipos; gridIndex = gindex; if (icnPosition == NSImageLeft) { [label setAlignment: NSLeftTextAlignment]; [infolabel setAlignment: NSLeftTextAlignment]; r.size.width = hlightRect.size.width + labelRect.size.width; r.size.height = hlightRect.size.height; if (showType != FSNInfoNameType) { float lbsh = labelRect.size.height + infoRect.size.height; if (lbsh > hlightRect.size.height) { r.size.height = lbsh; } } } else if (icnPosition == NSImageAbove) { [label setAlignment: NSCenterTextAlignment]; [infolabel setAlignment: NSCenterTextAlignment]; if (labelRect.size.width > hlightRect.size.width) { r.size.width = labelRect.size.width; } else { r.size.width = hlightRect.size.width; } r.size.height = labelRect.size.height + hlightRect.size.height; if (showType != FSNInfoNameType) { r.size.height += infoRect.size.height; } } else if (icnPosition == NSImageOnly) { r.size.width = hlightRect.size.width; r.size.height = hlightRect.size.height; } else { r.size = icnBounds.size; } trectTag = -1; [self setFrame: NSIntegralRect(r)]; if (acceptDnd) { NSArray *pbTypes = [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]; [self registerForDraggedTypes: pbTypes]; } isLocked = [node isLocked]; container = nil; isSelected = NO; isOpened = NO; nameEdited = NO; editstamp = 0.0; dragdelay = 0; isDragTarget = NO; onSelf = NO; labelFrameColor = [NSColor controlColor]; if ([[defaults objectForKey: @"dockstyle"] intValue] == DockStyleModern) { labelFrameColor = [labelFrameColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace]; labelFrameColor = [labelFrameColor colorWithAlphaComponent:0.5]; } [labelFrameColor retain]; drawLabelBackground = NO; } return self; } - (void)setSelectable:(BOOL)value { if ((icnPosition == NSImageOnly) && (selectable != value)) { selectable = value; [self tile]; } } - (NSRect)iconBounds { return icnBounds; } - (void)tile { NSRect frameRect = [self bounds]; NSSize sz = [icon size]; int lblmargin = [fsnodeRep labelMargin]; BOOL hasinfo = ([[infolabel stringValue] length] > 0); if (icnPosition == NSImageAbove) { float hlx, hly; labelRect.size.width = [label uncutTitleLenght] + lblmargin; if (labelRect.size.width >= frameRect.size.width) { labelRect.size.width = frameRect.size.width; labelRect.origin.x = 0; } else { labelRect.origin.x = (frameRect.size.width - labelRect.size.width) / 2; } if (showType != FSNInfoNameType) { if (hasinfo) { infoRect.size.width = [infolabel uncutTitleLenght] + lblmargin; } else { infoRect.size.width = labelRect.size.width; } if (infoRect.size.width >= frameRect.size.width) { infoRect.size.width = frameRect.size.width; infoRect.origin.x = 0; } else { infoRect.origin.x = (frameRect.size.width - infoRect.size.width) / 2; } } if (showType == FSNInfoNameType) { labelRect.origin.y = 0; labelRect.origin.y += lblmargin / 2; labelRect = NSIntegralRect(labelRect); infoRect = labelRect; } else { infoRect.origin.y = 0; infoRect.origin.y += lblmargin / 2; infoRect = NSIntegralRect(infoRect); labelRect.origin.y = infoRect.origin.y + infoRect.size.height; labelRect = NSIntegralRect(labelRect); } hlx = myrintf((frameRect.size.width - hlightRect.size.width) / 2); hly = myrintf(frameRect.size.height - hlightRect.size.height); if ((hlightRect.origin.x != hlx) || (hlightRect.origin.y != hly)) { NSAffineTransform *transform = [NSAffineTransform transform]; [transform translateXBy: hlx - hlightRect.origin.x yBy: hly - hlightRect.origin.y]; [highlightPath transformUsingAffineTransform: transform]; hlightRect.origin.x = hlx; hlightRect.origin.y = hly; } icnBounds.origin.x = hlightRect.origin.x + ((hlightRect.size.width - iconSize) / 2); icnBounds.origin.y = hlightRect.origin.y + ((hlightRect.size.height - iconSize) / 2); icnBounds = NSIntegralRect(icnBounds); icnPoint.x = myrintf(hlightRect.origin.x + ((hlightRect.size.width - sz.width) / 2)); icnPoint.y = myrintf(hlightRect.origin.y + ((hlightRect.size.height - sz.height) / 2)); } else if (icnPosition == NSImageLeft) { float icnspacew = hlightRect.size.width; float hryorigin = 0; if (isLeaf == NO) { icnspacew += BRANCH_SIZE; } labelRect.size.width = myrintf([label uncutTitleLenght] + lblmargin); if (labelRect.size.width >= (frameRect.size.width - icnspacew)) { labelRect.size.width = (frameRect.size.width - icnspacew); } if (showType != FSNInfoNameType) { if (hasinfo) { infoRect.size.width = [infolabel uncutTitleLenght] + lblmargin; } else { infoRect.size.width = labelRect.size.width; } if (infoRect.size.width >= (frameRect.size.width - icnspacew)) { infoRect.size.width = (frameRect.size.width - icnspacew); } } else { infoRect.size.width = labelRect.size.width; } infoRect = NSIntegralRect(infoRect); if (showType != FSNInfoNameType) { float lbsh = labelRect.size.height + infoRect.size.height; if (lbsh > hlightRect.size.height) { hryorigin = myrintf((lbsh - hlightRect.size.height) / 2); } } if ((hlightRect.origin.x != 0) || (hlightRect.origin.y != hryorigin)) { NSAffineTransform *transform = [NSAffineTransform transform]; [transform translateXBy: 0 - hlightRect.origin.x yBy: hryorigin - hlightRect.origin.y]; [highlightPath transformUsingAffineTransform: transform]; hlightRect.origin.x = 0; hlightRect.origin.y = hryorigin; } icnBounds.origin.x = (hlightRect.size.width - iconSize) / 2; icnBounds.origin.y = hlightRect.origin.y + ((hlightRect.size.height - iconSize) / 2); icnBounds = NSIntegralRect(icnBounds); icnPoint.x = myrintf((hlightRect.size.width - sz.width) / 2); icnPoint.y = myrintf(hlightRect.origin.y + ((hlightRect.size.height - sz.height) / 2)); labelRect.origin.x = hlightRect.size.width; infoRect.origin.x = hlightRect.size.width; if (showType != FSNInfoNameType) { float lbsh = labelRect.size.height + infoRect.size.height; infoRect.origin.y = 0; if (hasinfo){ if (hlightRect.size.height > lbsh) { infoRect.origin.y = (hlightRect.size.height - lbsh) / 2; } labelRect.origin.y = infoRect.origin.y + infoRect.size.height; } else { if (hlightRect.size.height > lbsh) { labelRect.origin.y = (hlightRect.size.height - labelRect.size.height) / 2; } else { labelRect.origin.y = (lbsh - labelRect.size.height) / 2; } } } else { labelRect.origin.y = (hlightRect.size.height - labelRect.size.height) / 2; } infoRect = NSIntegralRect(infoRect); labelRect = NSIntegralRect(labelRect); } else if (icnPosition == NSImageOnly) { if (selectable) { float hlx = myrintf((frameRect.size.width - hlightRect.size.width) / 2); float hly = myrintf((frameRect.size.height - hlightRect.size.height) / 2); if ((hlightRect.origin.x != hlx) || (hlightRect.origin.y != hly)) { NSAffineTransform *transform = [NSAffineTransform transform]; [transform translateXBy: hlx - hlightRect.origin.x yBy: hly - hlightRect.origin.y]; [highlightPath transformUsingAffineTransform: transform]; hlightRect.origin.x = hlx; hlightRect.origin.y = hly; } } icnBounds.origin.x = (frameRect.size.width - iconSize) / 2; icnBounds.origin.y = (frameRect.size.height - iconSize) / 2; icnBounds = NSIntegralRect(icnBounds); icnPoint.x = myrintf((frameRect.size.width - sz.width) / 2); icnPoint.y = myrintf((frameRect.size.height - sz.height) / 2); } brImgBounds.origin.x = frameRect.size.width - ARROW_ORIGIN_X; brImgBounds.origin.y = myrintf(icnBounds.origin.y + (icnBounds.size.height / 2) - (BRANCH_SIZE / 2)); brImgBounds = NSIntegralRect(brImgBounds); if ([self window]) { if (trectTag != -1) { [self removeTrackingRect: trectTag]; } trectTag = [self addTrackingRect: icnBounds owner: self userData: nil assumeInside: NO]; } [self setNeedsDisplay: YES]; } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { if (([theEvent type] == NSRightMouseDown) && isSelected) { return [container menuForEvent: theEvent]; } return [super menuForEvent: theEvent]; } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; container = (NSView *)[self superview]; } - (void)mouseUp:(NSEvent *)theEvent { NSPoint location = [theEvent locationInWindow]; BOOL onself = NO; location = [self convertPoint: location fromView: nil]; if (icnPosition == NSImageOnly) { onself = [self mouse: location inRect: icnBounds]; } else { onself = ([self mouse: location inRect: icnBounds] || [self mouse: location inRect: labelRect]); } if ([container respondsToSelector: @selector(setSelectionMask:)]) { [container setSelectionMask: NSSingleSelectionMask]; } if (onself) { if (([node isLocked] == NO) && ([theEvent clickCount] > 1)) { if ([container respondsToSelector: @selector(openSelectionInNewViewer:)]) { BOOL newv = (([theEvent modifierFlags] & NSControlKeyMask) || ([theEvent modifierFlags] & NSAlternateKeyMask)); [container openSelectionInNewViewer: newv]; } } } else { [container mouseUp: theEvent]; } } - (void)mouseDown:(NSEvent *)theEvent { NSPoint location = [theEvent locationInWindow]; NSPoint selfloc = [self convertPoint: location fromView: nil]; BOOL onself = NO; NSEvent *nextEvent = nil; BOOL startdnd = NO; NSSize offset; if (icnPosition == NSImageOnly) { onself = [self mouse: selfloc inRect: icnBounds]; } else { onself = ([self mouse: selfloc inRect: icnBounds] || [self mouse: selfloc inRect: labelRect]); } if (onself) { if (selectable == NO) { return; } if ([theEvent clickCount] == 1) { if (isSelected == NO) { if ([container respondsToSelector: @selector(stopRepNameEditing)]) { [container stopRepNameEditing]; } } if ([theEvent modifierFlags] & NSShiftKeyMask) { if ([container respondsToSelector: @selector(setSelectionMask:)]) { [container setSelectionMask: FSNMultipleSelectionMask]; } if (isSelected) { if ([container selectionMask] == FSNMultipleSelectionMask) { [self unselect]; if ([container respondsToSelector: @selector(selectionDidChange)]) { [container selectionDidChange]; } return; } } else { [self select]; } } else { if ([container respondsToSelector: @selector(setSelectionMask:)]) { [container setSelectionMask: NSSingleSelectionMask]; } if (isSelected == NO) { [self select]; } else { NSTimeInterval interval = ([theEvent timestamp] - editstamp); if ((interval > DOUBLE_CLICK_LIMIT) && [self mouse: location inRect: labelRect]) { if ([container respondsToSelector: @selector(setNameEditorForRep:)]) { [container setNameEditorForRep: self]; } } } } if (dndSource) { while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { [[self window] postEvent: nextEvent atStart: NO]; if ([container respondsToSelector: @selector(repSelected:)]) { [container repSelected: self]; } break; } else if (([nextEvent type] == NSLeftMouseDragged) && ([self mouse: selfloc inRect: icnBounds])) { if (dragdelay < 5) { dragdelay++; } else { NSPoint p = [nextEvent locationInWindow]; offset = NSMakeSize(p.x - location.x, p.y - location.y); startdnd = YES; break; } } } } if (startdnd) { if ([container respondsToSelector: @selector(stopRepNameEditing)]) { [container stopRepNameEditing]; } if ([container respondsToSelector: @selector(setFocusedRep:)]) { [container setFocusedRep: nil]; } [self startExternalDragOnEvent: theEvent withMouseOffset: offset]; } editstamp = [theEvent timestamp]; } } else { [container mouseDown: theEvent]; } } - (void)mouseEntered:(NSEvent *)theEvent { if ([container respondsToSelector: @selector(setFocusedRep:)]) { [container setFocusedRep: self]; } } - (void)mouseExited:(NSEvent *)theEvent { if ([container respondsToSelector: @selector(setFocusedRep:)]) { [container setFocusedRep: nil]; } } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (void)setFrame:(NSRect)frameRect { [super setFrame: frameRect]; [self tile]; } - (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize { [self tile]; } - (void)drawRect:(NSRect)rect { if (isSelected) { [[NSColor selectedControlColor] set]; [highlightPath fill]; if (nameEdited == NO) { NSFrameRect(labelRect); NSRectFill(labelRect); } } else { if (nameEdited == NO) { [[container backgroundColor] set]; } } if (icnPosition != NSImageOnly) { if (nameEdited == NO) { [label setBackgroundColor:labelFrameColor]; [label setDrawsBackground: drawLabelBackground]; [label drawWithFrame: labelRect inView: self]; } if ((showType != FSNInfoNameType) && [[infolabel stringValue] length]) { [infolabel drawWithFrame: infoRect inView: self]; } } if (isLocked == NO) { if (isOpened == NO) { [drawicon compositeToPoint: icnPoint operation: NSCompositeSourceOver]; } else { [drawicon dissolveToPoint: icnPoint fraction: 0.5]; } } else { [drawicon dissolveToPoint: icnPoint fraction: 0.3]; } if (isLeaf == NO) [[object_getClass(self) branchImage] compositeToPoint: brImgBounds.origin operation: NSCompositeSourceOver]; } // // FSNodeRep protocol // - (void)setNode:(FSNode *)anode { DESTROY (selection); DESTROY (selectionTitle); DESTROY (hostname); ASSIGN (node, anode); ASSIGN (icon, [fsnodeRep iconOfSize: iconSize forNode: node]); drawicon = icon; DESTROY (selectedicon); if ([[node path] isEqual: path_separator()] && ([node isMountPoint] == NO)) { NSString *hname; hname = [FSNIcon getBestHostName]; ASSIGN (hostname, hname); } if (extInfoType) { [self setExtendedShowType: extInfoType]; } else { [self setNodeInfoShowType: showType]; } [self setLocked: [node isLocked]]; [self tile]; } - (void)setNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype { [self setNode: anode]; if (exttype) { [self setExtendedShowType: exttype]; } else { [self setNodeInfoShowType: type]; } } - (FSNode *)node { return node; } - (void)showSelection:(NSArray *)selnodes { NSUInteger i; ASSIGN (node, [selnodes objectAtIndex: 0]); ASSIGN (selection, selnodes); ASSIGN (selectionTitle, ([NSString stringWithFormat: @"%lu %@", (unsigned long)[selection count], NSLocalizedString(@"elements", @"")])); ASSIGN (icon, [fsnodeRep multipleSelectionIconOfSize: iconSize]); drawicon = icon; DESTROY (selectedicon); [label setStringValue: selectionTitle]; [infolabel setStringValue: @""]; [self setLocked: NO]; for (i = 0; i < [selnodes count]; i++) { if ([fsnodeRep isNodeLocked: [selnodes objectAtIndex: i]]) { [self setLocked: YES]; break; } } [self tile]; } - (BOOL)isShowingSelection { return (selection != nil); } - (NSArray *)selection { return selection; } - (NSArray *)pathsSelection { if (selection) { NSMutableArray *selpaths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [selection count]; i++) { [selpaths addObject: [[selection objectAtIndex: i] path]]; } return [NSArray arrayWithArray: selpaths]; } return nil; } - (void)setFont:(NSFont *)fontObj { NSFontManager *fmanager = [NSFontManager sharedFontManager]; int lblmargin = [fsnodeRep labelMargin]; NSFont *infoFont; [label setFont: fontObj]; infoFont = [fmanager convertFont: fontObj toSize: ([fontObj pointSize] - 2)]; infoFont = [fmanager convertFont: infoFont toHaveTrait: NSItalicFontMask]; [infolabel setFont: infoFont]; labelRect.size.width = myrintf([label uncutTitleLenght] + lblmargin); labelRect.size.height = myrintf([fsnodeRep heightOfFont: [label font]]); labelRect = NSIntegralRect(labelRect); infoRect = NSZeroRect; if ((showType != FSNInfoNameType) && [[infolabel stringValue] length]) { infoRect.size.width = [infolabel uncutTitleLenght] + lblmargin; } else { infoRect.size.width = labelRect.size.width; } infoRect.size.height = [fsnodeRep heightOfFont: infoFont]; infoRect = NSIntegralRect(infoRect); [self tile]; } - (NSFont *)labelFont { return [label font]; } - (void)setLabelTextColor:(NSColor *)acolor { [label setTextColor: acolor]; [infolabel setTextColor: acolor]; } - (NSColor *)labelTextColor { return [label textColor]; } - (void)setIconSize:(int)isize { iconSize = isize; icnBounds = NSMakeRect(0, 0, iconSize, iconSize); if (selection == nil) { ASSIGN (icon, [fsnodeRep iconOfSize: iconSize forNode: node]); } else { ASSIGN (icon, [fsnodeRep multipleSelectionIconOfSize: iconSize]); } drawicon = icon; DESTROY (selectedicon); hlightRect.size.width = myrintf(iconSize / 3 * 4); hlightRect.size.height = myrintf(hlightRect.size.width * [fsnodeRep highlightHeightFactor]); if ((hlightRect.size.height - iconSize) < 4) { hlightRect.size.height = iconSize + 4; } hlightRect.origin.x = 0; hlightRect.origin.y = 0; ASSIGN (highlightPath, [fsnodeRep highlightPathOfSize: hlightRect.size]); labelRect.size.width = [label uncutTitleLenght] + [fsnodeRep labelMargin]; labelRect.size.height = [fsnodeRep heightOfFont: [label font]]; [self tile]; } - (int)iconSize { return iconSize; } - (void)setIconPosition:(NSCellImagePosition)ipos { icnPosition = ipos; if (icnPosition == NSImageLeft) { [label setAlignment: NSLeftTextAlignment]; [infolabel setAlignment: NSLeftTextAlignment]; } else if (icnPosition == NSImageAbove) { [label setAlignment: NSCenterTextAlignment]; [infolabel setAlignment: NSCenterTextAlignment]; } [self tile]; } - (NSCellImagePosition)iconPosition { return icnPosition; } - (NSRect)labelRect { return labelRect; } - (void)setNodeInfoShowType:(FSNInfoType)type { showType = type; DESTROY (extInfoType); if (selection) { [label setStringValue: selectionTitle]; [infolabel setStringValue: @""]; return; } [label setStringValue: (hostname ? hostname : [node name])]; switch(showType) { case FSNInfoNameType: [infolabel setStringValue: @""]; break; case FSNInfoKindType: [infolabel setStringValue: [node typeDescription]]; break; case FSNInfoDateType: [infolabel setStringValue: [node modDateDescription]]; break; case FSNInfoSizeType: [infolabel setStringValue: [node sizeDescription]]; break; case FSNInfoOwnerType: [infolabel setStringValue: [node owner]]; break; default: [infolabel setStringValue: @""]; break; } } - (BOOL)setExtendedShowType:(NSString *)type { ASSIGN (extInfoType, type); showType = FSNInfoExtendedType; [self setNodeInfoShowType: showType]; if (selection == nil) { NSDictionary *info = [fsnodeRep extendedInfoOfType: type forNode: node]; if (info) { [infolabel setStringValue: [info objectForKey: @"labelstr"]]; return YES; } } return NO; } - (FSNInfoType)nodeInfoShowType { return showType; } - (NSString *)shownInfo { return [label stringValue]; } - (void)setNameEdited:(BOOL)value { if (nameEdited != value) { nameEdited = value; [self setNeedsDisplay: YES]; } } - (void)setLeaf:(BOOL)flag { if (isLeaf != flag) { isLeaf = flag; [self tile]; } } - (BOOL)isLeaf { return isLeaf; } - (void)select { if (isSelected) { return; } isSelected = YES; if ([container respondsToSelector: @selector(unselectOtherReps:)]) { [container unselectOtherReps: self]; } if ([container respondsToSelector: @selector(selectionDidChange)]) { [container selectionDidChange]; } [self setNeedsDisplay: YES]; } - (void)unselect { if (isSelected == NO) { return; } isSelected = NO; [self setNeedsDisplay: YES]; } - (BOOL)isSelected { return isSelected; } - (void)setOpened:(BOOL)value { if (isOpened == value) { return; } isOpened = value; [self setNeedsDisplay: YES]; } - (BOOL)isOpened { return isOpened; } - (void)setLocked:(BOOL)value { if (isLocked == value) { return; } isLocked = value; [label setTextColor: (isLocked ? [container disabledTextColor] : [container textColor])]; [infolabel setTextColor: (isLocked ? [container disabledTextColor] : [container textColor])]; [self setNeedsDisplay: YES]; } - (void)checkLocked { if (selection == nil) { [self setLocked: [node isLocked]]; } else { NSUInteger i; [self setLocked: NO]; for (i = 0; i < [selection count]; i++) { if ([[selection objectAtIndex: i] isLocked]) { [self setLocked: YES]; break; } } } } - (BOOL)isLocked { return isLocked; } - (void)setGridIndex:(NSUInteger)index { gridIndex = index; } - (NSUInteger)gridIndex { return gridIndex; } - (int)compareAccordingToName:(id)aIcon { return [node compareAccordingToName: [aIcon node]]; } - (int)compareAccordingToKind:(id)aIcon { return [node compareAccordingToKind: [aIcon node]]; } - (int)compareAccordingToDate:(id)aIcon { return [node compareAccordingToDate: [aIcon node]]; } - (int)compareAccordingToSize:(id)aIcon { return [node compareAccordingToSize: [aIcon node]]; } - (int)compareAccordingToOwner:(id)aIcon { return [node compareAccordingToOwner: [aIcon node]]; } - (int)compareAccordingToGroup:(id)aIcon { return [node compareAccordingToGroup: [aIcon node]]; } - (int)compareAccordingToIndex:(id)aIcon { return (gridIndex <= [aIcon gridIndex]) ? NSOrderedAscending : NSOrderedDescending; } @end @implementation FSNIcon (DraggingSource) - (void)startExternalDragOnEvent:(NSEvent *)event withMouseOffset:(NSSize)offset { if ([container respondsToSelector: @selector(selectedPaths)]) { NSArray *selectedPaths = [container selectedPaths]; NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; [pb declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; if ([pb setPropertyList: selectedPaths forType: NSFilenamesPboardType]) { NSImage *dragIcon; if ([selectedPaths count] == 1) { dragIcon = icon; } else { dragIcon = [fsnodeRep multipleSelectionIconOfSize: iconSize]; } [self dragImage: dragIcon at: icnPoint offset: offset event: event pasteboard: pb source: self slideBack: slideBack]; } } } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag { dragdelay = 0; onSelf = NO; if ([container respondsToSelector: @selector(restoreLastSelection)]) { [container restoreLastSelection]; } if (flag == NO) { if ([container respondsToSelector: @selector(removeUndepositedRep:)]) { [container removeUndepositedRep: self]; } } } @end @implementation FSNIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *fromPath; NSString *nodePath; NSString *prePath; NSUInteger i, count; isDragTarget = NO; onSelf = NO; if (selection || isLocked || ([node isDirectory] == NO) || (([node isWritable] == NO) && ([node isApplication] == NO))) { return NSDragOperationNone; } if ([node isDirectory]) { if ([node isSubnodeOfPath: [desktopApp trashPath]]) { return NSDragOperationNone; } } if ([node isPackage] && ([node isApplication] == NO)) { if ([container respondsToSelector: @selector(baseNode)]) { if ([node isEqual: [container baseNode]] == NO) { return NSDragOperationNone; } } else { return NSDragOperationNone; } } pb = [sender draggingPasteboard]; sourcePaths = nil; if ([[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { if ([node isPackage] == NO) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { if ([node isPackage] == NO) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } } if (sourcePaths == nil) { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) { return NSDragOperationNone; } nodePath = [node path]; if (selection) { if ([selection isEqual: sourcePaths]) { onSelf = YES; } } else if (count == 1) { if ([nodePath isEqual: [sourcePaths objectAtIndex: 0]]) { onSelf = YES; } } if (onSelf) { isDragTarget = YES; return NSDragOperationMove; } fromPath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([nodePath isEqual: fromPath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (![prePath isEqual: path_separator()]) { if ([sourcePaths containsObject: prePath]) return NSDragOperationNone; prePath = [prePath stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: fromPath]) { NSArray *subNodes = [node subNodes]; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { NSUInteger j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } if ([node isApplication]) { if (([container respondsToSelector: @selector(baseNode)] == NO) || ([node isEqual: [container baseNode]] == NO)) { for (i = 0; i < count; i++) { CREATE_AUTORELEASE_POOL(arp); FSNode *nd = [FSNode nodeWithPath: [sourcePaths objectAtIndex: i]]; if (([nd isPlain] == NO) && ([nd isPackage] == NO)) { RELEASE (arp); return NSDragOperationNone; } RELEASE (arp); } } else if ([node isEqual: [container baseNode]] == NO) { return NSDragOperationNone; } } isDragTarget = YES; forceCopy = NO; onApplication = ([node isApplication] && [container respondsToSelector: @selector(baseNode)] && [node isEqual: [container baseNode]]); sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: fromPath] || ([node isApplication] && (onApplication == NO))) { return NSDragOperationMove; } else if (([node isApplication] == NO) || onApplication) { forceCopy = YES; return NSDragOperationCopy; } } if (sourceDragMask & NSDragOperationCopy) { if ([node isApplication]) { return (onApplication ? NSDragOperationCopy : NSDragOperationMove); } else { return NSDragOperationCopy; } } if (sourceDragMask & NSDragOperationLink) { if ([node isApplication]) { return (onApplication ? NSDragOperationLink : NSDragOperationMove); } else { return NSDragOperationLink; } } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSPoint p = [self convertPoint: [sender draggingLocation] fromView: nil]; if ([self mouse: p inRect: icnBounds] == NO) { if (drawicon == selectedicon) { drawicon = icon; [self setNeedsDisplay: YES]; } return [container draggingUpdated: sender]; } else { if ((selectedicon == nil) && isDragTarget && (onSelf == NO)) { ASSIGN (selectedicon, [fsnodeRep openFolderIconOfSize: iconSize forNode: node]); } if (selectedicon && (drawicon == icon) && isDragTarget && (onSelf == NO)) { drawicon = selectedicon; [self setNeedsDisplay: YES]; } } if (isDragTarget == NO) { return NSDragOperationNone; } if (sourceDragMask & NSDragOperationMove) { return forceCopy ? NSDragOperationCopy : NSDragOperationMove; } if (sourceDragMask & NSDragOperationCopy) { if ([node isApplication]) { return (onApplication ? NSDragOperationCopy : NSDragOperationMove); } else { return NSDragOperationCopy; } } if (sourceDragMask & NSDragOperationLink) { if ([node isApplication]) { return (onApplication ? NSDragOperationLink : NSDragOperationMove); } else { return NSDragOperationLink; } } return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; if (onSelf == NO) { drawicon = icon; [container setNeedsDisplayInRect: [self frame]]; [self setNeedsDisplay: YES]; } onSelf = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isLocked ? NO : isDragTarget; } - (BOOL)performDragOperation:(id )sender { return isLocked ? NO : isDragTarget; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *operation; NSString *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSUInteger i; isDragTarget = NO; operation = nil; if (isLocked) { return; } if (onSelf) { [container resizeWithOldSuperviewSize: [container frame].size]; onSelf = NO; return; } drawicon = icon; [self setNeedsDisplay: YES]; sourceDragMask = [sender draggingSourceOperationMask]; pb = [sender draggingPasteboard]; if ([node isPackage] == NO) { if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [node path]]; return; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [node path]]; return; } } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if (([node isApplication] == NO) || onApplication) { source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } else if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask & NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } } files = [NSMutableArray arrayWithCapacity: 1]; for(i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } opDict = [NSMutableDictionary dictionaryWithCapacity: 4]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [node path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } else { for (i = 0; i < [sourcePaths count]; i++) { NSString *path = [sourcePaths objectAtIndex: i]; NS_DURING { [[NSWorkspace sharedWorkspace] openFile: path withApplication: [node name]]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } @end @implementation FSNIconNameEditor - (void)dealloc { RELEASE (node); [super dealloc]; } - (void)setNode:(FSNode *)anode stringValue:(NSString *)str { DESTROY (node); if (anode) { ASSIGN (node, anode); } [self setStringValue: str]; } - (FSNode *)node { return node; } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; container = (NSView *)[self superview]; } - (void)mouseDown:(NSEvent *)theEvent { if ([self isEditable] == NO) { if ([container respondsToSelector: @selector(canStartRepNameEditing)] && [container canStartRepNameEditing]) { [self setAlignment: NSLeftTextAlignment]; [self setSelectable: YES]; [self setEditable: YES]; [[self window] makeFirstResponder: self]; } } else { [super mouseDown: theEvent]; } } @end gworkspace-1.1.0/FSNode/FSNIconsView.h0000644000175000001440000001171414751213523016672 0ustar multixusers/* FSNIconsView.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNodeRep.h" @class NSColor; @class NSFont; @class FSNode; @class FSNIcon; @class FSNIconNameEditor; @interface FSNIconsView : NSView { FSNode *node; NSMutableArray *icons; FSNInfoType infoType; NSString *extInfoType; NSImage *verticalImage; NSImage *horizontalImage; FSNSelectionMask selectionMask; NSArray *lastSelection; FSNIconNameEditor *nameEditor; FSNIcon *editIcon; int iconSize; int labelTextSize; NSFont *labelFont; NSCellImagePosition iconPosition; NSSize gridSize; NSInteger colItemsCount; BOOL isDragTarget; BOOL forceCopy; NSString *charBuffer; NSTimeInterval lastKeyPressedTime; NSColor *backColor; NSColor *textColor; NSColor *disabledTextColor; BOOL transparentSelection; FSNodeRep *fsnodeRep; id desktopApp; } - (void)sortIcons; - (void)calculateGridSize; - (void)tile; - (void)scrollIconToVisible:(FSNIcon *)icon; - (NSString *)selectIconWithPrefix:(NSString *)prefix; - (void)selectIconInPrevLine; - (void)selectIconInNextLine; - (void)selectPrevIcon; - (void)selectNextIcon; @end @interface FSNIconsView (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode; - (NSDictionary *)readNodeInfo; - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk; - (void)reloadContents; - (void)reloadFromNode:(FSNode *)anode; - (FSNode *)baseNode; - (FSNode *)shownNode; - (BOOL)isSingleNode; - (BOOL)isShowingNode:(FSNode *)anode; - (BOOL)isShowingPath:(NSString *)path; - (void)sortTypeChangedAtPath:(NSString *)path; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)setShowType:(FSNInfoType)type; - (void)setExtendedShowType:(NSString *)type; - (FSNInfoType)showType; - (void)setIconSize:(int)size; - (int)iconSize; - (void)setLabelTextSize:(int)size; - (int)labelTextSize; - (void)setIconPosition:(NSCellImagePosition)pos; - (NSCellImagePosition)iconPosition; - (void)updateIcons; - (id)repOfSubnode:(FSNode *)anode; - (id)repOfSubnodePath:(NSString *)apath; - (id)addRepForSubnode:(FSNode *)anode; - (id)addRepForSubnodePath:(NSString *)apath; - (void)removeRepOfSubnode:(FSNode *)anode; - (void)removeRepOfSubnodePath:(NSString *)apath; - (void)removeRep:(id)arep; - (void)unloadFromNode:(FSNode *)anode; - (void)repSelected:(id)arep; - (void)unselectOtherReps:(id)arep; - (void)selectReps:(NSArray *)reps; - (void)selectRepsOfSubnodes:(NSArray *)nodes; - (void)selectRepsOfPaths:(NSArray *)paths; - (void)selectAll; - (void)scrollSelectionToVisible; - (NSArray *)reps; - (NSArray *)selectedReps; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)selectionDidChange; - (void)checkLockedReps; - (void)setSelectionMask:(FSNSelectionMask)mask; - (FSNSelectionMask)selectionMask; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)restoreLastSelection; - (void)setLastShownNode:(FSNode *)anode; - (BOOL)needsDndProxy; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut; - (void)setBackgroundColor:(NSColor *)acolor; - (NSColor *)backgroundColor; - (void)setTextColor:(NSColor *)acolor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; @end @interface FSNIconsView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end @interface FSNIconsView (IconNameEditing) - (void)updateNameEditor; - (void)setNameEditorForRep:(id)arep; - (void)stopRepNameEditing; - (BOOL)canStartRepNameEditing; - (void)controlTextDidChange:(NSNotification *)aNotification; - (void)controlTextDidEndEditing:(NSNotification *)aNotification; @end gworkspace-1.1.0/FSNode/FSNIconsView.m0000644000175000001440000015332514751213523016704 0ustar multixusers/* FSNIconsView.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include #import #import #import #import "FSNIconsView.h" #import "FSNIcon.h" #import "FSNFunctions.h" #define DEF_ICN_SIZE 48 #define DEF_TEXT_SIZE 12 #define DEF_ICN_POS NSImageAbove #define X_MARGIN (10) #define Y_MARGIN (12) #define EDIT_MARGIN (4) #ifndef max #define max(a,b) ((a) >= (b) ? (a):(b)) #endif #ifndef min #define min(a,b) ((a) <= (b) ? (a):(b)) #endif #define CHECK_SIZE(s) \ if (s.width < 1) s.width = 1; \ if (s.height < 1) s.height = 1; \ if (s.width > maxr.size.width) s.width = maxr.size.width; \ if (s.height > maxr.size.height) s.height = maxr.size.height #define SETRECT(o, x, y, w, h) { \ NSRect rct = NSMakeRect(x, y, w, h); \ if (rct.size.width < 0) rct.size.width = 0; \ if (rct.size.height < 0) rct.size.height = 0; \ [o setFrame: NSIntegralRect(rct)]; \ } /* we redefine the dockstyle to read the preferences without including Dock.h" */ typedef enum DockStyle { DockStyleClassic = 0, DockStyleModern = 1 } DockStyle; static void GWHighlightFrameRect(NSRect aRect) { NSFrameRectWithWidthUsingOperation(aRect, 1.0, GSCompositeHighlight); } @implementation FSNIconsView - (void)dealloc { RELEASE (node); RELEASE (extInfoType); RELEASE (icons); RELEASE (labelFont); RELEASE (nameEditor); RELEASE (horizontalImage); RELEASE (verticalImage); RELEASE (lastSelection); RELEASE (charBuffer); RELEASE (backColor); RELEASE (textColor); RELEASE (disabledTextColor); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; id defentry; fsnodeRep = [FSNodeRep sharedInstance]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } /* we tie the transparent selection to the modern dock style */ transparentSelection = NO; defentry = [defaults objectForKey: @"dockstyle"]; if ([defentry intValue] == DockStyleModern) transparentSelection = YES; ASSIGN (backColor, [NSColor windowBackgroundColor]); ASSIGN (textColor, [NSColor controlTextColor]); ASSIGN (disabledTextColor, [NSColor disabledControlTextColor]); defentry = [defaults objectForKey: @"iconsize"]; iconSize = defentry ? [defentry intValue] : DEF_ICN_SIZE; defentry = [defaults objectForKey: @"labeltxtsize"]; labelTextSize = defentry ? [defentry intValue] : DEF_TEXT_SIZE; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); defentry = [defaults objectForKey: @"iconposition"]; iconPosition = defentry ? [defentry intValue] : DEF_ICN_POS; defentry = [defaults objectForKey: @"fsn_info_type"]; infoType = defentry ? [defentry intValue] : FSNInfoNameType; extInfoType = nil; if (infoType == FSNInfoExtendedType) { defentry = [defaults objectForKey: @"extended_info_type"]; if (defentry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: defentry]) { ASSIGN (extInfoType, defentry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } icons = [NSMutableArray new]; nameEditor = [FSNIconNameEditor new]; [nameEditor setDelegate: self]; [nameEditor setFont: labelFont]; [nameEditor setBezeled: NO]; [nameEditor setAlignment: NSCenterTextAlignment]; [nameEditor setBackgroundColor: backColor]; [nameEditor setTextColor: textColor]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; editIcon = nil; isDragTarget = NO; lastKeyPressedTime = 0.0; charBuffer = nil; selectionMask = NSSingleSelectionMask; [self calculateGridSize]; [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]]; } return self; } - (void)sortIcons { if (infoType == FSNInfoExtendedType) { [icons sortUsingFunction: compareWithExtType context: (void *)NULL]; } else { [icons sortUsingSelector: [fsnodeRep compareSelectorForDirectory: [node path]]]; } } - (void)calculateGridSize { NSSize highlightSize = NSZeroSize; NSSize labelSize = NSZeroSize; int lblmargin = [fsnodeRep labelMargin]; highlightSize.width = ceil(iconSize / 3 * 4); highlightSize.height = ceil(highlightSize.width * [fsnodeRep highlightHeightFactor]); if ((highlightSize.height - iconSize) < 4) { highlightSize.height = iconSize + 4; } labelSize.height = floor([fsnodeRep heightOfFont: labelFont]); labelSize.width = [fsnodeRep labelWFactor] * labelTextSize; gridSize.height = highlightSize.height; if (infoType != FSNInfoNameType) { float lbsh = (labelSize.height * 2) - 2; if (iconPosition == NSImageAbove) { gridSize.height += lbsh; gridSize.width = labelSize.width; } else { if (lbsh > gridSize.height) { gridSize.height = lbsh; } gridSize.width = highlightSize.width + labelSize.width + lblmargin; } } else { if (iconPosition == NSImageAbove) { gridSize.height += labelSize.height; gridSize.width = labelSize.width; } else { gridSize.width = highlightSize.width + labelSize.width + lblmargin; } } } - (void)tile { CREATE_AUTORELEASE_POOL (pool); NSRect svr = [[self superview] frame]; NSRect r = [self frame]; NSRect maxr = [[NSScreen mainScreen] frame]; float px = 0 - gridSize.width; float py = gridSize.height + Y_MARGIN; NSSize sz; NSUInteger poscount = 0; NSUInteger count = [icons count]; NSRect *irects = NSZoneMalloc (NSDefaultMallocZone(), sizeof(NSRect) * count); NSCachedImageRep *rep = nil; NSArray *selection; NSUInteger i; colItemsCount = 0; for (i = 0; i < count; i++) { px += (gridSize.width + X_MARGIN); if (px >= (svr.size.width - gridSize.width)) { px = X_MARGIN; py += (gridSize.height + Y_MARGIN); if (colItemsCount < poscount) { colItemsCount = poscount; } poscount = 0; } poscount++; irects[i] = NSMakeRect(px, py, gridSize.width, gridSize.height); } py += Y_MARGIN; py = (py < svr.size.height) ? svr.size.height : py; SETRECT (self, r.origin.x, r.origin.y, svr.size.width, py); for (i = 0; i < count; i++) { FSNIcon *icon = [icons objectAtIndex: i]; irects[i].origin.y = py - irects[i].origin.y; irects[i] = NSIntegralRect(irects[i]); if (NSEqualRects(irects[i], [icon frame]) == NO) { [icon setFrame: irects[i]]; } [icon setGridIndex: i]; } DESTROY (horizontalImage); sz = NSMakeSize(svr.size.width, 2); CHECK_SIZE (sz); horizontalImage = [[NSImage allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: sz]; rep = [[NSCachedImageRep allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: sz depth: [NSWindow defaultDepthLimit] separate: YES alpha: YES]; [horizontalImage addRepresentation: rep]; RELEASE (rep); DESTROY (verticalImage); sz = NSMakeSize(2, py); CHECK_SIZE (sz); verticalImage = [[NSImage allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: sz]; rep = [[NSCachedImageRep allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: sz depth: [NSWindow defaultDepthLimit] separate: YES alpha: YES]; [verticalImage addRepresentation: rep]; RELEASE (rep); NSZoneFree (NSDefaultMallocZone(), irects); RELEASE (pool); selection = [self selectedReps]; if ([selection count]) { [self scrollIconToVisible: [selection objectAtIndex: 0]]; } if ([[self subviews] containsObject: nameEditor]) { [self updateNameEditor]; } } - (void)scrollIconToVisible:(FSNIcon *)icon { NSRect irect = [icon frame]; float border = floor(irect.size.height * 0.2); irect.origin.y -= border; irect.size.height += border * 2; [self scrollRectToVisible: irect]; } - (NSString *)selectIconWithPrefix:(NSString *)prefix { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSString *name = [icon shownInfo]; if ([name hasPrefix: prefix]) { [icon select]; [self scrollIconToVisible: icon]; return name; } } return nil; } - (void)selectIconInPrevLine { FSNIcon *icon; NSUInteger i; NSInteger pos = -1; for (i = 0; i < [icons count]; i++) { icon = [icons objectAtIndex: i]; if ([icon isSelected]) { pos = i - colItemsCount; break; } } if (pos >= 0) { icon = [icons objectAtIndex: pos]; [icon select]; [self scrollIconToVisible: icon]; } } - (void)selectIconInNextLine { FSNIcon *icon; NSUInteger i; NSUInteger pos = [icons count]; for (i = 0; i < [icons count]; i++) { icon = [icons objectAtIndex: i]; if ([icon isSelected]) { pos = i + colItemsCount; break; } } if (pos <= ([icons count] -1)) { icon = [icons objectAtIndex: pos]; [icon select]; [self scrollIconToVisible: icon]; } } - (void)selectPrevIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { if (i > 0) { icon = [icons objectAtIndex: i - 1]; [icon select]; [self scrollIconToVisible: icon]; } break; } } } - (void)selectNextIcon { NSUInteger count = [icons count]; NSUInteger i; for (i = 0; i < count; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { if (i < (count - 1)) { icon = [icons objectAtIndex: i + 1]; [icon select]; [self scrollIconToVisible: icon]; } break; } } } - (void)mouseUp:(NSEvent *)theEvent { [self setSelectionMask: NSSingleSelectionMask]; } - (void)mouseDown:(NSEvent *)theEvent { if ([theEvent modifierFlags] != NSShiftKeyMask) { selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = NSSingleSelectionMask; DESTROY (lastSelection); [self selectionDidChange]; [self stopRepNameEditing]; } } - (void)mouseDragged:(NSEvent *)theEvent { unsigned int eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSPeriodicMask; NSDate *future = [NSDate distantFuture]; NSPoint sp; NSPoint p, pp; NSRect visibleRect; NSRect oldRect; NSRect r; NSRect selrect; float x, y, w, h; NSUInteger i; pp = NSMakePoint(0,0); #define scrollPointToVisible(p) \ { \ NSRect sr; \ sr.origin = p; \ sr.size.width = sr.size.height = 1.0; \ [self scrollRectToVisible: sr]; \ } #define CONVERT_CHECK \ { \ NSRect br = [self bounds]; \ pp = [self convertPoint: p fromView: nil]; \ if (pp.x < 1) \ pp.x = 1; \ if (pp.x >= NSMaxX(br)) \ pp.x = NSMaxX(br) - 1; \ if (pp.y < 0) \ pp.y = -1; \ if (pp.y > NSMaxY(br)) \ pp.y = NSMaxY(br) + 1; \ } p = [theEvent locationInWindow]; sp = [self convertPoint: p fromView: nil]; oldRect = NSZeroRect; [[self window] disableFlushWindow]; [NSEvent startPeriodicEventsAfterDelay: 0.02 withPeriod: 0.05]; while ([theEvent type] != NSLeftMouseUp) { BOOL scrolled = NO; CREATE_AUTORELEASE_POOL (arp); theEvent = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; if ([theEvent type] != NSPeriodic) { p = [theEvent locationInWindow]; } CONVERT_CHECK; visibleRect = [self visibleRect]; if ([self mouse: pp inRect: visibleRect] == NO) { scrollPointToVisible(pp); CONVERT_CHECK; scrolled = YES; } x = min(sp.x, pp.x); y = min(sp.y, pp.y); w = max(1, max(pp.x, sp.x) - min(pp.x, sp.x)); h = max(1, max(pp.y, sp.y) - min(pp.y, sp.y)); r = NSMakeRect(x, y, w, h); // Erase the previous rect if (transparentSelection || (!transparentSelection && scrolled)) { [self setNeedsDisplayInRect: oldRect]; [[self window] displayIfNeeded]; } // Draw the new rect [self lockFocus]; if (transparentSelection) { [[NSColor darkGrayColor] set]; NSFrameRect(r); if (transparentSelection) { [[[NSColor darkGrayColor] colorWithAlphaComponent: 0.33] set]; NSRectFillUsingOperation(r, NSCompositeSourceOver); } } else { if (!NSEqualRects(oldRect, r) && !scrolled) { GWHighlightFrameRect(oldRect); GWHighlightFrameRect(r); } else if (scrolled) { GWHighlightFrameRect(r); } } [self unlockFocus]; oldRect = r; [[self window] enableFlushWindow]; [[self window] flushWindow]; [[self window] disableFlushWindow]; DESTROY (arp); } [NSEvent stopPeriodicEvents]; [[self window] postEvent: theEvent atStart: NO]; // Erase the previous rect [self setNeedsDisplayInRect: oldRect]; [[self window] displayIfNeeded]; [[self window] enableFlushWindow]; [[self window] flushWindow]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; x = min(sp.x, pp.x); y = min(sp.y, pp.y); w = max(1, max(pp.x, sp.x) - min(pp.x, sp.x)); h = max(1, max(pp.y, sp.y) - min(pp.y, sp.y)); selrect = NSMakeRect(x, y, w, h); for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSRect iconBounds = [self convertRect: [icon iconBounds] fromView: icon]; if (NSIntersectsRect(selrect, iconBounds)) { [icon select]; } } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)keyDown:(NSEvent *)theEvent { NSString *characters; unichar character; NSString *characterStr = nil; NSRect vRect, hiddRect; NSPoint p; float x, y, w, h; characters = [theEvent characters]; character = 0; if ([characters length] > 0) { character = [characters characterAtIndex: 0]; characterStr = [characters substringToIndex: 1]; } switch (character) { case NSPageUpFunctionKey: vRect = [self visibleRect]; p = vRect.origin; x = p.x; y = p.y + vRect.size.height; w = vRect.size.width; h = vRect.size.height; hiddRect = NSMakeRect(x, y, w, h); [self scrollRectToVisible: hiddRect]; return; case NSPageDownFunctionKey: vRect = [self visibleRect]; p = vRect.origin; x = p.x; y = p.y - vRect.size.height; w = vRect.size.width; h = vRect.size.height; hiddRect = NSMakeRect(x, y, w, h); [self scrollRectToVisible: hiddRect]; return; case NSUpArrowFunctionKey: [self selectIconInPrevLine]; return; case NSDownArrowFunctionKey: [self selectIconInNextLine]; return; case NSLeftArrowFunctionKey: { if ([theEvent modifierFlags] & NSControlKeyMask) { [super keyDown: theEvent]; } else { [self selectPrevIcon]; } } return; case NSRightArrowFunctionKey: { if ([theEvent modifierFlags] & NSControlKeyMask) { [super keyDown: theEvent]; } else { [self selectNextIcon]; } } return; case NSCarriageReturnCharacter: { unsigned flags = [theEvent modifierFlags]; BOOL closesndr = ((flags == NSAlternateKeyMask) || (flags == NSControlKeyMask)); [self openSelectionInNewViewer: closesndr]; return; } case 0x01B: // Escape DESTROY(charBuffer); return; default: break; } if (([characters length] > 0) && (character < 0xF700)) { if (charBuffer != nil) { if ([theEvent timestamp] - lastKeyPressedTime < 5.0) { NSString *appendBuffer = [charBuffer stringByAppendingString:characterStr]; // Try selecting if ([self selectIconWithPrefix: appendBuffer]) { ASSIGN(charBuffer, appendBuffer); return; } // unable to select - fall-through and reinit as if typed is first char } } ASSIGN(charBuffer, characterStr); lastKeyPressedTime = [theEvent timestamp]; // Try selecting if ([self selectIconWithPrefix: charBuffer]) { return; } // Selection failed, reinitialize and use mismatching character as new buffer beginning DESTROY(charBuffer); } [super keyDown: theEvent]; } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { NSArray *selnodes; NSMenu *menu; NSMenuItem *menuItem; NSString *firstext; NSDictionary *apps; NSEnumerator *app_enum; id key; NSUInteger i; if ([theEvent modifierFlags] == NSControlKeyMask) { return [super menuForEvent: theEvent]; } selnodes = [self selectedNodes]; if ([selnodes count]) { NSAutoreleasePool *pool; firstext = [[[selnodes objectAtIndex: 0] path] pathExtension]; for (i = 0; i < [selnodes count]; i++) { FSNode *snode = [selnodes objectAtIndex: i]; NSString *selpath = [snode path]; NSString *ext = [selpath pathExtension]; if ([ext isEqual: firstext] == NO) { return [super menuForEvent: theEvent]; } if ([snode isDirectory] == NO) { if ([snode isPlain] == NO) { return [super menuForEvent: theEvent]; } } else { if (([snode isPackage] == NO) || [snode isApplication]) { return [super menuForEvent: theEvent]; } } } menu = [[NSMenu alloc] initWithTitle: NSLocalizedStringFromTableInBundle(@"Open with", nil, [NSBundle bundleForClass:[self class]], @"")]; apps = [[NSWorkspace sharedWorkspace] infoForExtension: firstext]; app_enum = [[apps allKeys] objectEnumerator]; pool = [NSAutoreleasePool new]; while ((key = [app_enum nextObject])) { menuItem = [NSMenuItem new]; key = [key stringByDeletingPathExtension]; [menuItem setTitle: key]; [menuItem setTarget: desktopApp]; [menuItem setAction: @selector(openSelectionWithApp:)]; [menuItem setRepresentedObject: key]; [menu addItem: menuItem]; RELEASE (menuItem); } RELEASE (pool); return [menu autorelease]; } return [super menuForEvent: theEvent]; } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { [self tile]; } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; if ([self superview]) { [[self window] setBackgroundColor: backColor]; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; [backColor set]; NSRectFill(rect); } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (BOOL)acceptsFirstResponder { return YES; } @end @implementation FSNIconsView (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode { CREATE_AUTORELEASE_POOL(arp); NSArray *subNodes = [anode subNodes]; NSUInteger i; for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] removeFromSuperview]; } [icons removeAllObjects]; editIcon = nil; ASSIGN (node, anode); [self readNodeInfo]; [self calculateGridSize]; for (i = 0; i < [subNodes count]; i++) { FSNode *subnode = [subNodes objectAtIndex: i]; FSNIcon *icon = [[FSNIcon alloc] initForNode: subnode nodeInfoType: infoType extendedType: extInfoType iconSize: iconSize iconPosition: iconPosition labelFont: labelFont textColor: textColor gridIndex: -1 dndSource: YES acceptDnd: YES slideBack: YES]; [icons addObject: icon]; [self addSubview: icon]; RELEASE (icon); } [icons sortUsingSelector: [fsnodeRep compareSelectorForDirectory: [node path]]]; [self tile]; DESTROY (lastSelection); [self selectionDidChange]; RELEASE (arp); } - (NSDictionary *)readNodeInfo { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [node path]]; NSDictionary *nodeDict = nil; if ([node isWritable] && ([[fsnodeRep volumes] containsObject: [node path]] == NO)) { NSString *infoPath = [[node path] stringByAppendingPathComponent: @".gwdir"]; if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { nodeDict = [NSDictionary dictionaryWithDictionary: dict]; } } } if (nodeDict == nil) { id defEntry = [defaults dictionaryForKey: prefsname]; if (defEntry) { nodeDict = [NSDictionary dictionaryWithDictionary: defEntry]; } } if (nodeDict) { id entry = [nodeDict objectForKey: @"iconsize"]; iconSize = entry ? [entry intValue] : iconSize; entry = [nodeDict objectForKey: @"labeltxtsize"]; if (entry) { labelTextSize = [entry intValue]; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); } entry = [nodeDict objectForKey: @"iconposition"]; iconPosition = entry ? [entry intValue] : iconPosition; entry = [nodeDict objectForKey: @"fsn_info_type"]; infoType = entry ? [entry intValue] : infoType; if (infoType == FSNInfoExtendedType) { DESTROY (extInfoType); entry = [nodeDict objectForKey: @"ext_info_type"]; if (entry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: entry]) { ASSIGN (extInfoType, entry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } } return nodeDict; } - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *updatedInfo = nil; if ([node isValid]) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [node path]]; NSString *infoPath = [[node path] stringByAppendingPathComponent: @".gwdir"]; BOOL writable = ([node isWritable] && ([[fsnodeRep volumes] containsObject: [node path]] == NO)); if (writable) { if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { updatedInfo = [dict mutableCopy]; } } } else { NSDictionary *prefs = [defaults dictionaryForKey: prefsname]; if (prefs) { updatedInfo = [prefs mutableCopy]; } } if (updatedInfo == nil) { updatedInfo = [NSMutableDictionary new]; } [updatedInfo setObject: [NSNumber numberWithInt: iconSize] forKey: @"iconsize"]; [updatedInfo setObject: [NSNumber numberWithInt: labelTextSize] forKey: @"labeltxtsize"]; [updatedInfo setObject: [NSNumber numberWithInt: iconPosition] forKey: @"iconposition"]; [updatedInfo setObject: [NSNumber numberWithInt: infoType] forKey: @"fsn_info_type"]; if (infoType == FSNInfoExtendedType) { [updatedInfo setObject: extInfoType forKey: @"ext_info_type"]; } if (ondisk) { if (writable) { [updatedInfo writeToFile: infoPath atomically: YES]; } else { [defaults setObject: updatedInfo forKey: prefsname]; } } } RELEASE (arp); return (AUTORELEASE (updatedInfo)); } - (void)reloadContents { NSArray *selection = [self selectedNodes]; NSMutableArray *opennodes = [NSMutableArray array]; NSUInteger i; RETAIN (selection); for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isOpened]) { [opennodes addObject: [icon node]]; } } RETAIN (opennodes); [self showContentsOfNode: node]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; for (i = 0; i < [selection count]; i++) { FSNode *nd = [selection objectAtIndex: i]; if ([nd isValid]) { FSNIcon *icon = [self repOfSubnode: nd]; if (icon) { [icon select]; } } } selectionMask = NSSingleSelectionMask; RELEASE (selection); for (i = 0; i < [opennodes count]; i++) { FSNode *nd = [opennodes objectAtIndex: i]; if ([nd isValid]) { FSNIcon *icon = [self repOfSubnode: nd]; if (icon) { [icon setOpened: YES]; } } } RELEASE (opennodes); [self checkLockedReps]; [self tile]; selection = [self selectedReps]; if ([selection count]) { [self scrollIconToVisible: [selection objectAtIndex: 0]]; } [self selectionDidChange]; } - (void)reloadFromNode:(FSNode *)anode { if ([node isEqual: anode]) { [self reloadContents]; } else if ([node isSubnodeOfNode: anode]) { NSArray *components = [FSNode nodeComponentsFromNode: anode toNode: node]; int i; for (i = 0; i < [components count]; i++) { FSNode *component = [components objectAtIndex: i]; if ([component isValid] == NO) { component = [FSNode nodeWithPath: [component parentPath]]; [self showContentsOfNode: component]; break; } } } } - (FSNode *)baseNode { return node; } - (FSNode *)shownNode { return node; } - (BOOL)isSingleNode { return YES; } - (BOOL)isShowingNode:(FSNode *)anode { return [node isEqual: anode]; } - (BOOL)isShowingPath:(NSString *)path { return [[node path] isEqual: path]; } - (void)sortTypeChangedAtPath:(NSString *)path { if ((path == nil) || [[node path] isEqual: path]) { [self reloadContents]; } } - (void)nodeContentsWillChange:(NSDictionary *)info { [self checkLockedReps]; } - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSString *ndpath = [node path]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if (([ndpath isEqual: source] == NO) && ([ndpath isEqual: destination] == NO)) { [self reloadContents]; return; } if ([ndpath isEqual: source]) { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; [self removeRepOfSubnode: subnode]; } } } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if ([ndpath isEqual: destination] && ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"])) { if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"files"]; } for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; FSNIcon *icon = [self repOfSubnode: subnode]; if (icon){ [icon setNode: subnode]; } else { [self addRepForSubnode: subnode]; } } [self sortIcons]; } [self checkLockedReps]; [self tile]; [self setNeedsDisplay: YES]; [self selectionDidChange]; } - (void)watchedPathChanged:(NSDictionary *)info { NSString *event = [info objectForKey: @"event"]; NSArray *files = [info objectForKey: @"files"]; NSString *ndpath = [node path]; NSUInteger i; if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [ndpath stringByAppendingPathComponent: fname]; [self removeRepOfSubnodePath: fpath]; } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; if (subnode && [subnode isValid]) { FSNIcon *icon = [self repOfSubnode: subnode]; if (icon) { [icon setNode: subnode]; } else { [self addRepForSubnode: subnode]; } } } } [self sortIcons]; [self tile]; [self setNeedsDisplay: YES]; [self selectionDidChange]; } - (void)setShowType:(FSNInfoType)type { if (infoType != type) { NSUInteger i; infoType = type; DESTROY (extInfoType); [self calculateGridSize]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setNodeInfoShowType: infoType]; [icon tile]; } [self sortIcons]; [self tile]; } } - (void)setExtendedShowType:(NSString *)type { if ((extInfoType == nil) || ([extInfoType isEqual: type] == NO)) { int i; infoType = FSNInfoExtendedType; ASSIGN (extInfoType, type); [self calculateGridSize]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setExtendedShowType: extInfoType]; [icon tile]; } [self sortIcons]; [self tile]; } } - (FSNInfoType)showType { return infoType; } - (void)setIconSize:(int)size { NSUInteger i; iconSize = size; [self calculateGridSize]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setIconSize: iconSize]; } [self tile]; } - (int)iconSize { return iconSize; } - (void)setLabelTextSize:(int)size { NSUInteger i; labelTextSize = size; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); [self calculateGridSize]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setFont: labelFont]; } [nameEditor setFont: labelFont]; [self tile]; } - (int)labelTextSize { return labelTextSize; } - (void)setIconPosition:(NSCellImagePosition)pos { NSUInteger i; iconPosition = pos; [self calculateGridSize]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setIconPosition: iconPosition]; } [self tile]; } - (NSCellImagePosition)iconPosition { return iconPosition; } - (void)updateIcons { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; FSNode *inode = [icon node]; [icon setNode: inode]; } } - (id)repOfSubnode:(FSNode *)anode { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([[icon node] isEqualToNode: anode]) { return icon; } } return nil; } - (id)repOfSubnodePath:(NSString *)apath { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([[[icon node] path] isEqual: apath]) { return icon; } } return nil; } - (id)addRepForSubnode:(FSNode *)anode { CREATE_AUTORELEASE_POOL(arp); FSNIcon *icon = [[FSNIcon alloc] initForNode: anode nodeInfoType: infoType extendedType: extInfoType iconSize: iconSize iconPosition: iconPosition labelFont: labelFont textColor: textColor gridIndex: -1 dndSource: YES acceptDnd: YES slideBack: YES]; [icons addObject: icon]; [self addSubview: icon]; RELEASE (icon); RELEASE (arp); return icon; } - (id)addRepForSubnodePath:(NSString *)apath { FSNode *subnode = [FSNode nodeWithRelativePath: apath parent: node]; return [self addRepForSubnode: subnode]; } - (void)removeRepOfSubnode:(FSNode *)anode { FSNIcon *icon = [self repOfSubnode: anode]; if (icon) { [self removeRep: icon]; } } - (void)removeRepOfSubnodePath:(NSString *)apath { FSNIcon *icon = [self repOfSubnodePath: apath]; if (icon) { [self removeRep: icon]; } } - (void)removeRep:(id)arep { if (arep == editIcon) { editIcon = nil; } [arep removeFromSuperview]; [icons removeObject: arep]; } - (void)unloadFromNode:(FSNode *)anode { FSNode *parent = [FSNode nodeWithPath: [anode parentPath]]; [self showContentsOfNode: parent]; } - (void)repSelected:(id)arep { } - (void)unselectOtherReps:(id)arep { NSUInteger i; if (selectionMask & FSNMultipleSelectionMask) { return; } for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if (icon != arep) { [icon unselect]; } } } - (void)selectReps:(NSArray *)reps { NSUInteger i; selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; for (i = 0; i < [reps count]; i++) { [[reps objectAtIndex: i] select]; } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)selectRepsOfSubnodes:(NSArray *)nodes { NSUInteger i; selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([nodes containsObject: [icon node]]) { [icon select]; } } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)selectRepsOfPaths:(NSArray *)paths { NSUInteger i; selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([paths containsObject: [[icon node] path]]) { [icon select]; } } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)selectAll { NSUInteger i; selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; FSNode *inode = [icon node]; if ([inode isReserved] == NO) { [icon select]; } } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)scrollSelectionToVisible { NSArray *selection = [self selectedReps]; if ([selection count]) { [self scrollIconToVisible: [selection objectAtIndex: 0]]; } else { NSRect r = [self frame]; [self scrollRectToVisible: NSMakeRect(0, r.size.height - 1, 1, 1)]; } } - (NSArray *)reps { return icons; } - (NSArray *)selectedReps { NSMutableArray *selectedReps = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) [selectedReps addObject: icon]; } return [selectedReps makeImmutableCopyOnFail: NO]; } - (NSArray *)selectedNodes { NSMutableArray *selectedNodes = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { NSArray *selection = [icon selection]; if (selection) { [selectedNodes addObjectsFromArray: selection]; } else { [selectedNodes addObject: [icon node]]; } } } return [selectedNodes makeImmutableCopyOnFail: NO]; } - (NSArray *)selectedPaths { NSMutableArray *selectedPaths = [NSMutableArray array]; NSUInteger i, j; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { NSArray *selection = [icon selection]; if (selection) { for (j = 0; j < [selection count]; j++) { [selectedPaths addObject: [[selection objectAtIndex: j] path]]; } } else { [selectedPaths addObject: [[icon node] path]]; } } } return [selectedPaths makeImmutableCopyOnFail: NO]; } - (void)selectionDidChange { if (!(selectionMask & FSNCreatingSelectionMask)) { NSArray *selection = [self selectedNodes]; if ([selection count] == 0) { selection = [NSArray arrayWithObject: node]; } if ((lastSelection == nil) || ([selection isEqual: lastSelection] == NO)) { ASSIGN (lastSelection, selection); [desktopApp selectionChanged: selection]; } [self updateNameEditor]; } } - (void)checkLockedReps { NSUInteger i; for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] checkLocked]; } } - (void)setSelectionMask:(FSNSelectionMask)mask { selectionMask = mask; } - (FSNSelectionMask)selectionMask { return selectionMask; } - (void)openSelectionInNewViewer:(BOOL)newv { [desktopApp openSelectionInNewViewer: newv]; } - (void)restoreLastSelection { if (lastSelection) { [self selectRepsOfSubnodes: lastSelection]; } } - (void)setLastShownNode:(FSNode *)anode { } - (BOOL)needsDndProxy { return NO; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { return [node involvedByFileOperation: opinfo]; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { NSString *nodePath = [node path]; NSString *prePath = [NSString stringWithString: nodePath]; NSString *basePath; if ([names count] == 0) { return NO; } if ([node isWritable] == NO) { return NO; } basePath = [[names objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NO; } if ([names containsObject: nodePath]) { return NO; } while (1) { if ([names containsObject: prePath]) { return NO; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } return YES; } - (void)setBackgroundColor:(NSColor *)acolor { ASSIGN (backColor, acolor); [[self window] setBackgroundColor: backColor]; [self setNeedsDisplay: YES]; } - (NSColor *)backgroundColor { return backColor; } - (void)setTextColor:(NSColor *)acolor { NSUInteger i; for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] setLabelTextColor: acolor]; } [nameEditor setTextColor: acolor]; ASSIGN (textColor, acolor); } - (NSColor *)textColor { return textColor; } - (NSColor *)disabledTextColor { return disabledTextColor; } @end @implementation FSNIconsView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *basePath; NSString *nodePath; NSString *prePath; NSUInteger count; isDragTarget = NO; pb = [sender draggingPasteboard]; if (pb && [[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) { return NSDragOperationNone; } if ([node isWritable] == NO) { return NSDragOperationNone; } nodePath = [node path]; basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (1) { if ([sourcePaths containsObject: prePath]) { return NSDragOperationNone; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: basePath]) { NSArray *subNodes = [node subNodes]; NSUInteger i; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { NSUInteger j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } isDragTarget = YES; forceCopy = NO; sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: basePath]) { return NSDragOperationMove; } forceCopy = YES; return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSRect vr = [self visibleRect]; NSRect scr = vr; int xsc = 0.0; int ysc = 0.0; int sc = 0; float margin = 4.0; NSRect ir = NSInsetRect(vr, margin, margin); NSPoint p = [sender draggingLocation]; int i; p = [self convertPoint: p fromView: nil]; if ([self mouse: p inRect: ir] == NO) { if (p.x < (NSMinX(vr) + margin)) { xsc = -gridSize.width; } else if (p.x > (NSMaxX(vr) - margin)) { xsc = gridSize.width; } if (p.y < (NSMinY(vr) + margin)) { ysc = -gridSize.height; } else if (p.y > (NSMaxY(vr) - margin)) { ysc = gridSize.height; } sc = (abs(xsc) >= abs(ysc)) ? xsc : ysc; for (i = 0; i < (int)fabsf(sc / margin); i++) { CREATE_AUTORELEASE_POOL (pool); NSDate *limit = [NSDate dateWithTimeIntervalSinceNow: 0.01]; int x = (abs(xsc) >= i) ? (xsc > 0 ? margin : -margin) : 0; int y = (abs(ysc) >= i) ? (ysc > 0 ? margin : -margin) : 0; scr = NSOffsetRect(scr, x, y); [self scrollRectToVisible: scr]; vr = [self visibleRect]; ir = NSInsetRect(vr, margin, margin); p = [[self window] mouseLocationOutsideOfEventStream]; p = [self convertPoint: p fromView: nil]; if ([self mouse: p inRect: ir]) { RELEASE (pool); break; } [[NSRunLoop currentRunLoop] runUntilDate: limit]; RELEASE (pool); } } if (isDragTarget == NO) { return NSDragOperationNone; } if (sourceDragMask & NSDragOperationMove) { return forceCopy ? NSDragOperationCopy : NSDragOperationMove; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *operation; NSString *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSUInteger i; isDragTarget = NO; operation = nil; sourceDragMask = [sender draggingSourceOperationMask]; pb = [sender draggingPasteboard]; if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [node path]]; return; } if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [node path]]; return; } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([sourcePaths count] == 0) { return; } source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } else if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask / NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } } files = [NSMutableArray array]; for(i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } opDict = [NSMutableDictionary dictionary]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [node path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } @end @implementation FSNIconsView (IconNameEditing) - (void)updateNameEditor { [self stopRepNameEditing]; if (lastSelection && ([lastSelection count] == 1)) { editIcon = [self repOfSubnode: [lastSelection objectAtIndex: 0]]; } if (editIcon) { FSNode *ednode = [editIcon node]; NSString *nodeDescr = [editIcon shownInfo]; NSRect icnr = [editIcon frame]; NSRect labr = [editIcon labelRect]; NSCellImagePosition ipos = [editIcon iconPosition]; int margin = [fsnodeRep labelMargin]; float bw = [self bounds].size.width - EDIT_MARGIN; float edwidth = 0.0; NSRect edrect; [editIcon setNameEdited: YES]; edwidth = [[nameEditor font] widthOfString: nodeDescr]; edwidth += margin; if (ipos == NSImageAbove) { float centerx = icnr.origin.x + (icnr.size.width / 2); if ((centerx + (edwidth / 2)) >= bw) { centerx -= (centerx + (edwidth / 2) - bw); } else if ((centerx - (edwidth / 2)) < margin) { centerx += fabs(centerx - (edwidth / 2)) + margin; } edrect = [self convertRect: labr fromView: editIcon]; edrect.origin.x = centerx - (edwidth / 2); edrect.size.width = edwidth; } else if (ipos == NSImageLeft) { edrect = [self convertRect: labr fromView: editIcon]; edrect.size.width = edwidth; if ((edrect.origin.x + edwidth) >= bw) { edrect.size.width = bw - edrect.origin.x; } } else { NSLog(@"Unexpected icon position in [FSNIconsView updateNameEditor]"); return; } edrect = NSIntegralRect(edrect); [nameEditor setFrame: edrect]; if (ipos == NSImageAbove) { [nameEditor setAlignment: NSCenterTextAlignment]; } else if (ipos == NSImageLeft) { [nameEditor setAlignment: NSLeftTextAlignment]; } [nameEditor setNode: ednode stringValue: nodeDescr]; [nameEditor setBackgroundColor: [NSColor selectedControlColor]]; if ([editIcon isLocked] == NO) { [nameEditor setTextColor: [NSColor controlTextColor]]; } else { [nameEditor setTextColor: [NSColor disabledControlTextColor]]; } [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [self addSubview: nameEditor]; } } - (void)setNameEditorForRep:(id)arep { } - (void)stopRepNameEditing { NSUInteger i; if ([[self subviews] containsObject: nameEditor]) { NSRect edrect = [nameEditor frame]; [nameEditor abortEditing]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [nameEditor setNode: nil stringValue: @""]; [nameEditor removeFromSuperview]; [self setNeedsDisplayInRect: edrect]; } for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] setNameEdited: NO]; } editIcon = nil; } - (BOOL)canStartRepNameEditing { return (editIcon && ([editIcon isLocked] == NO) && ([[editIcon node] isMountPoint] == NO)); } - (void)controlTextDidChange:(NSNotification *)aNotification { NSRect icnr = [editIcon frame]; NSCellImagePosition ipos = [editIcon iconPosition]; float edwidth = [[nameEditor font] widthOfString: [nameEditor stringValue]]; int margin = [fsnodeRep labelMargin]; float bw = [self bounds].size.width - EDIT_MARGIN; NSRect edrect = [nameEditor frame]; edwidth += margin; if (ipos == NSImageAbove) { float centerx = icnr.origin.x + (icnr.size.width / 2); while ((centerx + (edwidth / 2)) > bw) { centerx --; if (centerx < EDIT_MARGIN) { break; } } while ((centerx - (edwidth / 2)) < EDIT_MARGIN) { centerx ++; if (centerx >= bw) { break; } } edrect.origin.x = centerx - (edwidth / 2); edrect.size.width = edwidth; } else if (ipos == NSImageLeft) { edrect.size.width = edwidth; if ((edrect.origin.x + edwidth) >= bw) { edrect.size.width = bw - edrect.origin.x; } } [self setNeedsDisplayInRect: [nameEditor frame]]; [nameEditor setFrame: NSIntegralRect(edrect)]; } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { FSNode *ednode = [nameEditor node]; #define CLEAREDITING \ [self stopRepNameEditing]; \ return if ([ednode isParentWritable] == NO) { showAlertNoPermission([FSNode class], [ednode parentName]); CLEAREDITING; } else if ([ednode isSubnodeOfPath: [desktopApp trashPath]]) { showAlertInRecycler([FSNode class]); CLEAREDITING; } else { NSString *newname = [nameEditor stringValue]; NSString *newpath = [[ednode parentPath] stringByAppendingPathComponent: newname]; NSString *extension = [newpath pathExtension]; NSCharacterSet *notAllowSet = [NSCharacterSet characterSetWithCharactersInString: @"/\\*:?\33"]; NSRange range = [newname rangeOfCharacterFromSet: notAllowSet]; NSArray *dirContents = [ednode subNodeNamesOfParent]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; if (([newname length] == 0) || (range.length > 0)) { showAlertInvalidName([FSNode class]); CLEAREDITING; } if (([extension length] && ([ednode isDirectory] && ([ednode isPackage] == NO)))) { if (showAlertExtensionChange([FSNode class], extension) == NSAlertDefaultReturn) { CLEAREDITING; } } if ([dirContents containsObject: newname]) { if ([newname isEqual: [ednode name]]) { CLEAREDITING; } else { showAlertNameInUse([FSNode class], newname); CLEAREDITING; } } [opinfo setObject: @"GWorkspaceRenameOperation" forKey: @"operation"]; [opinfo setObject: [ednode path] forKey: @"source"]; [opinfo setObject: newpath forKey: @"destination"]; [opinfo setObject: [NSArray arrayWithObject: @""] forKey: @"files"]; [self stopRepNameEditing]; [desktopApp performFileOperation: opinfo]; } } @end gworkspace-1.1.0/FSNode/FSNListView.h0000644000175000001440000002375714751213523016544 0ustar multixusers/* FSNListView.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: December 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_LIST_VIEW_H #define FSN_LIST_VIEW_H #import #import #import #import "FSNodeRep.h" @class NSTableColumn; @class FSNListView; @class FSNListViewNodeRep; @class FSNListViewNameEditor; @interface FSNListViewDataSource : NSObject { FSNListView *listView; FSNode *node; NSMutableArray *nodeReps; FSNInfoType hlighColId; NSString *extInfoType; NSArray *lastSelection; NSUInteger mouseFlags; BOOL isDragTarget; BOOL forceCopy; FSNListViewNodeRep *dndTarget; unsigned int dragOperation; NSRect dndValidRect; FSNListViewNameEditor *nameEditor; FSNodeRep *fsnodeRep; id desktopApp; } - (id)initForListView:(FSNListView *)aview; - (FSNode *)infoNode; - (BOOL)keepsColumnsInfo; - (void)createColumns:(NSDictionary *)info; - (void)addColumn:(NSDictionary *)info; - (void)removeColumnWithIdentifier:(NSNumber *)identifier; - (NSDictionary *)columnsDescription; - (void)sortNodeReps; - (void)setMouseFlags:(NSUInteger)flags; - (void)doubleClickOnListView:(id)sender; - (void)selectRep:(id)aRep; - (void)unselectRep:(id)aRep; - (void)selectIconOfRep:(id)aRep; - (void)unSelectIconsOfRepsDifferentFrom:(id)aRep; - (void)selectRepInPrevRow; - (void)selectRepInNextRow; - (NSString *)selectRepWithPrefix:(NSString *)prefix; - (void)redisplayRep:(id)aRep; - (id)desktopApp; @end @interface FSNListViewDataSource (NSTableViewDataSource) - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView; - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; - (BOOL)tableView:(NSTableView *)aTableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard; - (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id )info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation; - (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id )info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation; // // NSTableView delegate methods // - (void)tableViewSelectionDidChange:(NSNotification *)aNotification; - (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex; - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; - (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn; - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows; - (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; @end @interface FSNListViewDataSource (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode; - (NSDictionary *)readNodeInfo; - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk; - (void)reloadContents; - (void)reloadFromNode:(FSNode *)anode; - (FSNode *)baseNode; - (FSNode *)shownNode; - (BOOL)isShowingNode:(FSNode *)anode; - (BOOL)isShowingPath:(NSString *)path; - (void)sortTypeChangedAtPath:(NSString *)path; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)setShowType:(FSNInfoType)type; - (void)setExtendedShowType:(NSString *)type; - (FSNInfoType)showType; - (id)repOfSubnode:(FSNode *)anode; - (id)repOfSubnodePath:(NSString *)apath; - (id)addRepForSubnode:(FSNode *)anode; - (void)removeRepOfSubnode:(FSNode *)anode; - (void)removeRepOfSubnodePath:(NSString *)apath; - (void)unloadFromNode:(FSNode *)anode; - (void)unselectOtherReps:(id)arep; - (void)selectReps:(NSArray *)reps; - (void)selectRepsOfSubnodes:(NSArray *)nodes; - (void)selectRepsOfPaths:(NSArray *)paths; - (void)selectAll; - (void)scrollSelectionToVisible; - (NSArray *)reps; - (NSArray *)selectedReps; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)selectionDidChange; - (void)checkLockedReps; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)setLastShownNode:(FSNode *)anode; - (BOOL)needsDndProxy; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut; - (void)stopRepNameEditing; @end @interface FSNListViewDataSource (RepNameEditing) - (void)setEditorAtRow:(int)row withMouseDownEvent: (NSEvent *)anEvent; - (void)controlTextDidChange:(NSNotification *)aNotification; - (void)controlTextDidEndEditing:(NSNotification *)aNotification; @end @interface FSNListViewDataSource (DraggingDestination) - (BOOL)checkDraggingLocation:(NSPoint)loc; - (NSDragOperation)checkReturnValueForRep:(FSNListViewNodeRep *)arep withDraggingInfo:(id )sender; - (NSDragOperation)listViewDraggingEntered:(id )sender; - (NSDragOperation)listViewDraggingUpdated:(id )sender; - (void)listViewDraggingExited:(id )sender; - (BOOL)listViewPrepareForDragOperation:(id )sender; - (BOOL)listViewPerformDragOperation:(id )sender; - (void)listViewConcludeDragOperation:(id )sender; @end @interface FSNListViewNodeRep : NSObject { FSNode *node; NSImage *icon; NSImage *openicon; NSImage *lockedicon; NSImage *spopenicon; NSString *extInfoStr; BOOL isLocked; BOOL iconSelected; BOOL isOpened; BOOL wasOpened; BOOL nameEdited; BOOL isDragTarget; BOOL forceCopy; FSNListViewDataSource *dataSource; FSNodeRep *fsnodeRep; } - (id)initForNode:(FSNode *)anode dataSource:(FSNListViewDataSource *)fsnds; - (NSImage *)icon; - (NSImage *)openIcon; - (NSImage *)lockedIcon; - (NSImage *)spatialOpenIcon; - (BOOL)selectIcon:(BOOL)value; - (BOOL)iconSelected; @end @interface FSNListViewNodeRep (DraggingDestination) - (NSDragOperation)repDraggingEntered:(id )sender; - (void)repConcludeDragOperation:(id )sender; @end @interface FSNListViewNameEditor : NSTextField { FSNode *node; int index; } - (void)setNode:(FSNode *)anode stringValue:(NSString *)str index:(int)idx; - (FSNode *)node; - (int)index; @end @interface FSNListView : NSTableView { id dsource; NSString *charBuffer; NSTimeInterval lastKeyPressedTime; NSTimer *clickTimer; } - (id)initWithFrame:(NSRect)frameRect dataSourceClass:(Class)dsclass; - (void)checkSize; @end @interface NSObject (FSNListViewDelegateMethods) - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows; @end @interface FSNListView (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode; - (NSDictionary *)readNodeInfo; - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk; - (void)reloadContents; - (void)reloadFromNode:(FSNode *)anode; - (FSNode *)baseNode; - (FSNode *)shownNode; - (BOOL)isSingleNode; - (BOOL)isShowingNode:(FSNode *)anode; - (BOOL)isShowingPath:(NSString *)path; - (void)sortTypeChangedAtPath:(NSString *)path; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)setShowType:(FSNInfoType)type; - (void)setExtendedShowType:(NSString *)type; - (FSNInfoType)showType; - (id)repOfSubnode:(FSNode *)anode; - (id)repOfSubnodePath:(NSString *)apath; - (id)addRepForSubnode:(FSNode *)anode; - (void)removeRepOfSubnode:(FSNode *)anode; - (void)removeRepOfSubnodePath:(NSString *)apath; - (void)unloadFromNode:(FSNode *)anode; - (void)unselectOtherReps:(id)arep; - (void)selectReps:(NSArray *)reps; - (void)selectRepsOfSubnodes:(NSArray *)nodes; - (void)selectRepsOfPaths:(NSArray *)paths; - (void)selectAll; - (void)scrollSelectionToVisible; - (NSArray *)reps; - (NSArray *)selectedReps; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)selectionDidChange; - (void)checkLockedReps; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)setLastShownNode:(FSNode *)anode; - (BOOL)needsDndProxy; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut; - (void)stopRepNameEditing; @end @interface FSNListView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end @interface NSDictionary (TableColumnSort) - (NSComparisonResult)compareTableColumnInfo:(NSDictionary *)info; @end #endif // FSN_LIST_VIEW_H gworkspace-1.1.0/FSNode/FSNListView.m0000644000175000001440000020625314751213523016543 0ustar multixusers/* FSNListView.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: December 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #import #import #import "FSNListView.h" #import "FSNTextCell.h" #import "FSNFunctions.h" #define ICNSIZE (24) #define CELLS_HEIGHT (28.0) #define HLIGHT_H_FACT (0.8125) #define DOUBLE_CLICK_LIMIT 300 #define EDIT_CLICK_LIMIT 1000 static NSString *defaultColumns = @"{ \ <*I0> = { \ position = <*I0>; \ identifier = <*I0>; \ width = <*R140>; \ minwidth = <*R80>; \ }; \ <*I2> = { \ position = <*I1>; \ identifier = <*I2>; \ width = <*R90>; \ minwidth = <*R80>; \ }; \ <*I3> = { \ position = <*I2>; \ identifier = <*I3>; \ width = <*R50>; \ minwidth = <*R50>; \ }; \ <*I1> = { \ position = <*I3>; \ identifier = <*I1>; \ width = <*R90>; \ minwidth = <*R80>; \ }; \ }"; @implementation FSNListViewDataSource - (void)dealloc { RELEASE (node); RELEASE (extInfoType); RELEASE (nodeReps); RELEASE (nameEditor); RELEASE (lastSelection); [super dealloc]; } - (id)initForListView:(FSNListView *)aview { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; id defentry; listView = aview; fsnodeRep = [FSNodeRep sharedInstance]; if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } defentry = [defaults objectForKey: @"hligh_table_col"]; hlighColId = defentry ? [defentry intValue] : FSNInfoNameType; extInfoType = nil; defentry = [defaults objectForKey: @"extended_info_type"]; if (defentry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: defentry]) { ASSIGN (extInfoType, defentry); } } nodeReps = [NSMutableArray new]; nameEditor = [FSNListViewNameEditor new]; [nameEditor setDelegate: self]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [nameEditor setBezeled: NO]; [nameEditor setAlignment: NSLeftTextAlignment]; mouseFlags = 0; isDragTarget = NO; } return self; } - (FSNode *)infoNode { return node; } - (BOOL)keepsColumnsInfo { return NO; } - (void)createColumns:(NSDictionary *)info { NSArray *keys = [info keysSortedByValueUsingSelector: @selector(compareTableColumnInfo:)]; NSTableColumn *column; NSUInteger i; for (i = 0; i < [keys count]; i++) { [self addColumn: [info objectForKey: [keys objectAtIndex: i]]]; } column = [listView tableColumnWithIdentifier: [NSNumber numberWithInt: hlighColId]]; if (column) { [listView setHighlightedTableColumn: column]; } } - (void)addColumn:(NSDictionary *)info { NSNumber *identifier = [info objectForKey: @"identifier"]; FSNInfoType type = [identifier intValue]; float width = [[info objectForKey: @"width"] floatValue]; float minwidth = [[info objectForKey: @"minwidth"] floatValue]; NSTableColumn *column = [(NSTableColumn *)[NSTableColumn alloc] initWithIdentifier: identifier]; [column setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [column setEditable: NO]; [column setResizable: YES]; [[column headerCell] setAlignment: NSLeftTextAlignment]; [column setMinWidth: minwidth]; [column setWidth: width]; switch(type) { case FSNInfoNameType: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Name", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; case FSNInfoKindType: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Type", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; case FSNInfoDateType: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Date Modified", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; case FSNInfoSizeType: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Size", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; case FSNInfoOwnerType: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Owner", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; case FSNInfoParentType: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Parent", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; case FSNInfoExtendedType: [[column headerCell] setStringValue: extInfoType]; /* should come Localized from the ExtInfo bundle */ break; default: [[column headerCell] setStringValue: NSLocalizedStringFromTableInBundle(@"Name", nil, [NSBundle bundleForClass:[FSNode class]], @"")]; break; } [listView addTableColumn: column]; RELEASE (column); } - (void)removeColumnWithIdentifier:(NSNumber *)identifier { if ([identifier intValue] != FSNInfoNameType) { NSTableColumn *column = [listView tableColumnWithIdentifier: identifier]; if (column) { [listView removeTableColumn: column]; hlighColId = FSNInfoNameType; [self sortNodeReps]; [listView reloadData]; } } } - (NSDictionary *)columnsDescription { NSArray *columns = [listView tableColumns]; NSMutableDictionary *colsinfo = [NSMutableDictionary dictionary]; if (columns) { NSUInteger i; for (i = 0; i < [columns count]; i++) { NSTableColumn *column = [columns objectAtIndex: i]; NSNumber *identifier = [column identifier]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: [NSNumber numberWithInt: i] forKey: @"position"]; [dict setObject: identifier forKey: @"identifier"]; [dict setObject: [NSNumber numberWithFloat: [column width]] forKey: @"width"]; [dict setObject: [NSNumber numberWithFloat: [column minWidth]] forKey: @"minwidth"]; [colsinfo setObject: dict forKey: [identifier stringValue]]; } } return colsinfo; } - (void)sortNodeReps { NSTableColumn *column; if (hlighColId != FSNInfoExtendedType) { SEL sortingSel; switch(hlighColId) { case FSNInfoNameType: sortingSel = @selector(compareAccordingToName:); break; case FSNInfoKindType: sortingSel = @selector(compareAccordingToKind:); break; case FSNInfoDateType: sortingSel = @selector(compareAccordingToDate:); break; case FSNInfoSizeType: sortingSel = @selector(compareAccordingToSize:); break; case FSNInfoOwnerType: sortingSel = @selector(compareAccordingToOwner:); break; default: sortingSel = @selector(compareAccordingToName:); break; } [nodeReps sortUsingSelector: sortingSel]; } else { [nodeReps sortUsingFunction: compareWithExtType context: (void *)NULL]; } column = [listView tableColumnWithIdentifier: [NSNumber numberWithInt: hlighColId]]; if (column) { [listView setHighlightedTableColumn: column]; } } - (void)setMouseFlags:(NSUInteger)flags { mouseFlags = flags; } - (void)doubleClickOnListView:(id)sender { [self openSelectionInNewViewer: NO]; } - (void)selectRep:(id)aRep { [self selectReps: [NSArray arrayWithObject: aRep]]; } - (void)unselectRep:(id)aRep { [listView deselectRow: [nodeReps indexOfObjectIdenticalTo: aRep]]; } - (void)selectIconOfRep:(id)aRep { if ([aRep selectIcon: YES]) { [self redisplayRep: aRep]; [self unSelectIconsOfRepsDifferentFrom: aRep]; } } - (void)unSelectIconsOfRepsDifferentFrom:(id)aRep { NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ((rep != aRep) && [rep selectIcon: NO]) { [self redisplayRep: rep]; } } } - (void)selectRepInPrevRow { NSInteger row = [listView selectedRow]; if ((row != -1) && (row > 0)) { row--; [listView selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection: NO]; [listView scrollRowToVisible: row]; } } - (void)selectRepInNextRow { NSInteger row = [listView selectedRow]; if ((row != -1) && (row < ([nodeReps count] -1))) { row++; [listView selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection: NO]; [listView scrollRowToVisible: row]; } } - (NSString *)selectRepWithPrefix:(NSString *)prefix { NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; NSString *name = [[rep node] name]; if ([name hasPrefix: prefix]) { [listView deselectAll: self]; [self selectReps: [NSArray arrayWithObject: rep]]; [listView scrollRowToVisible: i]; return name; } } return nil; } - (void)redisplayRep:(id)aRep { NSUInteger row = [nodeReps indexOfObjectIdenticalTo: aRep]; NSRect rect = [listView rectOfRow: row]; [listView setNeedsDisplayInRect: rect]; } - (id)desktopApp { return desktopApp; } @end @implementation FSNListViewDataSource (NSTableViewDataSource) - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [nodeReps count]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { FSNInfoType ident = [[aTableColumn identifier] intValue]; FSNListViewNodeRep *rep = [nodeReps objectAtIndex: rowIndex]; FSNode *nd = [rep node]; switch(ident) { case FSNInfoNameType: return [nd name]; break; case FSNInfoKindType: return [nd typeDescription]; break; case FSNInfoDateType: return [nd modDateDescription]; break; case FSNInfoSizeType: return [nd sizeDescription]; break; case FSNInfoOwnerType: return [nd owner]; break; case FSNInfoParentType: return [nd parentName]; break; case FSNInfoExtendedType: return [rep shownInfo]; break; default: return [nd name]; break; } return [NSString string]; } - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { } - (BOOL)tableView:(NSTableView *)aTableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard { NSMutableArray *paths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [rows count]; i++) { NSInteger index = [[rows objectAtIndex: i] integerValue]; FSNListViewNodeRep *rep = [nodeReps objectAtIndex: index]; [paths addObject: [[rep node] path]]; } [pboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; [pboard setPropertyList: paths forType: NSFilenamesPboardType]; return YES; } - (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id )info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation { return NSDragOperationNone; } - (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id )info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation { return NO; } // // NSTableView delegate methods // - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { [self selectionDidChange]; } - (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex { return ((rowIndex != -1) && ([[nodeReps objectAtIndex: rowIndex] isLocked] == NO)); } - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { FSNInfoType ident = [[aTableColumn identifier] intValue]; FSNTextCell *cell = (FSNTextCell *)[aTableColumn dataCell]; FSNListViewNodeRep *rep = [nodeReps objectAtIndex: rowIndex]; if (ident == FSNInfoNameType) { if ([rep iconSelected]) { [cell setIcon: [rep openIcon]]; } else if ([rep isLocked]) { [cell setIcon: [rep lockedIcon]]; } else if ([rep isOpened]) { [cell setIcon: [rep spatialOpenIcon]]; } else { [cell setIcon: [rep icon]]; } } else if (ident == FSNInfoDateType) { [cell setDateCell: YES]; } if ([rep isLocked]) { [cell setTextColor: [NSColor disabledControlTextColor]]; } else { [cell setTextColor: [NSColor controlTextColor]]; } } - (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn { FSNInfoType newOrder = [[tableColumn identifier] intValue]; if (newOrder != hlighColId) { NSArray *selected = [self selectedReps]; [listView deselectAll: self]; hlighColId = newOrder; [self sortNodeReps]; [listView reloadData]; if ([selected count]) { id rep = [selected objectAtIndex: 0]; NSUInteger index = [nodeReps indexOfObjectIdenticalTo: rep]; [self selectReps: selected]; if (index != NSNotFound) { [listView scrollRowToVisible: index]; } } } [listView setHighlightedTableColumn: tableColumn]; } - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows { if ([dragRows count] > 1) { return [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: 24]; } else { NSUInteger index = [[dragRows objectAtIndex: 0] unsignedIntegerValue]; return [[nodeReps objectAtIndex: index] icon]; } return nil; } - (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { return NO; } @end @implementation FSNListViewDataSource (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode { NSDictionary *info = nil; NSDictionary *colsInfo = nil; NSDictionary *colsDescr; NSArray *nodes; BOOL keepinfo; NSUInteger i; keepinfo = (node && ([self keepsColumnsInfo] || [node isEqual: anode])); ASSIGN (node, anode); if (keepinfo == NO) { info = [self readNodeInfo]; if (info) { colsInfo = [info objectForKey: @"list_view_columns"]; } if ((colsInfo == nil) || ([colsInfo count] == 0)) { colsInfo = [defaultColumns propertyList]; } colsDescr = [self columnsDescription]; if ([colsDescr count] == 0) { [self createColumns: colsInfo]; } else if ([colsDescr isEqual: colsInfo] == NO) { while ([listView numberOfColumns] > 0) { [listView removeTableColumn: [[listView tableColumns] objectAtIndex: 0]]; } [self createColumns: colsInfo]; } } [listView deselectAll: self]; nodes = [anode subNodes]; [nodeReps removeAllObjects]; for (i = 0; i < [nodes count]; i++) { [self addRepForSubnode: [nodes objectAtIndex: i]]; } [self sortNodeReps]; [listView reloadData]; DESTROY (lastSelection); [self selectionDidChange]; } - (NSDictionary *)readNodeInfo { FSNode *infoNode = [self infoNode]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [infoNode path]]; NSDictionary *nodeDict = nil; if ([infoNode isWritable] && ([[fsnodeRep volumes] containsObject: [node path]] == NO)) { NSString *infoPath = [[infoNode path] stringByAppendingPathComponent: @".gwdir"]; if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { nodeDict = [NSDictionary dictionaryWithDictionary: dict]; } } } if (nodeDict == nil) { id defEntry = [defaults dictionaryForKey: prefsname]; if (defEntry) { nodeDict = [NSDictionary dictionaryWithDictionary: defEntry]; } } if (nodeDict) { id entry = [nodeDict objectForKey: @"hligh_table_col"]; hlighColId = entry ? [entry intValue] : hlighColId; entry = [nodeDict objectForKey: @"ext_info_type"]; if (entry) { NSArray *availableTypes = [[FSNodeRep sharedInstance] availableExtendedInfoNames]; if ([availableTypes containsObject: entry]) { ASSIGN (extInfoType, entry); } } } return nodeDict; } - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk { CREATE_AUTORELEASE_POOL(arp); FSNode *infoNode = [self infoNode]; NSMutableDictionary *updatedInfo = nil; if ([infoNode isValid]) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", [infoNode path]]; NSString *infoPath = [[infoNode path] stringByAppendingPathComponent: @".gwdir"]; BOOL writable = ([infoNode isWritable] && ([[fsnodeRep volumes] containsObject: [node path]] == NO)); if (writable) { if ([[NSFileManager defaultManager] fileExistsAtPath: infoPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infoPath]; if (dict) { updatedInfo = [dict mutableCopy]; } } } else { NSDictionary *prefs = [defaults dictionaryForKey: prefsname]; if (prefs) { updatedInfo = [prefs mutableCopy]; } } if (updatedInfo == nil) { updatedInfo = [NSMutableDictionary new]; } [updatedInfo setObject: [self columnsDescription] forKey: @"list_view_columns"]; [updatedInfo setObject: [NSNumber numberWithInt: hlighColId] forKey: @"hligh_table_col"]; if (extInfoType) { [updatedInfo setObject: extInfoType forKey: @"ext_info_type"]; } if (ondisk) { if (writable) { [updatedInfo writeToFile: infoPath atomically: YES]; } else { [defaults setObject: updatedInfo forKey: prefsname]; } } } RELEASE (arp); return (AUTORELEASE (updatedInfo)); } - (void)reloadContents { CREATE_AUTORELEASE_POOL (pool); NSMutableArray *selection = [[self selectedNodes] mutableCopy]; NSMutableArray *opennodes = [NSMutableArray array]; NSUInteger i, count; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ([rep isOpened]) { [opennodes addObject: [rep node]]; } } RETAIN (opennodes); [self showContentsOfNode: node]; count = [selection count]; for (i = 0; i < count; i++) { FSNode *nd = [selection objectAtIndex: i]; if ([nd isValid] == NO) { [selection removeObjectAtIndex: i]; count--; i--; } } for (i = 0; i < [opennodes count]; i++) { FSNode *nd = [opennodes objectAtIndex: i]; if ([nd isValid]) { FSNListViewNodeRep *rep = [self repOfSubnode: nd]; if (rep) { [rep setOpened: YES]; } } } RELEASE (opennodes); [self checkLockedReps]; if ([selection count]) { [self selectRepsOfSubnodes: selection]; } RELEASE (selection); [self selectionDidChange]; RELEASE (pool); } - (void)reloadFromNode:(FSNode *)anode { if ([node isEqual: anode]) { [self reloadContents]; } else if ([node isSubnodeOfNode: anode]) { NSArray *components = [FSNode nodeComponentsFromNode: anode toNode: node]; NSUInteger i; for (i = 0; i < [components count]; i++) { FSNode *component = [components objectAtIndex: i]; if ([component isValid] == NO) { component = [FSNode nodeWithPath: [component parentPath]]; [self showContentsOfNode: component]; break; } } } } - (FSNode *)baseNode { return node; } - (FSNode *)shownNode { return node; } - (BOOL)isShowingNode:(FSNode *)anode { return [node isEqual: anode]; } - (BOOL)isShowingPath:(NSString *)path { return [[node path] isEqual: path]; } - (void)sortTypeChangedAtPath:(NSString *)path { if ((path == nil) || [[node path] isEqual: path]) { [self reloadContents]; } } - (void)nodeContentsWillChange:(NSDictionary *)info { [self checkLockedReps]; } - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSString *ndpath = [node path]; BOOL needsreload = NO; NSUInteger i; [self stopRepNameEditing]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if (([ndpath isEqual: source] == NO) && ([ndpath isEqual: destination] == NO)) { [self reloadContents]; return; } if ([ndpath isEqual: source]) { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; [self removeRepOfSubnode: subnode]; } needsreload = YES; } } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if ([ndpath isEqual: destination] && ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"])) { if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"files"]; } for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; FSNListViewNodeRep *rep = [self repOfSubnode: subnode]; if (rep) { [rep setNode: subnode]; } else { [self addRepForSubnode: subnode]; } } needsreload = YES; } [self checkLockedReps]; if (needsreload) { [self sortNodeReps]; [listView reloadData]; if ([[listView window] isKeyWindow]) { if ([operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"]) { NSString *fname = [files objectAtIndex: 0]; NSString *fpath = [destination stringByAppendingPathComponent: fname]; FSNListViewNodeRep *rep = [self repOfSubnodePath: fpath]; if (rep) { NSUInteger index = [nodeReps indexOfObjectIdenticalTo: rep]; [self selectReps: [NSArray arrayWithObject: rep]]; [listView scrollRowToVisible: index]; } } } } [listView setNeedsDisplay: YES]; [self selectionDidChange]; } - (void)watchedPathChanged:(NSDictionary *)info { NSString *event = [info objectForKey: @"event"]; NSArray *files = [info objectForKey: @"files"]; NSString *ndpath = [node path]; BOOL needsreload = NO; int i; if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [ndpath stringByAppendingPathComponent: fname]; [self removeRepOfSubnodePath: fpath]; } needsreload = YES; } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; if (subnode && [subnode isValid]) { FSNListViewNodeRep *rep = [self repOfSubnode: subnode]; if (rep) { [rep setNode: subnode]; } else { [self addRepForSubnode: subnode]; } } } needsreload = YES; } [self sortNodeReps]; if (needsreload) { [listView deselectAll: self]; [listView reloadData]; } [listView setNeedsDisplay: YES]; [self selectionDidChange]; } // // Attenzione! I due metodi che seguono sono usati solo per aggiungere // o togliere colonne. Non hanno nessuna relazione con "hlighColId", // come invece avviene per gli altri NodeRepContainer. // "hlighColId" viene settato solo cliccando sulla headerCell // di una colonna. // - (void)setShowType:(FSNInfoType)type { NSNumber *num = [NSNumber numberWithInt: type]; NSTableColumn *column = [listView tableColumnWithIdentifier: num]; if (column == nil) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; float width, minwidth; switch(type) { case FSNInfoKindType: case FSNInfoOwnerType: width = 80.0; minwidth = 80.0; break; case FSNInfoDateType: case FSNInfoParentType: case FSNInfoExtendedType: width = 90.0; minwidth = 80.0; break; case FSNInfoSizeType: width = 50.0; minwidth = 50.0; break; default: width = 80.0; minwidth = 80.0; break; } [dict setObject: num forKey: @"identifier"]; [dict setObject: [NSNumber numberWithFloat: width] forKey: @"width"]; [dict setObject: [NSNumber numberWithFloat: minwidth] forKey: @"minwidth"]; [self addColumn: dict]; } else { [self removeColumnWithIdentifier: num]; } } - (void)setExtendedShowType:(NSString *)type { BOOL wasequal = (extInfoType && [extInfoType isEqual: type]); if (extInfoType) { NSNumber *num = [NSNumber numberWithInt: FSNInfoExtendedType]; NSTableColumn *column = [listView tableColumnWithIdentifier: num]; if (column) { [self removeColumnWithIdentifier: num]; } DESTROY (extInfoType); } if (wasequal == NO) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; int i; [dict setObject: [NSNumber numberWithInt: FSNInfoExtendedType] forKey: @"identifier"]; [dict setObject: [NSNumber numberWithFloat: 90.0] forKey: @"width"]; [dict setObject: [NSNumber numberWithFloat: 80.0] forKey: @"minwidth"]; ASSIGN (extInfoType, type); for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; [rep setExtendedShowType: extInfoType]; } [self addColumn: dict]; } } - (FSNInfoType)showType { return FSNInfoNameType; } - (id)repOfSubnode:(FSNode *)anode { NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ([[rep node] isEqual: anode]) { return rep; } } return nil; } - (id)repOfSubnodePath:(NSString *)apath { NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ([[[rep node] path] isEqual: apath]) { return rep; } } return nil; } - (id)addRepForSubnode:(FSNode *)anode { FSNListViewNodeRep *rep = [[FSNListViewNodeRep alloc] initForNode: anode dataSource: self]; [nodeReps addObject: rep]; RELEASE (rep); return rep; } - (void)removeRepOfSubnode:(FSNode *)anode { FSNListViewNodeRep *rep = [self repOfSubnode: anode]; if (rep) { [nodeReps removeObject: rep]; } } - (void)removeRepOfSubnodePath:(NSString *)apath { FSNListViewNodeRep *rep = [self repOfSubnodePath: apath]; if (rep) { [nodeReps removeObject: rep]; } } - (void)unloadFromNode:(FSNode *)anode { FSNode *parent = [FSNode nodeWithPath: [anode parentPath]]; [self showContentsOfNode: parent]; } - (void)unselectOtherReps:(id)arep { if (arep == nil) { [listView deselectAll: self]; [listView setNeedsDisplay: YES]; } } - (void)selectReps:(NSArray *)reps { NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; NSUInteger i; for (i = 0; i < [reps count]; i++) { FSNListViewNodeRep *rep = [reps objectAtIndex: i]; NSUInteger index = [nodeReps indexOfObjectIdenticalTo: rep]; if (index != NSNotFound) { [set addIndex: index]; } } if ([set count]) { [listView deselectAll: self]; [listView selectRowIndexes: set byExtendingSelection: NO]; [listView setNeedsDisplay: YES]; } } - (void)selectRepsOfSubnodes:(NSArray *)nodes { NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ([nodes containsObject: [rep node]]) { [set addIndex: i]; } } if ([set count]) { [listView deselectAll: self]; [listView selectRowIndexes: set byExtendingSelection: NO]; [listView setNeedsDisplay: YES]; } } - (void)selectRepsOfPaths:(NSArray *)paths { NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ([paths containsObject: [[rep node] path]]) { [set addIndex: i]; } } if ([set count]) { [listView deselectAll: self]; [listView selectRowIndexes: set byExtendingSelection: NO]; [listView setNeedsDisplay: YES]; } } - (void)selectAll { NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: i]; if ([[rep node] isReserved] == NO) { [set addIndex: i]; } } if ([set count]) { [listView deselectAll: self]; [listView selectRowIndexes: set byExtendingSelection: NO]; [listView setNeedsDisplay: YES]; } } - (void)scrollSelectionToVisible { NSArray *selected = [self selectedReps]; if ([selected count]) { id rep = [selected objectAtIndex: 0]; NSUInteger index = [nodeReps indexOfObjectIdenticalTo: rep]; [listView scrollRowToVisible: index]; } else if ([nodeReps count]) { [listView scrollRowToVisible: 0]; } } - (NSArray *)reps { return nodeReps; } - (NSArray *)selectedReps { NSIndexSet *set = [listView selectedRowIndexes]; NSMutableArray *selreps = [NSMutableArray array]; NSUInteger i; for (i = [set firstIndex]; i != NSNotFound; i = [set indexGreaterThanIndex: i]) { [selreps addObject: [nodeReps objectAtIndex: i]]; } return [NSArray arrayWithArray: selreps]; } - (NSArray *)selectedNodes { NSMutableArray *selnodes = [NSMutableArray array]; NSEnumerator *e = [[self selectedReps] objectEnumerator]; id rep; while ((rep = [e nextObject]) != nil) { [selnodes addObject: [rep node]]; } return [NSArray arrayWithArray: selnodes]; } - (NSArray *)selectedPaths { NSMutableArray *selpaths = [NSMutableArray array]; NSEnumerator *e = [[self selectedNodes] objectEnumerator]; id n; while ((n = [e nextObject]) != nil) { [selpaths addObject: [n path]]; } return [NSArray arrayWithArray: selpaths]; } - (void)selectionDidChange { NSArray *selection = [self selectedNodes]; if ([selection count] == 0) { selection = [NSArray arrayWithObject: node]; } if ((lastSelection == nil) || ([selection isEqual: lastSelection] == NO)) { ASSIGN (lastSelection, selection); [desktopApp selectionChanged: selection]; } } - (void)checkLockedReps { NSUInteger i; for (i = 0; i < [nodeReps count]; i++) { [[nodeReps objectAtIndex: i] checkLocked]; } } - (void)openSelectionInNewViewer:(BOOL)newv { [desktopApp openSelectionInNewViewer: newv]; } - (void)setLastShownNode:(FSNode *)anode { } - (BOOL)needsDndProxy { return YES; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { return [node involvedByFileOperation: opinfo]; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { NSString *nodePath = [node path]; NSString *prePath = [NSString stringWithString: nodePath]; NSString *basePath; if ([names count] == 0) { return NO; } if ([node isWritable] == NO) { return NO; } basePath = [[names objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NO; } if ([names containsObject: nodePath]) { return NO; } while (1) { if ([names containsObject: prePath]) { return NO; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } return YES; } - (void)stopRepNameEditing { if ([[listView subviews] containsObject: nameEditor]) { [nameEditor abortEditing]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [nameEditor setNode: nil stringValue: @"" index: -1]; [nameEditor removeFromSuperview]; [listView setNeedsDisplayInRect: [nameEditor frame]]; } } @end @implementation FSNListViewDataSource (RepNameEditing) - (void)setEditorAtRow:(int)row withMouseDownEvent: (NSEvent *)anEvent { [self stopRepNameEditing]; if ([[listView selectedRowIndexes] count] == 1) { FSNListViewNodeRep *rep = [nodeReps objectAtIndex: row]; FSNode *nd = [rep node]; BOOL canedit = (([rep isLocked] == NO) && ([nd isMountPoint] == NO)); if (canedit) { NSNumber *num = [NSNumber numberWithInt: FSNInfoNameType]; unsigned col = [listView columnWithIdentifier: num]; NSRect r = [listView frameOfCellAtColumn: col row: row]; NSFont *edfont = [nameEditor font]; float fnheight = [fsnodeRep heightOfFont: edfont]; float xshift = [[rep icon] size].width + 4; r.origin.y += ((r.size.height - fnheight) / 2); r.size.height = fnheight; r.origin.x += xshift; r.size.width -= xshift; r = NSIntegralRect(r); [nameEditor setFrame: r]; [nameEditor setNode: nd stringValue: [nd name] index: 0]; [listView addSubview: nameEditor]; if (anEvent != nil) { [nameEditor mouseDown: anEvent]; } } } } - (void)controlTextDidChange:(NSNotification *)aNotification { } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { FSNode *ednode = [nameEditor node]; #define CLEAREDITING \ [self stopRepNameEditing]; \ return if ([ednode isParentWritable] == NO) { showAlertNoPermission([FSNode class], [ednode parentName]); CLEAREDITING; } else if ([ednode isSubnodeOfPath: [desktopApp trashPath]]) { showAlertInRecycler([FSNode class]); CLEAREDITING; } else { NSString *newname = [nameEditor stringValue]; NSString *newpath = [[ednode parentPath] stringByAppendingPathComponent: newname]; NSString *extension = [newpath pathExtension]; NSCharacterSet *notAllowSet = [NSCharacterSet characterSetWithCharactersInString: @"/\\*:?\33"]; NSRange range = [newname rangeOfCharacterFromSet: notAllowSet]; NSArray *dirContents = [ednode subNodeNamesOfParent]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; if (([newname length] == 0) || (range.length > 0)) { showAlertInvalidName([FSNode class]); CLEAREDITING; } if (([extension length] && ([ednode isDirectory] && ([ednode isPackage] == NO)))) { if (showAlertExtensionChange([FSNode class], extension) == NSAlertDefaultReturn) { CLEAREDITING; } } if ([dirContents containsObject: newname]) { if ([newname isEqual: [ednode name]]) { CLEAREDITING; } else { showAlertNameInUse([FSNode class], newname); CLEAREDITING; } } [opinfo setObject: @"GWorkspaceRenameOperation" forKey: @"operation"]; [opinfo setObject: [ednode path] forKey: @"source"]; [opinfo setObject: newpath forKey: @"destination"]; [opinfo setObject: [NSArray arrayWithObject: @""] forKey: @"files"]; [self stopRepNameEditing]; [desktopApp performFileOperation: opinfo]; } } @end @implementation FSNListViewDataSource (DraggingDestination) - (BOOL)checkDraggingLocation:(NSPoint)loc { if (NSEqualRects(dndValidRect, NSZeroRect)) { NSNumber *num = [NSNumber numberWithInt: FSNInfoNameType]; unsigned col = [listView columnWithIdentifier: num]; dndValidRect = [listView rectOfColumn: col]; } return NSPointInRect(loc, dndValidRect); } - (NSDragOperation)checkReturnValueForRep:(FSNListViewNodeRep *)arep withDraggingInfo:(id )sender { if (dndTarget != arep) { dndTarget = arep; dragOperation = [dndTarget repDraggingEntered: sender]; if (dragOperation != NSDragOperationNone) { [self selectIconOfRep: dndTarget]; } else { [self unSelectIconsOfRepsDifferentFrom: nil]; } } return dragOperation; } - (NSDragOperation)listViewDraggingEntered:(id )sender { NSPoint location; NSInteger row; isDragTarget = NO; dndTarget = nil; dragOperation = NSDragOperationNone; dndValidRect = NSZeroRect; location = [[listView window] mouseLocationOutsideOfEventStream]; location = [listView convertPoint: location fromView: nil]; row = [listView rowAtPoint: location]; if (row != -1) { if ([self checkDraggingLocation: location]) { dndTarget = [nodeReps objectAtIndex: row]; dragOperation = [dndTarget repDraggingEntered: sender]; if (dragOperation != NSDragOperationNone) { [self selectIconOfRep: dndTarget]; } else { [self unSelectIconsOfRepsDifferentFrom: nil]; } } else { [self unSelectIconsOfRepsDifferentFrom: nil]; dragOperation = NSDragOperationNone; } } if (dragOperation == NSDragOperationNone) { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *basePath; NSString *nodePath; NSString *prePath; NSUInteger count; dndTarget = nil; isDragTarget = NO; pb = [sender draggingPasteboard]; if (pb && [[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) { return NSDragOperationNone; } if ([node isWritable] == NO) { return NSDragOperationNone; } nodePath = [node path]; basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (1) { if ([sourcePaths containsObject: prePath]) { return NSDragOperationNone; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: basePath]) { NSArray *subNodes = [node subNodes]; NSUInteger i; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { NSUInteger j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } isDragTarget = YES; forceCopy = NO; sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: basePath]) { return NSDragOperationMove; } forceCopy = YES; return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } } return dragOperation; } - (NSDragOperation)listViewDraggingUpdated:(id )sender { NSPoint location; NSInteger row; location = [[listView window] mouseLocationOutsideOfEventStream]; location = [listView convertPoint: location fromView: nil]; row = [listView rowAtPoint: location]; if (row != -1) { if ([self checkDraggingLocation: location]) { [self checkReturnValueForRep: [nodeReps objectAtIndex: row] withDraggingInfo: sender]; } else { [self unSelectIconsOfRepsDifferentFrom: nil]; dndTarget = nil; dragOperation = NSDragOperationNone; } } else { dndTarget = nil; dragOperation = NSDragOperationNone; } if (dragOperation == NSDragOperationNone) { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; dndTarget = nil; if (isDragTarget == NO) { return NSDragOperationNone; } if (sourceDragMask & NSDragOperationMove) { return forceCopy ? NSDragOperationCopy : NSDragOperationMove; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } } return dragOperation; } - (void)listViewDraggingExited:(id )sender { isDragTarget = NO; dndTarget = nil; dndValidRect = NSZeroRect; [self unSelectIconsOfRepsDifferentFrom: nil]; } - (BOOL)listViewPrepareForDragOperation:(id )sender { return ((dndTarget != nil) || isDragTarget); } - (BOOL)listViewPerformDragOperation:(id )sender { return ((dndTarget != nil) || isDragTarget); } - (void)listViewConcludeDragOperation:(id )sender { if (dndTarget) { [dndTarget repConcludeDragOperation: sender]; [self unSelectIconsOfRepsDifferentFrom: nil]; } else { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *operation; NSString *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSUInteger i; sourceDragMask = [sender draggingSourceOperationMask]; pb = [sender draggingPasteboard]; operation = nil; if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [node path]]; isDragTarget = NO; dndTarget = nil; dndValidRect = NSZeroRect; return; } if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [node path]]; isDragTarget = NO; dndTarget = nil; dndValidRect = NSZeroRect; return; } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([sourcePaths count] == 0) { isDragTarget = NO; dndTarget = nil; dndValidRect = NSZeroRect; return; } source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } else if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask & NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } } files = [NSMutableArray array]; for (i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } opDict = [NSMutableDictionary dictionary]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [node path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } isDragTarget = NO; dndTarget = nil; dndValidRect = NSZeroRect; } @end @implementation FSNListViewNodeRep - (void)dealloc { RELEASE (icon); RELEASE (openicon); RELEASE (lockedicon); RELEASE (spopenicon); RELEASE (extInfoStr); [super dealloc]; } - (id)initForNode:(FSNode *)anode dataSource:(FSNListViewDataSource *)fsnds { self = [super init]; if (self) { dataSource = fsnds; fsnodeRep = [FSNodeRep sharedInstance]; ASSIGN (node, anode); ASSIGN (icon, [fsnodeRep iconOfSize: ICNSIZE forNode: node]); openicon = nil; lockedicon = nil; spopenicon = nil; ASSIGN (extInfoStr, [NSString string]); isLocked = NO; iconSelected = NO; isOpened = NO; wasOpened = NO; nameEdited = NO; } return self; } - (NSImage *)icon { return icon; } - (NSImage *)openIcon { return openicon; } - (NSImage *)lockedIcon { return lockedicon; } - (NSImage *)spatialOpenIcon { return spopenicon; } - (BOOL)selectIcon:(BOOL)value { if ((iconSelected != value) || (isOpened != wasOpened)) { iconSelected = value; if (iconSelected && ((openicon == nil) || (isOpened != wasOpened))) { NSImage *opicn = [fsnodeRep openFolderIconOfSize: ICNSIZE forNode: node]; if (isOpened) { DESTROY (openicon); openicon = [[NSImage alloc] initWithSize: [opicn size]]; [openicon lockFocus]; [opicn dissolveToPoint: NSZeroPoint fraction: 0.5]; [openicon unlockFocus]; } else { ASSIGN (openicon, opicn); } } } return YES; } - (BOOL)iconSelected { return iconSelected; } // // FSNodeRep protocol // - (void)setNode:(FSNode *)anode { ASSIGN (node, anode); ASSIGN (icon, [fsnodeRep iconOfSize: ICNSIZE forNode: node]); [self setLocked: [node isLocked]]; } - (void)setNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype { [self setNode: anode]; } - (FSNode *)node { return node; } - (void)showSelection:(NSArray *)selnodes { } - (BOOL)isShowingSelection { return NO; } - (NSArray *)selection { return nil; } - (NSArray *)pathsSelection { return nil; } - (void)setFont:(NSFont *)fontObj { } - (NSFont *)labelFont { return nil; } - (void)setLabelTextColor:(NSColor *)acolor { } - (NSColor *)labelTextColor { return nil; } - (void)setIconSize:(int)isize { } - (int)iconSize { return ICNSIZE; } - (void)setIconPosition:(NSCellImagePosition)ipos { } - (NSCellImagePosition)iconPosition { return NSImageLeft; } - (NSRect)labelRect { return NSZeroRect; } - (void)setNodeInfoShowType:(FSNInfoType)type { } - (BOOL)setExtendedShowType:(NSString *)type { NSDictionary *info = [fsnodeRep extendedInfoOfType: type forNode: node]; if (info) { ASSIGN (extInfoStr, [info objectForKey: @"labelstr"]); } return YES; } - (FSNInfoType)nodeInfoShowType { return FSNInfoNameType; } - (NSString *)shownInfo { // we returns allways extInfoStr because // the other info is got from the node by // FSNListViewDataSource return extInfoStr; } - (void)setNameEdited:(BOOL)value { nameEdited = value; } - (void)setLeaf:(BOOL)flag { } - (BOOL)isLeaf { return YES; } - (void)select { [dataSource selectRep: self]; } - (void)unselect { [dataSource unselectRep: self]; } - (BOOL)isSelected { return NO; } - (void)setOpened:(BOOL)value { wasOpened = isOpened; if (isOpened != value) { isOpened = value; if (isOpened && (spopenicon == nil)) { spopenicon = [[NSImage alloc] initWithSize: [icon size]]; [spopenicon lockFocus]; [icon dissolveToPoint: NSZeroPoint fraction: 0.5]; [spopenicon unlockFocus]; } [self selectIcon: iconSelected]; [dataSource redisplayRep: self]; } } - (BOOL)isOpened { return isOpened; } - (void)setLocked:(BOOL)value { if (isLocked != value) { isLocked = value; if (isLocked && (lockedicon == nil)) { lockedicon = [[NSImage alloc] initWithSize: [icon size]]; [lockedicon lockFocus]; [icon dissolveToPoint: NSZeroPoint fraction: 0.3]; [lockedicon unlockFocus]; } [dataSource redisplayRep: self]; } } - (BOOL)isLocked { return isLocked; } - (void)checkLocked { [self setLocked: [node isLocked]]; } - (void)setGridIndex:(NSUInteger)index { } - (NSUInteger)gridIndex { return 0; } - (int)compareAccordingToName:(id)aObject { return [node compareAccordingToName: [aObject node]]; } - (int)compareAccordingToKind:(id)aObject; { return [node compareAccordingToKind: [aObject node]]; } - (int)compareAccordingToDate:(id)aObject { return [node compareAccordingToDate: [aObject node]]; } - (int)compareAccordingToSize:(id)aObject { return [node compareAccordingToSize: [aObject node]]; } - (int)compareAccordingToOwner:(id)aObject { return [node compareAccordingToOwner: [aObject node]]; } - (int)compareAccordingToGroup:(id)aObject { return [node compareAccordingToGroup: [aObject node]]; } - (int)compareAccordingToIndex:(id)aObject { return NSOrderedSame; } @end @implementation FSNListViewNodeRep (DraggingDestination) - (NSDragOperation)repDraggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *fromPath; NSString *nodePath; NSString *prePath; int count; isDragTarget = NO; if (isLocked || ([node isDirectory] == NO) || [node isPackage] || ([node isWritable] == NO)) { return NSDragOperationNone; } if ([node isDirectory]) { id desktopApp = [dataSource desktopApp]; if ([node isSubnodeOfPath: [desktopApp trashPath]]) { return NSDragOperationNone; } } pb = [sender draggingPasteboard]; if ([[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) { return NSDragOperationNone; } nodePath = [node path]; fromPath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([nodePath isEqual: fromPath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (1) { if ([sourcePaths containsObject: prePath]) { return NSDragOperationNone; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: fromPath]) { NSArray *subNodes = [node subNodes]; int i; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { int j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } isDragTarget = YES; forceCopy = NO; sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: fromPath]) { return NSDragOperationMove; } forceCopy = YES; return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } return NSDragOperationNone; } - (void)repConcludeDragOperation:(id )sender { id desktopApp = [dataSource desktopApp]; NSPasteboard *pb = [sender draggingPasteboard]; NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSArray *sourcePaths; NSString *operation, *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSUInteger i; if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [node path]]; return; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [node path]]; return; } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask == NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask == NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } else { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } } files = [NSMutableArray arrayWithCapacity: 1]; for (i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } opDict = [NSMutableDictionary dictionaryWithCapacity: 4]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [node path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } @end @implementation FSNListViewNameEditor NSComparisonResult sortSubviews(id view1, id view2, void *context) { if ([view1 isMemberOfClass: [FSNListViewNameEditor class]]) { return NSOrderedAscending; } return NSOrderedDescending; } - (void)dealloc { RELEASE (node); [super dealloc]; } - (void)setNode:(FSNode *)anode stringValue:(NSString *)str index:(int)idx { DESTROY (node); if (anode) { ASSIGN (node, anode); } [self setStringValue: str]; index = idx; } - (FSNode *)node { return node; } - (int)index { return index; } - (void)mouseDown:(NSEvent *)theEvent { NSView *view = [self superview]; if ([self isEditable] == NO) { [self setSelectable: YES]; [self setEditable: YES]; [[self window] makeFirstResponder: self]; } else { [super mouseDown: theEvent]; } [view sortSubviewsUsingFunction: (NSComparisonResult (*)(id, id, void *))sortSubviews context: nil]; [view setNeedsDisplayInRect: [self frame]]; } @end @implementation FSNListView - (void)dealloc { RELEASE (charBuffer); RELEASE (dsource); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect dataSourceClass:(Class)dsclass { self = [super initWithFrame: frameRect]; if (self) { [self setDrawsGrid: NO]; [self setAllowsColumnSelection: NO]; [self setAllowsColumnReordering: YES]; [self setAllowsColumnResizing: YES]; [self setAllowsEmptySelection: YES]; [self setAllowsMultipleSelection: YES]; [self setRowHeight: CELLS_HEIGHT]; [self setIntercellSpacing: NSZeroSize]; dsource = [[dsclass alloc] initForListView: self]; [self setDataSource: dsource]; [self setDelegate: dsource]; [self setTarget: dsource]; [self setDoubleAction: @selector(doubleClickOnListView:)]; lastKeyPressedTime = 0.0; charBuffer = nil; [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]]; } return self; } - (void)checkSize { id sview = [self superview]; if (sview && ([self bounds].size.width < [sview bounds].size.width)) { [self sizeLastColumnToFit]; } } - (void)singleClick: (NSTimer *)aTimer { NSEvent *theEvent = [aTimer userInfo]; NSPoint location; int row; location = [theEvent locationInWindow]; location = [self convertPoint: location fromView: nil]; row = [self rowAtPoint: location]; if (row != -1) { [dsource setEditorAtRow: row withMouseDownEvent: theEvent]; } [clickTimer release]; clickTimer = nil; } - (void)mouseDown:(NSEvent *)theEvent { if (clickTimer != nil) { [clickTimer invalidate]; [clickTimer release]; clickTimer = nil; } if ([theEvent clickCount] == 1 && (!([theEvent modifierFlags] & NSShiftKeyMask))) { NSPoint location; int row; location = [theEvent locationInWindow]; location = [self convertPoint: location fromView: nil]; row = [self rowAtPoint: location]; if (row == [self selectedRow]) { // We clicked on an already-selected row. ASSIGN(clickTimer, [NSTimer scheduledTimerWithTimeInterval: 0.5 // FIXME: use [NSEvent doubleClickInterval] target: self selector: @selector(singleClick:) userInfo: theEvent repeats: NO]); } } [dsource setMouseFlags: [theEvent modifierFlags]]; [dsource stopRepNameEditing]; [super mouseDown: theEvent]; } - (void)keyDown:(NSEvent *)theEvent { NSString *characters = [theEvent characters]; unichar character = 0; NSString *characterStr = nil; NSRect vRect, hiddRect; NSPoint p; float x, y, w, h; if ([characters length] > 0) { character = [characters characterAtIndex: 0]; characterStr = [characters substringToIndex: 1]; } switch (character) { case NSPageUpFunctionKey: [dsource stopRepNameEditing]; vRect = [self visibleRect]; p = vRect.origin; x = p.x; y = p.y - vRect.size.height; w = vRect.size.width; h = vRect.size.height; hiddRect = NSMakeRect(x, y, w, h); [self scrollRectToVisible: hiddRect]; return; case NSPageDownFunctionKey: [dsource stopRepNameEditing]; vRect = [self visibleRect]; p = vRect.origin; x = p.x; y = p.y + vRect.size.height; w = vRect.size.width; h = vRect.size.height; hiddRect = NSMakeRect(x, y, w, h); [self scrollRectToVisible: hiddRect]; return; case NSUpArrowFunctionKey: [dsource stopRepNameEditing]; [dsource selectRepInPrevRow]; return; case NSDownArrowFunctionKey: [dsource stopRepNameEditing]; [dsource selectRepInNextRow]; return; case NSCarriageReturnCharacter: { unsigned flags = [theEvent modifierFlags]; BOOL closesndr = ((flags == NSAlternateKeyMask) || (flags == NSControlKeyMask)); [dsource openSelectionInNewViewer: closesndr]; DESTROY(charBuffer); return; } case 0x01B: // Escape DESTROY(charBuffer); return; default: break; } if (([characters length] > 0) && (character < 0xF700)) { if (charBuffer != nil) { if ([theEvent timestamp] - lastKeyPressedTime < 5.0) // seconds { NSString *appendBuffer = [charBuffer stringByAppendingString:characterStr]; // Try selecting if ([dsource selectRepWithPrefix:appendBuffer]) { ASSIGN(charBuffer, appendBuffer); return; } // unable to select - fall-through and reinit as if typed is first char } } ASSIGN(charBuffer, characterStr); lastKeyPressedTime = [theEvent timestamp]; // Try selecting if ([dsource selectRepWithPrefix:charBuffer]) { return; } // Selection failed, reinitialize and use mismatching character as new buffer beginning DESTROY(charBuffer); } [super keyDown: theEvent]; } - (void)setFrame:(NSRect)frameRect { [super setFrame: frameRect]; [self checkSize]; } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { [super resizeWithOldSuperviewSize: oldFrameSize]; [self checkSize]; } - (NSImage *)dragImageForRows:(NSArray *)dragRows event:(NSEvent *)dragEvent dragImageOffset:(NSPointPointer)dragImageOffset { id deleg = [self delegate]; if ([deleg respondsToSelector: @selector(tableView:dragImageForRows:)]) { NSImage *image = [deleg tableView: self dragImageForRows: dragRows]; if (image) { return image; } } return [super dragImageForRows: dragRows event: dragEvent dragImageOffset: dragImageOffset]; } @end @implementation FSNListView (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode { [dsource showContentsOfNode: anode]; } - (NSDictionary *)readNodeInfo { return [dsource readNodeInfo]; } - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk { return [dsource updateNodeInfo: ondisk]; } - (void)reloadContents { [dsource reloadContents]; } - (void)reloadFromNode:(FSNode *)anode { [dsource reloadFromNode: anode]; } - (FSNode *)baseNode { return [dsource baseNode]; } - (FSNode *)shownNode { return [dsource shownNode]; } - (BOOL)isSingleNode { return YES; } - (BOOL)isShowingNode:(FSNode *)anode { return [dsource isShowingNode: anode]; } - (BOOL)isShowingPath:(NSString *)path { return [dsource isShowingPath: path]; } - (void)sortTypeChangedAtPath:(NSString *)path { [dsource sortTypeChangedAtPath: path]; } - (void)nodeContentsWillChange:(NSDictionary *)info { [dsource nodeContentsWillChange: info]; } - (void)nodeContentsDidChange:(NSDictionary *)info { [dsource nodeContentsDidChange: info]; } - (void)watchedPathChanged:(NSDictionary *)info { [dsource watchedPathChanged: info]; } - (void)setShowType:(FSNInfoType)type { [dsource setShowType: type]; } - (void)setExtendedShowType:(NSString *)type { [(FSNListViewDataSource *)dsource setExtendedShowType: type]; } - (FSNInfoType)showType { return [dsource showType]; } - (id)repOfSubnode:(FSNode *)anode { return [dsource repOfSubnode: anode]; } - (id)repOfSubnodePath:(NSString *)apath { return [dsource repOfSubnodePath: apath]; } - (id)addRepForSubnode:(FSNode *)anode { return [dsource addRepForSubnode: anode]; } - (void)removeRepOfSubnode:(FSNode *)anode { [dsource removeRepOfSubnode: anode]; } - (void)removeRepOfSubnodePath:(NSString *)apath { [dsource removeRepOfSubnodePath: apath]; } - (void)unloadFromNode:(FSNode *)anode { [dsource unloadFromNode: anode]; } - (void)unselectOtherReps:(id)arep { [dsource unselectOtherReps: arep]; } - (void)selectReps:(NSArray *)reps { [dsource selectReps: reps]; } - (void)selectRepsOfSubnodes:(NSArray *)nodes { [dsource selectRepsOfSubnodes: nodes]; } - (void)selectRepsOfPaths:(NSArray *)paths { [dsource selectRepsOfPaths: paths]; } - (void)selectAll { [dsource selectAll]; } - (void)scrollSelectionToVisible { [dsource scrollSelectionToVisible]; } - (NSArray *)reps { return [dsource reps]; } - (NSArray *)selectedReps { return [dsource selectedReps]; } - (NSArray *)selectedNodes { return [dsource selectedNodes]; } - (NSArray *)selectedPaths { return [dsource selectedPaths]; } - (void)selectionDidChange { [dsource selectionDidChange]; } - (void)checkLockedReps { [dsource checkLockedReps]; } - (void)openSelectionInNewViewer:(BOOL)newv { [dsource openSelectionInNewViewer: newv]; } - (void)setLastShownNode:(FSNode *)anode { [dsource setLastShownNode: anode]; } - (BOOL)needsDndProxy { return [dsource needsDndProxy]; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { return [dsource involvedByFileOperation: opinfo]; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { return [dsource validatePasteOfFilenames: names wasCut: cut]; } - (void)stopRepNameEditing { [dsource stopRepNameEditing]; } @end @implementation FSNListView (DraggingDestination) - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } - (NSDragOperation)draggingEntered:(id )sender { return [dsource listViewDraggingEntered: sender]; } - (NSDragOperation)draggingUpdated:(id )sender { return [dsource listViewDraggingUpdated: sender]; } - (void)draggingExited:(id )sender { [dsource listViewDraggingExited: sender]; } - (BOOL)prepareForDragOperation:(id )sender { return [dsource listViewPrepareForDragOperation: sender]; } - (BOOL)performDragOperation:(id )sender { return [dsource listViewPerformDragOperation: sender]; } - (void)concludeDragOperation:(id )sender { [dsource listViewConcludeDragOperation: sender]; } @end @implementation NSDictionary (TableColumnSort) - (NSComparisonResult)compareTableColumnInfo:(NSDictionary *)info { NSNumber *p1 = [self objectForKey: @"position"]; NSNumber *p2 = [info objectForKey: @"position"]; return [p1 compare: p2]; } @end gworkspace-1.1.0/FSNode/FSNPathComponentsViewer.h0000644000175000001440000000406214751213523021106 0ustar multixusers/* FSNPathComponentsViewer.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2005 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_PATH_COMPONENTS_VIEWER_H #define FSN_PATH_COMPONENTS_VIEWER_H #include #include #include "FSNodeRep.h" @class NSImage; @class NSTextFieldCell; @class FSNPathComponentView; @interface FSNPathComponentsViewer: NSView { NSMutableArray *components; FSNPathComponentView *lastComponent; FSNPathComponentView *openComponent; } - (void)showComponentsOfSelection:(NSArray *)selection; - (void)mouseMovedOnComponent:(FSNPathComponentView *)component; - (void)doubleClickOnComponent:(FSNPathComponentView *)component; - (void)tile; @end @interface FSNPathComponentView: NSView { FSNode *node; NSString *hostname; BOOL isLeaf; NSImage *icon; int iconSize; NSRect iconRect; NSTextFieldCell *label; NSDictionary *fontAttr; NSRect labelRect; NSRect brImgRect; FSNodeRep *fsnodeRep; FSNPathComponentsViewer *viewer; } - (id)initForNode:(FSNode *)anode iconSize:(int)isize; - (FSNode *)node; - (void)setLeaf:(BOOL)value; + (float)minWidthForIconSize:(int)isize; - (float)fullWidth; - (float)uncuttedLabelLenght; - (void)tile; @end #endif // FSN_PATH_COMPONENTS_VIEWER_H gworkspace-1.1.0/FSNode/FSNPathComponentsViewer.m0000644000175000001440000002270714751213523021121 0ustar multixusers/* FSNPathComponentsViewer.m * * Copyright (C) 2005-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2005 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNPathComponentsViewer.h" #import "FSNode.h" #import "FSNFunctions.h" #define BORDER 8.0 #define ELEM_MARGIN 4 #define COMP_MARGIN 4 #define ICN_SIZE 24 #define BRANCH_SIZE 7 static NSImage *branchImage; @implementation FSNPathComponentsViewer - (void)dealloc { RELEASE (components); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if (self) { components = [NSMutableArray new]; [self setAutoresizingMask: NSViewWidthSizable]; } return self; } - (void)showComponentsOfSelection:(NSArray *)selection { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *allComponents = [NSMutableArray array]; NSArray *firstComponents; NSString *commonPath = path_separator(); unsigned index = 0; BOOL common = YES; unsigned maxLength = 0; NSArray *newSelection; unsigned selcount; FSNode *node; FSNPathComponentView *component; unsigned i; for (i = 0; i < [components count]; i++) { [[components objectAtIndex: i] removeFromSuperview]; } [components removeAllObjects]; lastComponent = nil; openComponent = nil; if ((selection == nil) || ([selection count] == 0)) { [self tile]; RELEASE (arp); return; } for (i = 0; i < [selection count]; i++) { FSNode *fn = [selection objectAtIndex: i]; [allComponents addObject: [FSNode pathComponentsToNode: fn]]; } for (i = 0; i < [allComponents count]; i++) { unsigned count = [[allComponents objectAtIndex: i] count]; if (maxLength < count) { maxLength = count; } } firstComponents = [allComponents objectAtIndex: 0]; while (index < [firstComponents count]) { NSString *p1 = [firstComponents objectAtIndex: index]; for (i = 0; i < [allComponents count]; i++) { NSArray *cmps2 = [allComponents objectAtIndex: i]; if (index < [cmps2 count]) { NSString *p2 = [cmps2 objectAtIndex: index]; if ([p1 isEqual: p2] == NO) { common = NO; break; } } else { common = NO; break; } } if (common) { if ([p1 isEqual: path_separator()] == NO) { commonPath = [commonPath stringByAppendingPathComponent: p1]; } } else { break; } index++; } newSelection = [commonPath pathComponents]; selcount = [newSelection count]; node = nil; for (i = 0; i < selcount; i++) { FSNode *pn = nil; if (i != 0) { pn = node; } node = [FSNode nodeWithRelativePath: [newSelection objectAtIndex: i] parent: pn]; component = [[FSNPathComponentView alloc] initForNode: node iconSize: ICN_SIZE]; [self addSubview: component]; [components addObject: component]; if (i == (selcount -1)) { lastComponent = component; [lastComponent setLeaf: ([selection count] == 1)]; } RELEASE (component); } [self tile]; RELEASE (arp); } - (void)mouseMovedOnComponent:(FSNPathComponentView *)component { if (openComponent != component) { if (component != lastComponent) { openComponent = component; } else { openComponent = nil; } [self tile]; } } - (void)doubleClickOnComponent:(FSNPathComponentView *)component { NSWorkspace *ws = [NSWorkspace sharedWorkspace]; FSNode *node = [component node]; NSString *path = [node path]; if ([node isDirectory] || [node isMountPoint]) { if ([node isApplication]) { [ws launchApplication: path]; } else if ([node isPackage]) { [ws openFile: path]; } else { [ws selectFile: path inFileViewerRootedAtPath: path]; } } else if ([node isPlain] || [node isExecutable]) { [ws openFile: path]; } else if ([node isApplication]) { [ws launchApplication: path]; } } - (void)tile { float minWidth = [FSNPathComponentView minWidthForIconSize: ICN_SIZE]; float orx = BORDER; unsigned i; for (i = 0; i < [components count]; i++) { FSNPathComponentView *component = [components objectAtIndex: i]; float fullWidth = [component fullWidth]; NSRect r; if ((component == openComponent) || (component == lastComponent)) { r = NSMakeRect(orx, BORDER, fullWidth, ICN_SIZE); } else { r = NSMakeRect(orx, BORDER, minWidth, ICN_SIZE); } [component setFrame: NSIntegralRect(r)]; orx += (r.size.width + COMP_MARGIN); } [self setNeedsDisplay: YES]; } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { [super resizeWithOldSuperviewSize: oldFrameSize]; [self tile]; } - (void)mouseMoved:(NSEvent *)theEvent { openComponent = nil; [self tile]; } @end @implementation FSNPathComponentView - (void)dealloc { RELEASE (node); RELEASE (hostname); RELEASE (icon); RELEASE (label); RELEASE (fontAttr); [super dealloc]; } + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { branchImage = [NSBrowserCell branchImage]; initialized = YES; } } - (id)initForNode:(FSNode *)anode iconSize:(int)isize { self = [super init]; if (self) { NSFont *font = [NSFont systemFontOfSize: 12]; ASSIGN (node, anode); iconSize = isize; iconRect = NSMakeRect(0, 0, iconSize, iconSize); fsnodeRep = [FSNodeRep sharedInstance]; ASSIGN (icon, [fsnodeRep iconOfSize: iconSize forNode: node]); isLeaf = NO; if ([[node path] isEqual: path_separator()] && ([node isMountPoint] == NO)) { NSHost *host = [NSHost currentHost]; NSString *hname = [host name]; NSRange range = [hname rangeOfString: @"."]; if (range.length != 0) { hname = [hname substringToIndex: range.location]; } ASSIGN (hostname, hname); } label = [NSTextFieldCell new]; [label setAlignment: NSLeftTextAlignment]; [label setFont: font]; [label setStringValue: (hostname ? hostname : [node name])]; ASSIGN (fontAttr, [NSDictionary dictionaryWithObject: font forKey: NSFontAttributeName]); brImgRect = NSMakeRect(0, 0, BRANCH_SIZE, BRANCH_SIZE); } return self; } - (FSNode *)node { return node; } - (void)setLeaf:(BOOL)value { isLeaf = value; } + (float)minWidthForIconSize:(int)isize { return (isize + ELEM_MARGIN + ELEM_MARGIN + BRANCH_SIZE); } - (float)fullWidth { return (iconRect.size.width + ELEM_MARGIN + [self uncuttedLabelLenght] + ELEM_MARGIN + BRANCH_SIZE); } - (float)uncuttedLabelLenght { return [(hostname ? hostname : [node name]) sizeWithAttributes: fontAttr].width; } - (void)tile { float minwidth = [FSNPathComponentView minWidthForIconSize: ICN_SIZE]; labelRect.size.width = [self uncuttedLabelLenght]; if (labelRect.size.width <= ([self bounds].size.width - minwidth)) { labelRect.origin.x = iconRect.size.width + ELEM_MARGIN; labelRect.size.height = [fsnodeRep heightOfFont: [label font]]; labelRect.origin.y = (iconRect.size.height - labelRect.size.height) / 2; labelRect = NSIntegralRect(labelRect); } else { labelRect = NSZeroRect; } brImgRect.origin.x = iconRect.size.width + ELEM_MARGIN + labelRect.size.width + ELEM_MARGIN; brImgRect.origin.y = ((iconRect.size.height / 2) - (BRANCH_SIZE / 2)); brImgRect = NSIntegralRect(brImgRect); [self setNeedsDisplay: YES]; } - (void)mouseMoved:(NSEvent *)theEvent { [viewer mouseMovedOnComponent: self]; } - (void)mouseUp:(NSEvent *)theEvent { if ([theEvent clickCount] > 1) { [viewer doubleClickOnComponent: self]; } } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; viewer = (FSNPathComponentsViewer *)[self superview]; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (void)setFrame:(NSRect)frameRect { if (NSEqualRects([self frame], frameRect) == NO) { [super setFrame: frameRect]; [self tile]; } } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { [super resizeWithOldSuperviewSize: oldFrameSize]; [self tile]; } - (void)drawRect:(NSRect)rect { [icon compositeToPoint: iconRect.origin operation: NSCompositeSourceOver]; if (NSIsEmptyRect(labelRect) == NO) { [label drawWithFrame: labelRect inView: self]; } if (isLeaf == NO) { [branchImage compositeToPoint: brImgRect.origin operation: NSCompositeSourceOver]; } } @end gworkspace-1.1.0/FSNode/FSNTextCell.h0000644000175000001440000000305314751213523016505 0ustar multixusers/* FSNTextCell.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSN_TEXT_CELL_H #define FSN_TEXT_CELL_H #import #import #import "FSNodeRep.h" @class NSImage; @interface FSNTextCell : NSTextFieldCell { NSDictionary *fontAttr; NSString *dots; NSSize titlesize; BOOL dateCell; NSString *uncutTitle; NSImage *icon; } - (void)setIcon:(NSImage *)icn; - (NSImage *)icon; - (float)uncutTitleLenght; - (void)setDateCell:(BOOL)value; - (BOOL)isDateCell; - (NSString *)cutTitle:(NSString *)title toFitWidth:(float)width; - (NSString *)cutDateTitle:(NSString *)title toFitWidth:(float)width; @end #endif // FSN_TEXT_CELL_H gworkspace-1.1.0/FSNode/FSNTextCell.m0000644000175000001440000001435614751213523016522 0ustar multixusers/* FSNTextCell.m * * Copyright (C) 2004-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FSNTextCell.h" @implementation FSNTextCell - (void)dealloc { RELEASE (uncutTitle); RELEASE (fontAttr); RELEASE (dots); RELEASE (icon); [super dealloc]; } - (id)init { self = [super init]; if (self) { ASSIGN (fontAttr, [NSDictionary dictionaryWithObject: [self font] forKey: NSFontAttributeName]); ASSIGN (dots, @"..."); titlesize = NSMakeSize(0, 0); icon = nil; dateCell = NO; } return self; } - (id)copyWithZone:(NSZone *)zone { FSNTextCell *c = [super copyWithZone: zone]; c->fontAttr = [fontAttr copyWithZone: zone]; c->dots = [dots copyWithZone: zone]; c->dateCell = dateCell; if (uncutTitle) { c->uncutTitle = [uncutTitle copyWithZone: zone]; } else { c->uncutTitle = nil; } RETAIN (icon); return c; } - (void)setStringValue:(NSString *)aString { [super setStringValue: aString]; titlesize = [[self stringValue] sizeWithAttributes: fontAttr]; } - (void)setFont:(NSFont *)fontObj { [super setFont: fontObj]; ASSIGN (fontAttr, [NSDictionary dictionaryWithObject: [self font] forKey: NSFontAttributeName]); titlesize = [[self stringValue] sizeWithAttributes: fontAttr]; } - (void)setIcon:(NSImage *)icn { ASSIGN (icon, icn); } - (NSImage *)icon { return icon; } - (float)uncutTitleLenght { return titlesize.width; } - (void)setDateCell:(BOOL)value { dateCell = value; } - (BOOL)isDateCell { return dateCell; } - (NSString *)cutTitle:(NSString *)title toFitWidth:(float)width { int tl = [title length]; if (tl <= 5) { return dots; } else { int fpto = (tl / 2) - 2; int spfr = fpto + 3; NSString *fp = [title substringToIndex: fpto]; NSString *sp = [title substringFromIndex: spfr]; NSString *dotted = [NSString stringWithFormat: @"%@%@%@", fp, dots, sp]; int dl = [dotted length]; float dotl = [dotted sizeWithAttributes: fontAttr].width; int p = 0; while (dotl > width) { if (dl <= 5) { return dots; } if (p) { fpto--; } else { spfr++; } p = !p; fp = [title substringToIndex: fpto]; sp = [title substringFromIndex: spfr]; dotted = [NSString stringWithFormat: @"%@%@%@", fp, dots, sp]; dotl = [dotted sizeWithAttributes: fontAttr].width; dl = [dotted length]; } return dotted; } return title; } - (NSString *)cutDateTitle:(NSString *)title toFitWidth:(float)width { NSUInteger tl = [title length]; if (tl <= 5) { return dots; } else { NSString *format = @"%b %d %Y"; NSCalendarDate *date = [NSCalendarDate dateWithString: title calendarFormat: format]; if (date) { NSString *descr; format = @"%m/%d/%y"; descr = [date descriptionWithCalendarFormat: format timeZone: [NSTimeZone localTimeZone] locale: nil]; if ([descr sizeWithAttributes: fontAttr].width > width) { return [self cutTitle: descr toFitWidth: width]; } else { return descr; } } else { return [self cutTitle: title toFitWidth: width]; } } return title; } - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { NSRect title_rect = cellFrame; CGFloat textlength; NSString *cutTitle; #define MARGIN (2.0) textlength = title_rect.size.width - MARGIN; if (icon) textlength -= ([icon size].width + (MARGIN * 2)); ASSIGN (uncutTitle, [self stringValue]); /* we calculate the reduced title only if necessary */ cutTitle = nil; if ([uncutTitle sizeWithAttributes: fontAttr].width > textlength) { if (dateCell) cutTitle = [self cutDateTitle:uncutTitle toFitWidth:textlength]; else cutTitle = [self cutTitle:uncutTitle toFitWidth:textlength]; [self setStringValue: cutTitle]; } else { [self setStringValue: uncutTitle]; } title_rect.size.height = titlesize.height; title_rect.origin.y += ((cellFrame.size.height - titlesize.height) / 2.0); if (icon == nil) { [super drawInteriorWithFrame: title_rect inView: controlView]; } else { NSRect icon_rect; icon_rect.origin = cellFrame.origin; icon_rect.size = [icon size]; icon_rect.origin.x += MARGIN; icon_rect.origin.y += ((cellFrame.size.height - icon_rect.size.height) / 2.0); if ([controlView isFlipped]) { icon_rect.origin.y += icon_rect.size.height; } title_rect.origin.x += (icon_rect.size.width + (MARGIN * 2)); title_rect.size.width -= (icon_rect.size.width + (MARGIN * 2)); title_rect = NSIntegralRect(title_rect); [super drawInteriorWithFrame: title_rect inView: controlView]; [icon compositeToPoint: icon_rect.origin operation: NSCompositeSourceOver]; } /* we reset the title to the orginal string */ if (cutTitle) [self setStringValue: uncutTitle]; } - (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView { return NO; } @end gworkspace-1.1.0/FSNode/FSNode.h0000644000175000001440000001222614751250146015534 0ustar multixusers/* FSNode.h * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSNODE_H #define FSNODE_H #import @class NSImage; @class NSBezierPath; @class FSNodeRep; @interface FSNode : NSObject { FSNode *parent; NSString *path; NSString *relativePath; NSString *lastPathComponent; NSString *name; NSDictionary *attributes; NSString *fileType; NSString *typeDescription; NSString *application; unsigned long long filesize; NSDate *crDate; NSString *crDateDescription; NSDate *modDate; NSString *modDateDescription; unsigned long permissions; NSString *owner; NSNumber *ownerId; NSString *group; NSNumber *groupId; struct nodeFlags { int readable; int writable; int executable; int deletable; int plain; int directory; int link; int socket; int charspecial; int blockspecial; int mountpoint; int application; int package; int unknown; } flags; FSNodeRep *fsnodeRep; NSNotificationCenter *nc; NSFileManager *fm; id ws; } + (FSNode *)nodeWithPath:(NSString *)apath; + (FSNode *)nodeWithRelativePath:(NSString *)rpath parent:(FSNode *)aparent; - (id)initWithRelativePath:(NSString *)rpath parent:(FSNode *)aparent; - (BOOL)isEqualToNode:(FSNode *)anode; - (NSArray *)subNodes; - (NSArray *)subNodeNames; - (NSArray *)subNodesOfParent; - (NSArray *)subNodeNamesOfParent; + (NSArray *)nodeComponentsToNode:(FSNode *)anode; + (NSArray *)pathComponentsToNode:(FSNode *)anode; + (NSArray *)nodeComponentsFromNode:(FSNode *)firstNode toNode:(FSNode *)secondNode; + (NSArray *)pathComponentsFromNode:(FSNode *)firstNode toNode:(FSNode *)secondNode; + (NSArray *)pathsOfNodes:(NSArray *)nodes; + (NSUInteger)indexOfNode:(FSNode *)anode inComponents:(NSArray *)nodes; + (NSUInteger)indexOfNodeWithPath:(NSString *)apath inComponents:(NSArray *)nodes; + (FSNode *)subnodeWithName:(NSString *)aname inSubnodes:(NSArray *)subnodes; + (FSNode *)subnodeWithPath:(NSString *)apath inSubnodes:(NSArray *)subnodes; + (BOOL)pathOfNode:(FSNode *)anode isEqualOrDescendentOfPath:(NSString *)apath containingFiles:(NSArray *)files; - (FSNode *)parent; - (NSString *)parentPath; - (NSString *)parentName; - (BOOL)isSubnodeOfNode:(FSNode *)anode; - (BOOL)isSubnodeOfPath:(NSString *)apath; - (BOOL)isParentOfNode:(FSNode *)anode; - (BOOL)isParentOfPath:(NSString *)apath; - (NSString *)path; - (NSString *)relativePath; - (NSString *)lastPathComponent; - (NSString *)name; - (NSString *)fileType; - (NSString *)application; - (void)setTypeFlags; - (void)setFlagsForSymLink:(NSDictionary *)attrs; - (NSString *)typeDescription; - (NSDate *)creationDate; - (NSString *)crDateDescription; - (NSDate *)modificationDate; - (NSString *)modDateDescription; - (unsigned long long)fileSize; - (NSString *)sizeDescription; - (NSString *)owner; - (NSNumber *)ownerId; - (NSString *)group; - (NSNumber *)groupId; - (unsigned long)permissions; - (BOOL)isPlain; - (BOOL)isDirectory; - (BOOL)isLink; - (BOOL)isSocket; - (BOOL)isCharspecial; - (BOOL)isBlockspecial; - (BOOL)isMountPoint; - (void)setMountPoint:(BOOL)value; - (BOOL)isApplication; - (BOOL)isPackage; - (BOOL)isReadable; - (BOOL)isWritable; - (void)checkWritable; - (BOOL)isParentWritable; - (BOOL)isExecutable; - (BOOL)isDeletable; - (BOOL)isLocked; - (BOOL)isValid; - (BOOL)hasValidPath; - (BOOL)isReserved; - (BOOL)willBeValidAfterFileOperation:(NSDictionary *)opinfo; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; @end @interface FSNode (Comparing) - (NSComparisonResult)compareAccordingToPath:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToName:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToParent:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToKind:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToExtension:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToDate:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToSize:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToOwner:(FSNode *)aNode; - (NSComparisonResult)compareAccordingToGroup:(FSNode *)aNode; @end #endif // FSNODE_H gworkspace-1.1.0/FSNode/FSNode.m0000644000175000001440000006516114751354373015556 0ustar multixusers/* FSNode.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNode.h" #import "FSNodeRep.h" #import "FSNFunctions.h" @implementation FSNode - (void)dealloc { RELEASE (path); RELEASE (relativePath); RELEASE (lastPathComponent); RELEASE (name); RELEASE (attributes); RELEASE (fileType); RELEASE (typeDescription); RELEASE (crDate); RELEASE (crDateDescription); RELEASE (modDate); RELEASE (modDateDescription); RELEASE (owner); RELEASE (ownerId); RELEASE (group); RELEASE (groupId); [super dealloc]; } + (FSNode *)nodeWithPath:(NSString *)apath { return AUTORELEASE ([[FSNode alloc] initWithRelativePath: apath parent: nil]); } + (FSNode *)nodeWithRelativePath:(NSString *)rpath parent:(FSNode *)aparent { return AUTORELEASE ([[FSNode alloc] initWithRelativePath: rpath parent: aparent]); } - (id)initWithRelativePath:(NSString *)rpath parent:(FSNode *)aparent { self = [super init]; if (self) { fsnodeRep = [FSNodeRep sharedInstance]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; parent = aparent; ASSIGN (relativePath, rpath); lastPathComponent = [[relativePath lastPathComponent] retain]; name = nil; if (parent) { NSString *parentPath = [parent path]; if ([parentPath isEqual: path_separator()]) { parentPath = @""; } ASSIGN (path, ([NSString stringWithFormat: @"%@%@%@", parentPath, path_separator(), lastPathComponent])); } else { ASSIGN (path, relativePath); } flags.readable = -1; flags.writable = -1; flags.executable = -1; flags.deletable = -1; flags.plain = -1; flags.directory = -1; flags.link = -1; flags.socket = -1; flags.charspecial = -1; flags.blockspecial = -1; flags.mountpoint = -1; flags.application = -1; flags.package = -1; flags.unknown = -1; crDate = nil; modDate = nil; owner = nil; ownerId = nil; group = nil; groupId = nil; filesize = 0; permissions = 0; fileType = nil; typeDescription = nil; application = nil; attributes = [fm fileAttributesAtPath: path traverseLink: NO]; RETAIN (attributes); /* we localize only directories which could be special */ if ([self isDirectory]) ASSIGN (name, NSLocalizedStringFromTableInBundle(lastPathComponent, nil, [NSBundle bundleForClass:[self class]], @"")); else ASSIGN (name, lastPathComponent); } return self; } - (NSUInteger)hash { return [path hash]; } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [FSNode class]]) { return [self isEqualToNode: (FSNode *)other]; } return NO; } - (BOOL)isEqualToNode:(FSNode *)anode { if (anode == self) { return YES; } return [path isEqualToString: [anode path]]; } - (NSArray *)subNodes { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *nodes = [NSMutableArray array]; NSArray *fnames = [fsnodeRep directoryContentsAtPath: path]; NSUInteger i; for (i = 0; i < [fnames count]; i++) { NSString *fname = [fnames objectAtIndex: i]; FSNode *node = [[FSNode alloc] initWithRelativePath: fname parent: self]; [nodes addObject: node]; RELEASE (node); } RETAIN (nodes); RELEASE (arp); return [[nodes autorelease] makeImmutableCopyOnFail: NO]; } - (NSArray *)subNodeNames { return [fsnodeRep directoryContentsAtPath: path]; } - (NSArray *)subNodesOfParent { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *nodes = [NSMutableArray array]; NSArray *fnames = [fsnodeRep directoryContentsAtPath: [self parentPath]]; FSNode *pnd = nil; NSUInteger i; if (parent != nil) { pnd = [parent parent]; } for (i = 0; i < [fnames count]; i++) { NSString *fname = [fnames objectAtIndex: i]; FSNode *node = [[FSNode alloc] initWithRelativePath: fname parent: pnd]; [nodes addObject: node]; RELEASE (node); } RETAIN (nodes); RELEASE (arp); return [[nodes autorelease] makeImmutableCopyOnFail: NO]; } - (NSArray *)subNodeNamesOfParent { return [fsnodeRep directoryContentsAtPath: [self parentPath]]; } + (NSArray *)nodeComponentsToNode:(FSNode *)anode { CREATE_AUTORELEASE_POOL(arp); NSArray *pcomps = [self pathComponentsToNode: anode]; NSMutableArray *components = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [pcomps count]; i++) { NSString *pcomp = [pcomps objectAtIndex: i]; FSNode *pnode = (i == 0) ? nil : [components objectAtIndex: (i-1)]; FSNode *node = [self nodeWithRelativePath: pcomp parent: pnode]; [components insertObject: node atIndex: [components count]]; } RETAIN (components); RELEASE (arp); return [[components autorelease] makeImmutableCopyOnFail: NO]; } + (NSArray *)pathComponentsToNode:(FSNode *)anode { return [[anode path] pathComponents]; } + (NSArray *)nodeComponentsFromNode:(FSNode *)firstNode toNode:(FSNode *)secondNode { if ([secondNode isSubnodeOfNode: firstNode]) { CREATE_AUTORELEASE_POOL(arp); NSString *p1 = [firstNode path]; NSString *p2 = [secondNode path]; NSUInteger index = ([p1 isEqual: path_separator()]) ? [p1 length] : ([p1 length] +1); NSArray *pcomps = [[p2 substringFromIndex: index] pathComponents]; NSMutableArray *components = [NSMutableArray array]; FSNode *node; NSUInteger i; node = [self nodeWithPath: p1]; [components addObject: node]; for (i = 0; i < [pcomps count]; i++) { FSNode *pnode = [components objectAtIndex: i]; NSString *rpath = [pcomps objectAtIndex: i]; node = [self nodeWithRelativePath: rpath parent: pnode]; [components insertObject: node atIndex: [components count]]; } RETAIN (components); RELEASE (arp); return [[components autorelease] makeImmutableCopyOnFail: NO]; } else if ([secondNode isEqual: firstNode]) { return [NSArray arrayWithObject: firstNode]; } return nil; } + (NSArray *)pathComponentsFromNode:(FSNode *)firstNode toNode:(FSNode *)secondNode { if ([secondNode isSubnodeOfNode: firstNode]) { NSString *p1 = [firstNode path]; NSString *p2 = [secondNode path]; int index = ([p1 isEqual: path_separator()]) ? [p1 length] : ([p1 length] +1); return [[p2 substringFromIndex: index] pathComponents]; } else if ([secondNode isEqual: firstNode]) { return [NSArray arrayWithObject: [firstNode name]]; } return nil; } + (NSArray *)pathsOfNodes:(NSArray *)nodes { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *paths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [nodes count]; i++) { [paths addObject: [[nodes objectAtIndex: i] path]]; } RETAIN (paths); RELEASE (arp); return [[paths autorelease] makeImmutableCopyOnFail: NO]; } + (NSUInteger)indexOfNode:(FSNode *)anode inComponents:(NSArray *)nodes { return [nodes indexOfObject: anode]; } + (NSUInteger)indexOfNodeWithPath:(NSString *)apath inComponents:(NSArray *)nodes { NSUInteger i; for (i = 0; i < [nodes count]; i++) { FSNode *node = [nodes objectAtIndex: i]; if ([[node path] isEqual: apath]) { return i; } } return NSNotFound; } + (FSNode *)subnodeWithName:(NSString *)aname inSubnodes:(NSArray *)subnodes { NSUInteger i; for (i = 0; i < [subnodes count]; i++) { FSNode *node = [subnodes objectAtIndex: i]; if ([node isValid] && [[node name] isEqual: aname]) { return node; } } return nil; } + (FSNode *)subnodeWithPath:(NSString *)apath inSubnodes:(NSArray *)subnodes { NSUInteger i; for (i = 0; i < [subnodes count]; i++) { FSNode *node = [subnodes objectAtIndex: i]; if ([node isValid] && [[node path] isEqual: apath]) { return node; } } return nil; } + (BOOL)pathOfNode:(FSNode *)anode isEqualOrDescendentOfPath:(NSString *)apath containingFiles:(NSArray *)files { NSString *nodepath = [anode path]; if ([nodepath isEqual: apath]) return YES; if (isSubpathOfPath(apath, nodepath)) { NSUInteger i; if (files == nil) { return YES; } else { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [apath stringByAppendingPathComponent: fname]; if (([fpath isEqual: nodepath]) || (isSubpathOfPath(fpath, nodepath))) { return YES; } } } } return NO; } - (FSNode *)parent { return parent; } - (NSString *)parentPath { return [path stringByDeletingLastPathComponent]; } - (NSString *)parentName { return [parent name]; } - (BOOL)isSubnodeOfNode:(FSNode *)anode { return isSubpathOfPath([anode path], path); } - (BOOL)isSubnodeOfPath:(NSString *)apath { return isSubpathOfPath(apath, path); } - (BOOL)isParentOfNode:(FSNode *)anode { return isSubpathOfPath(path, [anode path]); } - (BOOL)isParentOfPath:(NSString *)apath { return isSubpathOfPath(path, apath); } - (NSString *)path { return path; } - (NSString *)relativePath { return relativePath; } /** use as never-translated name */ - (NSString *)lastPathComponent { return lastPathComponent; } /** essentially lastPathComponent which might be translated */ - (NSString *)name { return name; } - (NSString *)fileType { if (attributes && (fileType == nil)) { ASSIGN (fileType, [attributes fileType]); } return (fileType ? fileType : (NSString *)[NSString string]); } - (NSString *)application { if ([self isApplication] == NO) { return application; } return nil; } - (void)setTypeFlags { flags.plain = 0; flags.directory = 0; flags.link = 0; flags.socket = 0; flags.charspecial = 0; flags.blockspecial = 0; flags.mountpoint = 0; flags.application = 0; flags.package = 0; flags.unknown = 0; if (fileType == nil) { [self fileType]; } if (fileType) { if (fileType == NSFileTypeRegular) { flags.plain = 1; } else if (fileType == NSFileTypeDirectory) { NSString *defApp = nil, *type = nil; [ws getInfoForFile: path application: &defApp type: &type]; if (defApp) { ASSIGN (application, defApp); } flags.directory = 1; if (type == NSApplicationFileType) { flags.application = 1; flags.package = 1; } else if (type == NSPlainFileType) { flags.package = 1; } } else if (fileType == NSFileTypeSymbolicLink) { NSDictionary *attrs = [fm fileAttributesAtPath: path traverseLink: YES]; if (attrs) { [self setFlagsForSymLink: attrs]; } flags.link = 1; } else if (fileType == NSFileTypeSocket) { flags.socket = 1; } else if (fileType == NSFileTypeCharacterSpecial) { flags.charspecial = 1; } else if (fileType == NSFileTypeBlockSpecial) { flags.blockspecial = 1; } else { flags.unknown = 1; } } else { flags.unknown = 1; } } - (void)setFlagsForSymLink:(NSDictionary *)attrs { NSString *ftype = [attrs fileType]; if (ftype == NSFileTypeRegular) { flags.plain = 1; } else if (ftype == NSFileTypeDirectory) { NSString *defApp = nil, *type = nil; [ws getInfoForFile: path application: &defApp type: &type]; if (defApp) { ASSIGN (application, defApp); } flags.directory = 1; if (type == NSApplicationFileType) { flags.application = 1; flags.package = 1; } else if (type == NSPlainFileType) { flags.package = 1; } else if (type == NSFilesystemFileType) { flags.mountpoint = 1; } } else if (ftype == NSFileTypeSymbolicLink) { attrs = [fm fileAttributesAtPath: path traverseLink: YES]; if (attrs) { [self setFlagsForSymLink: attrs]; } } else if (ftype == NSFileTypeSocket) { flags.socket = 1; } else if (ftype == NSFileTypeCharacterSpecial) { flags.charspecial = 1; } else if (ftype == NSFileTypeBlockSpecial) { flags.blockspecial = 1; } else { flags.unknown = 1; } ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"symbolic link", nil, [NSBundle bundleForClass:[self class]], @"")); } - (NSString *)typeDescription { if (typeDescription == nil) { if ([self isPlain]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"plain file", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isDirectory]) { if ([self isApplication]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"application", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isPackage]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"package", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isMountPoint]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"mount point", nil, [NSBundle bundleForClass:[self class]], @"")); } else { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"directory", nil, [NSBundle bundleForClass:[self class]], @"")); } } else if ([self isLink]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"symbolic link", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isSocket]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"socket", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isCharspecial]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"character special", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isBlockspecial]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"block special", nil, [NSBundle bundleForClass:[self class]], @"")); } else { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"unknown", nil, [NSBundle bundleForClass:[self class]], @"")); } } return typeDescription; } - (NSDate *)creationDate { if (attributes && (crDate == nil)) { ASSIGN (crDate, [attributes fileCreationDate]); } return (crDate ? crDate : (NSDate *)[NSDate date]); } - (NSString *)crDateDescription { NSDate *date = [self creationDate]; if (date) { if (crDateDescription == nil) { NSString *descr = [date descriptionWithCalendarFormat: @"%b %d %Y" timeZone: [NSTimeZone localTimeZone] locale: nil]; ASSIGN (crDateDescription, descr); } return crDateDescription; } return [NSString string]; } - (NSDate *)modificationDate { if (attributes && (modDate == nil)) { ASSIGN (modDate, [attributes fileModificationDate]); } return (modDate ? modDate : (NSDate *)[NSDate date]); } - (NSString *)modDateDescription { NSDate *date = [self modificationDate]; if (date) { if (modDateDescription == nil) { NSString *descr = [date descriptionWithCalendarFormat: @"%b %d %Y" timeZone: [NSTimeZone localTimeZone] locale: nil]; ASSIGN (modDateDescription, descr); } return modDateDescription; } return [NSString string]; } - (unsigned long long)fileSize { if ((filesize == 0) && attributes) { filesize = [attributes fileSize]; } return filesize; } - (NSString *)sizeDescription { unsigned long long fsize = [self fileSize]; NSString *sizeStr; sizeStr = sizeDescription(fsize); return sizeStr; } - (NSString *)owner { if (attributes && (owner == nil)) { ASSIGN (owner, [attributes fileOwnerAccountName]); } return (owner ? owner : (NSString *)[NSString string]); } - (NSNumber *)ownerId { if (attributes && (ownerId == nil)) { ASSIGN (ownerId, [attributes objectForKey: NSFileOwnerAccountID]); } return (ownerId ? ownerId : [NSNumber numberWithInt: 0]); } - (NSString *)group { if (attributes && (group == nil)) { ASSIGN (group, [attributes fileGroupOwnerAccountName]); } return (group ? group : (NSString *)[NSString string]); } - (NSNumber *)groupId { if (attributes && (groupId == nil)) { ASSIGN (groupId, [attributes objectForKey: NSFileGroupOwnerAccountID]); } return (groupId ? groupId : [NSNumber numberWithInt: 0]); } - (unsigned long)permissions { if ((permissions == 0) && attributes) { permissions = [attributes filePosixPermissions]; } return permissions; } - (BOOL)isPlain { if (flags.plain == -1) { [self setTypeFlags]; } return (flags.plain ? YES : NO); } - (BOOL)isDirectory { if (flags.directory == -1) { [self setTypeFlags]; } return (flags.directory ? YES : NO); } - (BOOL)isLink { if (flags.link == -1) { [self setTypeFlags]; } return (flags.link ? YES : NO); } - (BOOL)isSocket { if (flags.socket == -1) { [self setTypeFlags]; } return (flags.socket ? YES : NO); } - (BOOL)isCharspecial { if (flags.charspecial == -1) { [self setTypeFlags]; } return (flags.charspecial ? YES : NO); } - (BOOL)isBlockspecial { if (flags.blockspecial == -1) { [self setTypeFlags]; } return (flags.blockspecial ? YES : NO); } - (BOOL)isMountPoint { if (flags.mountpoint == -1) { [self setTypeFlags]; } return (flags.mountpoint ? YES : NO); } - (void)setMountPoint:(BOOL)value { flags.mountpoint = value; } - (BOOL)isApplication { if (flags.application == -1) { [self setTypeFlags]; } return (flags.application ? YES : NO); } - (BOOL)isPackage { if (flags.package == -1) { [self setTypeFlags]; } return (flags.package ? YES : NO); } - (BOOL)isReadable { if (flags.readable == -1) { flags.readable = [fm isReadableFileAtPath: path]; } return (flags.readable ? YES : NO); } - (BOOL)isWritable { if (flags.writable == -1) { flags.writable = [fm isWritableFileAtPath: path]; } return (flags.writable ? YES : NO); } - (void)checkWritable { flags.writable = [fm isWritableFileAtPath: path]; } - (BOOL)isParentWritable { return [fm isWritableFileAtPath: [self parentPath]]; } - (BOOL)isExecutable { if (flags.executable == -1) { flags.executable = [fm isExecutableFileAtPath: path]; } return (flags.executable ? YES : NO); } - (BOOL)isDeletable { if (flags.deletable == -1) { flags.deletable = [fm isDeletableFileAtPath: path]; } return (flags.deletable ? YES : NO); } - (BOOL)isLocked { return [fsnodeRep isNodeLocked: self]; } - (BOOL)isValid { BOOL valid = (attributes != nil); if (valid) { valid = [fm fileExistsAtPath: path]; if ((valid == NO) && flags.link) { valid = ([fm fileAttributesAtPath: path traverseLink: NO] != nil); } } return valid; } - (BOOL)hasValidPath { return [fm fileExistsAtPath: path]; } - (BOOL)isReserved { return [fsnodeRep isReservedName: name]; } - (BOOL)willBeValidAfterFileOperation:(NSDictionary *)opinfo { NSString *operation = [opinfo objectForKey: @"operation"]; NSString *source = [opinfo objectForKey: @"source"]; NSString *destination = [opinfo objectForKey: @"destination"]; NSArray *files = [opinfo objectForKey: @"files"]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if ([self isSubnodeOfPath: source]) { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [source stringByAppendingPathComponent: fname]; if ([path isEqual: fpath] || [self isSubnodeOfPath: fpath]) { return NO; } } } } if ([self isSubnodeOfPath: destination]) { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [destination stringByAppendingPathComponent: fname]; if ([path isEqual: fpath]) { NSString *srcpath = [source stringByAppendingPathComponent: fname]; NSDictionary *attrs = [fm fileAttributesAtPath: srcpath traverseLink: NO]; if ((attrs == nil) || ([[attrs fileType] isEqual: [self fileType]] == NO)) { return NO; } } else if ([self isSubnodeOfPath: fpath]) { NSString *ppart = subtractFirstPartFromPath(path, fpath); NSString *srcpath = [source stringByAppendingPathComponent: fname]; srcpath = [srcpath stringByAppendingPathComponent: ppart]; if ([fm fileExistsAtPath: srcpath]) { NSDictionary *attrs = [fm fileAttributesAtPath: srcpath traverseLink: NO]; if ((attrs == nil) || ([[attrs fileType] isEqual: [self fileType]] == NO)) { return NO; } } else { return NO; } } } } } return YES; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { NSString *operation = [opinfo objectForKey: @"operation"]; NSString *source = [opinfo objectForKey: @"source"]; NSString *destination = [opinfo objectForKey: @"destination"]; NSArray *files = [opinfo objectForKey: @"files"]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; destination = [destination stringByDeletingLastPathComponent]; } if ([path isEqual: source] || [path isEqual: destination]) { return YES; } if (isSubpathOfPath(source, path)) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [source stringByAppendingPathComponent: fname]; if (([fpath isEqual: path]) || (isSubpathOfPath(fpath, path))) { return YES; } } } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { destination = [opinfo objectForKey: @"destination"]; files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if (isSubpathOfPath(destination, path)) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [destination stringByAppendingPathComponent: fname]; if (([fpath isEqual: path]) || (isSubpathOfPath(fpath, path))) { return YES; } } } return NO; } @end @implementation FSNode (Comparing) - (NSComparisonResult)compareAccordingToPath:(FSNode *)aNode { return [path compare: [aNode path]]; } - (NSComparisonResult)compareAccordingToName:(FSNode *)aNode { NSString *n1 = [self name]; NSString *n2 = [aNode name]; if ([n2 hasPrefix: @"."] || [n1 hasPrefix: @"."]) { if ([n2 hasPrefix: @"."] && [n1 hasPrefix: @"."]) { return [n1 caseInsensitiveCompare: n2]; } else { return [n2 caseInsensitiveCompare: n1]; } } return [n1 caseInsensitiveCompare: n2]; } - (NSComparisonResult)compareAccordingToParent:(FSNode *)aNode { CREATE_AUTORELEASE_POOL(pool); NSString *p1 = [self parentPath]; NSString *p2 = [aNode parentPath]; NSComparisonResult result = [p1 compare: p2]; RELEASE (pool); return result; } - (NSComparisonResult)compareAccordingToKind:(FSNode *)aNode { unsigned i1, i2; if ([self isDirectory]) { i1 = 2; } else if ([self isExecutable]) { i1 = 1; } else { i1 = 0; } if ([aNode isDirectory]) { i2 = 2; } else if ([aNode isExecutable]) { i2 = 1; } else { i2 = 0; } if (i1 == i2) { return [self compareAccordingToExtension: aNode]; } return ((i1 > i2) ? NSOrderedAscending : NSOrderedDescending); } - (NSComparisonResult)compareAccordingToExtension:(FSNode *)aNode { NSString *e1 = [[self path] pathExtension]; NSString *e2 = [[aNode path] pathExtension]; if ([e1 isEqual: e2]) { return [self compareAccordingToName: aNode]; } return [e1 caseInsensitiveCompare: e2]; } - (NSComparisonResult)compareAccordingToDate:(FSNode *)aNode { return [[self modificationDate] compare: [aNode modificationDate]]; } - (NSComparisonResult)compareAccordingToSize:(FSNode *)aNode { unsigned long long fs1 = [self fileSize]; unsigned long long fs2 = [aNode fileSize]; return (fs1 > fs2) ? NSOrderedAscending : NSOrderedDescending; } - (NSComparisonResult)compareAccordingToOwner:(FSNode *)aNode { return [[self owner] compare: [aNode owner]]; } - (NSComparisonResult)compareAccordingToGroup:(FSNode *)aNode { return [[self group] compare: [aNode group]]; } @end gworkspace-1.1.0/FSNode/FSNode.m.orig0000644000175000001440000006427014751250146016506 0ustar multixusers/* FSNode.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNode.h" #import "FSNodeRep.h" #import "FSNFunctions.h" @implementation FSNode - (void)dealloc { RELEASE (path); RELEASE (relativePath); RELEASE (lastPathComponent); RELEASE (name); RELEASE (attributes); RELEASE (fileType); RELEASE (typeDescription); RELEASE (crDate); RELEASE (crDateDescription); RELEASE (modDate); RELEASE (modDateDescription); RELEASE (owner); RELEASE (ownerId); RELEASE (group); RELEASE (groupId); [super dealloc]; } + (FSNode *)nodeWithPath:(NSString *)apath { return AUTORELEASE ([[FSNode alloc] initWithRelativePath: apath parent: nil]); } + (FSNode *)nodeWithRelativePath:(NSString *)rpath parent:(FSNode *)aparent { return AUTORELEASE ([[FSNode alloc] initWithRelativePath: rpath parent: aparent]); } - (id)initWithRelativePath:(NSString *)rpath parent:(FSNode *)aparent { self = [super init]; if (self) { fsnodeRep = [FSNodeRep sharedInstance]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; parent = aparent; ASSIGN (relativePath, rpath); lastPathComponent = [[relativePath lastPathComponent] retain]; name = nil; if (parent) { NSString *parentPath = [parent path]; if ([parentPath isEqual: path_separator()]) { parentPath = @""; } ASSIGN (path, ([NSString stringWithFormat: @"%@%@%@", parentPath, path_separator(), lastPathComponent])); } else { ASSIGN (path, relativePath); } flags.readable = -1; flags.writable = -1; flags.executable = -1; flags.deletable = -1; flags.plain = -1; flags.directory = -1; flags.link = -1; flags.socket = -1; flags.charspecial = -1; flags.blockspecial = -1; flags.mountpoint = -1; flags.application = -1; flags.package = -1; flags.unknown = -1; crDate = nil; modDate = nil; owner = nil; ownerId = nil; group = nil; groupId = nil; filesize = 0; permissions = 0; fileType = nil; typeDescription = nil; application = nil; attributes = [fm fileAttributesAtPath: path traverseLink: NO]; RETAIN (attributes); /* we localize only directories which could be special */ if ([self isDirectory]) ASSIGN (name, NSLocalizedStringFromTableInBundle(lastPathComponent, nil, [NSBundle bundleForClass:[self class]], @"")); else ASSIGN (name, lastPathComponent); } return self; } - (NSUInteger)hash { return [path hash]; } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [FSNode class]]) { return [self isEqualToNode: (FSNode *)other]; } return NO; } - (BOOL)isEqualToNode:(FSNode *)anode { if (anode == self) { return YES; } return [path isEqualToString: [anode path]]; } - (NSArray *)subNodes { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *nodes = [NSMutableArray array]; NSArray *fnames = [fsnodeRep directoryContentsAtPath: path]; NSUInteger i; for (i = 0; i < [fnames count]; i++) { NSString *fname = [fnames objectAtIndex: i]; FSNode *node = [[FSNode alloc] initWithRelativePath: fname parent: self]; [nodes addObject: node]; RELEASE (node); } RETAIN (nodes); RELEASE (arp); return [[nodes autorelease] makeImmutableCopyOnFail: NO]; } - (NSArray *)subNodeNames { return [fsnodeRep directoryContentsAtPath: path]; } - (NSArray *)subNodesOfParent { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *nodes = [NSMutableArray array]; NSArray *fnames = [fsnodeRep directoryContentsAtPath: [self parentPath]]; FSNode *pnd = nil; NSUInteger i; if (parent != nil) { pnd = [parent parent]; } for (i = 0; i < [fnames count]; i++) { NSString *fname = [fnames objectAtIndex: i]; FSNode *node = [[FSNode alloc] initWithRelativePath: fname parent: pnd]; [nodes addObject: node]; RELEASE (node); } RETAIN (nodes); RELEASE (arp); return [[nodes autorelease] makeImmutableCopyOnFail: NO]; } - (NSArray *)subNodeNamesOfParent { return [fsnodeRep directoryContentsAtPath: [self parentPath]]; } + (NSArray *)nodeComponentsToNode:(FSNode *)anode { CREATE_AUTORELEASE_POOL(arp); NSArray *pcomps = [self pathComponentsToNode: anode]; NSMutableArray *components = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [pcomps count]; i++) { NSString *pcomp = [pcomps objectAtIndex: i]; FSNode *pnode = (i == 0) ? nil : [components objectAtIndex: (i-1)]; FSNode *node = [self nodeWithRelativePath: pcomp parent: pnode]; [components insertObject: node atIndex: [components count]]; } RETAIN (components); RELEASE (arp); return [[components autorelease] makeImmutableCopyOnFail: NO]; } + (NSArray *)pathComponentsToNode:(FSNode *)anode { return [[anode path] pathComponents]; } + (NSArray *)nodeComponentsFromNode:(FSNode *)firstNode toNode:(FSNode *)secondNode { if ([secondNode isSubnodeOfNode: firstNode]) { CREATE_AUTORELEASE_POOL(arp); NSString *p1 = [firstNode path]; NSString *p2 = [secondNode path]; NSUInteger index = ([p1 isEqual: path_separator()]) ? [p1 length] : ([p1 length] +1); NSArray *pcomps = [[p2 substringFromIndex: index] pathComponents]; NSMutableArray *components = [NSMutableArray array]; FSNode *node; NSUInteger i; node = [self nodeWithPath: p1]; [components addObject: node]; for (i = 0; i < [pcomps count]; i++) { FSNode *pnode = [components objectAtIndex: i]; NSString *rpath = [pcomps objectAtIndex: i]; node = [self nodeWithRelativePath: rpath parent: pnode]; [components insertObject: node atIndex: [components count]]; } RETAIN (components); RELEASE (arp); return [[components autorelease] makeImmutableCopyOnFail: NO]; } else if ([secondNode isEqual: firstNode]) { return [NSArray arrayWithObject: firstNode]; } return nil; } + (NSArray *)pathComponentsFromNode:(FSNode *)firstNode toNode:(FSNode *)secondNode { if ([secondNode isSubnodeOfNode: firstNode]) { NSString *p1 = [firstNode path]; NSString *p2 = [secondNode path]; int index = ([p1 isEqual: path_separator()]) ? [p1 length] : ([p1 length] +1); return [[p2 substringFromIndex: index] pathComponents]; } else if ([secondNode isEqual: firstNode]) { return [NSArray arrayWithObject: [firstNode name]]; } return nil; } + (NSArray *)pathsOfNodes:(NSArray *)nodes { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *paths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [nodes count]; i++) { [paths addObject: [[nodes objectAtIndex: i] path]]; } RETAIN (paths); RELEASE (arp); return [[paths autorelease] makeImmutableCopyOnFail: NO]; } + (NSUInteger)indexOfNode:(FSNode *)anode inComponents:(NSArray *)nodes { return [nodes indexOfObject: anode]; } + (NSUInteger)indexOfNodeWithPath:(NSString *)apath inComponents:(NSArray *)nodes { NSUInteger i; for (i = 0; i < [nodes count]; i++) { FSNode *node = [nodes objectAtIndex: i]; if ([[node path] isEqual: apath]) { return i; } } return NSNotFound; } + (FSNode *)subnodeWithName:(NSString *)aname inSubnodes:(NSArray *)subnodes { NSUInteger i; for (i = 0; i < [subnodes count]; i++) { FSNode *node = [subnodes objectAtIndex: i]; if ([node isValid] && [[node name] isEqual: aname]) { return node; } } return nil; } + (FSNode *)subnodeWithPath:(NSString *)apath inSubnodes:(NSArray *)subnodes { NSUInteger i; for (i = 0; i < [subnodes count]; i++) { FSNode *node = [subnodes objectAtIndex: i]; if ([node isValid] && [[node path] isEqual: apath]) { return node; } } return nil; } + (BOOL)pathOfNode:(FSNode *)anode isEqualOrDescendentOfPath:(NSString *)apath containingFiles:(NSArray *)files { NSString *nodepath = [anode path]; if ([nodepath isEqual: apath]) { return YES; } else if (isSubpathOfPath(apath, nodepath)) { NSUInteger i; if (files == nil) { return YES; } else { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [apath stringByAppendingPathComponent: fname]; if (([fpath isEqual: nodepath]) || (isSubpathOfPath(fpath, nodepath))) { return YES; } } } } return NO; } - (FSNode *)parent { return parent; } - (NSString *)parentPath { return [path stringByDeletingLastPathComponent]; } - (NSString *)parentName { return [parent name]; } - (BOOL)isSubnodeOfNode:(FSNode *)anode { return isSubpathOfPath([anode path], path); } - (BOOL)isSubnodeOfPath:(NSString *)apath { return isSubpathOfPath(apath, path); } - (BOOL)isParentOfNode:(FSNode *)anode { return isSubpathOfPath(path, [anode path]); } - (BOOL)isParentOfPath:(NSString *)apath { return isSubpathOfPath(path, apath); } - (NSString *)path { return path; } - (NSString *)relativePath { return relativePath; } /** use as never-translated name */ - (NSString *)lastPathComponent { return lastPathComponent; } /** essentially lastPathComponent which might be translated */ - (NSString *)name { return name; } - (NSString *)fileType { if (attributes && (fileType == nil)) { ASSIGN (fileType, [attributes fileType]); } return (fileType ? fileType : (NSString *)[NSString string]); } - (NSString *)application { if ([self isApplication] == NO) { return application; } return nil; } - (void)setTypeFlags { flags.plain = 0; flags.directory = 0; flags.link = 0; flags.socket = 0; flags.charspecial = 0; flags.blockspecial = 0; flags.mountpoint = 0; flags.application = 0; flags.package = 0; flags.unknown = 0; if (fileType == nil) { [self fileType]; } if (fileType) { if (fileType == NSFileTypeRegular) { flags.plain = 1; } else if (fileType == NSFileTypeDirectory) { NSString *defApp = nil, *type = nil; [ws getInfoForFile: path application: &defApp type: &type]; if (defApp) { ASSIGN (application, defApp); } flags.directory = 1; if (type == NSApplicationFileType) { flags.application = 1; flags.package = 1; } else if (type == NSPlainFileType) { flags.package = 1; } } else if (fileType == NSFileTypeSymbolicLink) { NSDictionary *attrs = [fm fileAttributesAtPath: path traverseLink: YES]; if (attrs) { [self setFlagsForSymLink: attrs]; } flags.link = 1; } else if (fileType == NSFileTypeSocket) { flags.socket = 1; } else if (fileType == NSFileTypeCharacterSpecial) { flags.charspecial = 1; } else if (fileType == NSFileTypeBlockSpecial) { flags.blockspecial = 1; } else { flags.unknown = 1; } } else { flags.unknown = 1; } } - (void)setFlagsForSymLink:(NSDictionary *)attrs { NSString *ftype = [attrs fileType]; if (ftype == NSFileTypeRegular) { flags.plain = 1; } else if (ftype == NSFileTypeDirectory) { NSString *defApp = nil, *type = nil; [ws getInfoForFile: path application: &defApp type: &type]; if (defApp) { ASSIGN (application, defApp); } flags.directory = 1; if (type == NSApplicationFileType) { flags.application = 1; flags.package = 1; } else if (type == NSPlainFileType) { flags.package = 1; } else if (type == NSFilesystemFileType) { flags.mountpoint = 1; } } else if (ftype == NSFileTypeSymbolicLink) { attrs = [fm fileAttributesAtPath: path traverseLink: YES]; if (attrs) { [self setFlagsForSymLink: attrs]; } } else if (ftype == NSFileTypeSocket) { flags.socket = 1; } else if (ftype == NSFileTypeCharacterSpecial) { flags.charspecial = 1; } else if (ftype == NSFileTypeBlockSpecial) { flags.blockspecial = 1; } else { flags.unknown = 1; } ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"symbolic link", nil, [NSBundle bundleForClass:[self class]], @"")); } - (NSString *)typeDescription { if (typeDescription == nil) { if ([self isPlain]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"plain file", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isDirectory]) { if ([self isApplication]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"application", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isPackage]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"package", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isMountPoint]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"mount point", nil, [NSBundle bundleForClass:[self class]], @"")); } else { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"directory", nil, [NSBundle bundleForClass:[self class]], @"")); } } else if ([self isLink]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"symbolic link", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isSocket]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"socket", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isCharspecial]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"character special", nil, [NSBundle bundleForClass:[self class]], @"")); } else if ([self isBlockspecial]) { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"block special", nil, [NSBundle bundleForClass:[self class]], @"")); } else { ASSIGN (typeDescription, NSLocalizedStringFromTableInBundle(@"unknown", nil, [NSBundle bundleForClass:[self class]], @"")); } } return typeDescription; } - (NSDate *)creationDate { if (attributes && (crDate == nil)) { ASSIGN (crDate, [attributes fileCreationDate]); } return (crDate ? crDate : (NSDate *)[NSDate date]); } - (NSString *)crDateDescription { NSDate *date = [self creationDate]; if (date) { if (crDateDescription == nil) { NSString *descr = [date descriptionWithCalendarFormat: @"%b %d %Y" timeZone: [NSTimeZone localTimeZone] locale: nil]; ASSIGN (crDateDescription, descr); } return crDateDescription; } return [NSString string]; } - (NSDate *)modificationDate { if (attributes && (modDate == nil)) { ASSIGN (modDate, [attributes fileModificationDate]); } return (modDate ? modDate : (NSDate *)[NSDate date]); } - (NSString *)modDateDescription { NSDate *date = [self modificationDate]; if (date) { if (modDateDescription == nil) { NSString *descr = [date descriptionWithCalendarFormat: @"%b %d %Y" timeZone: [NSTimeZone localTimeZone] locale: nil]; ASSIGN (modDateDescription, descr); } return modDateDescription; } return [NSString string]; } - (unsigned long long)fileSize { if ((filesize == 0) && attributes) { filesize = [attributes fileSize]; } return filesize; } - (NSString *)sizeDescription { unsigned long long fsize = [self fileSize]; NSString *sizeStr; sizeStr = sizeDescription(fsize); return sizeStr; } - (NSString *)owner { if (attributes && (owner == nil)) { ASSIGN (owner, [attributes fileOwnerAccountName]); } return (owner ? owner : (NSString *)[NSString string]); } - (NSNumber *)ownerId { if (attributes && (ownerId == nil)) { ASSIGN (ownerId, [attributes objectForKey: NSFileOwnerAccountID]); } return (ownerId ? ownerId : [NSNumber numberWithInt: 0]); } - (NSString *)group { if (attributes && (group == nil)) { ASSIGN (group, [attributes fileGroupOwnerAccountName]); } return (group ? group : (NSString *)[NSString string]); } - (NSNumber *)groupId { if (attributes && (groupId == nil)) { ASSIGN (groupId, [attributes objectForKey: NSFileGroupOwnerAccountID]); } return (groupId ? groupId : [NSNumber numberWithInt: 0]); } - (unsigned long)permissions { if ((permissions == 0) && attributes) { permissions = [attributes filePosixPermissions]; } return permissions; } - (BOOL)isPlain { if (flags.plain == -1) { [self setTypeFlags]; } return (flags.plain ? YES : NO); } - (BOOL)isDirectory { if (flags.directory == -1) { [self setTypeFlags]; } return (flags.directory ? YES : NO); } - (BOOL)isLink { if (flags.link == -1) { [self setTypeFlags]; } return (flags.link ? YES : NO); } - (BOOL)isSocket { if (flags.socket == -1) { [self setTypeFlags]; } return (flags.socket ? YES : NO); } - (BOOL)isCharspecial { if (flags.charspecial == -1) { [self setTypeFlags]; } return (flags.charspecial ? YES : NO); } - (BOOL)isBlockspecial { if (flags.blockspecial == -1) { [self setTypeFlags]; } return (flags.blockspecial ? YES : NO); } - (BOOL)isMountPoint { if (flags.mountpoint == -1) { [self setTypeFlags]; } return (flags.mountpoint ? YES : NO); } - (void)setMountPoint:(BOOL)value { flags.mountpoint = value; } - (BOOL)isApplication { if (flags.application == -1) { [self setTypeFlags]; } return (flags.application ? YES : NO); } - (BOOL)isPackage { if (flags.package == -1) { [self setTypeFlags]; } return (flags.package ? YES : NO); } - (BOOL)isReadable { if (flags.readable == -1) { flags.readable = [fm isReadableFileAtPath: path]; } return (flags.readable ? YES : NO); } - (BOOL)isWritable { if (flags.writable == -1) { flags.writable = [fm isWritableFileAtPath: path]; } return (flags.writable ? YES : NO); } - (void)checkWritable { flags.writable = [fm isWritableFileAtPath: path]; } - (BOOL)isParentWritable { return [fm isWritableFileAtPath: [self parentPath]]; } - (BOOL)isExecutable { if (flags.executable == -1) { flags.executable = [fm isExecutableFileAtPath: path]; } return (flags.executable ? YES : NO); } - (BOOL)isDeletable { if (flags.deletable == -1) { flags.deletable = [fm isDeletableFileAtPath: path]; } return (flags.deletable ? YES : NO); } - (BOOL)isLocked { return [fsnodeRep isNodeLocked: self]; } - (BOOL)isValid { BOOL valid = (attributes != nil); if (valid) { valid = [fm fileExistsAtPath: path]; if ((valid == NO) && flags.link) { valid = ([fm fileAttributesAtPath: path traverseLink: NO] != nil); } } return valid; } - (BOOL)hasValidPath { return [fm fileExistsAtPath: path]; } - (BOOL)isReserved { return [fsnodeRep isReservedName: name]; } - (BOOL)willBeValidAfterFileOperation:(NSDictionary *)opinfo { NSString *operation = [opinfo objectForKey: @"operation"]; NSString *source = [opinfo objectForKey: @"source"]; NSString *destination = [opinfo objectForKey: @"destination"]; NSArray *files = [opinfo objectForKey: @"files"]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if ([self isSubnodeOfPath: source]) { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [source stringByAppendingPathComponent: fname]; if ([path isEqual: fpath] || [self isSubnodeOfPath: fpath]) { return NO; } } } } if ([self isSubnodeOfPath: destination]) { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [destination stringByAppendingPathComponent: fname]; if ([path isEqual: fpath]) { NSString *srcpath = [source stringByAppendingPathComponent: fname]; NSDictionary *attrs = [fm fileAttributesAtPath: srcpath traverseLink: NO]; if ((attrs == nil) || ([[attrs fileType] isEqual: [self fileType]] == NO)) { return NO; } } else if ([self isSubnodeOfPath: fpath]) { NSString *ppart = subtractFirstPartFromPath(path, fpath); NSString *srcpath = [source stringByAppendingPathComponent: fname]; srcpath = [srcpath stringByAppendingPathComponent: ppart]; if ([fm fileExistsAtPath: srcpath]) { NSDictionary *attrs = [fm fileAttributesAtPath: srcpath traverseLink: NO]; if ((attrs == nil) || ([[attrs fileType] isEqual: [self fileType]] == NO)) { return NO; } } else { return NO; } } } } } return YES; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { NSString *operation = [opinfo objectForKey: @"operation"]; NSString *source = [opinfo objectForKey: @"source"]; NSString *destination = [opinfo objectForKey: @"destination"]; NSArray *files = [opinfo objectForKey: @"files"]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; destination = [destination stringByDeletingLastPathComponent]; } if ([path isEqual: source] || [path isEqual: destination]) { return YES; } if (isSubpathOfPath(source, path)) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [source stringByAppendingPathComponent: fname]; if (([fpath isEqual: path]) || (isSubpathOfPath(fpath, path))) { return YES; } } } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { destination = [opinfo objectForKey: @"destination"]; files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if (isSubpathOfPath(destination, path)) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [destination stringByAppendingPathComponent: fname]; if (([fpath isEqual: path]) || (isSubpathOfPath(fpath, path))) { return YES; } } } return NO; } @end @implementation FSNode (Comparing) - (NSComparisonResult)compareAccordingToPath:(FSNode *)aNode { return [path compare: [aNode path]]; } - (NSComparisonResult)compareAccordingToName:(FSNode *)aNode { NSString *n1 = [self name]; NSString *n2 = [aNode name]; if ([n2 hasPrefix: @"."] || [n1 hasPrefix: @"."]) { if ([n2 hasPrefix: @"."] && [n1 hasPrefix: @"."]) { return [n1 caseInsensitiveCompare: n2]; } else { return [n2 caseInsensitiveCompare: n1]; } } return [n1 caseInsensitiveCompare: n2]; } - (NSComparisonResult)compareAccordingToParent:(FSNode *)aNode { CREATE_AUTORELEASE_POOL(pool); NSString *p1 = [self parentPath]; NSString *p2 = [aNode parentPath]; NSComparisonResult result = [p1 compare: p2]; RELEASE (pool); return result; } - (NSComparisonResult)compareAccordingToKind:(FSNode *)aNode { unsigned i1, i2; if ([self isDirectory]) { i1 = 2; } else if ([self isExecutable]) { i1 = 1; } else { i1 = 0; } if ([aNode isDirectory]) { i2 = 2; } else if ([aNode isExecutable]) { i2 = 1; } else { i2 = 0; } if (i1 == i2) { return [self compareAccordingToExtension: aNode]; } return ((i1 > i2) ? NSOrderedAscending : NSOrderedDescending); } - (NSComparisonResult)compareAccordingToExtension:(FSNode *)aNode { NSString *e1 = [[self path] pathExtension]; NSString *e2 = [[aNode path] pathExtension]; if ([e1 isEqual: e2]) { return [self compareAccordingToName: aNode]; } return [e1 caseInsensitiveCompare: e2]; } - (NSComparisonResult)compareAccordingToDate:(FSNode *)aNode { return [[self modificationDate] compare: [aNode modificationDate]]; } - (NSComparisonResult)compareAccordingToSize:(FSNode *)aNode { unsigned long long fs1 = [self fileSize]; unsigned long long fs2 = [aNode fileSize]; return (fs1 > fs2) ? NSOrderedAscending : NSOrderedDescending; } - (NSComparisonResult)compareAccordingToOwner:(FSNode *)aNode { return [[self owner] compare: [aNode owner]]; } - (NSComparisonResult)compareAccordingToGroup:(FSNode *)aNode { return [[self group] compare: [aNode group]]; } @end gworkspace-1.1.0/FSNode/FSNode.m.rej0000644000175000001440000000762714751352021016324 0ustar multixusers--- FSNode/FSNode.m +++ FSNode/FSNode.m @@ -1,6 +1,6 @@ /* FSNode.m * - * Copyright (C) 2004-2016 Free Software Foundation, Inc. + * Copyright (C) 2004-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 @@ -69,72 +69,74 @@ { self = [super init]; - if (self) { - NSString *lastPathComponent; - - fsnodeRep = [FSNodeRep sharedInstance]; - fm = [NSFileManager defaultManager]; - ws = [NSWorkspace sharedWorkspace]; - - parent = aparent; - ASSIGN (relativePath, rpath); - lastPathComponent = [[relativePath lastPathComponent] retain]; - name = nil; + if (self) + { + NSString *lastPathComponent; + + fsnodeRep = [FSNodeRep sharedInstance]; + fm = [NSFileManager defaultManager]; + ws = [NSWorkspace sharedWorkspace]; + + parent = aparent; + ASSIGN (relativePath, rpath); + lastPathComponent = [[relativePath lastPathComponent] retain]; + name = nil; + + if (parent) + { + NSString *parentPath = [parent path]; + + if ([parentPath isEqual: path_separator()]) + { + parentPath = @""; + } + ASSIGN (path, ([NSString stringWithFormat: @"%@%@%@", + parentPath, path_separator(), lastPathComponent])); + } + else + { + ASSIGN (path, relativePath); + } + + flags.readable = -1; + flags.writable = -1; + flags.executable = -1; + flags.deletable = -1; + flags.plain = -1; + flags.directory = -1; + flags.link = -1; + flags.socket = -1; + flags.charspecial = -1; + flags.blockspecial = -1; + flags.mountpoint = -1; + flags.application = -1; + flags.package = -1; + flags.unknown = -1; + + crDate = nil; + modDate = nil; + owner = nil; + ownerId = nil; + group = nil; + groupId = nil; + filesize = 0; + permissions = 0; + fileType = nil; + typeDescription = nil; + + application = nil; + attributes = [fm fileAttributesAtPath: path traverseLink: NO]; + RETAIN (attributes); + + /* we localize only directories which could be special */ + if ([self isDirectory]) + ASSIGN (name, NSLocalizedStringFromTableInBundle(lastPathComponent, nil, [NSBundle bundleForClass:[self class]], @"")); + else + ASSIGN (name, lastPathComponent); - if (parent) { - NSString *parentPath = [parent path]; - - if ([parentPath isEqual: path_separator()]) { - parentPath = @""; - } - ASSIGN (path, ([NSString stringWithFormat: @"%@%@%@", - parentPath, path_separator(), lastPathComponent])); - } else { - ASSIGN (path, relativePath); + [lastPathComponent release]; } - - flags.readable = -1; - flags.writable = -1; - flags.executable = -1; - flags.deletable = -1; - flags.plain = -1; - flags.directory = -1; - flags.link = -1; - flags.socket = -1; - flags.charspecial = -1; - flags.blockspecial = -1; - flags.mountpoint = -1; - flags.application = -1; - flags.package = -1; - flags.unknown = -1; - - crDate = nil; - modDate = nil; - owner = nil; - ownerId = nil; - group = nil; - groupId = nil; - - filesize = 0; - permissions = 0; - - fileType = nil; - typeDescription = nil; - - application = nil; - - attributes = [fm fileAttributesAtPath: path traverseLink: NO]; - RETAIN (attributes); - - /* we localize only directories which could be special */ - if ([self isDirectory]) - ASSIGN (name, NSLocalizedStringFromTableInBundle(lastPathComponent, nil, [NSBundle bundleForClass:[self class]], @"")); - else - ASSIGN (name, lastPathComponent); - - [lastPathComponent release]; - } - + return self; } gworkspace-1.1.0/FSNode/FSNodeInfo.plist0000644000175000001440000000074413214346535017257 0ustar multixusers{ NSExecutable = "FSNode"; NSMainNibFile = ""; NSPrincipalClass = "FSNode"; CFBundleIdentifier = "org.gnustep.FSNode"; Classes = ("FSNode", "FSNodeRep", "FSNTextCell", "FSNBrowserCell", "FSNCellNameEditor", "FSNBrowserScroll", "FSNBrowserMatrix", "FSNBrowserColumn", "FSNBrowser", "FSNIcon", "FSNIconNameEditor", "FSNIconsView", "FSNListView", "FSNListViewDataSource", "FSNListViewNameEditor", "FSNListViewNodeRep", "FSNPathComponentView", "FSNPathComponentsViewer") ; } gworkspace-1.1.0/FSNode/FSNodeRep.h0000644000175000001440000002340614751213523016203 0ustar multixusers/* FSNodeRep.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSNODE_REP_H #define FSNODE_REP_H #import #import "FSNode.h" typedef enum FSNInfoType { FSNInfoNameType = 0, FSNInfoKindType = 1, FSNInfoDateType = 2, FSNInfoSizeType = 3, FSNInfoOwnerType = 4, FSNInfoParentType = 5, FSNInfoExtendedType = 6 } FSNInfoType; typedef enum FSNSelectionMask { NSSingleSelectionMask = 0, FSNMultipleSelectionMask = 1, FSNCreatingSelectionMask = 2 } FSNSelectionMask; @class NSImage; @class NSColor; @class NSBezierPath; @class NSFont; @protocol FSNodeRep - (void)setNode:(FSNode *)anode; - (void)setNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype; - (FSNode *)node; - (void)showSelection:(NSArray *)selnodes; - (BOOL)isShowingSelection; - (NSArray *)selection; - (NSArray *)pathsSelection; - (void)setFont:(NSFont *)fontObj; - (NSFont *)labelFont; - (void)setLabelTextColor:(NSColor *)acolor; - (NSColor *)labelTextColor; - (void)setIconSize:(int)isize; - (int)iconSize; - (void)setIconPosition:(NSCellImagePosition)ipos; - (NSCellImagePosition)iconPosition; - (NSRect)labelRect; - (void)setNodeInfoShowType:(FSNInfoType)type; - (BOOL)setExtendedShowType:(NSString *)type; - (FSNInfoType)nodeInfoShowType; - (NSString *)shownInfo; - (void)setNameEdited:(BOOL)value; - (void)setLeaf:(BOOL)flag; - (BOOL)isLeaf; - (void)select; - (void)unselect; - (BOOL)isSelected; - (void)setOpened:(BOOL)value; - (BOOL)isOpened; - (void)setLocked:(BOOL)value; - (BOOL)isLocked; - (void)checkLocked; - (void)setGridIndex:(NSUInteger)index; - (NSUInteger)gridIndex; - (int)compareAccordingToName:(id)aObject; - (int)compareAccordingToKind:(id)aObject; - (int)compareAccordingToDate:(id)aObject; - (int)compareAccordingToSize:(id)aObject; - (int)compareAccordingToOwner:(id)aObject; - (int)compareAccordingToGroup:(id)aObject; - (int)compareAccordingToIndex:(id)aObject; @end @protocol FSNodeRepContainer - (void)showContentsOfNode:(FSNode *)anode; - (NSDictionary *)readNodeInfo; - (NSMutableDictionary *)updateNodeInfo:(BOOL)ondisk; - (void)reloadContents; - (void)reloadFromNode:(FSNode *)anode; - (FSNode *)baseNode; - (FSNode *)shownNode; - (BOOL)isSingleNode; - (BOOL)isShowingNode:(FSNode *)anode; - (BOOL)isShowingPath:(NSString *)path; - (void)sortTypeChangedAtPath:(NSString *)path; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)setShowType:(FSNInfoType)type; - (void)setExtendedShowType:(NSString *)type; - (FSNInfoType)showType; - (void)setIconSize:(int)size; - (int)iconSize; - (void)setLabelTextSize:(int)size; - (int)labelTextSize; - (void)setIconPosition:(int)pos; - (int)iconPosition; - (void)updateIcons; - (id)repOfSubnode:(FSNode *)anode; - (id)repOfSubnodePath:(NSString *)apath; - (id)addRepForSubnode:(FSNode *)anode; - (id)addRepForSubnodePath:(NSString *)apath; - (void)removeRepOfSubnode:(FSNode *)anode; - (void)removeRepOfSubnodePath:(NSString *)apath; - (void)removeRep:(id)arep; - (void)removeUndepositedRep:(id)arep; - (void)unloadFromNode:(FSNode *)anode; - (void)repSelected:(id)arep; - (void)unselectOtherReps:(id)arep; - (void)selectReps:(NSArray *)reps; - (void)selectRepsOfSubnodes:(NSArray *)nodes; - (void)selectRepsOfPaths:(NSArray *)paths; - (void)selectAll; - (void)scrollSelectionToVisible; - (NSArray *)reps; - (NSArray *)selectedReps; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)selectionDidChange; - (void)checkLockedReps; - (void)setSelectionMask:(FSNSelectionMask)mask; - (FSNSelectionMask)selectionMask; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)restoreLastSelection; - (void)setLastShownNode:(FSNode *)anode; - (BOOL)needsDndProxy; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut; - (void)setNameEditorForRep:(id)arep; - (void)stopRepNameEditing; - (BOOL)canStartRepNameEditing; - (void)setFocusedRep:(id)arep; - (void)setBackgroundColor:(NSColor *)acolor; - (NSColor *)backgroundColor; - (void)setTextColor:(NSColor *)acolor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; @end @protocol DesktopApplication - (void)selectionChanged:(NSArray *)newsel; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionWithApp:(id)sender; - (BOOL)openFile:(NSString *)fullPath; - (void)newViewerAtPath:(NSString *)path; - (void)performFileOperation:(NSDictionary *)opinfo; - (BOOL)filenamesWasCutted; - (void)setFilenamesCutted:(BOOL)value; - (void)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files; - (void)lsfolderDragOperation:(NSData *)opinfo concludedAtPath:(NSString *)path; - (void)concludeRemoteFilesDragOperation:(NSData *)opinfo atLocalPath:(NSString *)localdest; - (void)addWatcherForPath:(NSString *)path; - (void)removeWatcherForPath:(NSString *)path; - (void)connectDDBd; - (BOOL)ddbdactive; - (void)ddbdInsertPath:(NSString *)path; - (void)ddbdRemovePath:(NSString *)path; - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; - (void)ddbdSetAnnotations:(NSString *)annotations forPath:(NSString *)path; - (NSString *)trashPath; - (id)workspaceApplication; - (oneway void)terminateApplication; - (BOOL)terminating; @end @protocol FSNViewer - (void)setSelectableNodesRange:(NSRange)range; - (void)multipleNodeViewDidSelectSubNode:(FSNode *)node; @end @protocol FSNViewerManager - (void)viewer:(id)aviewer didShowNode:(FSNode *)node; - (void)openSelectionInViewer:(id)viewer closeSender:(BOOL)close; @end @interface FSNodeRep : NSObject { NSArray *extInfoModules; FSNInfoType defSortOrder; BOOL hideSysFiles; NSMutableArray *lockedPaths; NSArray *hiddenPaths; NSMutableSet *reservedNames; NSMutableSet *volumes; NSString *rootPath; NSMutableDictionary *iconsCache; NSMutableDictionary *tumbsCache; NSString *thumbnailDir; BOOL usesThumbnails; NSImage *multipleSelIcon; NSImage *openFolderIcon; NSImage *hardDiskIcon; NSImage *openHardDiskIcon; NSImage *trashIcon; NSImage *trashFullIcon; float labelWFactor; NSFileManager *fm; } + (FSNodeRep *)sharedInstance; - (NSArray *)directoryContentsAtPath:(NSString *)path; - (int)labelMargin; - (float)labelWFactor; - (void)setLabelWFactor:(float)f; - (float)heightOfFont:(NSFont *)font; - (int)defaultIconBaseShift; - (void)setDefaultSortOrder:(int)order; - (unsigned int)defaultSortOrder; - (SEL)defaultCompareSelector; - (unsigned int)sortOrderForDirectory:(NSString *)dirpath; - (SEL)compareSelectorForDirectory:(NSString *)dirpath; - (void)setHideSysFiles:(BOOL)value; - (BOOL)hideSysFiles; - (void)setHiddenPaths:(NSArray *)paths; - (NSArray *)hiddenPaths; - (void)lockNode:(FSNode *)node; - (void)lockPath:(NSString *)path; - (void)lockNodes:(NSArray *)nodes; - (void)lockPaths:(NSArray *)paths; - (void)unlockNode:(FSNode *)node; - (void)unlockPath:(NSString *)path; - (void)unlockNodes:(NSArray *)nodes; - (void)unlockPaths:(NSArray *)paths; - (BOOL)isNodeLocked:(FSNode *)node; - (BOOL)isPathLocked:(NSString *)path; - (void)setVolumes:(NSArray *)vls; - (void)addVolumeAt:(NSString *)path; - (void)removeVolumeAt:(NSString *)path; - (NSSet *)volumes; - (void)setReservedNames:(NSArray *)names; - (NSSet *)reservedNames; - (BOOL)isReservedName:(NSString *)name; - (void)setUseThumbnails:(BOOL)value; - (BOOL)usesThumbnails; - (void)thumbnailsDidChange:(NSDictionary *)info; - (NSArray *)availableExtendedInfoNames; - (NSDictionary *)extendedInfoOfType:(NSString *)type forNode:(FSNode *)anode; @end @interface FSNodeRep (Icons) - (NSImage *)iconOfSize:(int)size forNode:(FSNode *)node; - (NSImage *)selectedIconOfSize:(int)size forNode:(FSNode *)node; - (NSImage *)cachedIconOfSize:(int)size forKey:(NSString *)key; - (NSImage *)cachedIconOfSize:(int)size forKey:(NSString *)key addBaseIcon:(NSImage *)baseIcon; - (void)removeCachedIconsForKey:(NSString *)key; - (NSImage *)multipleSelectionIconOfSize:(int)size; - (NSImage *)openFolderIconOfSize:(int)size forNode:(FSNode *)node; - (NSImage *)trashIconOfSize:(int)size; - (NSImage *)trashFullIconOfSize:(int)size; - (NSBezierPath *)highlightPathOfSize:(NSSize)size; - (float)highlightHeightFactor; - (NSImage *)resizedIcon:(NSImage *)icon ofSize:(int)size; - (NSImage *)lighterIcon:(NSImage *)icon; - (NSImage *)darkerIcon:(NSImage *)icon; - (void)prepareThumbnailsCache; - (NSImage *)thumbnailForPath:(NSString *)apath; @end #endif // FSNODE_REP_H gworkspace-1.1.0/FSNode/FSNodeRep.m0000644000175000001440000004076214751213523016214 0ustar multixusers/* FSNodeRep.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNodeRep.h" #import "FSNFunctions.h" #import "ExtendedInfo.h" #import "config.h" #ifdef HAVE_GETMNTINFO #include #include #include #ifdef HAVE_SYS_TYPES_H #include #ifdef HAVE_SYS_STATVFS_H #include #ifdef __NetBSD__ #define statfs statvfs #endif #endif #endif /* HAVE_SYSTYPES */ #else #if defined(HAVE_GETMNTENT) && defined (MNT_DIR) #if defined(HAVE_MNTENT_H) #include #elif defined(HAVE_SYS_MNTENT_H) #include #else #undef HAVE_GETMNTENT #endif #endif #endif #define LABEL_W_FACT (8.0) #define FONT_H_FACT (1.5) static FSNodeRep *shared = nil; @interface FSNodeRep (PrivateMethods) - (id)initSharedInstance; - (void)loadExtendedInfoModules; - (NSArray *)bundlesWithExtension:(NSString *)extension inPath:(NSString *)path; @end @implementation FSNodeRep (PrivateMethods) + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { if ([self class] == [FSNodeRep class]) { [FSNodeRep sharedInstance]; } initialized = YES; } } /* * Loads and caches named images * Images coming from GSTheme need to be recached on a theme change */ - (void)cacheIcons { [multipleSelIcon release]; multipleSelIcon = [[NSImage imageNamed:NSImageNameMultipleDocuments] retain]; [trashIcon release]; trashIcon = [[NSImage imageNamed:NSImageNameTrashEmpty] retain]; [trashFullIcon retain]; trashFullIcon = [[NSImage imageNamed:NSImageNameTrashFull] retain]; } - (id)initSharedInstance { self = [super init]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [FSNodeRep class]]; NSString *imagepath; BOOL isdir; NSString *libraryDir; NSNotificationCenter *nc; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; labelWFactor = LABEL_W_FACT; /* images coming form GSTheme */ [self cacheIcons]; /* images for which we provide our own resources */ imagepath = [bundle pathForImageResource: @"FolderOpen"]; openFolderIcon = [[NSImage alloc] initWithContentsOfFile: imagepath]; imagepath = [bundle pathForImageResource: @"HardDisk"]; hardDiskIcon = [[NSImage alloc] initWithContentsOfFile: imagepath]; imagepath = [bundle pathForImageResource: @"HardDiskOpen"]; openHardDiskIcon = [[NSImage alloc] initWithContentsOfFile: imagepath]; iconsCache = [NSMutableDictionary new]; rootPath = path_separator(); RETAIN (rootPath); libraryDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; if (([fm fileExistsAtPath: libraryDir isDirectory: &isdir] && isdir) == NO) { if ([fm createDirectoryAtPath: libraryDir attributes: nil] == NO) { NSLog(@"Unable to create the Library directory. Quitting now"); [NSApp terminate: self]; } } thumbnailDir = [libraryDir stringByAppendingPathComponent: @"Thumbnails"]; RETAIN (thumbnailDir); if (([fm fileExistsAtPath: thumbnailDir isDirectory: &isdir] && isdir) == NO) { if ([fm createDirectoryAtPath: thumbnailDir attributes: nil] == NO) { NSLog(@"Unable to create the thumbnails directory. Quitting now"); [NSApp terminate: self]; } } defSortOrder = FSNInfoNameType; hideSysFiles = NO; usesThumbnails = NO; lockedPaths = [NSMutableArray new]; hiddenPaths = [NSArray new]; volumes = [[NSMutableSet alloc] initWithCapacity: 1]; [self setVolumes:[[NSWorkspace sharedWorkspace] mountedRemovableMedia]]; reservedNames = [[NSMutableSet alloc] initWithCapacity: 1]; [self loadExtendedInfoModules]; /* we observe a theme change to re-cache icons */ [nc addObserver:self selector:@selector(themeDidActivate:) name:GSThemeDidActivateNotification object:nil]; } return self; } - (void)loadExtendedInfoModules { NSString *bundlesDir; NSMutableArray *bundlesPaths; NSEnumerator *enumerator; NSMutableArray *loaded; NSUInteger i; bundlesPaths = [NSMutableArray array]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; [bundlesPaths addObjectsFromArray: [self bundlesWithExtension: @"extinfo" inPath: bundlesDir]]; } loaded = [NSMutableArray array]; for (i = 0; i < [bundlesPaths count]; i++) { NSString *bpath = [bundlesPaths objectAtIndex: i]; NSBundle *bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; if ([principalClass conformsToProtocol: @protocol(ExtendedInfo)]) { CREATE_AUTORELEASE_POOL (pool); id module = [[principalClass alloc] init]; NSString *name = [module menuName]; BOOL exists = NO; int j; for (j = 0; j < [loaded count]; j++) { if ([name isEqual: [[loaded objectAtIndex: j] menuName]]) { NSLog(@"duplicate module \"%@\" at %@", name, bpath); exists = YES; break; } } if (exists == NO) { [loaded addObject: module]; } RELEASE ((id)module); RELEASE (pool); } } } ASSIGN (extInfoModules, loaded); } - (NSArray *)bundlesWithExtension:(NSString *)extension inPath:(NSString *)path { NSMutableArray *bundleList = [NSMutableArray array]; NSEnumerator *enumerator; NSString *dir; BOOL isDir; if ((([fm fileExistsAtPath: path isDirectory: &isDir]) && isDir) == NO) { return nil; } enumerator = [[fm directoryContentsAtPath: path] objectEnumerator]; while ((dir = [enumerator nextObject])) { if ([[dir pathExtension] isEqualToString: extension]) { [bundleList addObject: [path stringByAppendingPathComponent: dir]]; } } return bundleList; } - (void)themeDidActivate:(id)sender { /* we clean the cache of theme-derived images */ [iconsCache removeAllObjects]; [self cacheIcons]; } @end @implementation FSNodeRep - (void)dealloc { RELEASE (extInfoModules); RELEASE (lockedPaths); RELEASE (volumes); RELEASE (reservedNames); RELEASE (rootPath); RELEASE (hiddenPaths); RELEASE (iconsCache); RELEASE (tumbsCache); RELEASE (thumbnailDir); RELEASE (multipleSelIcon); RELEASE (openFolderIcon); RELEASE (hardDiskIcon); RELEASE (openHardDiskIcon); RELEASE (trashIcon); RELEASE (trashFullIcon); [super dealloc]; } + (FSNodeRep *)sharedInstance { if (shared == nil) { shared = [[FSNodeRep alloc] initSharedInstance]; } return shared; } - (NSArray *)directoryContentsAtPath:(NSString *)path { NSArray *fnames = [fm directoryContentsAtPath: path]; NSString *hdnFilePath = [path stringByAppendingPathComponent: @".hidden"]; NSArray *hiddenNames = nil; if ([fm fileExistsAtPath: hdnFilePath]) hiddenNames = [[NSString stringWithContentsOfFile: hdnFilePath] componentsSeparatedByString: @"\n"]; if (hiddenNames || hideSysFiles || [hiddenPaths count]) { NSMutableArray *filteredNames = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [fnames count]; i++) { NSString *fname = [fnames objectAtIndex: i]; NSString *fpath = [path stringByAppendingPathComponent: fname]; BOOL hidden = NO; if ([fname hasPrefix: @"."] && hideSysFiles) hidden = YES; if (hiddenNames && [hiddenNames containsObject: fname]) hidden = YES; if ([hiddenPaths containsObject: fpath]) hidden = YES; if (hidden == NO) { [filteredNames addObject: fname]; } } return filteredNames; } return fnames; } - (int)labelMargin { return 4; } - (float)labelWFactor { return labelWFactor; } - (void)setLabelWFactor:(float)f { labelWFactor = f; } - (float)heightOfFont:(NSFont *)font { // return [font defaultLineHeightForFont]; return ([font pointSize] * FONT_H_FACT); } - (int)defaultIconBaseShift { return 12; } - (void)setDefaultSortOrder:(int)order { defSortOrder = order; } - (unsigned int)defaultSortOrder { return defSortOrder; } - (SEL)defaultCompareSelector { SEL compareSel; switch(defSortOrder) { case FSNInfoNameType: compareSel = @selector(compareAccordingToName:); break; case FSNInfoKindType: compareSel = @selector(compareAccordingToKind:); break; case FSNInfoDateType: compareSel = @selector(compareAccordingToDate:); break; case FSNInfoSizeType: compareSel = @selector(compareAccordingToSize:); break; case FSNInfoOwnerType: compareSel = @selector(compareAccordingToOwner:); break; default: compareSel = @selector(compareAccordingToName:); break; } return compareSel; } - (unsigned int)sortOrderForDirectory:(NSString *)dirpath { if ([fm isWritableFileAtPath: dirpath]) { NSString *dictPath = [dirpath stringByAppendingPathComponent: @".gwsort"]; if ([fm fileExistsAtPath: dictPath]) { NSDictionary *sortDict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; if (sortDict) { return [[sortDict objectForKey: @"sort"] intValue]; } } } return defSortOrder; } - (SEL)compareSelectorForDirectory:(NSString *)dirpath { int order = [self sortOrderForDirectory: dirpath]; SEL compareSel; switch(order) { case FSNInfoNameType: compareSel = @selector(compareAccordingToName:); break; case FSNInfoKindType: compareSel = @selector(compareAccordingToKind:); break; case FSNInfoDateType: compareSel = @selector(compareAccordingToDate:); break; case FSNInfoSizeType: compareSel = @selector(compareAccordingToSize:); break; case FSNInfoOwnerType: compareSel = @selector(compareAccordingToOwner:); break; default: compareSel = @selector(compareAccordingToName:); break; } return compareSel; } - (void)setHideSysFiles:(BOOL)value { hideSysFiles = value; } - (BOOL)hideSysFiles { return hideSysFiles; } - (void)setHiddenPaths:(NSArray *)paths { ASSIGN (hiddenPaths, paths); } - (NSArray *)hiddenPaths { return hiddenPaths; } - (void)lockNode:(FSNode *)node { NSString *path = [node path]; if ([lockedPaths containsObject: path] == NO) { [lockedPaths addObject: path]; } } - (void)lockPath:(NSString *)path { if ([lockedPaths containsObject: path] == NO) { [lockedPaths addObject: path]; } } - (void)lockNodes:(NSArray *)nodes { NSUInteger i; for (i = 0; i < [nodes count]; i++) { NSString *path = [[nodes objectAtIndex: i] path]; if ([lockedPaths containsObject: path] == NO) { [lockedPaths addObject: path]; } } } - (void)lockPaths:(NSArray *)paths { NSUInteger i; for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; if ([lockedPaths containsObject: path] == NO) { [lockedPaths addObject: path]; } } } - (void)unlockNode:(FSNode *)node { NSString *path = [node path]; if ([lockedPaths containsObject: path]) { [lockedPaths removeObject: path]; } } - (void)unlockPath:(NSString *)path { if ([lockedPaths containsObject: path]) { [lockedPaths removeObject: path]; } } - (void)unlockNodes:(NSArray *)nodes { NSUInteger i; for (i = 0; i < [nodes count]; i++) { NSString *path = [[nodes objectAtIndex: i] path]; if ([lockedPaths containsObject: path]) { [lockedPaths removeObject: path]; } } } - (void)unlockPaths:(NSArray *)paths { NSUInteger i; for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; if ([lockedPaths containsObject: path]) { [lockedPaths removeObject: path]; } } } - (BOOL)isNodeLocked:(FSNode *)node { NSString *path = [node path]; NSUInteger i; if ([lockedPaths containsObject: path]) return YES; for (i = 0; i < [lockedPaths count]; i++) { NSString *lpath = [lockedPaths objectAtIndex: i]; if (isSubpathOfPath(lpath, path)) { return YES; } } return NO; } - (BOOL)isPathLocked:(NSString *)path { NSUInteger i; if ([lockedPaths containsObject: path]) return YES; for (i = 0; i < [lockedPaths count]; i++) { NSString *lpath = [lockedPaths objectAtIndex: i]; if (isSubpathOfPath(lpath, path)) return YES; } return NO; } - (void)setVolumes:(NSArray *)vls { [volumes removeAllObjects]; [volumes addObjectsFromArray: vls]; } - (void)addVolumeAt:(NSString *)path { [volumes addObject: path]; } - (void)removeVolumeAt:(NSString *)path { [volumes removeObject: path]; } - (NSSet *)volumes { return volumes; } - (void)setReservedNames:(NSArray *)names { [reservedNames removeAllObjects]; [reservedNames addObjectsFromArray: names]; } - (NSSet *)reservedNames { return reservedNames; } - (BOOL)isReservedName:(NSString *)name { return [reservedNames containsObject: name]; } - (void)setUseThumbnails:(BOOL)value { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; usesThumbnails = value; if (usesThumbnails) { [self prepareThumbnailsCache]; } [defaults setBool: usesThumbnails forKey: @"use_thumbnails"]; } - (BOOL)usesThumbnails { return usesThumbnails; } - (void)thumbnailsDidChange:(NSDictionary *)info { NSArray *deleted = [info objectForKey: @"deleted"]; NSArray *created = [info objectForKey: @"created"]; NSUInteger i; if (usesThumbnails == NO) { return; } if ([deleted count]) { for (i = 0; i < [deleted count]; i++) { [tumbsCache removeObjectForKey: [deleted objectAtIndex: i]]; } } if ([created count]) { NSString *dictName = @"thumbnails.plist"; NSString *dictPath = [thumbnailDir stringByAppendingPathComponent: dictName]; if ([fm fileExistsAtPath: dictPath]) { NSDictionary *tdict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; for (i = 0; i < [created count]; i++) { NSString *key = [created objectAtIndex: i]; NSString *tumbname = [tdict objectForKey: key]; NSString *tumbpath = [thumbnailDir stringByAppendingPathComponent: tumbname]; if ([fm fileExistsAtPath: tumbpath]) { NSImage *tumb = nil; NS_DURING { tumb = [[NSImage alloc] initWithContentsOfFile: tumbpath]; if (tumb) { [tumbsCache setObject: tumb forKey: key]; RELEASE (tumb); } } NS_HANDLER { NSLog(@"BAD IMAGE '%@'", tumbpath); } NS_ENDHANDLER } } } } } - (NSArray *)availableExtendedInfoNames { NSMutableArray *names = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [extInfoModules count]; i++) { id module = [extInfoModules objectAtIndex: i]; [names addObject: [module menuName]]; } return names; } - (NSDictionary *)extendedInfoOfType:(NSString *)type forNode:(FSNode *)anode { NSUInteger i; for (i = 0; i < [extInfoModules count]; i++) { id module = [extInfoModules objectAtIndex: i]; NSString *mname = [module menuName]; if ([mname isEqual: type]) { return [module extendedInfoForNode: anode]; } } return nil; } @end gworkspace-1.1.0/FSNode/FSNodeRepIcons.m0000644000175000001440000006107514751213523017210 0ustar multixusers/* FSNodeRepIcons.m * * Copyright (C) 2005-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: March 2005 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "FSNodeRep.h" #import "FSNFunctions.h" /* ***************************************************************************** * lighter icons lookup table ***************************************************************************** to regenerate it, define the gamma (HLGH) and put this somewere: { #define HLGH 1.5 unsigned i, line = 1; printf("static unsigned char lighterLUT[256] = { \n"); for (i = 1; i <= 256; i++) { printf("%d", (unsigned)floor(255 * pow(((float)i / 256.0f), 1 / HLGH))); if (i < 256) printf(", "); if (!(line % 16)) printf("\n "); line++; } printf("};\n"); fflush(stdout); } */ static unsigned char lighterLUT[256] = { 6, 10, 13, 15, 18, 20, 23, 25, 27, 29, 31, 33, 34, 36, 38, 40, 41, 43, 45, 46, 48, 49, 51, 52, 54, 55, 56, 58, 59, 61, 62, 63, 65, 66, 67, 68, 70, 71, 72, 73, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 138, 139, 140, 141, 142, 143, 144, 145, 146, 146, 147, 148, 149, 150, 151, 152, 153, 153, 154, 155, 156, 157, 158, 158, 159, 160, 161, 162, 163, 163, 164, 165, 166, 167, 168, 168, 169, 170, 171, 172, 172, 173, 174, 175, 176, 176, 177, 178, 179, 180, 180, 181, 182, 183, 184, 184, 185, 186, 187, 187, 188, 189, 190, 191, 191, 192, 193, 194, 194, 195, 196, 197, 197, 198, 199, 200, 200, 201, 202, 203, 203, 204, 205, 206, 206, 207, 208, 209, 209, 210, 211, 211, 212, 213, 214, 214, 215, 216, 217, 217, 218, 219, 219, 220, 221, 222, 222, 223, 224, 224, 225, 226, 226, 227, 228, 229, 229, 230, 231, 231, 232, 233, 233, 234, 235, 236, 236, 237, 238, 238, 239, 240, 240, 241, 242, 242, 243, 244, 244, 245, 246, 246, 247, 248, 248, 249, 250, 250, 251, 252, 253, 253, 254, 255 }; /* ***************************************************************************** * darker icons lookup table ***************************************************************************** to regenerate it, define the gamma (DARK) and put this somewere: { #define DARK 0.5 unsigned i, line = 1; printf("static unsigned char darkerLUT[256] = { \n"); for (i = 1; i <= 256; i++) { printf("%d", (unsigned)floor(255 * pow(((float)i / 256.0f), 1 / DARK))); if (i < 256) printf(", "); if (!(line % 16)) printf("\n "); line++; } printf("};\n"); fflush(stdout); } */ static unsigned char darkerLUT[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 15, 15, 16, 16, 17, 17, 18, 19, 19, 20, 20, 21, 21, 22, 23, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 97, 98, 99, 100, 102, 103, 104, 105, 107, 108, 109, 111, 112, 113, 115, 116, 117, 119, 120, 121, 123, 124, 126, 127, 128, 130, 131, 133, 134, 136, 137, 138, 140, 141, 143, 144, 146, 147, 149, 151, 152, 154, 155, 157, 158, 160, 161, 163, 165, 166, 168, 169, 171, 173, 174, 176, 178, 179, 181, 183, 184, 186, 188, 190, 191, 193, 195, 196, 198, 200, 202, 204, 205, 207, 209, 211, 213, 214, 216, 218, 220, 222, 224, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255 }; @implementation FSNodeRep (Icons) - (NSImage *)iconOfSize:(int)size forNode:(FSNode *)node { NSString *nodepath = [node path]; NSImage *icon = nil; NSImage *baseIcon = nil; NSString *key = nil; if ([node isDirectory]) { if ([node isApplication]) { key = nodepath; } else if ([node isMountPoint] || [volumes containsObject: nodepath]) { key = @"disk"; baseIcon = hardDiskIcon; } else if ([node isPackage] == NO) { NSString *iconPath = [nodepath stringByAppendingPathComponent: @".dir.tiff"]; if ([fm isReadableFileAtPath: iconPath]) { key = iconPath; } else { /* we may have more than one folder icon */ key = nodepath; } } else { /* a bundle */ key = nodepath; } if (key != nil) { icon = [self cachedIconOfSize: size forKey: key]; if (icon == nil) { if (baseIcon == nil) baseIcon = [[NSWorkspace sharedWorkspace] iconForFile: nodepath]; if (baseIcon == nil) { NSLog(@"no icon in cache for key %@ and no WS icon for %@", key, nodepath); } if (baseIcon != nil) { if ([node isLink]) { NSImage *linkIcon; linkIcon = [NSImage imageNamed:@"common_linkCursor"]; baseIcon = [baseIcon copy]; [baseIcon lockFocus]; [linkIcon compositeToPoint:NSMakePoint(0,0) operation:NSCompositeSourceOver]; [baseIcon unlockFocus]; [baseIcon autorelease]; } icon = [self cachedIconOfSize: size forKey: key addBaseIcon: baseIcon]; } } } } else { // NOT DIRECTORY NSString *realPath; realPath = [nodepath stringByResolvingSymlinksInPath]; if (usesThumbnails) { icon = [self thumbnailForPath: realPath]; if (icon) { NSSize icnsize = [icon size]; if ([node isLink]) { NSImage *linkIcon; linkIcon = [NSImage imageNamed:@"common_linkCursor"]; icon = [icon copy]; [icon lockFocus]; [linkIcon compositeToPoint:NSMakePoint(0,0) operation:NSCompositeSourceOver]; [icon unlockFocus]; [icon autorelease]; } if ((icnsize.width > size) || (icnsize.height > size)) { return [self resizedIcon: icon ofSize: size]; } } } // no thumbnail found if (icon == nil) { NSString *linkKey; NSString *ext = [[realPath pathExtension] lowercaseString]; if (ext && [ext length]) { key = ext; } else { key = @"unknown"; } linkKey = nil; if ([node isLink]) { linkKey = [key stringByAppendingString:@"_linked"]; icon = [self cachedIconOfSize: size forKey: linkKey]; } else { icon = [self cachedIconOfSize: size forKey: key]; } if (icon == nil) { // we look up the cache, but only in the full size to composite later baseIcon = [self cachedIconOfSize: 48 forKey: key]; if (baseIcon == nil) baseIcon = [[NSWorkspace sharedWorkspace] iconForFile: nodepath]; if ([node isLink]) { NSImage *linkIcon; linkIcon = [NSImage imageNamed:@"common_linkCursor"]; baseIcon = [baseIcon copy]; [baseIcon lockFocus]; [linkIcon compositeToPoint:NSMakePoint(0,0) operation:NSCompositeSourceOver]; [baseIcon unlockFocus]; [baseIcon autorelease]; icon = [self cachedIconOfSize: size forKey: linkKey addBaseIcon: baseIcon]; } else { icon = [self cachedIconOfSize: size forKey: key addBaseIcon: baseIcon]; } } } } if (icon == nil) { NSLog(@"Warning: No icon found for %@", nodepath); } return icon; } - (NSImage *)selectedIconOfSize:(int)size forNode:(FSNode *)node { return [self darkerIcon: [self iconOfSize: size forNode: node]]; } - (NSImage *)cachedIconOfSize:(int)size forKey:(NSString *)key { NSMutableDictionary *dict = [iconsCache objectForKey: key]; if (dict != nil) { NSNumber *num = [NSNumber numberWithInt: size]; NSImage *icon = [dict objectForKey: num]; if (icon == nil) { NSImage *baseIcon = [dict objectForKey: [NSNumber numberWithInt: 48]]; icon = [self resizedIcon: baseIcon ofSize: size]; [dict setObject: icon forKey: num]; } return icon; } return nil; } - (NSImage *)cachedIconOfSize:(int)size forKey:(NSString *)key addBaseIcon:(NSImage *)baseIcon { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSSize icnsize = [baseIcon size]; int basesize = 48; if ((icnsize.width > basesize) || (icnsize.height > basesize)) { baseIcon = [self resizedIcon: baseIcon ofSize: basesize]; } [dict setObject: baseIcon forKey: [NSNumber numberWithInt: basesize]]; [iconsCache setObject: dict forKey: key]; return [self cachedIconOfSize: size forKey: key]; } - (void)removeCachedIconsForKey:(NSString *)key { [iconsCache removeObjectForKey: key]; } - (NSImage *)multipleSelectionIconOfSize:(int)size { NSSize icnsize = [multipleSelIcon size]; if ((icnsize.width > size) || (icnsize.height > size)) { return [self resizedIcon: multipleSelIcon ofSize: size]; } return multipleSelIcon; } - (NSImage *)openFolderIconOfSize:(int)size forNode:(FSNode *)node { NSString *ipath = [[node path] stringByAppendingPathComponent: @".opendir.tiff"]; NSImage *icon = nil; if ([fm isReadableFileAtPath: ipath]) { NSImage *img = [[NSImage alloc] initWithContentsOfFile: ipath]; if (img) { icon = AUTORELEASE (img); } else { icon = [self darkerIcon: [self iconOfSize: size forNode: node]]; } } else { if ([node isMountPoint] || [volumes containsObject: [node path]]) { icon = [self darkerIcon: hardDiskIcon]; } else { icon = [self darkerIcon: [self iconOfSize: size forNode: node]]; } } if (icon) { NSSize icnsize = [icon size]; if ((icnsize.width > size) || (icnsize.height > size)) { return [self resizedIcon: icon ofSize: size]; } } return icon; } - (NSImage *)trashIconOfSize:(int)size { NSSize icnsize = [trashIcon size]; if ((icnsize.width > size) || (icnsize.height > size)) { return [self resizedIcon: trashIcon ofSize: size]; } return trashIcon; } - (NSImage *)trashFullIconOfSize:(int)size { NSSize icnsize = [trashFullIcon size]; if ((icnsize.width > size) || (icnsize.height > size)) { return [self resizedIcon: trashFullIcon ofSize: size]; } return trashFullIcon; } - (NSBezierPath *)highlightPathOfSize:(NSSize)size { NSSize intsize = NSMakeSize(ceil(size.width), ceil(size.height)); NSBezierPath *bpath = [NSBezierPath bezierPath]; float clenght = intsize.height / 4; NSPoint p, cp1, cp2; p = NSMakePoint(clenght, 0); [bpath moveToPoint: p]; p = NSMakePoint(0, clenght); cp1 = NSMakePoint(0, 0); cp2 = NSMakePoint(0, 0); [bpath curveToPoint: p controlPoint1: cp1 controlPoint2: cp2]; p = NSMakePoint(0, intsize.height - clenght); [bpath lineToPoint: p]; p = NSMakePoint(clenght, intsize.height); cp1 = NSMakePoint(0, intsize.height); cp2 = NSMakePoint(0, intsize.height); [bpath curveToPoint: p controlPoint1: cp1 controlPoint2: cp2]; p = NSMakePoint(intsize.width - clenght, intsize.height); [bpath lineToPoint: p]; p = NSMakePoint(intsize.width, intsize.height - clenght); cp1 = NSMakePoint(intsize.width, intsize.height); cp2 = NSMakePoint(intsize.width, intsize.height); [bpath curveToPoint: p controlPoint1: cp1 controlPoint2: cp2]; p = NSMakePoint(intsize.width, clenght); [bpath lineToPoint: p]; p = NSMakePoint(intsize.width - clenght, 0); cp1 = NSMakePoint(intsize.width, 0); cp2 = NSMakePoint(intsize.width, 0); [bpath curveToPoint: p controlPoint1: cp1 controlPoint2: cp2]; [bpath closePath]; return bpath; } - (float)highlightHeightFactor { return 0.8125; } - (NSImage *)resizedIcon:(NSImage *)icon ofSize:(int)size { CREATE_AUTORELEASE_POOL(arp); NSSize icnsize = [icon size]; NSRect srcr = NSMakeRect(0, 0, icnsize.width, icnsize.height); float fact = (icnsize.width >= icnsize.height) ? (icnsize.width / size) : (icnsize.height / size); NSSize newsize = NSMakeSize(floor(icnsize.width / fact + 0.5), floor(icnsize.height / fact + 0.5)); NSRect dstr = NSMakeRect(0, 0, newsize.width, newsize.height); NSImage *newIcon = [[NSImage alloc] initWithSize: newsize]; NSBitmapImageRep *rep = nil; [newIcon lockFocus]; [icon drawInRect: dstr fromRect: srcr operation: NSCompositeSourceOver fraction: 1.0]; rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: dstr]; [newIcon addRepresentation: rep]; RELEASE (rep); [newIcon unlockFocus]; RELEASE (arp); return AUTORELEASE (newIcon); } /* // using nearest neighbour algorithm #define MIX_LIM 16 - (NSImage *)resizedIcon:(NSImage *)icon ofSize:(int)size { CREATE_AUTORELEASE_POOL(arp); NSData *tiffdata = [icon TIFFRepresentation]; NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData: tiffdata]; int spp = [rep samplesPerPixel]; int bitsPerPixel = [rep bitsPerPixel]; int bpp = bitsPerPixel / 8; NSImage *newIcon = nil; if (((spp == 3) && (bitsPerPixel == 24)) || ((spp == 4) && (bitsPerPixel == 32)) || ((spp == 1) && (bitsPerPixel == 8)) || ((spp == 2) && (bitsPerPixel == 16))) { NSSize icnsize = [icon size]; float fact = (icnsize.width >= icnsize.height) ? (icnsize.width / size) : (icnsize.height / size); NSSize newsize = NSMakeSize(floor(icnsize.width / fact + 0.5), floor(icnsize.height / fact + 0.5)); float xratio = icnsize.width / newsize.width; float yratio = icnsize.height / newsize.height; BOOL hasAlpha = [rep hasAlpha]; BOOL isColor = hasAlpha ? (spp > 2) : (spp > 1); NSString *colorSpaceName = isColor ? NSCalibratedRGBColorSpace : NSCalibratedWhiteColorSpace; NSBitmapImageRep *newrep; unsigned char *srcData; unsigned char *dstData; unsigned x, y; newIcon = [[NSImage alloc] initWithSize: newsize]; newrep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL pixelsWide: (int)newsize.width pixelsHigh: (int)newsize.height bitsPerSample: 8 samplesPerPixel: (isColor ? 4 : 2) hasAlpha: YES isPlanar: NO colorSpaceName: colorSpaceName bytesPerRow: 0 bitsPerPixel: 0]; [newIcon addRepresentation: newrep]; RELEASE (newrep); srcData = [rep bitmapData]; dstData = [newrep bitmapData]; for (y = 0; y < (int)(newsize.height); y++) { int px[2], py[2]; py[0] = floor(y * yratio); py[1] = ceil((y + 1) * yratio); py[1] = ((py[1] > icnsize.height) ? (int)(icnsize.height) : py[1]); for (x = 0; x < (int)(newsize.width); x++) { int expos = (int)(bpp * (floor(y * yratio) * icnsize.width + floor(x * xratio))); unsigned expix[4] = { 0, 0, 0, 0 }; unsigned pix[4] = { 0, 0, 0, 0 }; int count = 0; unsigned char c; int i, j; expix[0] = srcData[expos]; if (isColor) { expix[1] = srcData[expos + 1]; expix[2] = srcData[expos + 2]; expix[3] = (hasAlpha ? srcData[expos + 3] : 255); } else { expix[1] = (hasAlpha ? srcData[expos + 1] : 255); } px[0] = floor(x * xratio); px[1] = ceil((x + 1) * xratio); px[1] = ((px[1] > icnsize.width) ? (int)(icnsize.width) : px[1]); for (i = px[0]; i < px[1]; i++) { for (j = py[0]; j < py[1]; j++) { int pos = (int)(bpp * (j * icnsize.width + i)); pix[0] += srcData[pos]; if (isColor) { pix[1] += srcData[pos + 1]; pix[2] += srcData[pos + 2]; pix[3] += (hasAlpha ? srcData[pos + 3] : 255); } else { pix[1] += (hasAlpha ? srcData[pos + 1] : 255); } count++; } } c = (unsigned char)(pix[0] / count); *dstData++ = ((abs(c - expix[0]) < MIX_LIM) ? (unsigned char)expix[0] : c); if (isColor) { c = (unsigned char)(pix[1] / count); *dstData++ = ((abs(c - expix[1]) < MIX_LIM) ? (unsigned char)expix[1] : c); c = (unsigned char)(pix[2] / count); *dstData++ = ((abs(c - expix[2]) < MIX_LIM) ? (unsigned char)expix[2] : c); c = (unsigned char)(pix[3] / count); *dstData++ = ((abs(c - expix[3]) < MIX_LIM) ? (unsigned char)expix[3] : c); } else { c = (unsigned char)(pix[1] / count); *dstData++ = ((abs(c - expix[1]) < MIX_LIM) ? (unsigned char)expix[1] : c); } } } } else { NSSize icnsize = [icon size]; NSRect srcr = NSMakeRect(0, 0, icnsize.width, icnsize.height); float fact = (icnsize.width >= icnsize.height) ? (icnsize.width / size) : (icnsize.height / size); NSSize newsize = NSMakeSize(floor(icnsize.width / fact + 0.5), floor(icnsize.height / fact + 0.5)); NSRect dstr = NSMakeRect(0, 0, newsize.width, newsize.height); NSBitmapImageRep *rep = nil; newIcon = [[NSImage alloc] initWithSize: newsize]; [newIcon lockFocus]; [icon drawInRect: dstr fromRect: srcr operation: NSCompositeSourceOver fraction: 1.0]; rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: dstr]; [newIcon addRepresentation: rep]; RELEASE (rep); [newIcon unlockFocus]; } RELEASE (arp); return AUTORELEASE (newIcon); } */ - (NSImage *)lighterIcon:(NSImage *)icon { CREATE_AUTORELEASE_POOL(arp); NSData *tiffdata = [icon TIFFRepresentation]; NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData: tiffdata]; int samplesPerPixel = [rep samplesPerPixel]; int bitsPerPixel = [rep bitsPerPixel]; NSImage *newIcon; if (((samplesPerPixel == 3) && (bitsPerPixel == 24)) || ((samplesPerPixel == 4) && (bitsPerPixel == 32))) { int pixelsWide = [rep pixelsWide]; int pixelsHigh = [rep pixelsHigh]; int bytesPerRow = [rep bytesPerRow]; NSBitmapImageRep *newrep; unsigned char *srcData; unsigned char *dstData; unsigned char *psrc; unsigned char *pdst; unsigned char *limit; newIcon = [[NSImage alloc] initWithSize: NSMakeSize(pixelsWide, pixelsHigh)]; newrep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL pixelsWide: pixelsWide pixelsHigh: pixelsHigh bitsPerSample: 8 samplesPerPixel: 4 hasAlpha: YES isPlanar: NO colorSpaceName: NSDeviceRGBColorSpace bytesPerRow: 0 bitsPerPixel: 0]; [newIcon addRepresentation: newrep]; RELEASE (newrep); srcData = [rep bitmapData]; dstData = [newrep bitmapData]; psrc = srcData; pdst = dstData; limit = srcData + pixelsHigh * bytesPerRow; while (psrc < limit) { *pdst++ = lighterLUT[*(psrc+0)]; *pdst++ = lighterLUT[*(psrc+1)]; *pdst++ = lighterLUT[*(psrc+2)]; *pdst++ = (bitsPerPixel == 32) ? *(psrc+3) : 255; psrc += (bitsPerPixel == 32) ? 4 : 3; } } else { newIcon = [icon copy]; } RELEASE (arp); return [newIcon autorelease]; } - (NSImage *)darkerIcon:(NSImage *)icon { CREATE_AUTORELEASE_POOL(arp); NSData *tiffdata = [icon TIFFRepresentation]; NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData: tiffdata]; int samplesPerPixel = [rep samplesPerPixel]; int bitsPerPixel = [rep bitsPerPixel]; NSImage *newIcon; if (((samplesPerPixel == 3) && (bitsPerPixel == 24)) || ((samplesPerPixel == 4) && (bitsPerPixel == 32))) { int pixelsWide = [rep pixelsWide]; int pixelsHigh = [rep pixelsHigh]; int bytesPerRow = [rep bytesPerRow]; NSBitmapImageRep *newrep; unsigned char *srcData; unsigned char *dstData; unsigned char *psrc; unsigned char *pdst; unsigned char *limit; newIcon = [[NSImage alloc] initWithSize: NSMakeSize(pixelsWide, pixelsHigh)]; newrep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL pixelsWide: pixelsWide pixelsHigh: pixelsHigh bitsPerSample: 8 samplesPerPixel: 4 hasAlpha: YES isPlanar: NO colorSpaceName: NSDeviceRGBColorSpace bytesPerRow: 0 bitsPerPixel: 0]; [newIcon addRepresentation: newrep]; RELEASE (newrep); srcData = [rep bitmapData]; dstData = [newrep bitmapData]; psrc = srcData; pdst = dstData; limit = srcData + pixelsHigh * bytesPerRow; while (psrc < limit) { *pdst++ = darkerLUT[*(psrc+0)]; *pdst++ = darkerLUT[*(psrc+1)]; *pdst++ = darkerLUT[*(psrc+2)]; *pdst++ = (bitsPerPixel == 32) ? *(psrc+3) : 255; psrc += (bitsPerPixel == 32) ? 4 : 3; } } else { newIcon = [icon copy]; } RELEASE (arp); return [newIcon autorelease]; } - (void)prepareThumbnailsCache { NSString *dictName = @"thumbnails.plist"; NSString *dictPath = [thumbnailDir stringByAppendingPathComponent: dictName]; NSDictionary *tdict; DESTROY (tumbsCache); tumbsCache = [NSMutableDictionary new]; if ([fm fileExistsAtPath: dictPath]) { tdict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; if (tdict) { NSArray *keys = [tdict allKeys]; int i; for (i = 0; i < [keys count]; i++) { NSString *key = [keys objectAtIndex: i]; NSString *tumbname = [tdict objectForKey: key]; NSString *tumbpath = [thumbnailDir stringByAppendingPathComponent: tumbname]; if ([fm fileExistsAtPath: tumbpath]) { NSImage *tumb = nil; NS_DURING { tumb = [[NSImage alloc] initWithContentsOfFile: tumbpath]; if (tumb) { [tumbsCache setObject: tumb forKey: key]; RELEASE (tumb); } } NS_HANDLER { NSLog(@"BAD IMAGE '%@'", tumbpath); } NS_ENDHANDLER } } } } } - (NSImage *)thumbnailForPath:(NSString *)apath { if (usesThumbnails && tumbsCache) { return [tumbsCache objectForKey: apath]; } return nil; } @end /* // original nearest neighbour algorithm for (y = 0; y < (int)newsize.height; y++) { for (x = 0; x < (int)newsize.width; x++) { int pos = (int)(bpp * (floor(y * yratio) * icnsize.width + floor(x * xratio))); *dstData++ = srcData[pos]; if (isColor) { *dstData++ = srcData[pos + 1]; *dstData++ = srcData[pos + 2]; } if (hasAlpha) { if (isColor) { *dstData++ = srcData[pos + 3]; } else { *dstData++ = srcData[pos + 1]; } } else { *dstData++ = 255; } } } */ gworkspace-1.1.0/FSNode/GNUmakefile0000644000175000001440000000276713251572110016320 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make include Version FRAMEWORK_NAME = FSNode FSNode_OBJC_FILES = \ FSNode.m \ FSNodeRep.m \ FSNodeRepIcons.m \ FSNFunctions.m \ FSNTextCell.m \ FSNBrowserCell.m \ FSNBrowserScroll.m \ FSNBrowserMatrix.m \ FSNBrowserColumn.m \ FSNBrowser.m \ FSNIcon.m \ FSNIconsView.m \ FSNListView.m \ FSNPathComponentsViewer.m \ FSNode_HEADER_FILES = \ FSNode.h \ FSNodeRep.h \ FSNFunctions.h \ FSNTextCell.h \ FSNBrowserCell.h \ FSNBrowserScroll.h \ FSNBrowserMatrix.h \ FSNBrowserColumn.h \ FSNBrowser.h \ FSNIcon.h \ FSNIconsView.h \ FSNListView.h \ FSNPathComponentsViewer.h \ FSNode_HAS_RESOURCE_BUNDLE = yes FSNode_RESOURCE_FILES = \ Resources/Images/* \ Resources/*.lproj \ FSNode_LANGUAGES = \ English \ Italian \ German \ French \ Spanish \ LIBRARIES_DEPEND_UPON += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ifeq ($(OBJC_RUNTIME_LIB), gnu) SHARED_LD_POSTFLAGS += -lgnustep-base -lgnustep-gui endif endif SUBPROJECTS = ExtendedInfo -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/framework.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/FSNode/GNUmakefile.postamble0000644000175000001440000000126713251572110020277 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # rm -rf autom4te*.cache rm -f config.status config.log config.cache config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/FSNode/GNUmakefile.preamble0000644000175000001440000000100113251572110020062 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -IExtendedInfo -I.. # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += LIBRARIES_DEPEND_UPON += -lm gworkspace-1.1.0/FSNode/Resources/0000755000175000001440000000000013214346535016215 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/English.lproj/0000755000175000001440000000000013214346535020733 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/English.lproj/Localizable.strings0000644000175000001440000000763713214346535024604 0ustar multixusers/*** English.lproj/Localizable.strings updated by make_strings 2016-01-22 00:30:18 +0100 add comments above this one ***/ /*** Keys found in multiple places ***/ /* File: ../FSNFunctions.m:147 */ /* File: ../FSNFunctions.m:155 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:164 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:194 */ /* Flag: untranslated */ "Continue" = "Continue"; /* File: ../FSNBrowserColumn.m:1619 */ /* File: ../FSNFunctions.m:181 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1584 */ /* Flag: untranslated */ "OK" = "OK"; /* File: ../FSNBrowserCell.m:407 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:817 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "elements" = "elements"; /* File: ../FSNBrowserColumn.m:1616 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1581 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "error" = "error"; /* File: ../FSNBrowserColumn.m:1618 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1583 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "Can't open " = "Can't open "; /* File: ../FSNListView.m:150 */ /* Flag: untranslated */ /* File: ../FSNListView.m:171 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "Name" = "Name"; /* File: ../FSNode.m:561 */ /* Flag: untranslated */ /* File: ../FSNode.m:580 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "symbolic link" = "symbolic link"; /* File: ../FSNode.m:568 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "plain file" = "plain file"; /* File: ../FSNode.m:588 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "unknown" = "unknown"; /*** Unmatched/untranslated keys ***/ /* File: :0 */ /* Flag: unmatched */ "Application" = "Application"; /*** Strings from ../FSNFunctions.m ***/ /* File: ../FSNFunctions.m:193 */ " is already in use!" = " is already in use!"; /* File: ../FSNFunctions.m:173 */ "Are you sure you want to add the extension" = "Are you sure you want to add the extension"; /* File: ../FSNFunctions.m:180 */ "Cancel" = "Cancel"; /* File: ../FSNFunctions.m:189 */ /* File: ../FSNFunctions.m:162 */ /* File: ../FSNFunctions.m:153 */ /* File: ../FSNFunctions.m:143 */ "Error" = "Error"; /* File: ../FSNFunctions.m:163 */ "Invalid name" = "Invalid name"; /* File: ../FSNFunctions.m:191 */ "The name " = "The name "; /* File: ../FSNFunctions.m:154 */ "You can't rename an object that is in the Recycler" = "You can't rename an object that is in the Recycler"; /* File: ../FSNFunctions.m:145 */ "You do not have write permission for" = "You do not have write permission for"; /* File: ../FSNFunctions.m:177 */ "\nif you make this change, your folder may appear as a single file." = "\nif you make this change, your folder may appear as a single file."; /* File: ../FSNFunctions.m:176 */ "to the end of the name?" = "to the end of the name?"; /*** Strings from ../FSNIconsView.m ***/ /* File: ../FSNIconsView.m:799 */ "Open with" = "Open with"; /*** Strings from ../FSNListView.m ***/ /* File: ../FSNListView.m:156 */ "Date Modified" = "Date Modified"; /* File: ../FSNListView.m:162 */ "Owner" = "Owner"; /* File: ../FSNListView.m:165 */ "Parent" = "Parent"; /* File: ../FSNListView.m:159 */ "Size" = "Size"; /* File: ../FSNListView.m:153 */ "Type" = "Type"; /*** Strings from ../FSNode.m ***/ /* File: ../FSNode.m:571 */ "application" = "application"; /* File: ../FSNode.m:586 */ "block special" = "block special"; /* File: ../FSNode.m:584 */ "character special" = "character special"; /* File: ../FSNode.m:577 */ "directory" = "directory"; /* File: ../FSNode.m:575 */ "mount point" = "mount point"; /* File: ../FSNode.m:573 */ "package" = "package"; /* File: ../FSNode.m:582 */ "socket" = "socket"; "Desktop"="Desktop"; "Music"="Music"; "Images"="Images"; "Documents"="Documents"; "Downloads"="Downloads"; "Applications"="Applications"; "Tools"="Tools";gworkspace-1.1.0/FSNode/Resources/French.lproj/0000755000175000001440000000000013214346535020547 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/French.lproj/Localizable.strings0000644000175000001440000001032413214346535024403 0ustar multixusers/*** French.lproj/Localizable.strings updated by make_strings 2016-01-22 00:30:18 +0100 add comments above this one ***/ /*** Keys found in multiple places ***/ /* File: ../FSNBrowserColumn.m:1619 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:181 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1584 */ /* Flag: untranslated */ "OK" = "OK"; /* File: ../FSNBrowserCell.m:407 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:817 */ /* Flag: untranslated */ "elements" = "éléments"; /* File: ../FSNBrowserColumn.m:1616 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1581 */ /* Flag: untranslated */ "error" = "erreur"; /* File: ../FSNBrowserColumn.m:1618 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1583 */ /* Flag: untranslated */ "Can't open " = "Impossible d'ouvrir "; /* File: ../FSNListView.m:150 */ /* Flag: untranslated */ /* File: ../FSNListView.m:171 */ /* Flag: untranslated */ "Name" = "Nom"; /* File: ../FSNode.m:561 */ /* Flag: untranslated */ /* File: ../FSNode.m:580 */ /* Flag: untranslated */ "symbolic link" = "lien symbolique"; /* File: ../FSNFunctions.m:143 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:153 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:162 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:189 */ /* Flag: untranslated */ "Error" = "Erreur"; /* File: ../FSNFunctions.m:147 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:155 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:164 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:194 */ /* Flag: untranslated */ "Continue" = "Continuer"; /*** Unmatched/untranslated keys ***/ /* File: ../FSNFunctions.m:145 */ /* Flag: untranslated */ "You do not have write permission for" = "Vous n'avez pas les droits d'écriture pour"; /* File: ../FSNFunctions.m:154 */ /* Flag: untranslated */ "You can't rename an object that is in the Recycler" = "Vous ne pouvez renommer un objet dans la corbeille"; /* File: ../FSNFunctions.m:163 */ /* Flag: untranslated */ "Invalid name" = "Nom invalide"; /* File: ../FSNFunctions.m:173 */ /* Flag: untranslated */ "Are you sure you want to add the extension" = "Êtes-vous sûr de vouloir ajouter l'extension"; /* File: ../FSNFunctions.m:176 */ /* Flag: untranslated */ "to the end of the name?" = "à la fin du nom ?"; /* File: ../FSNFunctions.m:177 */ /* Flag: untranslated */ "\nif you make this change, your folder may appear as a single file." = "\nsi vous changez ceci, le dossier ressemblera à un simple fichier."; /* File: ../FSNFunctions.m:180 */ /* Flag: untranslated */ "Cancel" = "Annuler"; /* File: ../FSNFunctions.m:191 */ /* Flag: untranslated */ "The name " = "Le nom "; /* File: ../FSNFunctions.m:193 */ /* Flag: untranslated */ " is already in use!" = " est déjà pris !"; /* File: ../FSNIconsView.m:799 */ /* Flag: untranslated */ "Open with" = "Ouvrir avec"; /* File: ../FSNListView.m:153 */ /* Flag: untranslated */ "Type" = "Type"; /* File: ../FSNListView.m:156 */ /* Flag: untranslated */ "Date Modified" = "Date de modification"; /* File: ../FSNListView.m:159 */ /* Flag: untranslated */ "Size" = "Taille"; /* File: ../FSNListView.m:162 */ /* Flag: untranslated */ "Owner" = "Propriétaire"; /* File: ../FSNListView.m:165 */ /* Flag: untranslated */ "Parent" = "Parent"; /* File: ../FSNode.m:568 */ /* Flag: untranslated */ "plain file" = "simple fichier"; /* File: ../FSNode.m:571 */ /* Flag: untranslated */ "application" = "application"; /* File: ../FSNode.m:573 */ /* Flag: untranslated */ "package" = "paquet"; /* File: ../FSNode.m:575 */ /* Flag: untranslated */ "mount point" = "point de montage"; /* File: ../FSNode.m:577 */ /* Flag: untranslated */ "directory" = "dossier"; /* File: ../FSNode.m:582 */ /* Flag: untranslated */ "socket" = "socket"; /* File: ../FSNode.m:584 */ /* Flag: untranslated */ "character special" = "caractère spécial"; /* File: ../FSNode.m:586 */ /* Flag: untranslated */ "block special" = "bloc spécial"; /* File: ../FSNode.m:588 */ /* Flag: untranslated */ "unknown" = "inconnu"; /* File: :0 */ /* Flag: unmatched */ "Application" = "Application"; "Desktop"="Bureau"; "Music"="Musique"; "Images"="Images"; "Documents"="Documents"; "Downloads"="Téléchargement"; "Applications"="Applications"; "Tools"="Outils"; gworkspace-1.1.0/FSNode/Resources/German.lproj/0000755000175000001440000000000013214346535020553 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/German.lproj/Localizable.strings0000644000175000001440000001015113214346535024405 0ustar multixusers/*** German.lproj/Localizable.strings updated by make_strings 2016-01-22 00:30:18 +0100 add comments above this one ***/ /*** Keys found in multiple places ***/ /* File: ../FSNBrowserColumn.m:1619 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:181 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1584 */ /* Flag: untranslated */ "OK" = "OK"; /* File: ../FSNBrowserCell.m:407 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:817 */ /* Flag: untranslated */ "elements" = "elements"; /* File: ../FSNBrowserColumn.m:1616 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1581 */ /* Flag: untranslated */ "error" = "error"; /* File: ../FSNBrowserColumn.m:1618 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1583 */ /* Flag: untranslated */ "Can't open " = "Can't open "; /* File: ../FSNListView.m:150 */ /* Flag: untranslated */ /* File: ../FSNListView.m:171 */ /* Flag: untranslated */ "Name" = "Name"; /* File: ../FSNode.m:561 */ /* Flag: untranslated */ /* File: ../FSNode.m:580 */ /* Flag: untranslated */ "symbolic link" = "symbolic link"; /* File: ../FSNFunctions.m:143 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:153 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:162 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:189 */ /* Flag: untranslated */ "Error" = "Error"; /* File: ../FSNFunctions.m:147 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:155 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:164 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:194 */ /* Flag: untranslated */ "Continue" = "Continue"; /*** Unmatched/untranslated keys ***/ /* File: ../FSNFunctions.m:145 */ /* Flag: untranslated */ "You do not have write permission for" = "You do not have write permission for"; /* File: ../FSNFunctions.m:154 */ /* Flag: untranslated */ "You can't rename an object that is in the Recycler" = "You can't rename an object that is in the Recycler"; /* File: ../FSNFunctions.m:163 */ /* Flag: untranslated */ "Invalid name" = "Invalid name"; /* File: ../FSNFunctions.m:173 */ /* Flag: untranslated */ "Are you sure you want to add the extension" = "Are you sure you want to add the extension"; /* File: ../FSNFunctions.m:176 */ /* Flag: untranslated */ "to the end of the name?" = "to the end of the name?"; /* File: ../FSNFunctions.m:177 */ /* Flag: untranslated */ "\nif you make this change, your folder may appear as a single file." = "\nif you make this change, your folder may appear as a single file."; /* File: ../FSNFunctions.m:180 */ /* Flag: untranslated */ "Cancel" = "Cancel"; /* File: ../FSNFunctions.m:191 */ /* Flag: untranslated */ "The name " = "The name "; /* File: ../FSNFunctions.m:193 */ /* Flag: untranslated */ " is already in use!" = " is already in use!"; /* File: ../FSNIconsView.m:799 */ /* Flag: untranslated */ "Open with" = "Open with"; /* File: ../FSNListView.m:153 */ /* Flag: untranslated */ "Type" = "Type"; /* File: ../FSNListView.m:156 */ /* Flag: untranslated */ "Date Modified" = "Date Modified"; /* File: ../FSNListView.m:159 */ /* Flag: untranslated */ "Size" = "Size"; /* File: ../FSNListView.m:162 */ /* Flag: untranslated */ "Owner" = "Owner"; /* File: ../FSNListView.m:165 */ /* Flag: untranslated */ "Parent" = "Parent"; /* File: ../FSNode.m:568 */ /* Flag: untranslated */ "plain file" = "plain file"; /* File: ../FSNode.m:571 */ /* Flag: untranslated */ "application" = "application"; /* File: ../FSNode.m:573 */ /* Flag: untranslated */ "package" = "package"; /* File: ../FSNode.m:575 */ /* Flag: untranslated */ "mount point" = "mount point"; /* File: ../FSNode.m:577 */ /* Flag: untranslated */ "directory" = "directory"; /* File: ../FSNode.m:582 */ /* Flag: untranslated */ "socket" = "socket"; /* File: ../FSNode.m:584 */ /* Flag: untranslated */ "character special" = "character special"; /* File: ../FSNode.m:586 */ /* Flag: untranslated */ "block special" = "block special"; /* File: ../FSNode.m:588 */ /* Flag: untranslated */ "unknown" = "unknown"; "Desktop" = "Schreibtisch"; "Music" = "Musik"; "Images" = "Bilder"; "Documents" = "Dokumente"; "Downloads" = "Heruntergeladen"; "Tools" = "Werkzeuge"; "Applications" = "Anwendungen"; gworkspace-1.1.0/FSNode/Resources/Images/0000755000175000001440000000000013214346535017422 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/Images/FolderOpen.tiff0000644000175000001440000002256613214346535022344 0ustar multixusersII*$qqQϾ߾ϾϾϾϾqa߾qaqaaQqϮϾqqaqqaqqaqqaϾϾqqQϾ߾ϮaqqaqqaqqaQQQA0aAAqqϾaϾϾaa߾߾qqaqaqaqqϾϮϾqqϾϾaϾϾϾϾϾϾϾϾϾaaϾϾ߾ϮqqqaqqϮϾϾaA 0 qϾqaqaqaaaaqaϮϾqqqqqϮϮaaAA0 q߾Ͼ߾Ϯaqqaa00Q00qqqqϮϾϾaa0A0 A qA qqa߾߾QA0a0AϾqqQA00 0 qaQqQqa0 qqQϾ߾ϮϾϮϮϮaϾQA0ϾϾa000 A qaAqQQqaAaQqaQA ߾ϾϮϾϮϾaQAAaa0AQA0ϾaQA0 qQQqaAqaQqaAqaQqaQq0 ߾ϾqqaϾ߾߾ϾϮϾϾϮaaAA0 0 A ϾϾaQAA aQAqQAqQAqQQqaAqQQaqaA ߾0 QA0q߾ϾϮϾϮqQA00 0 QA0a0AQ0AϾ0 aQAaQAaQQaaAqQQaaAqaaaq0 Ͼ0 a00߾qaQA0A 0 a00QA0qaQAA aQAaQAqAAaQAqQAaqaqaqaaqaQA ߾Q0A0 QA00 QA0Q0A0 ϾaQA0 qaQAqaqaqaaqaQqaaqa0 ϾQ000 A 0 a0AQA0A 0 aAAqaAA0 aAAϾaQqQaaqQqaqQqaqQqaQA ߾a0A0 0 0 QA0a0A0 Q00QA00 0 qaQqQϾQQAaaqQqaqQqaaqaaqa0 ϾQA0a00a000 a00QA0A A0 Q00QA0a00aA0A aA0ϾaQaQaϾaQAaQqQaaqQqaqQaQA ߾qqQA0a0AQA0Q0A0 A00AA0Q00QA0QAAQA0aAAqaQaAAaQAaQaaaQAqQaaqaqaaqqaqa0 qa0AQA0a00a0AQA0A A0 Q00Q00Q00QA0a00QA0QQaAQQaA0aQϾaAAaϾaQ0aQqQqaqQqaaqaQA QA0Q0AQA00 0 Q00A0 A00AA0Q00AA0Q00qaAQQqaAQQqaQaAAqaAqϾaaAAqQqaqaqaaqaaqa0 ߾a00QA0a00q0 QA0A aA0a0AA0 Q 0A0 Q00A0 qAAqQAqQQqaAQQqQAQQQA0QQaAaQaQaAAqQqaqQqaqQqaqQqaQA QA0a0Aq a0AaAAQA0aAAQA0A00A00Q00aQAaAAaQAqQAqQAqQQqaAQQqaAQQQQ0aQaQaaqQaAAqQqaqQqaqQqaaqa0 ߾a0AQA0 q0 QA0Q00Q00QA0a0AaA0aAAaA0qAAaAAqAAaQAqAAqQAqQQqQAQQaAaAAaQaQaQaaQA0aQqQaaqQaaqQqaQA ߾QA0Q0A q Q0AqaQA00Q0AQA0aAAaAAaAAaQAqAAaQAqQAaQAqQQqaAqQQqaQaQQQ0aAAqQaaqQaAAqQaaqQaaqQqaqQqa0 ߾a00QA0 q0 QA0 qaQQ00Q00a0AaA0aAAaA0qAAaQ0qAAqQAqQAqQAQQqaAQQaAQQaA0aQaAaQaA0aQqQaQqQaQqQaQqQA QA0a0Aq000a0AaaQ00aAAQA0aAAaAAaAAaQAaAAaQAqQAaQAqQQqaQQQqaQQQaQaQQA0aAAQQ0aAAqQaaqQqaqQqaQqa0 ߾aaQA0 qQ00QA0 qaQ00QA0a0AaA0aAAaA0qAAaAAqAAaQAqAAqQAQQqaAQQqaAQQqaAQQaQaQaQaQqQaQqQaQqQqaqQA ߾aQ0A qAAAQ0A qqQA0Q0AQA0aAAQA0aAAaQAqAAaQAqQQqQAqQQqQAqQQqaAqQQqaAQQqaQaQqQaQqQqQqQqaqQqaqQqa0 ߾QA0 qqQaAAQA00 qQ00Q00a0AaA0aAAaA0qAAaQ0qAAqQAqQAqQAqQAqQAqQQqaAQQaAaQaAaQqQaQqQaQqQqaqQqaQA a0AqaaaaQa0A QA0Q0AQA0aAAaAAaAAaQAaAAaQAqQAaQAqQQaQAqQQqaAQQqaQaQaQaQqQaQqQaaqQqaqQqaaqa0 QA00 aaQqQQQA00 qa00QA0a0AaA0aAAaA0qAAaAAqAAaQAqAAaQAqQAqQAQQaAQQaAaQaQaQqQaQqQaQqQqaqQqaqQA߾Q0A0 aQQqqaQ0A0 QA0a0AQA0aAAaA0aAAaQAaAAaQAaAAaQAqQAqQAqQQqaAaQaAaQaQaQaQaQqQqaqQqaQqQQϾQA0A QQAaaQA0A Q00aA0aAAaA0aAAaA0aAAaA0qAAaQ0qAAqQAQAaAQQaAQQaAaQaAaQqQaQqQqQaAA߾aa00 QAAqa0A00 Q00aAAQA0aAAQA0aAAQA0aAAaQAqQAaQAqQQqaAQQqaAQQqaQaQaQaQqQaaqQaAAϾqA QA0QA0A Q00QA0a0AaA0a0AQA0aAAaQ0qAAqQAQAqQAQQqaAQQaAQQaAaQaQaQQ00߾A0 A00Q0A A00Q00QA0aAAQA0aAAaQAqQAaQAqQQqaAqQQqaAqQQqaAaQaQaQaQQ00Q0000 QA00 a00QA0a00QA0aAAaA0qAAqQ0qAAqQAqQAqQAQAqQAQQqQAQQ0 A000 0a0A aAAaAAaA0aAAaQAqAAaQAqAAaQAqQAaQAqQQqaAqQAqaA0 ߾Q000 QA0 a0AaA0qAAaA0qAAaQ0qAAaQAqAAaQ0qAAaQ0QQ0 QA0  Q0A ϾaA0aAAaA0aAAaQAaAAaQAqAAaQAaAAqQA0 ߾a00ϮQA0 ϮaAAaA0aAAaA0qAAaA0qAAaA0qAA0 QA0߾a0AϾaAAaAAQA0aAAaQAaAAaQA0 ߾a00ϾQA0߾aAAaA0qAAaA0qAA0 QA0߾Q0A߾aQAaAAaQA0 ߾Ͼ߾qAA0 Q00A0000$ b$P%@$f%n%(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace/Icons/FileIcon_Directory_Open.tiffCreated with The GIMPHHgworkspace-1.1.0/FSNode/Resources/Images/HardDisk.tiff0000644000175000001440000002247013214346535021772 0ustar multixusersMM*$* -;;;***b@XXXzzzVVVmmm999x# aaafff___~~~;;;{# MMMoooggglllccciii~~~+++_+PPPꋋyyyjjjiiifffqqqttt===u UUU𑑑xxxiiikkkkkkjjj===wp<<>LKKONNGGGHFFNLLTQQYWW][[a__fccjggnkkollqmm{ww ! .J0CNlz363@>?EDDFEECBB866.--544@??KJJVUU`^^`]][YY[YY][[a__heeqmmzvv}}|xx~zzb^^.B.%x,CP374>;>866CBB\YYroo~{{~~{vvxttrnn@>>n<::(G+-H0978><>A??A??BAADBBECCFEEHGGHFFB@@<::ECCZWWkhh||~zzyuuuqqXUU*))N;:::48:47;99<;;=;;>==?>>A??B@@CAADBBEDDJHHHFFHGGGEEECCFDD?>>khh{{yttwrrhee433977655866977:88:::<;;=<<><>A??A@@DBB\YYJHHVSSHFFIGGIFFHFFCAAtqq~~{wwxttqmm@>>8655544533655766977:88;::<;;<;;>==?==A@@]YYJHH_\\IGGZWWKIITQQEDDVSS~zzyttrnnQNN&$$! 100655544544755766977:99;99<;;=<>[XXHFF\ZZHFF][[PNNgddFDDKII||zuuxttfbb&%% )((111655644766866977:88;99><>TRRA@@YWWKIIc``@>>ECC~~|xxzvvgcc.,, >m *))422866988?===;;OMMHFFb__>==B@@~~||zuulhhIFFz !!!322866:99988@>>SQQ;::>==xtt|ww[XX## *))433;::;:::99?>>snnKGG 2#!!544877<::+**"&X  w5J00$ $@$$%(R/root/Desktop/disco.tiffHHgworkspace-1.1.0/FSNode/Resources/Italian.lproj/0000755000175000001440000000000013214346535020723 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/Italian.lproj/Localizable.strings0000644000175000001440000000636213214346535024566 0ustar multixusers/*** Italian.lproj/Localizable.strings updated by make_strings 2016-01-22 00:30:18 +0100 add comments above this one ***/ /*** Keys found in multiple places ***/ /* File: ../FSNBrowserColumn.m:1619 */ /* File: ../FSNFunctions.m:181 */ /* File: ../FSNIcon.m:1584 */ "OK" = "OK"; /* File: ../FSNBrowserCell.m:407 */ /* File: ../FSNIcon.m:817 */ "elements" = "elementi"; /* File: ../FSNBrowserColumn.m:1616 */ /* File: ../FSNIcon.m:1581 */ "error" = "errore"; /* File: ../FSNBrowserColumn.m:1618 */ /* File: ../FSNIcon.m:1583 */ "Can't open " = "Impossibile aprire "; /* File: ../FSNListView.m:150 */ /* File: ../FSNListView.m:171 */ "Name" = "Nome"; /* File: ../FSNode.m:561 */ /* File: ../FSNode.m:580 */ "symbolic link" = "collegamento simbolico"; /* File: ../FSNFunctions.m:143 */ /* File: ../FSNFunctions.m:153 */ /* File: ../FSNFunctions.m:162 */ /* File: ../FSNFunctions.m:189 */ "Error" = "Errore"; /* File: ../FSNFunctions.m:147 */ /* File: ../FSNFunctions.m:155 */ /* File: ../FSNFunctions.m:164 */ /* File: ../FSNFunctions.m:194 */ "Continue" = "Continua"; /*** Unmatched/untranslated keys ***/ /* File: ../FSNFunctions.m:145 */ "You do not have write permission for" = "Non si dispongono i permessi per"; /* File: ../FSNFunctions.m:154 */ "You can't rename an object that is in the Recycler" = "Impossibile rinominare un oggetto nel Cestino"; /* File: ../FSNFunctions.m:163 */ "Invalid name" = "Nome non valido"; /* File: ../FSNFunctions.m:173 */ "Are you sure you want to add the extension" = "Si è sicuri di aggiungere l'estensione"; /* File: ../FSNFunctions.m:176 */ /* Flag: untranslated */ "to the end of the name?" = "al alla fine del nome?"; /* File: ../FSNFunctions.m:177 */ "\nif you make this change, your folder may appear as a single file." = "\neffettuando la modifica, la cartella potrebbe apparire come archivio."; /* File: ../FSNFunctions.m:180 */ "Cancel" = "Annulla"; /* File: ../FSNFunctions.m:191 */ "The name " = "Il nome "; /* File: ../FSNFunctions.m:193 */ " is already in use!" = " è già in uso!"; /* File: ../FSNListView.m:153 */ "Type" = "Tipo"; /* File: ../FSNListView.m:156 */ "Date Modified" = "Data Modifica"; /* File: ../FSNListView.m:159 */ "Size" = "Dimensione"; /* File: ../FSNListView.m:162 */ "Owner" = "Proprietario"; /* File: ../FSNListView.m:165 */ "Parent" = "Padre"; /* File: ../FSNode.m:568 */ "plain file" = "archivio semplice"; /* File: ../FSNode.m:571 */ "application" = "Applicazione"; /* File: ../FSNode.m:573 */ "package" = "Pacchetto"; /* File: ../FSNode.m:575 */ "mount point" = "mount point"; /* File: ../FSNode.m:577 */ "directory" = "cartella"; /* File: ../FSNode.m:582 */ /* Flag: untranslated */ "socket" = "socket"; /* File: ../FSNode.m:584 */ "character special" = "speciale carattere"; /* File: ../FSNode.m:586 */ /* Flag: untranslated */ "block special" = "speciale blocco"; /* File: ../FSNode.m:588 */ "unknown" = "sconosciuto"; /* File: :0 */ /* Flag: unmatched */ "Application" = "Applicazione"; /*** Strings from ../FSNIconsView.m ***/ /* File: ../FSNIconsView.m:799 */ "Open with" = "Apri con"; "Desktop"="Scrivania"; "Music"="Musica"; "Images"="Immagini"; "Documents"="Documenti"; "Downloads"="Scaricamenti"; "Applications"="Applicazioni"; "Tools"="Strumenti"; "Videos"="Filmati";gworkspace-1.1.0/FSNode/Resources/Spanish.lproj/0000755000175000001440000000000013214346535020747 5ustar multixusersgworkspace-1.1.0/FSNode/Resources/Spanish.lproj/Localizable.strings0000644000175000001440000000777213214346535024620 0ustar multixusers/*** English.lproj/Localizable.strings updated by make_strings 2016-06-25 00:30:18 +0100 add comments above this one ***/ /*** Keys found in multiple places ***/ /* File: ../FSNFunctions.m:147 */ /* File: ../FSNFunctions.m:155 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:164 */ /* Flag: untranslated */ /* File: ../FSNFunctions.m:194 */ /* Flag: untranslated */ "Continue" = "Continuar"; /* File: ../FSNBrowserColumn.m:1619 */ /* File: ../FSNFunctions.m:181 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1584 */ /* Flag: untranslated */ "OK" = "OK"; /* File: ../FSNBrowserCell.m:407 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:817 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "elements" = "elementos"; /* File: ../FSNBrowserColumn.m:1616 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1581 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "error" = "error"; /* File: ../FSNBrowserColumn.m:1618 */ /* Flag: untranslated */ /* File: ../FSNIcon.m:1583 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "Can't open " = "No se puede abrir "; /* File: ../FSNListView.m:150 */ /* Flag: untranslated */ /* File: ../FSNListView.m:171 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "Name" = "Nombre"; /* File: ../FSNode.m:561 */ /* Flag: untranslated */ /* File: ../FSNode.m:580 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched * "symbolic link" = "enlace simbólico"; /* File: ../FSNode.m:568 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "plain file" = "archivo plano"; /* File: ../FSNode.m:588 */ /* Flag: untranslated */ /* File: :0 */ /* Flag: unmatched */ "unknown" = "desconocido"; /*** Unmatched/untranslated keys ***/ /* File: :0 */ /* Flag: unmatched */ "Application" = "Aplicación"; /*** Strings from ../FSNFunctions.m ***/ /* File: ../FSNFunctions.m:193 */ " is already in use!" = "¡esta en uso!"; /* File: ../FSNFunctions.m:173 */ "Are you sure you want to add the extension" = "Seguro que desea añadir la extensión"; /* File: ../FSNFunctions.m:180 */ "Cancel" = "Cancelar"; /* File: ../FSNFunctions.m:189 */ /* File: ../FSNFunctions.m:162 */ /* File: ../FSNFunctions.m:153 */ /* File: ../FSNFunctions.m:143 */ "Error" = "Error"; /* File: ../FSNFunctions.m:163 */ "Invalid name" = "Nombre inválido"; /* File: ../FSNFunctions.m:191 */ "The name " = "El nombre "; /* File: ../FSNFunctions.m:154 */ "You can't rename an object that is in the Recycler" = "No se puede cambiar el nombre de un objeto que se encuentra en la papelera"; /* File: ../FSNFunctions.m:145 */ "You do not have write permission for" = "Usted no tiene permiso de escritura para"; /* File: ../FSNFunctions.m:177 */ "\nif you make this change, your folder may appear as a single file." = "\nsi realiza este cambio, la carpeta puede aparecer como un solo archivo."; /* File: ../FSNFunctions.m:176 */ "to the end of the name?" = "al final del nombre?"; /*** Strings from ../FSNIconsView.m ***/ /* File: ../FSNIconsView.m:799 */ "Open with" = "Abrir con"; /*** Strings from ../FSNListView.m ***/ /* File: ../FSNListView.m:156 */ "Date Modified" = "Fecha modificada."; /* File: ../FSNListView.m:162 */ "Owner" = "Propietario"; /* File: ../FSNListView.m:165 */ "Parent" = "Padre"; /* File: ../FSNListView.m:159 */ "Size" = "Tamaño"; /* File: ../FSNListView.m:153 */ "Type" = "Tipo"; /*** Strings from ../FSNode.m ***/ /* File: ../FSNode.m:571 */ "application" = "aplicación"; /* File: ../FSNode.m:586 */ "block special" = "bloque especial"; /* File: ../FSNode.m:584 */ "character special" = "carácter special"; /* File: ../FSNode.m:577 */ "directory" = "directorio"; /* File: ../FSNode.m:575 */ "mount point" = "punto de montaje"; /* File: ../FSNode.m:573 */ "package" = "paquete"; /* File: ../FSNode.m:582 */ "socket" = "enchufe"; "Desktop"="Escritorio"; "Music"="Música"; "Images"="Imágenes"; "Documents"="Documentos"; "Downloads"="Descargas"; "Applications"="Aplicaciones"; "Tools"="Herramientas"; gworkspace-1.1.0/FSNode/Version0000644000175000001440000000016314752465227015623 0ustar multixusers MAJOR_VERSION=1 MINOR_VERSION=1 SUBMINOR_VERSION=0 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} gworkspace-1.1.0/FSNode/config.h.in0000644000175000001440000000366114623464073016277 0ustar multixusers/* config.h.in. Generated from configure.ac by autoheader. */ /* debug logging */ #undef GW_DEBUG_LOG /* Define to 1 if you have the `getmntent' function. */ #undef HAVE_GETMNTENT /* Define to 1 if you have the `getmntinfo' function. */ #undef HAVE_GETMNTINFO /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_MNTENT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MNTENT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATVFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* mntent structure member name */ #undef MNT_DIR /* mntent structure member name */ #undef MNT_FSNAME /* mntent structure member name */ #undef MNT_FSTYPE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS gworkspace-1.1.0/FSNode/configure0000755000175000001440000040600514623463771016166 0ustar multixusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_debug_log ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug-log Enable debug logging Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$GNUSTEP_MAKEFILES"; then as_fn_error $? "You must run the GNUstep initialization script first!" "$LINENO" 5 fi #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- ac_aux_dir= for ac_dir in $GNUSTEP_MAKEFILES "$srcdir"/$GNUSTEP_MAKEFILES; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in $GNUSTEP_MAKEFILES \"$srcdir\"/$GNUSTEP_MAKEFILES" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Support for determining mountpoints #-------------------------------------------------------------------- ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for ac_func in getmntinfo do : ac_fn_c_check_func "$LINENO" "getmntinfo" "ac_cv_func_getmntinfo" if test "x$ac_cv_func_getmntinfo" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETMNTINFO 1 _ACEOF fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in mntent.h do : ac_fn_c_check_header_mongrel "$LINENO" "mntent.h" "ac_cv_header_mntent_h" "$ac_includes_default" if test "x$ac_cv_header_mntent_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MNTENT_H 1 _ACEOF fi done for ac_header in sys/types.h sys/mntent.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # support for NetBSD > 3.x for ac_header in sys/statvfs.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_statvfs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STATVFS_H 1 _ACEOF fi done ac_fn_c_check_member "$LINENO" "struct mntent" "mnt_dir" "ac_cv_member_struct_mntent_mnt_dir" "#include " if test "x$ac_cv_member_struct_mntent_mnt_dir" = xyes; then : $as_echo "#define MNT_FSNAME mnt_fsname" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct mntent" "mnt_mountp" "ac_cv_member_struct_mntent_mnt_mountp" "#include " if test "x$ac_cv_member_struct_mntent_mnt_mountp" = xyes; then : $as_echo "#define MNT_FSNAME mnt_special" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct mntent" "mnt_dir" "ac_cv_member_struct_mntent_mnt_dir" "#include " if test "x$ac_cv_member_struct_mntent_mnt_dir" = xyes; then : $as_echo "#define MNT_DIR mnt_dir" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct mntent" "mnt_mountp" "ac_cv_member_struct_mntent_mnt_mountp" "#include " if test "x$ac_cv_member_struct_mntent_mnt_mountp" = xyes; then : $as_echo "#define MNT_DIR mnt_mountp" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct mntent" "mnt_dir" "ac_cv_member_struct_mntent_mnt_dir" "#include " if test "x$ac_cv_member_struct_mntent_mnt_dir" = xyes; then : $as_echo "#define MNT_FSTYPE mnt_type" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct mntent" "mnt_mountp" "ac_cv_member_struct_mntent_mnt_mountp" "#include " if test "x$ac_cv_member_struct_mntent_mnt_mountp" = xyes; then : $as_echo "#define MNT_FSTYPE mnt_fstype" >>confdefs.h fi # getmntent is in the standard C library on UNICOS, in -lsun on Irix 4, # -lseq on Dynix/PTX, -lgen on Unixware. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getmntent" >&5 $as_echo_n "checking for library containing getmntent... " >&6; } if ${ac_cv_search_getmntent+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getmntent (); int main () { return getmntent (); ; return 0; } _ACEOF for ac_lib in '' sun seq gen; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getmntent=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getmntent+:} false; then : break fi done if ${ac_cv_search_getmntent+:} false; then : else ac_cv_search_getmntent=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getmntent" >&5 $as_echo "$ac_cv_search_getmntent" >&6; } ac_res=$ac_cv_search_getmntent if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ac_cv_func_getmntent=yes $as_echo "#define HAVE_GETMNTENT 1" >>confdefs.h else ac_cv_func_getmntent=no fi #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- # Check whether --enable-debug_log was given. if test "${enable_debug_log+set}" = set; then : enableval=$enable_debug_log; else enable_debug_log=no fi if test "$enable_debug_log" = "no"; then GW_DEBUG_LOG=0 else GW_DEBUG_LOG=1 fi cat >>confdefs.h <<_ACEOF #define GW_DEBUG_LOG $GW_DEBUG_LOG _ACEOF ac_config_headers="$ac_config_headers config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gworkspace-1.1.0/FSNode/configure.ac0000644000175000001440000000366213251572110016527 0ustar multixusersAC_PREREQ(2.52) AC_INIT if test -z "$GNUSTEP_MAKEFILES"; then AC_MSG_ERROR([You must run the GNUstep initialization script first!]) fi #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- AC_CONFIG_AUX_DIR([$GNUSTEP_MAKEFILES]) #-------------------------------------------------------------------- # Support for determining mountpoints #-------------------------------------------------------------------- AC_CHECK_FUNCS(getmntinfo) AC_CHECK_HEADERS(mntent.h) AC_CHECK_HEADERS(sys/types.h sys/mntent.h) # support for NetBSD > 3.x AC_CHECK_HEADERS(sys/statvfs.h) AC_CHECK_MEMBER(struct mntent.mnt_dir,[AC_DEFINE(MNT_FSNAME,mnt_fsname,mntent structure member name)],,[#include ]) AC_CHECK_MEMBER(struct mntent.mnt_mountp,[AC_DEFINE(MNT_FSNAME,mnt_special,mntent structure member name)],,[#include ]) AC_CHECK_MEMBER(struct mntent.mnt_dir,[AC_DEFINE(MNT_DIR,mnt_dir,mntent structure member name)],,[#include ]) AC_CHECK_MEMBER(struct mntent.mnt_mountp,[AC_DEFINE(MNT_DIR,mnt_mountp,mntent structure member name)],,[#include ]) AC_CHECK_MEMBER(struct mntent.mnt_dir,[AC_DEFINE(MNT_FSTYPE,mnt_type,mntent structure member name)],,[#include ]) AC_CHECK_MEMBER(struct mntent.mnt_mountp,[AC_DEFINE(MNT_FSTYPE,mnt_fstype,mntent structure member name)],,[#include ]) AC_FUNC_GETMNTENT #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- AC_ARG_ENABLE(debug_log, [ --enable-debug-log Enable debug logging],, enable_debug_log=no) if test "$enable_debug_log" = "no"; then GW_DEBUG_LOG=0 else GW_DEBUG_LOG=1 fi AC_DEFINE_UNQUOTED([GW_DEBUG_LOG], [$GW_DEBUG_LOG], [debug logging]) AC_CONFIG_HEADER([config.h]) AC_OUTPUT gworkspace-1.1.0/GNUmakefile.in0000644000175000001440000000220514752464362015612 0ustar multixusersifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) ifeq ($(GNUSTEP_MAKEFILES),) $(warning ) $(warning Unable to obtain GNUSTEP_MAKEFILES setting from gnustep-config!) $(warning Perhaps gnustep-make is not properly installed,) $(warning so gnustep-config is not in your PATH.) $(warning ) $(warning Your PATH is currently $(PATH)) $(warning ) endif endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before compiling!) endif PACKAGE_NEEDS_CONFIGURE = YES PACKAGE_NAME = gworkspace export PACKAGE_NAME include $(GNUSTEP_MAKEFILES)/common.make VERSION = @PACKAGE_VERSION@ SVN_MODULE_NAME = gworkspace BUILD_GWMETADATA = @BUILD_GWMETADATA@ # # subprojects # SUBPROJECTS = FSNode \ DBKit \ Tools \ Inspector \ Operation \ Recycler \ GWorkspace ifeq ($(BUILD_GWMETADATA),1) SUBPROJECTS += GWMetadata endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble include $(GNUSTEP_MAKEFILES)/Master/nsis.make gworkspace-1.1.0/GNUmakefile.postamble0000644000175000001440000000135513214346535017170 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -rf autom4te*.cache rm -f config.status config.log config.cache TAGS GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GNUmakefile.preamble0000644000175000001440000000122713214346535016767 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWMetadata/0000755000175000001440000000000014753476013015107 5ustar multixusersgworkspace-1.1.0/GWMetadata/GNUmakefile0000644000175000001440000000051414634456107017161 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # # subprojects # SUBPROJECTS = MDKit \ gmds \ Preferences \ MDFinder include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/GNUmakefile.in0000644000175000001440000000051413231754602017557 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # # subprojects # SUBPROJECTS = MDKit \ gmds \ Preferences \ MDFinder include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/GNUmakefile.postamble0000644000175000001440000000135513214346535021146 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -rf autom4te*.cache rm -f config.status config.log config.cache TAGS GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/GNUmakefile.preamble0000644000175000001440000000122713214346535020745 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWMetadata/MDFinder/0000755000175000001440000000000014752464315016540 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDFinder/GNUmakefile0000644000175000001440000000111013231754602020573 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make VERSION = 0.1 APP_NAME = MDFinder MDFinder_PRINCIPAL_CLASS = MDFinder MDFinder_APPLICATION_ICON=MDFinder.tiff MDFinder_HAS_RESOURCE_BUNDLE = yes MDFinder_RESOURCE_FILES = \ Resources/Images/* \ Resources/English.lproj MDFinder_LANGUAGES = Resources/English # The Objective-C source files to be compiled MDFinder_OBJC_FILES = main.m \ MDFinder.m include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/application.make include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/MDFinder/GNUmakefile.postamble0000644000175000001440000000120013231754602022560 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/MDFinder/GNUmakefile.preamble0000644000175000001440000000121713214346535022374 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../MDKit ADDITIONAL_INCLUDE_DIRS += -I../../FSNode ADDITIONAL_LIB_DIRS += -L../MDKit/MDKit.framework ADDITIONAL_LIB_DIRS += -L../../FSNode/FSNode.framework ADDITIONAL_LIB_DIRS += -L../../DBKit/$(GNUSTEP_OBJ_DIR) # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += ADDITIONAL_GUI_LIBS += -lFSNode -lMDKit -lDBKit gworkspace-1.1.0/GWMetadata/MDFinder/MDFinder.h0000644000175000001440000000500214751213523020326 0ustar multixusers/* MDFinder.h * * Copyright (C) 2007-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2007 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDFINDER_H #define MDFINDER_H #import @class MDKWindow; @class StartAppWin; @protocol WorkspaceAppProtocol - (oneway void)showExternalSelection:(NSArray *)selection; @end @interface MDFinder: NSObject { NSMutableArray *mdkwindows; MDKWindow *activeWindow; NSString *lastSaveDir; NSFileManager *fm; NSNotificationCenter *nc; id workspaceApp; StartAppWin *startAppWin; } + (MDFinder *)mdfinder; - (MDKWindow *)windowWithSavedPath:(NSString *)path; - (NSRect)frameForNewWindow; - (void)connectWorkspaceApp; - (void)workspaceAppConnectionDidDie:(NSNotification *)notif; // // Menu // - (void)newQuery:(id)sender; - (void)openQuery:(id)sender; - (void)saveQuery:(id)sender; - (void)saveQueryAs:(id)sender; - (void)closeMainWin:(id)sender; - (void)activateContextHelp:(id)sender; // // MDKWindow delegate // - (void)setActiveWindow:(MDKWindow *)window; - (void)window:(MDKWindow *)window didChangeSelection:(NSArray *)selection; - (void)mdkwindowWillClose:(MDKWindow *)window; @end @interface StartAppWin: NSObject { IBOutlet id win; IBOutlet id startLabel; IBOutlet id nameField; IBOutlet id progInd; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname operation:(NSString *)operation maxProgValue:(double)maxvalue; - (void)updateProgressBy:(double)incr; - (NSWindow *)win; @end id addItemToMenu(NSMenu *menu, NSString *str, NSString *comm, NSString *sel, NSString *key); #endif // MDFINDER_H gworkspace-1.1.0/GWMetadata/MDFinder/MDFinder.m0000644000175000001440000003775314751213523020355 0ustar multixusers/* MDFinder.m * * Copyright (C) 2007-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2007 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "MDFinder.h" #import "MDKWindow.h" #import "MDKQuery.h" #import "FSNode.h" static MDFinder *mdfinder = nil; @implementation MDFinder + (MDFinder *)mdfinder; { if (mdfinder == nil) { mdfinder = [[MDFinder alloc] init]; } return mdfinder; } - (void)dealloc { DESTROY (workspaceApp); RELEASE (mdkwindows); RELEASE (lastSaveDir); TEST_RELEASE (startAppWin); [super dealloc]; } - (id)init { self = [super init]; if (self) { mdkwindows = [NSMutableArray new]; activeWindow = nil; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; } return self; } - (void)applicationWillFinishLaunching:(NSNotification *)aNotification { NSMenu *mainMenu = [NSMenu new]; NSMenu *menu; NSMenu *windows, *services; id menuItem; // Info menuItem = addItemToMenu(mainMenu, @"Info", @"", nil, @""); menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; addItemToMenu(menu, @"Activate context help", @"", @"activateContextHelp:", @";"); // File menuItem = addItemToMenu(mainMenu, @"File", @"", nil, @""); menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; addItemToMenu(menu, @"New", @"", @"newQuery:", @"n"); addItemToMenu(menu, @"Open...", @"", @"openQuery:", @"o"); addItemToMenu(menu, @"Save", @"", @"saveQuery:", @"s"); addItemToMenu(menu, @"Save as...", @"", @"saveQueryAs:", @""); // Edit menuItem = addItemToMenu(mainMenu, @"Edit", @"", nil, @""); menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; addItemToMenu(menu, @"Cut", @"", @"cut:", @"x"); addItemToMenu(menu, @"Copy", @"", @"copy:", @"c"); addItemToMenu(menu, @"Paste", @"", @"paste:", @"v"); // Windows menuItem = addItemToMenu(mainMenu, @"Windows", @"", nil, @""); windows = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: windows forItem: menuItem]; addItemToMenu(windows, @"Arrange in Front", @"", nil, @""); addItemToMenu(windows, @"Miniaturize Window", @"", nil, @""); addItemToMenu(windows, @"Close Window", @"", @"closeMainWin:", @"w"); // Services menuItem = addItemToMenu(mainMenu, @"Services", @"", nil, @""); services = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: services forItem: menuItem]; // Hide addItemToMenu(mainMenu, @"Hide", @"", @"hide:", @"h"); // Print addItemToMenu(mainMenu, @"Print...", @"", @"print:", @"p"); // Quit addItemToMenu(mainMenu, @"Quit", @"", @"terminate:", @"q"); [mainMenu update]; [NSApp setServicesMenu: services]; [NSApp setWindowsMenu: windows]; [NSApp setMainMenu: mainMenu]; RELEASE (mainMenu); workspaceApp = nil; startAppWin = [[StartAppWin alloc] init]; } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; BOOL isdir; lastSaveDir = [defaults stringForKey: @"last_save_dir"]; if (lastSaveDir && [fm fileExistsAtPath: lastSaveDir isDirectory: &isdir] && isdir) { RETAIN (lastSaveDir); } else { ASSIGN (lastSaveDir, NSHomeDirectory()); } } - (void)applicationDidBecomeActive:(NSNotification *)aNotification { } - (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName { MDKWindow *window = [self windowWithSavedPath: fileName]; if (window) { [NSApp activateIgnoringOtherApps: YES]; [window activate]; } else { window = [[MDKWindow alloc] initWithContentsOfFile: fileName windowRect: [self frameForNewWindow] delegate: self]; if (window) { [mdkwindows addObject: window]; RELEASE (window); [NSApp activateIgnoringOtherApps: YES]; [window activate]; } else { NSString *msg = NSLocalizedString(@"Invalid query description.", @""); NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@: %@", fileName, msg], NSLocalizedString(@"Ok", @""), nil, nil); return NO; } } return YES; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app { NSUInteger canterminate = NSTerminateNow; NSUInteger i; for (i = 0; i < [mdkwindows count]; i++) { MDKWindow *window = [mdkwindows objectAtIndex: i]; MDKQuery *query = [window currentQuery]; if ([query isGathering] || [query waitingStart]) { [window stopCurrentQuery]; canterminate = NSTerminateCancel; } } if (canterminate == NSTerminateNow) { for (i = 0; i < [mdkwindows count]; i++) { MDKWindow *window = [mdkwindows objectAtIndex: i]; if (([window savePath] != nil) && ([window isSaved] == NO)) { canterminate = NSTerminateCancel; break; } } if (canterminate == NSTerminateCancel) { canterminate = !(NSRunAlertPanel(nil, NSLocalizedString(@"You have unsaved queries", @""), NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Quit Anyway", @""), nil)); } } if (canterminate == NSTerminateNow) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: lastSaveDir forKey: @"last_save_dir"]; [defaults synchronize]; } return canterminate; } - (MDKWindow *)windowWithSavedPath:(NSString *)path { int i; for (i= 0; i < [mdkwindows count]; i++) { MDKWindow *window = [mdkwindows objectAtIndex: i]; NSString *savePath = [window savePath]; if (savePath && [savePath isEqual: path]) { return window; } } return nil; } - (NSRect)frameForNewWindow { NSRect scr = [[NSScreen mainScreen] visibleFrame]; NSRect wrect = NSZeroRect; int i; #define MARGIN 200 #define SHIFT 100 scr.origin.x += MARGIN; scr.origin.y += MARGIN; scr.size.width -= (MARGIN * 2); scr.size.height -= (MARGIN * 2); for (i = [mdkwindows count] - 1; i >= 0; i--) { MDKWindow *mdkwin = [mdkwindows objectAtIndex: i]; NSRect wr = [[mdkwin window] frame]; wrect = NSMakeRect(wr.origin.x + SHIFT, wr.origin.y - wr.size.height - SHIFT, wr.size.width, wr.size.height); if (NSContainsRect(scr, wrect) == NO) { wrect = NSMakeRect(scr.origin.x, scr.size.height - wr.size.height, wr.size.width, wr.size.height); break; } } return wrect; } - (void)connectWorkspaceApp { if (workspaceApp == nil) { workspaceApp = [NSConnection rootProxyForConnectionWithRegisteredName: @"GWorkspace" host: @""]; if (workspaceApp == nil) { int i; [startAppWin showWindowWithTitle: @"MDFinder" appName: @"GWorkspace" operation: NSLocalizedString(@"starting:", @"") maxProgValue: 80.0]; [[NSWorkspace sharedWorkspace] launchApplication: @"GWorkspace"]; for (i = 1; i <= 80; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; workspaceApp = [NSConnection rootProxyForConnectionWithRegisteredName: @"GWorkspace" host: @""]; if (workspaceApp) { [startAppWin updateProgressBy: 80.0 - i]; break; } } [[startAppWin win] close]; } if (workspaceApp) { RETAIN (workspaceApp); [workspaceApp setProtocolForProxy: @protocol(WorkspaceAppProtocol)]; [nc addObserver: self selector: @selector(workspaceAppConnectionDidDie:) name: NSConnectionDidDieNotification object: [workspaceApp connectionForProxy]]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact GWorkspace!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)workspaceAppConnectionDidDie:(NSNotification *)notif { [nc removeObserver: self name: NSConnectionDidDieNotification object: [notif object]]; RELEASE (workspaceApp); workspaceApp = nil; NSRunAlertPanel(nil, NSLocalizedString(@"The GWorkspace connection died.", @""), NSLocalizedString(@"Ok", @""), nil, nil); [self connectWorkspaceApp]; } // // Menu // - (void)newQuery:(id)sender { MDKWindow *window = [[MDKWindow alloc] initWithContentsOfFile: nil windowRect: [self frameForNewWindow] delegate: self]; [mdkwindows addObject: window]; RELEASE (window); [window activate]; } - (void)openQuery:(id)sender { NSOpenPanel *openPanel = [NSOpenPanel openPanel]; int result; [openPanel setTitle: NSLocalizedString(@"Open saved query", @"")]; [openPanel setAllowsMultipleSelection: NO]; [openPanel setCanChooseFiles: YES]; [openPanel setCanChooseDirectories: NO]; result = [openPanel runModalForDirectory: lastSaveDir file: nil types: [NSArray arrayWithObject: @"mdss"]]; if (result == NSOKButton) { NSString *wpath = [openPanel filename]; MDKWindow *window = [self windowWithSavedPath: wpath]; if (window == nil) { window = [[MDKWindow alloc] initWithContentsOfFile: wpath windowRect: [self frameForNewWindow] delegate: self]; if (window) { [mdkwindows addObject: window]; RELEASE (window); [NSApp activateIgnoringOtherApps: YES]; [window activate]; } else { NSString *msg = NSLocalizedString(@"Invalid query description.", @""); NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@: %@", wpath, msg], NSLocalizedString(@"Ok", @""), nil, nil); } } else { [NSApp activateIgnoringOtherApps: YES]; [window activate]; } } } - (void)saveQuery:(id)sender { if (activeWindow) { NSString *savePath = [activeWindow savePath]; if (savePath == nil) { [self saveQueryAs: nil]; } else { NSDictionary *info = [activeWindow statusInfo]; if ([info writeToFile: savePath atomically: YES]) { [activeWindow setSaved: YES]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"Error saving the query!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } } - (void)saveQueryAs:(id)sender { if (activeWindow) { NSSavePanel *savePanel = [NSSavePanel savePanel]; int result; [savePanel setTitle: NSLocalizedString(@"Save query", @"")]; [savePanel setRequiredFileType: @"mdss"]; result = [savePanel runModalForDirectory: lastSaveDir file: @""]; if (result == NSOKButton) { NSString *savepath = [savePanel filename]; [[activeWindow statusInfo] writeToFile: savepath atomically: YES]; [activeWindow setSavePath: savepath]; [activeWindow setSaved: YES]; ASSIGN (lastSaveDir, [savepath stringByDeletingLastPathComponent]); } } } - (void)closeMainWin:(id)sender { [[NSApp keyWindow] performClose: sender]; } - (void)activateContextHelp:(id)sender { if ([NSHelpManager isContextHelpModeActive] == NO) { [NSHelpManager setContextHelpModeActive: YES]; } } - (BOOL)validateMenuItem:(NSMenuItem *)item { SEL action = [item action]; if (sel_isEqual(action, @selector(saveQuery:))) { return ((activeWindow != nil) && ([activeWindow isSaved] == NO)); } else if (sel_isEqual(action, @selector(saveQueryAs:))) { return ((activeWindow != nil) && ([activeWindow savePath] != nil)); } return YES; } // // MDKWindow delegate // - (void)setActiveWindow:(MDKWindow *)window { [self connectWorkspaceApp]; if (workspaceApp) { NSArray *selection = [window selectedPaths]; if ([selection count]) { [workspaceApp showExternalSelection: selection]; } else { [workspaceApp showExternalSelection: nil]; } } activeWindow = window; } - (void)window:(MDKWindow *)window didChangeSelection:(NSArray *)selection { if (window == activeWindow) { [self connectWorkspaceApp]; if (workspaceApp) { NSArray *selection = [activeWindow selectedPaths]; if ([selection count]) { [workspaceApp showExternalSelection: selection]; } else { [workspaceApp showExternalSelection: nil]; } } } } - (void)mdkwindowWillClose:(MDKWindow *)window { if (activeWindow == window) { [self connectWorkspaceApp]; if (workspaceApp) { [workspaceApp showExternalSelection: nil]; } activeWindow = nil; } [mdkwindows removeObject: window]; } @end @implementation StartAppWin - (void)dealloc { TEST_RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: @"StartAppWin" owner: self] == NO) { NSLog(@"failed to load StartAppWin!"); DESTROY (self); return self; } else { NSRect wframe = [win frame]; NSRect scrframe = [[NSScreen mainScreen] frame]; NSRect winrect = NSMakeRect((scrframe.size.width - wframe.size.width) / 2, (scrframe.size.height - wframe.size.height) / 2, wframe.size.width, wframe.size.height); [win setFrame: winrect display: NO]; [win setDelegate: self]; /* Internationalization */ [startLabel setStringValue: NSLocalizedString(@"starting:", @"")]; } } return self; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname operation:(NSString *)operation maxProgValue:(double)maxvalue { if (win) { [win setTitle: title]; [startLabel setStringValue: operation]; [nameField setStringValue: appname]; [progInd setMinValue: 0.0]; [progInd setMaxValue: maxvalue]; [progInd setDoubleValue: 0.0]; if ([win isVisible] == NO) { [win orderFrontRegardless]; } } } - (void)updateProgressBy:(double)incr { [progInd incrementBy: incr]; } - (NSWindow *)win { return win; } - (BOOL)windowShouldClose:(id)sender { return YES; } @end id addItemToMenu(NSMenu *menu, NSString *str, NSString *comm, NSString *sel, NSString *key) { return [menu addItemWithTitle: NSLocalizedString(str, comm) action: NSSelectorFromString(sel) keyEquivalent: key]; } gworkspace-1.1.0/GWMetadata/MDFinder/MDFinderInfo.plist0000644000175000001440000000114013214346535022050 0ustar multixusers{ NSIcon = "MDFinder.tiff"; NSRole = "Editor"; ApplicationDescription = "MDFinder"; ApplicationIcon = "MDFinder.tiff"; ApplicationName = "MDFinder"; ApplicationRelease = "1.0"; CFBundleIdentifier = "org.gnustep.GWorkspace.MDFinder"; Authors = ( "Enrico Sersale " ); Copyright = "Copyright (C) 2007-2016 Free Software Foundation, Inc."; CopyrightDescription = "Released under the GNU General Public License 2.0"; NSTypes = ( { NSUnixExtensions = ( "mdss" ); NSIcon = "SavedSearch.tiff"; } ); } gworkspace-1.1.0/GWMetadata/MDFinder/Resources/0000755000175000001440000000000013214346535020505 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDFinder/Resources/English.lproj/0000755000175000001440000000000013214346535023223 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDFinder/Resources/English.lproj/StartAppWin.gorm/0000755000175000001440000000000013214346535026402 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDFinder/Resources/English.lproj/StartAppWin.gorm/data.classes0000644000175000001440000000045213214346535030673 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; StartAppWin = { Actions = ( ); Outlets = ( win, startLabel, nameField, progInd ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDFinder/Resources/English.lproj/StartAppWin.gorm/data.info0000644000175000001440000000027013214346535030167 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDFinder/Resources/English.lproj/StartAppWin.gorm/objects.gorm0000644000175000001440000000427313214346535030727 0ustar multixusersGNUstep archive00002c24:0000001a:0000003c:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C Bl&% C D 01 NSView%  C Bl  C Bl&01 NSMutableArray1 NSArray&01NSProgressIndicator% A A0 Cz A  Cz A&0 & ?UUUUUU @I @Y0 1 NSTextField1 NSControl% A B B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 & % starting:0 1NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B B C/ A  C/ A&0 &%00& % fswatcher &&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor00&%System0&%windowBackgroundColor0 &%Window0!&%Window0"&%Window ? B F@ F@%0#1NSImage0$&%NSApplicationIcon&   D D0% &0& &0'1NSMutableDictionary1 NSDictionary&0(&%NSOwner0)& % StartAppWin0*&%ProgressIndicator0+& % TextField 0,& % TextField10-& % GormNSWindow0. &0/1NSNibConnector-00&%NSOwner01*02+03,0041NSNibOutletConnector0-05&%win060+07& % startLabel080,09& % nameField0:0*0;&%progInd0<&gworkspace-1.1.0/GWMetadata/MDFinder/Resources/Images/0000755000175000001440000000000013214346535021712 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDFinder/Resources/Images/MDFinder.tiff0000644000175000001440000001610013214346535024212 0ustar multixusersII*ʷ޵޵زղ毯߻㩩㩩ۧۧ㺺󨨨繹繹󨨨䳳䳳ҿ򾾾쥥쥥ƻȇ彽ȇ彽弼㼼ܻͭͽ͎Ϡǭǭ]6_|Q3_7eUGͷES>?4hXKպպ"VecяӔ}igO/4-9?A[erkiePOQQSPNRMMNOggcwiRD@A1Cx#$*dnohTSU͖QQRjkdg.($% չ֐ƥ  >Mccciiiϧeec\a^T-  ˩̌ƘOE@cd^\]_֬սXX[c`_I7dώA(t;IJHȥGGEw>7*'<ϬWO=MMLNNNUL:Ѭ!6{4 >;2a`^``_?<1&)zǸz! t52)edb󸸸feh30$%߰ zѪؤaDޮǟ%u.+"QPN澾QPR/, mܵݰޭDJ詩-%ϟ -=4',)*/,<3oϪ,ܰ ϟ&&-{驩j ֧ +{,\KȾկ{zz[J0 ߱ ۪  E|ѡ 7"Þl## "!Ӫ믯()*#l. ȚҠެR̨-߮ŗwzխ, Ь&0XK#111󤤤888ZK '̩'߱ { ߮ܰĪۭ ܪޫޫުܪצ ް Ϧ—$ܴ,ã;s8VSO\\\^^^'''QNCv.ġ/װ! ߯ ܯ  اެޫޫޫެݬ̿ݥ اۨۨ۩ڧڤՠתު ѦÖ0ܸBM}}|=<<///000"""???rDٲ9ٯ%ݬ ݪץأܦۨ۩ۨۨ٧ڦėּרԡإ٦٦٦٦٥ڦۧ٫Ԩٱ*@ǭX{{xгP޸:֬*֪ڭܨۧڦ٦٦٥٥٦ӣإ˼յ;ќԟؤפؤؤףؤڥ٨ ڭݲ"8̫FuX6kQ@S<4T<=^EGfMOgOOcKK\CBV@5qWC{]7غP;޳(ڭکڥ٥ؤؤؤؤף֡њׯ%óȳ֥ʖҠԢ֢֡֡֡עפ ڪۮڲ,4k=T> 53135:Bc-vI!ƦA߷0ۮ٨٦ أע֡աբԣԠ͖ѡ ȳe󩩩ؿg˞Ŏ͞џԠԟՠՠբצ٪ح$0j*sS'lO.kO3jO6iP;hQ:jQ6lQ3pS0xX)w1ɩ8۲*ګצգ ֡ԠӟաѠΞǒɘ U󩩩nˢƕΛҝҝӞҠӢ Ԥةذ+۶<޼NaoyҀӂ{rdRܷ@ر.׫զӢ ӠӞҝѝΜȗƚi򮮮Կy״?ŔΛԜўџҢ զר"ڰ,ݷ޹E߼J߻KߺGݶ@ڳ3׮)ժӥѢўΛ˘ʟ"msvhuyձE~ Ĕ˛ϟӤԧ ֪'׭,ׯ/ׯ0خ-׬(өҥΠʜƕ ϫ7tȵrvU㣡yY`vӱH$•ė × – άBpɃcynN{󶴳ol`thGYȶyΉ}lۺ[ϯLȦ@ġ;ž8ž8ž9Ƥ?ͭKظXh}͈н}_tiFlgVᗖspna\Ne]?vjCyP^gnrqnh^|TymHdZ:d`Lvvnٯŝtttuuunnnyyy׽ЪЪ񾾾崴󨨨游⻻㚚㚚㚚ږږږƏ뿿ƏƏ似ἼἼھ㽽㽽㽽ߵܵܵ00 [@08(/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/Preferences/Indexing/MDIndexing.tiffHHgworkspace-1.1.0/GWMetadata/MDFinder/Resources/Images/SavedSearch.tiff0000644000175000001440000001013613214346535024755 0ustar multixusersMM*̀ P8$ BaPd6D`j\?%HdR9$o'Kr9(2 /plK,}?IbLI$S؀oH, v_p]ót9"N"*/T$ _(b07^bdK,> Ǣ+Ҋ@]"Vxp\nwwX,ke^.iD"(V(C4ڇ,>Hx(M?X'W1,?Gb_>D1 imoDoĚkjQ052'?@# T`Z X  "˜n(ߣ B\AbHdl%-X'd#WQ+p8l!"-֊Ej8-` 'pǃEt!A!HLGS;bT-ŹiBdO^q"$劤񣯨9;Ilx]"WX3bI& QD&DzHhZc VQA|'={IFZGH?G|CaQTn-uYb,e P_ouK؁0l`a9x$ ^,lsLQtk+NZ[Lia*>[/iߨ1ӎu2sinYEFpWG)f%eq2R8G%C 0.h0:Sj3-Ø"`3Vn]\pP,,,FOFHJBS(σ&Tz` /4T32z?v —zߨtp3!O&ɇ/Nլw4Ɯ|wO $I@ A}mJ@mg5/٪?qB@t dPFCNng8&V"Pttlњ12 +P@7!>rP}JzLXmLMXl]Pp1t00aH  L  k`!"#P ~\˩ܭN 4TZƩQMeŕ q0  R)&i$*R P:/FRi|{+P` ԫJU2Z `źXYRjoj p#@([(.z; #Y* *bNi(32&9%Dk$P-ςeo'O/'O2AO 'oHS"p  `H8Ľ3)$v#L-,pՓO&E-.660)6 , 0N/  *!j a ` `,H .ztz`qA~2CJJnX=jp34 &tѐ 8C:`'8S ӈPP:4i@ BbD)")P>\/S uF0 P̢@2$B " "q!uBhOY HiCK5?&tC5C=d/$9 1U:bOV*!]H b !"O gY0O0t.EM4MT*GM91UZ320O!Ot A ` `P Q'0cce]E*.=N ,8N]dUv ` ` `X `5Xef`3&{5%h5vf]o^ a ` `x `?_u_HYTQꊨfZT8tk>S'lVAjH `eWkBY tP)ĘtKmSL'r֏l]8 ` ` `\ `7ttOy ۭPZa #EOr$Cp3ww{n A ` `jw Vy! 7zkLQl׽ n[dW~ `V `+~ Q",ID֘@a vJ @ `eB_B~_%"tՖa(6 A ` `z `MABbX#+  =6` ` `t6V @8͌э" 00VRgworkspace-1.1.0/GWMetadata/MDFinder/main.m0000644000175000001440000000232214751213523017631 0ustar multixusers/* main.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2007 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "MDFinder.h" int main(int argc, char **argv, char **env) { CREATE_AUTORELEASE_POOL (pool); NSApplication *app = [NSApplication sharedApplication]; [app setDelegate: [MDFinder mdfinder]]; [app run]; RELEASE (pool); return 0; } gworkspace-1.1.0/GWMetadata/MDKit/0000755000175000001440000000000014752464315016060 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/GNUmakefile0000644000175000001440000000246714634456107020142 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES ADDITIONAL_INCLUDE_DIRS += ADDITIONAL_LIB_DIRS += -lsqlite3 PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make FRAMEWORK_NAME = MDKit include Version MDKit_PRINCIPAL_CLASS = MDKQuery MDKit_HAS_RESOURCE_BUNDLE = yes LIBRARIES_DEPEND_UPON += -lFSNode LIBRARIES_DEPEND_UPON += -lDBKit LIBRARIES_DEPEND_UPON += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) MDKit_RESOURCE_FILES = \ Resources/attributes.plist \ Resources/Images/* \ Resources/English.lproj MDKit_LANGUAGES = Resources/English MDKit_OBJC_FILES = \ SQLite.m \ MDKQuery.m \ MDKQueryManager.m \ MDKWindow.m \ MDKResultsCategory.m \ MDKTableView.m \ MDKResultCell.m \ MDKAttributeChooser.m \ MDKAttribute.m \ MDKAttributeView.m \ MDKAttributeEditor.m \ MDKFSFilter.m MDKit_HEADER_FILES = \ MDKit.h \ SQLite.h \ MDKQuery.h \ MDKQueryManager.h \ MDKWindow.h \ MDKAttributeChooser.h \ MDKAttribute.h \ MDKAttributeView.h \ MDKAttributeEditor.h ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ifeq ($(OBJC_RUNTIME_LIB), gnu) SHARED_LD_POSTFLAGS += -lgnustep-base -lgnustep-gui -lFSNode -lDBKit endif endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/framework.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/MDKit/GNUmakefile.in0000644000175000001440000000252313251572110020523 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES ADDITIONAL_INCLUDE_DIRS += @SQLITE_INCLUDE_DIRS@ ADDITIONAL_LIB_DIRS += @SQLITE_LIB_DIRS@ PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make FRAMEWORK_NAME = MDKit include Version MDKit_PRINCIPAL_CLASS = MDKQuery MDKit_HAS_RESOURCE_BUNDLE = yes LIBRARIES_DEPEND_UPON += -lFSNode LIBRARIES_DEPEND_UPON += -lDBKit LIBRARIES_DEPEND_UPON += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) MDKit_RESOURCE_FILES = \ Resources/attributes.plist \ Resources/Images/* \ Resources/English.lproj MDKit_LANGUAGES = Resources/English MDKit_OBJC_FILES = \ SQLite.m \ MDKQuery.m \ MDKQueryManager.m \ MDKWindow.m \ MDKResultsCategory.m \ MDKTableView.m \ MDKResultCell.m \ MDKAttributeChooser.m \ MDKAttribute.m \ MDKAttributeView.m \ MDKAttributeEditor.m \ MDKFSFilter.m MDKit_HEADER_FILES = \ MDKit.h \ SQLite.h \ MDKQuery.h \ MDKQueryManager.h \ MDKWindow.h \ MDKAttributeChooser.h \ MDKAttribute.h \ MDKAttributeView.h \ MDKAttributeEditor.h ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ifeq ($(OBJC_RUNTIME_LIB), gnu) SHARED_LD_POSTFLAGS += -lgnustep-base -lgnustep-gui -lFSNode -lDBKit endif endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/framework.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/MDKit/GNUmakefile.postamble0000644000175000001440000000130513214346535022111 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -rf autom4te*.cache rm -f config.status config.log config.cache config.h GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/MDKit/GNUmakefile.preamble0000644000175000001440000000147013214346535021715 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../FSNode ADDITIONAL_INCLUDE_DIRS += -I../../DBKit # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += -L../../FSNode/FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../../DBKit/$(GNUSTEP_OBJ_DIR) # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWMetadata/MDKit/MDKAttribute.h0000644000175000001440000000343514751213523020525 0ustar multixusers/* MDKAttribute.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_ATTRIBUTE_H #define MDK_ATTRIBUTE_H #include @class MDKWindow; @interface MDKAttribute : NSObject { NSString *name; NSString *menuName; NSString *description; int type; int numberType; int elementsType; NSString *typeDescription; BOOL searchable; BOOL fsattribute; NSString *fsfilter; NSDictionary *editorInfo; BOOL inuse; id editor; id window; } - (id)initWithAttributeInfo:(NSDictionary *)info forWindow:(MDKWindow *)win; - (BOOL)inUse; - (void)setInUse:(BOOL)value; - (NSString *)name; - (NSString *)menuName; - (NSString *)description; - (int)type; - (int)numberType; - (int)elementsType; - (NSString *)typeDescription; - (BOOL)isSearchable; - (BOOL)isFsattribute; - (NSString *)fsFilterClassName; - (NSDictionary *)editorInfo; - (id)editor; @end #endif // MDK_ATTRIBUTE_H gworkspace-1.1.0/GWMetadata/MDKit/MDKAttribute.m0000644000175000001440000000702214751213523020526 0ustar multixusers/* MDKAttribute.m * * Copyright (C) 2006-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "MDKAttribute.h" #import "MDKAttributeEditor.h" #import "MDKWindow.h" #import "MDKQuery.h" @implementation MDKAttribute - (void)dealloc { RELEASE (name); RELEASE (menuName); RELEASE (description); RELEASE (typeDescription); RELEASE (editorInfo); TEST_RELEASE (fsfilter); TEST_RELEASE (editor); [super dealloc]; } - (id)initWithAttributeInfo:(NSDictionary *)info forWindow:(MDKWindow *)win { self = [super init]; if (self) { id entry; ASSIGN (name, [info objectForKey: @"attribute_name"]); entry = NSLocalizedString([info objectForKey: @"menu_name"], @""); ASSIGN (menuName, entry); entry = NSLocalizedString([info objectForKey: @"description"], @""); ASSIGN (description, entry); type = [[info objectForKey: @"type"] intValue]; entry = [info objectForKey: @"number_type"]; numberType = (entry ? [entry intValue] : -1); elementsType = [[info objectForKey: @"elements_type"] intValue]; entry = NSLocalizedString([info objectForKey: @"type_description"], @""); ASSIGN (typeDescription, entry); searchable = [[info objectForKey: @"searchable"] boolValue]; fsattribute = [[info objectForKey: @"fsattribute"] boolValue]; fsfilter = fsattribute ? [info objectForKey: @"fsfilter"] : nil; TEST_RETAIN (fsfilter); ASSIGN (editorInfo, [info objectForKey: @"editor"]); window = win; editor = nil; inuse = NO; } return self; } - (NSUInteger)hash { return [name hash]; } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [MDKAttribute class]]) { return [name isEqual: [other name]]; } return NO; } - (BOOL)inUse { return inuse; } - (void)setInUse:(BOOL)value { inuse = value; } - (NSString *)name { return name; } - (NSString *)menuName { return menuName; } - (NSString *)description { return description; } - (int)type { return type; } - (int)numberType { return numberType; } - (int)elementsType { return elementsType; } - (NSString *)typeDescription { return typeDescription; } - (BOOL)isSearchable { return searchable; } - (BOOL)isFsattribute { return fsattribute; } - (NSString *)fsFilterClassName { return fsfilter; } - (NSDictionary *)editorInfo { return editorInfo; } - (id)editor { if (editor == nil) { ASSIGN (editor, [MDKAttributeEditor editorForAttribute: self inWindow: window]); } return editor; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKAttributeChooser.h0000644000175000001440000000407514751213523022051 0ustar multixusers/* MDKAttributeChooser.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_ATTRIBUTE_CHOOSER_H #define MDK_ATTRIBUTE_CHOOSER_H #include @class NSScrollView; @class NSMatrix; @class NSTextField; @class NSTextView; @class NSButton; @class MDKWindow; @class MDKAttribute; @class MDKAttributeView; @interface MDKAttributeChooser : NSObject { MDKWindow *mdkwindow; NSMutableArray *mdkattributes; MDKAttribute *choosenAttr; MDKAttributeView *attrView; IBOutlet id win; IBOutlet NSScrollView *menuNamesScroll; NSMatrix *menuNamesMatrix; IBOutlet NSTextField *nameLabel; IBOutlet NSTextField *nameField; IBOutlet NSTextField *typeLabel; IBOutlet NSTextField *typeField; IBOutlet NSTextField *typeDescrLabel; IBOutlet NSTextField *typeDescrField; IBOutlet NSTextField *descriptionLabel; IBOutlet NSTextView *descriptionView; IBOutlet NSButton *cancelButt; IBOutlet NSButton *okButt; } - (id)initForWindow:(MDKWindow *)awindow; - (MDKAttribute *)chooseNewAttributeForView:(MDKAttributeView *)aview; - (MDKAttribute *)attributeWithMenuName:(NSString *)mname; - (void)menuNamesMatrixAction:(id)sender; - (IBAction)buttonsAction:(id)sender; @end #endif // MDK_ATTRIBUTE_CHOOSER_H gworkspace-1.1.0/GWMetadata/MDKit/MDKAttributeChooser.m0000644000175000001440000001346514751213523022061 0ustar multixusers/* MDKAttributeChooser.m * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "MDKAttributeChooser.h" #import "MDKWindow.h" #import "MDKAttribute.h" #import "MDKAttributeView.h" #import "MDKQuery.h" static NSString *nibName = @"MDKAttributeChooser"; @implementation MDKAttributeChooser - (void)dealloc { RELEASE (win); RELEASE (mdkattributes); [super dealloc]; } - (id)initForWindow:(MDKWindow *)awindow { self = [super init]; if (self) { NSDictionary *attrdict; NSArray *names; id cell; float fonth; unsigned i; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } mdkwindow = awindow; mdkattributes = [NSMutableArray new]; attrdict = [MDKQuery attributesWithMask: MDKAttributeSearchable]; names = [[attrdict allKeys] sortedArrayUsingSelector: @selector(compare:)]; cell = [NSBrowserCell new]; fonth = [[cell font] defaultLineHeightForFont]; menuNamesMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSRadioModeMatrix prototype: cell numberOfRows: 0 numberOfColumns: 0]; RELEASE (cell); [menuNamesMatrix setIntercellSpacing: NSZeroSize]; [menuNamesMatrix setCellSize: NSMakeSize([menuNamesScroll contentSize].width, fonth)]; [menuNamesMatrix setAutoscroll: YES]; [menuNamesMatrix setAllowsEmptySelection: YES]; [menuNamesMatrix setTarget: self]; [menuNamesMatrix setAction: @selector(menuNamesMatrixAction:)]; [menuNamesScroll setBorderType: NSBezelBorder]; [menuNamesScroll setHasHorizontalScroller: NO]; [menuNamesScroll setHasVerticalScroller: YES]; [menuNamesScroll setDocumentView: menuNamesMatrix]; RELEASE (menuNamesMatrix); for (i = 0; i < [names count]; i++) { NSDictionary *info = [attrdict objectForKey: [names objectAtIndex: i]]; MDKAttribute *attribute = [[MDKAttribute alloc] initWithAttributeInfo: info forWindow: mdkwindow]; NSString *menuname = [attribute menuName]; unsigned count = [[menuNamesMatrix cells] count]; [menuNamesMatrix insertRow: count]; cell = [menuNamesMatrix cellAtRow: count column: 0]; [cell setStringValue: menuname]; [cell setLeaf: YES]; [mdkattributes addObject: attribute]; RELEASE (attribute); } [menuNamesMatrix sizeToCells]; [nameLabel setStringValue: NSLocalizedString(@"name", @"")]; [typeLabel setStringValue: NSLocalizedString(@"type", @"")]; [typeDescrLabel setStringValue: NSLocalizedString(@"type description", @"")]; [descriptionLabel setStringValue: NSLocalizedString(@"description", @"")]; [descriptionView setDrawsBackground: NO]; [cancelButt setTitle: NSLocalizedString(@"Cancel", @"")]; [okButt setTitle: NSLocalizedString(@"OK", @"")]; [okButt setEnabled: NO]; choosenAttr = nil; attrView = nil; } return self; } - (MDKAttribute *)chooseNewAttributeForView:(MDKAttributeView *)aview { attrView = aview; [NSApp runModalForWindow: win]; return choosenAttr; } - (MDKAttribute *)attributeWithMenuName:(NSString *)mname { int i; for (i = 0; i < [mdkattributes count]; i++) { MDKAttribute *attribute = [mdkattributes objectAtIndex: i]; if ([[attribute menuName] isEqual: mname]) { return attribute; } } return nil; } - (void)menuNamesMatrixAction:(id)sender { id cell = [menuNamesMatrix selectedCell]; if (cell) { NSArray *winattrs = [mdkwindow attributes]; MDKAttribute *attr = [self attributeWithMenuName: [cell stringValue]]; int type = [attr type]; NSString *typestr; [nameField setStringValue: [attr name]]; switch (type) { case STRING: typestr = @"NSString"; break; case ARRAY: typestr = @"NSArray"; break; case NUMBER: typestr = @"NSNumber"; break; case DATE_TYPE: typestr = @"NSDate"; break; case DATA: typestr = @"NSData"; break; default: typestr = @""; break; } [typeField setStringValue: typestr]; [typeDescrField setStringValue: [attr typeDescription]]; [descriptionView setString: [attr description]]; [okButt setEnabled: ([winattrs containsObject: attr] == NO)]; } } - (IBAction)buttonsAction:(id)sender { if (sender == okButt) { id cell = [menuNamesMatrix selectedCell]; if (cell) { choosenAttr = [self attributeWithMenuName: [cell stringValue]]; } else { choosenAttr = nil; } } else { choosenAttr = nil; } [menuNamesMatrix deselectAllCells]; [okButt setEnabled: NO]; [NSApp stopModal]; [win close]; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKAttributeEditor.h0000644000175000001440000000675714751213523021706 0ustar multixusers/* MDKAttributeEditor.h * * Copyright (C) 2006-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_ATTRIBUTE_EDITOR_H #define MDK_ATTRIBUTE_EDITOR_H #import #import "MDKQuery.h" @class MDKAttribute; @class MDKWindow; @class MDKStringEditor; @class NSBox; @class NSTextField; @class NSPopUpButton; @class NSButton; @class NSStepper; @class NSView; @interface MDKAttributeEditor : NSObject { IBOutlet id win; IBOutlet NSBox *editorBox; IBOutlet NSPopUpButton *operatorPopup; IBOutlet NSBox *valueBox; IBOutlet NSTextField *valueField; IBOutlet NSBox *firstValueBox; IBOutlet NSPopUpButton *valuesPopup; IBOutlet NSBox *secondValueBox; MDKAttribute *attribute; NSMutableDictionary *editorInfo; int stateChangeLock; id mdkwindow; } + (id)editorForAttribute:(MDKAttribute *)attribute inWindow:(MDKWindow *)window; - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window; - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window nibName:(NSString *)nibname; - (void)setDefaultValues:(NSDictionary *)info; - (void)restoreSavedState:(NSDictionary *)info; - (BOOL)hasValidValues; - (void)stateDidChange; - (IBAction)operatorPopupAction:(id)sender; - (IBAction)valuesPopupAction:(id)sender; - (MDKOperatorType)operatorTypeForTag:(int)tag; - (NSView *)editorView; - (MDKAttribute *)attribute; - (NSDictionary *)editorInfo; @end @interface MDKStringEditor : MDKAttributeEditor { IBOutlet NSButton *caseSensButt; } - (IBAction)caseSensButtAction:(id)sender; - (NSString *)appendWildcardsToString:(NSString *)str; - (NSString *)removeWildcardsFromString:(NSString *)str; @end @interface MDKArrayEditor : MDKAttributeEditor { IBOutlet NSButton *caseSensButt; } - (IBAction)caseSensButtAction:(id)sender; @end @interface MDKNumberEditor : MDKAttributeEditor { } @end @interface MDKDateEditor : MDKAttributeEditor { IBOutlet NSTextField *dateField; IBOutlet NSStepper *dateStepper; double stepperValue; } - (IBAction)stepperAction:(id)sender; - (void)parseDateString:(NSString *)str; - (NSCalendarDate *)midnight; - (NSTimeInterval)midnightStamp; @end @interface MDKTextContentEditor : NSObject { NSTextField *searchField; NSArray *textContentWords; BOOL wordsChanged; NSMutableCharacterSet *skipSet; id mdkwindow; } - (id)initWithSearchField:(NSTextField *)field inWindow:(MDKWindow *)window; - (void)setTextContentWords:(NSArray *)words; - (NSArray *)textContentWords; - (BOOL)wordsChanged; @end #endif // MDK_ATTRIBUTE_EDITOR_H gworkspace-1.1.0/GWMetadata/MDKit/MDKAttributeEditor.m0000644000175000001440000010203114751213523021671 0ustar multixusers/* MDKAttributeEditor.m * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "MDKAttributeEditor.h" #import "MDKAttribute.h" #import "MDKWindow.h" enum { B_YES = 0, B_NO = 1, IS = 2, IS_NOT = 3, CONTAINS = 4, CONTAINS_NOT = 5, STARTS_WITH = 6, ENDS_WITH = 7, LESS_THEN = 8, EQUAL_TO = 9, GREATER_THEN = 10, TODAY = 11, WITHIN = 12, BEFORE = 13, AFTER = 14, EXACTLY = 15 }; enum { EMPTY, ALT_1, FIELD, ALT_2 }; #define VAL_ORIG NSMakePoint(105, 3) static NSMutableCharacterSet *skipSet = nil; @implementation MDKAttributeEditor + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { initialized = YES; if (skipSet == nil) { NSCharacterSet *set; skipSet = [NSMutableCharacterSet new]; set = [NSCharacterSet controlCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet illegalCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet symbolCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet characterSetWithCharactersInString: @"~`@#$%^_-+\\{}:;\"\',/?"]; [skipSet formUnionWithCharacterSet: set]; } } } + (id)editorForAttribute:(MDKAttribute *)attribute inWindow:(MDKWindow *)window { int type = [attribute type]; Class edclass; id editor = nil; switch (type) { case NUMBER: edclass = [MDKNumberEditor class]; break; case DATE_TYPE: edclass = [MDKDateEditor class]; break; case ARRAY: edclass = [MDKArrayEditor class]; break; case STRING: case DATA: default: edclass = [MDKStringEditor class]; break; } editor = [[edclass alloc] initForAttribute: attribute inWindow: window]; return TEST_AUTORELEASE (editor); } - (void)dealloc { RELEASE (valueBox); RELEASE (firstValueBox); RELEASE (secondValueBox); RELEASE (editorBox); RELEASE (editorInfo); [super dealloc]; } - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window { [self subclassResponsibility: _cmd]; return nil; } - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window nibName:(NSString *)nibname { self = [super init]; if ([NSBundle loadNibNamed: nibname owner: self]) { NSDictionary *info = [attr editorInfo]; NSArray *operatorNums = [info objectForKey: @"operator"]; int editmode = [[info objectForKey: @"value_edit"] intValue]; unsigned i; RETAIN (editorBox); RETAIN (valueBox); RETAIN (firstValueBox); [firstValueBox removeFromSuperview]; [firstValueBox setFrameOrigin: VAL_ORIG]; RETAIN (secondValueBox); [secondValueBox removeFromSuperview]; [secondValueBox setFrameOrigin: VAL_ORIG]; RELEASE (win); attribute = attr; mdkwindow = window; stateChangeLock = 0; editorInfo = [NSMutableDictionary new]; [editorInfo setObject: [attribute name] forKey: @"attrname"]; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"casesens"]; [editorInfo setObject: [NSMutableArray array] forKey: @"values"]; [editorInfo setObject: [NSNumber numberWithInt: 0] forKey: @"opmenu_index"]; [editorInfo setObject: [NSNumber numberWithInt: 0] forKey: @"valmenu_index"]; [operatorPopup removeAllItems]; for (i = 0; i < [operatorNums count]; i++) { int opnum = [[operatorNums objectAtIndex: i] intValue]; NSString *title; switch (opnum) { case B_YES: title = NSLocalizedString(@"YES", @""); break; case B_NO: title = NSLocalizedString(@"NO", @""); break; case IS: title = NSLocalizedString(@"is", @""); break; case IS_NOT: title = NSLocalizedString(@"is not", @""); break; case CONTAINS: title = NSLocalizedString(@"contains", @""); break; case CONTAINS_NOT: title = NSLocalizedString(@"contains not", @""); break; case STARTS_WITH: title = NSLocalizedString(@"starts with", @""); break; case ENDS_WITH: title = NSLocalizedString(@"ends with", @""); break; case LESS_THEN: title = NSLocalizedString(@"less than", @""); break; case EQUAL_TO: title = NSLocalizedString(@"equal to", @""); break; case GREATER_THEN: title = NSLocalizedString(@"greater than", @""); break; case TODAY: title = NSLocalizedString(@"is today", @""); break; case WITHIN: title = NSLocalizedString(@"is within", @""); break; case BEFORE: title = NSLocalizedString(@"is before", @""); break; case AFTER: title = NSLocalizedString(@"is after", @""); break; case EXACTLY: title = NSLocalizedString(@"is exactly", @""); break; default: title = @""; break; } [operatorPopup addItemWithTitle: title]; [[operatorPopup itemAtIndex: i] setTag: opnum]; } [operatorPopup selectItemAtIndex: 0]; if (editmode != FIELD) { [valueBox removeFromSuperview]; } if (editmode == ALT_1) { NSArray *titles = [info objectForKey: @"value_menu"]; NSArray *objects = [info objectForKey: @"value_set"]; [valuesPopup removeAllItems]; for (i = 0; i < [titles count]; i++) { [valuesPopup addItemWithTitle: [titles objectAtIndex: i]]; [[valuesPopup itemAtIndex: i] setRepresentedObject: [objects objectAtIndex: i]]; } [valuesPopup selectItemAtIndex: 0]; [[editorBox contentView] addSubview: (NSView *)firstValueBox]; } else if (editmode == ALT_2) { [[editorBox contentView] addSubview: (NSView *)secondValueBox]; } [self setDefaultValues: info]; } else { NSLog(@"failed to load %@!", nibname); DESTROY (self); } return self; } - (void)setDefaultValues:(NSDictionary *)info { NSMutableArray *values = [editorInfo objectForKey: @"values"]; int tag = [[operatorPopup selectedItem] tag]; MDKOperatorType type = [self operatorTypeForTag: tag]; int editmode = [[info objectForKey: @"value_edit"] intValue]; NSString *defvalue = [info objectForKey: @"search_value"]; [editorInfo setObject: [NSNumber numberWithInt: type] forKey: @"optype"]; if (editmode == EMPTY) { [values addObject: defvalue]; } else if (editmode == ALT_1) { [values addObject: [[valuesPopup selectedItem] representedObject]]; } else if (editmode == FIELD) { if (defvalue) { [values addObject: defvalue]; } } else if (editmode == ALT_2) { /* this must be managed in the subclasses */ } } - (void)restoreSavedState:(NSDictionary *)info { id entry = [info objectForKey: @"values"]; if (entry && [entry count]) { NSMutableArray *values = [editorInfo objectForKey: @"values"]; [values removeAllObjects]; [values addObjectsFromArray: entry]; } entry = [info objectForKey: @"opmenu_index"]; if (entry) { stateChangeLock++; [operatorPopup selectItemAtIndex: [entry intValue]]; [self operatorPopupAction: operatorPopup]; stateChangeLock--; } } - (BOOL)hasValidValues { return ([[editorInfo objectForKey: @"values"] count] > 0); } - (void)stateDidChange { stateChangeLock = (stateChangeLock < 0) ? 0 : stateChangeLock; if (stateChangeLock == 0) { [mdkwindow editorStateDidChange: self]; } } - (IBAction)operatorPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; if (index != [[editorInfo objectForKey: @"opmenu_index"] intValue]) { int tag = [[sender selectedItem] tag]; MDKOperatorType type = [self operatorTypeForTag: tag]; [editorInfo setObject: [NSNumber numberWithInt: type] forKey: @"optype"]; [editorInfo setObject: [NSNumber numberWithInt: [sender indexOfSelectedItem]] forKey: @"opmenu_index"]; [self stateDidChange]; } } - (IBAction)valuesPopupAction:(id)sender { [editorInfo setObject: [NSNumber numberWithInt: [sender indexOfSelectedItem]] forKey: @"valmenu_index"]; } - (MDKOperatorType)operatorTypeForTag:(int)tag { MDKOperatorType type; [editorInfo removeObjectForKey: @"leftwild"]; [editorInfo removeObjectForKey: @"rightwild"]; switch (tag) { case GREATER_THEN: case AFTER: type = MDKGreaterThanOperatorType; break; case TODAY: case WITHIN: type = MDKGreaterThanOrEqualToOperatorType; break; case LESS_THEN: case BEFORE: type = MDKLessThanOperatorType; break; case IS_NOT: type = MDKNotEqualToOperatorType; break; case CONTAINS_NOT: type = MDKNotEqualToOperatorType; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"rightwild"]; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"leftwild"]; break; case B_YES: case B_NO: case IS: case EQUAL_TO: case EXACTLY: type = MDKEqualToOperatorType; break; case CONTAINS: type = MDKEqualToOperatorType; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"rightwild"]; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"leftwild"]; break; case STARTS_WITH: type = MDKEqualToOperatorType; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"rightwild"]; break; case ENDS_WITH: type = MDKEqualToOperatorType; [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"leftwild"]; break; default: type = MDKEqualToOperatorType; break; } return type; } - (NSView *)editorView { return editorBox; } - (MDKAttribute *)attribute { return attribute; } - (NSDictionary *)editorInfo { return editorInfo; } @end @implementation MDKStringEditor - (void)dealloc { [super dealloc]; } - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window { self = [super initForAttribute: attr inWindow: window nibName: @"MDKStringEditor"]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *impath; NSImage *image; impath = [bundle pathForResource: @"switchOff" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [caseSensButt setImage: image]; RELEASE (image); impath = [bundle pathForResource: @"switchOn" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [caseSensButt setAlternateImage: image]; RELEASE (image); [caseSensButt setState: NSOnState]; [caseSensButt setToolTip: NSLocalizedString(@"Case sensitive switch", @"")]; [valueField setDelegate: self]; } return self; } - (void)restoreSavedState:(NSDictionary *)info { int editmode; id entry; [super restoreSavedState: info]; editmode = [[[attribute editorInfo] objectForKey: @"value_edit"] intValue]; if (editmode == FIELD) { NSArray *values = [editorInfo objectForKey: @"values"]; if ([values count]) { NSString *word = [values objectAtIndex: 0]; word = [self removeWildcardsFromString: word]; [valueField setStringValue: word]; } } else { entry = [info objectForKey: @"valmenu_index"]; if (entry) { [valuesPopup selectItemAtIndex: [entry intValue]]; [self valuesPopupAction: valuesPopup]; } } entry = [info objectForKey: @"casesens"]; if (entry) { [caseSensButt setState: ([entry boolValue] ? NSOnState : NSOffState)]; [self caseSensButtAction: caseSensButt]; } } - (IBAction)operatorPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; BOOL changed = (index != [[editorInfo objectForKey: @"opmenu_index"] intValue]); stateChangeLock++; [super operatorPopupAction: sender]; if ([[[attribute editorInfo] objectForKey: @"value_edit"] intValue] == FIELD) { NSMutableArray *values = [editorInfo objectForKey: @"values"]; if ([values count]) { NSString *oldword = [values objectAtIndex: 0]; NSString *word = [self removeWildcardsFromString: oldword]; word = [self appendWildcardsToString: word]; if ([word isEqual: oldword] == NO) { [values removeAllObjects]; [values addObject: word]; } } } stateChangeLock--; if (changed) { [self stateDidChange]; } } - (IBAction)valuesPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; if (index != [[editorInfo objectForKey: @"valmenu_index"] intValue]) { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSString *oldvalue = ([values count] ? [values objectAtIndex: 0] : nil); NSString *newvalue = [[valuesPopup selectedItem] representedObject]; [super valuesPopupAction: sender]; if ((oldvalue == nil) || ([oldvalue isEqual: newvalue] == NO)) { [values removeAllObjects]; [values addObject: newvalue]; [self stateDidChange]; } } } - (IBAction)caseSensButtAction:(id)sender { if ([sender state] == NSOnState) { [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"casesens"]; } else { [editorInfo setObject: [NSNumber numberWithBool: NO] forKey: @"casesens"]; } [self stateDidChange]; } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSString *str = [valueField stringValue]; if ([str length]) { NSScanner *scanner = [NSScanner scannerWithString: str]; NSString *word, *oldword; if ([values count]) { oldword = [self removeWildcardsFromString: [values objectAtIndex: 0]]; } else { oldword = [NSString string]; } if ([scanner scanUpToCharactersFromSet: skipSet intoString: &word]) { if (word && ([word isEqual: oldword] == NO)) { [values removeAllObjects]; [values addObject: [self appendWildcardsToString: word]]; [valueField setStringValue: word]; [self stateDidChange]; } else { [valueField setStringValue: oldword]; } } else { [valueField setStringValue: oldword]; } } else { [values removeAllObjects]; [self stateDidChange]; } } - (NSString *)appendWildcardsToString:(NSString *)str { if (str) { NSMutableString *wilded = [NSMutableString stringWithCapacity: [str length]]; if ([editorInfo objectForKey: @"leftwild"]) { [wilded appendString: @"*"]; } [wilded appendString: str]; if ([editorInfo objectForKey: @"rightwild"]) { [wilded appendString: @"*"]; } return [wilded makeImmutableCopyOnFail: NO]; } return nil; } - (NSString *)removeWildcardsFromString:(NSString *)str { if (str) { NSMutableString *mstr = [str mutableCopy]; [mstr replaceOccurrencesOfString: @"*" withString: @"" options: NSLiteralSearch range: NSMakeRange(0, [mstr length])]; return [mstr autorelease]; } return nil; } @end @implementation MDKArrayEditor - (void)dealloc { [super dealloc]; } - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window { self = [super initForAttribute: attr inWindow: window nibName: @"MDKArrayEditor"]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *impath; NSImage *image; impath = [bundle pathForResource: @"switchOff" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [caseSensButt setImage: image]; RELEASE (image); impath = [bundle pathForResource: @"switchOn" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [caseSensButt setAlternateImage: image]; RELEASE (image); [caseSensButt setToolTip: NSLocalizedString(@"Case sensitive switch", @"")]; [caseSensButt setState: NSOnState]; [valueField setDelegate: self]; } return self; } - (void)restoreSavedState:(NSDictionary *)info { NSArray *values; id entry; [super restoreSavedState: info]; values = [editorInfo objectForKey: @"values"]; if ([values count]) { [valueField setStringValue: [values componentsJoinedByString: @" "]]; } entry = [info objectForKey: @"casesens"]; if (entry) { [caseSensButt setState: ([entry boolValue] ? NSOnState : NSOffState)]; [self caseSensButtAction: caseSensButt]; } } - (IBAction)caseSensButtAction:(id)sender { if ([sender state] == NSOnState) { [editorInfo setObject: [NSNumber numberWithBool: YES] forKey: @"casesens"]; } else { [editorInfo setObject: [NSNumber numberWithBool: NO] forKey: @"casesens"]; } [self stateDidChange]; } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSString *str = [valueField stringValue]; if ([str length]) { NSMutableArray *words = [NSMutableArray array]; NSScanner *scanner = [NSScanner scannerWithString: str]; while ([scanner isAtEnd] == NO) { NSString *word; if ([scanner scanUpToCharactersFromSet: skipSet intoString: &word]) { if (word && [word length]) { [words addObject: word]; } } else { break; } } if ([words count] && ([words isEqual: values] == NO)) { [values removeAllObjects]; [values addObjectsFromArray: words]; [self stateDidChange]; } str = [values componentsJoinedByString: @" "]; [valueField setStringValue: str]; } else { [values removeAllObjects]; [self stateDidChange]; } } @end @implementation MDKNumberEditor - (void)dealloc { [super dealloc]; } - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window { self = [super initForAttribute: attr inWindow: window nibName: @"MDKNumberEditor"]; if (self) { NSNumberFormatter *formatter = [NSNumberFormatter new]; [formatter setAllowsFloats: ([attribute numberType] == NUM_FLOAT)]; [[valueField cell] setFormatter: formatter]; RELEASE (formatter); [valueField setStringValue: @"0"]; [valueField setDelegate: self]; } return self; } - (void)restoreSavedState:(NSDictionary *)info { int editmode; id entry; [super restoreSavedState: info]; editmode = [[[attribute editorInfo] objectForKey: @"value_edit"] intValue]; if (editmode == FIELD) { NSArray *values = [editorInfo objectForKey: @"values"]; if ([values count]) { [valueField setStringValue: [values objectAtIndex: 0]]; } } else if (editmode == ALT_1) { entry = [info objectForKey: @"valmenu_index"]; if (entry) { [valuesPopup selectItemAtIndex: [entry intValue]]; [self valuesPopupAction: valuesPopup]; } } } - (IBAction)operatorPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; if (index != [[editorInfo objectForKey: @"opmenu_index"] intValue]) { int editmode = [[[attribute editorInfo] objectForKey: @"value_edit"] intValue]; [super operatorPopupAction: sender]; if (editmode == EMPTY) { [self stateDidChange]; } } } - (IBAction)valuesPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; if (index != [[editorInfo objectForKey: @"valmenu_index"] intValue]) { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSString *oldvalue = ([values count] ? [values objectAtIndex: 0] : nil); NSString *newvalue = [[valuesPopup selectedItem] representedObject]; [super valuesPopupAction: sender]; if ((oldvalue == nil) || ([oldvalue isEqual: newvalue] == NO)) { [values removeAllObjects]; [values addObject: newvalue]; [self stateDidChange]; } } } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSString *str = [valueField stringValue]; if ([str length]) { BOOL isfloat = ([attribute numberType] == NUM_FLOAT); float newval = [str floatValue]; NSString *oldstr; if ([values count]) { oldstr = [values objectAtIndex: 0]; } else { oldstr = (isfloat ? @"0.0" : @"0"); } if (newval != 0.0) { NSString *formstr = (isfloat ? @"%f" : @"%.0f"); NSString *newstr = [NSString stringWithFormat: formstr, newval]; if ([newstr isEqual: oldstr] == NO) { [values removeAllObjects]; [values addObject: newstr]; [self stateDidChange]; } } else { [valueField setStringValue: oldstr]; } } else { [values removeAllObjects]; [self stateDidChange]; } } @end enum { LAST_DAY, LAST_2DAYS, LAST_3DAYS, LAST_WEEK, LAST_2WEEKS, LAST_3WEEKS, LAST_MONTH, LAST_2MONTHS, LAST_3MONTHS, LAST_6MONTHS }; #define MINUTE_TI (60.0) #define HOUR_TI (MINUTE_TI * 60) #define DAY_TI (HOUR_TI * 24) #define DAYS2_TI (DAY_TI * 2) #define DAYS3_TI (DAY_TI * 3) #define WEEK_TI (DAY_TI * 7) #define WEEK2_TI (WEEK_TI * 2) #define WEEK3_TI (WEEK_TI * 3) #define MONTH_TI (DAY_TI * 30) #define MONTH2_TI ((MONTH_TI * 2) + DAY_TI) #define MONTH3_TI ((MONTH_TI * 3) + (DAY_TI * 1.5)) #define MONTH6_TI ((MONTH_TI * 6) + (DAY_TI * 3)) static NSString *calformat = @"%m %d %Y"; @implementation MDKDateEditor - (void)dealloc { [super dealloc]; } - (id)initForAttribute:(MDKAttribute *)attr inWindow:(MDKWindow *)window { self = [super initForAttribute: attr inWindow: window nibName: @"MDKDateEditor"]; if (self) { NSDateFormatter *formatter; int index; [dateStepper setMaxValue: MONTH6_TI]; [dateStepper setMinValue: 0.0]; [dateStepper setIncrement: 1.0]; [dateStepper setAutorepeat: YES]; [dateStepper setValueWraps: YES]; [secondValueBox removeFromSuperview]; stepperValue = MONTH3_TI; [dateStepper setDoubleValue: stepperValue]; [dateField setDelegate: self]; formatter = [[NSDateFormatter alloc] initWithDateFormat: calformat allowNaturalLanguage: NO]; [[dateField cell] setFormatter: formatter]; RELEASE (formatter); [valuesPopup removeAllItems]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last day", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 2 days", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 3 days", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last week", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 2 weeks", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 3 weeks", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last month", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 2 months", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 3 months", @"")]; [valuesPopup addItemWithTitle: NSLocalizedString(@"the last 6 months", @"")]; [valuesPopup selectItemAtIndex: LAST_DAY]; index = [operatorPopup indexOfItemWithTag: TODAY]; [operatorPopup selectItemAtIndex: index]; [editorInfo setObject: [NSNumber numberWithInt: index] forKey: @"opmenu_index"]; [editorInfo setObject: [NSNumber numberWithInt: LAST_DAY] forKey: @"valmenu_index"]; } return self; } - (void)setDefaultValues:(NSDictionary *)info { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSCalendarDate *midnight = [self midnight]; NSTimeInterval interval = [midnight timeIntervalSinceReferenceDate]; NSString *datestr = [midnight descriptionWithCalendarFormat: calformat]; [super setDefaultValues: info]; [values addObject: [NSString stringWithFormat: @"%f", interval]]; [dateField setStringValue: datestr]; } - (void)restoreSavedState:(NSDictionary *)info { NSArray *values; [super restoreSavedState: info]; values = [editorInfo objectForKey: @"values"]; if (values && [values count]) { NSTimeInterval interval = [[values objectAtIndex: 0] floatValue]; NSCalendarDate *date = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: interval]; [dateField setStringValue: [date descriptionWithCalendarFormat: calformat]]; } } - (IBAction)operatorPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; if (index != [[editorInfo objectForKey: @"opmenu_index"] intValue]) { int tag = [[sender selectedItem] tag]; NSView *view = [editorBox contentView]; NSArray *views = [view subviews]; stateChangeLock++; [super operatorPopupAction: sender]; if (tag == TODAY) { if ([views containsObject: secondValueBox]) { [secondValueBox removeFromSuperview]; } if ([views containsObject: firstValueBox]) { [firstValueBox removeFromSuperview]; } [valuesPopup selectItemAtIndex: LAST_DAY]; [self valuesPopupAction: valuesPopup]; } else if (tag == WITHIN) { if ([views containsObject: secondValueBox]) { [secondValueBox removeFromSuperview]; } if ([views containsObject: firstValueBox] == NO) { [view addSubview: firstValueBox]; } [self valuesPopupAction: valuesPopup]; } else if ((tag == BEFORE) || (tag == AFTER) || (tag == EXACTLY)) { if ([views containsObject: firstValueBox]) { [firstValueBox removeFromSuperview]; } if ([views containsObject: secondValueBox] == NO) { [view addSubview: secondValueBox]; } } stateChangeLock--; [self stateDidChange]; } } - (IBAction)valuesPopupAction:(id)sender { int index = [sender indexOfSelectedItem]; NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSCalendarDate *midnight = [self midnight]; NSTimeInterval interval = [midnight timeIntervalSinceReferenceDate] + DAY_TI; NSString *datestr; stateChangeLock++; [super valuesPopupAction: sender]; switch (index) { case LAST_DAY: interval -= DAY_TI; break; case LAST_2DAYS: interval -= DAYS2_TI; break; case LAST_3DAYS: interval -= DAYS3_TI; break; case LAST_WEEK: interval -= WEEK_TI; break; case LAST_2WEEKS: interval -= WEEK2_TI; break; case LAST_3WEEKS: interval -= WEEK3_TI; break; case LAST_MONTH: interval -= MONTH_TI; break; case LAST_2MONTHS: interval -= MONTH2_TI; break; case LAST_3MONTHS: interval -= MONTH3_TI; break; case LAST_6MONTHS: interval -= MONTH6_TI; break; } [values removeAllObjects]; [values addObject: [NSString stringWithFormat: @"%f", interval]]; midnight = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: interval]; datestr = [midnight descriptionWithCalendarFormat: calformat]; [dateField setStringValue: datestr]; stateChangeLock--; [self stateDidChange]; } - (IBAction)stepperAction:(id)sender { NSString *str = [dateField stringValue]; if ([str length]) { NSCalendarDate *cdate = [NSCalendarDate dateWithString: str calendarFormat: calformat]; if (cdate) { double sv = [sender doubleValue]; if (sv > stepperValue) { cdate = [cdate addTimeInterval: DAY_TI]; } else if (sv < stepperValue) { cdate = [cdate addTimeInterval: -DAY_TI]; } str = [cdate descriptionWithCalendarFormat: calformat]; [dateField setStringValue: str]; stepperValue = sv; [editorInfo setObject: [NSNumber numberWithFloat: stepperValue] forKey: @"stepper_val"]; [self parseDateString: [dateField stringValue]]; } } } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { [self parseDateString: [dateField stringValue]]; } - (void)parseDateString:(NSString *)str { if (str && [str length]) { NSCalendarDate *cdate = [NSCalendarDate dateWithString: str calendarFormat: calformat]; if (cdate) { NSMutableArray *values = [editorInfo objectForKey: @"values"]; NSTimeInterval interval = [cdate timeIntervalSinceReferenceDate]; NSString *intstr = [NSString stringWithFormat: @"%f", interval]; BOOL sameval = ([values count] && [[values objectAtIndex: 0] isEqual: intstr]); if (sameval == NO) { [values removeAllObjects]; [values addObject: intstr]; [self stateDidChange]; } } } } - (NSCalendarDate *)midnight { NSCalendarDate *midnight = [NSCalendarDate calendarDate]; midnight = [NSCalendarDate dateWithYear: [midnight yearOfCommonEra] month: [midnight monthOfYear] day: [midnight dayOfMonth] hour: 0 minute: 0 second: 0 timeZone: [midnight timeZone]]; return midnight; } - (NSTimeInterval)midnightStamp { return [[self midnight] timeIntervalSinceReferenceDate]; } @end @implementation MDKTextContentEditor - (void)dealloc { RELEASE (textContentWords); RELEASE (skipSet); [super dealloc]; } - (id)initWithSearchField:(NSTextField *)field inWindow:(MDKWindow *)window { self = [super init]; if (self) { NSCharacterSet *set; searchField = field; [searchField setDelegate: self]; mdkwindow = window; ASSIGN (textContentWords, [NSArray array]); wordsChanged = NO; skipSet = [NSMutableCharacterSet new]; set = [NSCharacterSet controlCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet illegalCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet symbolCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet characterSetWithCharactersInString: @"~`@#$%^_-+\\{}:;\"\',/?"]; [skipSet formUnionWithCharacterSet: set]; } return self; } #define WORD_MAX 40 #define WORD_MIN 3 - (void)controlTextDidChange:(NSNotification *)notif { NSString *str = [searchField stringValue]; wordsChanged = NO; if ([str length]) { CREATE_AUTORELEASE_POOL(arp); NSScanner *scanner = [NSScanner scannerWithString: str]; NSMutableArray *words = [NSMutableArray array]; while ([scanner isAtEnd] == NO) { NSString *word; if ([scanner scanUpToCharactersFromSet: skipSet intoString: &word]) { if (word) { unsigned wl = [word length]; if ((wl >= WORD_MIN) && (wl < WORD_MAX)) { [words addObject: word]; } } } else { break; } } if ([words count] && ([words isEqual: textContentWords] == NO)) { ASSIGN (textContentWords, words); wordsChanged = YES; } RELEASE (arp); } else { ASSIGN (textContentWords, [NSArray array]); wordsChanged = YES; } if (wordsChanged) { [mdkwindow editorStateDidChange: self]; } } - (void)setTextContentWords:(NSArray *)words { ASSIGN (textContentWords, words); [searchField setStringValue: [words componentsJoinedByString: @" "]]; } - (NSArray *)textContentWords { return textContentWords; } - (BOOL)wordsChanged { return wordsChanged; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKAttributeView.h0000644000175000001440000000353414751213523021360 0ustar multixusers/* MDKAttributeView.h * * Copyright (C) 2006-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_ATTRIBUTE_VIEW_H #define MDK_ATTRIBUTE_VIEW_H #import @class NSBox; @class NSPopUpButton; @class NSButton; @class MDKWindow; @class MDKAttribute; @interface MDKAttributeView : NSObject { IBOutlet id win; IBOutlet NSBox *mainBox; IBOutlet NSPopUpButton *popUp; IBOutlet NSBox *editorBox; IBOutlet NSButton *removeButt; IBOutlet NSButton *addButt; MDKWindow *mdkwindow; MDKAttribute *attribute; NSMutableArray *usedAttributesNames; NSString *otherstr; } - (id)initInWindow:(MDKWindow *)awindow; - (NSBox *)mainBox; - (void)setAttribute:(MDKAttribute *)attr; - (void)updateMenuForAttributes:(NSArray *)attributes; - (void)attributesDidChange:(NSArray *)attributes; - (void)setAddEnabled:(BOOL)value; - (void)setRemoveEnabled:(BOOL)value; - (MDKAttribute *)attribute; - (IBAction)popUpAction:(id)sender; - (IBAction)buttonsAction:(id)sender; @end #endif // MDK_ATTRIBUTE_VIEW_H gworkspace-1.1.0/GWMetadata/MDKit/MDKAttributeView.m0000644000175000001440000001202414751213523021357 0ustar multixusers/* MDKAttributeView.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "MDKAttributeView.h" #include "MDKAttribute.h" #include "MDKAttributeEditor.h" #include "MDKWindow.h" static NSString *nibName = @"MDKAttributeView"; @implementation MDKAttributeView - (void)dealloc { RELEASE (mainBox); RELEASE (usedAttributesNames); RELEASE (otherstr); [super dealloc]; } - (id)initInWindow:(MDKWindow *)awindow { self = [super init]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSArray *attributes; NSString *impath; NSImage *image; int i; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (mainBox); RELEASE (win); impath = [bundle pathForResource: @"add" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [addButt setImage: image]; RELEASE (image); impath = [bundle pathForResource: @"remove" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [removeButt setImage: image]; RELEASE (image); mdkwindow = awindow; attributes = [mdkwindow attributes]; attribute = nil; usedAttributesNames = [NSMutableArray new]; [popUp removeAllItems]; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attr = [attributes objectAtIndex: i]; if ([attr inUse]) { [usedAttributesNames addObject: [attr name]]; } [popUp addItemWithTitle: [attr menuName]]; } ASSIGN (otherstr, NSLocalizedString(@"Other...", @"")); [popUp addItemWithTitle: otherstr]; } return self; } - (NSBox *)mainBox { return mainBox; } - (void)setAttribute:(MDKAttribute *)attr { id editor; attribute = attr; editor = [attribute editor]; if (editor) { [editorBox setContentView: [editor editorView]]; [mdkwindow editorStateDidChange: editor]; } else { NSLog(@"Missing editor for attribute %@", [attribute name]); } [popUp selectItemWithTitle: [attribute menuName]]; } - (void)updateMenuForAttributes:(NSArray *)attributes { unsigned i; [usedAttributesNames removeAllObjects]; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attr = [attributes objectAtIndex: i]; if ([attr inUse] && (attr != attribute)) { [usedAttributesNames addObject: [attr name]]; } } [[popUp menu] update]; [popUp selectItemWithTitle: [attribute menuName]]; } - (void)attributesDidChange:(NSArray *)attributes { unsigned i; [popUp removeAllItems]; [usedAttributesNames removeAllObjects]; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attr = [attributes objectAtIndex: i]; if ([attr inUse] && (attr != attribute)) { [usedAttributesNames addObject: [attr name]]; } [popUp addItemWithTitle: [attr menuName]]; } [popUp addItemWithTitle: otherstr]; [[popUp menu] update]; [popUp selectItemWithTitle: [attribute menuName]]; } - (void)setAddEnabled:(BOOL)value { [addButt setEnabled: value]; } - (void)setRemoveEnabled:(BOOL)value { [removeButt setEnabled: value]; } - (MDKAttribute *)attribute { return attribute; } - (IBAction)popUpAction:(id)sender { NSString *title = [sender titleOfSelectedItem]; if ([title isEqual: [attribute menuName]] == NO) { if ([title isEqual: otherstr] == NO) { [mdkwindow attributeView: self changeAttributeTo: title]; } else { [popUp selectItemWithTitle: [attribute menuName]]; [mdkwindow showAttributeChooser: self]; } } } - (IBAction)buttonsAction:(id)sender { if (sender == addButt) { [mdkwindow insertAttributeViewAfterView: self]; } else { [mdkwindow removeAttributeView: self]; } } - (BOOL)validateMenuItem:(id )anItem { NSString *title = [anItem title]; if ([title isEqual: otherstr]) { return YES; } if (attribute) { MDKAttribute *attr = [mdkwindow attributeWithMenuName: title]; if ([usedAttributesNames containsObject: [attr name]]) { return NO; } return YES; } return NO; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKFSFilter.h0000644000175000001440000000370214751213523020235 0ustar multixusers/* MDKFSFilter.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_FS_FILTER_H #define MDK_FS_FILTER_H #include #include "MDKQuery.h" #include "MDKAttribute.h" #include "FSNode.h" @interface MDKFSFilter : NSObject { id srcvalue; MDKOperatorType optype; } + (id)filterForAttribute:(MDKAttribute *)attr operatorType:(MDKOperatorType)type searchValue:(id)value; - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type; - (BOOL)filterNode:(FSNode *)node; @end @interface MDKFSFilterOwner : MDKFSFilter @end @interface MDKFSFilterOwnerId : MDKFSFilter { int uid; } @end @interface MDKFSFilterGroup : MDKFSFilter @end @interface MDKFSFilterGroupId : MDKFSFilter { int gid; } @end @interface MDKFSFilterSize : MDKFSFilter { unsigned long long fsize; } @end @interface MDKFSFilterModDate : MDKFSFilter { NSTimeInterval midnight; NSTimeInterval nextMidnight; } @end @interface MDKFSFilterCrDate : MDKFSFilter { NSTimeInterval midnight; NSTimeInterval nextMidnight; } @end #endif // MDK_FS_FILTER_H gworkspace-1.1.0/GWMetadata/MDKit/MDKFSFilter.m0000644000175000001440000001532514751213523020246 0ustar multixusers/* MDKFSFilter.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "MDKFSFilter.h" @implementation MDKFSFilter - (void)dealloc { TEST_RELEASE (srcvalue); [super dealloc]; } + (id)filterForAttribute:(MDKAttribute *)attr operatorType:(MDKOperatorType)type searchValue:(id)value { Class filterclass = NSClassFromString([attr fsFilterClassName]); if (filterclass) { id filter = [[filterclass alloc] initWithSearchValue: value operatorType: type]; return AUTORELEASE (filter); } else return nil; } - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type { self = [super init]; if (self) { ASSIGN (srcvalue, value); optype = type; } return self; } - (BOOL)filterNode:(FSNode *)node { [self subclassResponsibility: _cmd]; return NO; } @end @implementation MDKFSFilterOwner - (BOOL)filterNode:(FSNode *)node { NSString *owner = [node owner]; switch (optype) { case MDKEqualToOperatorType: return [srcvalue isEqual: owner]; break; case MDKNotEqualToOperatorType: return ([srcvalue isEqual: owner] == NO); break; default: break; } return NO; } @end @implementation MDKFSFilterOwnerId - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type { self = [super initWithSearchValue: value operatorType: type]; if (self) { uid = [srcvalue intValue]; } return self; } - (BOOL)filterNode:(FSNode *)node { int ownerid = [[node ownerId] intValue]; switch (optype) { case MDKEqualToOperatorType: return (uid == ownerid); break; case MDKNotEqualToOperatorType: return (uid != ownerid); break; default: break; } return NO; } @end @implementation MDKFSFilterGroup - (BOOL)filterNode:(FSNode *)node { NSString *group = [node group]; switch (optype) { case MDKEqualToOperatorType: return [srcvalue isEqual: group]; break; case MDKNotEqualToOperatorType: return ([srcvalue isEqual: group] == NO); break; default: break; } return NO; } @end @implementation MDKFSFilterGroupId - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type { self = [super initWithSearchValue: value operatorType: type]; if (self) { gid = [srcvalue intValue]; } return self; } - (BOOL)filterNode:(FSNode *)node { int groupid = [[node groupId] intValue]; switch (optype) { case MDKEqualToOperatorType: return (gid == groupid); break; case MDKNotEqualToOperatorType: return (gid != groupid); break; default: break; } return NO; } @end @implementation MDKFSFilterSize - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type { self = [super initWithSearchValue: value operatorType: type]; if (self) { fsize = (unsigned long long)[srcvalue intValue]; } return self; } - (BOOL)filterNode:(FSNode *)node { unsigned long long ndsize = ([node fileSize] >> 10); switch (optype) { case MDKLessThanOperatorType: return (ndsize < fsize); break; case MDKEqualToOperatorType: return (ndsize == fsize); break; case MDKGreaterThanOperatorType: return (ndsize > fsize); break; default: break; } return NO; } @end #define MINUTE_TI (60.0) #define HOUR_TI (MINUTE_TI * 60) #define DAY_TI (HOUR_TI * 24) #define DAYS2_TI (DAY_TI * 2) #define DAYS3_TI (DAY_TI * 3) #define WEEK_TI (DAY_TI * 7) #define WEEK2_TI (WEEK_TI * 2) #define WEEK3_TI (WEEK_TI * 3) #define MONTH_TI (DAY_TI * 30) #define MONTH2_TI ((MONTH_TI * 2) + DAY_TI) #define MONTH3_TI ((MONTH_TI * 3) + (DAY_TI * 1.5)) #define MONTH6_TI ((MONTH_TI * 6) + (DAY_TI * 3)) @implementation MDKFSFilterModDate - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type { self = [super initWithSearchValue: value operatorType: type]; if (self) { midnight = [srcvalue floatValue]; nextMidnight = midnight + DAY_TI; } return self; } - (BOOL)filterNode:(FSNode *)node { NSDate *moddate = [node modificationDate]; NSTimeInterval modint = [moddate timeIntervalSinceReferenceDate]; switch (optype) { case MDKGreaterThanOrEqualToOperatorType: return (modint >= midnight); break; case MDKLessThanOperatorType: return (modint < midnight); break; case MDKGreaterThanOperatorType: return (modint >= nextMidnight); break; case MDKEqualToOperatorType: return ((modint >= midnight) && (modint < nextMidnight)); break; default: break; } return NO; } @end @implementation MDKFSFilterCrDate - (id)initWithSearchValue:(id)value operatorType:(MDKOperatorType)type { self = [super initWithSearchValue: value operatorType: type]; if (self) { midnight = [srcvalue floatValue]; nextMidnight = midnight + DAY_TI; } return self; } - (BOOL)filterNode:(FSNode *)node { NSDate *crdate = [node creationDate]; NSTimeInterval crint = [crdate timeIntervalSinceReferenceDate]; switch (optype) { case MDKGreaterThanOrEqualToOperatorType: return (crint >= midnight); break; case MDKLessThanOperatorType: return (crint < midnight); break; case MDKGreaterThanOperatorType: return (crint >= nextMidnight); break; case MDKEqualToOperatorType: return ((crint >= midnight) && (crint < nextMidnight)); break; default: break; } return NO; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKQuery.h0000644000175000001440000001425514751213523017671 0ustar multixusers/* MDKQuery.h * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_QUERY_H #define MDK_QUERY_H #include @class FSNode; @class MDKQueryManager; /* we cannot use DATE because it clashes on windows with wtypes.h stuff */ enum { STRING, ARRAY, NUMBER, DATE_TYPE, DATA }; enum { NUM_INT, NUM_FLOAT, NUM_BOOL }; typedef enum _MDKAttributeMask { MDKAttributeSearchable = 1, MDKAttributeFSType = 2, MDKAttributeBaseSet = 4, MDKAttributeUserSet = 8 } MDKAttributeMask; typedef enum _MDKOperatorType { MDKLessThanOperatorType, MDKLessThanOrEqualToOperatorType, MDKGreaterThanOperatorType, MDKGreaterThanOrEqualToOperatorType, MDKEqualToOperatorType, MDKNotEqualToOperatorType, MDKInRangeOperatorType } MDKOperatorType; typedef enum _MDKCompoundOperator { MDKCompoundOperatorNone, GMDAndCompoundOperator, GMDOrCompoundOperator } MDKCompoundOperator; @interface MDKQuery : NSObject { NSString *attribute; int attributeType; NSString *searchValue; BOOL caseSensitive; MDKOperatorType operatorType; NSString *operator; NSArray *searchPaths; NSString *srcTable; NSString *destTable; NSString *joinTable; NSMutableArray *subqueries; MDKQuery *parentQuery; MDKCompoundOperator compoundOperator; NSNumber *queryNumber; NSMutableDictionary *sqlDescription; NSMutableDictionary *sqlUpdatesDescription; NSArray *categoryNames; NSMutableDictionary *groupedResults; NSArray *fsfilters; BOOL reportRawResults; unsigned int status; MDKQueryManager *qmanager; id delegate; } + (NSArray *)attributesNames; + (NSDictionary *)attributesInfo; + (void)updateUserAttributes:(NSArray *)userattrs; + (NSString *)attributeDescription:(NSString *)attrname; + (NSDictionary *)attributeWithName:(NSString *)name; + (NSDictionary *)attributesWithMask:(MDKAttributeMask)mask; + (NSArray *)categoryNames; + (NSDictionary *)categoryInfo; + (void)updateCategoryInfo:(NSDictionary *)info; + (id)query; + (MDKQuery *)queryFromString:(NSString *)qstr inDirectories:(NSArray *)searchdirs; + (MDKQuery *)queryWithContentsOfFile:(NSString *)path; - (id)initForAttribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype; - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag; - (void)setCaseSensitive:(BOOL)csens; - (void)setTextOperatorForCaseSensitive:(BOOL)csens; - (void)setSearchPaths:(NSArray *)srcpaths; - (NSArray *)searchPaths; - (void)setSrcTable:(NSString *)srctab; - (NSString *)srcTable; - (void)setDestTable:(NSString *)dsttab; - (NSString *)destTable; - (MDKQuery *)queryWithDestTable:(NSString *)tab; - (void)setJoinTable:(NSString *)jtab; - (NSString *)joinTable; - (void)setCompoundOperator:(MDKCompoundOperator)op; - (MDKCompoundOperator)compoundOperator; - (void)setParentQuery:(MDKQuery *)query; - (MDKQuery *)parentQuery; - (MDKQuery *)leftSibling; - (BOOL)hasParentWithCompound:(MDKCompoundOperator)op; - (MDKQuery *)rootQuery; - (BOOL)isRoot; - (MDKQuery *)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op; - (void)appendSubquery:(id)query compoundOperator:(MDKCompoundOperator)op; - (void)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op attribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype caseSensitive:(BOOL)csens; - (void)appendSubqueriesFromString:(NSString *)qstr; - (void)closeSubqueries; - (BOOL)isClosed; - (NSArray *)subqueries; - (BOOL)buildQuery; - (BOOL)isBuilt; - (void)setFSFilters:(NSArray *)filters; - (NSArray *)fsfilters; - (void)appendSQLToPreStatements:(NSString *)sqlstr checkExisting:(BOOL)check; - (void)appendSQLToPostStatements:(NSString *)sqlstr checkExisting:(BOOL)check; @end @interface MDKQuery (gathering) - (void)setDelegate:(id)adelegate; - (NSDictionary *)sqlDescription; - (NSDictionary *)sqlUpdatesDescription; - (NSNumber *)queryNumber; - (void)startGathering; - (void)setStarted; - (BOOL)waitingStart; - (BOOL)isGathering; - (void)gatheringDone; - (void)stopQuery; - (BOOL)isStopped; - (void)setUpdatesEnabled:(BOOL)enabled; - (BOOL)updatesEnabled; - (BOOL)isUpdating; - (void)updatingStarted; - (void)updatingDone; - (void)appendResults:(NSArray *)lines; - (void)insertNode:(FSNode *)node andScore:(NSNumber *)score inDictionary:(NSDictionary *)dict needSorting:(BOOL)sort; - (void)removePaths:(NSArray *)paths; - (void)removeNode:(FSNode *)node; - (NSDictionary *)groupedResults; - (NSArray *)resultNodesForCategory:(NSString *)catname; - (int)resultsCountForCategory:(NSString *)catname; - (void)setReportRawResults:(BOOL)value; @end @interface NSObject (MDKQueryDelegate) - (void)appendRawResults:(NSArray *)lines; - (void)queryDidStartGathering:(MDKQuery *)query; - (void)queryDidUpdateResults:(MDKQuery *)query forCategories:(NSArray *)catnames; - (void)queryDidEndGathering:(MDKQuery *)query; - (void)queryDidStartUpdating:(MDKQuery *)query; - (void)queryDidEndUpdating:(MDKQuery *)query; @end @interface NSDictionary (CategorySort) - (NSComparisonResult)compareAccordingToIndex:(NSDictionary *)dict; @end #endif // MDK_QUERY_H gworkspace-1.1.0/GWMetadata/MDKit/MDKQuery.m0000644000175000001440000016221614751213523017677 0ustar multixusers/* MDKQuery.m * * Copyright (C) 2006-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "MDKQuery.h" #import "MDKQueryManager.h" #include "SQLite.h" #import "FSNode.h" static NSArray *attrNames = nil; static NSDictionary *attrInfo = nil; static NSString *path_sep(void); BOOL subPathOfPath(NSString *p1, NSString *p2); static NSArray *basesetAttributes(void) { static NSArray *attributes = nil; if (attributes == nil) { attributes = [[NSArray alloc] initWithObjects: @"GSMDItemFSName", @"GSMDItemFSExtension", @"GSMDItemFSType", @"GSMDItemFSSize", // FSAttribute @"GSMDItemFSModificationDate", // FSAttribute @"GSMDItemFSOwnerUser", // FSAttribute @"GSMDItemFSOwnerGroup", // FSAttribute @"GSMDItemFinderComment", @"GSMDItemApplicationName", @"GSMDItemRole", @"GSMDItemUnixExtensions", @"GSMDItemTitle", @"GSMDItemAuthors", @"GSMDItemCopyrightDescription", nil]; } return attributes; } enum { SUBCLOSED = 1, BUILT = 2, STOPPED = 4, GATHERING = 8, WAITSTART = 16, UPDATE_ENABLE = 32, UPDATING = 64 }; #define CHECKDELEGATE(s) \ ((delegate != nil) \ && [delegate respondsToSelector: @selector(s)]) @interface MDKAttributeQuery : MDKQuery { } - (BOOL)validateOperatorTypeForAttribute:(NSDictionary *)attrinfo; - (void)setOperatorFromType; @end @interface MDKTextContentQuery : MDKQuery { } @end @interface MDKQueryScanner : NSScanner { MDKQuery *rootQuery; MDKQuery *currentQuery; } + (MDKQueryScanner *)scannerWithString:(NSString *)string forRootQuery:(MDKQuery *)query; - (void)parseQuery; - (void)parse; - (MDKQuery *)parseComparison; - (NSString *)scanAttributeName; - (NSDictionary *)scanSearchValueForAttributeType:(int)type; - (BOOL)scanQueryKeyword:(NSString *)key; @end @implementation MDKQuery - (void)dealloc { RELEASE (subqueries); TEST_RELEASE (attribute); TEST_RELEASE (searchValue); TEST_RELEASE (operator); TEST_RELEASE (searchPaths); RELEASE (srcTable); RELEASE (destTable); TEST_RELEASE (joinTable); RELEASE (queryNumber); RELEASE (sqlDescription); RELEASE (sqlUpdatesDescription); TEST_RELEASE (categoryNames); TEST_RELEASE (groupedResults); TEST_RELEASE (fsfilters); [super dealloc]; } + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *dictpath = [bundle pathForResource: @"attributes" ofType: @"plist"]; NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: dictpath]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *domain = [defaults persistentDomainForName: @"MDKQuery"]; if (dict == nil) { [NSException raise: NSInternalInconsistencyException format: @"\"%@\" doesn't contain a dictionary!", dictpath]; } ASSIGN (attrInfo, [dict objectForKey: @"attributes"]); ASSIGN (attrNames, [attrInfo allKeys]); if (domain == nil) { domain = [NSDictionary dictionaryWithObjectsAndKeys: basesetAttributes(), @"user-attributes", [dict objectForKey: @"categories"], @"categories", nil]; [defaults setPersistentDomain: domain forName: @"MDKQuery"]; [defaults synchronize]; } else { NSArray *entry = nil; BOOL modified = NO; NSMutableDictionary *mdom = nil; entry = [domain objectForKey: @"user-attributes"]; if ((entry == nil) || ([entry count] == 0)) { mdom = [domain mutableCopy]; [mdom setObject: basesetAttributes() forKey: @"user-attributes"]; modified = YES; } entry = [domain objectForKey: @"categories"]; if ((entry == nil) || ([entry count] == 0)) { if (mdom == nil) { mdom = [domain mutableCopy]; } [mdom setObject: [dict objectForKey: @"categories"] forKey: @"categories"]; modified = YES; } if (modified) { [defaults setPersistentDomain: mdom forName: @"MDKQuery"]; [defaults synchronize]; RELEASE (mdom); } } initialized = YES; } } + (NSArray *)attributesNames { return attrNames; } + (NSDictionary *)attributesInfo { return attrInfo; } + (void)updateUserAttributes:(NSArray *)userattrs { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *domain; [defaults synchronize]; domain = [[defaults persistentDomainForName: @"MDKQuery"] mutableCopy]; [domain setObject: userattrs forKey: @"user-attributes"]; [defaults setPersistentDomain: domain forName: @"MDKQuery"]; [defaults synchronize]; RELEASE (domain); } + (NSString *)attributeDescription:(NSString *)attrname { NSDictionary *dict = [attrInfo objectForKey: attrname]; if (dict) { return [dict objectForKey: @"description"]; } return nil; } + (NSDictionary *)attributeWithName:(NSString *)attrname { return [attrInfo objectForKey: attrname]; } + (NSDictionary *)attributesWithMask:(MDKAttributeMask)mask { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *domain = [defaults persistentDomainForName: @"MDKQuery"]; NSArray *userSet = [domain objectForKey: @"user-attributes"]; NSMutableDictionary *attributes = [NSMutableDictionary dictionary]; NSUInteger i; for (i = 0; i < [attrNames count]; i++) { NSString *attrname = [attrNames objectAtIndex: i]; NSDictionary *attrdict = [attrInfo objectForKey: attrname]; BOOL insert = YES; #define CHECK_MASK(m, condition) \ if (insert && (mask & m)) insert = condition CHECK_MASK(MDKAttributeSearchable, [[attrdict objectForKey: @"searchable"] boolValue]); CHECK_MASK(MDKAttributeFSType, [[attrdict objectForKey: @"fsattribute"] boolValue]); CHECK_MASK(MDKAttributeUserSet, [userSet containsObject: attrname]); CHECK_MASK(MDKAttributeBaseSet, [basesetAttributes() containsObject: attrname]); if (insert && ([attributes objectForKey: attrname] == nil)) { [attributes setObject: attrdict forKey: attrname]; } } return attributes; } + (NSArray *)categoryNames { NSDictionary *dict = [self categoryInfo]; if (dict) { return [dict keysSortedByValueUsingSelector: @selector(compareAccordingToIndex:)]; } return nil; } + (NSDictionary *)categoryInfo { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *domain; [defaults synchronize]; domain = [defaults persistentDomainForName: @"MDKQuery"]; return [domain objectForKey: @"categories"]; } + (void)updateCategoryInfo:(NSDictionary *)info { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *domain; [defaults synchronize]; domain = [[defaults persistentDomainForName: @"MDKQuery"] mutableCopy]; [domain setObject: info forKey: @"categories"]; [defaults setPersistentDomain: domain forName: @"MDKQuery"]; [defaults synchronize]; RELEASE (domain); } + (id)query { return AUTORELEASE ([MDKQuery new]); } + (MDKQuery *)queryFromString:(NSString *)qstr inDirectories:(NSArray *)searchdirs { MDKQuery *query = [self query]; NSMutableString *mqstr = [[qstr mutableCopy] autorelease]; MDKQueryScanner *scanner; [query setSearchPaths: searchdirs]; [mqstr replaceOccurrencesOfString: @"(" withString: @" ( " options: NSLiteralSearch range: NSMakeRange(0, [mqstr length])]; [mqstr replaceOccurrencesOfString: @")" withString: @" ) " options: NSLiteralSearch range: NSMakeRange(0, [mqstr length])]; scanner = [MDKQueryScanner scannerWithString: mqstr forRootQuery: query]; [scanner parseQuery]; return query; } + (MDKQuery *)queryWithContentsOfFile:(NSString *)path { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path]; if (dict) { id descr = [dict objectForKey: @"description"]; id paths = [dict objectForKey: @"searchpaths"]; if (descr && [descr isKindOfClass: [NSString class]]) { return [self queryFromString: descr inDirectories: paths]; } } return nil; } - (id)init { self = [super init]; if (self) { unsigned long memaddr = (unsigned long)self; unsigned long num; attribute = nil; searchValue = nil; caseSensitive = NO; operatorType = MDKEqualToOperatorType; operator = nil; searchPaths = nil; ASSIGN (srcTable, @"paths"); qmanager = [MDKQueryManager queryManager]; num = [qmanager tableNumber] + memaddr; ASSIGN (destTable, ([NSString stringWithFormat: @"tab_%lu", num])); num = [qmanager queryNumber] + memaddr; ASSIGN (queryNumber, [NSNumber numberWithUnsignedLong: num]); joinTable = nil; subqueries = [NSMutableArray new]; parentQuery = nil; compoundOperator = MDKCompoundOperatorNone; sqlDescription = [NSMutableDictionary new]; [sqlDescription setObject: [NSMutableArray array] forKey: @"pre"]; [sqlDescription setObject: [NSString string] forKey: @"join"]; [sqlDescription setObject: [NSMutableArray array] forKey: @"post"]; [sqlDescription setObject: queryNumber forKey: @"qnumber"]; sqlUpdatesDescription = [NSMutableDictionary new]; [sqlUpdatesDescription setObject: [NSMutableArray array] forKey: @"pre"]; [sqlUpdatesDescription setObject: [NSString string] forKey: @"join"]; [sqlUpdatesDescription setObject: [NSMutableArray array] forKey: @"post"]; [sqlUpdatesDescription setObject: queryNumber forKey: @"qnumber"]; categoryNames = nil; fsfilters = nil; reportRawResults = NO; status = 0; delegate = nil; } return self; } - (id)initForAttribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype { [self subclassResponsibility: _cmd]; return nil; } - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag { if ([self isRoot] == NO) { [NSException raise: NSInternalInconsistencyException format: @"%@ is not the root query.", [self description]]; } else if ([self isBuilt] == NO) { [NSException raise: NSInternalInconsistencyException format: @"%@ is not built.", [self description]]; } else { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *dict = [NSMutableDictionary dictionary]; BOOL written; [dict setObject: [self description] forKey: @"description"]; if (searchPaths && [searchPaths count]) { [dict setObject: searchPaths forKey: @"searchpaths"]; } written = [dict writeToFile: path atomically: flag]; RELEASE (arp); return written; } return NO; } - (void)setCaseSensitive:(BOOL)csens { caseSensitive = csens; } - (void)setTextOperatorForCaseSensitive:(BOOL)csens { [self subclassResponsibility: _cmd]; } - (void)setSearchPaths:(NSArray *)srcpaths { if (srcpaths) { unsigned i; for (i = 0; i < [subqueries count]; i++) { [[subqueries objectAtIndex: i] setSearchPaths: srcpaths]; } ASSIGN (searchPaths, srcpaths); } else { DESTROY (searchPaths); } } - (NSArray *)searchPaths { return searchPaths; } - (void)setSrcTable:(NSString *)srctab { if (srctab) { ASSIGN (srcTable, srctab); } } - (NSString *)srcTable { return srcTable; } - (void)setDestTable:(NSString *)dsttab { if (dsttab) { ASSIGN (destTable, dsttab); } } - (NSString *)destTable { return destTable; } - (MDKQuery *)queryWithDestTable:(NSString *)tab { NSUInteger i; if ([destTable isEqual: tab]) { return self; } for (i = 0; i < [subqueries count]; i++) { MDKQuery *query = [subqueries objectAtIndex: i]; if ([query queryWithDestTable: tab] != nil) { return query; } } return nil; } - (void)setJoinTable:(NSString *)jtab { if (jtab) { ASSIGN (joinTable, jtab); if (parentQuery != nil) { [parentQuery setJoinTable: joinTable]; } } } - (NSString *)joinTable { return joinTable; } - (void)setCompoundOperator:(MDKCompoundOperator)op { compoundOperator = op; } - (MDKCompoundOperator)compoundOperator { return compoundOperator; } - (void)setParentQuery:(MDKQuery *)query { MDKQuery *leftSibling; parentQuery = query; leftSibling = [self leftSibling]; if (compoundOperator == GMDAndCompoundOperator) { if (leftSibling) { [self setSrcTable: [leftSibling destTable]]; /* destTable is set in -init */ [parentQuery setDestTable: [self destTable]]; } else { [self setSrcTable: [parentQuery srcTable]]; [self setDestTable: [parentQuery destTable]]; } } else if (compoundOperator == GMDOrCompoundOperator) { if (leftSibling) { [self setSrcTable: [leftSibling srcTable]]; [self setDestTable: [leftSibling destTable]]; } else { [self setSrcTable: [parentQuery srcTable]]; [self setDestTable: [parentQuery destTable]]; } } else { /* first subquery */ if (leftSibling == nil) { [self setSrcTable: [parentQuery srcTable]]; [self setDestTable: [parentQuery destTable]]; } else { [NSException raise: NSInternalInconsistencyException format: @"invalid compound operator"]; } } } - (MDKQuery *)parentQuery { return parentQuery; } - (MDKQuery *)leftSibling { MDKQuery *sibling = nil; if (parentQuery) { NSArray *subs = [parentQuery subqueries]; NSUInteger index = [subs indexOfObject: self]; if (index > 0) { sibling = [subs objectAtIndex: index - 1]; } } else { [NSException raise: NSInternalInconsistencyException format: @"query not in tree"]; } return sibling; } - (BOOL)hasParentWithCompound:(MDKCompoundOperator)op { Class c = [MDKQuery class]; MDKQuery *query = self; while (query != nil) { query = [query parentQuery]; if (query && [query isMemberOfClass: c]) { MDKCompoundOperator qop = [query compoundOperator]; if (qop == op) { break; } else if (qop != MDKCompoundOperatorNone) { query = nil; } } else { query = nil; } } return (query && (query != self)); } - (MDKQuery *)rootQuery { MDKQuery *query = self; while (1) { MDKQuery *pre = [query parentQuery]; if (pre != nil) { query = pre; } else { break; } } return query; } - (BOOL)isRoot { return (parentQuery == nil); } - (MDKQuery *)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op { if ([self isClosed] == NO) { MDKQuery *query = [MDKQuery query]; [subqueries addObject: query]; [query setCompoundOperator: op]; [query setParentQuery: self]; [query setSearchPaths: searchPaths]; return query; } [NSException raise: NSInternalInconsistencyException format: @"trying to append to a closed query."]; return nil; } - (void)appendSubquery:(id)query compoundOperator:(MDKCompoundOperator)op { if ([self isClosed] == NO) { if ([subqueries containsObject: query] == NO) { [subqueries addObject: query]; [query setCompoundOperator: op]; [query setParentQuery: self]; [query setSearchPaths: searchPaths]; } } else { [NSException raise: NSInternalInconsistencyException format: @"trying to append to a closed query."]; } } - (void)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op attribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype caseSensitive:(BOOL)csens { if ([self isClosed] == NO) { Class queryClass; id query = nil; if ([attr isEqual: @"GSMDItemTextContent"]) { queryClass = [MDKTextContentQuery class]; } else { queryClass = [MDKAttributeQuery class]; } query = [[queryClass alloc] initForAttribute: attr searchValue: value operatorType: optype]; if (query) { [query setCaseSensitive: csens]; [query setSearchPaths: searchPaths]; [subqueries addObject: query]; [query setCompoundOperator: op]; [query setParentQuery: self]; RELEASE (query); } else { [NSException raise: NSInvalidArgumentException format: @"invalid arguments for query %@ %@", attr, value]; } } else { [NSException raise: NSInternalInconsistencyException format: @"trying to append to a closed query."]; } } - (void)appendSubqueriesFromString:(NSString *)qstr { if ([self isRoot]) { NSMutableString *mqstr = [[qstr mutableCopy] autorelease]; MDKQueryScanner *scanner; [mqstr replaceOccurrencesOfString: @"(" withString: @" ( " options: NSLiteralSearch range: NSMakeRange(0, [mqstr length])]; [mqstr replaceOccurrencesOfString: @")" withString: @" ) " options: NSLiteralSearch range: NSMakeRange(0, [mqstr length])]; scanner = [MDKQueryScanner scannerWithString: mqstr forRootQuery: self]; [scanner parseQuery]; } else { [NSException raise: NSInternalInconsistencyException format: @"%@ is not the root query.", [self description]]; } } - (void)closeSubqueries { if ([self isClosed] == NO) { if (parentQuery) { [parentQuery setDestTable: destTable]; } status |= SUBCLOSED; } else { [NSException raise: NSInternalInconsistencyException format: @"trying to close a closed query."]; } } - (BOOL)isClosed { return ((status & SUBCLOSED) == SUBCLOSED); } - (NSArray *)subqueries { return subqueries; } - (BOOL)buildQuery { if ([self isClosed]) { NSUInteger i; status |= BUILT; for (i = 0; i < [subqueries count]; i++) { if ([[subqueries objectAtIndex: i] buildQuery] == NO) { status &= ~BUILT; break; } } if ([self isBuilt] && [self isRoot]) { ASSIGN (groupedResults, [NSMutableDictionary dictionary]); ASSIGN (categoryNames, [MDKQuery categoryNames]); for (i = 0; i < [categoryNames count]; i++) { NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSMutableArray array], @"nodes", [NSMutableArray array], @"scores", nil]; [groupedResults setObject: dict forKey: [categoryNames objectAtIndex: i]]; } } return [self isBuilt]; } else { [NSException raise: NSInternalInconsistencyException format: @"trying to build an unclosed query."]; } return NO; } - (BOOL)isBuilt { return ((status & BUILT) == BUILT); } - (void)setFSFilters:(NSArray *)filters { ASSIGN (fsfilters, filters); } - (NSArray *)fsfilters { return fsfilters; } - (void)appendSQLToPreStatements:(NSString *)sqlstr checkExisting:(BOOL)check { if ([self isRoot]) { CREATE_AUTORELEASE_POOL(arp); NSMutableString *sqlUpdatesStr = [sqlstr mutableCopy]; NSMutableArray *sqlpre = [sqlDescription objectForKey: @"pre"]; if ((check == NO) || ([sqlpre containsObject: sqlstr] == NO)) { [sqlpre addObject: sqlstr]; } [sqlUpdatesStr replaceOccurrencesOfString: @"paths" withString: @"updated_paths" options: NSLiteralSearch range: NSMakeRange(0, [sqlUpdatesStr length])]; sqlpre = [sqlUpdatesDescription objectForKey: @"pre"]; if ((check == NO) || ([sqlpre containsObject: sqlUpdatesStr] == NO)) { [sqlpre addObject: sqlUpdatesStr]; } RELEASE (sqlUpdatesStr); RELEASE (arp); } else { [NSException raise: NSInternalInconsistencyException format: @"%@ is not the root query.", [self description]]; } } - (void)appendSQLToPostStatements:(NSString *)sqlstr checkExisting:(BOOL)check { if ([self isRoot]) { CREATE_AUTORELEASE_POOL(arp); NSMutableString *sqlUpdatesStr = [sqlstr mutableCopy]; NSMutableArray *sqlpost = [sqlDescription objectForKey: @"post"]; if ((check == NO) || ([sqlpost containsObject: sqlstr] == NO)) { [sqlpost addObject: sqlstr]; } [sqlUpdatesStr replaceOccurrencesOfString: @"paths" withString: @"updated_paths" options: NSLiteralSearch range: NSMakeRange(0, [sqlUpdatesStr length])]; sqlpost = [sqlUpdatesDescription objectForKey: @"post"]; if ((check == NO) || ([sqlpost containsObject: sqlUpdatesStr] == NO)) { [sqlpost addObject: sqlUpdatesStr]; } RELEASE (sqlUpdatesStr); RELEASE (arp); } else { [NSException raise: NSInternalInconsistencyException format: @"%@ is not the root query.", [self description]]; } } - (NSString *)description { NSMutableString *descr = [NSMutableString string]; NSUInteger i; if ([self isRoot] == NO) { [descr appendString: @"("]; } for (i = 0; i < [subqueries count]; i++) { MDKQuery *query = [subqueries objectAtIndex: i]; MDKCompoundOperator op = [query compoundOperator]; switch (op) { case GMDAndCompoundOperator: [descr appendString: @" && "]; break; case GMDOrCompoundOperator: [descr appendString: @" || "]; break; case MDKCompoundOperatorNone: default: [descr appendString: @" "]; break; } [descr appendString: [[subqueries objectAtIndex: i] description]]; } if ([self isRoot] == NO) { [descr appendString: @" )"]; } return descr; } @end @implementation MDKAttributeQuery - (void)dealloc { [super dealloc]; } - (id)initForAttribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype { self = [super init]; if (self) { ASSIGN (attribute, attr); ASSIGN (searchValue, stringForQuery(value)); operatorType = optype; status |= SUBCLOSED; if ([attrNames containsObject: attribute]) { NSDictionary *info = [attrInfo objectForKey: attribute]; if ([self validateOperatorTypeForAttribute: info] == NO) { DESTROY (self); return self; } attributeType = [[info objectForKey: @"type"] intValue]; switch (attributeType) { case STRING: case ARRAY: case DATA: [self setTextOperatorForCaseSensitive: NO]; break; case NUMBER: case DATE_TYPE: [self setOperatorFromType]; break; default: DESTROY (self); break; } } else { DESTROY (self); } } return self; } - (BOOL)validateOperatorTypeForAttribute:(NSDictionary *)attrinfo { int attrtype = [[attrinfo objectForKey: @"type"] intValue]; if ((attrtype == STRING) || (attrtype == DATA)) { if ((operatorType != MDKEqualToOperatorType) && (operatorType != MDKNotEqualToOperatorType)) { return NO; } } else if (attrtype == ARRAY) { int elemtype = [[attrinfo objectForKey: @"elements_type"] intValue]; if ((elemtype == STRING) || (elemtype == DATA)) { if ((operatorType != MDKEqualToOperatorType) && (operatorType != MDKNotEqualToOperatorType)) { return NO; } } else { return NO; } } else if (attrtype == NUMBER) { int numtype = [[attrinfo objectForKey: @"number_type"] intValue]; if (numtype == NUM_BOOL) { if ((operatorType != MDKEqualToOperatorType) && (operatorType != MDKNotEqualToOperatorType)) { return NO; } } } else if (attrtype == DATE_TYPE) { if ([searchValue floatValue] == 0.0) { return NO; } } else { return NO; } return YES; } - (void)setOperatorFromType { switch (operatorType) { case MDKLessThanOperatorType: ASSIGN (operator, @"<"); break; case MDKLessThanOrEqualToOperatorType: ASSIGN (operator, @"<="); break; case MDKGreaterThanOperatorType: ASSIGN (operator, @">"); break; case MDKGreaterThanOrEqualToOperatorType: ASSIGN (operator, @">="); break; case MDKNotEqualToOperatorType: ASSIGN (operator, @"!="); break; case MDKInRangeOperatorType: /* FIXME */ break; case MDKEqualToOperatorType: default: ASSIGN (operator, @"=="); break; } } - (void)setCaseSensitive:(BOOL)csens { if ((attributeType == STRING) || (attributeType == ARRAY) || (attributeType == DATA)) { [self setTextOperatorForCaseSensitive: csens]; } caseSensitive = csens; } - (void)setTextOperatorForCaseSensitive:(BOOL)csens { NSString *wc = (csens ? @"%" : @"*"); NSString *wildcard = (csens ? @"*" : @"%"); if (operatorType == MDKEqualToOperatorType) { ASSIGN (operator, (csens ? @"GLOB" : @"LIKE")); } else { ASSIGN (operator, (csens ? @"NOT GLOB" : @"NOT LIKE")); } if ([searchValue rangeOfString: wc].location != NSNotFound) { NSMutableString *mvalue = [searchValue mutableCopy]; [mvalue replaceOccurrencesOfString: wc withString: wildcard options: NSLiteralSearch range: NSMakeRange(0, [mvalue length])]; ASSIGN (searchValue, [mvalue makeImmutableCopyOnFail: NO]); RELEASE (mvalue); } caseSensitive = csens; } - (MDKQuery *)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op { [NSException raise: NSInternalInconsistencyException format: @"Cannot append to a MDKAttributeQuery instance."]; return nil; } - (void)appendSubquery:(id)query compoundOperator:(MDKCompoundOperator)op { [NSException raise: NSInternalInconsistencyException format: @"Cannot append to a MDKAttributeQuery instance."]; } - (void)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op attribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype caseSensitive:(BOOL)csens { [NSException raise: NSInternalInconsistencyException format: @"Cannot append to a MDKAttributeQuery instance."]; } - (BOOL)buildQuery { MDKQuery *root = [self rootQuery]; MDKQuery *leftSibling = [self leftSibling]; NSMutableString *sqlstr; sqlstr = [NSString stringWithFormat: @"CREATE TEMP TABLE %@ " @"(id INTEGER UNIQUE ON CONFLICT IGNORE, " @"path TEXT UNIQUE ON CONFLICT IGNORE, " @"words_count INTEGER, " @"score REAL); ", destTable]; [root appendSQLToPreStatements: sqlstr checkExisting: YES]; sqlstr = [NSString stringWithFormat: @"CREATE TEMP TRIGGER %@_trigger " @"BEFORE INSERT ON %@ " @"BEGIN " @"UPDATE %@ " @"SET score = (score + new.score) " @"WHERE id = new.id; " @"END;", destTable, destTable, destTable]; [root appendSQLToPreStatements: sqlstr checkExisting: YES]; sqlstr = [NSMutableString string]; [sqlstr appendFormat: @"INSERT INTO %@ (id, path, words_count, score) " @"SELECT " @"%@.id, " @"%@.path, " @"%@.words_count, " @"attributeScore('%@', '%@', attributes.attribute, %i, %i) " @"FROM %@, attributes " @"WHERE attributes.key = '%@' ", destTable, srcTable, srcTable, srcTable, attribute, searchValue, attributeType, operatorType, srcTable, attribute]; [sqlstr appendFormat: @"AND attributes.attribute %@ ", operator]; if ((attributeType == STRING) || (attributeType == DATA)) { [sqlstr appendString: @"'"]; [sqlstr appendString: searchValue]; [sqlstr appendString: @"' "]; } else if (attributeType == ARRAY) { [sqlstr appendString: @"'"]; [sqlstr appendString: (caseSensitive ? @"*" : @"%")]; [sqlstr appendString: searchValue]; [sqlstr appendString: (caseSensitive ? @"*" : @"%")]; [sqlstr appendString: @"' "]; } else if (attributeType == NUMBER) { NSDictionary *info = [attrInfo objectForKey: attribute]; int numtype = [[info objectForKey: @"number_type"] intValue]; [sqlstr appendFormat: @"(cast (%@ as ", searchValue]; if (numtype == NUM_FLOAT) { [sqlstr appendString: @"REAL)) "]; } else { [sqlstr appendString: @"INTEGER)) "]; } } else if (attributeType == DATE_TYPE) { [sqlstr appendFormat: @"(cast (%@ as REAL)) ", searchValue]; } else { return NO; } [sqlstr appendFormat: @"AND attributes.path_id = %@.id ", srcTable]; if (searchPaths) { NSUInteger count = [searchPaths count]; NSUInteger i; [sqlstr appendString: @"AND ("]; for (i = 0; i < count; i++) { NSString *path = [searchPaths objectAtIndex: i]; NSString *minpath = [NSString stringWithFormat: @"%@%@*", path, path_sep()]; [sqlstr appendFormat: @"(%@.path = '%@' OR %@.path GLOB '%@') ", srcTable, path, srcTable, minpath]; if (i != (count - 1)) { [sqlstr appendString: @"OR "]; } } [sqlstr appendString: @")"]; } [sqlstr appendString: @";"]; [root appendSQLToPreStatements: sqlstr checkExisting: NO]; if (((leftSibling != nil) && (compoundOperator == GMDAndCompoundOperator)) || ((leftSibling == nil) && [self hasParentWithCompound: GMDAndCompoundOperator])) { NSMutableString *joinquery = [NSMutableString string]; [joinquery appendFormat: @"INSERT INTO %@ (id, path, words_count, score) " @"SELECT " @"%@.id, " @"%@.path, " @"%@.words_count, " @"%@.score " @"FROM " @"%@, %@ " @"WHERE " @"%@.id = %@.id; ", destTable, srcTable, srcTable, srcTable, srcTable, srcTable, destTable, srcTable, destTable]; [root appendSQLToPreStatements: joinquery checkExisting: NO]; } [root appendSQLToPostStatements: [NSString stringWithFormat: @"DROP TABLE %@", destTable] checkExisting: YES]; [parentQuery setJoinTable: destTable]; status |= BUILT; return [self isBuilt]; } - (NSString *)description { NSMutableString *descr = [NSMutableString string]; NSString *svalue = searchValue; BOOL txtype = ((attributeType == STRING) || (attributeType == ARRAY) || (attributeType == DATA)); [descr appendString: attribute]; switch (operatorType) { case MDKLessThanOperatorType: [descr appendString: @" < "]; break; case MDKLessThanOrEqualToOperatorType: [descr appendString: @" <= "]; break; case MDKGreaterThanOperatorType: [descr appendString: @" > "]; break; case MDKGreaterThanOrEqualToOperatorType: [descr appendString: @" >= "]; break; case MDKEqualToOperatorType: [descr appendString: @" == "]; break; case MDKNotEqualToOperatorType: [descr appendString: @" != "]; break; case MDKInRangeOperatorType: /* TODO */ break; default: break; } if (txtype) { NSMutableString *mvalue = [[searchValue mutableCopy] autorelease]; [mvalue replaceOccurrencesOfString: @"%" withString: @"*" options: NSLiteralSearch range: NSMakeRange(0, [mvalue length])]; svalue = mvalue; [descr appendString: @"\""]; } [descr appendString: svalue]; if (txtype) { [descr appendString: @"\""]; if (caseSensitive == NO) { [descr appendString: @"c"]; } } return descr; } @end @implementation MDKTextContentQuery - (void)dealloc { [super dealloc]; } - (id)initForAttribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype { self = [super init]; if (self) { if ((optype != MDKEqualToOperatorType) && (optype != MDKNotEqualToOperatorType)) { DESTROY (self); return self; } ASSIGN (attribute, attr); attributeType = STRING; ASSIGN (searchValue, stringForQuery(value)); operatorType = optype; [self setTextOperatorForCaseSensitive: YES]; status |= SUBCLOSED; } return self; } - (void)setCaseSensitive:(BOOL)csens { [self setTextOperatorForCaseSensitive: csens]; } - (void)setTextOperatorForCaseSensitive:(BOOL)csens { NSString *wc = (csens ? @"%" : @"*"); NSString *wildcard = (csens ? @"*" : @"%"); ASSIGN (operator, (csens ? @"GLOB" : @"LIKE")); if ([searchValue rangeOfString: wc].location != NSNotFound) { NSMutableString *mvalue = [searchValue mutableCopy]; [mvalue replaceOccurrencesOfString: wc withString: wildcard options: NSLiteralSearch range: NSMakeRange(0, [mvalue length])]; ASSIGN (searchValue, [mvalue makeImmutableCopyOnFail: NO]); RELEASE (mvalue); } caseSensitive = csens; } - (MDKQuery *)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op { [NSException raise: NSInternalInconsistencyException format: @"Cannot append to a MDKTextContentQuery instance."]; return nil; } - (void)appendSubquery:(id)query compoundOperator:(MDKCompoundOperator)op { [NSException raise: NSInternalInconsistencyException format: @"Cannot append to a MDKTextContentQuery instance."]; } - (void)appendSubqueryWithCompoundOperator:(MDKCompoundOperator)op attribute:(NSString *)attr searchValue:(NSString *)value operatorType:(MDKOperatorType)optype caseSensitive:(BOOL)csens { [NSException raise: NSInternalInconsistencyException format: @"Cannot append to a MDKTextContentQuery instance."]; } - (BOOL)buildQuery { MDKQuery *root = [self rootQuery]; MDKQuery *leftSibling = [self leftSibling]; NSMutableString *sqlstr; sqlstr = [NSString stringWithFormat: @"CREATE TEMP TABLE %@ " @"(id INTEGER UNIQUE ON CONFLICT IGNORE, " @"path TEXT UNIQUE ON CONFLICT IGNORE, " @"words_count INTEGER, " @"score REAL); ", destTable]; [root appendSQLToPreStatements: sqlstr checkExisting: YES]; sqlstr = [NSString stringWithFormat: @"CREATE TEMP TRIGGER %@_trigger " @"BEFORE INSERT ON %@ " @"BEGIN " @"UPDATE %@ " @"SET score = (score + new.score) " @"WHERE id = new.id; " @"END;", destTable, destTable, destTable]; [root appendSQLToPreStatements: sqlstr checkExisting: YES]; sqlstr = [NSMutableString string]; if (operatorType == MDKEqualToOperatorType) { [sqlstr appendFormat: @"INSERT INTO %@ (id, path, words_count, score) " @"SELECT " @"%@.id, " @"%@.path, " @"%@.words_count, " @"wordScore('%@', words.word, postings.word_count, %@.words_count) " @"FROM words, %@, postings ", destTable, srcTable, srcTable, srcTable, searchValue, srcTable, srcTable]; [sqlstr appendFormat: @"WHERE words.word %@ '", operator]; [sqlstr appendString: searchValue]; [sqlstr appendString: @"' "]; [sqlstr appendFormat: @"AND postings.word_id = words.id " @"AND %@.id = postings.path_id ", srcTable]; } else { /* MDKNotEqualToOperatorType */ [sqlstr appendFormat: @"INSERT INTO %@ (id, path, words_count, score) " @"SELECT " @"%@.id AS tid, " @"%@.path, " @"%@.words_count, " @"(1.0 / %@.words_count) " @"FROM %@ ", destTable, srcTable, srcTable, srcTable, srcTable, srcTable]; [sqlstr appendString: @"WHERE " @"(SELECT words.word " @"FROM words, postings " @"WHERE postings.path_id = tid " @"AND words.id = postings.word_id "]; [sqlstr appendFormat: @"AND words.word %@ '", operator]; [sqlstr appendString: searchValue]; [sqlstr appendString: @"') ISNULL "]; } if (searchPaths) { unsigned count = [searchPaths count]; unsigned i; [sqlstr appendString: @"AND ("]; for (i = 0; i < count; i++) { NSString *path = [searchPaths objectAtIndex: i]; NSString *minpath = [NSString stringWithFormat: @"%@%@*", path, path_sep()]; [sqlstr appendFormat: @"(%@.path = '%@' OR %@.path GLOB '%@') ", srcTable, path, srcTable, minpath]; if (i != (count - 1)) { [sqlstr appendString: @"OR "]; } } [sqlstr appendString: @") "]; } [sqlstr appendString: @";"]; [root appendSQLToPreStatements: sqlstr checkExisting: NO]; if (((leftSibling != nil) && (compoundOperator == GMDAndCompoundOperator)) || ((leftSibling == nil) && [self hasParentWithCompound: GMDAndCompoundOperator])) { NSMutableString *joinquery = [NSMutableString string]; [joinquery appendFormat: @"INSERT INTO %@ (id, path, words_count, score) " @"SELECT " @"%@.id, " @"%@.path, " @"%@.words_count, " @"%@.score " @"FROM " @"%@, %@ " @"WHERE " @"%@.id = %@.id; ", destTable, srcTable, srcTable, srcTable, srcTable, srcTable, destTable, srcTable, destTable]; [root appendSQLToPreStatements: joinquery checkExisting: NO]; } [root appendSQLToPostStatements: [NSString stringWithFormat: @"DROP TABLE %@", destTable] checkExisting: YES]; [parentQuery setJoinTable: destTable]; status |= BUILT; return [self isBuilt]; } - (NSString *)description { NSMutableString *descr = [NSMutableString string]; NSMutableString *mvalue = [[searchValue mutableCopy] autorelease]; [descr appendString: attribute]; if (operatorType == MDKEqualToOperatorType) { [descr appendString: @" == "]; } else { [descr appendString: @" != "]; } [descr appendString: @"\""]; [mvalue replaceOccurrencesOfString: @"%" withString: @"*" options: NSLiteralSearch range: NSMakeRange(0, [mvalue length])]; [descr appendString: mvalue]; [descr appendString: @"\""]; if (caseSensitive == NO) { [descr appendString: @"c"]; } return descr; } @end @implementation MDKQuery (gathering) - (void)setDelegate:(id)adelegate { if ([self isRoot]) { delegate = adelegate; } else { [NSException raise: NSInternalInconsistencyException format: @"only the root query can have a delegate."]; } } - (NSDictionary *)sqlDescription { if ([self isRoot]) { NSString *jtable = [self joinTable]; NSString *joinquery = [NSString stringWithFormat: @"SELECT %@.path, " @"%@.score " @"FROM %@ " @"ORDER BY " @"%@.score DESC, " @"%@.path ASC;", jtable, jtable, jtable, jtable, jtable]; [sqlDescription setObject: joinquery forKey: @"join"]; return sqlDescription; } else { [NSException raise: NSInternalInconsistencyException format: @"%@ is not the root query.", [self description]]; } return nil; } - (NSDictionary *)sqlUpdatesDescription { if ([self isRoot]) { [sqlUpdatesDescription setObject: [[self sqlDescription] objectForKey: @"join"] forKey: @"join"]; return sqlUpdatesDescription; } else { [NSException raise: NSInternalInconsistencyException format: @"%@ is not the root query.", [self description]]; } return nil; } - (NSNumber *)queryNumber { return queryNumber; } - (void)startGathering { if (([self isGathering] == NO) && ([self waitingStart] == NO)) { status &= ~STOPPED; status |= WAITSTART; [qmanager startQuery: self]; } } - (void)setStarted { status &= ~WAITSTART; status |= GATHERING; if (CHECKDELEGATE (queryDidStartGathering:)) { [delegate queryDidStartGathering: self]; } } - (BOOL)waitingStart { return ((status & WAITSTART) == WAITSTART); } - (BOOL)isGathering { return ((status & GATHERING) == GATHERING); } - (void)gatheringDone { if ([self isStopped]) { status &= ~(GATHERING | UPDATING); } else { status &= ~GATHERING; } if (CHECKDELEGATE (queryDidEndGathering:)) { [delegate queryDidEndGathering: self]; } if ([self updatesEnabled] && ([self isUpdating] == NO) && ([self isStopped] == NO)) { status |= UPDATING; [qmanager startUpdateForQuery: self]; } } - (void)stopQuery { status |= STOPPED; status &= ~WAITSTART; } - (BOOL)isStopped { return ((status & STOPPED) == STOPPED); } - (void)setUpdatesEnabled:(BOOL)enabled { if (enabled) { status |= UPDATE_ENABLE; } else { status &= ~(UPDATE_ENABLE | UPDATING); } } - (BOOL)updatesEnabled { return ((status & UPDATE_ENABLE) == UPDATE_ENABLE); } - (BOOL)isUpdating { return ((status & UPDATING) == UPDATING); } - (void)updatingStarted { if (CHECKDELEGATE (queryDidStartUpdating:)) { [delegate queryDidStartUpdating: self]; } } - (void)updatingDone { if (CHECKDELEGATE (queryDidEndUpdating:)) { [delegate queryDidEndUpdating: self]; } } - (void)appendResults:(NSArray *)lines { if (reportRawResults) { if (CHECKDELEGATE (appendRawResults:)) { [delegate appendRawResults: lines]; } } else { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *catnames = [NSMutableArray array]; BOOL sort = [self isUpdating]; unsigned i; for (i = 0; i < [lines count]; i++) { NSArray *line = [lines objectAtIndex: i]; FSNode *node = [FSNode nodeWithPath: [line objectAtIndex: 0]]; NSNumber *score = [line objectAtIndex: 1]; if (node && [node isValid]) { BOOL caninsert = YES; if (fsfilters && [fsfilters count]) { caninsert = [qmanager filterNode: node withFSFilters: fsfilters]; } if (caninsert) { NSString *category = [qmanager categoryNameForNode: node]; [self insertNode: node andScore: score inDictionary: [groupedResults objectForKey: category] needSorting: sort]; if ([catnames containsObject: category] == NO) { [catnames addObject: category]; } } } } if (CHECKDELEGATE (queryDidUpdateResults:forCategories:)) { [delegate queryDidUpdateResults: self forCategories: catnames]; } RELEASE (arp); } } - (void)insertNode:(FSNode *)node andScore:(NSNumber *)score inDictionary:(NSDictionary *)dict needSorting:(BOOL)sort { NSMutableArray *nodes = [dict objectForKey: @"nodes"]; NSMutableArray *scores = [dict objectForKey: @"scores"]; if ([self isUpdating]) { NSUInteger index = [nodes indexOfObject: node]; if (index != NSNotFound) { [nodes removeObjectAtIndex: index]; [scores removeObjectAtIndex: index]; } } if (sort) { NSUInteger count = [nodes count]; NSUInteger ins = 0; if (count) { NSUInteger first = 0; NSUInteger last = count; NSUInteger pos = 0; NSComparisonResult result; while (1) { if (first == last) { ins = first; break; } pos = (NSUInteger)((first + last) / 2); result = [(NSNumber *)[scores objectAtIndex: pos] compare: score]; if (result == NSOrderedSame) { result = [[nodes objectAtIndex: pos] compareAccordingToPath: node]; } if ((result == NSOrderedDescending) || (result == NSOrderedSame)) { first = pos + 1; } else { last = pos; } } } [nodes insertObject: node atIndex: ins]; [scores insertObject: score atIndex: ins]; } else { [nodes addObject: node]; [scores addObject: score]; } } - (void)removePaths:(NSArray *)paths { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *catnames = [NSMutableArray array]; NSUInteger index; NSUInteger i; index = NSNotFound; for (i = 0; i < [paths count]; i++) { FSNode *node = [FSNode nodeWithPath: [paths objectAtIndex: i]]; NSString *catname; NSDictionary *catdict; NSMutableArray *catnodes; NSMutableArray *catscores; catname = nil; catscores = nil; catnodes = nil; if ([node isValid]) { catname = [qmanager categoryNameForNode: node]; catdict = [groupedResults objectForKey: catname]; catnodes = [catdict objectForKey: @"nodes"]; catscores = [catdict objectForKey: @"scores"]; index = [catnodes indexOfObject: node]; } else { NSUInteger j; for (j = 0; j < [categoryNames count]; j++) { catname = [categoryNames objectAtIndex: j]; catdict = [groupedResults objectForKey: catname]; catnodes = [catdict objectForKey: @"nodes"]; catscores = [catdict objectForKey: @"scores"]; index = [catnodes indexOfObject: node]; if (index != NSNotFound) break; } } if (index != NSNotFound) { [catnodes removeObjectAtIndex: index]; [catscores removeObjectAtIndex: index]; if (catname && [catnames containsObject: catname] == NO) { [catnames addObject: catname]; } } } if ((index != NSNotFound) && CHECKDELEGATE (queryDidUpdateResults:forCategories:)) { [delegate queryDidUpdateResults: self forCategories: catnames]; } RELEASE (arp); } - (void)removeNode:(FSNode *)node { NSString *catname; NSDictionary *catdict; NSMutableArray *catnodes; NSMutableArray *catscores; NSUInteger index; index = NSNotFound; if ([node isValid]) { catname = [qmanager categoryNameForNode: node]; catdict = [groupedResults objectForKey: catname]; catnodes = [catdict objectForKey: @"nodes"]; catscores = [catdict objectForKey: @"scores"]; index = [catnodes indexOfObject: node]; } else { NSUInteger i; for (i = 0; i < [categoryNames count]; i++) { catname = [categoryNames objectAtIndex: i]; catdict = [groupedResults objectForKey: catname]; catnodes = [catdict objectForKey: @"nodes"]; catscores = [catdict objectForKey: @"scores"]; index = [catnodes indexOfObject: node]; if (index != NSNotFound) break; } } if (index != NSNotFound) { [catnodes removeObjectAtIndex: index]; [catscores removeObjectAtIndex: index]; if (CHECKDELEGATE (queryDidUpdateResults:forCategories:)) { [delegate queryDidUpdateResults: self forCategories: [NSArray arrayWithObject: catname]]; } } } - (NSDictionary *)groupedResults { return groupedResults; } - (NSArray *)resultNodesForCategory:(NSString *)catname { NSDictionary *catdict = [groupedResults objectForKey: catname]; if (catdict) { return [catdict objectForKey: @"nodes"]; } return nil; } - (int)resultsCountForCategory:(NSString *)catname { NSArray *catdnodes = [self resultNodesForCategory: catname]; return (catdnodes ? [catdnodes count] : 0); } - (void)setReportRawResults:(BOOL)value { reportRawResults = value; } @end @implementation MDKQueryScanner + (MDKQueryScanner *)scannerWithString:(NSString *)string forRootQuery:(MDKQuery *)query { MDKQueryScanner *scanner = [[MDKQueryScanner alloc] initWithString: string]; scanner->rootQuery = query; scanner->currentQuery = query; return AUTORELEASE (scanner); } - (void)parseQuery { while ([self isAtEnd] == NO) { [self parse]; } [rootQuery closeSubqueries]; [rootQuery buildQuery]; } - (void)parse { MDKCompoundOperator op = MDKCompoundOperatorNone; static unsigned int parsed = 0; #define PARSEXCEPT(x, e) \ if (x > 0) [NSException raise: NSInvalidArgumentException format: e] #define COMPOUND 1 #define SUBOPEN 2 #define SUBCLOSE 4 #define COMPARISION 8 if ([self scanQueryKeyword: @"&&"]) { op = GMDAndCompoundOperator; } else if ([self scanQueryKeyword: @"||"]) { op = GMDOrCompoundOperator; } if (op != MDKCompoundOperatorNone) { PARSEXCEPT ((parsed & COMPOUND), @"double compound operator"); PARSEXCEPT ((parsed & SUBOPEN), @"compound operator without arguments"); parsed &= ~(SUBOPEN | SUBCLOSE | COMPARISION); parsed |= COMPOUND; } if ([self scanString: @"(" intoString: NULL]) { PARSEXCEPT ((!(((parsed & SUBOPEN) == SUBOPEN) || ((parsed & COMPOUND) == COMPOUND) || ((parsed == 0) && (currentQuery == rootQuery)))), @"subquery without compound operator"); parsed &= ~(COMPOUND | SUBCLOSE | COMPARISION); parsed |= SUBOPEN; currentQuery = [currentQuery appendSubqueryWithCompoundOperator: op]; } else if ([self scanString: @")" intoString: NULL]) { PARSEXCEPT ((parsed & COMPOUND), @"compound operator without arguments"); parsed &= ~(COMPOUND | SUBOPEN | COMPARISION); parsed |= SUBCLOSE; [currentQuery closeSubqueries]; if ((currentQuery == rootQuery) == NO) { currentQuery = [currentQuery parentQuery]; } } else { MDKQuery *query = [self parseComparison]; PARSEXCEPT ((parsed & COMPARISION), @"subquery without compound operator"); parsed &= ~(COMPOUND | SUBOPEN | SUBCLOSE); parsed |= COMPARISION; [currentQuery appendSubquery: query compoundOperator: op]; } } - (MDKQuery *)parseComparison { NSString *attribute; NSDictionary *attrinfo; int attrtype; NSDictionary *valueInfo; NSString *searchValue; MDKOperatorType optype; BOOL caseSens; Class queryClass; id query = nil; #define CHK_ATTR_TYPE(x) \ do { if ((attrtype == STRING) || (attrtype == ARRAY) || (attrtype == DATA)) \ [NSException raise: NSInvalidArgumentException \ format: @"Invalid attribute type for operator: %@", x]; \ } while (0) attribute = [self scanAttributeName]; attrinfo = [[MDKQuery attributesInfo] objectForKey: attribute]; attrtype = [[attrinfo objectForKey: @"type"] intValue]; optype = 0; if ([self scanString: @"<" intoString: NULL]) { optype = MDKLessThanOperatorType; CHK_ATTR_TYPE (@"<"); } else if ([self scanString: @"<=" intoString: NULL]) { optype = MDKLessThanOrEqualToOperatorType; CHK_ATTR_TYPE (@"<="); } else if ([self scanString: @">" intoString: NULL]) { optype = MDKGreaterThanOperatorType; CHK_ATTR_TYPE (@">"); } else if ([self scanString: @">=" intoString: NULL]) { optype = MDKGreaterThanOrEqualToOperatorType; CHK_ATTR_TYPE (@">="); } else if ([self scanString: @"==" intoString: NULL]) { optype = MDKEqualToOperatorType; } else if ([self scanString: @"!=" intoString: NULL]) { optype = MDKNotEqualToOperatorType; } else if ([self scanString: @"---------------------" intoString: NULL]) { /* TODO TODO TODO TODO TODO TODO TODO */ optype = MDKInRangeOperatorType; CHK_ATTR_TYPE (@"---------------------"); } else { NSString *str = [[self string] substringFromIndex: [self scanLocation]]; [NSException raise: NSInvalidArgumentException format: @"Invalid query operator: %@", str]; } valueInfo = [self scanSearchValueForAttributeType: attrtype]; searchValue = [valueInfo objectForKey: @"value"]; caseSens = [[valueInfo objectForKey: @"case_sens"] boolValue]; if ([attribute isEqual: @"GSMDItemTextContent"]) { queryClass = [MDKTextContentQuery class]; } else { queryClass = [MDKAttributeQuery class]; } query = [[queryClass alloc] initForAttribute: attribute searchValue: searchValue operatorType: optype]; if (query) { [query setCaseSensitive: caseSens]; } return TEST_AUTORELEASE (query); } - (NSString *)scanAttributeName { NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSString *attrname; if ([self scanUpToCharactersFromSet: set intoString: &attrname] && attrname) { if ([[MDKQuery attributesNames] containsObject: attrname]) { return attrname; } } [NSException raise: NSInvalidArgumentException format: @"unable to parse the attribute name"]; return nil; } - (NSDictionary *)scanSearchValueForAttributeType:(int)type { NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; BOOL scanQuote = ((type == STRING) || (type == ARRAY) || (type == DATA)); BOOL caseSens = YES; NSString *value; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; if (scanQuote && ([self scanString: @"\"" intoString: NULL] == NO)) { scanQuote = NO; } if (scanQuote) { NSString *modifiers; if (([self scanUpToString: @"\"" intoString: &value] && value) == NO) { [NSException raise: NSInvalidArgumentException format: @"Missing \" in query"]; } if ([self scanUpToCharactersFromSet: set intoString: &modifiers] && modifiers) { if ([modifiers rangeOfString: @"c"].location != NSNotFound) { caseSens = NO; } } } else { if (([self scanUpToCharactersFromSet: set intoString: &value] && value) == NO) { [NSException raise: NSInvalidArgumentException format: @"unable to parse value"]; } } [dict setObject: value forKey: @"value"]; [dict setObject: [NSNumber numberWithBool: caseSens] forKey: @"case_sens"]; return dict; } - (BOOL)scanQueryKeyword:(NSString *)key { NSUInteger loc = [self scanLocation]; [self setCaseSensitive: NO]; if ([self scanString: key intoString: NULL] == NO) { return NO; } else { NSCharacterSet *set = [NSCharacterSet alphanumericCharacterSet]; unichar c = [[self string] characterAtIndex: [self scanLocation]]; if ([set characterIsMember: c] == NO) { return YES; } } [self setScanLocation: loc]; return NO; } @end @implementation NSDictionary (CategorySort) - (NSComparisonResult)compareAccordingToIndex:(NSDictionary *)dict { NSNumber *p1 = [self objectForKey: @"index"]; NSNumber *p2 = [dict objectForKey: @"index"]; return [p1 compare: p2]; } @end static NSString *path_sep(void) { static NSString *separator = nil; if (separator == nil) { #if defined(__MINGW32__) separator = @"\\"; #else separator = @"/"; #endif RETAIN (separator); } return separator; } BOOL subPathOfPath(NSString *p1, NSString *p2) { NSUInteger l1 = [p1 length]; NSUInteger l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqual: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqual: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } gworkspace-1.1.0/GWMetadata/MDKit/MDKQueryManager.h0000644000175000001440000000375714751213523021171 0ustar multixusers/* MDKQueryManager.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_QUERY_MANAGER_H #define MDK_QUERY_MANAGER_H #include #include "MDKQuery.h" @class FSNode; @interface MDKQueryManager : NSObject { NSMutableArray *queries; NSMutableArray *liveQueries; unsigned long tableNumber; unsigned long queryNumber; id gmds; NSNotificationCenter *nc; NSNotificationCenter *dnc; } + (MDKQueryManager *)queryManager; - (BOOL)startQuery:(MDKQuery *)query; - (BOOL)queryResults:(NSData *)results; - (oneway void)endOfQueryWithNumber:(NSNumber *)qnum; - (MDKQuery *)queryWithNumber:(NSNumber *)qnum; - (MDKQuery *)nextQuery; - (unsigned long)tableNumber; - (unsigned long)queryNumber; - (void)connectGMDs; - (void)gmdsConnectionDidDie:(NSNotification *)notif; @end @interface MDKQueryManager (updates) - (void)startUpdateForQuery:(MDKQuery *)query; - (void)metadataDidUpdate:(NSNotification *)notif; @end @interface MDKQueryManager (results_filtering) - (NSString *)categoryNameForNode:(FSNode *)node; - (BOOL)filterNode:(FSNode *)node withFSFilters:(NSArray *)filters; @end #endif // MDK_QUERY_MANAGER_H gworkspace-1.1.0/GWMetadata/MDKit/MDKQueryManager.m0000644000175000001440000002561714751213523021175 0ustar multixusers/* MDKQueryManager.m * * Copyright (C) 2006-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "MDKQueryManager.h" #import "MDKFSFilter.h" #import "FSNode.h" #include "config.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) static MDKQueryManager *queryManager = nil; @protocol GMDSClientProtocol - (BOOL)queryResults:(NSData *)results; - (oneway void)endOfQueryWithNumber:(NSNumber *)qnum; @end @protocol GMDSProtocol - (oneway void)registerClient:(id)remote; - (oneway void)unregisterClient:(id)remote; - (oneway void)performQuery:(NSDictionary *)queryInfo; @end @implementation MDKQueryManager + (MDKQueryManager *)queryManager { if (queryManager == nil) { queryManager = [MDKQueryManager new]; } return queryManager; } - (void)dealloc { [dnc removeObserver: self]; [nc removeObserver: self]; RELEASE (queries); RELEASE (liveQueries); [super dealloc]; } - (id)init { self = [super init]; if (self) { queries = [NSMutableArray new]; liveQueries = [NSMutableArray new]; tableNumber = 0L; queryNumber = 0L; gmds = nil; nc = [NSNotificationCenter defaultCenter]; dnc = [NSDistributedNotificationCenter defaultCenter]; [dnc addObserver: self selector: @selector(metadataDidUpdate:) name: @"GWMetadataDidUpdateNotification" object: nil]; } return self; } - (BOOL)startQuery:(MDKQuery *)query { if ([query isRoot] == NO) { [NSException raise: NSInvalidArgumentException format: @"\"%@\" is not the root query.", [query description]]; } if ([queries containsObject: query]) { [NSException raise: NSInvalidArgumentException format: @"\"%@\" is already started.", [query description]]; } [self connectGMDs]; if (gmds) { unsigned count = [queries count]; unsigned i; for (i = 0; i < count; i++) { MDKQuery *q = [queries objectAtIndex: i]; if (([q isGathering] == NO) && [q isStopped]) { [queries removeObjectAtIndex: i]; i--; count--; } } NS_DURING { if ([query isClosed] == NO) { [query closeSubqueries]; } if ([query isBuilt] == NO) { [query buildQuery]; } } NS_HANDLER { NSLog(@"%@", localException); return NO; } NS_ENDHANDLER [queries insertObject: query atIndex: 0]; if ([queries count] == 1) { [query setStarted]; [gmds performQuery: [query sqlDescription]]; } } else { [NSException raise: NSInternalInconsistencyException format: @"The query manager is unable to contact the gmds daemon."]; } return YES; } - (BOOL)queryResults:(NSData *)results { CREATE_AUTORELEASE_POOL(arp); NSDictionary *dict = [NSUnarchiver unarchiveObjectWithData: results]; NSNumber *qnum = [dict objectForKey: @"qnumber"]; MDKQuery *query = [self queryWithNumber: qnum]; BOOL resok = NO; if (query && ([query isStopped] == NO)) { [query appendResults: [dict objectForKey: @"lines"]]; resok = YES; } RELEASE (arp); return resok; } - (oneway void)endOfQueryWithNumber:(NSNumber *)qnum { MDKQuery *query = [self queryWithNumber: qnum]; if (query) { if ([query isUpdating]) { GWDebugLog(@"REMOVING UPDATING QUERY %lu", [queries count]); } else { GWDebugLog(@"REMOVING SIMPLE QUERY %lu", [queries count]); } if ([query isUpdating]) { [query updatingDone]; } [query gatheringDone]; [queries removeObject: query]; } query = [self nextQuery]; if (query && ([query isGathering] == NO)) { if ([query isStopped] == NO) { if ([query isUpdating] == NO) { [query setStarted]; [gmds performQuery: [query sqlDescription]]; } else { [query updatingStarted]; GWDebugLog(@"PERFORMING UPDATE (2) %lu", [queries count]); [gmds performQuery: [query sqlUpdatesDescription]]; } } else { [queries removeObject: query]; } } } - (MDKQuery *)queryWithNumber:(NSNumber *)qnum { unsigned i; for (i = 0; i < [queries count]; i++) { MDKQuery *query = [queries objectAtIndex: i]; if ([[query queryNumber] isEqual: qnum]) { return query; } } return nil; } - (MDKQuery *)nextQuery { return [queries lastObject]; } - (unsigned long)tableNumber { return tableNumber++; } - (unsigned long)queryNumber { return queryNumber++; } - (void)connectGMDs { if (gmds == nil) { gmds = [NSConnection rootProxyForConnectionWithRegisteredName: @"gmds" host: @""]; if (gmds == nil) { NSString *cmd; int i; cmd = [NSTask launchPathForTool: @"gmds"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 0; i < 40; i++) { [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; gmds = [NSConnection rootProxyForConnectionWithRegisteredName: @"gmds" host: @""]; if (gmds) { break; } } } if (gmds) { RETAIN (gmds); [gmds setProtocolForProxy: @protocol(GMDSProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(gmdsConnectionDidDie:) name: NSConnectionDidDieNotification object: [gmds connectionForProxy]]; [gmds registerClient: self]; NSLog(@"gmds connected!"); } else { NSLog(@"unable to contact gmds."); } } } - (void)gmdsConnectionDidDie:(NSNotification *)notif { [nc removeObserver: self name: NSConnectionDidDieNotification object: [notif object]]; DESTROY (gmds); NSLog(@"gmds connection died!"); [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 1.0]]; [self connectGMDs]; } @end @implementation MDKQueryManager (updates) - (void)startUpdateForQuery:(MDKQuery *)query { if ([liveQueries containsObject: query] == NO) { [liveQueries insertObject: query atIndex: 0]; } } - (void)metadataDidUpdate:(NSNotification *)notif { CREATE_AUTORELEASE_POOL(arp); NSArray *removed = [[notif userInfo] objectForKey: @"removed"]; unsigned count = [liveQueries count]; unsigned i; for (i = 0; i < count; i++) { MDKQuery *query = [liveQueries objectAtIndex: i]; if ([query updatesEnabled]) { [query removePaths: removed]; if ([queries containsObject: query] == NO) { [queries addObject: query]; GWDebugLog(@"INSERTING UPDATING QUERY %lu", [queries count]); } } else { [liveQueries removeObjectAtIndex: i]; count--; i--; } } if (count && (count == [queries count])) { MDKQuery *query = [queries lastObject]; GWDebugLog(@"PERFORMING UPDATE (1) %lu", [queries count]); [query updatingStarted]; [gmds performQuery: [query sqlUpdatesDescription]]; } RELEASE (arp); } @end @implementation MDKQueryManager (results_filtering) static NSArray *imageExtensions(void) { static NSMutableArray *extensions = nil; if (extensions == nil) { extensions = [NSMutableArray new]; [extensions addObjectsFromArray: [NSImage imageFileTypes]]; [extensions addObject: @"xpm"]; [extensions addObject: @"xbm"]; [extensions makeImmutableCopyOnFail: NO]; } return extensions; } static NSArray *movieExtensions(void) { static NSArray *extensions = nil; if (extensions == nil) { extensions = [[NSArray alloc] initWithObjects: @"avi", @"mpg", @"mpeg", @"mov", @"divx", @"m1v", @"m2p", @"m2v", @"moov", @"mp4", @"mpv", @"ogm", @"qt", @"rm", @"swf", @"vob", @"wmv", nil]; } return extensions; } static NSArray *musicExtensions(void) { static NSArray *extensions = nil; if (extensions == nil) { extensions = [[NSArray alloc] initWithObjects: @"aac", @"ac3", @"aif", @"aiff", @"mpa", @"mp1", @"mp2", @"mp3", @"ogg", @"omf", @"ram", @"wav", @"wma", nil]; } return extensions; } static NSArray *sourceExtensions(void) { static NSArray *extensions = nil; if (extensions == nil) { extensions = [[NSArray alloc] initWithObjects: @"asm", @"c", @"class", @"cpp", @"cxx", @"cc", @"c++", @"h", @"hpp", @"hxx", @"java", @"jar", @"m", @"mm", @"pl", @"py", @"y", @"yxx", nil]; } return extensions; } - (NSString *)categoryNameForNode:(FSNode *)node { NSString *category = nil; if ([node isApplication]) { category = @"applications"; } else if ([node isDirectory] && ([node isPackage] == NO)) { category = @"folders"; } else { NSString *ext = [[[node path] pathExtension] lowercaseString]; if (ext && [ext length]) { if ([ext isEqual: @"pdf"]) { category = @"pdfdocs"; } else if ([sourceExtensions() containsObject: ext]) { category = @"sources"; } else if ([imageExtensions() containsObject: ext]) { category = @"images"; } else if ([movieExtensions() containsObject: ext]) { category = @"movies"; } else if ([musicExtensions() containsObject: ext]) { category = @"music"; } } } if (category == nil) { if ([node application]) { category = @"documents"; } else { category = @"plainfiles"; } } return category; } - (BOOL)filterNode:(FSNode *)node withFSFilters:(NSArray *)filters { int i; for (i = 0; i < [filters count]; i++) { if ([[filters objectAtIndex: i] filterNode: node] == NO) { return NO; } } return YES; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKResultCell.h0000644000175000001440000000237114751213523020636 0ustar multixusers/* MDKResultCell.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_RESULT_CELL_H #define MDK_RESULT_CELL_H #include #include #include "FSNodeRep.h" @class NSImage; @interface MDKResultCell : NSTextFieldCell { BOOL headCell; NSImage *icon; } - (void)setIcon:(NSImage *)icn; - (void)setHeadCell:(BOOL)value; @end #endif // MDK_RESULT_CELL_H gworkspace-1.1.0/GWMetadata/MDKit/MDKResultCell.m0000644000175000001440000000510014751213523020634 0ustar multixusers/* MDKResultCell.m * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "MDKResultCell.h" @implementation MDKResultCell - (void)dealloc { TEST_RELEASE (icon); [super dealloc]; } - (id)init { self = [super init]; if (self) { icon = nil; headCell = NO; } return self; } - (id)copyWithZone:(NSZone *)zone { MDKResultCell *c = [super copyWithZone: zone]; c->headCell = headCell; TEST_RETAIN (icon); return c; } - (void)setIcon:(NSImage *)icn { ASSIGN (icon, icn); } - (void)setHeadCell:(BOOL)value { headCell = value; } - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { if (headCell == NO) { NSRect title_rect = cellFrame; #define MARGIN (2.0) if (icon == nil) { [super drawInteriorWithFrame: title_rect inView: controlView]; return; } else { NSRect icon_rect; icon_rect.origin = cellFrame.origin; icon_rect.size = [icon size]; icon_rect.origin.x += MARGIN; icon_rect.origin.y += ((cellFrame.size.height - icon_rect.size.height) / 2.0); if ([controlView isFlipped]) { icon_rect.origin.y += icon_rect.size.height; } title_rect.origin.x += (icon_rect.size.width + (MARGIN * 2)); title_rect.size.width -= (icon_rect.size.width + (MARGIN * 2)); [super drawInteriorWithFrame: title_rect inView: controlView]; [icon compositeToPoint: icon_rect.origin operation: NSCompositeSourceOver]; } } else { [[NSColor blueColor] set]; NSRectFill(cellFrame); } } - (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView { return NO; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKResultsCategory.h0000644000175000001440000000504114751213523021714 0ustar multixusers/* MDKResultsCategory.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_RESULTS_CATEGORY_H #define MDK_RESULTS_CATEGORY_H #include #include @class MDKWindow; @class NSTextField; @class NSButton; @class NSBox; @class ControlsView; @class NSColor; @interface MDKResultsCategory : NSObject { NSString *name; NSArray *results; NSRange range; int globcount; BOOL showHeader; BOOL showFooter; BOOL closed; BOOL showall; MDKResultsCategory *prev; MDKResultsCategory *next; MDKWindow *mdkwin; IBOutlet id win; IBOutlet NSBox *headBox; ControlsView *headView; IBOutlet NSButton *openCloseButt; IBOutlet NSTextField *nameLabel; IBOutlet NSButton *topFiveHeadButt; IBOutlet NSBox *footBox; ControlsView *footView; IBOutlet NSButton *topFiveFootButt; } - (id)initWithCategoryName:(NSString *)cname menuName:(NSString *)mname inWindow:(MDKWindow *)awin; - (NSString *)name; - (void)setResults:(NSArray *)res; - (BOOL)hasResults; - (id)resultAtIndex:(int)index; - (void)calculateRanges; - (NSRange)range; - (int)globalCount; - (BOOL)showFooter; - (void)setPrev:(MDKResultsCategory *)cat; - (MDKResultsCategory *)prev; - (void)setNext:(MDKResultsCategory *)cat; - (MDKResultsCategory *)next; - (MDKResultsCategory *)last; - (void)updateButtons; - (IBAction)openCloseButtAction:(id)sender; - (IBAction)topFiveHeadButtAction:(id)sender; - (IBAction)topFiveFootButtAction:(id)sender; - (NSView *)headControls; - (NSView *)footControls; @end @interface ControlsView : NSView { NSColor *backColor; } - (void)setColor:(NSColor *)color; @end #endif // MDK_RESULTS_CATEGORY_H gworkspace-1.1.0/GWMetadata/MDKit/MDKResultsCategory.m0000644000175000001440000002011214751213523021715 0ustar multixusers/* MDKResultsCategory.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "MDKResultsCategory.h" #include "MDKWindow.h" #include "FSNode.h" #define MIN_LINES 5 #define TOP_FIVE 0 #define ALL_RESULTS 1 static NSString *nibName = @"MDKCategoryControls"; static NSAttributedString *topFiveHeadButtTitle = nil; static NSImage *whiteArrowRight = nil; static NSImage *whiteArrowDown = nil; @implementation MDKResultsCategory + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { NSString *str = NSLocalizedString(@"Show top 5", @""); NSMutableDictionary *dict = [NSMutableDictionary dictionary]; id style; NSBundle *bundle; NSString *impath; [dict setObject: [NSColor whiteColor] forKey: NSForegroundColorAttributeName]; [dict setObject: [NSFont boldSystemFontOfSize: 12] forKey: NSFontAttributeName]; style = [NSMutableParagraphStyle defaultParagraphStyle]; [style setAlignment: NSRightTextAlignment]; [dict setObject: style forKey: NSParagraphStyleAttributeName]; topFiveHeadButtTitle = [[NSAttributedString alloc] initWithString: str attributes: dict]; bundle = [NSBundle bundleForClass: [self class]]; impath = [bundle pathForResource: @"whiteArrowRight" ofType: @"tiff"]; whiteArrowRight = [[NSImage alloc] initWithContentsOfFile: impath]; impath = [bundle pathForResource: @"whiteArrowDown" ofType: @"tiff"]; whiteArrowDown = [[NSImage alloc] initWithContentsOfFile: impath]; initialized = YES; } } - (void)dealloc { RELEASE (name); RELEASE (headView); RELEASE (footView); [super dealloc]; } - (id)initWithCategoryName:(NSString *)cname menuName:(NSString *)mname inWindow:(MDKWindow *)awin { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } headView = [[ControlsView alloc] initWithFrame: [headBox frame]]; [headView setColor: [NSColor disabledControlTextColor]]; [openCloseButt setImage: whiteArrowDown]; [headView addSubview: openCloseButt]; [nameLabel setTextColor: [NSColor whiteColor]]; [headView addSubview: nameLabel]; [headView addSubview: topFiveHeadButt]; footView = [[ControlsView alloc] initWithFrame: [footBox frame]]; [footView setColor: [NSColor controlBackgroundColor]]; [footView addSubview: topFiveFootButt]; RELEASE (win); [nameLabel setStringValue: NSLocalizedString(mname, @"")]; [topFiveHeadButt setTitle: @""]; [topFiveHeadButt setEnabled: NO]; ASSIGN (name, cname); mdkwin = awin; prev = nil; next = nil; showall = NO; closed = NO; showHeader = NO; showFooter = NO; results = nil; range = NSMakeRange(0, 0); globcount = 0; } return self; } - (NSString *)name { return name; } - (void)setResults:(NSArray *)res { results = res; range = NSMakeRange(0, 0); showHeader = NO; showFooter = NO; closed = ([openCloseButt state] == NSOffState); } - (BOOL)hasResults { return ([results count] > 0); } - (id)resultAtIndex:(int)index { if (index < (range.location + range.length)) { int pos = (index - range.location); if (showHeader && (pos == 0)) { return [NSDictionary dictionaryWithObjectsAndKeys: self, @"category", [NSNumber numberWithBool: YES], @"head", nil]; } if (pos <= range.length) { if ((pos == (range.length - 1)) && showFooter) { return [NSDictionary dictionaryWithObjectsAndKeys: self, @"category", [NSNumber numberWithBool: NO], @"head", nil]; } pos--; return [results objectAtIndex: pos]; } } else if (next) { return [next resultAtIndex: index]; } return nil; } - (void)calculateRanges { int count = [results count]; showHeader = (count > 0); showFooter = (count > MIN_LINES); range.length = 0; globcount = count; if (prev == nil) { range.location = 0; } else { NSRange pr = [prev range]; range.location = (pr.location + pr.length); globcount += [prev globalCount]; } if (closed == NO) { if (showall) { range.length = count; } else { if (count > MIN_LINES) { range.length = MIN_LINES; } else { range.length = count; } } } else { range.length = 0; showFooter = NO; } if (showHeader) { range.length++; } if (showFooter) { range.length++; } [self updateButtons]; if (next) { [next calculateRanges]; } } - (NSRange)range { return range; } - (int)globalCount { return globcount; } - (BOOL)showFooter { return showFooter; } - (void)setPrev:(MDKResultsCategory *)cat { prev = cat; } - (MDKResultsCategory *)prev { return prev; } - (void)setNext:(MDKResultsCategory *)cat { next = cat; } - (MDKResultsCategory *)next { return next; } - (MDKResultsCategory *)last { if (next) { return [next last]; } return self; } - (void)updateButtons { NSString *str; if (closed) { [openCloseButt setImage: whiteArrowRight]; [topFiveHeadButt setTitle: @""]; [topFiveHeadButt setEnabled: NO]; } else { [openCloseButt setImage: whiteArrowDown]; if (showall) { if (range.length > MIN_LINES) { str = NSLocalizedString(@"Show top 5", @""); [topFiveHeadButt setAttributedTitle: topFiveHeadButtTitle]; [topFiveHeadButt setEnabled: YES]; [topFiveFootButt setTitle: str]; [topFiveFootButt setTag: TOP_FIVE]; } } else { [topFiveHeadButt setTitle: @""]; [topFiveHeadButt setEnabled: NO]; if (range.length > MIN_LINES) { str = NSLocalizedString(@"more...", @""); str = [NSString stringWithFormat: @"%lu %@", (unsigned long)([results count] - MIN_LINES), str]; [topFiveFootButt setTitle: str]; [topFiveFootButt setTag: ALL_RESULTS]; } } } } - (IBAction)openCloseButtAction:(id)sender { if ([sender state] == NSOnState) { closed = NO; } else { closed = YES; showFooter = NO; } [mdkwin updateCategoryControls: YES removeSubviews: NO]; } - (IBAction)topFiveHeadButtAction:(id)sender { showall = NO; [mdkwin updateCategoryControls: YES removeSubviews: NO]; } - (IBAction)topFiveFootButtAction:(id)sender { showall = ([sender tag] == ALL_RESULTS); [mdkwin updateCategoryControls: YES removeSubviews: NO]; } - (NSView *)headControls { return headView; } - (NSView *)footControls { return footView; } @end @implementation ControlsView - (void)dealloc { RELEASE (backColor); [super dealloc]; } - (id)initWithFrame:(NSRect)rect { self = [super initWithFrame: rect]; if (self) { ASSIGN (backColor, [NSColor controlBackgroundColor]); } return self; } - (void)setColor:(NSColor *)color { ASSIGN (backColor, color); } - (void)drawRect:(NSRect)rect { [backColor set]; NSRectFill(rect); } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKTableView.h0000644000175000001440000000255314751213523020444 0ustar multixusers/* MDKTableView.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_TABLE_VIEW_H #define MDK_TABLE_VIEW_H #include #include @interface MDKTableView : NSTableView { NSMutableArray *controlViews; } - (void)addControlView:(NSView *)cview; - (void)removeControlView:(NSView *)cview; @end @interface NSObject (MDKTableViewDelegateMethods) - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows; @end #endif // MDK_TABLE_VIEW_H gworkspace-1.1.0/GWMetadata/MDKit/MDKTableView.m0000644000175000001440000000475214751213523020454 0ustar multixusers/* MDKTableView.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "MDKTableView.h" @implementation MDKTableView - (void)dealloc { RELEASE (controlViews); [super dealloc]; } - (id)initWithFrame:(NSRect)rect { self = [super initWithFrame: rect]; if (self) { controlViews = [NSMutableArray new]; } return self; } - (void)addControlView:(NSView *)cview { [controlViews addObject: cview]; [self addSubview: cview]; [cview setFrame: NSZeroRect]; } - (void)removeControlView:(NSView *)cview { [cview removeFromSuperview]; [controlViews removeObject: cview]; } - (NSImage *)dragImageForRows:(NSArray *)dragRows event:(NSEvent *)dragEvent dragImageOffset:(NSPointPointer)dragImageOffset { NSImage *image = [[self delegate] tableView: self dragImageForRows: dragRows]; if (image) { return image; } return [super dragImageForRows: dragRows event: dragEvent dragImageOffset: dragImageOffset]; } - (void)setFrame:(NSRect)rect { int i; for (i = 0; i < [controlViews count]; i++) { [[controlViews objectAtIndex: i] setFrame: NSZeroRect]; } [super setFrame: rect]; } - (void)keyDown:(NSEvent *)theEvent { NSString *characters = [theEvent characters]; unichar character = 0; if ([characters length] > 0) { character = [characters characterAtIndex: 0]; } if (character == NSCarriageReturnCharacter) { [self sendAction: [self doubleAction] to: [self target]]; return; } [super keyDown: theEvent]; } @end gworkspace-1.1.0/GWMetadata/MDKit/MDKWindow.h0000644000175000001440000001274414751213523020034 0ustar multixusers/* MDKWindow.h * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDK_WINDOW_H #define MDK_WINDOW_H #import #import @class MDKQuery; @class MDKTextContentEditor; @class MDKResultsCategory; @class MDKAttribute; @class MDKAttributeView; @class MDKAttributeChooser; @class NSBox; @class NSPopUpButton; @class NSWindow; @class ProgrView; @class NSTextField; @class NSButton; @class NSScrollView; @class NSTableView; @class MDKTableView; @class NSImage; @class FSNodeRep; @class FSNPathComponentsViewer; @interface MDKWindow: NSObject { NSMutableArray *attributes; NSMutableArray *attrViews; MDKAttributeChooser *chooser; void *includePathsTree; void *excludedPathsTree; NSMutableSet *excludedSuffixes; IBOutlet id win; IBOutlet NSBox *controlsBox; IBOutlet NSPopUpButton *placesPopUp; NSImage *onImage; IBOutlet ProgrView *progView; IBOutlet NSButton *caseSensButt; IBOutlet NSTextField *searchField; IBOutlet NSButton *startSearchButt; IBOutlet NSButton *stopSearchButt; IBOutlet NSButton *saveButt; IBOutlet NSButton *attributesButt; IBOutlet NSBox *attrBox; IBOutlet NSTextField *elementsLabel; IBOutlet NSScrollView *resultsScroll; MDKTableView *resultsView; NSTableColumn *nameColumn; NSTableColumn *attrColumn; IBOutlet NSBox *pathBox; FSNPathComponentsViewer *pathViewer; FSNodeRep *fsnodeRep; NSFileManager *fm; NSNotificationCenter *nc; NSNotificationCenter *dnc; BOOL closing; BOOL saved; NSString *savepath; id delegate; // // queries // BOOL loadingAttributes; NSMutableArray *queryEditors; NSMutableArray *searchPaths; MDKTextContentEditor *textContentEditor; MDKQuery *currentQuery; NSArray *categoryNames; NSMutableDictionary *resultCategories; MDKResultsCategory *catlist; NSInteger rowsCount; NSInteger globalCount; } - (id)initWithContentsOfFile:(NSString *)path windowRect:(NSRect)wrect delegate:(id)adelegate; - (NSDictionary *)savedInfoAtPath:(NSString *)path; - (void)loadAttributes:(NSDictionary *)info; - (void)prepareInterface; - (void)setSearcheablePaths; - (void)searcheablePathsDidChange:(NSNotification *)notif; - (NSArray *)attributes; - (NSArray *)usedAttributes; - (MDKAttribute *)firstUnusedAttribute; - (MDKAttribute *)attributeWithName:(NSString *)name; - (MDKAttribute *)attributeWithMenuName:(NSString *)mname; - (void)insertAttributeViewAfterView:(MDKAttributeView *)view; - (void)removeAttributeView:(MDKAttributeView *)view; - (void)attributeView:(MDKAttributeView *)view changeAttributeTo:(NSString *)menuname; - (void)activate; - (NSDictionary *)statusInfo; - (void)setSaved:(BOOL)value; - (BOOL)isSaved; - (void)setSavePath:(NSString *)path; - (NSString *)savePath; - (void)tile; - (NSWindow *)window; - (IBAction)placesPopUpdAction:(id)sender; - (IBAction)caseSensButtAction:(id)sender; - (IBAction)startSearchButtAction:(id)sender; - (IBAction)attributesButtAction:(id)sender; - (IBAction)saveButtAction:(id)sender; - (void)showAttributeChooser:(MDKAttributeView *)sender; - (void)setContextHelp; @end @interface MDKWindow (queries) - (void)prepareQueries:(NSDictionary *)info; - (void)prepareResults; - (void)editorStateDidChange:(id)sender; - (void)newQuery; - (void)prepareResultCategories; - (void)queryDidStartGathering:(MDKQuery *)query; - (void)appendRawResults:(NSArray *)lines; - (void)queryDidUpdateResults:(MDKQuery *)query forCategories:(NSArray *)catnames; - (void)queryDidEndGathering:(MDKQuery *)query; - (void)queryDidStartUpdating:(MDKQuery *)query; - (void)queryDidEndUpdating:(MDKQuery *)query; - (IBAction)stopSearchButtAction:(id)sender; - (void)stopCurrentQuery; - (void)updateElementsLabel:(int)n; - (void)queryCategoriesDidChange:(NSNotification *)notif; - (MDKQuery *)currentQuery; @end @interface MDKWindow (TableView) - (void)updateCategoryControls:(BOOL)newranges removeSubviews:(BOOL)remove; - (void)doubleClickOnResultsView:(id)sender; - (NSArray *)selectedObjects; - (NSArray *)selectedPaths; - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows; @end @interface ProgrView : NSView { NSMutableArray *images; int index; NSTimer *progTimer; BOOL animating; } - (void)start; - (void)stop; - (void)animate:(id)sender; @end @interface NSObject (MDKWindowDelegate) - (void)setActiveWindow:(MDKWindow *)window; - (void)window:(MDKWindow *)window didChangeSelection:(NSArray *)selection; - (void)mdkwindowWillClose:(MDKWindow *)window; - (void)saveQuery:(id)sender; @end #endif // MDK_WINDOW_H gworkspace-1.1.0/GWMetadata/MDKit/MDKWindow.m0000644000175000001440000013522114751213523020035 0ustar multixusers/* MDKWindow.m * * Copyright (C) 2006-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "MDKWindow.h" #import "MDKTableView.h" #import "MDKAttribute.h" #import "MDKAttributeView.h" #import "MDKAttributeEditor.h" #import "MDKFSFilter.h" #import "MDKAttributeChooser.h" #import "MDKQuery.h" #import "MDKResultsCategory.h" #import "DBKPathsTree.h" #import "FSNodeRep.h" #import "FSNPathComponentsViewer.h" #import "MDKResultCell.h" #define CHECKDELEGATE(s) \ (delegate && [delegate respondsToSelector: @selector(s)]) #define WORD_MAX 40 #define WORD_MIN 3 #define CELLS_HEIGHT (28.0) #define ICNSIZE 24 /* defines the maximum number of files to open before issuing a dialog */ #define MAX_FILES_TO_OPEN_DIALOG 8 BOOL isDotFile(NSString *path); NSString *pathSeparator(void); typedef BOOL (*boolIMP)(id, SEL, Class); static SEL memberSel = NULL; static boolIMP isMember = NULL; static Class FSNodeClass = Nil; static NSString *nibName = @"MDKWindow"; @implementation MDKWindow + (void)initialize { static BOOL initialized = NO; if (initialized == NO) { FSNodeClass = [FSNode class]; memberSel = @selector(isMemberOfClass:); isMember = (boolIMP)[FSNodeClass instanceMethodForSelector: memberSel]; initialized = YES; } } - (void)dealloc { [dnc removeObserver: self]; DESTROY (win); DESTROY (attributes); DESTROY (attrViews); DESTROY (chooser); DESTROY (onImage); if (includePathsTree != NULL) { freeTree(includePathsTree); freeTree(excludedPathsTree); } DESTROY (excludedSuffixes); DESTROY (queryEditors); DESTROY (searchPaths); DESTROY (textContentEditor); DESTROY (currentQuery); DESTROY (categoryNames); DESTROY (resultCategories); DESTROY (savepath); [super dealloc]; } - (id)initWithContentsOfFile:(NSString *)path windowRect:(NSRect)wrect delegate:(id)adelegate { self = [super init]; if (self) { NSDictionary *info = nil; if (path) { info = [self savedInfoAtPath: path]; if (info == nil) { DESTROY (self); return self; } } if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } delegate = adelegate; if (info) { NSString *str = [info objectForKey: @"window_frame"]; if (str) { [win setFrame: NSRectFromString([info objectForKey: @"window_frame"]) display: NO]; } else { [win setFrameUsingName: @"mdkwindow"]; } } else { if (NSEqualRects(wrect, NSZeroRect) == NO) { [win setFrame: wrect display: NO]; } else { [win setFrameUsingName: @"mdkwindow"]; } } if (path) { [self setSavePath: path]; } else { [win setTitle: NSLocalizedString(@"Untitled", @"")]; } fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; dnc = [NSDistributedNotificationCenter defaultCenter]; fsnodeRep = [FSNodeRep sharedInstance]; loadingAttributes = YES; [self prepareInterface]; [self prepareQueries: info]; [self prepareResults]; [self loadAttributes: info]; loadingAttributes = NO; includePathsTree = newTreeWithIdentifier(@"included"); excludedPathsTree = newTreeWithIdentifier(@"excluded"); excludedSuffixes = [[NSMutableSet alloc] initWithCapacity: 1]; [self setSearcheablePaths]; [dnc addObserver: self selector: @selector(searcheablePathsDidChange:) name: @"GSMetadataIndexedDirectoriesChanged" object: nil]; chooser = nil; closing = NO; [self setSaved: YES]; if (info) { NSNumber *num = [info objectForKey: @"attributes_visible"]; if (num) { [attributesButt setState: [num intValue]]; [self attributesButtAction: attributesButt]; } } [self startSearchButtAction: startSearchButt]; } return self; } - (NSDictionary *)savedInfoAtPath:(NSString *)path { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path]; id entry; #define CHECK_ENTRY(e, c) do { \ if (dict) { \ entry = [dict objectForKey: e]; \ if ((entry == nil) || ([entry isKindOfClass: c] == NO)) dict = nil; \ } \ } while (0) if (dict) { CHECK_ENTRY (@"editors", [NSArray class]); CHECK_ENTRY (@"text_content_words", [NSArray class]); CHECK_ENTRY (@"window_frame", [NSString class]); CHECK_ENTRY (@"search_places", [NSArray class]); } return dict; } - (void)loadAttributes:(NSDictionary *)info { unsigned mask = MDKAttributeSearchable | MDKAttributeUserSet; NSDictionary *attrdict = [MDKQuery attributesWithMask: mask]; NSArray *attrnames = [attrdict allKeys]; MDKAttribute *attribute; MDKAttributeView *attrview; BOOL addenabled; int i; attributes = [NSMutableArray new]; attrViews = [NSMutableArray new]; attribute = nil; attrnames = [attrnames sortedArrayUsingSelector: @selector(compare:)]; for (i = 0; i < [attrnames count]; i++) { NSDictionary *attrinfo = [attrdict objectForKey: [attrnames objectAtIndex: i]]; attribute = [[MDKAttribute alloc] initWithAttributeInfo: attrinfo forWindow: self]; [attributes addObject: attribute]; RELEASE (attribute); } if (info) { NSArray *editorsInfo = [info objectForKey: @"editors"]; NSArray *words = [info objectForKey: @"text_content_words"]; if (words && [words count]) { [textContentEditor setTextContentWords: words]; } if (editorsInfo && [editorsInfo count]) { for (i = 0; i < [editorsInfo count]; i++) { NSDictionary *edinfo = [editorsInfo objectAtIndex: i]; NSString *attrname = [edinfo objectForKey: @"attrname"]; MDKAttributeEditor *editor; attribute = [self attributeWithName: attrname]; [attribute setInUse: YES]; attrview = [[MDKAttributeView alloc] initInWindow: self]; [attrview setAttribute: attribute]; [[attrBox contentView] addSubview: [attrview mainBox]]; [attrViews addObject: attrview]; RELEASE (attrview); editor = [attribute editor]; [editor restoreSavedState: edinfo]; [queryEditors addObject: editor]; } } else { attribute = nil; } } else { attribute = nil; } if (attribute == nil) { attribute = [self attributeWithName: @"GSMDItemFSName"]; [attribute setInUse: YES]; attrview = [[MDKAttributeView alloc] initInWindow: self]; [attrview setAttribute: attribute]; [[attrBox contentView] addSubview: [attrview mainBox]]; [attrViews addObject: attrview]; RELEASE (attrview); } if ([[self usedAttributes] count] == [attributes count]) { for (i = 0; i < [attrViews count]; i++) { [[attrViews objectAtIndex: i] setAddEnabled: NO]; } } addenabled = ([[self usedAttributes] count] < [attributes count]); for (i = 0; i < [attrViews count]; i++) { attrview = [attrViews objectAtIndex: i]; [attrview setAddEnabled: addenabled]; [attrview updateMenuForAttributes: attributes]; } } - (void)prepareInterface { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *impath; NSImage *image; NSString *ttstr; NSRect r; onImage = [NSImage imageNamed: @"common_2DCheckMark"]; RETAIN (onImage); ttstr = NSLocalizedString(@"Restrict the search to chosen places.", @""); [placesPopUp setTitle: NSLocalizedString(@"Search in...", @"")]; [placesPopUp setToolTip: ttstr]; impath = [bundle pathForResource: @"switchOff" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [caseSensButt setImage: image]; RELEASE (image); impath = [bundle pathForResource: @"switchOn" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: impath]; [caseSensButt setAlternateImage: image]; RELEASE (image); [caseSensButt setState: NSOnState]; [caseSensButt setToolTip: NSLocalizedString(@"Case sensitive switch", @"")]; ttstr = NSLocalizedString(@"Saves the query as a Live Search Folder.", @""); [saveButt setTitle: NSLocalizedString(@"Save", @"")]; [saveButt setToolTip: ttstr]; ttstr = NSLocalizedString(@"Type terms to search into the text contents.", @""); [searchField setToolTip: ttstr]; ttstr = NSLocalizedString(@"Starts a search if no term has been\nentered into the search field.", @""); [startSearchButt setToolTip: ttstr]; ttstr = NSLocalizedString(@"Stops a running query.", @""); [stopSearchButt setToolTip: ttstr]; ttstr = NSLocalizedString(@"Show a list of attributes to search.", @""); [attributesButt setToolTip: ttstr]; [elementsLabel setStringValue: NSLocalizedString(@"0 elements", @"")]; [resultsScroll setBorderType: NSBezelBorder]; [resultsScroll setHasHorizontalScroller: NO]; [resultsScroll setHasVerticalScroller: YES]; r = [[resultsScroll contentView] bounds]; resultsView = [[MDKTableView alloc] initWithFrame: r]; [resultsView setDrawsGrid: NO]; [resultsView setHeaderView: nil]; [resultsView setCornerView: nil]; [resultsView setAllowsColumnSelection: NO]; [resultsView setAllowsColumnReordering: NO]; [resultsView setAllowsColumnResizing: NO]; [resultsView setAllowsEmptySelection: YES]; [resultsView setAllowsMultipleSelection: YES]; [resultsView setRowHeight: CELLS_HEIGHT]; [resultsView setIntercellSpacing: NSZeroSize]; [resultsView setAutoresizesAllColumnsToFit: YES]; nameColumn = [[NSTableColumn alloc] initWithIdentifier: @"name"]; [nameColumn setDataCell: AUTORELEASE ([[MDKResultCell alloc] init])]; [nameColumn setEditable: NO]; [nameColumn setResizable: YES]; [resultsView addTableColumn: nameColumn]; RELEASE (nameColumn); attrColumn = [[NSTableColumn alloc] initWithIdentifier: @"attribute"]; [attrColumn setDataCell: AUTORELEASE ([[MDKResultCell alloc] init])]; [attrColumn setEditable: NO]; [attrColumn setResizable: NO]; [attrColumn setWidth: 120]; [resultsView addTableColumn: attrColumn]; RELEASE (attrColumn); [resultsScroll setDocumentView: resultsView]; RELEASE (resultsView); [resultsView setDataSource: self]; [resultsView setDelegate: self]; [resultsView setTarget: self]; [resultsView setDoubleAction: @selector(doubleClickOnResultsView:)]; r = [[pathBox contentView] bounds]; pathViewer = [[FSNPathComponentsViewer alloc] initWithFrame: r]; [pathBox setContentView: pathViewer]; RELEASE (pathViewer); [self setContextHelp]; } - (void)setSearcheablePaths { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; NSUInteger i; [defaults synchronize]; entry = [defaults arrayForKey: @"GSMetadataIndexablePaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], includePathsTree); } } entry = [defaults arrayForKey: @"GSMetadataExcludedPaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], excludedPathsTree); } } entry = [defaults arrayForKey: @"GSMetadataExcludedSuffixes"]; if (entry == nil) { entry = [NSArray arrayWithObjects: @"a", @"d", @"dylib", @"er1", @"err", @"extinfo", @"frag", @"la", @"log", @"o", @"out", @"part", @"sed", @"so", @"status", @"temp", @"tmp", nil]; } [excludedSuffixes addObjectsFromArray: entry]; } - (void)searcheablePathsDidChange:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSArray *included = [info objectForKey: @"GSMetadataIndexablePaths"]; NSArray *excluded = [info objectForKey: @"GSMetadataExcludedPaths"]; NSArray *suffixes = [info objectForKey: @"GSMetadataExcludedSuffixes"]; NSArray *items = [placesPopUp itemArray]; NSUInteger count = [items count]; NSUInteger i; emptyTreeWithBase(includePathsTree); for (i = 0; i < [included count]; i++) { insertComponentsOfPath([included objectAtIndex: i], includePathsTree); } emptyTreeWithBase(excludedPathsTree); for (i = 0; i < [excluded count]; i++) { insertComponentsOfPath([excluded objectAtIndex: i], excludedPathsTree); } [excludedSuffixes removeAllObjects]; [excludedSuffixes addObjectsFromArray: suffixes]; for (i = 3; i < count -1; i++) { NSString *path = [[items objectAtIndex: i] representedObject]; NSString *ext = [[path pathExtension] lowercaseString]; if ([excludedSuffixes containsObject: ext] || isDotFile(path) || (inTreeFirstPartOfPath(path, includePathsTree) == NO) || inTreeFirstPartOfPath(path, excludedPathsTree)) { [placesPopUp removeItemAtIndex: i]; items = [placesPopUp itemArray]; count--; i--; } } [[placesPopUp menu] update]; } - (NSArray *)attributes { return attributes; } - (NSArray *)usedAttributes { NSMutableArray *used = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attribute = [attributes objectAtIndex: i]; if ([attribute inUse]) { [used addObject: attribute]; } } return used; } - (MDKAttribute *)firstUnusedAttribute { NSUInteger i; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attribute = [attributes objectAtIndex: i]; if ([attribute inUse] == NO) { return attribute; } } return nil; } - (MDKAttribute *)attributeWithName:(NSString *)name { int i; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attribute = [attributes objectAtIndex: i]; if ([[attribute name] isEqual: name]) { return attribute; } } return nil; } - (MDKAttribute *)attributeWithMenuName:(NSString *)mname { int i; for (i = 0; i < [attributes count]; i++) { MDKAttribute *attribute = [attributes objectAtIndex: i]; if ([[attribute menuName] isEqual: mname]) { return attribute; } } return nil; } - (void)insertAttributeViewAfterView:(MDKAttributeView *)view { NSArray *usedAttributes = [self usedAttributes]; if ([usedAttributes count] < [attributes count]) { NSUInteger index = [attrViews indexOfObjectIdenticalTo: view]; MDKAttribute *attr = [self firstUnusedAttribute]; MDKAttributeView *attrview = [[MDKAttributeView alloc] initInWindow: self]; NSUInteger count; NSUInteger attrcount; NSUInteger i; [attr setInUse: YES]; [attrview setAttribute: attr]; [[attrBox contentView] addSubview: [attrview mainBox]]; [attrViews insertObject: attrview atIndex: index + 1]; RELEASE (attrview); count = [attrViews count]; attrcount = [attributes count]; for (i = 0; i < count; i++) { attrview = [attrViews objectAtIndex: i]; [attrview updateMenuForAttributes: attributes]; if (count == attrcount) { [attrview setAddEnabled: NO]; } if (count > 1) { [attrview setRemoveEnabled: YES]; } } [self tile]; } } - (void)removeAttributeView:(MDKAttributeView *)view { if ([attrViews count] > 1) { MDKAttribute *attribute = [view attribute]; int count; int i; [attribute setInUse: NO]; [[view mainBox] removeFromSuperview]; [attrViews removeObject: view]; count = [attrViews count]; for (i = 0; i < count; i++) { MDKAttributeView *attrview = [attrViews objectAtIndex: i]; [attrview updateMenuForAttributes: attributes]; [attrview setAddEnabled: YES]; if (count == 1) { [attrview setRemoveEnabled: NO]; } } [self tile]; [self editorStateDidChange: [attribute editor]]; } } - (void)attributeView:(MDKAttributeView *)view changeAttributeTo:(NSString *)menuname { MDKAttribute *attribute = [self attributeWithMenuName: menuname]; MDKAttribute *oldattribute = [view attribute]; if (attribute && (oldattribute != attribute)) { unsigned i; [oldattribute setInUse: NO]; [self editorStateDidChange: [oldattribute editor]]; [attribute setInUse: YES]; [view setAttribute: attribute]; /* notification sent by MDKAttributeView */ for (i = 0; i < [attrViews count]; i++) { [[attrViews objectAtIndex: i] updateMenuForAttributes: attributes]; } } } - (void)activate { [win makeKeyAndOrderFront: nil]; [self tile]; } - (NSDictionary *)statusInfo { NSMutableDictionary *info = [NSMutableDictionary dictionary]; NSMutableArray *editorsInfo = [NSMutableArray array]; NSArray *items = [placesPopUp itemArray]; NSMutableArray *paths = [NSMutableArray array]; NSInteger index; NSUInteger i; for (i = 0; i < [attrViews count]; i++) { MDKAttributeView *attrview = [attrViews objectAtIndex: i]; MDKAttribute *attr = [attrview attribute]; MDKAttributeEditor *editor = [attr editor]; if ([editor hasValidValues]) { [editorsInfo addObject: [editor editorInfo]]; } } [info setObject: editorsInfo forKey: @"editors"]; [info setObject: [textContentEditor textContentWords] forKey: @"text_content_words"]; [info setObject: NSStringFromRect([win frame]) forKey: @"window_frame"]; [info setObject: [NSNumber numberWithInt: [attributesButt state]] forKey: @"attributes_visible"]; /* We must start at 2 because [items objectAtIndex: 0] is the title */ /* of the popup, [items objectAtIndex: 1] is "Computer" */ /* and [items objectAtIndex: 2] is "Home". */ /* The upper limit is [items count] -1 because the last item */ /* is the "Add..." item */ for (i = 3; i < [items count] -1; i++) { [paths addObject: [[items objectAtIndex: i] representedObject]]; } [info setObject: paths forKey: @"search_places"]; index = [placesPopUp indexOfSelectedItem]; if ((index > 0) && (index < [items count] -1)) { [info setObject: [NSNumber numberWithInt: index] forKey: @"selected_search_place"]; } return info; } - (void)setSaved:(BOOL)value { saved = value; [saveButt setEnabled: (saved == NO)]; } - (BOOL)isSaved { return saved; } - (void)setSavePath:(NSString *)path { ASSIGN (savepath, path); [win setTitle: [savepath lastPathComponent]]; } - (NSString *)savePath { return savepath; } #define ATBOXH (30.0) #define ATVIEWH (26.0) #define RESLIMH (70.0) - (void)tile { NSView *view = [win contentView]; NSRect abr = [attributesButt frame]; CGFloat ylim = abr.origin.y + abr.size.height; NSRect atr = [attrBox frame]; NSRect elr = [elementsLabel frame]; NSRect rsr = [resultsScroll frame]; if ([attributesButt state] == NSOffState) { atr.origin.y = ylim; atr.size.height = 0; [attrBox setFrame: atr]; } else { NSUInteger count = [attrViews count]; CGFloat hspace = ATBOXH + ((count - 1) * ATVIEWH); CGFloat posy; NSUInteger i; atr.origin.y = ylim - hspace; atr.size.height = hspace; [attrBox setFrame: atr]; posy = [[attrBox contentView] bounds].size.height; for (i = 0; i < count; i++) { MDKAttributeView *attrview = [attrViews objectAtIndex: i]; NSBox *atbox = [attrview mainBox]; NSRect attbr = [atbox frame]; posy -= ATVIEWH; attbr.origin.y = posy; [atbox setFrame: attbr]; } } atr = [attrBox frame]; ylim = (atr.size.height == 0) ? (atr.origin.y - abr.size.height) : atr.origin.y; elr.origin.y = ylim - elr.size.height; [elementsLabel setFrame: elr]; rsr.size.height = elr.origin.y - rsr.origin.y; if (rsr.size.height <= RESLIMH) { NSRect wrect = [win frame]; CGFloat inc = RESLIMH - rsr.size.height + ATVIEWH; wrect.size.height += inc; wrect.origin.y -= inc; [win setFrame: wrect display: NO]; /* setting the window frame will cause */ /* a NSWindowDidResizeNotification */ /* so we must return to avoid recursion */ return; } [resultsScroll setFrame: rsr]; [view setNeedsDisplay: YES]; } - (NSWindow *)window { return win; } - (IBAction)placesPopUpdAction:(id)sender { NSArray *items = [sender itemArray]; NSUInteger count = [items count]; NSInteger index = [sender indexOfSelectedItem]; NSUInteger i; [searchPaths removeAllObjects]; if ((index != 0) && (index != count-1)) { id item = [sender selectedItem]; NSString *path = [item representedObject]; for (i = 1; i < count -1; i++) { item = [items objectAtIndex: i]; if (i == index) { [item setImage: onImage]; } else { [item setImage: nil]; } } if ([path isEqual: pathSeparator()] == NO) { [searchPaths addObject: path]; } if (loadingAttributes == NO) { [self setSaved: NO]; [self startSearchButtAction: startSearchButt]; } } else if (index == count-1) { NSOpenPanel *openPanel = [NSOpenPanel openPanel]; int result; [openPanel setTitle: NSLocalizedString(@"Choose search place", @"")]; [openPanel setAllowsMultipleSelection: NO]; [openPanel setCanChooseFiles: NO]; [openPanel setCanChooseDirectories: YES]; result = [openPanel runModalForDirectory: nil file: nil types: nil]; if (result == NSOKButton) { NSString *path = [openPanel filename]; NSString *name = [path lastPathComponent]; NSString *ext = [[path pathExtension] lowercaseString]; if (([excludedSuffixes containsObject: ext] == NO) && (isDotFile(path) == NO) && inTreeFirstPartOfPath(path, includePathsTree) && (inTreeFirstPartOfPath(path, excludedPathsTree) == NO)) { BOOL duplicate = NO; for (i = 1; i < [items count] -1; i++) { if ([[[items objectAtIndex: i] representedObject] isEqual: path]) { duplicate = YES; break; } } if (duplicate == NO) { [placesPopUp insertItemWithTitle: name atIndex: count-1]; [[placesPopUp itemAtIndex: count-1] setRepresentedObject: path]; [[placesPopUp menu] update]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"This path is already in the menu!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } else { NSRunAlertPanel(nil, NSLocalizedString(@"This path is not searchable!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } } - (IBAction)startSearchButtAction:(id)sender { [self stopSearchButtAction: nil]; if ([[textContentEditor textContentWords] count] || [queryEditors count]) { [self newQuery]; } } - (IBAction)caseSensButtAction:(id)sender { [self editorStateDidChange: caseSensButt]; } - (IBAction)attributesButtAction:(id)sender { if ([sender state] == NSOnState) { [attributesButt setImage: [NSImage imageNamed: @"common_ArrowDown"]]; } else { [attributesButt setImage: [NSImage imageNamed: @"common_ArrowRight"]]; } [self tile]; } - (IBAction)saveButtAction:(id)sender { if (saved == NO) { if (CHECKDELEGATE (saveQuery:)) { [delegate saveQuery: nil]; } } } - (void)showAttributeChooser:(MDKAttributeView *)sender { MDKAttribute *attr; if (chooser == nil) { chooser = [[MDKAttributeChooser alloc] initForWindow: self]; } attr = [chooser chooseNewAttributeForView: sender]; if (attr) { MDKAttribute *oldattribute = [sender attribute]; unsigned i; [oldattribute setInUse: NO]; [self editorStateDidChange: [oldattribute editor]]; [attr setInUse: YES]; [attributes addObject: attr]; for (i = 0; i < [attrViews count]; i++) { [[attrViews objectAtIndex: i] attributesDidChange: attributes]; } [sender setAttribute: attr]; /* notification sent by MDKAttributeView */ for (i = 0; i < [attrViews count]; i++) { MDKAttributeView *attrview = [attrViews objectAtIndex: i]; [attrview updateMenuForAttributes: attributes]; [attrview setAddEnabled: YES]; } } } - (void)setContextHelp { NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; NSUInteger i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: [win contentView]]; RELEASE (help); } } } } // // NSWindow delegate methods // - (void)windowDidBecomeKey:(NSNotification *)aNotification { if (CHECKDELEGATE (setActiveWindow:)) { [delegate setActiveWindow: self]; } } - (void)windowDidResize:(NSNotification *)notif { if ([notif object] == win) { [self tile]; } } - (BOOL)windowShouldClose:(id)sender { BOOL canclose = YES; if ([currentQuery isGathering] || [currentQuery waitingStart]) { closing = YES; [self stopCurrentQuery]; canclose = NO; } if ((savepath != nil) && (saved == NO)) { canclose = !(NSRunAlertPanel(nil, NSLocalizedString(@"The query is unsaved", @""), NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Close Anyway", @""), nil)); } return canclose; } - (void)windowWillClose:(NSNotification *)aNotification { if (currentQuery) { [self stopCurrentQuery]; [win saveFrameUsingName: @"mdkwindow"]; if (CHECKDELEGATE (mdkwindowWillClose:)) { [delegate mdkwindowWillClose: self]; } } } @end @implementation MDKWindow (queries) - (void)prepareQueries:(NSDictionary *)info { ASSIGN (currentQuery, [MDKQuery query]); queryEditors = [NSMutableArray new]; textContentEditor = [[MDKTextContentEditor alloc] initWithSearchField: searchField inWindow: self]; rowsCount = 0; globalCount = 0; [dnc addObserver: self selector: @selector(queryCategoriesDidChange:) name: @"MDKQueryCategoriesDidChange" object: nil]; searchPaths = [NSMutableArray new]; while ([[placesPopUp itemArray] count] > 1) { [placesPopUp removeItemAtIndex: 1]; } [placesPopUp addItemWithTitle: NSLocalizedString(@"Computer", @"")]; [[placesPopUp lastItem] setRepresentedObject: pathSeparator()]; [placesPopUp addItemWithTitle: NSLocalizedString(@"Home", @"")]; [[placesPopUp lastItem] setRepresentedObject: NSHomeDirectory()]; if (info) { NSArray *places = [info objectForKey: @"search_places"]; int index = [[info objectForKey: @"selected_search_place"] intValue]; BOOL canselect = YES; NSUInteger i; for (i = 0; i < [places count]; i++) { NSString *place = [places objectAtIndex: i]; if ([fm fileExistsAtPath: place] && inTreeFirstPartOfPath(place, includePathsTree) && (inTreeFirstPartOfPath(place, excludedPathsTree) == NO)) { NSString *name = [place lastPathComponent]; [placesPopUp addItemWithTitle: name]; [[placesPopUp lastItem] setRepresentedObject: place]; } else { canselect = NO; } } if (canselect) { [placesPopUp selectItemAtIndex: index]; } } else { [placesPopUp selectItemAtIndex: 1]; } [placesPopUp addItemWithTitle: NSLocalizedString(@"Add...", @"")]; [self placesPopUpdAction: placesPopUp]; } - (void)prepareResults { NSDictionary *categoryInfo = [MDKQuery categoryInfo]; NSUInteger i; ASSIGN (categoryNames, [MDKQuery categoryNames]); DESTROY (resultCategories); resultCategories = [NSMutableDictionary new]; for (i = 0; i < [categoryNames count]; i++) { NSString *catname = [categoryNames objectAtIndex: i]; NSDictionary *catinfo = [categoryInfo objectForKey: catname]; NSString *catmenu = [catinfo objectForKey: @"menu_name"]; MDKResultsCategory *rescat; rescat = [[MDKResultsCategory alloc] initWithCategoryName: catname menuName: catmenu inWindow: self]; [resultCategories setObject: rescat forKey: catname]; RELEASE (rescat); if (i > 0) { NSString *prevname = [categoryNames objectAtIndex: i-1]; MDKResultsCategory *prevcat = [resultCategories objectForKey: prevname]; [rescat setPrev: prevcat]; [prevcat setNext: rescat]; } } catlist = [resultCategories objectForKey: [categoryNames objectAtIndex: 0]]; } - (void)editorStateDidChange:(id)sender { if (loadingAttributes == NO) { BOOL newquery = NO; if (sender == caseSensButt) { if ([[textContentEditor textContentWords] count]) { newquery = YES; } } else if (sender == textContentEditor) { newquery = YES; } else { MDKAttribute *attribute = (MDKAttribute *)[sender attribute]; if ([attribute inUse]) { if ([sender hasValidValues]) { if ([queryEditors containsObject: sender] == NO) { [queryEditors addObject: sender]; } newquery = YES; } else { if ([queryEditors containsObject: sender]) { [queryEditors removeObject: sender]; newquery = YES; } } } else { if ([queryEditors containsObject: sender]) { [queryEditors removeObject: sender]; newquery = YES; } } } if (newquery) { [self setSaved: NO]; [self newQuery]; } } } - (void)newQuery { CREATE_AUTORELEASE_POOL(arp); NSArray *words; MDKCompoundOperator operator; BOOL casesens; NSMutableArray *fsfilters; BOOL onlyfilters; NSUInteger i, j; [currentQuery setUpdatesEnabled: NO]; [currentQuery stopQuery]; [progView stop]; [self updateElementsLabel: 0]; [pathViewer showComponentsOfSelection: nil]; rowsCount = 0; globalCount = 0; [self updateCategoryControls: NO removeSubviews: YES]; [resultsView noteNumberOfRowsChanged]; [resultsView setNeedsDisplayInRect: [resultsView visibleRect]]; ASSIGN (currentQuery, [MDKQuery query]); [currentQuery setUpdatesEnabled: YES]; [currentQuery setDelegate: self]; casesens = ([caseSensButt state] == NSOnState); operator = MDKCompoundOperatorNone; onlyfilters = YES; words = [textContentEditor textContentWords]; for (i = 0; i < [words count]; i++) { [currentQuery appendSubqueryWithCompoundOperator: operator attribute: @"GSMDItemTextContent" searchValue: [words objectAtIndex: i] operatorType: MDKEqualToOperatorType caseSensitive: casesens]; operator = GMDAndCompoundOperator; onlyfilters = NO; } fsfilters = [NSMutableArray array]; for (i = 0; i < [queryEditors count]; i++) { MDKAttributeEditor *editor = [queryEditors objectAtIndex: i]; MDKAttribute *attribute = [editor attribute]; NSDictionary *edinfo = [editor editorInfo]; NSString *name = [edinfo objectForKey: @"attrname"]; MDKOperatorType type = [[edinfo objectForKey: @"optype"] intValue]; NSArray *values = [edinfo objectForKey: @"values"]; BOOL fsfilter = [attribute isFsattribute]; if (fsfilter == NO) { BOOL csens = [[edinfo objectForKey: @"casesens"] boolValue]; if ([attribute type] != ARRAY) { [currentQuery appendSubqueryWithCompoundOperator: operator attribute: name searchValue: [values objectAtIndex: 0] operatorType: type caseSensitive: csens]; operator = GMDAndCompoundOperator; } else { for (j = 0; j < [values count]; j++) { [currentQuery appendSubqueryWithCompoundOperator: operator attribute: name searchValue: [values objectAtIndex: j] operatorType: type caseSensitive: csens]; operator = GMDAndCompoundOperator; } } onlyfilters = NO; } else { MDKFSFilter *filter = [MDKFSFilter filterForAttribute: attribute operatorType: type searchValue: [values objectAtIndex: 0]]; if (filter) { [fsfilters addObject: filter]; } } } [currentQuery closeSubqueries]; if ([searchPaths count]) { [currentQuery setSearchPaths: searchPaths]; } if ([currentQuery buildQuery] == NO) { NSLog(@"unable to build \"%@\"", [currentQuery description]); [NSApp terminate: self]; } [currentQuery setFSFilters: fsfilters]; [self prepareResultCategories]; if (onlyfilters == NO) { closing = NO; [currentQuery startGathering]; } else { // } RELEASE (arp); } - (void)prepareResultCategories { NSUInteger i; for (i = 0; i < [categoryNames count]; i++) { NSString *catname = [categoryNames objectAtIndex: i]; MDKResultsCategory *rescat = [resultCategories objectForKey: catname]; NSArray *nodes = [currentQuery resultNodesForCategory: catname]; [rescat setResults: nodes]; } } - (void)queryDidStartGathering:(MDKQuery *)query { [progView start]; } - (void)appendRawResults:(NSArray *)lines { } - (void)queryDidUpdateResults:(MDKQuery *)query forCategories:(NSArray *)catnames { [self updateCategoryControls: YES removeSubviews: NO]; [self updateElementsLabel: globalCount]; } - (void)queryDidEndGathering:(MDKQuery *)query { if (query == currentQuery) { [progView stop]; [self updateElementsLabel: globalCount]; if (closing) { [win close: nil]; } } } - (void)queryDidStartUpdating:(MDKQuery *)query { if (query == currentQuery) { [progView start]; } } - (void)queryDidEndUpdating:(MDKQuery *)query { if (query == currentQuery) { [progView stop]; [self updateElementsLabel: globalCount]; } } - (IBAction)stopSearchButtAction:(id)sender { [self stopCurrentQuery]; rowsCount = 0; globalCount = 0; [self updateCategoryControls: NO removeSubviews: YES]; [resultsView noteNumberOfRowsChanged]; [resultsView setNeedsDisplayInRect: [resultsView visibleRect]]; [pathViewer showComponentsOfSelection: nil]; [self updateElementsLabel: 0]; } - (void)stopCurrentQuery { if (currentQuery) { [currentQuery setUpdatesEnabled: NO]; [currentQuery stopQuery]; [progView stop]; } } - (void)updateElementsLabel:(int)n { NSString *elemstr = NSLocalizedString(@"elements", @""); NSString *str = [NSString stringWithFormat: @"%i %@", n, elemstr]; [elementsLabel setStringValue: str]; } - (void)queryCategoriesDidChange:(NSNotification *)notif { [self prepareResults]; } - (MDKQuery *)currentQuery { return currentQuery; } @end @implementation MDKWindow (TableView) // // NSTableDataSource protocol // - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return rowsCount; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { id nd = [catlist resultAtIndex: rowIndex]; if ((*isMember)(nd, memberSel, FSNodeClass)) { if (aTableColumn == nameColumn) { return [nd name]; } else if (aTableColumn == attrColumn) { return [nd modDateDescription]; } } return [NSString string]; } - (BOOL)tableView:(NSTableView *)aTableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard { NSMutableArray *paths = [NSMutableArray array]; NSMutableArray *parentPaths = [NSMutableArray array]; int i; for (i = 0; i < [rows count]; i++) { NSInteger index = [[rows objectAtIndex: i] intValue]; id nd = [catlist resultAtIndex: index]; if ((*isMember)(nd, memberSel, FSNodeClass) && [nd isValid]) { NSString *parentPath = [nd parentPath]; if (([parentPaths containsObject: parentPath] == NO) && (i != 0)) { NSString *msg = NSLocalizedString(@"You can't move objects with multiple parent paths!", @""); NSRunAlertPanel(nil, msg, NSLocalizedString(@"Continue", @""), nil, nil); return NO; } [paths addObject: [nd path]]; [parentPaths addObject: parentPath]; } } if ([paths count]) { [pboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; [pboard setPropertyList: paths forType: NSFilenamesPboardType]; return YES; } return NO; } // // NSTableView delegate methods // - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { NSArray *selected = [self selectedObjects]; [pathViewer showComponentsOfSelection: selected]; if (CHECKDELEGATE (window:didChangeSelection:)) { [delegate window: self didChangeSelection: selected]; } } - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { id nd = [catlist resultAtIndex: rowIndex]; if ((*isMember)(nd, memberSel, FSNodeClass)) { [aCell setHeadCell: NO]; if (aTableColumn == nameColumn) { [aCell setIcon: [fsnodeRep iconOfSize: ICNSIZE forNode: nd]]; } else if (aTableColumn == attrColumn) { } } else { MDKResultsCategory *rescat = [nd objectForKey: @"category"]; BOOL ishead = [[nd objectForKey: @"head"] boolValue]; NSView *controls = (ishead ? [rescat headControls] : [rescat footControls]); [aCell setHeadCell: YES]; [controls setFrame: [resultsView rectOfRow: rowIndex]]; } } // // other methods // - (void)updateCategoryControls:(BOOL)newranges removeSubviews:(BOOL)remove { NSArray *rviews = [resultsView subviews]; NSUInteger i; if (newranges) { [catlist calculateRanges]; } for (i = 0; i < [categoryNames count]; i++) { NSString *catname = [categoryNames objectAtIndex: i]; MDKResultsCategory *rescat = [resultCategories objectForKey: catname]; NSView *headControls = [rescat headControls]; NSView *footControls = [rescat footControls]; if (remove == NO) { if ([rescat hasResults]) { if ([rviews containsObject: headControls] == NO) { [resultsView addControlView: headControls]; } if ([rescat showFooter]) { if ([rviews containsObject: footControls] == NO) { [resultsView addControlView: footControls]; } } else { if ([rviews containsObject: footControls]) { [resultsView removeControlView: footControls]; } } } else { if ([rviews containsObject: headControls]) { [resultsView removeControlView: headControls]; } if ([rviews containsObject: footControls]) { [resultsView removeControlView: footControls]; } } } else { if ([rviews containsObject: headControls]) { [resultsView removeControlView: headControls]; } if ([rviews containsObject: footControls]) { [resultsView removeControlView: footControls]; } } } if (newranges) { MDKResultsCategory *last = [catlist last]; NSRange range = [last range]; rowsCount = range.location + range.length; globalCount = [last globalCount]; [resultsView noteNumberOfRowsChanged]; [resultsView setNeedsDisplayInRect: [resultsView visibleRect]]; } } - (void)doubleClickOnResultsView:(id)sender { NSWorkspace *ws = [NSWorkspace sharedWorkspace]; NSArray *selected = [self selectedObjects]; NSUInteger count = [selected count]; NSUInteger i; if (count > MAX_FILES_TO_OPEN_DIALOG) { NSString *msg1 = NSLocalizedString(@"Are you sure you want to open", @""); NSString *msg2 = NSLocalizedString(@"items?", @""); if (NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %lu %@", msg1, (unsigned long) count, msg2], NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Yes", @""), nil)) { return; } } for (i = 0; i < count; i++) { FSNode *nd = [selected objectAtIndex: i]; if ([nd hasValidPath]) { NSString *path = [nd path]; NS_DURING { if ([nd isDirectory]) { if ([nd isPackage]) { if ([nd isApplication] == NO) { [ws openFile: path]; } else { [ws launchApplication: path]; } } else { [ws selectFile: path inFileViewerRootedAtPath: path]; } } else if ([nd isPlain]) { [ws openFile: path]; } } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [nd name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } - (NSArray *)selectedObjects { NSMutableArray *selected = [NSMutableArray array]; NSEnumerator *enumerator = [resultsView selectedRowEnumerator]; NSNumber *row; while ((row = [enumerator nextObject])) { id nd = [catlist resultAtIndex: [row intValue]]; if ((*isMember)(nd, memberSel, FSNodeClass) && [nd isValid]) { [selected addObject: nd]; } } return selected; } - (NSArray *)selectedPaths { NSArray *selnodes = [self selectedObjects]; NSMutableArray *selpaths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [selnodes count]; i++) { [selpaths addObject: [[selnodes objectAtIndex: i] path]]; } return [selpaths makeImmutableCopyOnFail: NO]; } - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows { if ([dragRows count] > 1) { return [fsnodeRep multipleSelectionIconOfSize: ICNSIZE]; } else { int index = [[dragRows objectAtIndex: 0] intValue]; FSNode *nd = [catlist resultAtIndex: index]; if ((*isMember)(nd, memberSel, FSNodeClass) && [nd isValid]) { return [fsnodeRep iconOfSize: ICNSIZE forNode: nd]; } } return nil; } @end @implementation ProgrView #define IMAGES 8 - (void)dealloc { RELEASE (images); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSUInteger i; images = [NSMutableArray new]; for (i = 0; i < IMAGES; i++) { NSString *imname = [NSString stringWithFormat: @"anim-logo-%lu", i]; NSString *impath = [bundle pathForResource: imname ofType: @"tiff"]; NSImage *image = [[NSImage alloc] initWithContentsOfFile: impath]; if (image) { [images addObject: image]; RELEASE (image); } } animating = NO; } return self; } - (void)start { if (animating == NO) { index = 0; animating = YES; progTimer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(animate:) userInfo: nil repeats: YES]; } } - (void)stop { if (animating) { animating = NO; if (progTimer && [progTimer isValid]) { [progTimer invalidate]; } [self setNeedsDisplay: YES]; } } - (void)animate:(id)sender { [self setNeedsDisplay: YES]; index++; if (index == [images count]) { index = 0; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (animating) { [[images objectAtIndex: index] compositeToPoint: NSMakePoint(0, 0) operation: NSCompositeSourceOver]; } } @end BOOL isDotFile(NSString *path) { NSArray *components; NSEnumerator *e; NSString *c; BOOL found; if (path == nil) return NO; found = NO; components = [path pathComponents]; e = [components objectEnumerator]; while ((c = [e nextObject]) && !found) { if (([c length] > 0) && ([c characterAtIndex:0] == '.')) found = YES; } return found; } NSString *pathSeparator(void) { static NSString *separator = nil; if (separator == nil) { #if defined(__MINGW32__) separator = @"\\"; #else separator = @"/"; #endif RETAIN (separator); } return separator; } gworkspace-1.1.0/GWMetadata/MDKit/MDKit.h0000644000175000001440000000025313214346535017174 0ustar multixusers #ifndef MDKIT_H #define MDKIT_H #include #include #include #include #endif // MDKIT_H gworkspace-1.1.0/GWMetadata/MDKit/Resources/0000755000175000001440000000000013214346536020026 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/0000755000175000001440000000000013214346536022544 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346535024371 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113713214346535025567 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Application Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346535026376 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKArrayEditor.gorm/0000755000175000001440000000000013214346536026270 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKArrayEditor.gorm/data.classes0000644000175000001440000000116613214346536030564 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonsAction:", "caseSensButtAction:", "operatorPopupAction:", "orderFrontFontPanel:", "popUpAction:", "startFind:", "valuesPopupAction:" ); Super = NSObject; }; MDKArrayEditor = { Actions = ( "valuesPopupAction:", "operatorPopupAction:", "caseSensButtAction:" ); Outlets = ( editorBox, win, operatorPopup, valueField, valuesPopup, firstValueBox, secondValueBox, valueBox, caseSensButt ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKArrayEditor.gorm/data.info0000644000175000001440000000027013214346536030055 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKArrayEditor.gorm/objects.gorm0000644000175000001440000001325313214346536030613 0ustar multixusersGNUstep archive00002c88:00000023:000000b3:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D D#@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox% A0 C~ A  C~ A&0 &0 %  C~ A  C~ A&0 &0 1 NSPopUpButton1NSButton1 NSControl% @@ B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % contains not&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$% B @@ C A  C A&0% &0& %  C A  C A&0' &0(1 NSTextField% A  B A  B A&0) &%0*1NSTextFieldCell0+&+&&&&&&&&0%0,1NSColor0-&%NSNamedColorSpace0.&%System0/&%textBackgroundColor00-.01& % textColor02%  A A  A A&03 &%0405&%Button&&&&&&&&%06&07&&&&0809&%Box&&&&&&&& %%0:0;&%Box&&&&&&&& %%0<% B B( C A  C A&0= &0> %  C A  C A&0? &0@%  C A  C A&0A &%0B0C&&&&&&&&&0D0E&0F &0G0H&%Item 1C&&%%0I0J&%Item 2C&&%%0K0L&%Item 3C&&%%%0M&M&&&D%%%%%0N0O&%Box&&&&&&&& %%0P% B B C A  C A&0Q &0R % ? ? C A  C A&0S &0T0U&%Box&&&&&&&& %%0V-0W&%System0X&%windowBackgroundColor0Y&%Window0Z&%Window0[&%Window ? ? F@ F@%0\0]&%NSApplicationIcon&   D D0^ &0_ &0`1NSMutableDictionary1 NSDictionary&0a& % TextField(0)(0b&%NSOwner0c&%MDKArrayEditor0d& % MenuItem10e& % MenuItem(1)0f0g&%Item 20h&&&%%0i& % MenuItem20j&%View(1)R0k& % MenuItem30l& % MenuItem40m&%PopUpButton(0)@0n& % MenuItem(3)G0o&%Box(0)<0p& % MenuItem(5)K0q&%MenuItem0r& % GormNSWindow0s&%Box(2)$0t&%View(0)>0u& % MenuItem(0)0v0w&%Item 1h&&%%0x& % MenuItem(2)0y0z&%Item 3h&&%%0{&%View(2)&0|& % Button(0)20}&%View1 0~& % MenuItem(4)I0&%GormNSPopUpButton 0&%Box10&%Box(1)P0 &$$01 NSNibConnectorrb0 b0 }b0 }0 q0 d0 i0 k0 l0 u0 e0 x01!NSNibOutletConnectorb0& % editorBox0!br0&%win0!b0& % operatorPopup0 o0 to0 mt0 n0 ~0 p0!bm0& % valuesPopup01"NSNibControlConnectorb0&%operatorPopupAction:0"mb0&%valuesPopupAction:0 0 j0!bo0& % firstValueBox0!b0&%secondValueBox0 s}0 {s0!bs0&%valueBox0 a{0!ba01#NSMutableString& % valueField0 |{0!b|0& % caseSensButt0"|b0&%caseSensButtAction:0&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeChooser.gorm/0000755000175000001440000000000013214346536027331 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeChooser.gorm/data.classes0000644000175000001440000000073613214346536031627 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonsAction:" ); Super = NSObject; }; MDKAttributeChooser = { Actions = ( "buttonsAction:" ); Outlets = ( win, menuNamesScroll, nameLabel, nameField, typeLabel, typeField, typeDescrLabel, typeDescrField, descriptionLabel, descriptionView, cancelButt, okButt ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeChooser.gorm/data.info0000644000175000001440000000027013214346536031116 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeChooser.gorm/objects.gorm0000644000175000001440000001162113214346536031651 0ustar multixusersGNUstep archive00002c88:0000001d:00000099:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C C&% D@ DA@01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&  01NSButton1 NSControl% C؀ A  B` A  B` A&0 &%0 1 NSButtonCell1 NSActionCell1NSCell0 &%OK0 1NSFont% &&&&&&&&%0 &0 &&&&0% C A  B` A  B` A&0 &%00&%Cancel &&&&&&&&%0&0&&&&01 GSCustomView1 GSNibItem0& % NSScrollView A A  C Cv&01 NSTextField% C- Cn C A  C A&0 &%01NSTextFieldCell0&%name0% A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00 & % textColor0!% C- C[ C A  C A&0" &%0#0$& $&&&&&&&&0%0%0&&%System0'&%textBackgroundColor0(&0)& % textColor0*% C- B C A  C A&0+ &%0,0-& % description-&&&&&&&&0%0.0/&%System00&%textBackgroundColor01/02& % textColor0304& % NSTextView C- B\ C B`&05% C- CD C A  C A&06 &%0708&%type8&&&&&&&&0%090:&%System0;&%textBackgroundColor0<:0=& % textColor0>% C- C1 C A  C A&0? &%0@0A& A&&&&&&&&0%0B0C&%System0D&%textBackgroundColor0EC0F& % textColor0G% C- C C A  C A&0H &%0I0J&%type descriptionJ&&&&&&&&0%0K0L&%System0M&%textBackgroundColor0NL0O& % textColor0P% C- C C A  C A&0Q &%0R0S& S&&&&&&&&0%0T0U&%System0V&%textBackgroundColor0WU0X& % textColor0Y0Z&%System0[&%windowBackgroundColor0\&%Window0]&%Attribute Chooser] @@ B  F@ F@%&  D D0^ &0_ &0`1NSMutableDictionary1 NSDictionary&0a& % TextField(6)P0b&%NSOwner0c&%MDKAttributeChooser0d& % TextField(1)!0e& % Button(1)0f& % CustomView(1)30g& % TextField(3)50h& % TextField(5)G0i&%View(0)0j& % CustomView(0)0k& % Button(0)0l& % TextField(0)0m& % TextField(2)*0n& % Window(0)0o& % TextField(4)>0p &0q1NSNibConnectornb0rin0ski0tei0uji0vli0wdi0xmi0yfi0zgi0{oi0|hi0}ai0~1NSNibOutletConnectorbe0& % cancelButt0bm0&%descriptionLabel0bf0&%descriptionView0bj0&%menuNamesScroll0bd0& % nameField0bl0& % nameLabel0bk0&%okButt0ba0&%typeDescrField0bh0&%typeDescrLabel0bo0& % typeField0bg0& % typeLabel0bn0&%win01NSNibControlConnectoreb0&%buttonsAction:0kb0&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeView.gorm/0000755000175000001440000000000013214346536026641 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeView.gorm/data.classes0000644000175000001440000000070613214346536031134 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonsAction:", "orderFrontFontPanel:", "popUpAction:", "setModule:", "startFind:" ); Super = NSObject; }; MDKAttributeView = { Actions = ( "popUpAction:", "buttonsAction:" ); Outlets = ( win, mainBox, popUp, editorBox, removeButt, addButt ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeView.gorm/data.info0000644000175000001440000000027013214346536030426 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKAttributeView.gorm/objects.gorm0000644000175000001440000001275413214346536031171 0ustar multixusersGNUstep archive00002c88:00000021:000000a0:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C BL&% Cm D%@01 NSView% ? A C BL  C BL&01 NSMutableArray1 NSArray&01NSBox%  C A  C A&0 &0 %  C A  C A&0 &  0 1NSButton1 NSControl% C B A A  A A&0 &%0 1 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%&&&&&&&&%0&0&&&&0% C B A A  A A&0 &%00&%Button&&&&&&&&%0&0&&&&0% C B A A  A A&0 &%00&%Button&&&&&&&&%0&0&&&&0% C B A A  A A&0 &%0 0!&%Button&&&&&&&&%0"&0#&&&&0$% C @@ A A  A A&0% &%0&0'&%Button&&&&&&&&%0(&0)&&&&0*1 NSPopUpButton% @ CL B A  B A&0+ &%0,1NSPopUpButtonCell1NSMenuItemCell0-&&&&&&&&&0.1NSMenu0/&00 &011 NSMenuItem02&%Item 103&&&%041NSImage05& % common_Nibble%0607&%Item 23&&%%0809&%Item 33&&%%%0:&0;&&&&1.%%%%%0<% Co C  B A  B A&0= &%0>0?&&&&&&&&&0@0A&0B &0C0D&%Item 10E&&&%4%0F0G&%Item 2E&&%%0H0I&%Item 3E&&%%%0J&0K&&&&C@%%%%%0L% Cŀ @@ A A  A A&0M &%0N0O&%Button&&&&&&&&%0P&0Q&&&&0R% @ @@ B A  B A&0S &%0T0U&&&&&&&&&0V0W&0X &0Y0Z&%Item 10[&&&%4%0\0]&%Item 2[&&%%0^0_&%Item 3[&&%%%0`&0a&&&&YV%%%%%0b% C  C~ A  C~ A&0c &0d %  C~ A  C~ A&0e &0f0g&%Box&&&&&&&& %%0h0i&%Box&&&&&&&& %%0j1NSColor0k&%NSNamedColorSpace0l&%System0m&%windowBackgroundColor0n&%Window0o&%Window0p&%Window ? ? F@ F@%0q0r&%NSApplicationIcon&   D D0s &0t &0u1NSMutableDictionary1 NSDictionary&0v&%Button20w&%Button30x&%Button4$0y&%NSOwner0z&%MDKAttributeView0{&%Button5L0|&%Box2b0}& % GormNSWindow0~&%View 0&%View1d0&%GormNSPopUpButton*0&%Button 0&%GormNSPopUpButton1<0&%GormNSPopUpButton2R0&%Box0&%Button10 &01NSNibConnectory0y0vy0xy0y0y0y01NSNibOutletConnectory}0&%win0yx0&%addButt0y|0& % editorBox0y0&%mainBox0y0&%popUp0y{0& % removeButt01 NSNibControlConnectory0& % popUpAction:0 {y0&%buttonsAction:0 xy01!NSMutableString&%buttonsAction:0&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKCategoryControls.gorm/0000755000175000001440000000000013214346536027344 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKCategoryControls.gorm/data.classes0000644000175000001440000000112713214346536031635 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "topFiveFootButtAction:", "openCloseButtAction:", "showAllButtAction:", "showResultsButtAction:", "topFiveHeadButtAction:" ); Super = NSObject; }; MDKResultsCategory = { Actions = ( "topFiveFootButtAction:", "openCloseButtAction:", "topFiveHeadButtAction:" ); Outlets = ( footBox, headBox, nameLabel, win, openCloseButt, topFiveFootButt, topFiveHeadButt, topFiveHeadLabel ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKCategoryControls.gorm/data.info0000644000175000001440000000027013214346536031131 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKCategoryControls.gorm/objects.gorm0000644000175000001440000000713013214346536031664 0ustar multixusersGNUstep archive00002c88:0000001d:00000067:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D@ D01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox% A B  C A  C A&*0 &0 %  C A  C A&0 &0 1NSButton1 NSControl% A @@ CS A  CS A&0 &%0 1 NSButtonCell1 NSActionCell1NSCell0& % 1234 more...01NSFont% A@&&&&&&&&%0&0&&&&00&%Box0%&&&&&&&& %%0% A B C A  C A&*0 &0 %  C A  C A&0 &0% @ A A0 A0  A0 A0&0 &%00&%Button01NSImage0&%common_ArrowDown&&&&&&&&%0&0 &&&&0!1 NSTextField% A @@ C0 A  C0 A&0" &%0#1NSTextFieldCell0$& % Applications0%% A@$&&&&&&&&0%0&1NSColor0'&%NSNamedColorSpace0(&%System0)&%textBackgroundColor0*0+&%NSCalibratedWhiteColorSpace ? ?0,% C @@ C A  C A&0- &%0.0/& % Show top 5%/&&&&&&&&%00&01&&&&0203&%Box&&&&&&&& %%04'05&%System06&%windowBackgroundColor07&%Window708&%Window @@ B  F@ F@%&  D D09 &0: &0;1NSMutableDictionary1 NSDictionary& 0<& % Button(0)0=& % TextField(0)!0>&%NSOwner0?&%MDKResultsCategory0@&%View(2) 0A& % Button(2) 0B&%Box(1)0C&%View(1)0D& % Button(1),0E& % Window(0)0F&%Box(0)0G&%View(0)0H &0I1NSNibConnectorE>0JGE0KBG0L@B0MA@0NFG0OCF0PB0T&%footBox0U>F0V&%headBox0W>=0X& % nameLabel0Y>E0Z&%win0[><0\& % openCloseButt0]>A0^&%topFiveFootButt0_>D0`&%topFiveHeadButt0a1NSNibControlConnector<>0b&%openCloseButtAction:0cD>0d&%topFiveHeadButtAction:0eA>0f&%topFiveFootButtAction:0g&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKDateEditor.gorm/0000755000175000001440000000000013214346536026067 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKDateEditor.gorm/data.classes0000644000175000001440000000117213214346536030360 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonsAction:", "stepperAction:", "operatorPopupAction:", "orderFrontFontPanel:", "popUpAction:", "startFind:", "valuesPopupAction:" ); Super = NSObject; }; MDKDateEditor = { Actions = ( "valuesPopupAction:", "operatorPopupAction:", "stepperAction:" ); Outlets = ( editorBox, win, operatorPopup, valueField, valuesPopup, firstValueBox, secondValueBox, valueBox, dateField, dateStepper ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKDateEditor.gorm/data.info0000644000175000001440000000027013214346536027654 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKDateEditor.gorm/objects.gorm0000644000175000001440000001415413214346536030413 0ustar multixusersGNUstep archive00002c88:00000027:000000bf:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D C01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox% A  C~ A  C~ A&0 &0 %  C~ A  C~ A&0 &0 1 NSPopUpButton1NSButton1 NSControl% @@ B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % contains not&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$% B @@ C A  C A&0% &0& %  C A  C A&0' &0(1 NSTextField%  C A  C A&0) &%0*1NSTextFieldCell0+&+&&&&&&&&0%0,1NSColor0-&%NSNamedColorSpace0.&%System0/&%textBackgroundColor00-.01& % textColor0203&%Box&&&&&&&& %%0405&%Box&&&&&&&& %%06% B B  C A  C A&07 &08 %  C A  C A&09 &0:%  C A  C A&0; &%0<0=&&&&&&&&&0>0?&0@ &0A0B&%Item 1=&&%%0C0D&%Item 2=&&%%0E0F&%Item 3=&&%%%0G&G&&&>%%%%%0H0I&%Box&&&&&&&& %%0J% B B C A  C A&0K &0L %  C A  C A&0M &0N1 NSStepper% C  A A  A A&0O &%0P1 NSStepperCell0Q&%00R1 NSNumber1!NSValuei%&&&&&&&&% @M ?%%0S%  B A  B A&0T &%0U0V&V&&&&&&&&0%0W-0X&%System0Y&%textBackgroundColor0Z-X0[& % textColor0\0]&%Box&&&&&&&& %%0^-0_&%System0`&%windowBackgroundColor0a&%Window0b&%Window0c&%Window ? ? F@ F@%0d0e&%NSApplicationIcon&   D D0f &0g &0h1"NSMutableDictionary1# NSDictionary&0i& % TextField(0)(0j&%NSOwner0k& % MDKDateEditor0l& % MenuItem10m& % MenuItem(1)0n0o&%Item 20p&&&%%0q& % MenuItem20r&%View(1)L0s& % MenuItem30t& % MenuItem40u&%PopUpButton(0):0v& % MenuItem(3)A0w&%Box(0)60x& % MenuItem(5)E0y&%MenuItem0z& % GormNSWindow0{&%Box(2)$0|&%View(0)80}& % MenuItem(0)0~0&%Item 1p&&%%0& % TextField(1)S0&%View(2)&0& % MenuItem(2)00&%Item 3p&&%%0& % Stepper(0)N0&%View1 0& % MenuItem(4)C0&%GormNSPopUpButton 0&%Box10&%Box(1)J0 &&&01$NSNibConnectorzj0$j0$j0$0$y0$l0$q0$s0$t0$}0$m0$01%NSNibOutletConnectorj0& % editorBox0%jz0&%win0%j0& % operatorPopup0$w0$|w0$u|0$v0$0$x0%ju0& % valuesPopup01&NSNibControlConnectorj0&%operatorPopupAction:0&uj0&%valuesPopupAction:0$0$r0%jw0& % firstValueBox0%j0&%secondValueBox0${0${0%j{0&%valueBox0$i0%ji01'NSMutableString& % valueField0$r0$r0%j0& % dateField0%j0& % dateStepper0&j0&%stepperAction:0"&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKNumberEditor.gorm/0000755000175000001440000000000013214346536026442 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKNumberEditor.gorm/data.classes0000644000175000001440000000105413214346536030732 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonsAction:", "valuesPopupAction:", "operatorPopupAction:", "orderFrontFontPanel:", "popUpAction:", "startFind:" ); Super = NSObject; }; MDKNumberEditor = { Actions = ( "valuesPopupAction:", "operatorPopupAction:" ); Outlets = ( editorBox, win, operatorPopup, valueField, valuesPopup, firstValueBox, secondValueBox, valueBox ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKNumberEditor.gorm/data.info0000644000175000001440000000027013214346536030227 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKNumberEditor.gorm/objects.gorm0000644000175000001440000001247413214346536030771 0ustar multixusersGNUstep archive00002c88:00000023:000000a7:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox% A0 C~ A  C~ A&0 &0 %  C~ A  C~ A&0 &0 1 NSPopUpButton1NSButton1 NSControl% @@ B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % contains not&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$% B @@ C A  C A&0% &0& %  C A  C A&0' &0(1 NSTextField%  C A  C A&-0) &%0*1NSTextFieldCell0+&+&&&&&&&&0%0,1NSColor0-&%NSNamedColorSpace0.&%System0/&%textBackgroundColor00-.01& % textColor0203&%Box&&&&&&&& %%0405&%Box&&&&&&&& %%06% B B( C A  C A&07 &08 %  C A  C A&09 &0:%  C A  C A&0; &%0<0=&&&&&&&&&0>0?&0@ &0A0B&%Item 1=&&%%0C0D&%Item 2=&&%%0E0F&%Item 3=&&%%%0G&G&&&>%%%%%0H0I&%Box&&&&&&&& %%0J% B B C A  C A&0K &0L % ? ? C A  C A&0M &0N0O&%Box&&&&&&&& %%0P-0Q&%System0R&%windowBackgroundColor0S&%Window0T&%Window0U&%Window ? ? F@ F@%0V0W&%NSApplicationIcon&   D D0X &0Y &0Z1NSMutableDictionary1 NSDictionary&0[& % TextField(0)(0\&%NSOwner0]&%MDKNumberEditor0^& % MenuItem10_& % MenuItem(1)0`0a&%Item 20b&&&%%0c& % MenuItem20d&%View(1)L0e& % MenuItem30f& % MenuItem40g&%PopUpButton(0):0h& % MenuItem(3)A0i&%Box(0)60j& % MenuItem(5)E0k&%MenuItem0l& % GormNSWindow0m&%Box(2)$0n&%View(0)80o& % MenuItem(0)0p0q&%Item 1b&&%%0r& % MenuItem(2)0s0t&%Item 3b&&%%0u&%View(2)&0v&%View1 0w& % MenuItem(4)C0x&%Box(1)J0y&%Box10z&%GormNSPopUpButton 0{ &!!0|1 NSNibConnectorl\0} y\0~ v\0 zv0 k0 ^0 c0 e0 f0 o0 _0 r01!NSNibOutletConnector\y0& % editorBox0!\l0&%win0!\z0& % operatorPopup0 i0 ni0 gn0 h0 w0 j0!\g0& % valuesPopup01"NSNibControlConnectorz\0&%operatorPopupAction:0"g\0&%valuesPopupAction:0 x0 dx0!\i0& % firstValueBox0!\x0&%secondValueBox0 mv0 um0!\m0&%valueBox0 [u0!\[01#NSMutableString& % valueField0&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKStringEditor.gorm/0000755000175000001440000000000013214346536026460 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKStringEditor.gorm/data.classes0000644000175000001440000000116713214346536030755 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonsAction:", "caseSensButtAction:", "operatorPopupAction:", "orderFrontFontPanel:", "popUpAction:", "startFind:", "valuesPopupAction:" ); Super = NSObject; }; MDKStringEditor = { Actions = ( "valuesPopupAction:", "operatorPopupAction:", "caseSensButtAction:" ); Outlets = ( editorBox, win, operatorPopup, valueField, valuesPopup, firstValueBox, secondValueBox, valueBox, caseSensButt ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKStringEditor.gorm/data.info0000644000175000001440000000027013214346536030245 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKStringEditor.gorm/objects.gorm0000644000175000001440000001325513214346536031005 0ustar multixusersGNUstep archive00002c88:00000023:000000b3:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% Cڀ D 01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox% A0 C~ A  C~ A&0 &0 %  C~ A  C~ A&0 &0 1 NSPopUpButton1NSButton1 NSControl% @@ B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % contains not&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$% B @@ C A  C A&0% &0& %  C A  C A&0' &0(1 NSTextField% A  B A  B A&0) &%0*1NSTextFieldCell0+&+&&&&&&&&0%0,1NSColor0-&%NSNamedColorSpace0.&%System0/&%textBackgroundColor00-.01& % textColor02%  A A  A A&03 &%0405&%Button5&&&&&&&&%06&07&&&&0809&%Box&&&&&&&& %%0:0;&%Box&&&&&&&& %%0<% B B( C A  C A&0= &0> %  C A  C A&0? &0@%  C A  C A&0A &%0B0C&&&&&&&&&0D0E&0F &0G0H&%Item 1C&&%%0I0J&%Item 2C&&%%0K0L&%Item 3C&&%%%0M&M&&&D%%%%%0N0O&%Box&&&&&&&& %%0P% B B C A  C A&0Q &0R % ? ? C A  C A&0S &0T0U&%Box&&&&&&&& %%0V-0W&%System0X&%windowBackgroundColor0Y&%Window0Z&%Window0[&%Window ? ? F@ F@%0\0]&%NSApplicationIcon&   D D0^ &0_ &0`1NSMutableDictionary1 NSDictionary&0a& % TextField(0)(0b&%NSOwner0c&%MDKStringEditor0d& % MenuItem10e& % MenuItem(1)0f0g&%Item 20h&&&%%0i& % MenuItem20j&%View(1)R0k& % MenuItem30l& % MenuItem40m&%PopUpButton(0)@0n& % MenuItem(3)G0o&%Box(0)<0p& % MenuItem(5)K0q&%MenuItem0r& % GormNSWindow0s&%Box(2)$0t&%View(0)>0u& % MenuItem(0)0v0w&%Item 1h&&%%0x& % MenuItem(2)0y0z&%Item 3h&&%%0{&%View(2)&0|& % Button(0)20}&%View1 0~& % MenuItem(4)I0&%Box(1)P0&%Box10&%GormNSPopUpButton 0 &$$01 NSNibConnectorrb0 b0 }b0 }0 q0 d0 i0 k0 l0 u0 e0 x01!NSNibOutletConnectorb0& % editorBox0!br0&%win0!b0& % operatorPopup0 o0 to0 mt0 n0 ~0 p0!bm0& % valuesPopup01"NSNibControlConnectorb0&%operatorPopupAction:0"mb0&%valuesPopupAction:0 0 j0!bo0& % firstValueBox0!b0&%secondValueBox0 s}0 {s0!bs0&%valueBox0 a{0!ba01#NSMutableString& % valueField0 |{0!b|0& % caseSensButt0"|b0&%caseSensButtAction:0&gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKWindow.gorm/0000755000175000001440000000000013214346536025312 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKWindow.gorm/data.classes0000644000175000001440000000161113214346536027601 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "animate:", "attributesButtAction:", "caseSensButtAction:", "placesPopUpdAction:", "saveButtAction:", "startSearchButtAction:", "stopSearchButtAction:" ); Super = NSObject; }; MDKWindow = { Actions = ( "placesPopUpdAction:", "startSearchButtAction:", "stopSearchButtAction:", "attributesButtAction:", "saveButtAction:", "caseSensButtAction:" ); Outlets = ( win, controlsBox, placesPopUp, progView, searchField, startSearchButt, stopSearchButt, attributesButt, saveButt, attrBox, elementsLabel, resultsScroll, pathBox, caseSensButt ); Super = NSObject; }; ProgrView = { Actions = ( "animate:" ); Outlets = ( ); Super = NSView; }; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKWindow.gorm/data.info0000644000175000001440000000027013214346536027077 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/MDKit/Resources/English.lproj/MDKWindow.gorm/objects.gorm0000644000175000001440000001537613214346536027645 0ustar multixusersGNUstep archive00002c88:00000025:000000d7:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C C&% C DJ01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01NSBox% A C C A  C A& 0 &0 % @ @ C A  C A&0 &0 1NSCell0 &%Box0 1NSFont%0& % Helvetica A@A@&&&&&&&& %%0% A A  C B(  C B(&"0 &0 % @ @ C B  C B&0 &00&%Box &&&&&&&& %%0% C C B  C B& 0 &0 % @ @ C A  C A&0 &01 GSCustomView1 GSNibItem0& % ProgrView C @ A A& 01 NSPopUpButton1NSButton1 NSControl% A @@ C A  C A& 0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell0&0%&&&&&&&&0 1NSMenu0!&0" &0#1 NSMenuItem0$& % Search in...&&%0%1NSImage0&&%common_3DArrowDown%0'0(&%Item 2&&%%0)0*&%Item 3&&%%%0+&+&&&# %%%%%0,1 NSTextField% CX @@ C A  C A& 0- &%0.1NSTextFieldCell0/&/&&&&&&&&0%001NSColor01&%NSNamedColorSpace02&%System03&%textBackgroundColor041205& % textColor06% C @@ A A  A A& 07 &%0809&%Button0:0;&%GSStop&&&&&&&&%0<&0=&&&&0>% C) @@ A A  A A& 0? &%0@0A&%Button0B0C&%GSSearchA&&&&&&&&%0D&0E&&&&0F% CՀ @@ B4 A  B4 A& 0G &%0H0I&%SaveI&&&&&&&&%0J&0K&&&&0L% C? @ A A  A A&0M &%0N0O&%ButtonO&&&&&&&&%0P&0Q&&&&0R0S&%Box&&&&&&&& %%0T% A Cz CA A  CA A& 0U &%0V0W& % 206 elements0X% A@W&&&&&&&&0%0Y10Z&%System0[&%textBackgroundColor0\1Z0]& % textColor0^0_& % NSScrollView A Bd C CA&0`% A C A0 A0  A0 A0& 0a &%0b0c&%Button0d0e&%common_ArrowRightc&&&&&&&&%0f&0g&&&&0h10i&%System0j&%windowBackgroundColor0k&%Windowk0l&%Window C Cf F@ F@%&  D D0m &0n &0o1 NSMutableDictionary1! NSDictionary&0p& % Button(4)`0q& % TextField(0),0r&%NSOwner0s& % MDKWindow0t& % MenuItem(1)0u0v&%Item 20w&&&%%0x&%View(1) 0y&%View(3)0z& % MenuItem(3)#0{& % Button(1)>0|& % Window(0)0}& % CustomView(1)^0~&%Box(0)0& % MenuItem(5))0& % Button(3)F0&%Box(2)0&%View(0)0& % MenuItem(0)00& % Sort by...w&&%%%0& % TextField(1)T0& % MenuItem(2)00&%Item 3w&&%%0&%View(2)0& % Button(0)60& % CustomView(0)0& % MenuItem(4)'0&%PopUpButton(1)0& % Button(2)L0&%Box(1)0 &..01"NSNibConnector|0&%NSOwner0"|0"~|0"x~0"|0"0"0"y0"y0"y0"z0"0"0"0"t0"0"qy0"y0"{y0"0"}0"y01#NSNibOutletConnector|0&%win0#0& % controlsBox0#0& % elementsLabel0#0&%pathBox0#0& % placesPopUp0#0&%progView0#}0& % resultsScroll0#0&%saveButt0#q0& % searchField0#{0&%startSearchButt0#0&%stopSearchButt01$NSNibControlConnector01%NSMutableString&%stopSearchButtAction:0$0±%&%saveButtAction:0ñ${0ı%&%startSearchButtAction:0ű$0Ʊ%&%placesPopUpdAction:0DZ#|0ȱ%&%delegate0ɱ#|q0ʱ%&%initialFirstResponder0˱"p0̱#~0ͱ&%attrBox0α#p0ϱ&%attributesButt0б$p0ѱ&%attributesButtAction:0ұ"y0ӱ#0Ա& % caseSensButt0ձ$0ֱ&%caseSensButtAction:0ױ &gworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/0000755000175000001440000000000013214346536021233 5ustar multixusersgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/.gwdir0000644000175000001440000000037313214346536022353 0ustar multixusers{ fsn_info_type = <*I0>; geometry = "810 136 450 300 0 0 1600 1176 "; iconposition = <*I5>; iconsize = <*I48>; labeltxtsize = <*I12>; lastselection = ( ); singlenode = <*BY>; spatial = <*BY>; viewtype = Icon; }gworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/MDFinder.tiff0000644000175000001440000002242413214346536023541 0ustar multixusersII*$LLLLLLBBBLLBLBBLLLLLLBLBBLBLLL..!>11>1>!.!.!.BBL1>1}LLLLBBBBL???????????????LLL???????????????LLLLLL???????????????LLLLLLLLLLLL1>>LLLBBB1???kkkkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???kkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLBBB.!.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLB111LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkkkkLLLLLLLLLLLBBBLLLLLLLLLkkk?????????LLLLLLLLLL>>>BLBLLLLLLLLLkkk????????????LLLLLLLLLLLLLLLLLLLLL??????????????????LLLLBBBLLLLLLLLL??????????????????LLLLBLBLLL??????????????????LLLBLLLLLLLLLLL????????????LLBBLLLLLLLLLLLL??????LLLLLBLLLLLLLLLLLLLBLBBBLLLLLLLLLLLLLLLBBBBBBLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL!!!LLLLLLLLLLLLLLLLLLBBLLLLBLBLLLLLLLLLBBBLBBBBBLBBBBBLBBBBB???c!LLLLLLLLLL...LLL???c!LLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLL...LLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL???c!L...LLLLLLLLLLLL...LLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???LLLLLLLLLLLL???LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL00$  F$%* %R/home/enrico/Grivei/sviluppo/FileManager/GFindFile/Icons/Magnify.tiffgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/add.tiff0000644000175000001440000000200413214346536022631 0ustar multixusersII*   L@(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/add.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-0.tiff0000644000175000001440000000151613214346536024127 0ustar multixusersII*   (1:R../Resources/anim-logo-1.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-1.tiff0000644000175000001440000000151613214346536024130 0ustar multixusersII*x@E8t@L#k@O   (1:R../Resources/anim-logo-2.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-2.tiff0000644000175000001440000000151613214346536024131 0ustar multixusersII*   (1:R../Resources/anim-logo-3.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-3.tiff0000644000175000001440000000151613214346536024132 0ustar multixusersII*8#ktx@@@OEL   (1:R../Resources/anim-logo-4.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-4.tiff0000644000175000001440000000151613214346536024133 0ustar multixusersII*   (1:R../Resources/anim-logo-5.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-5.tiff0000644000175000001440000000151613214346536024134 0ustar multixusersII*O@k#L@t8E@x   (1:R../Resources/anim-logo-6.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-6.tiff0000644000175000001440000000151613214346536024135 0ustar multixusersII*   (1:R../Resources/anim-logo-7.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/anim-logo-7.tiff0000644000175000001440000000151613214346536024136 0ustar multixusersII*LEO@@@xtk#8   (1:R../Resources/anim-logo-8.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/casesens.tiff0000644000175000001440000000257213214346536023717 0ustar multixusersII* ^׳ݳѳ_/0<ʲ״ ϲ)OH)?\Fܴ| fT@jr(R/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/GWMetadata/MDKit/Resources/Images/casesens.tiffCreated with The GIMPHHgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/remove.tiff0000644000175000001440000000201013214346536023373 0ustar multixusersII*   O@(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/remove.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/switchOff.tiff0000644000175000001440000000256413214346536024050 0ustar multixusersII*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS lNdl(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/switchOff.tiffCreated with The GIMPHHgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/switchOn.tiff0000644000175000001440000000256413214346536023712 0ustar multixusersII*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSS kNdl(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/switchOn.tiffCreated with The GIMPHHgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/whiteArrowDown.tiff0000644000175000001440000000054613214346536025075 0ustar multixusersII*8   "@@0V^(R/root/Desktop/WhiteArrowDown.tiffCreated with The GIMPHHgworkspace-1.1.0/GWMetadata/MDKit/Resources/Images/whiteArrowRight.tiff0000644000175000001440000000053213214346536025236 0ustar multixusersII**   #4@"JR(R/root/Desktop/WhiteArrowRight.tiffCreated with The GIMPHHgworkspace-1.1.0/GWMetadata/MDKit/Resources/attributes.plist0000644000175000001440000011232213214346536023272 0ustar multixusers{ categories = { sources = { category_name = "sources"; menu_name = "Source code"; icon = "sources"; active = <*I1>; index = <*I0>; }; applications = { category_name = "applications"; menu_name = "Applications"; icon = "applications"; active = <*I1>; index = <*I1>; }; documents = { category_name = "documents"; menu_name = "Documents"; icon = "documents"; active = <*I1>; index = <*I2>; }; folders = { category_name = "folders"; menu_name = "Folders"; icon = "folders"; active = <*I1>; index = <*I3>; }; images = { category_name = "images"; menu_name = "Images"; icon = "images"; active = <*I1>; index = <*I4>; }; pdfdocs = { category_name = "pdfdocs"; menu_name = "PDF Documents"; icon = "pdfdocs"; active = <*I1>; index = <*I5>; }; movies = { category_name = "movies"; menu_name = "Movies"; icon = "movies"; active = <*I1>; index = <*I6>; }; music = { category_name = "music"; menu_name = "Music"; icon = "music"; active = <*I1>; index = <*I7>; }; plainfiles = { category_name = "plainfiles"; menu_name = "Plain Files"; icon = "plainfiles"; active = <*I1>; index = <*I8>; }; }; attributes = { GSMDItemAudiences = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Audience for which the document is intended"; attribute_name = "GSMDItemAudiences"; menu_name = "Audience"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemAuthors = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Authors of the document or application"; attribute_name = "GSMDItemAuthors"; menu_name = "Authors"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemCity = { type = <*I0>; type_description = "NSString"; description = "City of origin"; attribute_name = "GSMDItemCity"; menu_name = "City"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemComment = { type = <*I0>; type_description = "NSString"; description = "Comment related to the document"; attribute_name = "GSMDItemComment"; menu_name = "Comment"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemContactKeywords = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Contacts associated with the document"; attribute_name = "GSMDItemContactKeywords"; menu_name = "Contacts"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemContributors = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Contributors to the contents of the document"; attribute_name = "GSMDItemContributors"; menu_name = "Contributors"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemCopyright = { type = <*I0>; type_description = "NSString"; description = "Owner of the copyright of the document"; attribute_name = "GSMDItemCopyright"; menu_name = "Copyright owner"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemCountry = { type = <*I0>; type_description = "NSString"; description = "Full name of the country where the item has been created"; attribute_name = "GSMDItemCountry"; menu_name = "Country"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemCreator = { type = <*I0>; type_description = "NSString"; description = "Application used to create the document"; attribute_name = "GSMDItemCreator"; menu_name = "Creator"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemDescription = { type = <*I0>; type_description = "NSString"; description = "Description of the document"; attribute_name = "GSMDItemDescription"; menu_name = "Description"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemDurationSeconds = { type = <*I2>; number_type = <*I1>; type_description = "NSNumber (float)"; description = "Float value representing the duration in seconds of the content"; attribute_name = "GSMDItemDurationSeconds"; menu_name = "Duration"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemEmailAddresses = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Email addresses related to the document"; attribute_name = "GSMDItemEmailAddresses"; menu_name = "Email addresses"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemEncodingApplications = { type = <*I1>; elements_type = <*I0>; type_description = "NSString"; description = "Name of the application used to convert the document to its actual form"; attribute_name = "GSMDItemEncodingApplications"; menu_name = "Encoding application"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemFinderComment = { type = <*I0>; type_description = "NSString"; description = "File Annotations of the document"; attribute_name = "GSMDItemFinderComment"; menu_name = "File Annotations"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemFonts = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Fonts used in the document"; attribute_name = "GSMDItemFonts"; menu_name = "Fonts"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemKeywords = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Keywords associated with the document"; attribute_name = "GSMDItemKeywords"; menu_name = "Keywords"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemLanguages = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Languages used by the item"; attribute_name = "GSMDItemLanguages"; menu_name = "Languages"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemNumberOfPages = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Number of pages in the document"; attribute_name = "GSMDItemNumberOfPages"; menu_name = "Number of pages"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemPageHeight = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Height in points of the document page"; attribute_name = "GSMDItemPageHeight"; menu_name = "Page height"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemPageWidth = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Width in points of the document page"; attribute_name = "GSMDItemPageWidth"; menu_name = "Page width"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemPhoneNumbers = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Phone numbers related to this document"; attribute_name = "GSMDItemPhoneNumbers"; menu_name = "Phone numbers"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemPublishers = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Publishers of the document"; attribute_name = "GSMDItemPublishers"; menu_name = "Publishers"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemTextContent = { type = <*I0>; type_description = " "; description = "Text content of the document. (This value can't be directly read but the attribute name can be used in queries)"; attribute_name = "GSMDItemTextContent"; menu_name = "Text content"; searchable = <*I0>; fsattribute = <*I0>; editor = { }; }; GSMDItemTitle = { type = <*I0>; type_description = "NSString"; description = "Title of the document"; attribute_name = "GSMDItemTitle"; menu_name = "Title"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemVersion = { type = <*I0>; type_description = "NSString"; description = "Version number of the document"; attribute_name = "GSMDItemVersion"; menu_name = "Version number"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemAcquisitionMake = { type = <*I0>; type_description = "NSString"; description = "Manufacturer of the device used to acquire the document"; attribute_name = "GSMDItemAcquisitionMake"; menu_name = "Acquisition manufacturer"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemAcquisitionModel = { type = <*I0>; type_description = "NSString"; description = "Model of the device used to acquire the document"; attribute_name = "GSMDItemAcquisitionModel"; menu_name = "Acquisition model"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemAlbum = { type = <*I0>; type_description = "NSString"; description = "Name of the collection containing this document"; attribute_name = "GSMDItemAlbum"; menu_name = "Album name"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemAperture = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "APEX value representing the aperture used to aquire the document contents"; attribute_name = "GSMDItemAperture"; menu_name = "APEX aperture"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemBitsPerSample = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Bits per sample"; attribute_name = "GSMDItemBitsPerSample"; menu_name = "Bits per sample"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemColorSpace = { type = <*I0>; type_description = "NSString"; description = "Color space model"; attribute_name = "GSMDItemColorSpace"; menu_name = "Color space"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemEXIFVersion = { type = <*I0>; type_description = "NSString"; description = "EXIF version"; attribute_name = "GSMDItemEXIFVersion"; menu_name = "EXIF version"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemExposureMode = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Exposure mode used to acquire the document contents"; attribute_name = "GSMDItemExposureMode"; menu_name = "Exposure mode"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemExposureProgram = { type = <*I0>; type_description = "NSString"; description = "Name of the exposure program used to acquire the contents"; attribute_name = "GSMDItemExposureProgram"; menu_name = "Exposure program"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemExposureTimeSeconds = { type = <*I2>; number_type = <*I1>; type_description = "NSNumber (float)"; description = "Float value representing the time in seconds used to capture the document contents"; attribute_name = "GSMDItemExposureTimeSeconds"; menu_name = "Exposure time"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemExposureTimeString = { type = <*I0>; type_description = "NSString"; description = "Description of the date-time when the camera has created the document contents"; attribute_name = "GSMDItemExposureTimeString"; menu_name = "Exposure date"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemFNumber = { type = <*I2>; number_type = <*I1>; type_description = "NSNumber (float)"; description = "F-number of the lens used acquiring the document contents"; attribute_name = "GSMDItemFNumber"; menu_name = "F-number"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemFlashOnOff = { type = <*I2>; number_type = <*I2>; type_description = "NSNumber (BOOL)"; description = "Bool value representing if a flash was used aquiring the contents"; attribute_name = "GSMDItemFlashOnOff"; menu_name = "Flash on"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I0>, <*I1> ); value_edit = <*I0>; search_value = "1"; }; }; GSMDItemFocalLength = { type = <*I2>; number_type = <*I1>; type_description = "NSNumber (float)"; description = "Focal length in millimeters of the lens used acquiring the document contents"; attribute_name = "GSMDItemFocalLength"; menu_name = "Focal length"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemHasAlphaChannel = { type = <*I2>; number_type = <*I2>; type_description = "NSNumber (BOOL)"; description = "Bool value representing if the image has an alpha channel"; attribute_name = "GSMDItemHasAlphaChannel"; menu_name = "Has alpha"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I0>, <*I1> ); value_edit = <*I0>; search_value = "1"; }; }; GSMDItemISOSpeed = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "ISO speed used to acquire the document contents"; attribute_name = "GSMDItemISOSpeed"; menu_name = "ISO speed"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemMaxAperture = { type = <*I2>; number_type = <*I1>; type_description = "NSNumber (float)"; description = "Smallest F number of the lens"; attribute_name = "GSMDItemMaxAperture"; menu_name = "Max aperture"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemMeteringMode = { type = <*I0>; type_description = "NSString"; description = "Metering mode used to acquire the document contents"; attribute_name = "GSMDItemMeteringMode"; menu_name = "Metering mode"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemOrientation = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Orientation of the document"; attribute_name = "GSMDItemOrientation"; menu_name = "Orientation"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I1>; value_menu = ( orizzontal, vertical ); value_set = ( <*I0>, <*I1> ); }; }; GSMDItemPixelHeight = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Height, in pixels, of the contents"; attribute_name = "GSMDItemPixelHeight"; menu_name = "Pixel height"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemPixelWidth = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Width, in pixels, of the contents"; attribute_name = "GSMDItemPixelWidth"; menu_name = "Pixel width"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemRedEyeOnOff = { type = <*I2>; number_type = <*I2>; type_description = "NSNumber (BOOL)"; description = "Whether red-eye reduction was used to acquire the document contents"; attribute_name = "GSMDItemRedEyeOnOff"; menu_name = "Red-eye"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I0>, <*I1> ); value_edit = <*I0>; search_value = "1"; }; }; GSMDItemResolutionHeightDPI = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Resolution height of the document"; attribute_name = "GSMDItemResolutionHeightDPI"; menu_name = "Resolution height"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemResolutionWidthDPI = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Resolution width of the document"; attribute_name = "GSMDItemResolutionWidthDPI"; menu_name = "Resolution width"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemWhiteBalance = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "White balance settings used when the contents was acquired"; attribute_name = "GSMDItemWhiteBalance"; menu_name = "White balance"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemAudioBitRate = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Bit rate of the audio"; attribute_name = "GSMDItemAudioBitRate"; menu_name = "Audio bit rate"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemCodecs = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Codec used to encode or decode the document"; attribute_name = "GSMDItemCodecs"; menu_name = "Codecs"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemDelivery = { type = <*I0>; type_description = "NSString"; description = "Streaming media deliver type"; attribute_name = "GSMDItemDelivery"; menu_name = "Streaming type"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemMediaTypes = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "Media types of the document"; attribute_name = "GSMDItemMediaTypes"; menu_name = "Media types"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemStreamable = { type = <*I2>; number_type = <*I2>; type_description = "NSNumber (BOOL)"; description = "Whether the document contents are streamable"; attribute_name = "GSMDItemStreamable"; menu_name = "Streamable"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I0>, <*I1> ); value_edit = <*I0>; search_value = "1"; }; }; GSMDItemTotalBitRate = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Total bit rate (audio and video) of the document"; attribute_name = "GSMDItemTotalBitRate"; menu_name = "Total bit rate"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemVideoBitRate = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Videobit rate of the document"; attribute_name = "GSMDItemVideoBitRate"; menu_name = "Video bit rate"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemAudioChannelCount = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Number of audio channels in the document"; attribute_name = "GSMDItemAudioChannelCount"; menu_name = "Audio channel count"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemAudioSampleRate = { type = <*I2>; number_type = <*I1>; type_description = "NSNumber (float)"; description = "Float value in hz representing the sample rate of the document"; attribute_name = "GSMDItemAudioSampleRate"; menu_name = "Audio sample rate"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemAudioTrackNumber = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Number of the document if it is part of an album"; attribute_name = "GSMDItemAudioTrackNumber"; menu_name = "Track number"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemComposer = { type = <*I0>; type_description = "NSString"; description = "Composer of the music in the document"; attribute_name = "GSMDItemComposer"; menu_name = "Composer"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemIsGeneralMIDISequence = { type = <*I2>; number_type = <*I2>; type_description = "NSNumber (BOOL)"; description = "Whether the document is set up for use with a General Midi device"; attribute_name = "GSMDItemIsGeneralMIDISequence"; menu_name = "General MIDI"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I0>, <*I1> ); value_edit = <*I0>; search_value = "1"; }; }; GSMDItemKeySignature = { type = <*I0>; type_description = "NSString"; description = "Musical key of the music in the document"; attribute_name = "GSMDItemKeySignature"; menu_name = "Musical key"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemLyricist = { type = <*I0>; type_description = "NSString"; description = "Lyricist of the music in the document"; attribute_name = "GSMDItemLyricist"; menu_name = "Lyricist"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemMusicalGenre = { type = <*I0>; type_description = "NSString"; description = "Musical genre of the music in the document"; attribute_name = "GSMDItemMusicalGenre"; menu_name = "Musical genre"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemRecordingDate = { type = <*I3>; type_description = "NSDate"; description = "Recording date of the music in the document"; attribute_name = "GSMDItemRecordingDate"; menu_name = "Recording date"; searchable = <*I1>; fsattribute = <*I0>; editor = { value_edit = <*I3>; operator = ( <*I11>, <*I12>, <*I13>, <*I14>, <*I15> ); }; }; GSMDItemRecordingYear = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Recording year of the music in the document"; attribute_name = "GSMDItemRecordingYear"; menu_name = "Recording year"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemTempo = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Tempo of the music in the document"; attribute_name = "GSMDItemTempo"; menu_name = "Tempo"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; GSMDItemTimeSignature = { type = <*I0>; type_description = "NSString"; description = "Time signature of the music in the document"; attribute_name = "GSMDItemTimeSignature"; menu_name = "Time signature"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemUnixExtensions = { type = <*I1>; elements_type = <*I0>; type_description = "NSArray of NSString objects"; description = "File extensions an application can open"; attribute_name = "GSMDItemUnixExtensions"; menu_name = "Application file extensions"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I4>, <*I5> ); value_edit = <*I2>; }; }; GSMDItemCopyrightDescription = { type = <*I0>; type_description = "NSString"; description = "Description of the copyright (License type, etc.)"; attribute_name = "GSMDItemCopyrightDescription"; menu_name = "Copyright"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemRole = { type = <*I0>; type_description = "NSString"; description = "Role of the application (Editor, Viewer, etc.)"; attribute_name = "GSMDItemRole"; menu_name = "Application role"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I1>; value_menu = ( Editor, Viewer, None ); value_set = ( Editor, Viewer, NSNone ); }; }; GSMDItemBuildVersion = { type = <*I0>; type_description = "NSString"; description = "Build version of the application"; attribute_name = "GSMDItemBuildVersion"; menu_name = "Build version"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemApplicationName = { type = <*I0>; type_description = "NSString"; description = "Name of the application"; attribute_name = "GSMDItemApplicationName"; menu_name = "Application name"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemApplicationDescription = { type = <*I0>; type_description = "NSString"; description = "Description of the application"; attribute_name = "GSMDItemApplicationDescription"; menu_name = "Application description"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemApplicationRelease = { type = <*I0>; type_description = "NSString"; description = "Full name of the application release"; attribute_name = "GSMDItemApplicationRelease"; menu_name = "Application release"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemFSName = { type = <*I0>; type_description = "NSString"; description = "Name of the document"; attribute_name = "GSMDItemFSName"; menu_name = "File name"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemFSExtension = { type = <*I0>; type_description = "NSString"; description = "Path extension of the document"; attribute_name = "GSMDItemFSExtension"; menu_name = "File name extension"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3>, <*I4>, <*I5>, <*I6>, <*I7> ); value_edit = <*I2>; }; }; GSMDItemFSType = { type = <*I0>; type_description = "NSString"; description = "File type of the document"; attribute_name = "GSMDItemFSType"; menu_name = "File type"; searchable = <*I1>; fsattribute = <*I0>; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I1>; value_menu = ( "plain file", folder, application, "mount point", "shell command" ); value_set = ( NSPlainFileType, NSDirectoryFileType, NSApplicationFileType, NSFilesystemFileType, NSShellCommandFileType ); }; }; GSMDItemFSModificationDate = { type = <*I3>; type_description = "NSDate"; description = "Date of the last change of the document content"; attribute_name = "GSMDItemFSModificationDate"; menu_name = "Modification date"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterModDate"; editor = { value_edit = <*I3>; operator = ( <*I11>, <*I12>, <*I13>, <*I14>, <*I15> ); }; }; GSMDItemFSCreationDate = { type = <*I3>; type_description = "NSDate"; description = "Creation date of the document"; attribute_name = "GSMDItemFSCreationDate"; menu_name = "Creation date"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterCrDate"; editor = { value_edit = <*I3>; operator = ( <*I11>, <*I12>, <*I13>, <*I14>, <*I15> ); }; }; GSMDItemFSOwnerGroup = { type = <*I0>; type_description = "NSString"; description = "Owner group of the file"; attribute_name = "GSMDItemFSOwnerGroup"; menu_name = "Owner group"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterGroup"; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I2>; }; }; GSMDItemFSOwnerGroupID = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Owner group ID of the file"; attribute_name = "GSMDItemFSOwnerGroupID"; menu_name = "Owner group ID"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterGroupId"; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I2>; }; }; GSMDItemFSOwnerUser = { type = <*I0>; type_description = "NSString"; description = "Owner user of the file"; attribute_name = "GSMDItemFSOwnerUser"; menu_name = "Owner"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterOwner"; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I2>; }; }; GSMDItemFSOwnerUserID = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Owner user ID of the file"; attribute_name = "GSMDItemFSOwnerUserID"; menu_name = "Owner ID"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterOwnerId"; editor = { operator = ( <*I2>, <*I3> ); value_edit = <*I2>; }; }; GSMDItemFSSize = { type = <*I2>; number_type = <*I0>; type_description = "NSNumber (int)"; description = "Size in bytes of the file"; attribute_name = "GSMDItemFSSize"; menu_name = "Size"; searchable = <*I1>; fsattribute = <*I1>; fsfilter = "MDKFSFilterSize"; editor = { operator = ( <*I8>, <*I9>, <*I10> ); value_edit = <*I2>; }; }; }; } gworkspace-1.1.0/GWMetadata/MDKit/SQLite.h0000644000175000001440000000667114751213523017374 0ustar multixusers/* SQLite.h * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: May 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef SQLITE_H #define SQLITE_H #import #define id sqlite_id #include #undef id @class SQLitePreparedStatement; @interface SQLite: NSObject { sqlite3 *db; NSMutableDictionary *preparedStatements; NSFileManager *fm; } + (id)handlerForDbAtPath:(NSString *)path isNew:(BOOL *)isnew; - (id)initForDbAtPath:(NSString *)path isNew:(BOOL *)isnew; - (BOOL)opendbAtPath:(NSString *)path isNew:(BOOL *)isnew; - (BOOL)attachDbAtPath:(NSString *)path withName:(NSString *)name isNew:(BOOL *)isnew; - (void)closeDb; - (sqlite3 *)db; - (BOOL)executeSimpleQuery:(NSString *)query; - (BOOL)executeQuery:(NSString *)query; - (NSArray *)resultsOfQuery:(NSString *)query; - (int)getIntEntry:(NSString *)query; - (float)getFloatEntry:(NSString *)query; - (NSString *)getStringEntry:(NSString *)query; - (NSData *)getBlobEntry:(NSString *)query; - (BOOL)createFunctionWithName:(NSString *)fname argumentsCount:(int)nargs userFunction:(void *)funct; - (int)lastInsertRowId; @end @interface SQLite (PreparedStatements) - (id)statementForQuery:(NSString *)query withIdentifier:(id)identifier bindings:(int)firstTipe, ...; - (BOOL)executeQueryWithStatement:(SQLitePreparedStatement *)statement; - (NSArray *)resultsOfQueryWithStatement:(SQLitePreparedStatement *)statement; - (int)getIntEntryWithStatement:(SQLitePreparedStatement *)statement; - (float)getFloatEntryWithStatement:(SQLitePreparedStatement *)statement; - (NSString *)getStringEntryWithStatement:(SQLitePreparedStatement *)statement; - (NSData *)getBlobEntryWithStatement:(SQLitePreparedStatement *)statement; @end @interface SQLitePreparedStatement: NSObject { NSString *query; sqlite3_stmt *handle; sqlite3 *db; } + (id)statementWithQuery:(NSString *)aquery onDb:(sqlite3 *)dbptr; - (id)initWithQuery:(NSString *)aquery onDb:(sqlite3 *)dbptr; - (BOOL)bindIntValue:(int)value forName:(NSString *)name; - (BOOL)bindDoubleValue:(double)value forName:(NSString *)name; - (BOOL)bindTextValue:(NSString *)value forName:(NSString *)name; - (BOOL)bindBlobValue:(NSData *)value forName:(NSString *)name; - (BOOL)expired; - (BOOL)prepare; - (BOOL)reset; - (BOOL)finalizeStatement; - (NSString *)query; - (sqlite3_stmt *)handle; @end NSString *stringForQuery(NSString *str); #endif // SQLITE_H gworkspace-1.1.0/GWMetadata/MDKit/SQLite.m0000644000175000001440000004564014751213523017400 0ustar multixusers/* SQLite.m * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: May 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include #include #include #include #include "config.h" #import "SQLite.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) #define MAX_RETRY 1000 @implementation SQLite - (void)dealloc { if (db != NULL) { sqlite3_close(db); } RELEASE (preparedStatements); [super dealloc]; } + (id)handlerForDbAtPath:(NSString *)path isNew:(BOOL *)isnew { return TEST_AUTORELEASE ([[self alloc] initForDbAtPath: path isNew: isnew]); } - (id)initForDbAtPath:(NSString *)path isNew:(BOOL *)isnew { self = [super init]; if (self) { preparedStatements = [NSMutableDictionary new]; db = NULL; fm = [NSFileManager defaultManager]; if ([self opendbAtPath: path isNew: isnew] == NO) { DESTROY (self); return self; } } return self; } - (id)init { self = [super init]; if (self) { preparedStatements = [NSMutableDictionary new]; db = NULL; fm = [NSFileManager defaultManager]; } return self; } - (BOOL)opendbAtPath:(NSString *)path isNew:(BOOL *)isnew { *isnew = ([fm fileExistsAtPath: path] == NO); if (db == NULL) { NSArray *components = [path pathComponents]; unsigned count = [components count]; NSString *dbname = [components objectAtIndex: count - 1]; NSString *dbpath = [NSString string]; unsigned i; for (i = 0; i < (count - 1); i++) { NSString *dir = [components objectAtIndex: i]; BOOL isdir; dbpath = [dbpath stringByAppendingPathComponent: dir]; if (([fm fileExistsAtPath: dbpath isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbpath attributes: nil] == NO) { NSLog(@"unable to create: %@", dbpath); return NO; } } } dbpath = [dbpath stringByAppendingPathComponent: dbname]; if (sqlite3_open([dbpath fileSystemRepresentation], &db) != SQLITE_OK) { NSLog(@"%s", sqlite3_errmsg(db)); return NO; } return YES; } return NO; } - (BOOL)attachDbAtPath:(NSString *)path withName:(NSString *)name isNew:(BOOL *)isnew { *isnew = ([fm fileExistsAtPath: path] == NO); if (db != NULL) { NSArray *components = [path pathComponents]; unsigned count = [components count]; NSString *dbname = [components objectAtIndex: count - 1]; NSString *dbpath = [NSString string]; NSString *query; unsigned i; for (i = 0; i < (count - 1); i++) { NSString *dir = [components objectAtIndex: i]; BOOL isdir; dbpath = [dbpath stringByAppendingPathComponent: dir]; if (([fm fileExistsAtPath: dbpath isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbpath attributes: nil] == NO) { NSLog(@"unable to create: %@", dbpath); return NO; } } } dbpath = [dbpath stringByAppendingPathComponent: dbname]; query = [NSString stringWithFormat: @"ATTACH DATABASE '%@' AS %@", dbpath, name]; return [self executeSimpleQuery: query]; } return NO; } - (void)closeDb { if (db != NULL) { sqlite3_close(db); db = NULL; } } - (sqlite3 *)db { return db; } - (BOOL)executeSimpleQuery:(NSString *)query { char *err; if (sqlite3_exec(db, [query UTF8String], NULL, 0, &err) != SQLITE_OK) { NSLog(@"error at %@", query); if (err != NULL) { NSLog(@"%s", err); sqlite3_free(err); } return NO; } return YES; } - (BOOL)executeQuery:(NSString *)query { const char *qbuff = [query UTF8String]; struct sqlite3_stmt *stmt; int retry = 0; int err; err = sqlite3_prepare(db, qbuff, strlen(qbuff), &stmt, NULL); if (err != SQLITE_OK) { NSLog(@"%s", sqlite3_errmsg(db)); return NO; } while (1) { err = sqlite3_step(stmt); if (err == SQLITE_DONE) { break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; GWDebugLog(@"retry %i", retry); RELEASE (arp); if (retry++ >= MAX_RETRY) { NSLog(@"timeout for query: %@", query); NSLog(@"%s", sqlite3_errmsg(db)); sqlite3_finalize(stmt); return NO; } } else { NSLog(@"error at: %@", query); NSLog(@"%s", sqlite3_errmsg(db)); sqlite3_finalize(stmt); return NO; } } sqlite3_finalize(stmt); return YES; } - (NSArray *)resultsOfQuery:(NSString *)query { const char *qbuff = [query UTF8String]; NSMutableArray *lines = [NSMutableArray array]; struct sqlite3_stmt *stmt; int retry = 0; int err; int i; if (sqlite3_prepare(db, qbuff, strlen(qbuff), &stmt, NULL) == SQLITE_OK) { while (1) { err = sqlite3_step(stmt); if (err == SQLITE_ROW) { NSMutableDictionary *line = [NSMutableDictionary dictionary]; int count = sqlite3_data_count(stmt); // we use "<= count" because sqlite sends also // the id of the entry with type = 0 for (i = 0; i <= count; i++) { const char *name = sqlite3_column_name(stmt, i); if (name != NULL) { int type = sqlite3_column_type(stmt, i); if (type == SQLITE_INTEGER) { [line setObject: [NSNumber numberWithInt: sqlite3_column_int(stmt, i)] forKey: [NSString stringWithUTF8String: name]]; } else if (type == SQLITE_FLOAT) { [line setObject: [NSNumber numberWithDouble: sqlite3_column_double(stmt, i)] forKey: [NSString stringWithUTF8String: name]]; } else if (type == SQLITE_TEXT) { [line setObject: [NSString stringWithUTF8String: (const char *)sqlite3_column_text(stmt, i)] forKey: [NSString stringWithUTF8String: name]]; } else if (type == SQLITE_BLOB) { const void *bytes = sqlite3_column_blob(stmt, i); int length = sqlite3_column_bytes(stmt, i); [line setObject: [NSData dataWithBytes: bytes length: length] forKey: [NSString stringWithUTF8String: name]]; } } } [lines addObject: line]; } else { if (err == SQLITE_DONE) { break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; GWDebugLog(@"retry %i", retry); RELEASE (arp); if (retry++ >= MAX_RETRY) { NSLog(@"timeout for query: %@", query); NSLog(@"%s", sqlite3_errmsg(db)); break; } } else { NSLog(@"error at: %@", query); NSLog(@"%i %s", err, sqlite3_errmsg(db)); break; } } } sqlite3_finalize(stmt); } else { NSLog(@"error at: %@", query); NSLog(@"%s", sqlite3_errmsg(db)); } return lines; } - (int)getIntEntry:(NSString *)query { NSArray *result = [self resultsOfQuery: query]; if ([result count]) { return [[[[result objectAtIndex: 0] allValues] objectAtIndex: 0] intValue]; } return INT_MAX; } - (float)getFloatEntry:(NSString *)query { NSArray *result = [self resultsOfQuery: query]; if ([result count]) { return [[[[result objectAtIndex: 0] allValues] objectAtIndex: 0] floatValue]; } return FLT_MAX; } - (NSString *)getStringEntry:(NSString *)query { NSArray *result = [self resultsOfQuery: query]; if ([result count]) { return [[[result objectAtIndex: 0] allValues] objectAtIndex: 0]; } return nil; } - (NSData *)getBlobEntry:(NSString *)query { NSArray *result = [self resultsOfQuery: query]; if ([result count]) { return [[[result objectAtIndex: 0] allValues] objectAtIndex: 0]; } return nil; } - (BOOL)createFunctionWithName:(NSString *)fname argumentsCount:(int)nargs userFunction:(void *)funct { return (sqlite3_create_function(db, [fname UTF8String], nargs, SQLITE_UTF8, 0, funct, 0, 0) == SQLITE_OK); } - (int)lastInsertRowId { return sqlite3_last_insert_rowid(db); } @end @implementation SQLite (PreparedStatements) - (id)statementForQuery:(NSString *)query withIdentifier:(id)identifier bindings:(int)firstTipe, ... { SQLitePreparedStatement *statement = [preparedStatements objectForKey: identifier]; if (statement == nil) { statement = [SQLitePreparedStatement statementWithQuery: query onDb: db]; if (statement == nil) { return nil; } [preparedStatements setObject: statement forKey: identifier]; } if ([statement expired] && ([statement prepare] == NO)) { [preparedStatements removeObjectForKey: identifier]; return nil; } if (firstTipe != 0) { int type = firstTipe; id name; va_list ap; va_start(ap, firstTipe); while (type != 0) { name = va_arg(ap, id); if (type == SQLITE_INTEGER) { if ([statement bindIntValue: va_arg(ap, int) forName: name] == NO) { va_end(ap); [preparedStatements removeObjectForKey: identifier]; return nil; } } else if (type == SQLITE_FLOAT) { if ([statement bindDoubleValue: va_arg(ap, double) forName: name] == NO) { va_end(ap); [preparedStatements removeObjectForKey: identifier]; return nil; } } else if (type == SQLITE_TEXT) { if ([statement bindTextValue: va_arg(ap, id) forName: name] == NO) { va_end(ap); [preparedStatements removeObjectForKey: identifier]; return nil; } } else if (type == SQLITE_BLOB) { if ([statement bindBlobValue: va_arg(ap, id) forName: name] == NO) { va_end(ap); [preparedStatements removeObjectForKey: identifier]; return nil; } } else { va_end(ap); [preparedStatements removeObjectForKey: identifier]; return nil; } type = va_arg(ap, int); } va_end(ap); } return statement; } - (BOOL)executeQueryWithStatement:(SQLitePreparedStatement *)statement { if (statement) { sqlite3_stmt *handle = [statement handle]; int retry = 0; int err; while (1) { err = sqlite3_step(handle); if (err == SQLITE_DONE) { break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; GWDebugLog(@"retry %i", retry); RELEASE (arp); if (retry++ > MAX_RETRY) { NSLog(@"timeout for query: %@", [statement query]); NSLog(@"%s", sqlite3_errmsg(db)); [statement reset]; return NO; } } else { NSLog(@"error at: %@", [statement query]); NSLog(@"%s", sqlite3_errmsg(db)); [statement reset]; return NO; } } [statement reset]; return YES; } return NO; } - (NSArray *)resultsOfQueryWithStatement:(SQLitePreparedStatement *)statement { NSMutableArray *lines = [NSMutableArray array]; if (statement) { sqlite3_stmt *handle = [statement handle]; int retry = 0; int err; int i; while (1) { err = sqlite3_step(handle); if (err == SQLITE_ROW) { NSMutableDictionary *line = [NSMutableDictionary dictionary]; int count = sqlite3_data_count(handle); // we use "<= count" because sqlite sends also // the id of the entry with type = 0 for (i = 0; i <= count; i++) { const char *name = sqlite3_column_name(handle, i); if (name != NULL) { int type = sqlite3_column_type(handle, i); if (type == SQLITE_INTEGER) { [line setObject: [NSNumber numberWithInt: sqlite3_column_int(handle, i)] forKey: [NSString stringWithUTF8String: name]]; } else if (type == SQLITE_FLOAT) { [line setObject: [NSNumber numberWithDouble: sqlite3_column_double(handle, i)] forKey: [NSString stringWithUTF8String: name]]; } else if (type == SQLITE_TEXT) { [line setObject: [NSString stringWithUTF8String: (const char *)sqlite3_column_text(handle, i)] forKey: [NSString stringWithUTF8String: name]]; } else if (type == SQLITE_BLOB) { const void *bytes = sqlite3_column_blob(handle, i); int length = sqlite3_column_bytes(handle, i); [line setObject: [NSData dataWithBytes: bytes length: length] forKey: [NSString stringWithUTF8String: name]]; } } } [lines addObject: line]; } else { if (err == SQLITE_DONE) { break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; GWDebugLog(@"retry %i", retry); RELEASE (arp); if (retry++ > MAX_RETRY) { NSLog(@"timeout for query: %@", [statement query]); NSLog(@"%s", sqlite3_errmsg(db)); break; } } else { NSLog(@"error at: %@", [statement query]); NSLog(@"%i %s", err, sqlite3_errmsg(db)); break; } } } [statement reset]; } return lines; } - (int)getIntEntryWithStatement:(SQLitePreparedStatement *)statement { NSArray *result = [self resultsOfQueryWithStatement: statement]; if ([result count]) { return [[[[result objectAtIndex: 0] allValues] objectAtIndex: 0] intValue]; } return INT_MAX; } - (float)getFloatEntryWithStatement:(SQLitePreparedStatement *)statement { NSArray *result = [self resultsOfQueryWithStatement: statement]; if ([result count]) { return [[[[result objectAtIndex: 0] allValues] objectAtIndex: 0] floatValue]; } return FLT_MAX; } - (NSString *)getStringEntryWithStatement:(SQLitePreparedStatement *)statement { NSArray *result = [self resultsOfQueryWithStatement: statement]; if ([result count]) { return [[[result objectAtIndex: 0] allValues] objectAtIndex: 0]; } return nil; } - (NSData *)getBlobEntryWithStatement:(SQLitePreparedStatement *)statement { NSArray *result = [self resultsOfQueryWithStatement: statement]; if ([result count]) { return [[[result objectAtIndex: 0] allValues] objectAtIndex: 0]; } return nil; } @end @implementation SQLitePreparedStatement - (void)dealloc { if (handle != NULL) { sqlite3_finalize(handle); } RELEASE (query); [super dealloc]; } + (id)statementWithQuery:(NSString *)aquery onDb:(sqlite3 *)dbptr { return TEST_AUTORELEASE ([[self alloc] initWithQuery: aquery onDb: dbptr]); } - (id)initWithQuery:(NSString *)aquery onDb:(sqlite3 *)dbptr { self = [super init]; if (self) { ASSIGN (query, stringForQuery(aquery)); db = dbptr; handle = NULL; if (sqlite3_prepare(db, [query UTF8String], -1, &handle, NULL) != SQLITE_OK) { NSLog(@"%s", sqlite3_errmsg(db)); DESTROY (self); } } return self; } - (BOOL)bindIntValue:(int)value forName:(NSString *)name { int index = sqlite3_bind_parameter_index(handle, [name UTF8String]); if (index != 0) { return (sqlite3_bind_int(handle, index, value) == SQLITE_OK); } return NO; } - (BOOL)bindDoubleValue:(double)value forName:(NSString *)name { int index = sqlite3_bind_parameter_index(handle, [name UTF8String]); if (index != 0) { return (sqlite3_bind_double(handle, index, value) == SQLITE_OK); } return NO; } - (BOOL)bindTextValue:(NSString *)value forName:(NSString *)name { int index = sqlite3_bind_parameter_index(handle, [name UTF8String]); if (index != 0) { return (sqlite3_bind_text(handle, index, [value UTF8String], -1, SQLITE_TRANSIENT) == SQLITE_OK); } return NO; } - (BOOL)bindBlobValue:(NSData *)value forName:(NSString *)name { int index = sqlite3_bind_parameter_index(handle, [name UTF8String]); if (index != 0) { const void *bytes = [value bytes]; return (sqlite3_bind_blob(handle, index, bytes, [value length], SQLITE_TRANSIENT) == SQLITE_OK); } return NO; } - (BOOL)expired { return (sqlite3_expired(handle) != 0); } - (BOOL)prepare { if (sqlite3_prepare(db, [query UTF8String], -1, &handle, NULL) != SQLITE_OK) { NSLog(@"%s", sqlite3_errmsg(db)); return NO; } return YES; } - (BOOL)reset { return (sqlite3_reset(handle) == SQLITE_OK); } - (BOOL)finalizeStatement { int err = sqlite3_finalize(handle); if (err == SQLITE_OK) { handle = NULL; return YES; } return NO; } - (NSString *)query { return query; } - (sqlite3_stmt *)handle { return handle; } @end NSString *stringForQuery(NSString *str) { NSRange range, subRange; NSMutableString *querystr; range = NSMakeRange(0, [str length]); subRange = [str rangeOfString: @"'" options: NSLiteralSearch range: range]; if (subRange.location == NSNotFound) { return str; } querystr = [NSMutableString stringWithString: str]; while ((subRange.location != NSNotFound) && (range.length > 0)) { subRange = [querystr rangeOfString: @"'" options: NSLiteralSearch range: range]; if (subRange.location != NSNotFound) { [querystr replaceCharactersInRange: subRange withString: @"''"]; } range.location = subRange.location + 2; if ([querystr length] < range.location) { range.length = 0; } else { range.length = [querystr length] - range.location; } } return querystr; } gworkspace-1.1.0/GWMetadata/MDKit/Version0000644000175000001440000000016313214346537017425 0ustar multixusers MAJOR_VERSION=0 MINOR_VERSION=1 SUBMINOR_VERSION=0 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} gworkspace-1.1.0/GWMetadata/MDKit/config.h0000644000175000001440000000402314523013704017461 0ustar multixusers/* MDKit/config.h. Generated from config.h.in by configure. */ /* MDKit/config.h.in. Generated from configure.ac by autoheader. */ /* debug logging */ #define GW_DEBUG_LOG 0 /* Define to 1 if you have the header file. */ /* #undef HAVE_DIR_H */ /* Define to 1 if you have the `geteuid' function. */ #define HAVE_GETEUID 1 /* Define to 1 if you have the `getlogin' function. */ #define HAVE_GETLOGIN 1 /* Define to 1 if you have the `getpwnam' function. */ #define HAVE_GETPWNAM 1 /* Define to 1 if you have the `getpwuid' function. */ #define HAVE_GETPWUID 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `sqlite3' library (-lsqlite3). */ #define HAVE_LIBSQLITE3 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Path to unzip */ #define UNZIP_PATH "/usr/bin/unzip" gworkspace-1.1.0/GWMetadata/MDKit/config.h.in0000644000175000001440000000356214623464077020113 0ustar multixusers/* MDKit/config.h.in. Generated from configure.ac by autoheader. */ /* debug logging */ #undef GW_DEBUG_LOG /* Define to 1 if you have the header file. */ #undef HAVE_DIR_H /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getlogin' function. */ #undef HAVE_GETLOGIN /* Define to 1 if you have the `getpwnam' function. */ #undef HAVE_GETPWNAM /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `sqlite3' library (-lsqlite3). */ #undef HAVE_LIBSQLITE3 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Path to unzip */ #undef UNZIP_PATH gworkspace-1.1.0/GWMetadata/Preferences/0000755000175000001440000000000014752464315017351 5ustar multixusersgworkspace-1.1.0/GWMetadata/Preferences/.gwdir0000644000175000001440000000037613214346537020471 0ustar multixusers{ fsn_info_type = <*I0>; geometry = "738 288 450 300 0 0 1600 1176 "; lastselection = ( "/home/enrico/Butt/GNUstep/CopyPix/AA/Preferences/Resources/English.lproj" ); singlenode = <*BN>; spatial = <*BY>; viewtype = Browser; }gworkspace-1.1.0/GWMetadata/Preferences/CategoriesEditor.h0000644000175000001440000000306514751213523022752 0ustar multixusers/* CategoriesEditor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef CATEGORIES_EDITOR_H #define CATEGORIES_EDITOR_H #include #include @class CategoryView; @interface CategoriesEditor : NSView { NSMutableDictionary *categories; NSMutableArray *catviews; id mdindexing; } - (void)setMdindexing:(id)anobject; - (void)categoryViewDidChangeState:(CategoryView *)view; - (void)moveCategoryViewAtIndex:(int)srcind toIndex:(int)dstind; - (void)applyChanges; - (void)revertChanges; - (void)tile; @end @interface NSDictionary (CategorySort) - (NSComparisonResult)compareAccordingToIndex:(NSDictionary *)dict; @end #endif // CATEGORIES_EDITOR_H gworkspace-1.1.0/GWMetadata/Preferences/CategoriesEditor.m0000644000175000001440000001524114751213523022756 0ustar multixusers/* CategoriesEditor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "CategoriesEditor.h" #include "CategoryView.h" #include "MDIndexing.h" #define LINEH (28.0) @implementation CategoriesEditor - (void)dealloc { RELEASE (categories); RELEASE (catviews); [super dealloc]; } - (id)initWithFrame:(NSRect)rect { self = [super initWithFrame: rect]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *dictpath = [bundle pathForResource: @"categories" ofType: @"plist"]; NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: dictpath]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *domain; NSArray *catnames; unsigned i; if (dict == nil) { [NSException raise: NSInternalInconsistencyException format: @"\"%@\" doesn't contain a dictionary!", dictpath]; } [defaults synchronize]; domain = [defaults persistentDomainForName: @"MDKQuery"]; if (domain == nil) { domain = [NSDictionary dictionaryWithObject: dict forKey: @"categories"]; [defaults setPersistentDomain: domain forName: @"MDKQuery"]; [defaults synchronize]; } else { NSDictionary *catdict = [domain objectForKey: @"categories"]; if ((catdict == nil) || ([catdict count] == 0)) { NSMutableDictionary *mdom = [domain mutableCopy]; [mdom setObject: dict forKey: @"categories"]; [defaults setPersistentDomain: mdom forName: @"MDKQuery"]; [defaults synchronize]; RELEASE (mdom); } } categories = [[domain objectForKey: @"categories"] mutableCopy]; catnames = [categories keysSortedByValueUsingSelector: @selector(compareAccordingToIndex:)]; catviews = [NSMutableArray new]; for (i = 0; i < [catnames count]; i++) { NSString *catname = [catnames objectAtIndex: i]; NSDictionary *catinfo = [categories objectForKey: catname]; CategoryView *cview = [[CategoryView alloc] initWithCategoryInfo: catinfo inEditor: self]; [catviews addObject: cview]; [self addSubview: cview]; RELEASE (cview); } } return self; } - (void)setMdindexing:(id)anobject { mdindexing = anobject; [mdindexing searchResultDidEndEditing]; } - (void)categoryViewDidChangeState:(CategoryView *)view { [mdindexing searchResultDidStartEditing]; } - (void)moveCategoryViewAtIndex:(int)srcind toIndex:(int)dstind { CategoryView *view = [catviews objectAtIndex: srcind]; id dummy = [NSString string]; int i; RETAIN (view); [catviews replaceObjectAtIndex: srcind withObject: dummy]; [catviews insertObject: view atIndex: dstind]; [catviews removeObject: dummy]; RELEASE (view); for (i = 0; i < [catviews count]; i++) { [[catviews objectAtIndex: i] setIndex: i]; } [self tile]; [self setNeedsDisplay: YES]; [mdindexing searchResultDidStartEditing]; } - (void)applyChanges { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *newcat = [NSMutableDictionary dictionary]; NSMutableDictionary *domain; int i; for (i = 0; i < [catviews count]; i++) { NSDictionary *catinfo = [[catviews objectAtIndex: i] categoryInfo]; NSString *catname = [catinfo objectForKey: @"category_name"]; [newcat setObject: catinfo forKey: catname]; } [defaults synchronize]; domain = [[defaults persistentDomainForName: @"MDKQuery"] mutableCopy]; [domain setObject: newcat forKey: @"categories"]; [defaults setPersistentDomain: domain forName: @"MDKQuery"]; RELEASE (domain); [defaults synchronize]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"MDKQueryCategoriesDidChange" object: nil userInfo: nil]; [mdindexing searchResultDidEndEditing]; } - (void)revertChanges { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *domain; NSArray *catnames; unsigned i; [defaults synchronize]; domain = [defaults persistentDomainForName: @"MDKQuery"]; DESTROY (categories); categories = [[domain objectForKey: @"categories"] mutableCopy]; catnames = [categories keysSortedByValueUsingSelector: @selector(compareAccordingToIndex:)]; while ([catviews count]) { CategoryView *cview = [catviews objectAtIndex: 0]; [cview removeFromSuperview]; [catviews removeObject: cview]; } for (i = 0; i < [catnames count]; i++) { NSString *catname = [catnames objectAtIndex: i]; NSDictionary *catinfo = [categories objectForKey: catname]; CategoryView *cview = [[CategoryView alloc] initWithCategoryInfo: catinfo inEditor: self]; [catviews addObject: cview]; [self addSubview: cview]; RELEASE (cview); } [self tile]; [mdindexing searchResultDidEndEditing]; } - (void)tile { NSView *sview = [self superview]; float sh = (sview != nil) ? [sview bounds].size.height : 0.0; NSRect rect = [self frame]; int count = [catviews count]; float vspace = count * LINEH; int i; rect.size.height = (vspace > sh) ? vspace : sh; vspace = rect.size.height; [self setFrame: rect]; for (i = 0; i < count; i++) { vspace -= LINEH; [[catviews objectAtIndex: i] setFrameOrigin: NSMakePoint(0, vspace)]; } } - (void)viewDidMoveToSuperview { [super viewDidMoveToSuperview]; [self tile]; } @end @implementation NSDictionary (CategorySort) - (NSComparisonResult)compareAccordingToIndex:(NSDictionary *)dict { NSNumber *p1 = [self objectForKey: @"index"]; NSNumber *p2 = [dict objectForKey: @"index"]; return [p1 compare: p2]; } @end gworkspace-1.1.0/GWMetadata/Preferences/CategoryView.h0000644000175000001440000000441214751213523022123 0ustar multixusers/* CategoryView.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef CATEGORIES_VIEW_H #define CATEGORIES_VIEW_H #include #include #include @class NSButton; @class NSImage; @class NSColor; @class CViewTitleField; @class CategoriesEditor; @interface CategoryView : NSView { NSMutableDictionary *catinfo; CategoriesEditor *editor; NSButton *stateButton; NSImage *icon; CViewTitleField *titleField; NSColor *backcolor; NSImage *dragImage; BOOL isDragTarget; NSRect targetRects[2]; int insertpos; } - (id)initWithCategoryInfo:(NSDictionary *)info inEditor:(CategoriesEditor *)aneditor; - (NSDictionary *)categoryInfo; - (int)index; - (void)setIndex:(int)index; - (void)createDragImage; - (void)stateButtonAction:(id)sender; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end @interface CViewTitleField : NSTextField { CategoryView *cview; } - (id)initWithFrame:(NSRect)rect inCategoryView:(CategoryView *)view; @end #endif // CATEGORIES_VIEW_H gworkspace-1.1.0/GWMetadata/Preferences/CategoryView.m0000644000175000001440000002341214751213523022131 0ustar multixusers/* CategoryView.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "CategoryView.h" #include "CategoriesEditor.h" #define VIEWW 400 #define VIEWH 28 #define SIZEH 16 #define ORY ((VIEWH - SIZEH) / 2) #define MARGIN 6 #define ICONSIZE 24 #define ICONPOINT NSMakePoint(MARGIN * 2 + SIZEH, ((VIEWH - ICONSIZE) / 2)) #define BUTTRECT NSMakeRect(MARGIN, ORY, SIZEH, SIZEH) #define TFIELDORX (MARGIN * 3 + SIZEH + ICONSIZE) #define TFIELDRECT NSMakeRect(TFIELDORX, ORY, VIEWW - TFIELDORX, SIZEH) #define UP 0 #define DOWN 1 @implementation CategoryView - (void)dealloc { RELEASE (catinfo); RELEASE (icon); RELEASE (backcolor); RELEASE (dragImage); [super dealloc]; } - (id)initWithCategoryInfo:(NSDictionary *)info inEditor:(CategoriesEditor *)aneditor { self = [super initWithFrame: NSMakeRect(0, 0, VIEWW, VIEWH)]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *imagepath; NSArray *rowcolors; NSString *name; BOOL active; catinfo = [info mutableCopy]; editor = aneditor; stateButton = [[NSButton alloc] initWithFrame: BUTTRECT]; [stateButton setButtonType: NSSwitchButton]; [stateButton setImage: [NSImage imageNamed: @"common_SwitchOff"]]; [stateButton setAlternateImage: [NSImage imageNamed: @"common_SwitchOn"]]; [stateButton setImagePosition: NSImageOnly]; active = [[catinfo objectForKey: @"active"] boolValue]; [stateButton setState: (active ? NSOnState : NSOffState)]; [stateButton setTarget: self]; [stateButton setAction: @selector(stateButtonAction:)]; [self addSubview: stateButton]; RELEASE (stateButton); imagepath = [bundle pathForResource: [catinfo objectForKey: @"icon"] ofType: @"tiff"]; icon = [[NSImage alloc] initWithContentsOfFile: imagepath]; titleField = [[CViewTitleField alloc] initWithFrame: TFIELDRECT inCategoryView: self]; name = NSLocalizedString([catinfo objectForKey: @"menu_name"], @""); [titleField setStringValue: name]; [self addSubview: titleField]; RELEASE (titleField); rowcolors = [NSColor controlAlternatingRowBackgroundColors]; ASSIGN (backcolor, [rowcolors objectAtIndex: (([self index] + 2) % 2)]); [self createDragImage]; isDragTarget = NO; targetRects[0] = NSMakeRect(0, VIEWH / 2, VIEWW, VIEWH); targetRects[1] = NSMakeRect(0, 0, VIEWW, VIEWH / 2); insertpos = UP; [self registerForDraggedTypes: [NSArray arrayWithObject: @"MDKCategoryPboardType"]]; } return self; } - (NSDictionary *)categoryInfo { return catinfo; } - (int)index { return [[catinfo objectForKey: @"index"] intValue]; } - (void)setIndex:(int)index { NSArray *rowcolors = [NSColor controlAlternatingRowBackgroundColors]; [catinfo setObject: [NSNumber numberWithInt: index] forKey: @"index"]; ASSIGN (backcolor, [rowcolors objectAtIndex: ((index + 2) % 2)]); [self setNeedsDisplay: YES]; } - (void)createDragImage { NSSize size = NSMakeSize(ICONSIZE + MARGIN + VIEWW - TFIELDORX, ICONSIZE); NSRect r = [titleField frame]; NSBitmapImageRep *rep = nil; dragImage = [[NSImage alloc] initWithSize: size]; [dragImage lockFocus]; [icon compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; r.origin.x = ICONSIZE + MARGIN; [[titleField cell] drawWithFrame: r inView: self]; r = NSMakeRect(0, 0, size.width, size.height); rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: r]; [dragImage addRepresentation: rep]; RELEASE (rep); [dragImage unlockFocus]; } - (void)stateButtonAction:(id)sender { BOOL active = ([sender state] == NSOnState); [catinfo setObject: [NSNumber numberWithBool: active] forKey: @"active"]; [editor categoryViewDidChangeState: self]; } - (void)mouseDown:(NSEvent *)theEvent { NSPoint location = [theEvent locationInWindow]; NSEvent *nextEvent = nil; int dragdelay = 0; BOOL startdnd = NO; NSSize offset; while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { [[self window] postEvent: nextEvent atStart: NO]; break; } else { if (dragdelay < 5) { dragdelay++; } else { NSPoint p = [nextEvent locationInWindow]; offset = NSMakeSize(p.x - location.x, p.y - location.y); startdnd = YES; break; } } } if (startdnd) { NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; NSArray *dndtypes = [NSArray arrayWithObject: @"MDKCategoryPboardType"]; NSString *str = [NSString stringWithFormat: @"%i", [self index]]; [pb declareTypes: dndtypes owner: nil]; [pb setString: str forType: @"MDKCategoryPboardType"]; [self dragImage: dragImage at: NSZeroPoint offset: offset event: theEvent pasteboard: pb source: self slideBack: YES]; } } - (void)drawRect:(NSRect)rect { [backcolor set]; NSRectFill(rect); [icon compositeToPoint: ICONPOINT operation: NSCompositeSourceOver]; if (isDragTarget) { NSRect r = [self bounds]; NSPoint p[2]; if (insertpos == UP) { p[0] = NSMakePoint(0, r.size.height - 1); p[1] = NSMakePoint(r.size.width, r.size.height - 1); } else { p[0] = NSMakePoint(0, 1); p[1] = NSMakePoint(r.size.width, 1); } [[NSColor blackColor] set]; [NSBezierPath setDefaultLineWidth: 2.0]; [NSBezierPath strokeLineFromPoint: p[0] toPoint: p[1]]; } } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } - (BOOL)ignoreModifierKeysWhileDragging { return YES; } - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; if ([[pb types] containsObject: @"MDKCategoryPboardType"]) { NSPoint p = [self convertPoint: [sender draggingLocation] fromView: nil]; NSString *pbstr = [pb stringForType: @"MDKCategoryPboardType"]; int otherind = [pbstr intValue]; if (otherind != [self index]) { insertpos = ([self mouse: p inRect: targetRects[0]] ? UP : DOWN); isDragTarget = YES; [self setNeedsDisplay: YES]; return NSDragOperationEvery; } } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { if (isDragTarget) { NSPasteboard *pb = [sender draggingPasteboard]; NSPoint p = [self convertPoint: [sender draggingLocation] fromView: nil]; int pos = ([self mouse: p inRect: targetRects[0]] ? UP : DOWN); if (pos != insertpos) { NSString *pbstr = [pb stringForType: @"MDKCategoryPboardType"]; int otherind = [pbstr intValue]; int infoind = [self index]; if (((pos == UP) && (otherind != infoind - 1)) || ((pos == DOWN) && (otherind != infoind + 1))) { insertpos = pos; [self setNeedsDisplay: YES]; return NSDragOperationEvery; } } else { return NSDragOperationEvery; } } if (isDragTarget) { [self setNeedsDisplay: YES]; isDragTarget = NO; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; [self setNeedsDisplay: YES]; } - (BOOL)prepareForDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSString *pbstr = [pb stringForType: @"MDKCategoryPboardType"]; int otherind = [pbstr intValue]; int infoind = [self index]; if (((insertpos == UP) && (otherind == infoind - 1)) || ((insertpos == DOWN) && (otherind == infoind + 1))) { isDragTarget = NO; [self setNeedsDisplay: YES]; } return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return isDragTarget; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSString *pbstr = [pb stringForType: @"MDKCategoryPboardType"]; int index; isDragTarget = NO; [self setNeedsDisplay: YES]; if (insertpos == UP) { index = [self index]; } else { index = [self index] + 1; } [editor moveCategoryViewAtIndex: [pbstr intValue] toIndex: index]; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } @end @implementation CViewTitleField - (id)initWithFrame:(NSRect)rect inCategoryView:(CategoryView *)view { self = [super initWithFrame: rect]; if (self) { cview = view; [self setBezeled: NO]; [self setEditable: NO]; [self setSelectable: NO]; [self setDrawsBackground: NO]; } return self; } - (void)mouseDown:(NSEvent *)theEvent { [cview mouseDown: theEvent]; } @end gworkspace-1.1.0/GWMetadata/Preferences/GNUmakefile0000644000175000001440000000127713231754602021422 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = MDIndexing BUNDLE_EXTENSION = .prefPane MDIndexing_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall MDIndexing_OBJC_FILES = \ MDIndexing.m \ CategoriesEditor.m \ CategoryView.m \ StartAppWin.m MDIndexing_PRINCIPAL_CLASS = MDIndexing MDIndexing_RESOURCE_FILES = \ MDIndexing.tiff \ Resources/categories.plist \ Resources/Images/* \ Resources/English.lproj ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ADDITIONAL_GUI_LIBS += -lGSPreferencePanes else ADDITIONAL_GUI_LIBS += -lPreferencePanes endif include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/Preferences/GNUmakefile.postamble0000644000175000001440000000120013231754602023371 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/Preferences/GNUmakefile.preamble0000644000175000001440000000115613214346537023211 0ustar multixusers # Additional flags to pass to the preprocessor #ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search #ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker #ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation #ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWMetadata/Preferences/MDIndexing.h0000644000175000001440000000720414751213523021503 0ustar multixusers/* MDIndexing.h * * Copyright (C) 2006-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #ifdef __APPLE__ #import #else #import #endif @class NSMatrix; @class NSScrollView; @class NSTextView; @class NSButton; @class StartAppWin; @protocol MDExtractorProtocol @end @interface MDIndexing : NSPreferencePane { IBOutlet id tabView; // // Paths & Status // IBOutlet id indexedTitle; IBOutlet id indexedScroll; NSMatrix *indexedMatrix; IBOutlet id indexedAdd; IBOutlet id indexedRemove; NSMutableArray *indexedPaths; IBOutlet id excludedTitle; IBOutlet id excludedScroll; NSMatrix *excludedMatrix; IBOutlet id excludedAdd; IBOutlet id excludedRemove; NSMutableArray *excludedPaths; IBOutlet id suffixTitle; IBOutlet id suffixScroll; NSMatrix *suffixMatrix; IBOutlet id suffixField; IBOutlet id suffixAdd; IBOutlet id suffixRemove; NSMutableArray *excludedSuffixes; BOOL indexingEnabled; IBOutlet id enableSwitch; IBOutlet id statusButton; IBOutlet id errorButton; IBOutlet id revertButton; IBOutlet id applyButton; BOOL loaded; NSPreferencePaneUnselectReply pathsUnselReply; id mdextractor; StartAppWin *startAppWin; NSString *indexedStatusPath; NSDistributedLock *indexedStatusLock; IBOutlet id statusWindow; IBOutlet NSScrollView *statusScroll; NSTextView *statusView; NSTimer *statusTimer; NSString *errorLogPath; IBOutlet id errorWindow; IBOutlet NSScrollView *errorScroll; NSTextView *errorView; // // Search Results // IBOutlet id searchResTitle; IBOutlet id searchResSubtitle; IBOutlet id searchResScroll; IBOutlet id searchResEditor; IBOutlet id searchResRevert; IBOutlet id searchResApply; NSPreferencePaneUnselectReply searchResultsReply; NSFileManager *fm; NSNotificationCenter *nc; NSNotificationCenter *dnc; } - (void)indexedMatrixAction:(id)sender; - (IBAction)indexedButtAction:(id)sender; - (void)excludedMatrixAction:(id)sender; - (IBAction)excludedButtAction:(id)sender; - (void)suffixMatrixAction:(id)sender; - (IBAction)suffixButtAction:(id)sender; - (IBAction)enableSwitchAction:(id)sender; - (IBAction)revertButtAction:(id)sender; - (IBAction)applyButtAction:(id)sender; - (NSString *)chooseNewPath; - (void)adjustMatrix:(NSMatrix *)matrix; - (void)setupDbPaths; - (void)connectMDExtractor; - (void)mdextractorConnectionDidDie:(NSNotification *)notif; - (IBAction)statusButtAction:(id)sender; - (IBAction)errorButtAction:(id)sender; - (void)readIndexedPathsStatus:(id)sender; - (void)readDefaults; - (void)applyChanges; // // Search Results // - (IBAction)searchResButtAction:(id)sender; - (void)searchResultDidStartEditing; - (void)searchResultDidEndEditing; @end gworkspace-1.1.0/GWMetadata/Preferences/MDIndexing.m0000644000175000001440000010306714751213523021514 0ustar multixusers/* MDIndexing.m * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "MDIndexing.h" #import "CategoriesEditor.h" #import "StartAppWin.h" BOOL subPathOfPath(NSString *p1, NSString *p2); BOOL isDotFile(NSString *path); @implementation MDIndexing - (void)dealloc { if (statusTimer && [statusTimer isValid]) { [statusTimer invalidate]; } DESTROY (statusTimer); TEST_RELEASE (indexedPaths); TEST_RELEASE (excludedPaths); TEST_RELEASE (excludedSuffixes); TEST_RELEASE (startAppWin); TEST_RELEASE (indexedStatusPath); TEST_RELEASE (indexedStatusLock); TEST_RELEASE (statusWindow); TEST_RELEASE (errorLogPath); TEST_RELEASE (errorWindow); [super dealloc]; } - (void)mainViewDidLoad { if (loaded == NO) { id cell; CGFloat fonth; int index; NSString *str; NSUInteger i; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; dnc = [NSDistributedNotificationCenter defaultCenter]; indexedPaths = [NSMutableArray new]; excludedPaths = [NSMutableArray new]; excludedSuffixes = [NSMutableArray new]; [self readDefaults]; index = [tabView indexOfTabViewItemWithIdentifier: @"paths"]; [[tabView tabViewItemAtIndex: index] setLabel: NSLocalizedString(@"Paths", @"")]; index = [tabView indexOfTabViewItemWithIdentifier: @"results"]; [[tabView tabViewItemAtIndex: index] setLabel: NSLocalizedString(@"Search Results", @"")]; [indexedScroll setBorderType: NSBezelBorder]; [indexedScroll setHasHorizontalScroller: YES]; [indexedScroll setHasVerticalScroller: YES]; cell = [NSBrowserCell new]; fonth = [[cell font] defaultLineHeightForFont]; indexedMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSRadioModeMatrix prototype: cell numberOfRows: 0 numberOfColumns: 0]; RELEASE (cell); [indexedMatrix setIntercellSpacing: NSZeroSize]; [indexedMatrix setCellSize: NSMakeSize([indexedScroll contentSize].width, fonth)]; [indexedMatrix setAutoscroll: YES]; [indexedMatrix setAllowsEmptySelection: YES]; [indexedScroll setDocumentView: indexedMatrix]; RELEASE (indexedMatrix); for (i = 0; i < [indexedPaths count]; i++) { NSString *name = [indexedPaths objectAtIndex: i]; NSUInteger count = [[indexedMatrix cells] count]; [indexedMatrix insertRow: count]; cell = [indexedMatrix cellAtRow: count column: 0]; [cell setStringValue: name]; [cell setLeaf: YES]; } [self adjustMatrix: indexedMatrix]; [indexedMatrix sizeToCells]; [indexedMatrix setTarget: self]; [indexedMatrix setAction: @selector(indexedMatrixAction:)]; [indexedRemove setEnabled: ([[excludedMatrix cells] count] > 0)]; [excludedScroll setBorderType: NSBezelBorder]; [excludedScroll setHasHorizontalScroller: YES]; [excludedScroll setHasVerticalScroller: YES]; excludedMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSRadioModeMatrix prototype: [[NSBrowserCell new] autorelease] numberOfRows: 0 numberOfColumns: 0]; [excludedMatrix setIntercellSpacing: NSZeroSize]; [excludedMatrix setCellSize: NSMakeSize([excludedScroll contentSize].width, fonth)]; [excludedMatrix setAutoscroll: YES]; [excludedMatrix setAllowsEmptySelection: YES]; [excludedScroll setDocumentView: excludedMatrix]; RELEASE (excludedMatrix); for (i = 0; i < [excludedPaths count]; i++) { NSString *path = [excludedPaths objectAtIndex: i]; NSUInteger count = [[excludedMatrix cells] count]; [excludedMatrix insertRow: count]; cell = [excludedMatrix cellAtRow: count column: 0]; [cell setStringValue: path]; [cell setLeaf: YES]; } [self adjustMatrix: excludedMatrix]; [excludedMatrix sizeToCells]; [excludedMatrix setTarget: self]; [excludedMatrix setAction: @selector(excludedMatrixAction:)]; [excludedRemove setEnabled: ([[excludedMatrix cells] count] > 0)]; [suffixScroll setBorderType: NSBezelBorder]; [suffixScroll setHasHorizontalScroller: YES]; [suffixScroll setHasVerticalScroller: YES]; suffixMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSRadioModeMatrix prototype: [[NSBrowserCell new] autorelease] numberOfRows: 0 numberOfColumns: 0]; [suffixMatrix setIntercellSpacing: NSZeroSize]; [suffixMatrix setCellSize: NSMakeSize([suffixScroll contentSize].width, fonth)]; [suffixMatrix setAutoscroll: YES]; [suffixMatrix setAllowsEmptySelection: YES]; [suffixScroll setDocumentView: suffixMatrix]; RELEASE (suffixMatrix); for (i = 0; i < [excludedSuffixes count]; i++) { NSString *path = [excludedSuffixes objectAtIndex: i]; NSUInteger count = [[suffixMatrix cells] count]; [suffixMatrix insertRow: count]; cell = [suffixMatrix cellAtRow: count column: 0]; [cell setStringValue: path]; [cell setLeaf: YES]; } [self adjustMatrix: suffixMatrix]; [suffixMatrix sizeToCells]; [suffixMatrix setTarget: self]; [suffixMatrix setAction: @selector(suffixMatrixAction:)]; [suffixField setStringValue: @""]; [suffixRemove setEnabled: ([[suffixMatrix cells] count] > 0)]; pathsUnselReply = NSUnselectNow; searchResultsReply = NSUnselectNow; loaded = YES; [revertButton setEnabled: NO]; [applyButton setEnabled: NO]; startAppWin = [[StartAppWin alloc] init]; [statusWindow setTitle: NSLocalizedString(@"Status", @"")]; [statusWindow setFrameUsingName: @"mdindexing_status_win"]; [statusWindow setDelegate: self]; [statusScroll setBorderType: NSBezelBorder]; [statusScroll setHasHorizontalScroller: NO]; [statusScroll setHasVerticalScroller: YES]; statusView = [[NSTextView alloc] initWithFrame: [[statusScroll contentView] bounds]]; [statusView setEditable: NO]; [statusView setSelectable: NO]; [statusView setVerticallyResizable: YES]; [statusView setHorizontallyResizable: NO]; [statusView setFont: [NSFont userFixedPitchFontOfSize: 0]]; [statusScroll setDocumentView: statusView]; RELEASE (statusView); [errorWindow setTitle: NSLocalizedString(@"Error log", @"")]; [errorWindow setFrameUsingName: @"mdindexing_error_win"]; [errorWindow setDelegate: self]; [errorScroll setBorderType: NSBezelBorder]; [errorScroll setHasHorizontalScroller: NO]; [errorScroll setHasVerticalScroller: YES]; errorView = [[NSTextView alloc] initWithFrame: [[errorScroll contentView] bounds]]; [errorView setEditable: NO]; [errorView setSelectable: NO]; [errorView setVerticallyResizable: YES]; [errorView setHorizontallyResizable: YES]; [errorView setFont: [NSFont userFixedPitchFontOfSize: 0]]; [errorScroll setDocumentView: errorView]; RELEASE (errorView); // // Search Results // str = @"Drag categories to change the order in which results appear."; [searchResTitle setStringValue: NSLocalizedString(str, @"")]; str = @"Only selected categories will appear in search results."; [searchResSubtitle setStringValue: NSLocalizedString(str, @"")]; [searchResEditor setMdindexing: self]; [searchResApply setTitle: NSLocalizedString(@"Apply", @"")]; indexedStatusPath = nil; errorLogPath = nil; statusTimer = nil; [self setupDbPaths]; mdextractor = nil; [self connectMDExtractor]; } } - (NSPreferencePaneUnselectReply)shouldUnselect { if ((pathsUnselReply == NSUnselectNow) && (searchResultsReply == NSUnselectNow)) { return NSUnselectNow; } return NSUnselectCancel; } - (void)didSelect { if (mdextractor == nil) { if (NSRunAlertPanel(nil, NSLocalizedString(@"The mdextractor connection died.\nDo you want to restart it?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil)) { [self connectMDExtractor]; } } } - (void)willUnselect { if ([statusWindow isVisible]) { [statusWindow close]; } if ([errorWindow isVisible]) { [errorWindow close]; } } - (void)indexedMatrixAction:(id)sender { [indexedRemove setEnabled: ([[indexedMatrix cells] count] > 0)]; } - (IBAction)indexedButtAction:(id)sender { NSPreferencePaneUnselectReply oldReply = pathsUnselReply; NSArray *cells = [indexedMatrix cells]; NSUInteger count = [cells count]; id cell; NSUInteger i; #define IND_ERR_RETURN(x) \ do { \ NSRunAlertPanel(nil, \ NSLocalizedString(x, @""), \ NSLocalizedString(@"Ok", @""), \ nil, \ nil); \ pathsUnselReply = oldReply; \ return; \ } while (0) if (sender == indexedAdd) { NSString *path; pathsUnselReply = NSUnselectCancel; path = [self chooseNewPath]; if (path) { if (isDotFile(path)) { IND_ERR_RETURN (@"Paths containing \'.\' are not indexable!"); } if ([indexedPaths containsObject: path]) { IND_ERR_RETURN (@"The path is already present!"); } for (i = 0; i < [indexedPaths count]; i++) { if (subPathOfPath([indexedPaths objectAtIndex: i], path)) { IND_ERR_RETURN (@"This path is a subpath of an already indexable path!"); } } for (i = 0; i < [excludedPaths count]; i++) { NSString *exclpath = [excludedPaths objectAtIndex: i]; if ([path isEqual: exclpath] || subPathOfPath(exclpath, path)) { IND_ERR_RETURN (@"This path is excluded from the indexable paths!"); } } [indexedPaths addObject: path]; [indexedMatrix insertRow: count]; cell = [indexedMatrix cellAtRow: count column: 0]; [cell setStringValue: path]; [cell setLeaf: YES]; [self adjustMatrix: indexedMatrix]; [indexedMatrix sizeToCells]; [indexedMatrix selectCellAtRow: count column: 0]; [indexedMatrix sendAction]; } else { pathsUnselReply = oldReply; } } else if (sender == indexedRemove) { cell = [indexedMatrix selectedCell]; if (cell) { NSInteger row, col; [indexedPaths removeObject: [cell stringValue]]; [indexedMatrix getRow: &row column: &col ofCell: cell]; [indexedMatrix removeRow: row]; [self adjustMatrix: indexedMatrix]; [indexedMatrix sizeToCells]; [indexedMatrix sendAction]; pathsUnselReply = NSUnselectCancel; } else { pathsUnselReply = oldReply; } } [revertButton setEnabled: (pathsUnselReply != NSUnselectNow)]; [applyButton setEnabled: (pathsUnselReply != NSUnselectNow)]; } - (void)excludedMatrixAction:(id)sender { [excludedRemove setEnabled: ([[excludedMatrix cells] count] > 0)]; } - (IBAction)excludedButtAction:(id)sender { NSPreferencePaneUnselectReply oldReply = pathsUnselReply; NSArray *cells = [excludedMatrix cells]; NSUInteger count = [cells count]; id cell; NSUInteger i; #define EXCL_ERR_RETURN(x) \ do { \ NSRunAlertPanel(nil, \ NSLocalizedString(x, @""), \ NSLocalizedString(@"Ok", @""), \ nil, \ nil); \ pathsUnselReply = oldReply; \ return; \ } while (0) if (sender == excludedAdd) { NSString *path; pathsUnselReply = NSUnselectCancel; path = [self chooseNewPath]; if (path) { BOOL valid = NO; if (isDotFile(path)) { IND_ERR_RETURN (@"Paths containing \'.\' are not indexable by default!"); } for (i = 0; i < [indexedPaths count]; i++) { if (subPathOfPath([indexedPaths objectAtIndex: i], path)) { valid = YES; break; } } if (valid == NO) { EXCL_ERR_RETURN (@"An excluded path must be a subpath of an indexable path!"); } if ([excludedPaths containsObject: path]) { EXCL_ERR_RETURN (@"The path is already present!"); } for (i = 0; i < [excludedPaths count]; i++) { if (subPathOfPath([excludedPaths objectAtIndex: i], path)) { EXCL_ERR_RETURN (@"This path is a subpath of an already excluded path!"); } } for (i = 0; i < [indexedPaths count]; i++) { NSString *idxpath = [indexedPaths objectAtIndex: i]; if ([path isEqual: idxpath] || subPathOfPath(path, idxpath)) { EXCL_ERR_RETURN (@"This path would exclude a path defined as indexable!"); } } [excludedPaths addObject: path]; [excludedMatrix insertRow: count]; cell = [excludedMatrix cellAtRow: count column: 0]; [cell setStringValue: path]; [cell setLeaf: YES]; [self adjustMatrix: excludedMatrix]; [excludedMatrix sizeToCells]; [excludedMatrix selectCellAtRow: count column: 0]; [excludedMatrix sendAction]; } else { pathsUnselReply = oldReply; } } else if (sender == excludedRemove) { cell = [excludedMatrix selectedCell]; if (cell) { NSInteger row, col; [excludedPaths removeObject: [cell stringValue]]; [excludedMatrix getRow: &row column: &col ofCell: cell]; [excludedMatrix removeRow: row]; [self adjustMatrix: excludedMatrix]; [excludedMatrix sizeToCells]; [excludedMatrix sendAction]; pathsUnselReply = NSUnselectCancel; } else { pathsUnselReply = oldReply; } } [revertButton setEnabled: (pathsUnselReply != NSUnselectNow)]; [applyButton setEnabled: (pathsUnselReply != NSUnselectNow)]; } - (void)suffixMatrixAction:(id)sender { [suffixRemove setEnabled: ([[suffixMatrix cells] count] > 0)]; } - (IBAction)suffixButtAction:(id)sender { NSPreferencePaneUnselectReply oldReply = pathsUnselReply; NSArray *cells = [suffixMatrix cells]; NSUInteger count = [cells count]; id cell; #define SUFF_ERR_RETURN(x) \ do { \ NSRunAlertPanel(nil, \ NSLocalizedString(x, @""), \ NSLocalizedString(@"Ok", @""), \ nil, \ nil); \ pathsUnselReply = oldReply; \ [suffixField setStringValue: @""]; \ return; \ } while (0) if (sender == suffixAdd) { NSString *suff = [suffixField stringValue]; pathsUnselReply = NSUnselectCancel; if ([suff length]) { NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString: @". "]; if ([suff rangeOfCharacterFromSet: set].location != NSNotFound) { SUFF_ERR_RETURN (@"Invalid character in suffix!"); } if ([excludedSuffixes containsObject: suff]) { SUFF_ERR_RETURN (@"The suffix is already present!"); } [excludedSuffixes addObject: suff]; [suffixMatrix insertRow: count]; cell = [suffixMatrix cellAtRow: count column: 0]; [cell setStringValue: suff]; [cell setLeaf: YES]; [self adjustMatrix: suffixMatrix]; [suffixMatrix sizeToCells]; [suffixMatrix selectCellAtRow: count column: 0]; [suffixMatrix sendAction]; } else { pathsUnselReply = oldReply; } } else if (sender == suffixRemove) { cell = [suffixMatrix selectedCell]; if (cell) { NSInteger row, col; [excludedSuffixes removeObject: [cell stringValue]]; [suffixMatrix getRow: &row column: &col ofCell: cell]; [suffixMatrix removeRow: row]; [self adjustMatrix: suffixMatrix]; [suffixMatrix sizeToCells]; [suffixMatrix sendAction]; pathsUnselReply = NSUnselectCancel; } else { pathsUnselReply = oldReply; } } [suffixField setStringValue: @""]; [revertButton setEnabled: (pathsUnselReply != NSUnselectNow)]; [applyButton setEnabled: (pathsUnselReply != NSUnselectNow)]; } - (IBAction)enableSwitchAction:(id)sender { BOOL oldEnabled = indexingEnabled; indexingEnabled = ([enableSwitch state] == NSOnState); [revertButton setEnabled: (oldEnabled != indexingEnabled)]; [applyButton setEnabled: (oldEnabled != indexingEnabled)]; } - (IBAction)revertButtAction:(id)sender { id cell; NSUInteger i; DESTROY (indexedPaths); DESTROY (excludedPaths); DESTROY (excludedSuffixes); indexedPaths = [NSMutableArray new]; excludedPaths = [NSMutableArray new]; excludedSuffixes = [NSMutableArray new]; [self readDefaults]; if ([indexedMatrix numberOfColumns] > 0) { [indexedMatrix removeColumn: 0]; } for (i = 0; i < [indexedPaths count]; i++) { NSString *name = [indexedPaths objectAtIndex: i]; NSUInteger count = [[indexedMatrix cells] count]; [indexedMatrix insertRow: count]; cell = [indexedMatrix cellAtRow: count column: 0]; [cell setStringValue: name]; [cell setLeaf: YES]; } [self adjustMatrix: indexedMatrix]; [indexedMatrix sizeToCells]; [indexedRemove setEnabled: ([[indexedMatrix cells] count] > 0)]; if ([excludedMatrix numberOfColumns] > 0) { [excludedMatrix removeColumn: 0]; } for (i = 0; i < [excludedPaths count]; i++) { NSString *path = [excludedPaths objectAtIndex: i]; NSUInteger count = [[excludedMatrix cells] count]; [excludedMatrix insertRow: count]; cell = [excludedMatrix cellAtRow: count column: 0]; [cell setStringValue: path]; [cell setLeaf: YES]; } [self adjustMatrix: excludedMatrix]; [excludedMatrix sizeToCells]; [excludedRemove setEnabled: ([[excludedMatrix cells] count] > 0)]; if ([suffixMatrix numberOfColumns] > 0) { [suffixMatrix removeColumn: 0]; } for (i = 0; i < [excludedSuffixes count]; i++) { NSString *suff = [excludedSuffixes objectAtIndex: i]; NSUInteger count = [[suffixMatrix cells] count]; [suffixMatrix insertRow: count]; cell = [suffixMatrix cellAtRow: count column: 0]; [cell setStringValue: suff]; [cell setLeaf: YES]; } [self adjustMatrix: suffixMatrix]; [suffixMatrix sizeToCells]; [suffixRemove setEnabled: ([[suffixMatrix cells] count] > 0)]; pathsUnselReply = NSUnselectNow; [revertButton setEnabled: NO]; [applyButton setEnabled: NO]; } - (IBAction)applyButtAction:(id)sender { [self applyChanges]; pathsUnselReply = NSUnselectNow; [revertButton setEnabled: NO]; [applyButton setEnabled: NO]; } - (NSString *)chooseNewPath { NSOpenPanel *openPanel = [NSOpenPanel openPanel]; int result; [openPanel setTitle: NSLocalizedString(@"Choose directory", @"")]; [openPanel setAllowsMultipleSelection: NO]; [openPanel setCanChooseFiles: NO]; [openPanel setCanChooseDirectories: YES]; result = [openPanel runModalForDirectory: nil file: nil types: nil]; if (result == NSOKButton) { return [openPanel filename]; } return nil; } - (void)adjustMatrix:(NSMatrix *)matrix { NSArray *cells = [matrix cells]; if (cells && [cells count]) { NSSize cellsize = [matrix cellSize]; CGFloat margin = 10.0; CGFloat maxw = margin; NSDictionary *fontAttr; NSUInteger i; fontAttr = [NSDictionary dictionaryWithObject: [[cells objectAtIndex: 0] font] forKey: NSFontAttributeName]; for (i = 0; i < [cells count]; i++) { NSString *str = [[cells objectAtIndex: i] stringValue]; CGFloat strw = [str sizeWithAttributes: fontAttr].width + margin; maxw = (strw > maxw) ? strw : maxw; } if (maxw > cellsize.width) { [matrix setCellSize: NSMakeSize(maxw, cellsize.height)]; } } } - (void)setupDbPaths { NSString *dbdir; NSString *lockpath; BOOL isdir; dbdir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; dbdir = [dbdir stringByAppendingPathComponent: @"gmds"]; if (([fm fileExistsAtPath: dbdir isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbdir attributes: nil] == NO) { NSRunAlertPanel(nil, NSLocalizedString(@"unable to create the db directory.", @""), NSLocalizedString(@"Ok", @""), nil, nil); return; } } dbdir = [dbdir stringByAppendingPathComponent: @".db"]; if (([fm fileExistsAtPath: dbdir isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbdir attributes: nil] == NO) { NSRunAlertPanel(nil, NSLocalizedString(@"unable to create the db directory.", @""), NSLocalizedString(@"Ok", @""), nil, nil); return; } } ASSIGN (indexedStatusPath, [dbdir stringByAppendingPathComponent: @"status.plist"]); ASSIGN (errorLogPath, [dbdir stringByAppendingPathComponent: @"error.log"]); lockpath = [dbdir stringByAppendingPathComponent: @"extractors.lock"]; indexedStatusLock = [[NSDistributedLock alloc] initWithPath: lockpath]; } - (void)connectMDExtractor { if (mdextractor == nil) { mdextractor = [NSConnection rootProxyForConnectionWithRegisteredName: @"mdextractor" host: @""]; if (mdextractor == nil) { NSString *cmd; int i; cmd = [NSTask launchPathForTool: @"mdextractor"]; [startAppWin showWindowWithTitle: @"MDIndexing" appName: @"mdextractor" operation: NSLocalizedString(@"starting:", @"") maxProgValue: 80.0]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 1; i <= 80; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; mdextractor = [NSConnection rootProxyForConnectionWithRegisteredName: @"mdextractor" host: @""]; if (mdextractor) { [startAppWin updateProgressBy: 80.0 - i]; break; } } [[startAppWin win] close]; } if (mdextractor) { [mdextractor setProtocolForProxy: @protocol(MDExtractorProtocol)]; RETAIN (mdextractor); [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(mdextractorConnectionDidDie:) name: NSConnectionDidDieNotification object: [mdextractor connectionForProxy]]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact mdextractor!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)mdextractorConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [mdextractor connectionForProxy], NSInternalInconsistencyException); RELEASE (mdextractor); mdextractor = nil; if ([self isSelected]) { if (NSRunAlertPanel(nil, NSLocalizedString(@"The mdextractor connection died.\nDo you want to restart it?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil)) { [self connectMDExtractor]; } } } - (IBAction)statusButtAction:(id)sender { if ([statusWindow isVisible] == NO) { [statusWindow makeKeyAndOrderFront: nil]; [self readIndexedPathsStatus: nil]; if (statusTimer && [statusTimer isValid]) { [statusTimer invalidate]; } DESTROY (statusTimer); statusTimer = [NSTimer scheduledTimerWithTimeInterval: 5.0 target: self selector: @selector(readIndexedPathsStatus:) userInfo: nil repeats: YES]; RETAIN (statusTimer); } } - (IBAction)errorButtAction:(id)sender { NSString *errstr = @""; if ([fm fileExistsAtPath: errorLogPath]) { NS_DURING { errstr = [NSString stringWithContentsOfFile: errorLogPath]; } NS_HANDLER { errstr = @""; } NS_ENDHANDLER } [errorView setString: errstr]; // [errorView sizeToFit]; if ([errorWindow isVisible] == NO) { [errorWindow makeKeyAndOrderFront: nil]; } } - (void)readIndexedPathsStatus:(id)sender { CREATE_AUTORELEASE_POOL(arp); if (indexedStatusPath && [fm isReadableFileAtPath: indexedStatusPath]) { NSArray *status = nil; if ([indexedStatusLock tryLock] == NO) { unsigned sleeps = 0; if ([[indexedStatusLock lockDate] timeIntervalSinceNow] < -20.0) { NS_DURING { [indexedStatusLock breakLock]; } NS_HANDLER { NSLog(@"Unable to break lock %@ ... %@", indexedStatusLock, localException); } NS_ENDHANDLER } for (sleeps = 0; sleeps < 10; sleeps++) { if ([indexedStatusLock tryLock]) { break; } sleeps++; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; } if (sleeps >= 10) { NSLog(@"Unable to obtain lock %@", indexedStatusLock); RELEASE (arp); return; } } status = [NSArray arrayWithContentsOfFile: indexedStatusPath]; [indexedStatusLock unlock]; if (status) { NSMutableString *str = [NSMutableString string]; NSUInteger i; for (i = 0; i < [status count]; i++) { NSDictionary *info = [status objectAtIndex: i]; NSString *path = [info objectForKey: @"path"]; BOOL indexed = [[info objectForKey: @"indexed"] boolValue]; NSNumber *fcount = [info objectForKey: @"count"]; NSDate *startTime = [info objectForKey: @"start_time"]; NSDate *endTime = [info objectForKey: @"end_time"]; NSArray *subPaths = [info objectForKey: @"subpaths"]; [str appendFormat: @"%@\n", path]; [str appendFormat: @" indexed: %@\n", (indexed ? @"YES" : @"NO")]; if (startTime) { [str appendFormat: @" start: %@\n", [startTime description]]; } if (endTime) { [str appendFormat: @" end: %@\n", [endTime description]]; } if (fcount) { [str appendFormat: @" files: %lu\n", [fcount unsignedLongValue]]; } if (subPaths && [subPaths count]) { unsigned j; [str appendString: @" subpaths:\n"]; for (j = 0; j < [subPaths count]; j++) { info = [subPaths objectAtIndex: j]; path = [info objectForKey: @"path"]; indexed = [[info objectForKey: @"indexed"] boolValue]; fcount = [info objectForKey: @"count"]; startTime = [info objectForKey: @"start_time"]; endTime = [info objectForKey: @"end_time"]; [str appendFormat: @" %@\n", path]; [str appendFormat: @" indexed: %@\n", (indexed ? @"YES" : @"NO")]; if (startTime) { [str appendFormat: @" start: %@\n", [startTime description]]; } if (endTime) { [str appendFormat: @" end: %@\n", [endTime description]]; } if (fcount) { [str appendFormat: @" files: %lu\n", [fcount unsignedLongValue]]; } } } [str appendString: @"\n"]; } [statusView setString: str]; [statusView sizeToFit]; } } RELEASE (arp); } - (void)windowWillClose:(NSNotification *)aNotification { id win = [aNotification object]; if (win == statusWindow) { if (statusTimer && [statusTimer isValid]) { [statusTimer invalidate]; } DESTROY (statusTimer); [statusWindow saveFrameUsingName: @"mdindexing_status_win"]; } else if (win == errorWindow) { [errorWindow saveFrameUsingName: @"mdindexing_error_win"]; } } - (void)readDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; [defaults synchronize]; entry = [defaults arrayForKey: @"GSMetadataIndexablePaths"]; if (entry) { [indexedPaths addObjectsFromArray: entry]; } else { NSArray *dirs; NSUInteger i; [indexedPaths addObject: NSHomeDirectory()]; dirs = NSSearchPathForDirectoriesInDomains(NSAllApplicationsDirectory, NSAllDomainsMask, YES); [indexedPaths addObjectsFromArray: dirs]; dirs = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSAllDomainsMask, YES); for (i = 0; i < [dirs count]; i++) { NSString *dir = [dirs objectAtIndex: i]; NSString *path = [dir stringByAppendingPathComponent: @"Headers"]; if ([fm fileExistsAtPath: path]) { [indexedPaths addObject: path]; } path = [dir stringByAppendingPathComponent: @"Documentation"]; if ([fm fileExistsAtPath: path]) { [indexedPaths addObject: path]; } } } entry = [defaults arrayForKey: @"GSMetadataExcludedPaths"]; if (entry) { [excludedPaths addObjectsFromArray: entry]; } entry = [defaults arrayForKey: @"GSMetadataExcludedSuffixes"]; if (entry == nil) { entry = [NSArray arrayWithObjects: @"a", @"d", @"dylib", @"er1", @"err", @"extinfo", @"frag", @"la", @"log", @"o", @"out", @"part", @"sed", @"so", @"status", @"temp", @"tmp", nil]; } [excludedSuffixes addObjectsFromArray: entry]; indexingEnabled = [defaults boolForKey: @"GSMetadataIndexingEnabled"]; [enableSwitch setState: (indexingEnabled ? NSOnState : NSOffState)]; } - (void)applyChanges { CREATE_AUTORELEASE_POOL(arp); NSUserDefaults *defaults; NSMutableDictionary *domain; NSMutableDictionary *info; defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize]; domain = [[defaults persistentDomainForName: NSGlobalDomain] mutableCopy]; [domain setObject: indexedPaths forKey: @"GSMetadataIndexablePaths"]; [domain setObject: excludedPaths forKey: @"GSMetadataExcludedPaths"]; [domain setObject: excludedSuffixes forKey: @"GSMetadataExcludedSuffixes"]; [domain setObject: [NSNumber numberWithBool: indexingEnabled] forKey: @"GSMetadataIndexingEnabled"]; [defaults setPersistentDomain: domain forName: NSGlobalDomain]; [defaults synchronize]; RELEASE (domain); info = [NSMutableDictionary dictionary]; [info setObject: indexedPaths forKey: @"GSMetadataIndexablePaths"]; [info setObject: excludedPaths forKey: @"GSMetadataExcludedPaths"]; [info setObject: excludedSuffixes forKey: @"GSMetadataExcludedSuffixes"]; [info setObject: [NSNumber numberWithBool: indexingEnabled] forKey: @"GSMetadataIndexingEnabled"]; [dnc postNotificationName: @"GSMetadataIndexedDirectoriesChanged" object: nil userInfo: info]; RELEASE (arp); } // // Search Results // - (IBAction)searchResButtAction:(id)sender { if (sender == searchResApply) { [searchResEditor applyChanges]; } else { [searchResEditor revertChanges]; } } - (void)searchResultDidStartEditing { [searchResRevert setEnabled: YES]; [searchResApply setEnabled: YES]; searchResultsReply = NSUnselectCancel; } - (void)searchResultDidEndEditing { [searchResRevert setEnabled: NO]; [searchResApply setEnabled: NO]; searchResultsReply = NSUnselectNow; } @end BOOL subPathOfPath(NSString *p1, NSString *p2) { int l1 = [p1 length]; int l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqual: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqual: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } BOOL isDotFile(NSString *path) { NSArray *components; NSEnumerator *e; NSString *c; BOOL found; if (path == nil) return NO; found = NO; components = [path pathComponents]; e = [components objectEnumerator]; while ((c = [e nextObject]) && !found) { if (([c length] > 0) && ([c characterAtIndex:0] == '.')) found = YES; } return found; } gworkspace-1.1.0/GWMetadata/Preferences/MDIndexing.tiff0000644000175000001440000001610013231754602022177 0ustar multixusersII*ʷ޵޵زղ毯߻㩩㩩ۧۧ㺺󨨨繹繹󨨨䳳䳳ҿ򾾾쥥쥥ƻȇ彽ȇ彽弼㼼ܻͭͽ͎Ϡǭǭ]6_|Q3_7eUGͷES>?4hXKպպ"VecяӔ}igO/4-9?A[erkiePOQQSPNRMMNOggcwiRD@A1Cx#$*dnohTSU͖QQRjkdg.($% չ֐ƥ  >Mccciiiϧeec\a^T-  ˩̌ƘOE@cd^\]_֬սXX[c`_I7dώA(t;IJHȥGGEw>7*'<ϬWO=MMLNNNUL:Ѭ!6{4 >;2a`^``_?<1&)zǸz! t52)edb󸸸feh30$%߰ zѪؤaDޮǟ%u.+"QPN澾QPR/, mܵݰޭDJ詩-%ϟ -=4',)*/,<3oϪ,ܰ ϟ&&-{驩j ֧ +{,\KȾկ{zz[J0 ߱ ۪  E|ѡ 7"Þl## "!Ӫ믯()*#l. ȚҠެR̨-߮ŗwzխ, Ь&0XK#111󤤤888ZK '̩'߱ { ߮ܰĪۭ ܪޫޫުܪצ ް Ϧ—$ܴ,ã;s8VSO\\\^^^'''QNCv.ġ/װ! ߯ ܯ  اެޫޫޫެݬ̿ݥ اۨۨ۩ڧڤՠתު ѦÖ0ܸBM}}|=<<///000"""???rDٲ9ٯ%ݬ ݪץأܦۨ۩ۨۨ٧ڦėּרԡإ٦٦٦٦٥ڦۧ٫Ԩٱ*@ǭX{{xгP޸:֬*֪ڭܨۧڦ٦٦٥٥٦ӣإ˼յ;ќԟؤפؤؤףؤڥ٨ ڭݲ"8̫FuX6kQ@S<4T<=^EGfMOgOOcKK\CBV@5qWC{]7غP;޳(ڭکڥ٥ؤؤؤؤף֡њׯ%óȳ֥ʖҠԢ֢֡֡֡עפ ڪۮڲ,4k=T> 53135:Bc-vI!ƦA߷0ۮ٨٦ أע֡աբԣԠ͖ѡ ȳe󩩩ؿg˞Ŏ͞џԠԟՠՠբצ٪ح$0j*sS'lO.kO3jO6iP;hQ:jQ6lQ3pS0xX)w1ɩ8۲*ګצգ ֡ԠӟաѠΞǒɘ U󩩩nˢƕΛҝҝӞҠӢ Ԥةذ+۶<޼NaoyҀӂ{rdRܷ@ر.׫զӢ ӠӞҝѝΜȗƚi򮮮Կy״?ŔΛԜўџҢ զר"ڰ,ݷ޹E߼J߻KߺGݶ@ڳ3׮)ժӥѢўΛ˘ʟ"msvhuyձE~ Ĕ˛ϟӤԧ ֪'׭,ׯ/ׯ0خ-׬(өҥΠʜƕ ϫ7tȵrvU㣡yY`vӱH$•ė × – άBpɃcynN{󶴳ol`thGYȶyΉ}lۺ[ϯLȦ@ġ;ž8ž8ž9Ƥ?ͭKظXh}͈н}_tiFlgVᗖspna\Ne]?vjCyP^gnrqnh^|TymHdZ:d`Lvvnٯŝtttuuunnnyyy׽ЪЪ񾾾崴󨨨游⻻㚚㚚㚚ږږږƏ뿿ƏƏ似ἼἼھ㽽㽽㽽ߵܵܵ00 [@08(/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/Preferences/Indexing/MDIndexing.tiffHHgworkspace-1.1.0/GWMetadata/Preferences/MDIndexingInfo.plist0000644000175000001440000000037613214346537023233 0ustar multixusers{ CFBundleIdentifier = org.gnustep.mdindexingmodule; GSBundleVersion = "1.0"; NSExecutable = MDIndexing; NSMainNibFile = MDIndexing; NSPrefPaneIconFile = "MDIndexing.tiff"; NSPrefPaneIconLabel = "Indexing"; NSPrincipalClass = MDIndexing; } gworkspace-1.1.0/GWMetadata/Preferences/Resources/0000755000175000001440000000000013214346537021320 5ustar multixusersgworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/0000755000175000001440000000000013214346537024036 5ustar multixusersgworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/MDIndexing.gorm/0000755000175000001440000000000013214346537026767 5ustar multixusersgworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/MDIndexing.gorm/data.classes0000644000175000001440000000267613214346537031272 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CategoriesEditor = { Actions = ( ); Outlets = ( ); Super = NSView; }; FirstResponder = { Actions = ( "applyButtAction:", "closeMainWindow:", "enableSwitchAction:", "errorButtAction:", "excludedButtAction:", "indexedButtAction:", "searchResButtAction:", "nextButtAction:", "prevButtAction:", "revertButtAction:", "runInfoPanel:", "showAllButtAction:", "statusButtAction:", "suffixButtAction:" ); Super = NSObject; }; MDIndexing = { Actions = ( "excludedButtAction:", "indexedButtAction:", "applyButtAction:", "enableSwitchAction:", "revertButtAction:", "statusButtAction:", "suffixButtAction:", "errorButtAction:", "searchResButtAction:" ); Outlets = ( excludedTitle, excludedScroll, excludedAdd, excludedRemove, indexedTitle, indexedScroll, indexedAdd, indexedRemove, "_window", enableSwitch, applyButton, revertButton, statusButton, statusWindow, statusScroll, suffixRemove, suffixAdd, suffixScroll, suffixTitle, suffixField, errorButton, errorWindow, errorScroll, tabView, searchResApply, searchResScroll, searchResSubtitle, searchResTitle, searchResEditor, searchResRevert ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/MDIndexing.gorm/data.info0000644000175000001440000000027013214346537030554 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/MDIndexing.gorm/objects.gorm0000644000175000001440000003043713214346537031315 0ustar multixusersGNUstep archive000f4240:00000023:0000015b:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? A C€ C&% CR D@01 NSView% ? A C€ C  C€ C&01 NSMutableArray1 NSArray&01 GSCustomView1 GSNibItem0& % NSScrollView  C€ C&0 1NSColor0 &% NSNamedColorSpace0 &% System0 &% windowBackgroundColor0 &%Window 0&% Window ? ? F@ F@%&   D D@0% ? A D C&a% CӀ D@0 % ? A D C  D C&0 &01 NSTabView% A@ A  D C  D C&0 &0 % ? ? D @ C  D @ C&0 &0 0& % NSScrollView A C^ Cy C& 01NSButton1 NSControl% C CD B` A  B` A&0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Add01NSFont%&&&&&&&&&&&&&&%0&0&&&& &&0% CF CD Bt A  Bt A&0 &%0!0"&%Remove&&&&&&&&&&&&&&%0#&0$&&&& &&0%1 NSTextField% A C Cy A  Cy A&0& &%0'1NSTextFieldCell0(&%indexable paths0)% A@(&&&&&&&& &&&&&&%0* 0+&%System0,&%textBackgroundColor0- +0.& % textColor0/% C C Cu A  Cu A&00 &%0102&%excluded paths)2&&&&&&&& &&&&&&%*-03% C CD B` A  B` A&04 &%0506&%Add&&&&&&&&&&&&&&%07&08&&&& &&09% C CD B` A  B` A&0: &%0;0<&%Remove&&&&&&&&&&&&&&%0=&0>&&&& &&0? 0@& % NSScrollView C C^ Cy C& 0A% C C  B A  B A&0B &%0C0D&%Enable indexing0E1NSImage0F1NSMutableString&%common_SwitchOff0G&%enable indexing&&&&&&&&&&&&&&%0H&0I&0J0K&%common_SwitchOn&&& &&0L% C A` B` A  B` A&0M &%0N0O&%ApplyO&&&&&&&&&&&&&&%0P&0Q&&&& &&0R% C A` B` A  B` A&0S &%0T0U&%RevertU&&&&&&&&&&&&&&%0V&0W&&&& &&0X% C B B A  B A&0Y &%0Z0[& % Show status[&&&&&&&&&&&&&&%0\&0]&&&& &&0^ 0_& % NSScrollView A B Cy C& 0`% A C1 Cy A  Cy A&0a &%0b0c&%excluded suffixes)c&&&&&&&& &&&&&&%*-0d% C A0 B` A  B` A&0e &%0f0g&%Add&&&&&&&&&&&&&&%0h&0i&&&& &&0j% CK A0 B` A  B` A&0k &%0l0m&%Remove&&&&&&&&&&&&&&%0n&0o&&&& &&0p% A A0 B A  B A&0q &%0r0s&s&&&&&&&& &&&&&&%*-0t% C B B A  B A&0u &%0v0w& % Show errorsw&&&&&&&&&&&&&&%0x&0y&&&& &&0z &0{1 NSTabViewItem0|&%paths0}&%Paths%0~0&%results0&%Search Results0 % ? ? D C  D C&0 &0% B C C A  C A&0 &%00&<%<Drag categories to change the order in which results appear.)&&&&&&&& &&&&&&%*-0% B C C A  C A&0 &%00&7%7Only selected categories will appear in search results.0% A@&&&&&&&& &&&&&&%*-01 NSScrollView% B BD C C  C C&0 &01 NSClipView% A @ C C AP C C&0 0&%CategoriesEditor AH C C&0 &00&% NSCalibratedWhiteColorSpace >~ ?01 NSScroller% @ @ A C  A C&0 &%00&&&&&&&&&&&&&&&&% A A A A 0% C A  B| A  B| A&0 &%00&%Apply&&&&&&&&&&&&&&%0&0&&&& &&0% C΀ A  B| A  B| A&0 &%00&%Revert&&&&&&&&&&&&&&%0&0&&&& &&%%& 0&%Window0&%Window ? ? F@ F@%&   D D@0% ? A Cހ D&% C D@0 % ? A Cހ D  Cހ D&0 &0 0& % NSScrollView  Cހ D& 0&%Window ? ? F@ F@%&  D D@0 &0 &01NSMutableDictionary1 NSDictionary&)0&%View(2)0& % CustomView(1)0& % Button(7)X0& % CustomView(0)0&%View(1)0& % Button(6)R0&%TabViewItem(1)~0&%View(0)0& % Button(5)L0&%TabViewItem(0){0& % Button(4)A0& % ClipView(0)0& % Button(3)90& % Button(2)30& % Button(12)0& % Scroller(1)0& % ScrollView(0)0& % Button(11)0& % Button(1)0±& % Window(0)0ñ& % Scroller(0)0ı% A C C A  C A&0ű &%0Ʊ&&&&&&&&&&&&&&&0DZ& % Button(0)0ȱ& % Button(10)t0ɱ& % GormNSWindow0ʱ& % GormNSWindow10˱& % TextField(5)0̱&%View30ͱ&%GormCustomView20α& % TextField(4)0ϱ& % TextField(3)p0б& % TabView(0)0ѱ& % TextField(2)`0ұ& % TextField(1)/0ӱ& % TextField(0)%0Ա&% NSOwner0ձ& % MDIndexing0ֱ& % CustomView(4)0ױ& % CustomView(3)^0ر& % Button(9)j0ٱ& % CustomView(2)?0ڱ& % Button(8)d0۱&%View0ܱ &TT01!NSNibConnector̰ʐ01"NSNibOutletConnector0߱&% NSOwner0&%_window0!ɰߐ0!۰ɐ0"߰0& % statusWindow0!Ͱې0"߰0& % statusScroll0!°ߐ0!0"߰0& % errorWindow0!0"߰0& % errorScroll0!а̐0!А0!0!А0!0!0!ǰ0!0!Ӱ0!Ұ0!0!0!ٰ0!0!0!0!P!װP!ѰP!ڰP!ذP!ϰP!ȰP"߰P& % applyButtonP"߰P & % enableSwitchP "߰P & % errorButtonP "߰P &%excludedRemoveP"߰P& % excludedTitleP"߰P& % indexedAddP"߰P& % indexedRemoveP"߰P& % indexedScrollP"߰P& % indexedTitleP"߰P& % revertButtonP"߰P& % statusButtonP1#NSNibControlConnectorǰP&%indexedButtAction:P#P#P &%excludedButtAction:P!# P"#ڰP#&%suffixButtAction:P$#ذ#P%#P&&%enableSwitchAction:P'#P(&%statusButtAction:P)#ȰP*&%errorButtAction:P+#P,&%applyButtAction:P-#P.&%revertButtAction:P/"߰P0& % excludedAddP1"߰P2&%excludedScrollP3"߰P4& % suffixAddP5"߰P6& % suffixFieldP7"߰P8& % suffixRemoveP9"߰P:& % suffixScrollP;"߰P<& % suffixTitleP=!ΰP>!˰P?!ְP@!PA!PB!ðPC#ðPD& % _doScroll:PE!PF#PG& % _doScroll:PH!PI"߰PJ&%tabViewPK"߰PL&%searchResApplyPM"߰PN&%searchResScrollPO"߰PP&%searchResSubtitlePQ"߰PR&%searchResTitlePS"߰PT&%searchResEditorPU!PV"߰PW&%searchResRevertPX#PY&%searchResButtAction:PZ#YP[&gworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/StartAppWin.gorm/0000755000175000001440000000000013214346537027215 5ustar multixusersgworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/StartAppWin.gorm/data.classes0000644000175000001440000000045213214346537031506 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; StartAppWin = { Actions = ( ); Outlets = ( win, startLabel, nameField, progInd ); Super = NSObject; }; }gworkspace-1.1.0/GWMetadata/Preferences/Resources/English.lproj/StartAppWin.gorm/objects.gorm0000644000175000001440000000427313214346537031542 0ustar multixusersGNUstep archive00002c24:0000001a:0000003c:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C Bl&% C D 01 NSView%  C Bl  C Bl&01 NSMutableArray1 NSArray&01NSProgressIndicator% A A0 Cz A  Cz A&0 & ?UUUUUU @I @Y0 1 NSTextField1 NSControl% A B B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 & % starting:0 1NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B B C/ A  C/ A&0 &%00& % fswatcher &&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor00&%System0&%windowBackgroundColor0 &%Window0!&%Window0"&%Window ? B F@ F@%0#1NSImage0$&%NSApplicationIcon&   D D0% &0& &0'1NSMutableDictionary1 NSDictionary&0(&%NSOwner0)& % StartAppWin0*&%ProgressIndicator0+& % TextField 0,& % TextField10-& % GormNSWindow0. &0/1NSNibConnector-00&%NSOwner01*02+03,0041NSNibOutletConnector0-05&%win060+07& % startLabel080,09& % nameField0:0*0;&%progInd0<&gworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/0000755000175000001440000000000013231754602022520 5ustar multixusersgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/applications.tiff0000644000175000001440000000511013214346537026062 0ustar multixusersII*  ,,,*___CvusXfpx|y]]NO>|ÿɼtub))l|uul^_hRSZCFIn !}vld[{NFd70M AA=; 61-)&"¾u&& }¦TPLP- [2(\>5d40H84RC 2-&"Ŀw,+$'}§TP$WA;XGFNJI\32H ."{01"--§T V@8[bbc##&<"x88(44$¦T,a#!)tttHHK"!@"~AB088'¤U6%i mmn%%C"PP=BD1"" ¤U:)kDDDZZZbbb((F#\^HNP:22.$£U8'j ,,I#ejRXXE ¤U0d EEF00J#prZ`bN£U*_<9G111 22J$wy``cO£U5$h --.33I${~ddfQ£U-b'$!+97AhgoYX`.-4"!'$%%>$z~djjV½_U|_Uzc[zaZv^WrYTnWRjRNeNKaMJ^KI[GFV98I33B02?y}dps_uza}l}ilTjjV}Ȼ˾ƹjlYxzfdfSMNA~--(ff^;3?|ooaVWH66(??.rr]pp`~  NNNFVVSLYYVMNKHLHH>L>>8L55-LL33+)  3 " @ 8 @ (R/root/Desktop/Icone/common_UnknownApplication.tiffcreated with The GIMPHHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/documents.tiff0000644000175000001440000000204013231754602025367 0ustar multixusersII* P8$ BaPd6 ఀ`Qj0q I%P%qa8(خ'J(4 FO* (p ULjp<-O)RjM2Z=>mgwkprp>-حiNXT2 d` ZKvy`L^*Hd; Ƞ2X434<"NDA쭊:p&Ѩ=-#PMʙCD:h+)3B;2;?*Iqxȶ5ɰ#-Q;Kȼ61R\I=ASC(Bc21 5H܏ L3m=QC23)5E"Fj;Y nԖ0Zu63# $)4p4UI+2^cp5vEsy U`a~(- LdaXahTHgݡ m@(=R/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/GWMetadata/Preferences/Resources/Images/documents.tiffHHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/folders.tiff0000644000175000001440000000502413214346537025036 0ustar multixusersII* KeKh KKHlZtZtZsUoRmNdFj_|`}`~`~[zZzQkFaaaaaaaaaaaaaabc]}\|Qk$ImFccccccccccccccdd_~]}Rl2CwFddddddddddddddef`_Rn2CfFffffffffffffffghb`So9EsFhhhhhhhhhhhhhhhjddSo6Hm{{{FhhhhhhihhihihhijedSo6HmpppFhhhhhhhhhhhhhhijddQm$6d]]]F|hhhhhhhhhhhhhhhiddPl!;]PPPFxgggggggggggggghhcdNl#:^ AAAFugggffgfggfggggghcdMj"4Q 111FrfffffffffffffffgcdLi".Q %%%Dn}aaaaaaaaaaaaaaab]^Fc,O6k|UxUxUxUxUxUxUxUxUxUxUxUxUxUxUxUxPuQu9T'SSSz|/Dc5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Qy5Py3Nw/Jr.FL = J L L L L L L L L L L L L L L L L L >  ! @   (R/root/Desktop/Icone/folders.tiffNHNHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/images.tiff0000644000175000001440000000502213214346537024643 0ustar multixusersII* ZPzI{K|LOQU{K}MS]_͜k\WUǕdĒa\ZǕd_ɘgPWĒaVWUZWWXœbR|LRZZ_Ǖd_ZQ]\ǕdST\Ēaœb\]_œbd:c@H,E*O0a=ǖeƔcWZœbǕd˚iœbʙi̚jǕdœbǕdʙi͛l~T,R2iBH,I,@(D*S3c?Y͜kǕd_Ēaҡsҡs]ɗf˚i͝m˚i˚iեxuJpJ%wN_rFtL&L/E*L.V5kE!œbΝmɗfǕdϞmϞm]ɗf˚i͜k˚i֧zԤxoJ#ңxǧˮ供̚l[.P1@(N0W6j@ӣuҡsҡsΝmҡs͝mПoҡs֦zԤw徚pG]4徜Ȩɪǧ֨|p@kDL.<& H,T5ȖfǕd͜mПqԤwէzԤwѡsԤwңu͝nd@vHžȨɪáڬɗhp?_<H,<& @(`1vDwGÑ`ĒbyIƕgڮ߶߶^Y8rDӥx⺓㺕’d`Wj:^<T4E*@(mG Z,o>vFvFwN$c3Tڮ٬a6Y8[:[0m@^[/[2hCW,e@U4E*E*]:oG Z,g6Y,hC}R&i;l=g:W.D+UʘjʙkbēdРsƖialFW6P1D*\9jD}R'xN$yO$jE\:T5hC_<]<H.|N㺒ᶎϟqѤz ڬzJd@_<[9W6hBY,[.a4X-_<\:_<Q3D+Q3H.]8ت~զz]”g޲‘a[.[9Y8[9W6X7\:uL#}R&^1_<[9Y8Q2M0I,I-_>UΞpyR*{M‘asBV*X7_<b>W6V5_<_<b?b?X7X7P1M0P1H,U5R4zJ`qBe6\tEmG T4\:W6X7Y8b?jDjDgBU5`<^<[:kDR3M0M0a?ɘiȚpOq@rK#b>S3U4X7W6U4d@gBtJ"oG U4W6Y8oH![/P2X7Q2@)Z>pDY.b?b?Q2M/R2Y8V5L.]:b?oG oG c@~S'Y-b4i8mF I-Q2<& 8$ L0W8T5Q2[:\:R2K.L.E*W6_<gBd@}Q&f8h8l=a2sK"U5I,8# D+\<e8xO&nGS&yO$P1M/E*I,T4gBxN$rJ"c>gBmH#oH!jD\9F,I-8$ @(kEzJwGn>sBp@mF Q2Q2M0E*H,W6Z8hCY78# E*H,E*O0L.Z8\1ϞqРrȖgɗh͜mƓc]0b?gBV5O0I-[8kDvL"P2D*<% S3L.I,S3S׫߲㼙ݰ㼙ܲ͜m_2wM$oH!L.P1I,O0jEmF[9V5S3U5O0Y8X-ר|ǧǧ㼙ẖ㼙ด͜m]0zP&^<S3Z8T4K.[9V*];pH N0E*M/|Q&~Pǧ㼙ťť徜⺗͜mZ-wM$hBnH!T(oH!V5H,   @   (R/root/Desktop/Icone/images.tiffHHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/movies.tiff0000644000175000001440000000506413214346537024706 0ustar multixusersII* XXXZXZ@jhj888ZXZQPQywyhghWVWece{y{HHH\Z\gggTRTLJLpopfdiRPRjij @767KKK:8:ljlNNNZXZmkmigib_bece/./TST,,,DBD翳wuw )():8:ƀ<:< '&'@>@PNPDBD][]MLMB@B(((XXXMKMcacFDFfef545HFH444\\\igi"""444FFF^\^(,,<<>>VVV@@@LLLXXXTTTWWWTTTPPPFFF00.,,,,,,&(&434iii@@@@@@\Z\WVUHHHBBB888888222000000000444@@@NNNPPP@@@@@@644><<:::888<<<888666000000000000000.,*((((((((("$(vtv,,,JHJ444((($$$***00000.**(((((((&((""& $$$PPP$$$434B@B000"""@>@@wuwHHH@    @ $ , (R/root/Desktop/Icone/movies.tiffCreated with The GIMPHHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/music.tiff0000644000175000001440000000234013231754602024511 0ustar multixusersII* P8$ BaPd6S 3@( 6ţzK"I%2i\z;+32 J@+X:}?C@46 6Ε 6i4u(=S!0 G3:p BA7Tp\,(NK@~Xdb'pfQ w] lqv0 4fhk*M@ `?zPP'TݽV߂-M2R>½@]be2? LcB5 @P䩖= |/z1H{ńE nՍ{3и;93wgq#$b&E!@f0jc|MZ( -)Ԋ| rĀr ,XT0[ WC\RRrB[ d dIdȁ6Sk1.=!= Ѐ"pd8j`N;sd庵@Z[oL[%2 x38n` S#Ax!s/JN0G 1B@œ x5Kv@Tbpq2GN~L(FC(8)2k&߄*P7b'c8a4|;*vZHR,6i3ƿоFQX;0$2/ĉDH頨3p hXE@ n IhNqj8bPpGEԽ2Jp- u\+M n)C8@ )ml@S!b5H͸5&R/+pU'#~Pr`%'WQy8:^旅; C|1扒c(XVF`ɮiƉWY ^W[eBco ٪0j(Fe!P0 L}zxi=HJ0یÊp88D *.9#i `2"5(:!$L6]u#pEF r<1 t9w&??U//޲LJ {EL,n8#4d9 pjh\ > ,1P @c8Aa3Z`n1ƀ С&zby'== Eb( ln*&Zc. g' o{3^Ex Cn0@"@<0$ xrb !j@{(=R/root/Desktop/Icone/pdfdocs.tiffHHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/plainfiles.tiff0000644000175000001440000000245413231754602025525 0ustar multixusersII* @`* CJ)0N;0r6U& JM/LfS9m&Zp2 UJ +G<@=6Hj@JW@tްv0>@`o.@ VU^gp"QAeA ^ADdi~T3:{ae}*l nr`{HsQnt@ ;@ovpx4Z8Tk(,W-_09?@o@ (br[Կ( [ht3Z4ԣLd(Z7k2`M2e"=W@~*Sv^)_ (&zt\pLN,c< Y dVbP, % Z]΅x fzMD@?-"RJ60VjrG';MZ.ۍfIuecjsRTSRPJŀ¤םPOV%:teu)]YprXIԇ6>\Sr. qO52ۚ*x Grr2[79Y&>' h!~ ­'-sb"P3zm^@PHd)Ƹx LN=]!Hq?!Ra1oST 1V$<ALB /D 5P&@9A!qbDI $@ $(=R/root/Desktop/Icone/plainfiles.tiffHHgworkspace-1.1.0/GWMetadata/Preferences/Resources/Images/sources.tiff0000644000175000001440000000233413231754602025057 0ustar multixusersII* P8$ BaPd6 ఀ`Qj0q I%P%qa8(خ'J(4 FO* (p ULjp<-O)RiC,Fw&zE LUzn>.NŻ-  iLOe S|ȁ5Sk 1.EE:#I6{3pw ; index = <*I0>; }; applications = { category_name = "applications"; menu_name = "Applications"; icon = "applications"; active = <*I1>; index = <*I1>; }; documents = { category_name = "documents"; menu_name = "Documents"; icon = "documents"; active = <*I1>; index = <*I2>; }; folders = { category_name = "folders"; menu_name = "Folders"; icon = "folders"; active = <*I1>; index = <*I3>; }; images = { category_name = "images"; menu_name = "Images"; icon = "images"; active = <*I1>; index = <*I4>; }; pdfdocs = { category_name = "pdfdocs"; menu_name = "PDF Documents"; icon = "pdfdocs"; active = <*I1>; index = <*I5>; }; movies = { category_name = "movies"; menu_name = "Movies"; icon = "movies"; active = <*I1>; index = <*I6>; }; music = { category_name = "music"; menu_name = "Music"; icon = "music"; active = <*I1>; index = <*I7>; }; plainfiles = { category_name = "plainfiles"; menu_name = "Plain Files"; icon = "plainfiles"; active = <*I1>; index = <*I8>; }; } gworkspace-1.1.0/GWMetadata/Preferences/StartAppWin.h0000644000175000001440000000264314751213523021733 0ustar multixusers/* StartAppWin.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef START_APP_WIN #define START_APP_WIN #include @interface StartAppWin: NSObject { IBOutlet id win; IBOutlet id startLabel; IBOutlet id nameField; IBOutlet id progInd; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname operation:(NSString *)operation maxProgValue:(double)maxvalue; - (void)updateProgressBy:(double)incr; - (NSWindow *)win; @end #endif // START_APP_WIN gworkspace-1.1.0/GWMetadata/Preferences/StartAppWin.m0000644000175000001440000000510514751213523021734 0ustar multixusers/* StartAppWin.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "StartAppWin.h" static NSString *nibName = @"StartAppWin"; @implementation StartAppWin - (void)dealloc { TEST_RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } else { NSRect wframe = [win frame]; NSRect scrframe = [[NSScreen mainScreen] frame]; NSRect winrect = NSMakeRect((scrframe.size.width - wframe.size.width) / 2, (scrframe.size.height - wframe.size.height) / 2, wframe.size.width, wframe.size.height); [win setFrame: winrect display: NO]; [win setDelegate: self]; /* Internationalization */ [startLabel setStringValue: NSLocalizedString(@"starting:", @"")]; } } return self; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname operation:(NSString *)operation maxProgValue:(double)maxvalue { if (win) { [win setTitle: title]; [startLabel setStringValue: operation]; [nameField setStringValue: appname]; [progInd setMinValue: 0.0]; [progInd setMaxValue: maxvalue]; [progInd setDoubleValue: 0.0]; if ([win isVisible] == NO) { [win orderFrontRegardless]; } } } - (void)updateProgressBy:(double)incr { [progInd incrementBy: incr]; } - (NSWindow *)win { return win; } - (BOOL)windowShouldClose:(id)sender { return YES; } @end gworkspace-1.1.0/GWMetadata/README.rtfd/0000755000175000001440000000000013214346537017000 5ustar multixusersgworkspace-1.1.0/GWMetadata/README.rtfd/TXT.rtf0000644000175000001440000001051413214346537020175 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql\f0\fs24 \uc0 This is a metadata indexing and searching system similar to the various Spotlight, Beagle, etc. All the names actually used (for example for the MDFinder application) must be considered provvisional; I\rquote d need a single name for all the system and some good icons...\par \par \cf0\fs36\b \uc0 Extracting metadata \par \fs24\b0 \uc0 \par To be searcheable, the metadata of your files must be \cf1 \uc0 first \cf0 \uc0 extracted and indexed. \cf0\cf1 \uc0 \par \cf0 \uc0 Launch SystemPreferences and click the\b \uc0 Indexing\b0 \uc0 icon. \par The \b \uc0 indexable paths\b0 \uc0 view shows the directories that can be indexed; the default values are your home directory and the GNUstep Documentation and Headers directories. In the \b \uc0 excluded paths\b0 \uc0 view you can add subdirectories of the indexable directories that you don\rquote t want to be indexed. \par Also all the file with a path extension listed in the \b \uc0 excluded suffixes\b0 \uc0 will be excluded by the indexing process.\par To begin indexing select the \b \uc0 enable indexing\b0 \uc0 switch and press the \b \uc0 Apply \b0 \uc0 button.\par This will start the \b \uc0 mdextractor\b0 \uc0 daemon, that is, the process that will first extract and then keep updated into the database the metadata contents of your files. Clicking the \b \uc0 Show status\b0 \uc0 button will show a window where you can see the status of the indexing process.\par To extract text contents and other metadata attributes \b \uc0 mdextractor \b0 \uc0 uses a set of extractor bundles that actually understand these kinds of files: Abiword, Application (GNUstep application), Html, Jpeg, OpenOffice (writer), Pdf, Rtf and Xml. A generic "Text" extractor is provided for the other files (if they \i \uc0 are\i0 \uc0 text files).\par \par \cf0{{\NeXTGraphic pref1.tiff \width9600 \height7840} \uc0 \u-4 }\uc0 \par \fs20\cf1 \uc0 T\cf0 \uc0 he "Paths" tab of the \cf0\cf1 \uc0 SystemPreferences \cf0 \uc0 "Indexing" \cf0\cf1 \uc0 module.\cf0 \uc0 \par \cf0\fs24\cf1 \uc0 \par The first time you run it, \cf0\b \uc0 mdextractor\cf0\cf1 \uc0 \b0 \uc0 will take some time to extract and index the contents of your files; this time can vary from a few minutes to some hours depending on the number and the size of the files; for example: if you limit the indexable paths to the GNUstep Applications, Headers and Documentation, the indexing time will be only one or two minutes; on the other hand, indexing about 2GB of sources - as I\rquote ve done for testing - needs about two hours.\par The database is available for searching from the beginning of the indexing process.\par When the indexing is done, \cf0\b \uc0 mdextractor\cf0\cf1 \uc0 \b0 \uc0 will continue to update the database in background.\par \par \fs36\b \uc0 Searching\cf0\fs24\b0 \uc0 \par \par \cf0\cf1 \uc0 To perform a new search you must start the \b \uc0 MDFinder\b0 \uc0 application and choose \b \uc0 New \b0 \uc0 from the \b \uc0 File\b0 \uc0 menu.\cf0 \uc0 \par \par \cf0{{\NeXTGraphic mdf.tiff \width9600 \height8080} \uc0 \u-4 }\uc0 \par \fs20\cf1 \uc0 A MDFinder search window.\par \cf0\fs24 \uc0 \par A search can be saved to a file and loaded again into the \cf0\b\cf1 \uc0 MDFinder \cf0\b0 \uc0 application\cf0\cf1 \uc0 .\par A\cf0 \uc0 ll the open windows will be updated automatically when the contents of the database change.\par \par \cf0\cf1 \uc0 Choosing "\b \uc0 Other..."\b0 \uc0 from any of the attribute popup menues displays the \b \uc0 Attribute Chooser\b0 \uc0 window where you can view a description and select an attribute that is not present in the popup.\cf0 \uc0 \par \par \cf0{{\NeXTGraphic attrs.tiff \width8400 \height4900} \uc0 \u-4 }\uc0 \par \fs20\cf1 \uc0 The Attribute Chooser window.\cf0\fs24 \uc0 \par \par In the \b \uc0 Search Results\b0 \uc0 tab of the SystemPreferences \b \uc0 Indexing\b0 \uc0 module you can choose the order used to show the results.\par \par \cf0{{\NeXTGraphic pref2.tiff \width9600 \height7840} \uc0 \u-4 }\uc0 \par \fs20\cf1 \uc0 T\cf0 \uc0 he "Search Results" tab of the \cf0\cf1 \uc0 SystemPreferences \cf0 \uc0 "Indexing" \cf0\cf1 \uc0 module.\cf0\fs24 \uc0 \par \cf0\cf1 \uc0 \par \par }gworkspace-1.1.0/GWMetadata/README.rtfd/attrs.tiff0000644000175000001440000113342213214346537021015 0ustar multixusersII*򪪪bbb򪪪bbb򪪪bbb򪪪bbb򪪪bbb򪪪bbb򪪪ggggggDDDgggggggggggg!!!bbb򪪪XXX===tttLLLLLL}}}{{{^^^DDDLLL~~~III^^^^^^^^^!!!bbb򪪪www,,,(((FFF222222iii```222222222222mmmIII222$$$===222222rrrKKK!!!222222555222222222222222222222222222222222222222222222bbb򪪪sssGGG&&&>>>uuuLLLBBB:::***TTT!!!jjjWWWZZZ |||uuukkkDDDHHH:::""",,,EEE{{{===&&&mmmcccbbb򪪪___DDDHHHXXXBBBDDD111TTT!!!{{{dddAAA~~~uuukkk!!!TTTDDD'''333ZZZ $$$mmmsssbbb򪪪888888888HHHXXXBBBDDD111TTT!!!{{{ddd~~~HHH!!!TTTDDD'''333sss}}}000mmmsssbbb򪪪III777---HHHRRR...BBB###XXXIII+++XXX{{{444VVVXXXXXXEEEXXXXXXXXX!!!TTTCCCXXXXXX###>>>LLLXXXXXXGGGXXXXXX AAA///333XXX\\\mmmsssbbb򪪪lllooo}}}lllooollllllwwwuuullllllllllllllllllllllllllltttllllllllllllllllllllllllllltttxxxlllnnnllllllllllllllllllllllllllllllllllllooolllbbb򪪪bbb򪪪bbb򪪪bbb쇇]]]bbb%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ԳjjjXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXԳ+++mmm||||||||||||||||||||||||||||||||||||||||||%%%jjj|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||Գ+++@@@ÃRRRRRRҏԳ+++@@@xxxppp---Գ+++@@@ԥuuuԾzzzPPPRRR$$$sssTTT[[[jjjYYYfffxxxԍԳ+++@@@ԕlllҁyyy$$$sss\\\&&&kkkooǫeeemmmԳ+++@@@ԞpppԸ```Ҋzzz$$$rrr!!!___&&&kkkbbb|||Ըqqqyyy~~~nnnԣfffwwwvvv˕sssԳ+++@@@Իoooxxxuuu~~~xxx+++YYY!!!___&&&kkk̄RRRԞKKKccclllQQQ>>>mmm444WWWuuuccc999ggg444KKKÍBBBwwwYYYWWWԳ+++@@@Ѯggg>>>AAAvvvyyyKKKNNNԀBBBiiiMMM!!!___;;;|||jjjӚ999ԞUUUttt uuu:::,,,[[[)))PPP  Գ+++@@@өnnnԞBBBEEEDDD???uuu"""BBB111aaa(((ZZZHHHԳ+++@@@ԼwwwԞ@@@@@@@@@~~~&&&uuu"""BBB111aaa(((<<>>ggg___ XXXjjjPPP^^^^^^^^^Գ+++@@@ԞШ 777666EEE:::www***gggԳ+++@@@Դ999BBB666999 888DDD555\\\222@@@Գ+++@@@̼ӷJJJrrr dddԳ+++@@@ԏ&&&OOOKKK]]]ԝ]]]ԗOOOTTT fffԳ+++@@@ԏfffԸkkkԾԻѪԓԊаЩԄcccԳ+++@@@ԏfffҖppp~~~}}}___~~~yyyvvv===}}}iii)))rrrppprrr|||ZZZԳ+++@@@ԏfffӛddd333111555"""uuuXXXmmmò===Ԍiii)))yyy!!!ԅppp___uuu[[[Գ+++|||@@@ԏfff΍rrrjjjaaa̿===Ԍiii)))|||!!!ԅpppTTTuuu!!!\\\Գ+++___sss@@@ԏTTTbbbfffyyyaaa{{{yyysss===Ԍiii)))rrr+++ppptttttt!!!\\\Գ+++___sss@@@ԨVVV___\\\uuuԹtttoooԫhhh|||Βjjj}}}tttԦ)))jjjϔhhhsssbbbԇԳ+++___sss@@@)))Գ+++___sss@@@)))԰gggԹwwwdžccciiiԽtttbbbpppǠԮԳ+++___sss@@@ԶԞyyyԫJJJzzzqqq]]]eee³PPPðԳ+++___sss@@@ԞFFFgggЫJJJaaa̷>>>ͪbbbNNNnnnfff[[[;;;RRRRRRwwwEEE^^^LLLԳ+++___sss@@@ԞWWWaaaJJJԵiiizzzԣbbbаEEEMMMҜYYY888rrr|||ҿNNNԳ+++___sss@@@ԞWWWӔ```JJJ԰ǾgggԦ͸\\\EEEMMMԜYYY888ԇnnnVVVnnnԳ+++___sss@@@ԞWWWwwwMMMJJJ~~~ssscccҽTTTEEEMMMԜYYY888ԇnnnsssTTTԳ+++ԅ<<>>mmmDDD|||LLLbbboooQQQLLLwww[[[999111ZZZ^^^PPP mmm)))JJJIII___''' ttt YYYhhh@@@lllLLLIII\\\)))Գ+++@@@ԏfffҐaaa___$$$єaaaYYYIIIeeefffbbb!!!ԯppp@@@fff(((HHHƉIIITTT PPPНtttӴvvvsss}}}uuuʗpppsssҠuuuzzzlll{{{mmmwwwοkkkpppӖ|||ʿqqqԳ+++@@@ԏfffԪccchhh$$$єaaaԛ[[[lllȸ\\\Ɣ!!!ԟCCCpppdddӹhhh)))HHH```555 fffԙԳ+++@@@ԏ CCCCCCCCCgggggg}}}ttt$$$єaaa:::ѓRRRTTT!!!ԣYYYKKKpppgggNNNWWW)))HHHԠ fffԙԳ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@ʵ̺оιɽԳ+++@@@Ԟ&&&ԫJJJԣoooeeeeee{{{ԎhhhdddfffʻpppԬ}}}Գ+++@@@Բqqqyyyyyy{{{ԺԉԬԢԞ***fffӫJJJ```ʒ>>>Ă...ԆѥԳ+++@@@ԏHHHԽ===ԅppppppԞPPPqqqȫJJJԋ```ooohhhА555LLLsssYYY888jjjuuuEEEԳ+++@@@ԏfffqqqqqqQQQtttNNNzzz͋PPPNNNЩiii===ԴaaaNNNcccΌKKKZZZYYYppp̈́GGG```KKK===fffOOOwwwԯ\\\TTTԲ```OOOԵhhhNNNuuu԰^^^RRRԞWWWiiiJJJ̵yyynnnǮkkk~~~ʰEEEMMMӜYYY888ӅoooaaaeeeԳ+++@@@ԏ!!!!!!***YYY$$$GGGjjj555ơTTT===ԂÇeeesssûOOOpppvvv˳CCCpppqqq\\\gggrrrmmmaaaԞWWWGGGJJJԆvvvpppMMMEEEMMMԜYYY888ԇnnnZZZiiiԳ+++@@@ԏfffYYY+++EEEϫšTTT===Խaaa\\\ddd}}}pppRRRjjj!!!ѲKKK444:::999mmmӓsssԙsssNNN333:::999iiiӖsssԞWWWԮ222JJJԏssstttvvv~~~kkkóCCCLLLԜYYY888ԇnnntttEEEԳ+++@@@ԏfffYYY+++EEEWWW)))ġTTT===qqq\\\wwwgggppphhhWWW!!!ԾwwwѭԧbbbԫXXXyyyҮԩ^^^Եҏ͘llltttƅkkk{{{~~~Դ{{{Ԩ”ttt```Գ+++@@@ԏ222iiiiiiiiiYYY+++EEE^^^sss???TTT===ԃggg~~~rrrWWWsssjjjuuuPPPpppmmmlllwwwDDD!!!ЖnnnqqqrrrԌkkkiiiԒkkkjjjyyyИnnnrrrqqqԎkkkjjj}}}ԠͺlllԳ+++@@@¡ӴѨԯѹdzԭǭǼҹԦ̲ǬȮ̲ǭԿqqqCCCKKKԳ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@ԿԢƮԩͿԪԳ+++@@@ԏ666ooooooqqqԌiiijjjԣRRRxxxԴooo{{{Գ+++@@@ԏfffԊvvvРsss{{{ѧuuuqqqСooowwwjjjiiibbbϱzzzoooӸ~~~qqqhhhԬrrrpppccctttjjjuuuӣRRRrrrpppРrrrpppsss...uuuąnnnӵwwwoooԳ+++@@@ԏ333333;;;YYYjjjhhhzzzfffuuutttpppNNNiii)))̙>>>???{{{!!!bbb^^^ppp(((oooˣRRR@@@zzz]]]bbbJJJ@@@EEEyyyxxx͡999===HHHuuuԐLLLԈqqqUUUԳ+++@@@ԏ]]]YYYӧMMMvvvҜhhhnnnЀiii)))̙XXX"""^^^!!!Խ777&&&TTT999DDDģRRR@@@;;;Ѹ"""MMMEEE777FFFǡPPP"""WWWͰfffϠԳ+++@@@ԏfffYYYԩMMMyyyȩѕllltttyyyiii)))̙\\\!!!]]]Խ!!!XXXQQQ%%%VVV777GGGţRRR@@@===ҭYYY111MMMEEE===HHHǡTTT!!!ҪMMM222]]]SSSMMM777FFFsss777333FFF̉AAA000SSSMMM$$$hhhvvv~~~%%%222LLL222jjj&&&WWW///[[[555444YYY HHH>>>%%%Գ+++@@@ԏEEEYYYԩMMMxxxtttxxxuuuqqqRRRiii)))̙\\\!!!Ā!!!PPPPPPvvvĸ&&&|||wwẉRRR@@@~~~dddTTT;;;FFFEEEzzz}}}ϡTTT!!!UUU555EEENNN222hhh666444///GGGYYY111fffjjjMMM{{{!!!,,,SSS111 aaaRRR,,,aaa &&&cccZZZSSSԳ+++@@@ԴxxxқЩѰѫԄйԁͩ000ԯ Ҹ000ӽԏĒХƎǖԼԁ444RRR@@@@@@999ddddddqqq___\\\NNNҽMMM&&&{{{!!!IIIyyy hhhRRR,,,>>>000:::@@@)))JJJԳ+++@@@ƒ͏```)))Ը===VVV222HHH[[[QQQtttqqqrrrRRR111___```MMM---{{{!!!(((OOO666 [[[RRR,,,ddd$$$fff)))JJJԳ+++@@@ϜHHH000TTT)))Ը===ӭKKK(((UUUUUUOOO+++III~~~777###===͌;;;&&&WWWMMM---{{{!!!444GGG222PPP)))RRR,,,___------___)))JJJԳ+++@@@YYYԳ+++@@@YYYԳ+++@@@pppԳ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@ԏ###IIIIIILLLԣRRRԳ+++@@@ԏfff˫ΠͨҶԝԽԕɥԊһҷRRRԳ+++@@@ԏ...______eeeʃzzzfff[[[jjjzzzuuussszzz}}}JJJԙ\\\666yyy___cccxxx^^^~~~~~~rrryyy}}}\\\RRRǃ}}}Գ+++@@@ԏHHHԾfff]]]fff}}}Ϣ\\\~~~ђqqqiiiuuuJJJԙ\\\666```***===444111 zzznnn,,,pppӡ___{{{ЇRRR:::666<<<(((ooo|||ԈԻsssiiiԬ}}}áԎɛzzzԳ+++@@@ԏfffYYYFFFfffҰOOO~~~ӞcccģnnnJJJӕ\\\666|||!!!}}}xxx)))qqqԱNNNӚRRRqqq\\\%%%iiiԗ\\\ԣ[[[===ћYYYԪTTTԸԸFFFTTTԳ+++@@@ԏWWWͅfff\\\zzzssssssoooddd```ggg\\\666Аyyy|||!!!}}}xxx)))sssuuuooo\\\RRRgggyyy\\\~~~GGGiiiԂGGGJJJdddjjjQQQqqqZZZFFFѝXXXMMMoooӥZZZHHH[[[SSS,,,[[[&&&===tttRRRPPPϐOOOOOO|||ұfffKKKYYY~~~WWW}}}IIIXXXNNNʍRRRHHHoooԞTTTIIIaaa԰EEEMMMmmmhhhlllLLLXXX$$$xxxIIIvvv}}}~~~PPPHHHtttDžMMMUUUbbb\\\666yyyssseeeIIIIIIpppSSSPPP^^^pppKKKZZZiiiԸ===ԞTTTIIIѤ]]]KKKhhhƂIIINNN[[[YYY___###MMMLLL}}}nnnHHHIIIrrrϚUUUIIIwww̡UUUHHHuuuԅppp!!!ppp}}}\\\LLLjjjjjjTTTfffYYYKKKИUUUNNNtttԳ+++@@@ԦOOOYYYYYYYYYxxxyyyfffbbbiii|||СjjjeeeԯiiioooԱjjjvvvjjjƉeeeyyy\\\ԚaaaѨnnnbbbРfffiii|||Թrrrhhh\\\bbbiiiyyyHHH+++\\\yyyΤKKKYYYxxx___rrrWWWӧVVVҔaaaԡTTT===хmmmHHHSSSuuuaaawwwEEE԰vvvddd}}}\\\Ơ\\\nnnӊrrrlllaaa԰EEEMMM̀XXXzzz:::$$$rrrqqqхyyyzzzjjj\\\666ԯ)))pppuuuZZZiiiԸ===lllcccooofffaaauuuiiiYYYԩMMMzzz|||Լ###eeejjj___Ѡԅppp!!!pppaaarrrdddeeeԸ===TTT|||ϙWWWSSS}}}[[[|||Գ+++@@@fff\\\xxxzzz```ԙ<<<000aaa԰EEEUUU]]]fffddd;;;777ҔaaaԡTTT===ԌiiiIIIeeefffbbbhhhRRRffffffqqqjjjDDD}}}ttt:::qqqԳOOOԪaaaԮEEEMMMpppMMMffffffeee$$$xxx!!!҉zzzԪXXXwwwӒ\\\666Ծ!!!ppp!!!\\\iiiԶ===Ԫ\\\YYYfffdddxxxӓYYYԩMMMrrrӕnnnƕTTTǹIII ԅppp!!!ppp!!!ҳZZZZZZfffdddԸ===TTTԣRRRQQQ```fffcccԳ+++@@@fff\\\Իiii---AAAFFF111aaa԰EEElllΚUUUөSSSҔaaaԡTTT===Ԍiii\\\Ɣ˅ЫԪyyyccc}}}]]]ƤYYYnnnӌoooԘPPPfffъEEEMMMϐϰ$$$sss!!!ԛrrrчvvvzzzmmm\\\666Ԗmmm!!!ppp!!!\\\mmmё===ԘPPPuuuўuuulllYYYԩLLL|||}}}Ԭ]]]aaannnXXXҤԈlllϭ!!!ppp!!!sssНԸ===TTTԣRRRfff˘Գ+++@@@Խ\\\ҥ000mmmPPPpppUUUmmm111aaa԰EEEҟ[[[RRRsssҢ\\\NNN^^^ԔaaaԭAAA===ԌiiiѓRRRTTTӳiiiPPP[[[TTT}}}CCCWWWQQQȋUUUNNNoooԜUUUOOOԛOOOZZZvvvEEEMMMӻoooPPPZZZ$$$oooLLLwww!!!LJTTTNNNsssłQQQ\\\ddd\\\666ԯ\\\XXXAAAppp!!!\\\ԟPPPYYYzzz===ԜUUUOOOҧ```PPPkkk~~~LLLVVVaaaYYYԳ@@@}}}QQQQQQ}}}ԼaaaUUU{{{BBBVVVOOOwww˚UUUKKKqqqԭVVVUUU!!!ppp!!!ҥ___QQQmmmԿ===TTTԣRRRћXXXRRRwwwԳ+++@@@}}}uuu$$$ԺȎqqq!!!Գ+++@@@}}}xxx$$$԰rrriii!!!Գ+++@@@ԡmmmѧlllhhhkkkԳ+++@@@Գ+++@@@Գ+++@@@111DDDDDDIIIԳ+++@@@{{{Գ+++@@@QQQ픔{{{kkkttt噙yyyyyyuuuxxxYYYoooAAAʆ|||rrr yyyyyyxxxbbb'''wwwwwwvvvlll|||tttfffvvvkkkԳ+++@@@===քvvv{{{yyysssYYYoooAAAWWW~~~jjjGGG###|||)))墢www'''ԻըIIIlll---SSSԬԿԳ+++@@@{{{kkkXXX{{{]]]uuu֯YYYoooAAAꈈ'''www111uuu(((ПDDDlll444SSSWWWԔ~~~Գ+++@@@{{{{{{|||򧧧ܶnnn```oooAAA!!!~~~111񐐐fff(((ﹹCCClll444SSSИVVVRRRѠZZZKKKmmm```XXX%%%VVVɃPPP]]]ӦZZZxxxLLLMMM333NNN```Գ+++@@@111DDDDDDDDDsssښsss{{{eee[[[vvv^^^WWW]]]eee[[[oooXXX扉WWWrrrXXXJJJ\\\YYY򞞞UUUpppoooBBBrrrcccooo}}}MMMhhhԣwwwRRRnnn}}}TTTrrrɑ[[[???hhhMMM̜@@@+++Ӆkkk>>>Գ+++@@@{{{(((񔔔ԇ}}}ɐqqqԳPPPTTTԣRRR@@@rrr***::::::777˜XXX!!!ԇnnnԃxxxԳ+++@@@{{{(((ՈԒxxxɉoooӘdddTTTԣRRR@@@оќYYY!!!ԇnnnԜttt}}}Գ+++@@@ӢԻ}}}nnnmmm{{{nnnpppqqqTTTԣRRRZZZlllnnnppplllќYYY!!!ԕPPPyyylllgggԳ+++@@@ҿíԳDzԹѽŴԦƬèԳ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@ԦOOOYYYYYY\\\ԓԚԳ+++@@@ԏWWW///ԺԳ+++@@@ԏXXXuuu]]]hhhYYYOOOYYYȆMMMHHHzzzԘMMMMMMLLLԚ^^^888zzzpppfffIIIXXXԊ{{{}}}yyy!!!vvvKKKnnn___???ҮbbbIII___Գ+++@@@ԏ>>>>>>EEEԦuuugggffflllˎnnnuuuXXXJJJԙ\\\666wwwfff}}}GGG!!!}}}xxx VVV)))ooommmuuuSSSԳ+++@@@ԏfffZZZMMMfffӱOOO}}}ӟcccԟJJJԘ\\\666gggLLL___^^^kkk!!!}}}xxx!!!Ԋkkk!!!aaaOOO___^^^tttԳ+++@@@ԏfffԣvvvaaafffppp̕hhhxxx΄}}}ԑcccOOOzzz\\\666ʅЭ!!!}}}xxx!!!Ԋkkk!!!ѧԳ+++@@@ԏ###IIIIIIIIIlllyyy\\\fffPPPXXX]]]ÂWWWUUUxxxԐUUUWWWԍNNNgggggg\\\666ӱjjjVVV^^^???yyy|||xxx!!!Ԋkkk!!!ҬgggVVVdddԳ+++@@@fffԳ+++@@@fffԳ+++@@@ԐԳ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@Գ+++@@@ԴxxxԜͮԳ+++@@@ԏEEE\\\ԽXXXԳ+++@@@ԏfff„mmmrrr\\\nnnКZZZTTTԮ]]]]]]iiiԦwwwYYYyyyxxxTTTggg{{{NNNkkk???ҖVVVTTTooohhhUUU~~~Գ+++@@@ԏ!!!!!!***җqqqfffbbb|||rrrvvvUUUJJJԙ\\\666ÆYYY{{{}}}ŧ555```JJJ;;;pppzzzԳ+++@@@ԏfffZZZRRRfffӰOOO}}}ӠdddԋqqqJJJԘ\\\666\\\)))333333III???WWWӱ---===EEE...333222nnnԳ+++@@@ԏfffԱlllVVVfffyyyΟ___|||Ѝsssԧ}}}jjjMMMЃ\\\666ȄѺWWWIIINNN======vvvѯԳ+++@@@ԏ666ooooooooo}}}iiifffUUUvvvggg|||sssuuuvvvԄppplll}}}cccggg\\\666ҦooovvvmmmԦiiirrr{{{777YYYvvvIII===qqqwwwtttԳ+++@@@ɸЬfff{{{ҾĦŦԦγѱӸΨʬԳ+++@@@fffԳ+++___sss@@@yyyԳ+++QQQ___sss@@@Գ+++Ԣ___sss@@@Գ+++@@@SSS___sss@@@Գ+++ԑ ___sss@@@Գ+++FFF[[[___sss@@@Գ+++ԉ___sss@@@¡ԨԳ+++OOO```___sss@@@ԏ222iiiiiinnn)))Գ+++yyyyyyyyyyyyyyy___sss@@@ԏffflllxxxÀwww˷wwwzzz)))vvvԬxxx|||gggԳ+++___sss@@@ԏ::::::JJJNNN@@@111š@@@BBBppp)))pppkkkwwwVVV󣣣Գ+++___sss@@@ԏZZZ===!!!)))EEE@@@000šRRR===Ӌjjj)))zzz ٴ^^^}}}Գ+++}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}MMMsss@@@ԏfff+++EEE@@@---šTTT===Ԍiii))){{{uuuι!!!ԪWWW}}}Գ+++IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII@@@ԏfff+++EEENNN!!!šTTT===Ԍiii)))tttccczzz!!!ԪWWW}}}Գ+++鸸@@@ԲπԌΝzzz̺ԉ԰~~~Է{{{ԪWWW}}}Գ+++tttsss@@@ԪWWW}}}Գ+++JJJ(((((((((((((((RRR___sss@@@ԪWWW}}}Գ+++kkk___sss@@@Ѫaaa:::GGGԴGGGԪҳlll===;;;\\\ͪQQQСRRRWWW}}}Գ+++ԥ(((666___sss@@@ԱfffҺvvv§ӡͯӻӳBBBԪԱUUUѳ[[[MMM˖]]]WWW}}}Գ+++``` sss___sss@@@ԂӻxxxeeesssaaasssYYYoooqqqgggrrruuuuuuȳBBBԪqqqԴPPPBBBZZZWWW}}}Գ+++Ա...___sss@@@oooԜDDD!!!JJJKKKР+++VVVOOO(((BBBԪYYY222'''mmmYYYWWW}}}Գ+++ZZZ jjj___sss@@@ԅӒπLLL&&&JJJ222ˋhhhɳBBBԪxxxԮVVV@@@bbbWWW}}}Գ+++###___sss@@@Թ^^^Ȯccc;;;LLL&&&JJJcccmmmXXXªuuuóBBBԪԽPPPǧPPPLLLrrrWWW}}}Գ+++___sss@@@ѭlllHHHFFFwwwԊEEE...ԥԹjjjAAATTTԖRRRrrrvvvvvvJJJgggeeePPPѕSSS___ҺaaaԪzzzGGGDDDgggҲiii___WWW}}}Գ+++___sss@@@ԼrrrɆӜ˩ʨLLLsssʄӽԧʤ'''ϯpppRRR¿ԪWWW}}}Գ+++___sss@@@ԟrrrǺ888www~~~Ԥjjj~~~xxxkkkFFFggg&&&zzzrrrWWWllliii|||ԍooo{{{ǹjjjxxx~~~UUUgggIII{{{|||ԪWWW}}}Գ+++ﭭ___sss@@@Ԕkkk888ccc///EEE:::111ӽ666___&&&nnnӡ___WWWѠRRRBBBӻ%%%ǥԊkkk...BBBAAA(((ԪWWW}}}Գ+++)))sss@@@ԤtttԨqqq888{{{Ԧvvv333___&&&oooԵKKKWWWԦOOO333,,,ǺtttԊkkkjjjԪWWW}}}Գ:::TTTzzzvvvNNNϓΟ|||ԉУIIIooo>>>zzz҅hhhԬbbbqqqѠ333ɪmmmͷ555Ӕyyy\\\̨̾WWW}}}ĸ̖mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmԺooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm>>>}}}Ե__________________________________________________________________________________________________________________________________________cccttt__________________________________________________________________________________________________________________________________________ 2@ (/root/Desktop/Documentation/GWMetadata/attrs.tiff;v;;;HHgworkspace-1.1.0/GWMetadata/README.rtfd/mdf.tiff0000644000175000001440000216071413214346537020433 0ustar multixusersII*333222EEE333gggϹVVVEEE333gggϹVVVEEE333gggϹVVVEEE333gggϹVVVEEE333gggϹVVVEEE333gggϹVVVEEE333gggϹ VVVEEE333gggϹ  VVV EEE333gggϹ  VVV EEE333gggϹ  VVV EEE333,,,$$$$$$,,,gggϹVVV EEE333gggϹVVV EEE333,,,###gggϹVVV EEE333""""""gggϹVVV EEE333222{{{&&& ))){{{222gggϹVVV***EEE333222))) ###)))222gggϹ)))VVVEEE333gggϹVVVEEE333gggϹVVVEEE333gggϹVVVEEE333gggϹVVVEEE333뜜dddϮVVVGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG999***GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG```GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ԚԚԚԯݬԚ'''ԦԚ'''ԦԠԚ'''ԦԠԚ'''ԦԠԚ'''˴Ԧ{{nnöÜhhŖԠԚ'''˝WWW???@@@TTTԦɀFFµ˷((22ɦԠԚȯԽԹМ'''Ԥ^^^ssswww]]]Ԧ£XXGGµ̷((&&ԠԚˍbbbXXXYYYnnn~~~XXXԅ::::::::::::;;;XXX'''ԁTTTԸ[[[wwwGGGԦYYGG((&&¾ԠԚԼ???˖pppллƭ~~~NNNԬԶ}}}'''ԁdddlllwwwܲHHH[[[Ԧ(((RRR`````````~~~>>>YY..((%%ԠԚԾFFFŮҸuuu___```rrrԾrrrTTT]]]^^^Ԑ...ccc[[[ccc~~~888zzz^^^YYYmmmiiigggLLL}}}\\\ZZZaaa'''ԏRRRɒFFF~~~[[[III[[[Ԧ(((ĸ33aaɾԠԚ͚```{{{ɈJJJfffVVVԸzzz{{{GGGԐ777gggΗ~~~CCCrrrdddmmmiiigggTTT]]]yyy'''Ի{{{\\\EEE***ppp[[[rrrKKK[[[Ԧ(((cccuuuzzzpppnnn{{{nnnppp̷((IIͺξѽʻŹԠԚϵͷcccvvvooo***@@@@@@>>>aaaʩ```AAAԐEEEғWWW~~~VVVwww___mmmiiigggmmm```uuubbb'''ԻzzzRRRRRRaaaFFF+++vvvkkkaaaLLL[[[Ԧ(((BBBMMMMMMMMM\\\hhh___mmm̷((%%mmZZII¾ƸӿǹԠԚeeeϝDDDȍyyyζԮWWWAAAԐFFFԙ\\\ҵ~~~XXXwww___mmmiiigggnnn```uuú'''ԩKKK+++vvvﲲMMM[[[Ԧ(((!!!***777̷((%%ȾZZIIоͺ½ԠԚqqqyyy{{{{{{ѫ```xxxԫRRRrrrEEEFFFԵzzzvvvzzz~~~XXXwww___mmmiiigggnnn```uuuԢԠԞˇ'''ԨKKK+++NNN[[[Ԧ(((666󫫫AAAMMM͸((%%ǽZZUUɺоԠԚҽyyyWWW^^^̞fffiiiƐfff|||zzztttЮsssdddԚԕԎԋԆԂ{{{'''Ԩ```ԻOOO[[[Ԧ(((^^^𚚚ټLLǽffhhԠԚ'''zzzjjjԦooohhhkkkkkkkkkkkkddd^^^ZZZVVVwwwwww{{{ԠԚ'''ԦԠԚ'''ԦԠԚ'''ԦԠԚ'''ԦܿԚϛaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPPP'''Թ~~~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ԚPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPhhhԍPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPԚԚԚ׽κϖssssssssssssssssssyyyȤ΁ȱ$$$CCCȱԠ͂ȱԠ%%%CCCȱŌ~~~ȸ阘~~~Ԡ̓ȱ⒒???歭###ԼGGGԠ%%%BBBȱmmm???˂###Լԯ555ԃjjjjjjԣԠ̓ȱmmm???˂###Լԯ555333ԣԠԿBBBȱmmm???˂###Լԯ555333ԣԠ̟ȱmmm???ppp˂###Լԯ555333ԣԠȱԱhhhsssssssssԧ111mmm???ԹԲԂԦ}}}┖˂###ƖԼԯ555333ԣԠȱԑ)))ԀVVVԸ@B@!!!mmm???ԋxxxxxxԀWWW///KMK˂###^^^dddԼᄒܼ䵵隚bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbԯ555bbbbbbbbbbbbMMMbbbbbbbbbbbbԣԠȱԑDDDԤԀVVVĘ{{{Ԛ{{{”{{{zzzԌxxxԹzzzԸ@B@RURrtrmmm???řxxxUUU===ę{{{zzzԘCCCLLLxxxԣ˳ӑuuu%%%ggg///wwwKMKRURada˂###ǀ^^^PPPԼ񯯯bbbfffgggԯ555<<<ԣԠȱԑ_________υQQQԀVVVʚvvv{{{iiiJJJ[[[ԗkkk}}}^^^QQQ___MMMjjjSSSĂyyy쌎@B@RURrtrmmm???ԟ```xxx[[[CCCjjj{{{dddfffLLLHHHTTTkkktttԐ;;;XXX:::(((rrr///lll}}}MMMKMKRURada˂###߼:::]]]PPPԼʊǜwww}}}cccgggԯ555<<<ԣԠȱԑ&&&wwwwwwwwwЅQQQԀVVVccc:::[[[UUU555pppiii\\\```vvvԯ@@@QQQzzzIIIyyyEEECCCJJJ\\\PPP(((ddd$%$$%$$%$$%$$%$$%$RURrtrmmm???ԖWWWwww___ԶNNNnnnfff```___wwwxxxgggԳpppnnnQQQkkk:::555///+++nnn$%$$%$$%$$%$$%$$%$!"!RURada˂###߼&&&]]]PPPԼ瑑ttt餤wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwԯ555wwwwwwwwwwww]]]wwwwwwwwwwwwԣԠȱԑDDDԅQQQԀVVVjjj[[[xxxxxxtttiiilllbbbtttԭ@@@QQQKKKDDDXXXiiixxxwwwqqqxxxlll/0//0//0//0//0//0/797RURrtrmmm???Խwww___ԴPPPkkkfffooo___wwwԲhhhsss|||ppp:::555///(((xxxuuu/0//0//0//0//0//0/242RURada˂###TTT\\\PPPԼ񩩩nnnnnn{{{ԯ555333ԣԠȱԑDDDԅQQQԀVVViiimmmbbbtttyyyqqqHHHQQQKKKDDDhhhѴԽRURRURRURRURRURRURRURRURrtrmmm???Աnnnssswww^^^ԉfffYYYkkkfffppp___wwwԠYYYԁXXXyyyeee>>>:::555///(((RURRURRURRURRURRURRURRURada˂###좢[[[OOOԼDDDډڍԯ555333ԣԠȱԑDDDԅQQQԀVVVУnnnqqqnnn~~~iiimmmbbbtttԎcccvvvQQQjjjQQQKKKDDD͉nnnrrrlll˞mmm???ԩiiilllfffԈJJJaaattt[[[___fffppptttSSSjjjlllcccԧ===~~~mmmGGG:::QQQddd///(((Ҟ˂###[[[OOOԼχUUU􄄄>>>CCCԯ555333ԣԠȱԹԴԱʪԨԥŸÞԜԙĞmmm???ȥԺţԳȔүԕԧĐԎ˂###ԸZZZOOOԼ}}}hhhFFFCCCԯ555333ԣԠȱmmm???˂###ԾԼ̬߾⺺ԯ555ԓԣԠȱmmm???˂###Լԯ555ԣԠȱmmm???˂###Լԯ555ԣԠȱ鰰mmm???䰰###Լװ555ǰԠȱԵUUU:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)))???ԬRRR::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::000###ԚLLL:::::::::::::::::::::::::::::::::::::::::::::::::::ԂDDD:::::::::::::::::::::::::::::::::::::::::::::::::::ԠȱԿԺԮԝԠȱԠȱԠȱԠȱԠȱԠȱ񿿿ooo\\\ĭ񀀀]]]Ԡȱք???ܝ###Լ@@@Ԡȱmmm???˂###Լԯ555dddAAAAAAԣԠȱmmm???˂###Լԯ555333ԣԠȱmmm???˂###Լԯ555333ԣԠȱ___mmm???KKK˂###Լԯ555333ԣԠȱԤBBBPPPPPPPPPddduuuԗyyyԊIIIege111mmm???ԙxxxvxv˂###޼uuuԼԯ555333ԣԠȱԑ444¶ԀVVV...͋Ը@B@uwummm???ԵKMK uwu˂###޽BBBoooԼ酅999999999999999999999999999999999999ԯ555eee999999999999---999999999999ԣԠȱԑDDDԗnnnԀVVVԾ\\\dddԅooo\\\yyyԻ}}}[[[ZZZsssqqqkkkwwwpppWWWԯqqq[[[jjjԫkkkZZZlllѳxxxmmmbbbɤbbbZZZnnn<<>>{{{WWW]]]JJJcccaaa@B@RURrtrmmm???ԔqqqԿXXXtttKMKRURada˂###bbbݾAAAcccԼgggԯ555<<<ԣԠȱԑ666666666jjjͅQQQԀVVVǐ|||{{{iiiJJJ\\\Ԏooo[[[QQQeeeJJJhhhMMMwwwlllԼppphhhoooyyyºeeeaaa///888jjjzzzxxxsssOPOKMK;<;888lnl@B@RURrtrmmm???ԂTTTԒ```sussussussussuspspKMKRURada˂###߼:::ݿ@@@cccԼuuujjjgggԯ555<<<ԣԠȱԑ333҅QQQԀVVVXXX!!!333000jjjiiibbbaaauuuԿ888QQQJJJEEE666***444---Ԛ---,,,444,,,ԷXXXWWW000444+++BBBzzz888ТEEE555RURrtrmmm???ԂTTTԗWWW>>>RURada˂###߼???bbbԼ[[[qqqgggppp鹹ԯ555ம&&&}}}ԣԠȱԑDDDԅQQQԀVVVuuuzzziiilllbbbtttԠ|||FFFQQQKKKDDDiiiԘeeeHHH???___ӱuuuppp***ӱ333̆ >A>>A>242 >A>>A>CECRURrtrmmm???ԂTTTƧpppӡ>A>>A>>A>>A>>A>>A>@C@RURada˂###hhh>>>bbbԼsssvvvyyyԯ555333ԣԠȱԑDDDԅQQQԀVVVŁzzz̺iiimmmbbbtttqqquuuFFFQQQKKKDDDaaaЪ}}}ԸXXXѥzzz}}}hhhIIIҝuuuaaaç...UUUɂcccԱRURRURBDBRURRURRURRURrtrmmm???ԂTTTԣqqqqqqRURRURRURRURRURRURRURRURada˂###===bbbԼxxx~~~zzzԯ555333ԣԠȱԑDDDԅQQQԀVVVҮnnnSSSXXXiiimmmbbbtttԛ\\\YYYwwwVVVbbbQQQKKKDDDЙaaaSSS[[[Г]]]SSS\\\ͥiiiRRRDDDUUU‰WWWSSS^^^tttNNNQQQ{{{ШcccQQQTTTpppԱ &&&mmm???ԂTTTԭeeeNNN___ӷ˂###;;;bbbԼxxx~~~zzzԯ555333ԣԠȱŵ÷¸ϾԽԻ˸˷ԶԵ˷ʵǽҵӷɲԧԦ¯ЪϹ̮˯mmm???¸ͺ˂###Ԭ:::aaaԼxxx~~~zzzԯ555333ԣԠȱmmm???˂###ɬԼԯ555ԲԣԠȱmmm???˂###Լԯ555ԣԠȱmmm???˂###Լԯ555ԣԠȱ楥mmm???॥###Լҥ555򿿿ԠȱԨ)))???Ԝ(((###Ԃ%%% ```!!!Ԡȱʯǯ¯ԺԠȱԠȱԠȱԠȱԠȱԠȱRRR:::Կiii;;;Ԡȱvvv???Ҍ###Լٸ:::ٮԠȱmmm???˂###Լԯ555EEEԣԠȱmmm???˂###Լԯ555333ԣԠȱmmm???˂###Լԯ555333ԣԠȱ@@@mmm???'''˂###Լԯ555333ԣԠȱͥ\\\111...KKKؾKMK111mmm???ԉ___X[X˂###౱UUUԼԯ555333ԣԠȱ̐NNNëiiieeeԸ@B@\_\z|zmmm???¸KMK \_\jmj˂###ೳ&&&yyyԼpppԯ555HHH ԣԠȱ԰kkkҵyyy[[[ttt```vvvӌnnnyyyOOOrrr>>>^^^Բfff<<>>iii}}}wwwrrrCCCcccuuu}}}ƵpppYYYWWWZ]ZZ]ZZ]ZZ]ZZ]ZY[Y@B@RURrtrmmm???ԂTTTԈ___Z]ZZ]ZZ]ZZ]ZZ]ZZ\ZKMKRURada˂###߼:::බ###uuuԼXXX^^^@@@```[[[@@@ccc222;;;gggԯ555<<<ԣԠȱԙMMMчQQQwwwSSSrrr```jjjkkk@@@ xxxYYYxxxԵ RURrtrmmm???ԂTTTԛVVV~~~RURada˂###߼!!!uuuԼTTTӹ񽽽·񸸸```ԯ555000ԣԠȱԬgggԽ|||YYY]]]}}}rrrdddkkkkkk}}}YYY|||ʴNQNNQNNQNNQNNQNNQNORORURrtrmmm???ԂTTTм___NQNNQNNQNNQNNQNNQNNQNRURada˂###}}} uuuԼtttvvvcccԯ555333ԣԠȱʈKKKѶkkk]]]VVV\\\***tttrrrdddkkkkkksss̬sssYYY|||ԽRURRURRURRURRURRURRURRURrtrmmm???ԂTTTԗzzzwwwlllRURRURRURRURRURRURRURRURada˂###tttԼxxxssscccԯ555333ԣԠȱʝSSS'''###@@@dddPPPʜVVVrrrdddkkkkkkԴeee666EEEYYY|||mmm???ԂTTTԳ```000YYY˂###߾tttԼxxxƁcccԯ555333ԣԠȱmmm???˂###ԟtttԼxxxUUU888XXXRRR888[[[GGGԯ555333ԣԠȱmmm???˂###Լԯ555ԣԠȱmmm???˂###Լԯ555ԣԠȱmmm???˂###Լԯ555ԣԠȱᘘlll???ژ###Լʘ555𵵵ԠȱԝBBBԍ&&&mmmBBBԠȱԠȱԠȰҠɟ˂>>>???YYYѮQQQ===iiiԗ???ԍҭ777ΒOOOmmm}}}ԗ???VVVqqqѫҮ222ԻBBBѧKKKӾvvvEEEGGGmmmԗ???ҸqqqDDDIIItttԅ111eeeJJJkkkeeeCCCQQQҭhhhDDDLLLgggLLLpppCCCZZZ111333ZZZ>>>ggg̷uuuԶ***ӭ333Ɏ^^^|||bbbԗ???ņgggtttoooԅDDDwwwAAAqqqcccxxxvvvggggggOOO\\\zzz[[[{{{fffyyyÒTTTԷ...Ӭ777fffMMMӗ???]]]\\\ӅPPPӀVVVyyy]]]MMMvvvggglll```uuu[[[{{{ԏeeemmmmmmԽLLLϡXXXňýԗ???ԅQQQԀVVVyyy]]]ξgggnnn```uuu[[[{{{ƴVVVМFFF}}}}}}ϡYYY{{{ԗ???ΗbbbyyyԅQQQԀVVVyyy]]]˅rrrvvvgggnnn```uuuaaappp[[[΅!!!!!!!!!!!!999ҺaaaQQQxxxɏKKKPPPԠVVVňKKKRRRԒeeeԍjjjԇpppԾ{{{JJJWWWxxx~~~sssԍRRRcccEEE{{{ϗ|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||ό+++++++++++++++++++++++++++++++++++++++++++++++++++ όѲ'''ό󳳳333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''ǚόvvv333'''ٚģ𚚚όvvv333'''ƚᴴ𛛛όvvv333'''຺ٚ侾߼ϥʢɟެ𬬬όvvv333'''ƚѸ佽汱׶߭гࣣӲҴ񠠠όvvv333'''ښ˞󺺺岲ᥥόvvv333'''ƚ̮֬ĬȨƧŰǡόvvv333'''ۚЧ᫫ݧޢᄒ𶶶֛όvvv333'''ŚȬǩ׮׬ұϬЬ־Ӝʤόvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333'''όvvv333...όvvv333666όvvv333666ùόvvv333666Ǯ όvvv333666lllόvvv333666³ͨμw_fpΜ̰ɹhhhόvvv333666cC/0.-XC6aJRnom)'|hhh]]]XXX~~~ӬtttԵԒiiiDDDəԼkkkIIIϡaaaaaa|||ӽsss```ɗaaacccѲooodddѭmmmfffҰsssbbbόvvv333666³7$dzFb{PwCd(N<2&')M;?vZez~5yhhhĂqqqqqq{{{fffԱNNNUUUԔnnnVVVVVV͖͖JJJўNNN¼ ҶKKK{{{tttȆyyyuuuФVVVxxxԽyyyԹzzzԹ{{{όvvv3336667#ŮD]xBc)P=)P=3'!)P=8nTfy~3v{hhhԞtttѮ^^^}}}ϐoooQQQppp{{{vvv~~~ԫddd```Ԯqqq___oooЅΟbbbiiiҧiii^^^qqqFFFlll}}}]]]bbbȀ\\\___IIIhhhaaa̗]]]gggӳZZZƆpppҧbbbŎaaaeeeȱ}}}ӠԎgggxxxrrrzzz^^^zzz BBB???AAAjjj\\\Чjjjѧ888ԼTTT̗```˛yyyΑRRRԧcccLjuuuԟjjjł}}}Ԛrrr̻όvvv3336666#8hv}KoBbEgA~a>y]EgImlh){qhhh|||sssyyywwwooonnnXXXϧfff|||:::uuullljjj333AAAiiifff yyyCCC}}}tttrrrԽHHHԺHHHzzzłoooӴeeeԘ===˛tttzzzEEEgggooorrrKKK]]]WWW]]] :::ǽʅ```Դ555Ө>>>|||sssԚOOOяXXXԏYYYфcccԅJJJnnnVVVόvvv333666³V"&MSyPwPwPwPwPw_|F!8hhhuuuqqqttt::::::ԛvvvssshhh```\\\:::222000:::111^^^UUU___hhhĔ###444:::000 ...̝222Ѩ===Խӱ###ԻIIIѤOOOVVVԘ===ggg 999777%%%TTTĈ|||MMMzzzrrr___jjjaaadddrrr ЩhhhyyyԳ---Ӫ666˞iiiԗIIIӎRRRԋUUUӃ^^^~~~>>>lllόvvv333666ߋ'!)N\rPwPwPwbv~J%zpGxhhhԈvvvαCCCuuuԸnnndddoooeee{{{Ԋ{{{qqq:::dddPPPkkkqqqhhh̐^^^ ӻ(((ԽԶ ΪuuuԻmmmԘ===xxxnnnє\\\xxxhhh}}}rrrdddmmmiiifffpppwww ̊nnnԷAAAѥLLL„uuuԟWWWϏdddԔaaaΆnnnԇbbbssspppόvvv333666³J %:M}TU8#wx,qhhhԱnnnϣ;;;uuuhhh,,,jjj000Թ]]]AAA:::]]]Ш~~~uuuMMMJJJ777ҳOOOҡyyy IIIMMMOOO͇ZZZԽԶ rrrFFFː;;;___Ԙ===ɍlllԩWWWddd555sssrrrdddmmmiiifffpppAAAҴ,,,Ԡѫ\\\hhhȊyyy͝iii԰pppԩsssԠyyywwwόvvv333666ެٹ; +1zy$qzhhhΤkkkOOOWWW]]]ԅBBBԉ;;;ooo@@@:::ϓaaaXXX^^^Ԥ%%%\\\QQQΉ\\\XXX___ Ъ```VVVWWW~~~ϪeeeUUUWWWlllԽԶ nnnRRRXXXӭAAAcccԘ===ҶsssWWWZZZxxxԾdddNNNÛKKKԋxxxrrrdddmmmiiifffpppԐZZZTTTUUUjjjJJJddd555666666MMMΣ]]]\\\ooonnn555666666cccʗ]]]\\\zzzȒ]]]]]]ČYYYVVVzzzόvvv333666³ۮ׳G$*x{/shhh͹óıԽԮɳ˧ӹȯԣԡдзΦͨѽ̲ůокǵԽԼԻԹʰàӢѣҼ̲ϸȱƱîόvvv333666ʰ˖ƤU}&tu%m1{@սhhhόvvv333666³hhhόvvv333666hhhόvvv333666ɔUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFFFoooόvvv333666όvvv333666όvvv333666όvvv333666όvvv333???όvvv333AAAόvvv333AAAҸόvvv333AAA򤤤όvvv333AAA񷷷ʞ򠠠~~~όvvv333AAAҕcBGGe֠}}}όvvv333AAAf8,&%$'2Wҳ}}}όvvv333AAAT/%$#"! ":}}}όvvv333AAAL.%*L~yt|oE%Rѵ}}}όvvv333AAA/)5n\TxSxTxZ}r])-"r}}}όvvv333AAA`&˾.~`XPxPwPwPwPwYxU ;㠠}}}όvvv333AAA6$ʻ?nPxFi*R?<-#D4.P=Qkkr-#y}}}⎎EEE===xxxjjjρXXX777888444UUU󑑑777 888777<<~?Dz}}}kkkÎľtttiiiFFF+++hhhccc﨨ϵ +++___999]]]nnnXXXwwwkkkvvvwwwnnnggg___]]]555???򬬬cccVVVaaadddoooKKKˁόvvv333AAA(!"=_{qPwPwPwgk<vmzIs𠠠}}}hhh䁁kkk偁mmmFFF]]]~~~ooouuu"""***깹|||===ZZZgggYYYsssnnnzzzzzznnnggg___nnn󏏏uuuTTTaaa䉉mmm}}}xxxόvvv333AAAT )7AE+uy2r}}}߀;;;|||''',,,ggg:::FFFddd~~~IIINNN777OOOwww%%%"""***mmm񼼼MMM===yyyۈ???݌wwwVVV҂nnnggg___FFF???gggꇇ휜}}}ٌюۖǖ㏏όvvv333AAAB&-yw'p}}}|||888AAAZZZPPPSSSFFF___@@@]]]&&&wwwmmmPPP@@@bbb===XXXQQQJJJ]]]"""***틋;;;SSS===ccc<<x\)P=2&(O<8nTd|}7y{hhhԸlll|||ʄmmmbbbӤUUUPPPԆuuuVVVNNNҭԻ666ӘNNNſҼſԭ(((Ԩ...ѠBBB͑PPPĮ ԻԺӻ¿ѫ:::͐QQQmmm~~~ΗOOOłgggԳqqq{{{ԭssszzzԬwwwόԆggg3336667#îA_y?{^%H7.ZE!B21&.ZE>>̍NNNDDDVVV UUU)))ϝӷ^^^BBBHHH ^^^___AAAFFFqqqԭ(((Ԩ...ԻmmmԾzzzԕAAAҷpppFFFKKKuuuoooTTTlllЇhhhnnn???^^^OOOmmmbbbBBBXXX RRR<<<|||ЫѪ666ԸEEEѤNNNˤϓPPPԠZZZΏeeeԖccc͆oooԐiiiόFFF666<#1rhQwPwPwPwPwPwSxr]%}$thhhtttppp·ԉxxxhhh~~~WWWӸ^^^jjj:::[[[JJJttt\\\;;;IIINNN>>> ԜCCCjjjYYYҷ???[[[|||lllԭ(((Ԩ...ʏ^^^ϩ[[[ԕAAAŅgggrrrppp???lll~~~|||nnnWWWbbbSSS^^^yyy ӳ̴uuuԳ---Ӫ666ɪtttԗIIIӎRRRԋUUUӃ^^^Ԁ;;;YYY888pppόѺ666³k#!<^~|RvPwPwPwSxlq7{Cǵhhhyyyrrrccc uuuԨtttzzz{{{rrriii[[[:::---SSSWWWwww|||ȋ зNNNttt о---Ӯ999ԭ(((Ԩ...ԭRRR```ԕAAA]]]___ʋooo[[[nnngggiiilllbbbttt VVVԴ111ө:::л\\\ԘLLLҎVVVԍWWW҃aaaFFFlllόѺ666/! 4llx[{Yz_}s^3}vmW|ƿ򜜜hhhԖuuuUUUuuujjjMMMjjjOOOԠqqqooo:::vvvʸVVVwwwxxxaaaSSSϙrrrȵ ]]]Ծ%%%ΧԿ555Х???ԭ(((Ԩ...~~~jjjxxxԕAAAԙVVV~~~SSS{{{nnngggiiimmmbbbtttQQQ mmmpppԺOOOΞ[[[ҵkkk|||ԥ```ʍqqqԜhhhɆyyyԏqqqwwwnnnόѺ666³i%#-8=%~tC|űhhhwwwrrr999zzznnn&&&ppp'''YYY111:::```oooԊ666FFF333OOOmmm bbbyyyWWWlll???ppp~~~sssԭ(((Ԩ...Ϛ,,,YYYԕAAA͖dddyyyԱYYYXXX000wwwԺnnngggiiimmmbbbtttMMMIII&&&ϚGGG~~~}}}ɊXXXԺ}}}}}}Ե}}}}}}ԭwwwόѺ666\'%+w=|hhhԼyyyEEEJJJ~~~ԛdddԞ\\\ԇ^^^TTT԰cccKKKaaaԵ===xxxrrrԪWWWJJJeee...mmm:::===dddgggHHHSSS555ӿmmmGGGNNNԴEEE԰IIIԸaaa|||ԟYYYňLLLTTTxxxddḑlllԄuuuzzz{{{~~~uuuԳ[[[GGGSSSԔCCCXXX%%%)))///̈́############>>>ҹbbbSSS{{{uuu############VVVѫ^^^VVVХ]]]XXXΜUUUOOOόѺ666³j9)$|+!/UʵhhhόѺ666۳QLYm̲hhhόѺ666³hhhόѺ666ëԇjjjόѺ666͙EEECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCIIIόѺ666ĻόѺ666όѺ666όѺ666όѺ666όş666όЫ666ȭό𰰰333666mmmόϷvvv333666³󿿿ĿijksҴǶƨhhhόԼVVVvvv333666uM253Dyܴhhhόϔvvv333666³G($#"! !7hhhόԽ333 WWWvvv333666=(&1@A;,(zhhhόϔvvv333666³9**ůBjha}hb3!'bzCd/\F6iQ-WB&J96iQ@z`jp-}shhhԇvvvȬiiivvv{{{______HHHԾYYYʌkkkfffjjj|||bbb___rrr!!!gggkkkmmmdddccchhhdddWWW Ңhhhdddaaawww̞hhhcccdddqqqԱmmmXXXvvvԟ$$$WWWZZZzzzgggXXX pppXXXeeeѴϝEEEԷ???ѦHHHͰʋ\\\ԞVVVϏaaaԔ___΅kkkԌ^^^όvvv333666E"-z_RxPwPwPwPwPwWyxU#+yhhhtttqqq̧Ԑwwwlll]]]HHHHHHNNNpppvvv:::KKK!!!CCCTTTӗMMMӝAAA MMMҼcccOOOʉ^^^Աў333ԟ000111ϊHHH ӸҿvvvԳ---Ӫ666кyyyԗIIIӎRRRԋUUUӃ^^^<<>>ΛIIIԱ%%%Ԫ,,,ԟ666Ԛ<<<ԓCCCKKK ԸӻgggԽXXX̗fffЭkkkԩfffƉyyyԠlllĄԕtttwwwuuuόϚbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbKKK333666³ЀȽ-!)39"~|sVhhhŇpppFFFvvv///yyy...HHHaaaeeettt}}}~~~pppPPP!!!iiiwww,,,qqqqqqnnn{{{ ЀvvvXXXŃtttrrrԱ%%%Ԫ,,,Կԟ666Ԛ<<<ԓCCCddd```>>>ϐ666ɋxxxxxxǀBBBԿ~~~|||Ի~~~ԵxxxόOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo666x2$+~"vWϺhhhhhhlllԩԬzzz|||[[[aaa^^^kkkԺmmm}}}ԮuuujjjdddԺvvvāqqqÐmmmjjjiiiwwwUUUƂjjjtttŇjjjoooԾfffԺkkkԶnnnԳqqq԰tttԫyyyԼyyyjjjsssԤgggvvvPPPTTTXXXϘOOOOOOOOOOOOcccӿ~~~sssȌOOOOOOOOOOOOvvvҵ{{{uuuѱzzzvvvЪtttpppόΗ666³ݾZ8 ~$w-,Kzhhhό馦333666Ƣ«}yhhhόΝvvv333666³hhhWWWόuuuvvv333666ţppplllόԼEEEvvv333666ϧeee``````````````````````````````````````````````````````eeeόwwwvvv333666όԻDDDvvv333666όwwwvvv333666όԺ DDDvvv333666όxxxvvv333666όԹCCCvvv333666όɛvvv333666όvvv333666όvvv333666όvvv333666ό|||NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN<<<333666όjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj666ϓ[[[ԺѴϒCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCό yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyόόόόόόƲόǽԮόפ\\b\\e[[c[[d[[e\\f[[eXXbVV`SS\PPYOOW[[bϤԥ䯯«ԙɻόŃ0''=**?--D00H22L55P55P44N11K..F++A77I᫫ԥʹLjVYQȏԼόǃ<11L44P88V==]AAbDDgEEhCCf@@a;;[77S@?W᪪ԥfE.+*)<[ŕόƃ?55P77U<<[AAcFFjJJoJJpIInEEh@@a::YCB[ᩩԥP,%#"!  4vόDŽ!!B77T::Y??_DDgJJpOOvOOwNNuIIoDDg>>_FE_ਨ秱ʅ~~䏝}֊~~磭DŽ~~᎜}鷽Ӊ~~枩ă}~ߍ}鲺Ј~~ԥΛI+%ʽ/VkeR&1όÄ!!D99V==\AAbGGjMMtRR{SS}RRzMMsGGjAAbGGaদܶȬ¬¬ìïƱDZDzȰDZȚq^y[v\w\w\ve|Ӯìë­ĬòȰƱȲɰƲɌc}\w[v\w[v\wp̬¬¬­ĮıȰDZȱȰǥ}`z\w\w\w[vaz۴Ǭ«¬ìðDZDZDzȰDZȗn^x[v\w\w\vf}Ѭ­ë­ĬòɰƱȲȰưɉb|\w[v\w[v]wwˬ¬¬­îűȰDZȱȱǢ{`z\w\w\w\vbzٳƬ«­ìðǰDZDzȰDzȕl]x[v\w\v\vg~Ϭ¬ë­ĬòȰƱȲȰǭȇb|\w\v\w[v^x~ếʬ¬¬íîűǰDZȱDZȠx_z\w\w\w\vc{ԥ\κ.&ïA{wbYyY|^yrp+-&3όʿ!!C99W<<\BBcGGkNNtSS|TT~SS|MMtGGk@@bGGa১Ԗ^^^湿́ooooppqppqha~`~`~aaae}dddrrr䝨sopopppqpqqc_~`~`~a`a~nMMMٌpooopppqpqlb_~`~aa`c~ԍbbb崻~ooooppqppqg`~`~`~aaaf}ZZZvvv㘣qopopqpqpqpc_~`~`~a`a~uԶQQQ։pooopppqpqkb_~`~aaad~ԃfff寶|ooooppqppqf`~`~`~aaa~f}QQQzzz┠popopqpqpqoc_~`~aa`b~|ԭUUUӇooooppqqpqja`~`~aaad~zzziiiԥ@'5s|V}PxPwPwPwRzijz1wόø!!B88V;;[@@aFFiLLrPPyRRzPPxKKrFFh??_FF_ߧyyyKKK}}}ⱸsaaaaaaaaaaaaabcbbe~...}}}ᑞeaaaaaaaaaaaaabcbbnԶ}}}~aaaaaaaaaaaaabccbdkkkWWW}}}⫴paaaaaaaaaaaaabcbbf~ }}}ጙbaaaaaaaaaaaaabcbbuԨ%%%}}}|aaaaaaaaaaaaabccbd~]]]bbb}}}⥯naaaaaaaaaaaaabcbbf}}}}aaaaaaaaaaaaabccbc|Ԛ000}}}yaaaaaaaaaaaaabcbbe~OOOmmm}}}ԥx.$ɓZ\}Px?{^*R>0^H(N;I~`UtBt7nόн?55Q88V<<\AAcFFkKKpLLqJJoFFiAAb;;ZCC[ߥyyy]]]­|||߭tcccccccccccccdedcf...|||ڑgcccccccccccccdecdnԶ έ|||ccccccccccccccdecekkkkkk|||ިrcccccccccccccdedcf |||ڋdcccccccccccccdecduԨ...˭||||cccccccccccccdddce]]]yyy|||ݣocccccccccccccdedcf~į|||؇ccccccccccccccdecd|Ԛ<<<ɭ|||ếzcccccccccccccdedceOOO|||ԥo+#ƃtVxPw3cL#E5:,2ZDLp|VsjόϺ<22M55Q99X>>^BBdEEiFFiDDgAAb==[77T@@Xߤyyy]]]®ڬueeeeeeeeeeeeeegfeg...Ե؏ieeeeeeeeeeeeeegefnԶ ͮeeeeeeeeeeeeeeffefkkkkkkڦreeeeeeeeeeeeeegeeg Բ׊feeeeeeeeeeeeefgefuԨ...ˮܽ|eeeeeeeeeeeeeeffef]]]yyyԽ١peeeeeeeeeeeeeegeeg԰ֆeeeeeeeeeeeeeefgef|Ԛ<<<Ȯ۸zeeeeeeeeeeeeeeffegOOOԻԥp*#}qTw2`J)P=)P= "C3)P=Jn~SqhόϻâFFRKKWHHUEESDDRCCRBBRBBSCCSDDTGGUIIVZYeߣyyy]]]էugggggggggggggghghh...ЍjggggggggggggggifhoԶ ټ~gggggggggggggghhghkkkkkkԢsgggggggggggggghghh ψhggggggggggggghhghuԨ...ط|gggggggggggggghhgh]]]yyyӝqgggggggggggggghghḧ́gggggggggggggghhgh|Ԛ<<<ײzgggggggggggggghgghOOOԥo*"UXyCdDdEf;sXCcEfNtBk"cόϿɼҝyyy]]]Σthhhhhihhhhihhhjiih...ʊkihihiihihiihihjhjnԶ ѷ|hihihihhhhihhhiiiikkkkkk͟rhhhhhihhhiihihjhih ԿʆiihihiihihiihihjhitԨ...гzhhhhhihhhhihhhiiii]]]yyy͚qhhihiihihiihihjhihԾɂhihihiihihiihihjhi{Ԛ<<<ЮyhhhhhihhhhihhhiiihOOOԥ4"-fuQxPwPwPwPwPwpf/}[όʟyyyjjjǝshhhhhhhhhhhhhijhig...ԽjhhhhhhhhhhhhhijgjmԶ$$$ο̯zhhhhhhhhhhhhhhiihhkkkzzzƙqhhhhhhhhhhhhhijhig ԻihhhhhhhhhhhhhijhjtԨ444˫xhhhhhhhhhhhhhhiiih]]]ŔphhhhhhhhhhhhhijhjgԺнhhhhhhhhhhhhhhijhizԚDDDʧwhhhhhhhhhhhhhijiihOOOԥK# 5liwTvPwPwPwue4~ld{όѾ~~~nnn^^^QQQFFF>>>888666PPPԻqhhhhhhhhhhhhhhihigԧԹǵjhhhhhhhhhhhhhhjgjl̥ͺĥwhhhhhhhhhhhhhhiihhԷphhhhhhhhhhhhhhjhifԣԷȴihhhhhhhhhhhhhhjgisȩ˻¢vhhhhhhhhhhhhhhiihhԴºohhhhhhhhhhhhhhjhifԟԶȱ|hhhhhhhhhhhhhhiihiyĮɽuhhhhhhhhhhhhhhihig԰ԥс.-HwN_H/zpyBtόȻyWKWJNJ:E9+((###! 111ºoggggggggggggghigieԶ~iggggggggggggghifjj̵tggggggggggggghhhhgnggggggggggggghigieԴ{hggggggggggggghigiqʶsggggggggggggghihhgԾmggggggggggggghigieԲxgggggggggggggghigiwȷrggggggggggggghihhfԥj( 8#}sy2rѿόư~}|lokZWWNNNCBBBAAKLK_`_ngggggggggggggghgieԲzhggfggggggggggghfji˱rgggfgggggggggghghgԽmgggggggggggggghgid~԰wgggfggggggggggghfioȲqgggggggggggggghghfԻlggfggggggggggghfid}ԮugggfggggggggggghgivƳpgggggggggggggghghfԥv+z0vlIѽό٭uutini_b^[ZZ^^^mpmquqvyvwywŵԹkffffffffffffffgficԦugffffffffffffffheigȤoffffffffffffffgggfԵkffffffffffffffhfic~ԢsgffffffffffffffhfinĥnffffffffffffffgggeԲ}jffffffffffffffhfib}ԠrffffffffffffffghfhtmffffffffffffffggheԥɼӬϺw9ph1{+vZœόӺ~~~```jkj_`_[\[XXX`b`qrq˹Զziddddddddddddddedf`|Ԣqedddddddddddddefdgd|ǠkddddddddddddddeeecԳxhddddddddddddddedg_{Ԟo~edddddddddddddeedfkâkddddddddddddddeeecԯvgddddddddddddddedg_yԛn~ddddddddddddddeedfrԿ~jddddddddddddddeefbԥόɶ```hhhbbb___SSS___hhhպԻwb}[}[}[}[}[}[~[~[}[}[}[}[}[}[}[~Z}]_xԪm|\}[}[~[}[~[}[~[~[}[}[}[}[}[}[~[~Z}_f{ɦg|[}[}[}[}[~[}[~[}[}[}[}[}[}[}[~[}\~_|Ըua}[}[}[}[}[}[~[~[}[}[}[}[}[}[}[~Z}]_xԧl|[}[}[~[}[~[}[~[~[}[}[}[}[}[}[~[~Z}_nƧ}e|[}[}[}[}[~[}[~[}[}[}[}[}[}[}[~Z}\~_{Եs`}[}[}[}[}[}[~[~[}[}[}[}[}[}[}[~Z}^_wԤj|[}[}[~[}[~[}[~[}[}[}[}[}[}[}[~[~[}_~uè{d|[}[}[}[}[}[}[~[}[}[}[}[}[}[}[~Z}\_zԥόʷYYYSSSRRRQQQNNNQQQSSS~~~ҵř{|}XhxYt>>:G?ˏWWWSSSԍԟ;;;FFFFFFKKKNNNԲ@>@tttԪԨ222ͭIIIϿ'''rrr̺Ԯ !!½ԘsssƂɻĺͽxxx|||ԏjjjkkkƺ(((zzzmmmȺ˞ԪԨ"""|||gggԡ```fffbbbrrrXXXtttZZZ|||bbbhhh;3;jjjԜkkk~~~hhhjjjlllaaadddsssaaafffzzzgggcccqqqxxxUUUuuuZZZԏGGGfffttthhhkkkҭcccaaa~~~mmmԠ\\\(((VVVDDDjjjaaakkk>7>vvvԪԨrrrrrrԭhhhppp(((ssssssΟZZZVVVϗ#%"ș444___YYY///Ř+++aaa\\\͉xxxnnnͤTTTԏ:::rrrrrrggg[[[000```WWW(((ΛdddmmmԠ\\\(((ԄxxxHHHǕ%%%ԪԨ444ԡsssmmm(((sssԦVVVԶttt:H?^b^Գ̻}}}bbb}}}'''aaaLLLxxxԬPPPԏmmmpppfffǡyyymmmԞ\\\(((ԄxxxԭrrrнWWHgggԪԨ444qqqqqqjjj,,,rrrԦVVVkkk}}}Ӟ///Ԧqqq{{{WWWxxxî]]]+++aaakkkRRRxxxԬPPPԏmmmtttZZZtttѥEEEyyy}}}ppp\\\(((Ԇqqqdddhhhы~A@AԪԨcccԶmmmqqq|||wwwԴ{{{Ԫ^^^wwwӽfifXPRϜ\\\XXXԪbbbkkkȄffftttӱlllaaaԔԸwwwԤԙӜaaannnzzz]]]Թnnnlll[[[ԭhhh]]]Խyry```ԪԨѸrurС鷷ԪԨooo~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨԬɉԜԆЮԎԵ҆Ԝ‹\\\~~~ԪԨԗjjjԷEEE::: ttt::: ___Ԅ xxxEEE:::ԈHHH\\\~~~ԪԨԂEEE:::gggTTTPPPkkkDDDtttRRRIII̥GGG}}}UUUȠSSS===cccEEE---dddQQQ sss[[[DDDԉIIIpppFFF|||AAAGGGaaa;;;FFFcccMMM\\\@@@___Եfff@@@xxxƷOOOPPP}}}FFFWWWԄ @@@bbbbbbrrrEEE{{{ wwwZZZEEEӐIIIeee---:::PPP]]]```WWW\\\>>>SSS555 ^^^aaaKKKfffLLLDDD\\\~~~ԪԨmmm'''CCCWWWTTT;;;\\\```...ssswww444RRR333333KKKSSS$$$RRREEE NNN::: VVV>>>bbb666ssssssjjj(((___+++iiivvv)))555===DDD666OOOaaaRRROOO:::fff'''DDDdddɁ!!!pppHHHӄ kkk???999bbb111nnn XXX;;;eee555vvv!!!:::((( ???DDDZZZ===???***gggWWWNNN(((eee???\\\~~~ԪԨmmm''' zzz(((;;;+++qqqѭJJJ!!!999@@@@@@ѠKKKΘwww|||???EEE***ӈ FFF,,,222@@@@@@sss rrr|||VVV  \\\PPP...}}}CCCYYYeeeԺ999)))@@@@@@nnn)))%%%SSS111Ȳ҄ kkk???444333\\\ FFF***333@@@@@@hhh@@@:::(((GGGpppsss}}}222sss%%%VVVaaaJJJ```vvv\\\~~~ԪԨmmm'''|||(((BBBAAAPPP{{{]]]...xxxnnn''':::777MMM???EEEeee... SSS===}}}yyysss $$$LLLnnn zzz ___PPP...)))DDDPPPeee{{{Қ'''999|||kkk%%%ooo҄ PPP///777LLL@@@ UUU:::yyy---:::(((...RRR444HHH...>>>sssXXXrrr\\\~~~ԪԨmmm'''|||(((RRR???888TTT{{{BBBAAAppp(((WWWFFFaaa---eee,,,888EEERRR333 mmmFFF>>>fffsssWWW///ggg444CCC[[[;;;AAA ___PPP...DDD888444ЙKKK<<>>LLLӑQQQWWWҘ(((BBB@@@@@@@@@SSS~~~BBBIIIԆ\\\~~~ԪԨˊŒiiiԏmmm(((ԕgggΒǖkkk~~~JJJԲooo999\\\~~~ԪԨˊŒiiiԏmmm(((ԕgggΒǖkkk~~~JJJԶssssssnnnwww999԰ddddddddddddooo\\\~~~ԪԨˊŒiiiԽԚԿΒǖkkk~~~ԥҷԠ\\\~~~ԪԨˊŒiiiΒǖkkk~~~\\\~~~ԪԨˊXXX%%%ŒiiiΒǖkkk~~~\\\~~~ԪԨˊqqq>>>wwwŒiiiΒǖkkk~~~\\\~~~ԪԨˊVVV---ŒiiiΒǖkkk~~~\\\~~~ԪԨˊgggXXXŒiiiΒǖkkk~~~\\\~~~ԪԨˊӢŒiiiҌԏkkkBBBLLL!!!///WWWbbbԛԎRRRIIIkkkjjjԋTTTAAAhhhRRRxxx\\\Βǖkkk~~~ԌjjjԖTTTIIIaaaԶjjjԿ***ԛbbb̄OOO???\\\mmmӌʐUUUIII\\\\\\~~~ԪԨˊŒiiiȆǡԓ́uuuμsss^^^...VVVaaa̩aaacccʳӺ́^^^Ӟȳ˼ɲŠԑ˃ԪdddKKKԒŗggǧҵÙ͛000ơԧԺΒǖkkk~~~̂ßԡгΈPPPӫ|||ԣԶԐšԽҪВԶɟšŹ ɦԚӳ(((ӼaaaԓqqqѢtttvvvqqqIIIӱvvv\\\~~~ԪԨˊŒiiiԡ~~~~~~ԲJJJooo~~~|||$$$bbbҾ'''jjj...VVVaaaԫeeettt\\\^^^oooxxxϏEEElllԬbbb®rrr˧uuu```xxx}}}###[[[jjjlll}}}Ԥvvvjjj$$$zzzwwwĬ333oooggg999|||vvvrrraaa---DDDyyysss\\\mmmggg]]]xxxΒǖkkk~~~ԥ{{{sssJJJqqqqqq```þPPPԄxxxsss||||||wwwzzzʜyyyBBB###LLLԄxxxԷEEEsss|||||||||999|||tttњzzzzzz(((|||}}}WWWaaaLLLҴөhhhʲttt___}}}ý\\\~~~ԪԨˊŒiii~~~~~~~~~ԲJJJhhhyyy'''ԒZZZѼ;;;555(((͆|||...VVVaaaԨ[[[xxx333///ȏaaaͰUUUԏиeeeVVVWWW(((FFF+++333"""ttt'''pppѢXXXԁ;hhhLLL''']]]GGGEEEggg999ĴҶ??????EEEKKKԻLLL\\\ҌnnnTTTΒǖkkk~~~ԄWWWԮZZZJJJ}}}(((ԛһdddPPPԄxxx&&&lllvvv'''333000Žxxx]]]...***ԄxxxԷEEElllvvv(((ZZZ&&&444&&&TTT999qqq΃΂(((pppуaaa555WWWyyyӽccc\\\~~~ԪԨˊŒiiiԹ}}}ӧJJJԾjjj(((œȼmmmxxxmmm(((eee...```ccc˰XXXxxxzzzҏeeeϷNNNʻС___ԈrrrԺddd(((yyyƷ(((sssԦVVVњ+++&&&''')))'''[[[JJJ>>>ggg999ȷsssUUU???EEEGGGBBB\\\ԏmmmԸcccΒppp'''ǖkkk~~~ԼSSSԴQQQJJJ(((ŞдLLLQQQ|||xxx(((Կlllqqqò˨sssccc333(((ԄwwwӭEEEԿlll(((Ǻ999rrrЃ(((qqqҊaaajjjGGGԖooozzzyyyнBBB\\\~~~ԪԨˊŒiiiԔԓgggxxxJJJuuuzzz(((ԩΏsssZZZvvv(((ԼQQQ...ԙuuusssԭtttQQQԁkkk^^^{{{ϏDDDvvvҿrrr|||ԻFFFeeegggnnn///yyy(((sssԦVVVuuuҎccc$$$sss¬222|||ggg999xxx}}}[[[RRR>>>EEE}}}xxx\\\ԏmmmffflllΒԂ000mmmǖkkk~~~Ԝ|||vvvJJJpppsss111rrrpppzzzYYYxxx(((yyy|||fffzzzΩvvvBBB444(((ԗeee}}}EEEyyy|||888yyyyyy999|||sssͰwwwwww(((uuuZZZaaaԸ^^^ttt~~~<<>>ԟ̉ШԷȋԙԲԯΒggg&&&{{{ǖkkk~~~ԶӾJJJԍӻ{{{ԼԀԺԻѩĞ___ΆԀŒԺԘȚ999ЩѮԀҳӱ{{{ԗӾ{{{\\\~~~ԪԨˊŒiiiԏmmmKKK(((ԬPPPΒsssOOOǖkkk~~~JJJԨǶhhh999\\\~~~ԪԨˊŒiiiԕuuuԼUUU666ԯ[[[Βʛǖkkk~~~VVVʃ<<>>IIIkkktttԪԝkkkԛ~~~ΝwwwMMMϖԝ///@@@;;;aaaԼǒ[[[Βǖkkk~~~ԚԅԣYYYIIIkkkԼԅĤ̍ԡ{{{EEEԊԟyyyfff\\\~~~ԪԨˊ́ͶɲԮ}}}wwwͷhhhUUU...VVVaaaлkkkqqqŴ}}}VVVųҼñӏmmmƇsssԝҊgggԵκԲҿ}}}VVVөbbbҼ̶εԴ˶ԮЎOOOɱФ;;;Ţ˶Βǖkkk~~~~~~ʵԶ###ЅRRRӢrrrԸԭʲDZӫ±Үεʲ###ιԳԵIJðϯ111ʵԬòЮԬԿ(((κ...ʵҺԕgggҾIII\\\~~~ԪԨˊԨ~~~~~~ԲJJJ}}}iiilll$$$eeeѷ&&&kkk...VVVaaaԱdddjjjwwwRRRPPPsssqqqrrrЏDDDuuubbbԲVVVmmmnnnyyysssnnnhhhpppeeennn]]]͏mmmԥsss...ΊDDDrrrbbbEEEyyyfffmmmggg444~~~{{{dddVVVψoooooolllʒmmmlllfffфxxxԷEEE???}}}]]]```|||dddppp͓qqqqqqzzz!!!oooYYYnnn888aaaoooaaa***???lllooolllΒǖkkk~~~ԬlllooooooJJJoookkkqqqYYYƷPPPԄxxxiiilllɀqqqrrr̟{{{nnnxxxCCC###kkkWWWԄxxxԷEEEԁiiilllrrrqqqvvv999xxxiiivvvџmmmvvvRRRxxxeeejjjnnn###qqqqqq{{{}}}dddԽoooiiiwwwnnnmmm'''}}}OOOxxxsss[[[}}}dddϕggg(((ԫfffmmmggg###~~~lllooooooԪlllooolllЕgggoookkksss...\\\~~~ԪԨˊԁ~~~~~~ԲJJJaaa'''ԕYYY[[[VVV(((ʀ...VVVaaaԥ^^^xxx)))TTTLLL$$$ɏ\\\ʨ\\\ԒVVVԜsssχiiiѬӚ(((ɏmmmԁsss...Ί```ˣ^^^EEEԺxxxSSS444wwwfffВVVVӋ{{{```Ӿ\\\SSSΒЄxxxԷEEE???VVV222MMMGGGSSS666~~~%%%EEE\\\ԣBBBEEE???TTTӬ[[[Βͱkkk~~~ԇZZZӤbbbJJJ{{{(((ԝЬvvvPPPԄxxx$$$eee333SSSOOO+++Ï}}}WWW,,,***ԄxxxԷEEEeee(((ccc>>>UUU>>>[[[999qqq΅~~~iiixxxJJJ999GGGJJJRRR333###RRRԐͽwwwnnn555HHHzzz###RRRǕggg(((ԺxxxSSS444ZZZӤbbbWWWӼVVVǕggghhhҿ???\\\~~~ԪԨˊ~~~~~~ԮJJJԾppp(((șŸhhhͧkkkmmm(((Ծ]]]...ZZZccc˨nnnxxxmmmяiiiҾHHHǗǦVVVԑwwwӕsssSSSvvv+++ɏmmmsss...ΊnnnҹOOOEEEԪzzzPPP444ԔyyyǗǦVVV·JJJQQQBBBЄxxxԴEEE???aaa...ooo(((EEE\\\ԆLLLEEE???GGGBBBΒ***!!!!!!!!!!!!!!!!!!!!!!!!!!!"""999```~~~ĒQQQԽJJJJJJҁ(((ʝʐƦTTTPPPӁxxx(((Կpppgggǰnnnhhh333(((ԄxxxԴEEEԿppp(((www999rrr~~~xxxԴmmm999mmm'''FFFԁfffnnn999JJJ~~~~~~'''FFFĕggg(((ԪzzzPPP444QQQԽJJJ???GGGŕgggTTTLLL\\\~~~ԪԨˊԖԋnnnzzzJJJooo}}}(((ԫ̄yyyRRRrrr(((ԵIII...ԍxxxlllԫ|||EEE}}}wwwVVVsssΏGGGҦJJJssstttxxxAAA///mmmsssvvv...ΊLLLEEEԊyyyPPP444Ծddd@@@ΨҦJJJhhh}}}rrroooMMM̐kkkEEE???aaa...uuu{{{(((EEEVVVIIIKKKCCC???qqqΒ~~~Ԟqqq|||JJJuuusss,,,hhhrrrdddZZZxxx(((sssyyyYYYvvv̟uuuAAA444(((ԐkkkEEEsssyyy000999qqqʪuuuOOOxxx___hhh:::nnnzzzjjjԦxxxooouuusss999JJJ~~~~~~jjj˕ggg(((ԊyyyPPP<<>>xxxwwwΒ~~~υQQQԽLLLJJJҁ(((љš```PPPԃxxx(((ԉqqqž***,,,,,,***ooohhh333(((ԄxxxԷEEEԉqqq(((WWW$$$,,,+++ddd999rrrȇ~~~xxxpppzzz999>>>))),,,***'''FFFԃgggppp999JJJ~~~~~~'''FFFŕggg(((ȫiiiPPP444QQQԽLLL\\\~~~ԪԨˊԮԀzzzҙJJJԦsss(((Ժqqqnnnmmm((({{{qqq...jjjdddIIIxxxqqq¡я\\\ʪZZZ̹zzzӞcccԗttthhhԠggg(((xxxϬ(((sssԦVVVӊsssEEENNNǸOOO\\\ԣiii999JJJԲ{{{UUUǽ???444ԲhhhȦYYY%%%hhh҃VVVjjjɦĽ???ԠgggΒ~~~ԳZZZӤ___JJJ|||(((pppӱPPPSSSqqqxxx(((Ԩuuu~~~iiiǥǝ~~~XXX444(((ԆuuuҟEEEԨuuu~~~(((Ȃұ999qqq}}}jjjxxxԝ```999sssͪ###QQQԍͽuuummm999JJJ~~~~~~###QQQƕggg(((ԓrrrPPP444ZZZӤ___\\\~~~ԪԨˊӑԠ\\\wwwwwwJJJԄlllggg(((ԧТlllhhhzzzkkk}}}(((bbb...ԫrrrhhhiiiԴiiikkkfffԉXXXnnnpppmmmя@@@sssdddŀggghhhppp===qqqvvvllleee555nnnqqqxxx(((sssԦUUUԊ999iiiiiiEEE888vvvaaa\\\ԬbbbwwwEEEJJJiiiCCCͯҽ???444΀oooooo^^^ttt;;;hhhqqqeeeVVV΂ooooooĽ???vvvllleeeΒ~~~ԙ̌mmmpppoooJJJhhhkkkrrr888sssͅggghhhlllԄ___YYYxxx(((ԇlllggg}}}ooonnnƀиzzzooo{{{EEE444(((ԣ\\\vvvzzzEEEԇlllgggEEEnnnqqqqqq999qqqjjjvvvнnnnyyySSSxxxmmmlllddd<<>>tttmmm:::FFFooooooAAA...,,,~~~hhh̲JJJΫnnnӻddd444XXX]]]NNNfffʛaaa...VVVJJJ\\\~~~ԪԨˊkkk222ŒmmmŌ~~~~~~ԯJJJԯ|||(((ʗĶeeeȈVVVmmm(((Ե```...YYYcccŘxxxWWW}}}ϏiiiҽHHHɕĥ˻rrrrrr}}}ԧ|||(((eeewww(((sssԦVVVƍҊsssEEEXXX:::\\\Ի999JJJԝ̜???Җxxx^^^eee999Λaaa...VVVJJJ(((iiisss(((\\\EEEԞXXX000Β|||'''ǖooo~~~ǎϏlll999}}}҂(((aaaԕgggWWW~~~ñZZZ999(((~~~}}}ԲJJJmmmRRR[[[444IIIaaa...VVVJJJ\\\~~~ԪԨˊ ~~~ŒmmmԞԃvvvσJJJxxxxxx(((԰www̿RRRmmm(((ҡMMM...{{{ιeeeԮ>>>yyyWWWɰxxxΏOOOnnnзiiiѐoooԩ[[[\\\mmmsss(((pppɉ(((sssԦVVVӊrrrEEEBBBfff\\\ԚmmmĠ999JJJԼttt:::ν???ҶZZZ~~~ѵjjj___eee^^^̠...VVVJJJ(((yyy͌(((\\\DDDWWW\\\000Βoooǖooo~~~ԥӏmmm999uuurrr(((aaaԕgggTTTǸ}}}ZZZ999(((~~~~~~ԲJJJ˛yyyѱggg444ҼXXXÞ^^^̠...VVVJJJ\\\~~~ԪԨˊ___'''ŒmmmӛԺfffXXXfffԧQQQeeeJJJԮxxxEEEgggJJJԎOOOʁCCCSSSrrrMMMԡXXXQQQ___ӏDDD[[[cccƫѢSSSBBBttt888ԛLLLppp\\\gggSSSJJJԆԯnnnԘ777AAAAAAeeeaaaTTTcccZZZtttqqqXXXhhhfffhhh^^^ѵ111AAA>>>VVVΆMMM]]]ҼbbbOOOpppUUUOOOooofffJJJԾnnnQQQJJJttt[[[VVVjjjyyytttzzzΒkkk!!!ǖooo~~~ӢԝXXXДSSSVVVJJJxxxԡ}}}ԨRRR[[[ЎԱWWWXXXXXXJJJԏԸfffͅPPPkkkMMM___юSSS@@@AAAKKKpppUUUOOOԎWWW[[[\\\~~~ԪԨˊԵ{{{ŒmmmԏmmmRRRtttΒԹ,,,nnnǖooo~~~\\\~~~ԪԨˊfffŒmmmԏmmmrrrqqq͏aaaΒuuu ǖooo~~~\\\~~~ԪԨˊ䪪+++yyyŒmmmļͰѻΒ沲555hhhǖooo~~~\\\~~~ԪԨˊŒmmmΒǖooo~~~\\\~~~ԪԨˊŒmmmΒǖooo~~~\\\~~~ԪԨˊ̵mmmΒϵooo~~~\\\~~~ԪԨˊ444+++++++++++++++++++++++++++---BBBggg]]]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<___Β777+++++++++++++++++++++++++++---@@@dddaaa<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>Ӭxxx&&&LLLOOOYYY999&&&dddДdddnnneeekkk```qqq===\\\JJJHHHďzzz\\\~~~ԪԨԖbbb;;;111QQQԺ999ƓsssԸԻνѼ˿Ӭxxx{{{'''wwwӍgggTTTLLLӬxxx(((Ӳkkk(((gggԛaaaYYY```qqqzzz|||ďzzz\\\~~~ԪԨ___```~~~{{{lllyyy999ƓsssξԸԻϽѾӬxxxԯ]]],,,nnnWWWggguuu///Ӭxxx(((ppp}}}(((gggԛaaayyypppΈ@@@їwwwďzzz\\\~~~ԪԨԱkkkyyy{{{___[[[˴ooobbbkkkƓsss¿Ӭxxxɇjjjwwwfffjjjϊ^^^gggӬxxx```Լttthhh```ԊԭϏaaapppԫ}}}ɋeee}}}ďzzz\\\~~~ԪԨƓsssӬxxxӬxxxďzzz\\\~~~ԪԨƓsssӬxxxӬxxxďzzz\\\~~~ԪԨƓsssӬxxxӬxxxďzzz\\\~~~ԪԨļsssĨxxxĨxxxĺzzz\\\~~~ԪԨʎZZZSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSVVV]]]nnnԵdddSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS[[[cccԵdddSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS[[[cccLjXXXSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWW]]]xxx\\\~~~ԪԨʞԶԶǛ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ>>>~~~uuuNNN԰>>>sssIIIAAA~~~LLL\\\~~~ԪԨôιʹggg¶˳ȵTTT+++ɿͻɷԻĵTTT111+++˿ͻ³\\\~~~ԪԨԾSSSMMMIIItttǃ:::...yyyuuuBBBDDDZZZgggmmm'''ddd999TTT---+++MMMLLLIIỈ???EEERRRooo===GGGDDDEEE:::xxx###YYY555gggggg(((///|||GGGXXXʌNNNJJJSSSKKKEEEDDD^^^\\\~~~ԪԨԆHHH555[[[%%%HHHȥ'''~~~gggmmm'''UUU@@@+++\\\JJJ,,,$$$777```ttt:::666|||mmmEEE:::xxx### nnn111GGGggg(((rrr"""???BBB***LLLSSS___|||www\\\~~~ԪԨzzz'''www jjjԙѺgggmmm&&&AAA VVV+++RRR:::%%%Ҝϥyyy[[[222EEE888www### ttt444KKKggg(((–PPPƺ???ZZZnnnGGGEEE\\\~~~ԪԨԪ(((qqqPPPç<<>>KKK```qqq)))dddaaaDDD### ttt444KKKggg(((CCCHHH111dddSSSMMMQQQkkk)))\\\~~~ԪԨӕVVVeee·nnnmmmyyyϪdddSSSSSSsssUUUSSSVVVfffbbb```ƅSSSnnnӵlllSSS{{{RRRѦbbbJJJrrrԷccc```ppp[[[JJJfffvvvԉ^^^\\\dddμtttPPPɊSSSSSS\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨļ\\\~~~ԪԨ˘bbb;;;777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777999\\\~~~ԪԨˊ}}}ppp\\\~~~ԪԨˊ󿿿nnn\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiiizzzrrr^^^\\\~~~ԪԨˊŒiiiԲ999\\\~~~ԪԨˊȽŒiiioooJJJ\\\~~~ԪԨˊԼRRR***ŒiiiSSSKKK\\\~~~ԪԨˊnnnDDD}}}ŒiiiԳ\\\~~~ԪԨˊVVV000Œiii\\\~~~ԪԨˊooo^^^Œiii\\\~~~ԪԨˊԧŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii\\\~~~ԪԨˊŒiii셅\\\~~~ԪԨˊŒiiiԢԣ%%%\\\~~~ԪԨˊŒiiiVVVԜɽ%%%\\\~~~ԪԨˊŒiiiΆMMMkkk;;;ԝlll%%%\\\~~~ԪԨˊŒiiiԅzzz˭444ˤeee333ӣ%%%Ԇ{{{DDDԷaaa...EEE\\\~~~ԪԨˊŒiiiYYYQQQ>>>lll>>>ԣ%%%ʩԞӷԄeee???ͭŗԞΧ"""˪ʭòчԶҷ\\\~~~ԪԨˊ̵iiisssҼ???>>>kkkFFFԣ%%%Ϝzzz~~~999^^^jjjwwwRRRԄIIIjjj???wwwԲJJJ999^^^ooo}}}Оzzz~~~vvv(((~~~VVVnnnwwwyyyBBB\\\~~~ԪԨˊ222***************************,,,BBBcccԺmmmTTTlll555ddd<<<ԣ%%%[[[***999***UUU999kkkҪԄjjjΥ^^^???kkk%%%999///;;;ԲJJJ999kkkIIIӾ!!!^^^)))999+++PPPӺVVVuuu(((~~~qqqϬMMM{{{\\\\\\~~~ԪԨˊjjj444ԣ%%%~~~¶999mmmeee###ԄpppЯYYY???ºԲJJJ999mmm@@@$$$·KKKggg(((~~~~~~ԲJJJrrrddd\\\~~~ԪԨˊԡMMMԣ%%%Дzzzzzz999mmmNNN---MMMuuu???pppԲJJJ999mmmvvvїxxx{{{vvv(((~~~~~~ԲJJJvvvBBB\\\~~~ԪԨˊԣ%%%ȗԅԟҡԈ̞Žԅԟ̏|||uuuəͻ|||ԨŽĜ~~~^^^\\\~~~ԪԨˊ|||%%%ԨǷhhh\\\~~~ԪԨˊԓɁ;;;DDD\\\~~~ԪԨˊ\\\~~~ԪԨˊ\\\~~~ԪԨˊ\\\~~~ԪԨˊmmmԠ{{{IIIԉ\\\~~~ԪԨˊOOOǕgggԝxxxxxx薖\\\~~~ԪԨˊԳppphhhqqq111rrrggg(((xxxNNNnnndddԱzzz\\\~~~ԪԨˊnnnCCCiii___•ggg(((xxxnnn͕mmmԱzzz\\\~~~ԪԨˊYYYQQQqqqΕggg(((xxxҩ^^^Աzzz\\\~~~ԪԨˊԑrrr222͇<<<ӕggg(((xxxXXX{{{ȼԺԱzzz\\\~~~ԪԨˊϏaaammmӖTTTԪbbbԗyyymmmԼzzzeeecccttt(((]]]aaaԱzzz\\\~~~ԪԨˊѓ}}}ԛlllѠ'''ō{{{ʾ̨ӚԸŒ}}}!!!ȅԻԱzzz\\\~~~ԪԨˊԜUUUԳaaasss&&&WWW~~~~~~|||cccPPPddd]]]"""qqqsss'''sssԽ???jjjԱzzz\\\~~~ԪԨˊ´___(((VVV===AAA}}}UUU}}}|||uuuttt(((ȭeeeWWW...ΊsssԽ???oooԱzzz\\\~~~ԪԨˊԬҐsss(((VVVFFFӻIIIԍeee~~~LLLԱlll(((ԓqqqVVV...΋qqqҪ???Եrrr}}}Աzzz\\\~~~ԪԨˊԺxxxuuu{{{uuu(((VVVtttrrr԰===???{{{|||mmm;;;jjjzzzTTTFFF^^^???ԅyyyqqqԱzzz\\\~~~ԪԨˊҼԛԪ˧͠ɫԨȧƮʨàԱzzz\\\~~~ԪԨˊԱzzz\\\~~~ԪԨˊԱzzz\\\~~~ԪԨˊԾԱzzz\\\~~~ԪԨˊԮpppuuuѿnnn\\\gggʰzzz\\\~~~ԪԨˊԾjjjqqq444ʌgggԒ###%%%PPP\\\~~~ԪԨˊԞ)))((((((&&&IIIԕggg\\\~~~ԪԨˊ԰jjjȦȲJJJԕggg\\\~~~ԪԨˊ|||qqqpppDzJJJԕggg\\\~~~ԪԨˊȭ̳ź\\\~~~ԪԨˊꛛ\\\~~~ԪԨˊԱzzz\\\~~~ԪԨˊԱzzz\\\~~~ԪԨˊԱzzz\\\~~~ԪԨˊԱzzz\\\~~~ԪԨˊԿ{{{]]]YYYsss(((Աzzz\\\~~~ԪԨˊԜlllќ'''ǕͭԡԻ́Աzzz\\\~~~ԪԨˊԱbbb{{{&&&XXX~~~{{{{{{fffPPPdddwwwyyy'''&&&xxxwww!!!nnnԱzzz\\\~~~ԪԨˊϾaaa(((VVV@@@DDD|||SSSyyyzzzԨ---&&&&&&666(((ʌ~~~Ј'''wwwoooԱzzz\\\~~~ԪԨˊΉVVVZZZȲ000ttt ~~~ԬҒrrr(((VVVCCCԿFFFԋhhh|||OOO԰sssζ999(((Ԏ}}}τ(((Իnnn~~~Աzzz\\\~~~ԪԨˊԭ@@@wwwqqq>>>===$$$Ըvvv}}}vvv(((VVVxxxvvvԮ>>><<F(/root/Desktop/Documentation/GWMetadata/pref1.tiffh8phhhhhh-HHgworkspace-1.1.0/GWMetadata/README.rtfd/pref2.tiff0000644000175000001440000211711613214346537020701 0ustar multixusersII*쐐着777eee着777eee着777eee着777eee着rrrrrrrrrrrrrrrrrrrrr~~~777eee着sss%%%777QQQQQQeee着sss%%%777111111111OOO111111111111XXX,,,***yyyeee着sssOOO%%%777 KKK[[[WWW___666eee着sssWWW%%%777""";;;zzz}}}^^^ 555SSS000+++000 NNN'''000)))```WWW333000hhh<<<(((%%%222JJJrrr...,,,""";;;000 000\\\sssVVV444888+++(((000000xxx 000YYY??? 666eee着sssWWW%%%777PPPZZZ}}} iiijjj---...\\\FFF$$$ZZZNNNSSS)))333ZZZNNN~~~333 KKKFFFeee<<<SSS???sssJJJiiiZZZ'''sss888kkkZZZ)))www===eee着sssWWW%%%777jjjJJJ jjj```ppp777(((CCC\\\XXX...ppppppzzzNNNSSS)))@@@pppppp333'''^^^pppppp<<<gggppppppJJJ{{{pppppppppssswww}}}pppppppppppp$$$222UUUeee着sssTTT%%%777NNNFFF)))\\\kkkNNNSSS)))```333@@@<<<333'''JJJ MMMssswwwJJJ///eee着'''''''''''''''''''''DDD777''''''''''''GGGYYY'''''''''nnn'''+++uuu''''''===ccc''''''ggg999GGG'''qqqNNN222===''''''uuu+++UUU222'''''''''```'''''''''''''''cccUUU'''''''''uuu'''''''''''''''...eee着777ppp eee着777tttttteee着777eee웛777bbb555555555555555555555555555555555555555555555555555###WWWRRR555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww˜Ꮟ\\\uuu\\\uuu\\\uuu\\\uuu\\\uuu\\\ӒVVVJJJ[[[cccDDDTTT+++cccuuu\\\FFFӲtttaaaѮӨпԢ^^^RRR(((aaauuu\\\^^^}}}¼aaaeeeiiisss|||qqq777{{{fffzzz(((aaauuu\\\ԽeeeaaaҒiiiaaa```|||{{{]]]Ը___ZZZ(((aaauuu\\\wwwнBBBaaaԕgggZZZ\\\WWW|||\\\sssӊ((('''%%%...(((aaauuu\\\qqqyyyaaaԕggguuu{{{\\\mmm===mmmjjj|||sss(((aaauuu\\\ԿyyyԛԵРОҘơԸԛuuu\\\uuu\\\uuu\\\uuu\\\uuu\\\uuu\\\@@@___ԥԨԨԪԨԪԨԪԨԪԨԪԨܶԪԨzzz[[[ղԪԨϗ^^^Եo{sԪԨhhhAAA[d]ԪԨϚ>>>yyyԠIDJԪԨ555FFFEEEUUUԌԈԺ434kkkˏWWWSSSԍԟ;;;FFFFFFKKKNNNԲ%%%ԪԨ222ͭIIIϿ'''rrr̺ӓԘsssƂɻĺͽxxx|||ԏjjjkkkƺ(((zzzmmmȺԓ/0/ԪԨ"""|||gggԡ```fffbbbrrrXXXtttZZZ|||bbbhhhԜkkk~~~hhhjjjlllaaadddsssaaafffzzzgggcccqqqxxxUUUuuuZZZԏGGGfffttthhhkkkҭcccaaa~~~mmmԠ\\\(((VVVDDDjjjaaakkk0*0ԪԨrrrrrrԭhhhppp(((ssssssΟZZZVVVș444___YYY///Ř+++aaa\\\͉xxxnnnͤTTTԏ:::rrrrrrggg[[[000```WWW(((ΛdddmmmԠ\\\(((ԄxxxHHHece;=9ԪԨ444ԡsssmmm(((sssԦVVVԶtttԳ̻}}}bbb}}}'''aaaLLLxxxԬPPPԏmmmpppfffǡyyymmmԞ\\\(((ԄxxxԭrrrԦ+7/y{yԪԨ444qqqqqqjjj,,,rrrԦVVVkkk}}}Ԧqqq{{{WWWxxxî]]]+++aaakkkRRRxxxԬPPPԏmmmtttZZZtttѥEEEyyy}}}ppp\\\(((Ԇqqqdddhhhjdj;;;ԪԨcccԶmmmqqq|||wwwԴ{{{Ԫ^^^wwwϜ\\\XXXԪbbbkkkȄffftttӱlllaaaԔԸwwwԤԙӜaaannnzzz]]]Թnnnlll[[[ԭhhh]]]ԼUUUqgiԪԨԻfff鷷ԪԨooo~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨeee<<<===NNNLLLԟmmmeeeԔuuu]]]RRRԫNNNԒUUUaaaqqqqqqaaaԎVVV\\\~~~ԪԨ999---kkk!!!ҘЃBBB@@@EEE999&&&\\\PPP...___Լxxx###ҐJJJ333sss%%%sss\\\~~~ԪԨ999EEELLL:::xxx___dddrrr555888;;;xxx777PPP@@@%%%}}}@@@;;;^^^===777555aaaLLLIIIRRRCCCEEE͞EEE<<>> BBBJJJ;;;777WWW dddqqqyyyppp<<<;;;888]]]qqq+++AAATTT~~~EEE___)))~~~YYYCCCɏ UUU&&&wwwQQQ"""eeeTTT===YYYPPPhhh%%%eeeTTT>>>Ԏ:::RRRXXXddd***GGGAAA333YYY!!![[[444'''ԛ###888DDD444Ե***JJJ555###xxx444<<>>vvv"""UUU$$$}}}~~~~~~ ___PPP---Ԅ TTT$$$}}}~~~~~~wwwQQQ666III;;;BBB<<>>TTTpppJJJ444~~~"""aaa***QQQbbbRRRUUUddd$$$VVVcccsss%%% dddVVVggg$$$ԑ}}}ppp888'''hhhaaazzz vvv:::wwwRRRhhhHHHԼ{{{\\\~~~ԪԨ^^^333444FFFԎNNN͋IIIttt\\\___BBBUUUGGG***ҥXXXEEEʸXXXVVVrrrAAAddd]]]GGG\\\ФUUUAAAqqq^^^AAAppp>>>EEEdddCCC|||@@@HHHԛGGGkkk@@@dddӷgggAAAqqqggg___ԎNNNOOO[[[ooo>>>III???EEEQQQNNN&&&HHH[[[ԊHHHpppVVVԗKKKHHHYYYӝOOOFFF}}}ƺBBByyyFFFnnn@@@{{{hhhAAAZZZlllԨGGGNNNxxxtttUUUԹEEEMMMԎNNNCCCZZZkkkiiiAAAmmmkkkZZZԓMMM}}}RRRԵdddCCC|||@@@HHHΈFFFuuu@@@~~~OOOsssQQQ~~~BBBGGGpppHHH{{{LLL LLLVVVdddŏbbbGGGͪXXXJJJͶRRRYYYppp???HHHԭFFF\\\~~~ԪԨԶsssiiitttMMMggg̈eeesssfffDDDԺvvvgggtttQQQbbb tttԏ\\\~~~ԪԨέҼί tttԏ\\\~~~ԪԨԮDZ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨŻԽҽԼԿ\\\~~~ԪԨϜrrr[[[ZZZlll444mmmԉԲJJJeeeaaaԞ(((mmm}}}???ԷEEEmmm\\\~~~ԪԨԪhhhһjjj444ԥӥ}}}ΟmmmҤӸ~~~KKKbbbȢӸ|||JJJӽ~~~Ɣ~~~%%%Ǘ~~~ҭϕ|||ӳuuuԽԫ}}}ԳϜӌƨ(((mmm~~~uuuӶԾԲ~~~Ϲԍ~~~}}}ӥ}}}Οő~~~{{{???Ԓǖ~~~Լ{{{ԕEEE...ʙ|||\\\~~~ԪԨwwwԴSSSxxxYYY}}}nnn444RRRMMMzzzvvvrrrmmmoookkk|||WWWWWWyyyqqqmmmwwwdddJJJ}}}RRRϟpppooo,,,xxxKKK~~~yyy{{{͕GGG444ǀ~~~MMM~~~Ԩ~~~LLLhhhLLLȊsss(((mmmԈvvvqqqrrrɛ???yyyȃhhhSSS???\\\///HHHMMMzzzvvvrrrԙrrrxxx((({{{mmm???dddVVVrrrjjj(((\\\EEE555dddppp\\\~~~ԪԨoooԾHHHxxx}}}ҪQQQ444ǘzzzgggZZZttt(((%%%---mmm(((&&&^^^Ҿggg(((%%%```ԡJJJQQQҾȮhhhQQQ444___(((###JJJsss~~~EEEMMMƕbbb444>>>$$$'''___jjjKKKwwwъsss(((mmmëPPPyyy&&&NNN[[[DDDAAA###((( }}}Թ***WWW\\\AAA)))ZZZttt(((%%%---ǭaaa\\\(((̐}}}???rrrVVV\\\(((###OOO~~~ooo((([[[EEE???aaa\\\~~~ԪԨԞsss}}}xxxԬPPP444ɶ}}}```ӪXXXímmm~~~ƫ___МgggūaaaӕJJJSSSМΗoooPPP444Ҿkkk~~~OOOPPPƕggg444wwwеԫ^^^uuuoooMMMӊsss(((mmm|||{{{sssxxx%%%RRRVVV˹KKKyyyеYYY<<<\\\\\\EEE(((ӪXXXíԏsss\\\(((ԓzzzƤ???sssVVVʅҽԶqqq}}}+++RRREEE???ȭJJJ\\\~~~ԪԨ̄yyy||||||{{{sssxxxԬPPP444uuu>>>eee~~~bbbllluuummmiiiwwwƁ{{{kkkwwwiiijjjwwwƀuuujjjJJJ̃yyyeeeϙjjj}}}QQQKKKqqqttt{{{NNN~~~qqqwwwϕggg444Έyyyzzziii~~~eeeԤ///@@@Ԋsss(((mmmsssgggiiittt{{{˛;;;lllϋxxxyyy[[[EEE\\\\\\EEE(((eee~~~bbbllluuuԑlllwwwXXX(((Թ{{{yyy???sssVVVңqqqtttԄ{{{qqq```yyy>>>EEEUUUmmm}}}ZZZԥ\\\~~~ԪԨήԵƧԞӂtttӳѴԱӸԺ̷âɧĮͯçrrrѪԿОȤԷʗ«ԻԚԱġ$$$ӛRRRɥԹëԫʣԚӳѴǥƚҹԢԳԩͮžԾʣԱ̫Է\\\~~~ԪԨqqqԭxxxiii(((ԛaaa\\\~~~ԪԨΈtttљJJJLLLPPPԨ|||\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨȥ\\\~~~ԪԨ{{{qqqtttiii\\\~~~ԪԨtttĪ\\\~~~ԪԨtttúͿ\\\~~~ԪԨtttúAhV[^bfjorvgms\\\~~~ԪԨtttú[xyV|Ji\\\~~~ԪԨtttúaȀv2D[zؒ`hqqrt\\\~~~ԪԨtttú888hȇy0@R략сwz\\\~~~ԪԨtttú888mȏ3ASvz\\\~~~ԪԨtttúٮ888tȖw:I\k~}x{\\\~~~ԪԨtttú圜###888zȝ(3@]rFP[z|腅XXXhhhQQQ\\\~~~ԪԨtttúggg222888ρȦ@M\HPY{}xxx㇇,,,\\\~~~ԪԨtttúggg{{{:::888χȭ : 2+'!OQ_<<-~~u\\\~~~ԪԨtttúԁVJuQ Q)N"=#; .+)=+(E< +!PQ_BA2w\\\~~~ԪԨtttúḸ444sssVJuT1&S$YY[AAJ5!PR`HH8ddW\\\~~~ԪԨtttúḸ}}}444sssUJu%\$ 0 ttv%$?!QR`PQ?JJ<\\\~~~ԪԨtttúḸ\\\444sssUHu/d  55N!QSa`aMRSG\\\~~~ԪԨtttúḸ|||fff555444sssTHu1e<<<::S"SUdloY_`N$$$ZZZ zzzzzzwww}}}JJJ\\\~~~ԪԨtttúḸgggWWWeee===444sssTHt-bffg66M"UWfwzchiXkkkLLLTTTbbbpppfffzzzttteeewww sssaaa{{{cccbbbEEEDDDUUUfffddd]]]dddyyy{{{```\\\~~~ԪԨtttúḸggg]]]555444sssTHt'^.+9xxxRRR--B#VXgkkm\444XXXvvv***|||gggeeeSSSMMM\\\ eeeeeesssgggRRRQQQvvv999SSSWWW ___{{{^^^zzzAAALLL~~~ZZZ\\\~~~ԪԨtttúḸ]]]...444sssTHt-bJJLa`b))<#Y[jpnp^~~~CCC```VVV===111SSSqqqzzzZZZ eeeeee888ooo```jjj sssdddrrrddd <<STDTTFzyl\\\~~~ԪԨtttúqqf~\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú¿\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú8UyHkKmMoPqSrWtZv]w`yW[`\\\~~~ԪԨtttúYv{\\\~~~ԪԨtttú_}lsz\\\~~~ԪԨtttú[[[eȄr}\\\~~~ԪԨtttú888kȌvz\\\~~~ԪԨtttú888rȔx{\\\~~~ԪԨtttú򬬬???888xțy|\\\~~~ԪԨtttúћ@@@888~ȣ{}SSS~~~ggg\\\~~~ԪԨtttúggg^^^;;;888τȪ|}SSSooonnnZZZ```vvvLLL{{{PPPzzzaaaxxx```mmmxxx^^^+++ttt爈YYY\\\~~~ԪԨtttú111888ϋȲ~~~SSS???yyyž000gggMMMAAA}}}bbbKKKmmmZZZLLLtttܝ\\\~~~ԪԨtttú<<<888ϑȺ~~~SSSRRRllleee000fffYYYEEEKKKpppoooiiiSSSLLL枞\\\~~~ԪԨtttúIII888ϗSSSwww̪666QQQZZZEEE~~~ۣSSSLLLߴMMM\\\~~~ԪԨtttú888ϝTTTBBBJJJOOOgggYYY鎎\\\nnnSSSGGG[[[FFF]]]hhhTTTzzzlllwwwWWW\\\~~~ԪԨtttú888Ϥ\\\~~~ԪԨtttúYYYCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC###Ϫ~~~\\\~~~ԪԨtttúכϰ~~~\\\~~~ԪԨtttú϶\\\~~~ԪԨtttúpqrjjjjjj\\\~~~ԪԨtttúê\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttúȳ\\\~~~ԪԨtttúӴ\\\~~~ԪԨtttúḸ444sssԢ\\\~~~ԪԨtttúḸ444sssн̾̿Ұp]x]x]y]zv\\\~~~ԪԨtttúḸ444sssЃrsstttttjaaabcw\\\~~~ԪԨtttúḸ444sss广scccccccccccddewMMM000333333RRR}}}gggQQQ\\\~~~ԪԨtttúḸggguuuxxx$$$444sssᵻtddddddddddeffgw777sssWWW777\\\~~~ԪԨtttúḸgggkkk+++zzz444sssڰuggggggggggghijx777[[[iiiiiiUUUVVVUUUwwwsssWWWXXXSSS[[["""[[[XXXYYYyyyNNNRRRjjjPPPRRR```\\\~~~ԪԨtttúḸ̾%%%{{{444sssӪthhhhhhhhhhhijlx777TTTaaaaaaCCCCCCsssWWWQQQ}}}...aaa---HHH>>>///NNNkkkLLL\\\~~~ԪԨtttúḸ̣444sssʣshhhhhhhhhhhijlv777///666sssWWW@@@999eee```NNN{{{hhhZZZ\\\~~~ԪԨtttúḸ888444sssphhhhhhhhhhhhilt777fffkkkxxxYYYsssWWWooo```###XXXtttgggNNN|||fff777\\\~~~ԪԨtttúḸ444sssnggggggggggghilr]]]fffPPP```sssnnnMMMgggRRRuuuRRR```llliiiOOO\\\~~~ԪԨtttúᚚ}}}444ssslfffffffffffghlq\\\~~~ԪԨtttú000sss}hbbbbbbbbbbbcdhn\\\~~~ԪԨtttúy\wTvTvTvTvTvTvTvTvTvTvTvTvTwY|s\\\~~~ԪԨtttúlt~J]yLaLaLaLaLaLaLaLaLaLaLaLaLaVj\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttúɵdzȳɵʶʶȴʶϺҽҾι̸ҽмκѽѼ\\\~~~ԪԨtttúƜtUURSVUSZWV[Z[Ɣc^W]_ۻ\\\~~~ԪԨtttúśsV^Ð_\\^~OX0`?\<kF#\3VǕd^X_Ɣcݽ\\\~~~ԪԨtttúϧʙiʙhǕdǕd˚jSnI$qK&[;M0C*M0a>UʙhœbĒaѠq£\\\~~~ԪԨtttú̣|ɘg̛j̛jΞn˜og>Zɟxe^6W7H,R2uN)`Νm˚jϞm\\\~~~ԪԨtttú888Ҫ͜lПpѠrۯYsL佚ɫ’e~S*O1E+V6lD̛kΝoПpæ\\\~~~ԪԨtttú888۶ӢuҢuӤvӥx}V0`ţɩáңw{LoH"H-@(iF#wFOƔdۻ\\\~~~ԪԨtttúeee888jĔfج޴fgC!{Oҧ}ݳeYtEsL$U5D)S5|R'h9uEƥ\\\~~~ԪԨtttúlllFFF888mLc4YėlkAZ:[3uHZqDlBc9xP(X7H,N0gAT(]/tSSS\\\~~~ԪԨtttúggglllSSS888gInG!yR*}T+qK%V9`֩~˜o̝q٭ŔgZ1];T4V6pH!U)W,tSSSߝƚܢܝ—\\\~~~ԪԨtttúgggeeeJJJ888cG\:Z9Q3R4R6~UڭǙlȚnگSpJ#[9Z8Y8d@wN%W+ySSSSSSCCCjjjzzzYYY啕vvvgggꊊeee\\\~~~ԪԨtttúfff===888}aEZ9V6N1J-M0W1ēdoDzM\g9gB];^;W6[9b>fBmSSSlll000nnn¤'''ŀggg444///...###nnn\\\~~~ԪԨtttúmmm???888w\CY8S4U5N0R3hE"~QTpA~NX.\:Y8W6X7^<hClElSSSnnn000nnnmmm---gggӅλbbb\\\~~~ԪԨtttúډ888u[A\9_=pI"[9R3P2uR/UoA~T+c?T4S3X7T4Z8d@qH!nSSSnnn000nnnlllAAA|||ggg}}}ppp\\\~~~ԪԨtttú888}aDrJ"}R)_2oH"P1K.A*^?fCX8W7W7S3P1L.R3_<iCmӼ̻vvv켼Ӹ\\\~~~ԪԨtttúzzz777oMb5f8e6yO%S4E*='S5Y/rJ#rJ!xN$W6K.G+O1a>sJ"o㒒ꅅ\\\~~~ԪԨtttúGGG999999999999999999999999999999999cFc@c@d@Z8I-F,H.sN)~O|LyIyI|R)U5S4J.H,X7jdddMMM\\\~~~ԪԨtttújIQ2?'H,I,M.^=jAȚoתҢvӦ{͜mf9kE`=P1J-Y7m\\\~~~ԪԨtttúkJU5M/P1O0V6c;֫侚㼙ฒṕӥyg:tL#\:T4Q2P1k\\\~~~ԪԨtttúsPfC`=K.L.yP'd忝ãâ徜㼙Ԧ|e8tK#gBrJ"mF S3xe\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttúx8SuGhIjLlOmRoUpYr[t^uFJN\\\~~~ԪԨtttúYv|䛤ے\\\~~~ԪԨtttúկ`ve̝ou|www\\\~~~ԪԨtttúĶ\\\}}}gȇhDX~oybeh\\\~~~ԪԨtttúḸ444sssnȑk&/y}߸\`f\\\~~~ԪԨtttúḸ444sssuȚȇ2>>nnnggg===XXX777FFFCCCMMM___bbb@@@ZZZeee@@@KKKeee___PPPFFF}}}```XXX<<Du}fff777777444EEEzzz %%%555555:::]]]qqqEEEAAAaaaXXX@@@OOOVVV>>>```"""|||NNN EEE[[[BBBHHHWWWsssJJJBBBYYYLLL>>>ggg\\\~~~ԪԨtttúᮮ444sssemCIgmfff\\\~~~ԪԨtttúXXXBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"""sssҾǘeee\\\~~~ԪԨtttúddd]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]fff\\\~~~ԪԨtttúfff\\\~~~ԪԨtttúllmhhhOOO\\\~~~ԪԨtttúoooooooooooooooooooooooooooooooooooouuu\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú˞\\\~~~ԪԨtttúǹxwyVTVcbcPOPede\\\~~~ԪԨtttú͔{z{lkl~ror989JHJ=;=888>=>444\\\~~~ԪԨtttú]\]ywz656SRS}|}[Y[\\\~~~ԪԨtttú888dbdfdf dbd^\^CBC878pop}|}\\\~~~ԪԨtttú888hghMKM"""ONOcbcpop\\\~~~ԪԨtttúݭ888[Y[DCD%&&...dcdmmn\\\~~~ԪԨtttúꞞ$$$888WVWONOvtv~?>?~}~{z{yyy^^^ddd\\\~~~ԪԨtttújjj///888'''111323VTVPOP767,,,ז  SSSFFFeee000\\\~~~ԪԨtttúgggrrr666888KKKDEEIIIGGF;<;333### PNP212 ~|~ljlzxzSSS000霜zzzzzz㬬777}}}uuu\\\~~~ԪԨtttú///888JJJQQQYZZZZZRSRQRRRQRMLM@@@@@@333(((+++!!!.-.ONOSSSwww󏏏000aaa𛛛777aaacccrrrIIIXXX\\\~~~ԪԨtttú###888CCCLLLSSR\[\fef[[\`^`TSTDDDEEEFFFIII000///*+*SSS֑000777ـѩ\\\~~~ԪԨtttúCCC888cab>>>KKK[Z[ONO]\\FFFEDDLLLRRRRRRRRQ'''444&&%SSSۿPPP000̉܌SSS777򈈈ݙxxxـ\\\~~~ԪԨtttú888GGF<<=<))(䌌nnnzzzvvv򁁁sss≉wwwooo\\\~~~ԪԨtttúĸ888::9;<>>LKLQPPFFFDDD===>>><<<<<<<<<@@@DDCBBB/0/ppp\\\~~~ԪԨtttú***@>>A@@===<<<777333000000000/..,,+---+,- "ecf\\\~~~ԪԨtttújjj]]]JJJBBBJJJA@A221))($$$"#$ "$$$\\\~~~ԪԨtttúӱtstuuvaaaddd\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú@@@\\\~~~ԪԨtttúߞ444\\\~~~ԪԨtttúۉ౱pj444\\\~~~ԪԨtttúḸ444sss^^^蹶洱444\\\~~~ԪԨtttúḸ444sss___ %%%ܓ444\\\~~~ԪԨtttúḸfff444sssbb^[[[ hhh絲[U紲444\\\~~~ԪԨtttúḸnnn...444sssTTT&&&ccc000AAA444777>>>UUU EEE\\\~~~ԪԨtttúḸggg]]]ooo888444sss[[[ FFFGGG!!!333⧣⧣444777<<>>___^^^ZZZޖ\\\~~~ԪԨtttúOOOvvv888NNNSSS```kkkhhhEEEZZZuuu000zzz⮮ܽSSS\\\~~~ԪԨtttú888ТOOOSSS```fffnnnEEEZZZuuu000gggnnnvvvbbb\\\~~~ԪԨtttú888[[[hhhOOO\\\~~~ԪԨtttú```KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK&&&啕???jjjNNN\\\~~~ԪԨtttúы¥OOO\\\~~~ԪԨtttúkkkkkkkkkkkkkkkkkkjjj___UUU\\\gggkkkkkkkkkkkkkkkWWW\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨtttú\\\~~~ԪԨxxxѳ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨʅӌ\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨϹҩwwwӾԱzzz\\\~~~ԪԨοҩwww˽Աzzz\\\~~~ԪԨκԽľҩwwwԶÿ˺¾Աzzz\\\~~~ԪԨκľʸнԽҩwwwϾ˾Ըо˿;оԱzzz\\\~~~ԪԨοԽҩwwwɶԸӼѺԱzzz\\\~~~ԪԨοѽŸԽҩwwwӶɿ˻ŸԱzzz\\\~~~ԪԨҩwwwѷ˼ɼԱzzz\\\~~~ԪԨҩwwwԸԱzzz\\\~~~ԪԨҩwwwԸɽԱzzz\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨҩwwwԱzzz\\\~~~ԪԨۺwwwݾzzz\\\~~~ԪԨԱUUU333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222===[[[Ժaaa444222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999WWW\\\~~~ԪԨ̼ξ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨ\\\~~~ԪԨѲ\\\~~~ԪԨԖ---$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$~~~ԪԨԪԨԪԨԪԣΝ 2ԝ@">F(/root/Desktop/Documentation/GWMetadata/pref2.tiffh8phhhhhh-HHgworkspace-1.1.0/GWMetadata/aclocal.m40000644000175000001440000000222113251572110016727 0ustar multixusersAC_DEFUN(AC_CHECK_PDFKIT,[ GNUSTEP_SH_EXPORT_ALL_VARIABLES=yes . "$GNUSTEP_MAKEFILES/GNUstep.sh" unset GNUSTEP_SH_EXPORT_ALL_VARIABLES OLD_CFLAGS=$CFLAGS CFLAGS="-xobjective-c `gnustep-config --objc-flags`" OLD_LDFLAGS="$LD_FLAGS" LDFLAGS="$LDFLAGS `gnustep-config --gui-libs`" OLD_LIBS="$LIBS" LIBS="$LIBS -lPDFKit" AC_MSG_CHECKING([for PDFKit]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include ]], [[[PDFDocument class];]])], $1; have_pdfkit=yes, $2; have_pdfkit=no) LIBS="$OLD_LIBS" LDFLAGS="$OLD_LDFLAGS" CFLAGS="$OLD_CFLAGS" AC_MSG_RESULT($have_pdfkit) ]) AC_DEFUN(AC_CHECK_PDFKIT_DARWIN,[ AC_MSG_CHECKING([for PDFKit]) PDF_H="PDFKit/PDFDocument.h" PDF_H_PATH="$GNUSTEP_SYSTEM_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else PDF_H_PATH="$GNUSTEP_LOCAL_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else have_pdfkit=no fi fi AC_MSG_RESULT($have_pdfkit) ]) gworkspace-1.1.0/GWMetadata/config.log0000644000175000001440000004000714634456107017060 0ustar multixusersThis file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by configure, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure --disable-option-checking --prefix=/usr/local --enable-gwmetadata --cache-file=/dev/null --srcdir=. ## --------- ## ## Platform. ## ## --------- ## hostname = moria uname -m = x86_64 uname -r = 6.9.3-gentoo uname -s = Linux uname -v = #1 SMP Wed Jun 5 10:00:26 CEST 2024 /usr/bin/uname -p = Intel(R) Xeon(R) CPU X5650 @ 2.67GHz /bin/uname -X = unknown /bin/arch = unknown /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /home/multix/GNUstep/Tools PATH: /Local/Tools PATH: /System/Tools PATH: /usr/local/bin PATH: /usr/bin PATH: /bin PATH: /usr/local/sbin PATH: /usr/local/bin PATH: /usr/sbin PATH: /usr/bin PATH: /sbin PATH: /bin PATH: /opt/bin PATH: /usr/lib/llvm/18/bin PATH: /usr/lib/llvm/17/bin PATH: /usr/lib/llvm/16/bin PATH: /usr/lib/llvm/10/bin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2170: checking for gcc configure:2197: result: gcc configure:2426: checking for C compiler version configure:2435: gcc --version >&5 gcc (Gentoo 14.1.1_p20240518 p1) 14.1.1 20240516 Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:2446: $? = 0 configure:2435: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/14/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /var/tmp/portage/sys-devel/gcc-14.1.1_p20240518/work/gcc-14-20240518/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/14 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/14/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/14 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/14/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/14/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14 --disable-silent-rules --disable-dependency-tracking --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/14/python --enable-languages=c,c++,objc,obj-c++ --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --disable-libunwind-exceptions --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 14.1.1_p20240518 p1' --with-gcc-major-version-only --enable-libstdcxx-time --enable-lto --disable-libstdcxx-pch --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-fixed-point --enable-targets=all --enable-libgomp --disable-libssp --disable-libada --enable-cet --disable-systemtap --disable-valgrind-annotations --disable-vtable-verify --disable-libvtv --with-zstd --without-isl --enable-default-pie --enable-host-pie --enable-host-bind-now --enable-default-ssp --disable-fixincludes --with-build-config=bootstrap-cet Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 14.1.1 20240516 (Gentoo 14.1.1_p20240518 p1) configure:2446: $? = 0 configure:2435: gcc -V >&5 gcc: error: unrecognized command-line option '-V' gcc: fatal error: no input files compilation terminated. configure:2446: $? = 1 configure:2435: gcc -qversion >&5 gcc: error: unrecognized command-line option '-qversion'; did you mean '--version'? gcc: fatal error: no input files compilation terminated. configure:2446: $? = 1 configure:2466: checking whether the C compiler works configure:2488: gcc conftest.c >&5 configure:2492: $? = 0 configure:2540: result: yes configure:2543: checking for C compiler default output file name configure:2545: result: a.out configure:2551: checking for suffix of executables configure:2558: gcc -o conftest conftest.c >&5 configure:2562: $? = 0 configure:2584: result: configure:2606: checking whether we are cross compiling configure:2614: gcc -o conftest conftest.c >&5 configure:2618: $? = 0 configure:2625: ./conftest configure:2629: $? = 0 configure:2644: result: no configure:2649: checking for suffix of object files configure:2671: gcc -c conftest.c >&5 configure:2675: $? = 0 configure:2696: result: o configure:2700: checking whether we are using the GNU C compiler configure:2719: gcc -c conftest.c >&5 configure:2719: $? = 0 configure:2728: result: yes configure:2737: checking whether gcc accepts -g configure:2757: gcc -c -g conftest.c >&5 configure:2757: $? = 0 configure:2798: result: yes configure:2815: checking for gcc option to accept ISO C89 configure:2878: gcc -c -g -O2 conftest.c >&5 configure:2878: $? = 0 configure:2891: result: none needed configure:2917: checking how to run the C preprocessor configure:2987: result: gcc -E configure:3007: gcc -E conftest.c configure:3007: $? = 0 configure:3021: gcc -E conftest.c conftest.c:9:10: fatal error: ac_nonexistent.h: No such file or directory 9 | #include | ^~~~~~~~~~~~~~~~~~ compilation terminated. configure:3021: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | /* end confdefs.h. */ | #include configure:3050: checking for grep that handles long lines and -e configure:3108: result: /bin/grep configure:3113: checking for egrep configure:3175: result: /bin/grep -E configure:3180: checking for ANSI C header files configure:3200: gcc -c -g -O2 conftest.c >&5 configure:3200: $? = 0 configure:3273: gcc -o conftest -g -O2 conftest.c >&5 configure:3273: $? = 0 configure:3273: ./conftest configure:3273: $? = 0 configure:3284: result: yes configure:3297: checking for sys/types.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for sys/stat.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for stdlib.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for string.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for memory.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for strings.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for inttypes.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for stdint.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3297: checking for unistd.h configure:3297: gcc -c -g -O2 conftest.c >&5 configure:3297: $? = 0 configure:3297: result: yes configure:3312: checking dir.h usability configure:3312: gcc -c -g -O2 conftest.c >&5 conftest.c:52:10: fatal error: dir.h: No such file or directory 52 | #include | ^~~~~~~ compilation terminated. configure:3312: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | /* end confdefs.h. */ | #include | #ifdef HAVE_SYS_TYPES_H | # include | #endif | #ifdef HAVE_SYS_STAT_H | # include | #endif | #ifdef STDC_HEADERS | # include | # include | #else | # ifdef HAVE_STDLIB_H | # include | # endif | #endif | #ifdef HAVE_STRING_H | # if !defined STDC_HEADERS && defined HAVE_MEMORY_H | # include | # endif | # include | #endif | #ifdef HAVE_STRINGS_H | # include | #endif | #ifdef HAVE_INTTYPES_H | # include | #endif | #ifdef HAVE_STDINT_H | # include | #endif | #ifdef HAVE_UNISTD_H | # include | #endif | #include configure:3312: result: no configure:3312: checking dir.h presence configure:3312: gcc -E conftest.c conftest.c:19:10: fatal error: dir.h: No such file or directory 19 | #include | ^~~~~~~ compilation terminated. configure:3312: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | /* end confdefs.h. */ | #include configure:3312: result: no configure:3312: checking for dir.h configure:3312: result: no configure:3312: checking for unistd.h configure:3312: result: yes configure:3325: checking for getpwnam configure:3325: gcc -o conftest -g -O2 conftest.c >&5 configure:3325: $? = 0 configure:3325: result: yes configure:3325: checking for getpwuid configure:3325: gcc -o conftest -g -O2 conftest.c >&5 configure:3325: $? = 0 configure:3325: result: yes configure:3325: checking for geteuid configure:3325: gcc -o conftest -g -O2 conftest.c >&5 configure:3325: $? = 0 configure:3325: result: yes configure:3325: checking for getlogin configure:3325: gcc -o conftest -g -O2 conftest.c >&5 configure:3325: $? = 0 configure:3325: result: yes configure:3373: checking build system type configure:3387: result: x86_64-pc-linux-gnu configure:3407: checking host system type configure:3420: result: x86_64-pc-linux-gnu configure:3440: checking target system type configure:3453: result: x86_64-pc-linux-gnu configure:3518: checking sqlite3.h usability configure:3518: gcc -c -g -O2 conftest.c >&5 configure:3518: $? = 0 configure:3518: result: yes configure:3518: checking sqlite3.h presence configure:3518: gcc -E conftest.c configure:3518: $? = 0 configure:3518: result: yes configure:3518: checking for sqlite3.h configure:3518: result: yes configure:3527: checking for sqlite3_get_table in -lsqlite3 configure:3552: gcc -o conftest -g -O2 -lsqlite3 conftest.c -lsqlite3 >&5 configure:3552: $? = 0 configure:3561: result: yes configure:3600: gcc -o conftest -g -O2 -lsqlite3 conftest.c -lsqlite3 >&5 configure:3600: $? = 0 configure:3600: ./conftest configure:3600: $? = 0 configure:3679: checking for PDFKit configure:3695: gcc -o conftest -xobjective-c -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthread -fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -g -O2 -fconstant-string-class=NSConstantString -I. -I/home/multix/GNUstep/Library/Headers -I/Local/Library/Headers -I/System/Library/Headers -lsqlite3 -shared-libgcc -pthread -fexceptions -rdynamic -L/home/multix/GNUstep/Library/Libraries -L/Local/Library/Libraries -L/System/Library/Libraries -lgnustep-gui -lgnustep-base -lobjc -lm conftest.c -lsqlite3 -lPDFKit >&5 configure:3695: $? = 0 configure:3709: result: yes configure:3741: checking for unzip configure:3759: found /usr/bin/unzip configure:3771: result: /usr/bin/unzip configure:3926: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by config.status, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on moria config.status:826: creating GNUmakefile config.status:826: creating MDKit/GNUmakefile config.status:826: creating gmds/gmds/GNUmakefile config.status:826: creating gmds/gmds/GNUmakefile.preamble config.status:826: creating gmds/mdextractor/Extractors/GNUmakefile config.status:826: creating MDKit/config.h config.status:996: MDKit/config.h is unchanged config.status:826: creating gmds/mdextractor/Extractors/extractors.h config.status:996: gmds/mdextractor/Extractors/extractors.h is unchanged ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=x86_64-pc-linux-gnu ac_cv_c_compiler_gnu=yes ac_cv_env_CC_set=set ac_cv_env_CC_value=gcc ac_cv_env_CFLAGS_set= ac_cv_env_CFLAGS_value= ac_cv_env_CPPFLAGS_set= ac_cv_env_CPPFLAGS_value= ac_cv_env_CPP_set=set ac_cv_env_CPP_value='gcc -E' ac_cv_env_LDFLAGS_set= ac_cv_env_LDFLAGS_value= ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_build_alias_set= ac_cv_env_build_alias_value= ac_cv_env_host_alias_set= ac_cv_env_host_alias_value= ac_cv_env_target_alias_set= ac_cv_env_target_alias_value= ac_cv_func_geteuid=yes ac_cv_func_getlogin=yes ac_cv_func_getpwnam=yes ac_cv_func_getpwuid=yes ac_cv_header_dir_h=no ac_cv_header_inttypes_h=yes ac_cv_header_memory_h=yes ac_cv_header_sqlite3_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_stat_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_host=x86_64-pc-linux-gnu ac_cv_lib_sqlite3_sqlite3_get_table=yes ac_cv_objext=o ac_cv_path_EGREP='/bin/grep -E' ac_cv_path_GREP=/bin/grep ac_cv_path_UNZ_PATH=/usr/bin/unzip ac_cv_prog_CPP='gcc -E' ac_cv_prog_ac_ct_CC=gcc ac_cv_prog_cc_c89= ac_cv_prog_cc_g=yes ac_cv_target=x86_64-pc-linux-gnu ## ----------------- ## ## Output variables. ## ## ----------------- ## CC='gcc' CFLAGS='-g -O2' CPP='gcc -E' CPPFLAGS=' ' DEFS='-DHAVE_CONFIG_H' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/bin/grep -E' EXEEXT='' GREP='/bin/grep' LDFLAGS='' LIBOBJS='' LIBS='-lsqlite3 ' LTLIBOBJS='' OBJEXT='o' PACKAGE_BUGREPORT='' PACKAGE_NAME='' PACKAGE_STRING='' PACKAGE_TARNAME='' PACKAGE_URL='' PACKAGE_VERSION='' PATH_SEPARATOR=':' SHELL='/bin/sh' SQLITE_INCLUDE_DIRS='' SQLITE_LIB_DIRS=' -lsqlite3' UNZ_PATH='/usr/bin/unzip' ac_ct_CC='gcc' bindir='${exec_prefix}/bin' build='x86_64-pc-linux-gnu' build_alias='' build_cpu='x86_64' build_os='linux-gnu' build_vendor='pc' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE}' dvidir='${docdir}' exec_prefix='${prefix}' have_pdfkit='yes' host='x86_64-pc-linux-gnu' host_alias='' host_cpu='x86_64' host_os='linux-gnu' host_vendor='pc' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' libdir='${exec_prefix}/lib' libexecdir='${exec_prefix}/libexec' localedir='${datarootdir}/locale' localstatedir='${prefix}/var' mandir='${datarootdir}/man' oldincludedir='/usr/include' pdfdir='${docdir}' prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' sysconfdir='${prefix}/etc' target='x86_64-pc-linux-gnu' target_alias='' target_cpu='x86_64' target_os='linux-gnu' target_vendor='pc' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "" #define PACKAGE_TARNAME "" #define PACKAGE_VERSION "" #define PACKAGE_STRING "" #define PACKAGE_BUGREPORT "" #define PACKAGE_URL "" #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define HAVE_UNISTD_H 1 #define HAVE_GETPWNAM 1 #define HAVE_GETPWUID 1 #define HAVE_GETEUID 1 #define HAVE_GETLOGIN 1 #define HAVE_LIBSQLITE3 1 #define UNZIP_PATH "/usr/bin/unzip" #define GW_DEBUG_LOG 0 configure: exit 0 gworkspace-1.1.0/GWMetadata/config.status0000755000175000001440000006752514634456107017643 0ustar multixusers#! /bin/sh # Generated by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=${CONFIG_SHELL-/bin/sh} export SHELL ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " # Files that config.status was made for. config_files=" GNUmakefile MDKit/GNUmakefile gmds/gmds/GNUmakefile gmds/gmds/GNUmakefile.preamble gmds/mdextractor/Extractors/GNUmakefile" config_headers=" MDKit/config.h gmds/mdextractor/Extractors/extractors.h" ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." ac_cs_config="'--disable-option-checking' '--prefix=/usr/local' '--enable-gwmetadata' '--cache-file=/dev/null' '--srcdir=.' 'CC=gcc' 'CPP=gcc -E'" ac_cs_version="\ config.status configured by ./configure, generated by GNU Autoconf 2.69, with options \"$ac_cs_config\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='/home/multix/gnustep-cvs/apps-gworkspace/GWMetadata' srcdir='.' test -n "$AWK" || AWK=awk # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi if $ac_cs_recheck; then set X /bin/sh './configure' '--disable-option-checking' '--prefix=/usr/local' '--enable-gwmetadata' '--cache-file=/dev/null' '--srcdir=.' 'CC=gcc' 'CPP=gcc -E' $ac_configure_extra_args --no-create --no-recursion shift $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 CONFIG_SHELL='/bin/sh' export CONFIG_SHELL exec "$@" fi exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "MDKit/config.h") CONFIG_HEADERS="$CONFIG_HEADERS MDKit/config.h" ;; "gmds/mdextractor/Extractors/extractors.h") CONFIG_HEADERS="$CONFIG_HEADERS gmds/mdextractor/Extractors/extractors.h" ;; "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; "MDKit/GNUmakefile") CONFIG_FILES="$CONFIG_FILES MDKit/GNUmakefile" ;; "gmds/gmds/GNUmakefile") CONFIG_FILES="$CONFIG_FILES gmds/gmds/GNUmakefile" ;; "gmds/gmds/GNUmakefile.preamble") CONFIG_FILES="$CONFIG_FILES gmds/gmds/GNUmakefile.preamble" ;; "gmds/mdextractor/Extractors/GNUmakefile") CONFIG_FILES="$CONFIG_FILES gmds/mdextractor/Extractors/GNUmakefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && S["LTLIBOBJS"]="" S["LIBOBJS"]="" S["UNZ_PATH"]="/usr/bin/unzip" S["have_pdfkit"]="yes" S["SQLITE_INCLUDE_DIRS"]="" S["SQLITE_LIB_DIRS"]=" -lsqlite3" S["target_os"]="linux-gnu" S["target_vendor"]="pc" S["target_cpu"]="x86_64" S["target"]="x86_64-pc-linux-gnu" S["host_os"]="linux-gnu" S["host_vendor"]="pc" S["host_cpu"]="x86_64" S["host"]="x86_64-pc-linux-gnu" S["build_os"]="linux-gnu" S["build_vendor"]="pc" S["build_cpu"]="x86_64" S["build"]="x86_64-pc-linux-gnu" S["EGREP"]="/bin/grep -E" S["GREP"]="/bin/grep" S["CPP"]="gcc -E" S["OBJEXT"]="o" S["EXEEXT"]="" S["ac_ct_CC"]="gcc" S["CPPFLAGS"]=" " S["LDFLAGS"]="" S["CFLAGS"]="-g -O2" S["CC"]="gcc" S["target_alias"]="" S["host_alias"]="" S["build_alias"]="" S["LIBS"]="-lsqlite3 " S["ECHO_T"]="" S["ECHO_N"]="-n" S["ECHO_C"]="" S["DEFS"]="-DHAVE_CONFIG_H" S["mandir"]="${datarootdir}/man" S["localedir"]="${datarootdir}/locale" S["libdir"]="${exec_prefix}/lib" S["psdir"]="${docdir}" S["pdfdir"]="${docdir}" S["dvidir"]="${docdir}" S["htmldir"]="${docdir}" S["infodir"]="${datarootdir}/info" S["docdir"]="${datarootdir}/doc/${PACKAGE}" S["oldincludedir"]="/usr/include" S["includedir"]="${prefix}/include" S["localstatedir"]="${prefix}/var" S["sharedstatedir"]="${prefix}/com" S["sysconfdir"]="${prefix}/etc" S["datadir"]="${datarootdir}" S["datarootdir"]="${prefix}/share" S["libexecdir"]="${exec_prefix}/libexec" S["sbindir"]="${exec_prefix}/sbin" S["bindir"]="${exec_prefix}/bin" S["program_transform_name"]="s,x,x," S["prefix"]="/usr/local" S["exec_prefix"]="${prefix}" S["PACKAGE_URL"]="" S["PACKAGE_BUGREPORT"]="" S["PACKAGE_STRING"]="" S["PACKAGE_VERSION"]="" S["PACKAGE_TARNAME"]="" S["PACKAGE_NAME"]="" S["PATH_SEPARATOR"]=":" S["SHELL"]="/bin/sh" _ACAWK cat >>"$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { D["PACKAGE_NAME"]=" \"\"" D["PACKAGE_TARNAME"]=" \"\"" D["PACKAGE_VERSION"]=" \"\"" D["PACKAGE_STRING"]=" \"\"" D["PACKAGE_BUGREPORT"]=" \"\"" D["PACKAGE_URL"]=" \"\"" D["STDC_HEADERS"]=" 1" D["HAVE_SYS_TYPES_H"]=" 1" D["HAVE_SYS_STAT_H"]=" 1" D["HAVE_STDLIB_H"]=" 1" D["HAVE_STRING_H"]=" 1" D["HAVE_MEMORY_H"]=" 1" D["HAVE_STRINGS_H"]=" 1" D["HAVE_INTTYPES_H"]=" 1" D["HAVE_STDINT_H"]=" 1" D["HAVE_UNISTD_H"]=" 1" D["HAVE_UNISTD_H"]=" 1" D["HAVE_GETPWNAM"]=" 1" D["HAVE_GETPWUID"]=" 1" D["HAVE_GETEUID"]=" 1" D["HAVE_GETLOGIN"]=" 1" D["HAVE_LIBSQLITE3"]=" 1" D["UNZIP_PATH"]=" \"/usr/bin/unzip\"" D["GW_DEBUG_LOG"]=" 0" for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { line = $ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ac_datarootdir_hack=' s&@datadir@&${datarootdir}&g s&@docdir@&${datarootdir}/doc/${PACKAGE}&g s&@infodir@&${datarootdir}/info&g s&@localedir@&${datarootdir}/locale&g s&@mandir@&${datarootdir}/man&g s&\${datarootdir}&${prefix}/share&g' ;; esac ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// } :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 gworkspace-1.1.0/GWMetadata/configure0000755000175000001440000044242714623464003017023 0ustar multixusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS UNZ_PATH have_pdfkit SQLITE_INCLUDE_DIRS SQLITE_LIB_DIRS target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_sqlite_library with_sqlite_include with_unzip enable_debug_log ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug-log Enable debug logging Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-sqlite-library=DIR sqlite library files are in DIR --with-sqlite-include=DIR sqlite include files are in DIR --with-unzip=PROG Use PROG as unzip Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$GNUSTEP_MAKEFILES"; then as_fn_error $? "You must run the GNUstep initialization script first!" "$LINENO" 5 fi #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dir.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpwnam getpwuid geteuid getlogin do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_aux_dir= for ac_dir in $GNUSTEP_MAKEFILES "$srcdir"/$GNUSTEP_MAKEFILES; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in $GNUSTEP_MAKEFILES \"$srcdir\"/$GNUSTEP_MAKEFILES" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Determine the host, build, and target systems #-------------------------------------------------------------------- # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- #-------------------------------------------------------------------- # Find sqlite #-------------------------------------------------------------------- # Check whether --with-sqlite_library was given. if test "${with_sqlite_library+set}" = set; then : withval=$with_sqlite_library; else with_sqlite_library= fi # Check whether --with-sqlite_include was given. if test "${with_sqlite_include+set}" = set; then : withval=$with_sqlite_include; else with_sqlite_include= fi if test -n "$with_sqlite_library"; then with_sqlite_library="-L$with_sqlite_library" fi if test -n "$with_sqlite_include"; then with_sqlite_include="-I$with_sqlite_include" fi CPPFLAGS="$with_sqlite_include ${CPPFLAGS}" LDFLAGS="$with_sqlite_library -lsqlite3 ${LDFLAGS}" case "$target_os" in freebsd* | openbsd* ) CPPFLAGS="$CPPFLAGS -I/usr/local/include" LDFLAGS="$LDFLAGS -L/usr/local/lib";; netbsd*) CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" LDFLAGS="$LDFLAGS -Wl,-R/usr/pkg/lib -L/usr/pkg/lib";; esac ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" if test "x$ac_cv_header_sqlite3_h" = xyes; then : have_sqlite=yes else have_sqlite=no fi if test "$have_sqlite" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_get_table in -lsqlite3" >&5 $as_echo_n "checking for sqlite3_get_table in -lsqlite3... " >&6; } if ${ac_cv_lib_sqlite3_sqlite3_get_table+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsqlite3 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqlite3_get_table (); int main () { return sqlite3_get_table (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sqlite3_sqlite3_get_table=yes else ac_cv_lib_sqlite3_sqlite3_get_table=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_get_table" >&5 $as_echo "$ac_cv_lib_sqlite3_sqlite3_get_table" >&6; } if test "x$ac_cv_lib_sqlite3_sqlite3_get_table" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSQLITE3 1 _ACEOF LIBS="-lsqlite3 $LIBS" fi if test "$ac_cv_lib_sqlite3_sqlite3_get_table" = no; then have_sqlite=no fi fi if test "$have_sqlite" = yes; then sqlite_version_ok=yes if test "$cross_compiling" = yes; then : echo "wrong sqlite3 version" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { unsigned vnum = sqlite3_libversion_number(); printf("sqlite3 version number %d\n", vnum); return !(vnum >= 3002006); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else sqlite_version_ok=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$have_sqlite" = yes; then SQLITE_LIB_DIRS="$with_sqlite_library -lsqlite3" SQLITE_INCLUDE_DIRS="$with_sqlite_include" fi fi if test "$have_sqlite" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find libsqlite3 header and/or library" >&5 $as_echo "$as_me: WARNING: Cannot find libsqlite3 header and/or library" >&2;} echo "* GWMetadata requires the sqlite3 library" echo "* Use --with-sqlite-library and --with-sqlite-include" echo "* to specify the sqlite library directory if it is not" echo "* in the usual place(s)" as_fn_error $? "GWMetadata will not compile without sqlite" "$LINENO" 5 else if test "$sqlite_version_ok" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Wrong libsqlite3 version" >&5 $as_echo "$as_me: WARNING: Wrong libsqlite3 version" >&2;} echo "* GWMetadata requires libsqlite3 >= 3002006 *" as_fn_error $? "GWMetadata will not compile without sqlite" "$LINENO" 5 fi fi #-------------------------------------------------------------------- # We need PDFKit #-------------------------------------------------------------------- case "$target_os" in darwin*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDFKit" >&5 $as_echo_n "checking for PDFKit... " >&6; } PDF_H="PDFKit/PDFDocument.h" PDF_H_PATH="$GNUSTEP_SYSTEM_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else PDF_H_PATH="$GNUSTEP_LOCAL_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else have_pdfkit=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pdfkit" >&5 $as_echo "$have_pdfkit" >&6; } ;; *) GNUSTEP_SH_EXPORT_ALL_VARIABLES=yes . "$GNUSTEP_MAKEFILES/GNUstep.sh" unset GNUSTEP_SH_EXPORT_ALL_VARIABLES OLD_CFLAGS=$CFLAGS CFLAGS="-xobjective-c `gnustep-config --objc-flags`" OLD_LDFLAGS="$LD_FLAGS" LDFLAGS="$LDFLAGS `gnustep-config --gui-libs`" OLD_LIBS="$LIBS" LIBS="$LIBS -lPDFKit" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDFKit" >&5 $as_echo_n "checking for PDFKit... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { [PDFDocument class]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_pdfkit=yes; have_pdfkit=yes else have_pdfkit=no; have_pdfkit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$OLD_LIBS" LDFLAGS="$OLD_LDFLAGS" CFLAGS="$OLD_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pdfkit" >&5 $as_echo "$have_pdfkit" >&6; } ;; esac if test "$have_pdfkit" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: The PDFKit framework can't be found." >&5 $as_echo "$as_me: The PDFKit framework can't be found." >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: The pdf extractor will not be built." >&5 $as_echo "$as_me: The pdf extractor will not be built." >&6;} fi #-------------------------------------------------------------------- # We need unzip #-------------------------------------------------------------------- # Check whether --with-unzip was given. if test "${with_unzip+set}" = set; then : withval=$with_unzip; UNZ_PATH=$withval else UNZ_PATH=none fi if test "x$UNZ_PATH" = "xnone"; then for ac_prog in unzip unzip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_UNZ_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $UNZ_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_UNZ_PATH="$UNZ_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_UNZ_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi UNZ_PATH=$ac_cv_path_UNZ_PATH if test -n "$UNZ_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZ_PATH" >&5 $as_echo "$UNZ_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$UNZ_PATH" && break done test -n "$UNZ_PATH" || UNZ_PATH="none" fi cat >>confdefs.h <<_ACEOF #define UNZIP_PATH "$UNZ_PATH" _ACEOF #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- # Check whether --enable-debug_log was given. if test "${enable_debug_log+set}" = set; then : enableval=$enable_debug_log; else enable_debug_log=no fi if test "$enable_debug_log" = "no"; then GW_DEBUG_LOG=0 else GW_DEBUG_LOG=1 fi cat >>confdefs.h <<_ACEOF #define GW_DEBUG_LOG $GW_DEBUG_LOG _ACEOF ac_config_headers="$ac_config_headers MDKit/config.h gmds/mdextractor/Extractors/extractors.h" ac_config_files="$ac_config_files GNUmakefile MDKit/GNUmakefile gmds/gmds/GNUmakefile gmds/gmds/GNUmakefile.preamble gmds/mdextractor/Extractors/GNUmakefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "MDKit/config.h") CONFIG_HEADERS="$CONFIG_HEADERS MDKit/config.h" ;; "gmds/mdextractor/Extractors/extractors.h") CONFIG_HEADERS="$CONFIG_HEADERS gmds/mdextractor/Extractors/extractors.h" ;; "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; "MDKit/GNUmakefile") CONFIG_FILES="$CONFIG_FILES MDKit/GNUmakefile" ;; "gmds/gmds/GNUmakefile") CONFIG_FILES="$CONFIG_FILES gmds/gmds/GNUmakefile" ;; "gmds/gmds/GNUmakefile.preamble") CONFIG_FILES="$CONFIG_FILES gmds/gmds/GNUmakefile.preamble" ;; "gmds/mdextractor/Extractors/GNUmakefile") CONFIG_FILES="$CONFIG_FILES gmds/mdextractor/Extractors/GNUmakefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gworkspace-1.1.0/GWMetadata/configure.ac0000644000175000001440000001077513251572116017400 0ustar multixusersAC_PREREQ(2.52) AC_INIT if test -z "$GNUSTEP_MAKEFILES"; then AC_MSG_ERROR([You must run the GNUstep initialization script first!]) fi #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- AC_CHECK_HEADERS(dir.h unistd.h) AC_CHECK_FUNCS(getpwnam getpwuid geteuid getlogin) AC_CONFIG_AUX_DIR([$GNUSTEP_MAKEFILES]) #-------------------------------------------------------------------- # Determine the host, build, and target systems #-------------------------------------------------------------------- AC_CANONICAL_TARGET([]) #-------------------------------------------------------------------- # Find sqlite #-------------------------------------------------------------------- AC_ARG_WITH(sqlite_library, [ --with-sqlite-library=DIR sqlite library files are in DIR], , with_sqlite_library=) AC_ARG_WITH(sqlite_include, [ --with-sqlite-include=DIR sqlite include files are in DIR], , with_sqlite_include=) if test -n "$with_sqlite_library"; then with_sqlite_library="-L$with_sqlite_library" fi if test -n "$with_sqlite_include"; then with_sqlite_include="-I$with_sqlite_include" fi CPPFLAGS="$with_sqlite_include ${CPPFLAGS}" LDFLAGS="$with_sqlite_library -lsqlite3 ${LDFLAGS}" case "$target_os" in freebsd* | openbsd* ) CPPFLAGS="$CPPFLAGS -I/usr/local/include" LDFLAGS="$LDFLAGS -L/usr/local/lib";; netbsd*) CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" LDFLAGS="$LDFLAGS -Wl,-R/usr/pkg/lib -L/usr/pkg/lib";; esac AC_CHECK_HEADER(sqlite3.h, have_sqlite=yes, have_sqlite=no) if test "$have_sqlite" = yes; then AC_CHECK_LIB(sqlite3, sqlite3_get_table) if test "$ac_cv_lib_sqlite3_sqlite3_get_table" = no; then have_sqlite=no fi fi if test "$have_sqlite" = yes; then sqlite_version_ok=yes AC_TRY_RUN([ #include #include #include #include int main () { unsigned vnum = sqlite3_libversion_number(); printf("sqlite3 version number %d\n", vnum); return !(vnum >= 3002006); } ],, sqlite_version_ok=no,[echo "wrong sqlite3 version"]) if test "$have_sqlite" = yes; then SQLITE_LIB_DIRS="$with_sqlite_library -lsqlite3" SQLITE_INCLUDE_DIRS="$with_sqlite_include" fi fi if test "$have_sqlite" = no; then AC_MSG_WARN(Cannot find libsqlite3 header and/or library) echo "* GWMetadata requires the sqlite3 library" echo "* Use --with-sqlite-library and --with-sqlite-include" echo "* to specify the sqlite library directory if it is not" echo "* in the usual place(s)" AC_MSG_ERROR(GWMetadata will not compile without sqlite) else if test "$sqlite_version_ok" = no; then AC_MSG_WARN(Wrong libsqlite3 version) echo "* GWMetadata requires libsqlite3 >= 3002006 *" AC_MSG_ERROR(GWMetadata will not compile without sqlite) fi fi AC_SUBST(SQLITE_LIB_DIRS) AC_SUBST(SQLITE_INCLUDE_DIRS) #-------------------------------------------------------------------- # We need PDFKit #-------------------------------------------------------------------- case "$target_os" in darwin*) AC_CHECK_PDFKIT_DARWIN(have_pdfkit=yes, have_pdfkit=no) ;; *) AC_CHECK_PDFKIT(have_pdfkit=yes, have_pdfkit=no) ;; esac if test "$have_pdfkit" = "no"; then AC_MSG_NOTICE([The PDFKit framework can't be found.]) AC_MSG_NOTICE([The pdf extractor will not be built.]) fi AC_SUBST(have_pdfkit) #-------------------------------------------------------------------- # We need unzip #-------------------------------------------------------------------- AC_ARG_WITH([unzip], [ --with-unzip=PROG Use PROG as unzip], [UNZ_PATH=$withval], [UNZ_PATH=none]) if test "x$UNZ_PATH" = "xnone"; then AC_PATH_PROGS([UNZ_PATH], [unzip unzip], [none]) fi AC_DEFINE_UNQUOTED([UNZIP_PATH], ["$UNZ_PATH"], [Path to unzip]) #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- AC_ARG_ENABLE(debug_log, [ --enable-debug-log Enable debug logging],, enable_debug_log=no) if test "$enable_debug_log" = "no"; then GW_DEBUG_LOG=0 else GW_DEBUG_LOG=1 fi AC_DEFINE_UNQUOTED([GW_DEBUG_LOG], [$GW_DEBUG_LOG], [debug logging]) AC_CONFIG_HEADERS([MDKit/config.h gmds/mdextractor/Extractors/extractors.h]) AC_CONFIG_FILES([ GNUmakefile MDKit/GNUmakefile gmds/gmds/GNUmakefile gmds/gmds/GNUmakefile.preamble gmds/mdextractor/Extractors/GNUmakefile ]) AC_OUTPUT gworkspace-1.1.0/GWMetadata/gmds/0000755000175000001440000000000013231754602016032 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/GNUmakefile0000644000175000001440000000037413231754602020110 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = \ gmds \ mdextractor \ mdfind -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/GNUmakefile.postamble0000644000175000001440000000125313231754602022072 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/GNUmakefile.preamble0000644000175000001440000000064413214346537021703 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search # ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/dbschema.h0000644000175000001440000001105213214346537017755 0ustar multixusers static NSString *db_version = @"v4"; static NSString *db_schema = @"\ \ CREATE TABLE paths \ (id INTEGER PRIMARY KEY AUTOINCREMENT, \ path TEXT UNIQUE ON CONFLICT IGNORE, \ words_count INTEGER, \ moddate REAL, \ is_directory INTEGER); \ \ CREATE TABLE words \ (id INTEGER PRIMARY KEY AUTOINCREMENT, \ word TEXT UNIQUE ON CONFLICT IGNORE); \ \ CREATE TABLE postings \ (word_id INTEGER REFERENCES words(id), \ path_id INTEGER REFERENCES paths(id), \ word_count INTEGER); \ \ CREATE INDEX postings_wid_index ON postings(word_id); \ CREATE INDEX postings_pid_index ON postings(path_id); \ \ \ CREATE TABLE attributes \ (path_id INTEGER REFERENCES paths(id), \ key TEXT, \ attribute TEXT); \ \ CREATE INDEX attributes_path_index ON attributes(path_id); \ CREATE INDEX attributes_key_attr_index ON attributes(key, attribute); \ CREATE INDEX attributes_attr_index ON attributes(attribute); \ \ \ CREATE TABLE updated_paths \ (id INTEGER UNIQUE ON CONFLICT REPLACE, \ path TEXT UNIQUE ON CONFLICT REPLACE, \ words_count INTEGER, \ moddate REAL, \ is_directory INTEGER, \ timestamp REAL); \ \ CREATE INDEX updated_paths_index ON updated_paths(timestamp); \ \ CREATE TABLE removed_paths \ (path TEXT UNIQUE ON CONFLICT REPLACE); \ \ \ CREATE TRIGGER updated_paths_trigger AFTER UPDATE ON paths \ WHEN (checkUpdating() != 0) \ BEGIN \ INSERT INTO updated_paths (id, path, words_count, moddate, is_directory, timestamp) \ VALUES (new.id, new.path, new.words_count, new.moddate, new.is_directory, timeStamp()); \ END; \ \ CREATE TRIGGER deleted_paths_trigger AFTER DELETE ON paths \ WHEN (checkUpdating() != 0) \ BEGIN \ DELETE FROM updated_paths WHERE id = old.id; \ INSERT INTO removed_paths (path) \ VALUES (old.path); \ END; \ "; static NSString *db_schema_tmp = @"\ CREATE TEMP TABLE removed_id \ (id INTEGER PRIMARY KEY); \ \ \ CREATE TEMP TABLE renamed_paths \ (id INTEGER PRIMARY KEY, \ path TEXT, \ base TEXT, \ oldbase TEXT); \ \ CREATE TEMP TABLE renamed_paths_base \ (base TEXT, \ oldbase TEXT); \ \ CREATE TEMP TRIGGER renamed_paths_trigger AFTER INSERT ON renamed_paths \ BEGIN \ INSERT INTO removed_paths (path) VALUES (new.path); \ UPDATE paths \ SET path = pathMoved(new.oldbase, new.base, new.path) \ WHERE id = new.id; \ END; \ "; /* for ddbd when/if it will be sqlite-based */ static NSString *user_db_schema = @"\ \ CREATE TABLE user_paths \ (id INTEGER PRIMARY KEY AUTOINCREMENT, \ path TEXT UNIQUE ON CONFLICT IGNORE, \ moddate REAL, \ md_moddate REAL, \ is_directory INTEGER); \ \ CREATE INDEX user_paths_directory_index ON user_paths(path, is_directory); \ \ CREATE TABLE user_attributes \ (path_id INTEGER, \ key TEXT, \ attribute BLOB); \ \ CREATE INDEX attributes_path_index ON user_attributes(path_id, key); \ CREATE INDEX attributes_key_index ON user_attributes(key); \ \ CREATE TRIGGER user_attributes_trigger BEFORE INSERT ON user_attributes \ BEGIN \ DELETE FROM user_attributes \ WHERE path_id = new.path_id \ AND key = new.key; \ END; \ "; static NSString *user_db_schema_tmp = @"\ CREATE TEMP TABLE user_paths_removed_id \ (id INTEGER PRIMARY KEY); \ \ \ CREATE TEMP TABLE user_renamed_paths \ (id INTEGER PRIMARY KEY, \ path TEXT, \ base TEXT, \ oldbase TEXT); \ \ CREATE TEMP TABLE user_renamed_paths_base \ (base TEXT, \ oldbase TEXT); \ \ CREATE TEMP TRIGGER user_renamed_paths_trigger AFTER INSERT ON user_renamed_paths \ BEGIN \ UPDATE user_paths \ SET path = pathMoved(new.oldbase, new.base, new.path) \ WHERE id = new.id; \ END; \ \ \ CREATE TEMP TABLE user_copied_paths \ (src_id PRIMARY KEY, \ srcpath TEXT, \ dstpath TEXT, \ srcbase TEXT, \ dstbase TEXT, \ moddate REAL, \ md_moddate REAL, \ is_directory INTEGER); \ \ CREATE TEMP TABLE user_copied_paths_base \ (srcbase TEXT, \ dstbase TEXT); \ \ CREATE TEMP TRIGGER user_copied_paths_trigger_1 AFTER INSERT ON user_copied_paths \ BEGIN \ UPDATE user_copied_paths \ SET \ dstpath = pathMoved(new.srcbase, new.dstbase, new.srcpath), \ moddate = timeStamp(), \ md_moddate = timeStamp() \ WHERE src_id = new.src_id; \ END; \ \ CREATE TEMP TRIGGER user_copied_paths_trigger_2 AFTER UPDATE ON user_copied_paths \ BEGIN \ INSERT INTO user_paths (path, moddate, md_moddate, is_directory) \ VALUES (new.dstpath, new.moddate, new.md_moddate, new.is_directory); \ \ INSERT INTO user_attributes (path_id, key, attribute) \ SELECT \ upaths.id, \ user_attributes.key, \ user_attributes.attribute \ FROM \ (SELECT id FROM user_paths WHERE path = new.dstpath) AS upaths, \ user_attributes \ WHERE \ user_attributes.path_id = new.src_id; \ END; \ "; gworkspace-1.1.0/GWMetadata/gmds/gmds/0000755000175000001440000000000014752464315016774 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/gmds/GNUmakefile0000644000175000001440000000064714634456107021054 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make ADDITIONAL_INCLUDE_DIRS += ADDITIONAL_LIB_DIRS += -lsqlite3 TOOL_NAME = gmds gmds_OBJC_FILES = gmds.m \ sqlite.m gmds_TOOL_LIBS += -lgnustep-gui -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/gmds/GNUmakefile.in0000644000175000001440000000070313214346537021450 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make ADDITIONAL_INCLUDE_DIRS += @SQLITE_INCLUDE_DIRS@ ADDITIONAL_LIB_DIRS += @SQLITE_LIB_DIRS@ TOOL_NAME = gmds gmds_OBJC_FILES = gmds.m \ sqlite.m gmds_TOOL_LIBS += -lgnustep-gui -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/gmds/GNUmakefile.postamble0000644000175000001440000000137713214346537023040 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -rf autom4te*.cache rm -f config.status config.log config.cache TAGS GNUmakefile gmds.make config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/gmds/GNUmakefile.preamble0000644000175000001440000000073114634456107022634 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../MDKit ADDITIONAL_INCLUDE_DIRS += -I../ # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += -lsqlite3 # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/gmds/GNUmakefile.preamble.in0000644000175000001440000000076513231754602023241 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../MDKit ADDITIONAL_INCLUDE_DIRS += -I../ @SQLITE_INCLUDE_DIRS@ # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += @SQLITE_LIB_DIRS@ # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/gmds/gmds.h0000644000175000001440000000423114751213523020067 0ustar multixusers/* gmsd.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef GMDS_H #define GMDS_H #include #include "sqlite.h" @protocol GMDSClientProtocol - (BOOL)queryResults:(NSData *)results; - (oneway void)endOfQueryWithNumber:(NSNumber *)qnum; @end @protocol GMDSProtocol - (oneway void)registerClient:(id)remote; - (oneway void)unregisterClient:(id)remote; - (oneway void)performQuery:(NSDictionary *)queryInfo; @end @interface GMDS: NSObject { NSString *dbdir; NSString *dbpath; sqlite3 *db; NSMutableArray *touchQueries; int touchind; NSConnection *conn; NSString *connectionName; NSMutableDictionary *clientInfo; NSFileManager *fm; NSNotificationCenter *nc; } - (BOOL)connection:(NSConnection *)parentConnection shouldMakeNewConnection:(NSConnection *)newConnnection; - (void)connectionDidDie:(NSNotification *)notification; - (BOOL)performSubquery:(NSString *)query; - (BOOL)performPreQueries:(NSArray *)queries; - (void)performPostQueries:(NSArray *)queries; - (BOOL)sendResults:(NSArray *)lines forQueryWithNumber:(NSNumber *)qnum; - (void)endOfQueryWithNumber:(NSNumber *)qnum; - (BOOL)opendb; - (void)touchTables:(id)sender; - (BOOL)isBaseServer; - (void)terminate; @end #endif // GMDS_H gworkspace-1.1.0/GWMetadata/gmds/gmds/gmds.m0000644000175000001440000005027314751213523020103 0ustar multixusers/* gmsd.m * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "gmds.h" #include "dbschema.h" #include "config.h" #define GWDebugLog(format, args...) \ do { \ if (GW_DEBUG_LOG) { \ NSLog(format , ## args); \ } \ } while (0) #define GWPrintfDebugLog(format, args...) \ do { \ if (GW_DEBUG_LOG) { \ fprintf(stderr, format , ## args); \ fflush(stderr); \ } \ } while (0) #define MAX_RETRY 1000 #define MAX_RES 100 #define TOUCH_INTERVAL (60.0) enum { STRING, ARRAY, NUMBER, DATE_TYPE, DATA }; enum { NUM_INT, NUM_FLOAT, NUM_BOOL }; typedef enum _MDKOperatorType { MDKLessThanOperatorType, MDKLessThanOrEqualToOperatorType, MDKGreaterThanOperatorType, MDKGreaterThanOrEqualToOperatorType, MDKEqualToOperatorType, MDKNotEqualToOperatorType, MDKInRangeOperatorType } MDKOperatorType; static void path_exists(sqlite3_context *context, int argc, sqlite3_value **argv) { const unsigned char *path = sqlite3_value_text(argv[0]); int exists = 0; if (path) { struct stat statbuf; exists = (stat((const char *)path, &statbuf) == 0); } sqlite3_result_int(context, exists); } static void path_moved(sqlite3_context *context, int argc, sqlite3_value **argv) { // old dirname, and its length const unsigned char *oldbase = sqlite3_value_text(argv[0]); int oldblen = strlen((const char *)oldbase); // new dirname, and its length const unsigned char *newbase = sqlite3_value_text(argv[1]); int newblen = strlen((const char *)newbase); // old full path, and its length const unsigned char *oldpath = sqlite3_value_text(argv[2]); int oldplen = strlen((const char *)oldpath); // new full path, and its length char *newpath = NULL; int newplen = newblen + (oldplen - oldblen); int i = newblen; int j; ///// // allocate space for new path + nul terminator newpath = malloc(newplen + 1); // copy the new dirname over, but restrict up to allocated space. // add a null terminator in case the newbase is exactly newplen // in size. strncpy(newpath, (const char *)newbase, newplen); newpath[newplen] = '\0'; // concatenate the new pathname. // equivalent of: strncat(newpath, oldpath+oldblen, newplen), // which may be safer as it will also add a nul terminator at // newpath[newplen]. for (j = oldblen; j < oldplen; j++) { newpath[i] = oldpath[j]; i++; } newpath[i] = '\0'; // return the path. sqlite3_result_text(context, newpath, strlen(newpath), SQLITE_TRANSIENT); free(newpath); } static void time_stamp(sqlite3_context *context, int argc, sqlite3_value **argv) { NSTimeInterval interval = [[NSDate date] timeIntervalSinceReferenceDate]; sqlite3_result_double(context, interval); } static void contains_substr(sqlite3_context *context, int argc, sqlite3_value **argv) { const char *buff = (const char *)sqlite3_value_text(argv[0]); const char *substr = (const char *)sqlite3_value_text(argv[1]); int contains = (strstr(buff, substr) != NULL); sqlite3_result_int(context, contains); } static void append_string(sqlite3_context *context, int argc, sqlite3_value **argv) { const char *buff = (const char *)sqlite3_value_text(argv[0]); const char *str = (const char *)sqlite3_value_text(argv[1]); if (strstr(buff, str) == NULL) { char newbuff[2048] = ""; sprintf(newbuff, "%s %s", buff, str); newbuff[strlen(newbuff)] = '\0'; sqlite3_result_text(context, newbuff, strlen(newbuff), SQLITE_TRANSIENT); return; } sqlite3_result_text(context, buff, strlen(buff), SQLITE_TRANSIENT); } static void word_score(sqlite3_context *context, int argc, sqlite3_value **argv) { int searchlen = strlen((const char *)sqlite3_value_text(argv[0])); int foundlen = strlen((const char *)sqlite3_value_text(argv[1])); int posting_wcount = sqlite3_value_int(argv[2]); int path_wcount = sqlite3_value_int(argv[3]); float score = (1.0 * posting_wcount / path_wcount); if (searchlen != foundlen) { score *= (1.0 * searchlen / foundlen); } sqlite3_result_double(context, score); } static void attribute_score(sqlite3_context *context, int argc, sqlite3_value **argv) { sqlite3_result_double(context, 0.0); } @implementation GMDS - (void)dealloc { NSConnection *connection = [clientInfo objectForKey: @"connection"]; if (connection) { [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; } RELEASE (clientInfo); [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; DESTROY (conn); RELEASE (connectionName); if (db != NULL) { sqlite3_close(db); } RELEASE (dbpath); RELEASE (dbdir); RELEASE (touchQueries); [super dealloc]; } - (id)init { self = [super init]; if (self) { BOOL isdir; fm = [NSFileManager defaultManager]; dbdir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; dbdir = [dbdir stringByAppendingPathComponent: @"gmds"]; if (([fm fileExistsAtPath: dbdir isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbdir attributes: nil] == NO) { NSLog(@"unable to create: %@", dbdir); DESTROY (self); return self; } } dbdir = [dbdir stringByAppendingPathComponent: @".db"]; if (([fm fileExistsAtPath: dbdir isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbdir attributes: nil] == NO) { NSLog(@"unable to create: %@", dbdir); DESTROY (self); return self; } } dbdir = [dbdir stringByAppendingPathComponent: db_version]; if (([fm fileExistsAtPath: dbdir isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbdir attributes: nil] == NO) { NSLog(@"unable to create: %@", dbdir); DESTROY (self); return self; } } RETAIN (dbdir); ASSIGN (dbpath, [dbdir stringByAppendingPathComponent: @"contents.db"]); db = NULL; if ([self opendb] == NO) { DESTROY (self); return self; } conn = [NSConnection defaultConnection]; [conn setRootObject: self]; [conn setDelegate: self]; if ([conn registerName: @"gmds"] == NO) { NSLog(@"unable to register with name server - quitting."); DESTROY (self); return self; } nc = [NSNotificationCenter defaultCenter]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: conn]; clientInfo = [NSMutableDictionary new]; touchQueries = [NSMutableArray new]; touchind = 0; [touchQueries addObject: @"select count(is_directory) from paths;"]; [touchQueries addObject: @"select count(word) from words;"]; [touchQueries addObject: @"select count(word_count) from postings;"]; [touchQueries addObject: @"select count(attribute) from attributes;"]; [NSTimer scheduledTimerWithTimeInterval: TOUCH_INTERVAL target: self selector: @selector(touchTables:) userInfo: nil repeats: YES]; } return self; } - (BOOL)connection:(NSConnection *)parentConnection shouldMakeNewConnection:(NSConnection *)newConnnection { if ([clientInfo objectForKey: @"connection"] == nil) { CREATE_AUTORELEASE_POOL(pool); NSProcessInfo *info = [NSProcessInfo processInfo]; NSMutableArray *args = [[info arguments] mutableCopy]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id connum = [defaults objectForKey: @"gmds_connection_number"]; unsigned long ln; NSTask *task; if (connum == nil) { connum = [NSNumber numberWithUnsignedLong: 0L]; } ln = [connum unsignedLongValue]; ASSIGN (connectionName, ([NSString stringWithFormat: @"gmds_%lu", ln])); if ([conn registerName: connectionName] == NO) { NSLog(@"unable to register with name server - quitting."); exit(EXIT_FAILURE); } GWDebugLog(@"connection name changed to %@", connectionName); ln++; connum = [NSNumber numberWithUnsignedLong: ln]; [defaults setObject: connum forKey: @"gmds_connection_number"]; [defaults synchronize]; task = [NSTask new]; [task setLaunchPath: [[NSBundle mainBundle] executablePath]]; [args removeObjectAtIndex: 0]; if (![args containsObject: @"--daemon"]) { [args addObject: @"--daemon"]; } [task setArguments: args]; RELEASE (args); [task setEnvironment: [info environment]]; [task launch]; RELEASE (task); RELEASE (pool); [clientInfo setObject: newConnnection forKey: @"connection"]; [newConnnection setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: newConnnection]; GWDebugLog(@"new client connection"); return YES; } NSLog(@"client connection already exists!"); return NO; } - (void)connectionDidDie:(NSNotification *)notification { id connection = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; if (connection == conn) { NSLog(@"[gmds connectionDidDie]: Error: gmds server root connection has been destroyed."); exit(EXIT_FAILURE); } [self terminate]; } - (oneway void)registerClient:(id)remote { if ([clientInfo objectForKey: @"client"] == nil) { [(id)remote setProtocolForProxy: @protocol(GMDSClientProtocol)]; [clientInfo setObject: remote forKey: @"client"]; GWDebugLog(@"new client registered"); } } - (oneway void)unregisterClient:(id)remote { id client = [clientInfo objectForKey: @"client"]; if (client && (client == remote)) { [clientInfo removeObjectForKey: @"client"]; GWDebugLog(@"client unregistered"); [self terminate]; } } - (BOOL)performSubquery:(NSString *)query { CREATE_AUTORELEASE_POOL(pool); const char *qbuff = [query UTF8String]; struct sqlite3_stmt *stmt; int err; if ((err = sqlite3_prepare(db, qbuff, strlen(qbuff), &stmt, NULL)) == SQLITE_OK) { int retry = 0; while (1) { err = sqlite3_step(stmt); if (err == SQLITE_DONE) { break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; GWDebugLog(@"retry %i", retry); RELEASE (arp); if (retry++ > MAX_RETRY) { NSLog(@"%s", sqlite3_errmsg(db)); break; } } else { NSLog(@"%s", sqlite3_errmsg(db)); break; } } sqlite3_finalize(stmt); } RELEASE (pool); return (err == SQLITE_DONE); } - (BOOL)performPreQueries:(NSArray *)queries { int i; if ([self performSubquery: @"BEGIN"] == NO) { return NO; } for (i = 0; i < [queries count]; i++) { if ([self performSubquery: [queries objectAtIndex: i]] == NO) { [self performSubquery: @"COMMIT"]; return NO; } } [self performSubquery: @"COMMIT"]; return YES; } - (void)performPostQueries:(NSArray *)queries { int i; if ([self performSubquery: @"BEGIN"] == NO) { return; } for (i = 0; i < [queries count]; i++) { [self performSubquery: [queries objectAtIndex: i]]; } [self performSubquery: @"COMMIT"]; } - (oneway void)performQuery:(NSDictionary *)queryInfo { CREATE_AUTORELEASE_POOL(pool); NSArray *prequeries = [queryInfo objectForKey: @"pre"]; BOOL prepared = YES; NSString *query = [queryInfo objectForKey: @"join"]; NSArray *postqueries = [queryInfo objectForKey: @"post"]; NSNumber *queryNumber = [queryInfo objectForKey: @"qnumber"]; const char *qbuff = [query UTF8String]; NSMutableArray *reslines = [NSMutableArray array]; struct sqlite3_stmt *stmt; int retry = 0; int err; int i; if (prequeries) { prepared = [self performPreQueries: prequeries]; } if (prepared && (sqlite3_prepare(db, qbuff, strlen(qbuff), &stmt, NULL) == SQLITE_OK)) { while (1) { err = sqlite3_step(stmt); if (err == SQLITE_ROW) { NSMutableArray *line = [NSMutableArray array]; int count = sqlite3_data_count(stmt); // we use "<= count" because sqlite sends also // the id of the entry with type = 0 for (i = 0; i <= count; i++) { int type = sqlite3_column_type(stmt, i); if (type == SQLITE_INTEGER) { [line addObject: [NSNumber numberWithInt: sqlite3_column_int(stmt, i)]]; } else if (type == SQLITE_FLOAT) { [line addObject: [NSNumber numberWithDouble: sqlite3_column_double(stmt, i)]]; } else if (type == SQLITE_TEXT) { [line addObject: [NSString stringWithUTF8String: (const char *)sqlite3_column_text(stmt, i)]]; } else if (type == SQLITE_BLOB) { const char *bytes = sqlite3_column_blob(stmt, i); int length = sqlite3_column_bytes(stmt, i); [line addObject: [NSData dataWithBytes: bytes length: length]]; } } [reslines addObject: line]; if ([reslines count] == MAX_RES) { GWDebugLog(@"SENDING"); if ([self sendResults: reslines forQueryWithNumber: queryNumber]) { GWDebugLog(@"SENT"); [reslines removeAllObjects]; } else { GWDebugLog(@"INVALID!"); break; } } } else { if (err == SQLITE_DONE) { GWDebugLog(@"SENDING (last)"); if ([self sendResults: reslines forQueryWithNumber: queryNumber]) { GWDebugLog(@"SENT"); } else { GWDebugLog(@"INVALID!"); } break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; GWDebugLog(@"retry %i", retry); RELEASE (arp); if (retry++ > MAX_RETRY) { NSLog(@"%s", sqlite3_errmsg(db)); break; } } else { NSLog(@"%i %s", err, sqlite3_errmsg(db)); break; } } } sqlite3_finalize(stmt); } else { NSLog(@"%s", sqlite3_errmsg(db)); } if (postqueries) { [self performPostQueries: postqueries]; } [self endOfQueryWithNumber: queryNumber]; RELEASE (pool); } - (BOOL)sendResults:(NSArray *)lines forQueryWithNumber:(NSNumber *)qnum { CREATE_AUTORELEASE_POOL(arp); id client = [clientInfo objectForKey: @"client"]; NSDictionary *results; BOOL accepted; results = [NSDictionary dictionaryWithObjectsAndKeys: qnum, @"qnumber", lines, @"lines", nil]; accepted = [client queryResults: [NSArchiver archivedDataWithRootObject: results]]; RELEASE (arp); return accepted; } - (void)endOfQueryWithNumber:(NSNumber *)qnum { [[clientInfo objectForKey: @"client"] endOfQueryWithNumber: qnum]; } - (BOOL)opendb { if (db == NULL) { BOOL newdb = ([fm fileExistsAtPath: dbpath] == NO); char *err; db = opendbAtPath(dbpath); if (db != NULL) { if (newdb) { if (sqlite3_exec(db, [db_schema UTF8String], NULL, 0, &err) != SQLITE_OK) { NSLog(@"unable to create the database at %@", dbpath); sqlite3_free(err); return NO; } else { GWDebugLog(@"contents database created"); } } } else { NSLog(@"unable to open the database at %@", dbpath); return NO; } sqlite3_create_function(db, "pathExists", 1, SQLITE_UTF8, 0, path_exists, 0, 0); sqlite3_create_function(db, "pathMoved", 3, SQLITE_UTF8, 0, path_moved, 0, 0); sqlite3_create_function(db, "timeStamp", 0, SQLITE_UTF8, 0, time_stamp, 0, 0); sqlite3_create_function(db, "containsSubstr", 2, SQLITE_UTF8, 0, contains_substr, 0, 0); sqlite3_create_function(db, "appendString", 2, SQLITE_UTF8, 0, append_string, 0, 0); sqlite3_create_function(db, "wordScore", 4, SQLITE_UTF8, 0, word_score, 0, 0); sqlite3_create_function(db, "attributeScore", 5, SQLITE_UTF8, 0, attribute_score, 0, 0); performWriteQuery(db, @"PRAGMA cache_size = 20000"); performWriteQuery(db, @"PRAGMA count_changes = 0"); performWriteQuery(db, @"PRAGMA synchronous = OFF"); performWriteQuery(db, @"PRAGMA temp_store = MEMORY"); } /* only to avoid a compiler warning */ if (0) { NSLog(@"%@", db_schema_tmp); NSLog(@"%@", user_db_schema); NSLog(@"%@", user_db_schema_tmp); } return YES; } - (void)touchTables:(id)sender { if ([self isBaseServer]) { CREATE_AUTORELEASE_POOL(pool); const char *query = [[touchQueries objectAtIndex: touchind] UTF8String]; NSDate *date = [NSDate date]; char *err; GWPrintfDebugLog("executing: \"%s\" ... ", query); if (sqlite3_exec(db, query, NULL, 0, &err) != SQLITE_OK) { NSLog(@"error at %s", query); if (err != NULL) { NSLog(@"%s", err); sqlite3_free(err); } } else { GWPrintfDebugLog("done. (%.2f sec.)\n", [[NSDate date] timeIntervalSinceDate: date]); } touchind++; if (touchind == [touchQueries count]) { touchind = 0; } RELEASE (pool); } } - (BOOL)isBaseServer { return ([clientInfo objectForKey: @"client"] == nil); } - (void)terminate { NSConnection *connection = [clientInfo objectForKey: @"connection"]; if (connection) { [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; } RELEASE (clientInfo); if (db != NULL) { sqlite3_close(db); } NSLog(@"exiting"); exit(EXIT_SUCCESS); } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL(pool); NSProcessInfo *info = [NSProcessInfo processInfo]; NSMutableArray *args = AUTORELEASE ([[info arguments] mutableCopy]); BOOL subtask = YES; if ([args containsObject: @"--daemon"]) subtask = NO; if (subtask) { NSTask *task = [NSTask new]; NS_DURING { [args removeObjectAtIndex: 0]; [args addObject: @"--daemon"]; [task setLaunchPath: [[NSBundle mainBundle] executablePath]]; [task setArguments: args]; [task setEnvironment: [info environment]]; [task launch]; DESTROY (task); } NS_HANDLER { fprintf (stderr, "unable to launch the gmds task. exiting.\n"); DESTROY (task); } NS_ENDHANDLER exit(EXIT_FAILURE); } RELEASE(pool); { CREATE_AUTORELEASE_POOL (pool); GMDS *gmds = [[GMDS alloc] init]; RELEASE (pool); if (gmds != nil) { CREATE_AUTORELEASE_POOL (pool); [[NSRunLoop currentRunLoop] run]; RELEASE (pool); } } exit(EXIT_SUCCESS); } gworkspace-1.1.0/GWMetadata/gmds/gmds/sqlite.h0000644000175000001440000000335413214346537020450 0ustar multixusers/* sqlite.h * * Copyright (C) 2006-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef SQLITE_H #define SQLITE_H #import #define id sqlite_id #include #undef id sqlite3 *opendbAtPath(NSString *path); void closedb(sqlite3 *db); BOOL createTables(sqlite3 *db, NSString *schema); NSArray *performQuery(sqlite3 *db, NSString *query); BOOL performWriteQuery(sqlite3 *db, NSString *query); char **resultsForQuery(sqlite3 *db, NSString *query, int *rows, int *cols); NSString *getStringEntry(sqlite3 *db, NSString *query); int getIntEntry(sqlite3 *db, NSString *query); float getFloatEntry(sqlite3 *db, NSString *query); NSData *getBlobEntry(sqlite3 *db, NSString *query); NSString *blobFromData(NSData *data); void decodeBlobUnit(unsigned char *unit, const char *src); NSData *dataFromBlob(const char *blob); NSString *stringForQuery(NSString *str); #endif // SQLITE_H gworkspace-1.1.0/GWMetadata/gmds/gmds/sqlite.m0000644000175000001440000002535013214346537020455 0ustar multixusers/* sqlite.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include "sqlite.h" #define MAX_RETRY 1000 static char basetable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; sqlite3 *opendbAtPath(NSString *path) { NSFileManager *fm = [NSFileManager defaultManager]; NSArray *components = [path pathComponents]; unsigned count = [components count]; NSString *dbname = [components objectAtIndex: count - 1]; NSString *dbpath = [NSString string]; sqlite3 *db = NULL; int dberr; unsigned i; for (i = 0; i < (count - 1); i++) { NSString *dir = [components objectAtIndex: i]; BOOL isdir; dbpath = [dbpath stringByAppendingPathComponent: dir]; if (([fm fileExistsAtPath: dbpath isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbpath attributes: nil] == NO) { NSLog(@"unable to create: %@", dbpath); return NULL; } } } dbpath = [dbpath stringByAppendingPathComponent: dbname]; dberr = sqlite3_open([dbpath fileSystemRepresentation], &db); if (dberr != SQLITE_OK) { NSLog(@"%s", sqlite3_errmsg(db)); return NULL; } return db; } void closedb(sqlite3 *db) { sqlite3_close(db); } BOOL createTables(sqlite3 *db, NSString *schema) { if (performQuery(db, schema) == nil) { return NO; } return YES; } NSArray *performQuery(sqlite3 *db, NSString *query) { CREATE_AUTORELEASE_POOL(pool); NSMutableArray *queryResult = [NSMutableArray array]; char **results; int cols; int rows; results = resultsForQuery(db, query, &rows, &cols); if (rows && cols) { NSMutableArray *titles = [NSMutableArray array]; int index, count; char *entry; int i, j; index = 0; for (i = 0; i < cols; i++) { entry = *(results + index); [titles addObject: [NSString stringWithUTF8String: entry]]; index++; } count = [titles count]; for (i = 0; i < (cols * rows); i += count) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; for (j = 0; j < count; j++) { NSString *title = [titles objectAtIndex: j]; entry = *(results + index); if (entry != NULL) { NSData *data = [NSData dataWithBytes: entry length: strlen(entry) + 1]; [dict setObject: data forKey: title]; } index++; } [queryResult addObject: dict]; } } if (results != NULL) { sqlite3_free_table(results); } RETAIN (queryResult); RELEASE (pool); return AUTORELEASE (queryResult); } BOOL performWriteQuery(sqlite3 *db, NSString *query) { const char *qbuff = [query UTF8String]; struct sqlite3_stmt *stmt; int retry = 0; int err; err = sqlite3_prepare(db, qbuff, strlen(qbuff), &stmt, NULL); if (err != SQLITE_OK) { NSLog(@"%s", sqlite3_errmsg(db)); return NO; } while (1) { err = sqlite3_step(stmt); if (err == SQLITE_DONE) { break; } else if (err == SQLITE_BUSY) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; [NSThread sleepUntilDate: when]; NSLog(@"retry %i", retry); RELEASE (arp); if (retry++ > MAX_RETRY) { NSLog(@"%s", sqlite3_errmsg(db)); sqlite3_finalize(stmt); return NO; } } else { NSLog(@"%s", sqlite3_errmsg(db)); sqlite3_finalize(stmt); return NO; } } sqlite3_finalize(stmt); return YES; } char **resultsForQuery(sqlite3 *db, NSString *query, int *rows, int *cols) { int retry = 0; char **results; int err; *rows = 0; *cols = 0; while (1) { err = sqlite3_get_table(db, [query UTF8String], &results, rows, cols, NULL); if (err == SQLITE_OK) { break; } else if ((err == SQLITE_BUSY) || (err == SQLITE_LOCKED)) { CREATE_AUTORELEASE_POOL(arp); NSDate *when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; sqlite3_free_table(results); results = NULL; [NSThread sleepUntilDate: when]; NSLog(@"retry %i", retry); RELEASE (arp); if (retry++ > MAX_RETRY) { NSLog(@"error %i", err); return NULL; } } else { sqlite3_free_table(results); NSLog(@"error %i", err); return NULL; } } return results; } NSString *getStringEntry(sqlite3 *db, NSString *query) { char **results; int cols; int rows; results = resultsForQuery(db, query, &rows, &cols); if (rows && cols) { char *entry = *(results + 1); NSString *str = [NSString stringWithUTF8String: entry]; sqlite3_free_table(results); return str; } if (results != NULL) { sqlite3_free_table(results); } return nil; } int getIntEntry(sqlite3 *db, NSString *query) { char **results; int cols; int rows; results = resultsForQuery(db, query, &rows, &cols); if (rows && cols) { char *entry = *(results + 1); int n = atoi(entry); sqlite3_free_table(results); return n; } if (results != NULL) { sqlite3_free_table(results); } return -1; } float getFloatEntry(sqlite3 *db, NSString *query) { char **results; int cols; int rows; results = resultsForQuery(db, query, &rows, &cols); if (rows && cols) { char *entry = *(results + 1); float f = atof(entry); sqlite3_free_table(results); return f; } if (results != NULL) { sqlite3_free_table(results); } return -1.0; } NSData *getBlobEntry(sqlite3 *db, NSString *query) { char **results; int cols; int rows; results = resultsForQuery(db, query, &rows, &cols); if (rows && cols) { char *entry = *(results + 1); NSData *data = dataFromBlob(entry); sqlite3_free_table(results); return data; } if (results != NULL) { sqlite3_free_table(results); } return nil; } NSString *blobFromData(NSData *data) { int length = [data length]; char *bytes = NSZoneMalloc (NSDefaultMallocZone(), length); unsigned char inBuff[3] = ""; unsigned char outBuff[4] = ""; char *blobBuff = NSZoneMalloc (NSDefaultMallocZone(), length * 4/3 + 4); char *blobPtr = blobBuff; NSString *blobStr; int segments; int i; [data getBytes: bytes]; while (length > 0) { segments = 0; for (i = 0; i < 3; i++) { if (length > 0) { segments++; inBuff[i] = *bytes; bytes++; length--; } else { inBuff[i] = 0; } } outBuff[0] = (inBuff[0] & 0xFC) >> 2; outBuff[1] = ((inBuff[0] & 0x03) << 4) | ((inBuff[1] & 0xF0) >> 4); outBuff[2] = ((inBuff[1] & 0x0F) << 2) | ((inBuff[2] & 0xC0) >> 6); outBuff[3] = inBuff[2] & 0x3F; switch(segments) { case 1: sprintf(blobPtr, "%c%c==", basetable[outBuff[0]], basetable[outBuff[1]]); break; case 2: sprintf(blobPtr, "%c%c%c=", basetable[outBuff[0]], basetable[outBuff[1]], basetable[outBuff[2]]); break; default: sprintf(blobPtr, "%c%c%c%c", basetable[outBuff[0]], basetable[outBuff[1]], basetable[outBuff[2]], basetable[outBuff[3]]); break; } blobPtr += 4; } *blobPtr = 0; blobStr = [NSString stringWithCString: blobBuff]; NSZoneFree (NSDefaultMallocZone(), blobBuff); return blobStr; } void decodeBlobUnit(unsigned char *unit, const char *src) { unsigned int x = 0; int i; for (i = 0; i < 4; i++) { if (src[i] >= 'A' && src[i] <= 'Z') { x = (x << 6) + (unsigned int)(src[i] - 'A' + 0); } else if (src[i] >= 'a' && src[i] <= 'z') { x = (x << 6) + (unsigned int)(src[i] - 'a' + 26); } else if (src[i] >= '0' && src[i] <= '9') { x = (x << 6) + (unsigned int)(src[i] - '0' + 52); } else if (src[i] == '+') { x = (x << 6) + 62; } else if (src[i] == '/') { x = (x << 6) + 63; } else if (src[i] == '=') { x = (x << 6); } } unit[2] = (unsigned char)(x & 255); x >>= 8; unit[1] = (unsigned char)(x & 255); x >>= 8; unit[0] = (unsigned char)(x & 255); } NSData *dataFromBlob(const char *blob) { int blength = 0; unsigned char *bytes = NSZoneMalloc (NSDefaultMallocZone(), strlen(blob) * 3/4 + 8); unsigned char *bytesPtr = bytes; unsigned long bytesLength = 0; unsigned char blobUnit[3] = ""; int nunits = 0; int pos = 0; NSData *blobData; int i; while ((blob[blength] != '=') && blob[blength]) { blength++; } while (blob[blength + pos] == '=') { pos++; } nunits = (blength + pos) / 4; bytesLength = (nunits * 3) - pos; for (i = 0; i < nunits - 1; i++) { decodeBlobUnit(bytes, blob); bytes += 3; blob += 4; } decodeBlobUnit(blobUnit, blob); for (i = 0; i < 3 - pos; i++) { bytes[i] = blobUnit[i]; } blobData = [NSData dataWithBytes: bytesPtr length: bytesLength]; NSZoneFree (NSDefaultMallocZone(), bytesPtr); return blobData; } NSString *stringForQuery(NSString *str) { NSRange range, subRange; NSMutableString *querystr; range = NSMakeRange(0, [str length]); subRange = [str rangeOfString: @"'" options: NSLiteralSearch range: range]; if (subRange.location == NSNotFound) { return str; } querystr = [NSMutableString stringWithString: str]; while ((subRange.location != NSNotFound) && (range.length > 0)) { subRange = [querystr rangeOfString: @"'" options: NSLiteralSearch range: range]; if (subRange.location != NSNotFound) { [querystr replaceCharactersInRange: subRange withString: @"''"]; } range.location = subRange.location + 2; if ([querystr length] < range.location) { range.length = 0; } else { range.length = [querystr length] - range.location; } } return querystr; } gworkspace-1.1.0/GWMetadata/gmds/mdextractor/0000755000175000001440000000000014752464315020376 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/0000755000175000001440000000000014753476020022531 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/0000755000175000001440000000000014752464315026017 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/AbiwordExtractor.h0000644000175000001440000000365513214346537031461 0ustar multixusers/* AbiwordExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ABIWORD_EXTRACTOR_H #define ABIWORD_EXTRACTOR_H #include #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface AbiwordExtractor: NSObject { NSArray *extensions; GSXMLDocument *stylesheet; NSMutableCharacterSet *skipSet; id extractor; NSFileManager *fm; } - (NSDictionary *)getDocumentAttributes:(GSXMLDocument *)document; @end #endif // ABIWORD_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/AbiwordExtractor.m0000644000175000001440000001652213214346537031463 0ustar multixusers/* AbiwordExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "AbiwordExtractor.h" #define MAXFSIZE 600000 #define WORD_MAX 40 static char *style = " " " " ""; @implementation AbiwordExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); RELEASE (stylesheet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { NSData *data = [NSData dataWithBytes: style length: strlen(style)]; GSXMLParser *parser = [GSXMLParser parserWithData: data]; [parser parse]; ASSIGN (stylesheet, [parser document]); fm = [NSFileManager defaultManager]; ASSIGN (extensions, ([NSArray arrayWithObjects: @"abw", nil])); skipSet = [NSMutableCharacterSet new]; [skipSet formUnionWithCharacterSet: [NSCharacterSet controlCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet illegalCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet punctuationCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet symbolCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet decimalDigitCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]]; extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { return ([extensions containsObject: ext]); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; GSXMLParser *parser = [GSXMLParser parserWithContentsOfFile: path]; GSXMLDocument *doc = nil; NSString *contents = nil; NSDictionary *attrsdict = nil; BOOL success = NO; if (parser && [parser parse]) { doc = [parser document]; attrsdict = [self getDocumentAttributes: doc]; if (attrsdict && [attrsdict count]) { [mddict setObject: attrsdict forKey: @"attributes"]; } doc = [doc xsltTransform: stylesheet]; contents = [doc description]; if (contents && [contents length]) { NSScanner *scanner = [NSScanner scannerWithString: contents]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[NSCountedSet alloc] initWithCapacity: 1]; unsigned long wcount = 0; NSString *word; if ([scanner scanString: @"" intoString: NULL]) { [scanner scanString: @"?>" intoString: NULL]; } } [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; RELEASE (wordset); [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } - (NSDictionary *)getDocumentAttributes:(GSXMLDocument *)document { GSXMLNode *node = [document root]; NSMutableDictionary *attributes = [NSMutableDictionary dictionary]; while (node != nil) { NSString *name = [node name]; if (name && [name isEqual: @"metadata"]) { node = [node firstChildElement]; while (node != nil) { NSString *attrname = [[node attributes] objectForKey: @"key"]; NSString *ndcont = [node content]; if ([attrname isEqual: @"abiword.generator"]) { [attributes setObject: [[NSArray arrayWithObject: ndcont] description] forKey: @"GSMDItemEncodingApplications"]; } else if ([attrname isEqual: @"dc.description"]) { [attributes setObject: ndcont forKey: @"GSMDItemDescription"]; } else if ([attrname isEqual: @"abiword.keywords"]) { NSArray *words = [ndcont componentsSeparatedByString: @" "]; [attributes setObject: [words description] forKey: @"GSMDItemKeywords"]; } else if ([attrname isEqual: @"dc.contributor"]) { NSArray *contrs = [ndcont componentsSeparatedByString: @" "]; [attributes setObject: [contrs description] forKey: @"GSMDItemContributors"]; } else if ([attrname isEqual: @"dc.subject"]) { } else if ([attrname isEqual: @"dc.creator"]) { [attributes setObject: ndcont forKey: @"GSMDItemCreator"]; } else if ([attrname isEqual: @"dc.type"]) { } else if ([attrname isEqual: @"dc.language"]) { NSArray *langs = [ndcont componentsSeparatedByString: @" "]; [attributes setObject: [langs description] forKey: @"GSMDItemLanguages"]; } else if ([attrname isEqual: @"dc.format"]) { // [attributes setObject: ndcont forKey: @"GSMDItemContentType"]; } else if ([attrname isEqual: @"dc.title"]) { [attributes setObject: ndcont forKey: @"GSMDItemTitle"]; } else if ([attrname isEqual: @"dc.publisher"]) { [attributes setObject: [[NSArray arrayWithObject: ndcont] description] forKey: @"GSMDItemPublishers"]; } node = [node nextElement]; } break; } node = [node firstChildElement]; } return attributes; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/GNUmakefile0000644000175000001440000000072513231754602030065 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = AbiwordExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # AbiwordExtractor_OBJC_FILES = AbiwordExtractor.m AbiwordExtractor_PRINCIPAL_CLASS = AbiwordExtractor AbiwordExtractor_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/GNUmakefile.postamble0000644000175000001440000000130413231754602032044 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AbiwordExtractor/GNUmakefile.preamble0000644000175000001440000000072713231754602031655 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ ADDITIONAL_INCLUDE_DIRS += -I../../../../MDKit/ # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AppExtractor/0000755000175000001440000000000014752464315025150 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AppExtractor/AppExtractor.h0000644000175000001440000000333613214346537027737 0ustar multixusers/* AppExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef APP_EXTRACTOR_H #define APP_EXTRACTOR_H #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface AppExtractor: NSObject { NSArray *extensions; id extractor; } @end #endif // APP_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AppExtractor/AppExtractor.m0000644000175000001440000001205413214346537027741 0ustar multixusers/* AppExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "AppExtractor.h" #define MAXFSIZE 600000 #define WORD_MAX 40 @implementation AppExtractor - (void)dealloc { RELEASE (extensions); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { ASSIGN (extensions, ([NSArray arrayWithObjects: @"app", nil])); extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if ([attributes fileType] == NSFileTypeDirectory) { return (type == NSApplicationFileType); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; NSMutableDictionary *attrsdict = [NSMutableDictionary dictionary]; NSBundle *bundle = [NSBundle bundleWithPath: path]; NSDictionary *info = [bundle infoDictionary]; BOOL success = NO; if (info) { id entry = [info objectForKey: @"NSTypes"]; if (entry && [entry isKindOfClass: [NSArray class]]) { NSMutableArray *unixexts = [NSMutableArray array]; unsigned i; for (i = 0; i < [entry count]; i++) { id dict = [entry objectAtIndex: i]; id exts; if ([dict isKindOfClass: [NSDictionary class]] == NO) { continue; } exts = [dict objectForKey: @"NSUnixExtensions"]; if ([exts isKindOfClass: [NSArray class]]) { [unixexts addObjectsFromArray: exts]; } } if ([unixexts count]) { [attrsdict setObject: unixexts forKey: @"GSMDItemUnixExtensions"]; } } entry = [info objectForKey: @"Authors"]; if (entry && [entry isKindOfClass: [NSArray class]]) { [attrsdict setObject: entry forKey: @"GSMDItemAuthors"]; } entry = [info objectForKey: @"Copyright"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemCopyright"]; } entry = [info objectForKey: @"CopyrightDescription"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemCopyrightDescription"]; } entry = [info objectForKey: @"NSRole"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemRole"]; } entry = [info objectForKey: @"NSBuildVersion"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemBuildVersion"]; } entry = [info objectForKey: @"ApplicationName"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemApplicationName"]; } entry = [info objectForKey: @"ApplicationDescription"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemApplicationDescription"]; } entry = [info objectForKey: @"ApplicationRelease"]; if (entry && [entry isKindOfClass: [NSString class]]) { [attrsdict setObject: entry forKey: @"GSMDItemApplicationRelease"]; } [mddict setObject: attrsdict forKey: @"attributes"]; { /* mdextractor needs this empty "words" dictionary to let a trigger to fire when updating a path. (see dbschema.h) */ NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[[NSCountedSet alloc] initWithCapacity: 1] autorelease]; [wordsDict setObject: wordset forKey: @"wset"]; [wordsDict setObject: [NSNumber numberWithUnsignedLong: 0L] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AppExtractor/GNUmakefile0000644000175000001440000000067613231754602027223 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = AppExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # AppExtractor_OBJC_FILES = AppExtractor.m AppExtractor_PRINCIPAL_CLASS = AppExtractor AppExtractor_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AppExtractor/GNUmakefile.postamble0000644000175000001440000000137013214346537031205 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache TAGS GNUmakefile config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/AppExtractor/GNUmakefile.preamble0000644000175000001440000000064713214346537031014 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/GNUmakefile0000644000175000001440000000113314634456107024603 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make PDFKIT=yes ifneq ($(PDFKIT),no) SUBPROJECTS = \ TextExtractor \ HtmlExtractor \ RtfExtractor \ PdfExtractor \ OpenOfficeExtractor \ AbiwordExtractor \ XmlExtractor \ JpegExtractor \ AppExtractor else SUBPROJECTS = \ TextExtractor \ HtmlExtractor \ RtfExtractor \ OpenOfficeExtractor \ AbiwordExtractor \ XmlExtractor \ JpegExtractor \ AppExtractor endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/GNUmakefile.in0000644000175000001440000000114513214346537025211 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make PDFKIT=@have_pdfkit@ ifneq ($(PDFKIT),no) SUBPROJECTS = \ TextExtractor \ HtmlExtractor \ RtfExtractor \ PdfExtractor \ OpenOfficeExtractor \ AbiwordExtractor \ XmlExtractor \ JpegExtractor \ AppExtractor else SUBPROJECTS = \ TextExtractor \ HtmlExtractor \ RtfExtractor \ OpenOfficeExtractor \ AbiwordExtractor \ XmlExtractor \ JpegExtractor \ AppExtractor endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/GNUmakefile.postamble0000644000175000001440000000126613214346537026575 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -f GNUmakefile extractors.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/GNUmakefile.preamble0000644000175000001440000000111013214346537026362 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ -I../../../SQLite -I../../../DBKit ADDITIONAL_LIB_DIRS += -L../../../SQLite/$(GNUSTEP_OBJ_DIR) ADDITIONAL_LIB_DIRS += -L../../../DBKit/$(GNUSTEP_OBJ_DIR) # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/0000755000175000001440000000000014752464315025334 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/GNUmakefile0000644000175000001440000000066413231754602027404 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = HtmlExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # HtmlExtractor_OBJC_FILES = HtmlExtractor.m HtmlExtractor_PRINCIPAL_CLASS = HtmlExtractor HtmlExtractor_TOOL_LIBS += -lgnustep-gui include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/GNUmakefile.postamble0000644000175000001440000000130413231754602031361 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/GNUmakefile.preamble0000644000175000001440000000064413214346537031175 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search # ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/HtmlExtractor.h0000644000175000001440000000340013214346537030277 0ustar multixusers/* HtmlExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: May 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef HTML_EXTRACTOR_H #define HTML_EXTRACTOR_H #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface HtmlExtractor: NSObject { id extractor; NSArray *extensions; NSMutableCharacterSet *skipSet; } @end #endif // HTML_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/HtmlExtractor/HtmlExtractor.m0000644000175000001440000002605114636242116030310 0ustar multixusers/* HtmlExtractor.m * * Copyright (C) 2006-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: May 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "HtmlExtractor.h" #define MAXFSIZE 600000 #define DLENGTH 256 #define WORD_MAX 40 void strip(const char *inbuf, NSMutableString *outstr, NSMutableDictionary *metadict); int escapeChar(char *buf, NSMutableString *str); @implementation HtmlExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { NSCharacterSet *set; skipSet = [NSMutableCharacterSet new]; set = [NSCharacterSet controlCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet illegalCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet punctuationCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet symbolCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet decimalDigitCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]; [skipSet formUnionWithCharacterSet: set]; ASSIGN (extensions, ([NSArray arrayWithObjects: @"html", @"htm", nil])); extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { const char *bytes = (const char *)[testdata bytes]; int i; for (i = 0; i < [testdata length]; i++) { if (bytes[i] == 0x00) { return NO; break; } } return ([extensions containsObject: ext]); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; NSString *contents = [NSString stringWithContentsOfFile: path]; BOOL success = NO; if (contents && [contents length]) { const char *inbuf = [contents UTF8String]; NSMutableString *stripped = [NSMutableString stringWithCapacity: [contents length]]; NSMutableDictionary *attrsdict = [NSMutableDictionary dictionary]; strip(inbuf, stripped, attrsdict); if (stripped && [stripped length]) { NSScanner *scanner = [NSScanner scannerWithString: stripped]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[NSCountedSet alloc] initWithCapacity: 1]; unsigned long wcount = 0; NSString *word; [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; [mddict setObject: attrsdict forKey: @"attributes"]; RELEASE (wordset); } } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } @end void strip(const char *inbuf, NSMutableString *outstr, NSMutableDictionary *metadict) { size_t len = strlen(inbuf); BOOL isScript = NO; BOOL isMarkup = NO; BOOL isMeta = NO; BOOL isTitle = NO; BOOL spaceAdded = NO; size_t offset; size_t i; #define CHK_POS(x, l) \ do { \ if (x >= (l - 1)) return; \ } while (0) for (i = 0; i < len; i++) { /* end of buffer are possible points of failure if a markup or a token is cut, it will not be parsed. */ if ((i > len - 9) && ((strncmp(inbuf + i, "\x3c", 1) == 0) || (strncmp(inbuf + i, "\x26", 1) == 0))) { break; } /* detecting end of script */ if (isScript && ((strncmp(inbuf + i, "", 9) == 0))) { isScript = NO; i += 9; } /* detecting new paragraph */ if ((isScript == NO) && (strncmp(inbuf + i, "", 1) != 0) { i++; CHK_POS (i, len); } } /* detecting beginning of markup */ if ((isScript == NO) && (isMarkup == NO) && (strncmp(inbuf + i, "\x3c", 1) == 0)) { /* detecting begining of script */ if ((strncmp(inbuf + i, "", 7) == 0) || (strncmp(inbuf + i, "", 7) == 0)) { isMeta = YES; isTitle = YES; i += 7; } else if ((strncmp(inbuf + i, "<meta", 5) == 0) || (strncmp(inbuf + i, "<META", 5) == 0)) { isMeta = YES; i += 5; } else { isMarkup = YES; } } CHK_POS (i, len); /* get metadata value */ if ((isScript == NO) && isMeta) { NSMutableString *mdbuff = [NSMutableString stringWithCapacity: 128]; char endstr[16]; // NSString *key; // NSString *value; while (strncmp(inbuf + i, "\x20", 1) == 0) { i++; CHK_POS (i, len); } if (isTitle) { strcpy(endstr, ""); } else { strcpy(endstr, "/>"); } while (strncmp(inbuf + i, endstr, strlen(endstr)) != 0) { if (strncmp(inbuf + i, "\x26", 1) == 0) { offset = escapeChar((char *)(inbuf + i), mdbuff); i += offset; } else { [mdbuff appendFormat: @"%c", inbuf[i]]; i++; } CHK_POS (i, len); } if (isTitle) { [metadict setObject: [mdbuff makeImmutableCopyOnFail: NO] forKey: @"GSMDItemTitle"]; i += 8; } else { /* TODO - extract metadata from */ i += 2; } isTitle = NO; isMeta = NO; CHK_POS (i, len); continue; } /* detecting end of markup */ if ((isScript == NO) && isMarkup && (strncmp(inbuf + i, "\x3e", 1) == 0)) { if (spaceAdded == NO) { [outstr appendFormat: @"%C", 0x20]; spaceAdded = YES; } isMarkup = NO; } CHK_POS (i, len); /* handling text */ if ((isScript == NO) && (isMarkup == NO) && (strncmp(inbuf + i, "\x3e", 1) != 0)) { if ((strncmp(inbuf + i, "\n", 1) != 0) && (strncmp(inbuf + i, "\t", 1) != 0)) { if (strncmp(inbuf + i, "\x26", 1) == 0) { offset = escapeChar((char *)(inbuf + i), outstr); i += (offset - 1); CHK_POS (i, len); spaceAdded = NO; } else { [outstr appendFormat: @"%c", inbuf[i]]; } spaceAdded = NO; } else { /* replace tabs and eol by spaces */ [outstr appendFormat: @"%C", 0x20]; } } } } int escapeChar(char *buf, NSMutableString *str) { char token[9]; unichar c = 0x26; int len = 0; int i = 0; /* copying token into local buffer */ while (i <= 8 && (strncmp(buf + i, ";", 1) != 0)) { strncpy(token + i, buf + i, 1); i++; } if (strncmp(buf + i, ";\0", 2) == 0) { strncpy(token + i, buf + i, 1); } else { /* if it does not seem to be a token, result is '&' */ [str appendFormat: @"%C", c]; return 1; } /* identifying token */ if (strncmp(token, "&", 5) == 0) { c = 0x26; len = 5; } else if (strncmp(token, "<", 4) == 0) { c = 0x3C; len = 4; } else if (strncmp(token, ">", 4) == 0) { c = 0x3E; len = 4; } else if (strncmp(token, """, 6) == 0) { c = 0x22; len = 6; } else if (strncmp(token, "é", 8) == 0) { c = 0xE9; len = 8; } else if (strncmp(token, "É", 8) == 0) { c = 0xC9; len = 8; } else if (strncmp(token, "è", 8) == 0) { c = 0xE8; len = 8; } else if (strncmp(token, "È", 8) == 0) { c = 0xC8; len = 8; } else if (strncmp(token, "ê", 7) == 0) { c = 0xEA; len = 7; } else if (strncmp(token, "à", 8) == 0) { c = 0xE0; len = 8; } else if (strncmp(token, "ï", 6) == 0) { c = 0xEF; len = 6; } else if (strncmp(token, "ç", 8) == 0) { c = 0xE7; len = 8; } else if (strncmp(token, "ñ", 8) == 0) { c = 0xF1; len = 8; } else if (strncmp(token, "©", 6) == 0) { c = 0xA9; len = 6; } else if (strncmp(token, "®", 5) == 0) { c = 0xAE; len = 5; } else if (strncmp(token, "°", 5) == 0) { c = 0xB0; len = 5; } else if (strncmp(token, "º", 6) == 0) { c = 0xBA; len = 6; } else if (strncmp(token, "«", 7) == 0) { c = 0xAB; len = 7; } else if (strncmp(token, "»", 7) == 0) { c = 0xBB; len = 7; } else if (strncmp(token, "µ", 7) == 0) { c = 0xB5; len = 7; } else if (strncmp(token, "¶", 6) == 0) { c = 0xB6; len = 6; } else if (strncmp(token, "¼", 8) == 0) { c = 0xBC; len = 8; } else if (strncmp(token, "½", 8) == 0) { c = 0xBD; len = 8; } else if (strncmp(token, "¾", 8) == 0) { c = 0xBE; len = 8; } else if (strncmp(token, "&#", 2) == 0) { [str appendFormat: @"%i", atoi(token + 2)]; return 6; } else { c = 0x20; len = i+1; } if (len != 0) { [str appendFormat: @"%C", c]; } return len; } gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/0000755000175000001440000000000014752464315025315 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/GNUmakefile0000644000175000001440000000072513214346537027370 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = JpegExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # JpegExtractor_OBJC_FILES = JpegExtractor.m \ jhead.m \ jpgfile.m \ exif.m JpegExtractor_PRINCIPAL_CLASS = JpegExtractor JpegExtractor_TOOL_LIBS += -lgnustep-gui include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/GNUmakefile.postamble0000644000175000001440000000137013214346537031352 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache TAGS GNUmakefile config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/GNUmakefile.preamble0000644000175000001440000000064413214346537031156 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search # ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/JpegExtractor.h0000644000175000001440000000334313214346537030247 0ustar multixusers/* JpegExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef JPEG_EXTRACTOR_H #define JPEG_EXTRACTOR_H #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface JpegExtractor: NSObject { id extractor; NSArray *extensions; } @end #endif // JPEG_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/JpegExtractor.m0000644000175000001440000000547013214346537030257 0ustar multixusers/* JpegExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "JpegExtractor.h" #include "jhead.h" @implementation JpegExtractor - (void)dealloc { RELEASE (extensions); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { ASSIGN (extensions, ([NSArray arrayWithObjects: @"jpeg", @"jpg", nil])); extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { return (testdata && [testdata length] && [extensions containsObject: ext]); } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; NSMutableDictionary *imageInfo = [NSMutableDictionary dictionary]; BOOL success = YES; ResetJpgfile(); if (ReadJpegFile([path UTF8String], imageInfo)) { // [imageInfo setObject: @"public.jpeg" forKey: @"GSMDItemContentType"]; [mddict setObject: imageInfo forKey: @"attributes"]; DiscardData(); { /* mdextractor needs this empty "words" dictionary to let a trigger to fire when updating a path. (see dbschema.h) */ NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[[NSCountedSet alloc] initWithCapacity: 1] autorelease]; [wordsDict setObject: wordset forKey: @"wset"]; [wordsDict setObject: [NSNumber numberWithUnsignedLong: 0L] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } success = [extractor setMetadata: mddict forPath: path withID: path_id]; } RELEASE (arp); return success; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/exif.m0000644000175000001440000006630213214346537026432 0ustar multixusers//-------------------------------------------------------------------------- // Program to pull the information out of various types of EXIF digital // camera files and show it in a reasonably consistent way // // This module parses the very complicated exif structures. // // Matthias Wandel, Dec 1999 - Dec 2002 //-------------------------------------------------------------------------- #include #include "jhead.h" static unsigned char *LastExifRefd; static int MotorolaOrder = 0; const int BytesPerFormat[] = {0,1,1,2,4,8,1,1,2,4,8,4,8}; //-------------------------------------------------------------------------- // Describes tag values #define TAG_INTEROP_INDEX 0x001 #define TAG_INTEROP_VERSION 0x002 #define TAG_IMAGE_WIDTH 0x100 #define TAG_IMAGE_LENGTH 0x101 #define TAG_BITS_PER_SAMPLE 0x102 #define TAG_COMPRESSION 0x103 #define TAG_PHOTOMETRIC_INTERPRETATION 0x106 #define TAG_FILL_ORDER 0x10A #define TAG_DOCUMENT_NAME 0x10D #define TAG_IMAGE_DESCRIPTION 0x10E #define TAG_MAKE 0x010F #define TAG_MODEL 0x0110 #define TAG_STRIP_OFFSETS 0x111 #define TAG_ORIENTATION 0x0112 #define TAG_SAMPLES_PER_PIXEL 0x115 #define TAG_ROWS_PER_STRIP 0x116 #define TAG_STRIP_BYTE_COUNTS 0x117 #define TAG_X_RESOLUTION 0x11A #define TAG_Y_RESOLUTION 0x11B #define TAG_PLANAR_CONFIGURATION 0x11C #define TAG_RESOLUTION_UNIT 0x128 #define TAG_TRANSFER_FUNCTION 0x12D #define TAG_SOFTWARE 0x131 #define TAG_DATETIME 0x0132 #define TAG_ARTIST 0x13B #define TAG_WHITE_POINT 0x13E #define TAG_PRIMARY_CHROMATICITIES 0x13F #define TAG_TRANSFER_RANGE 0x156 #define TAG_JPEG_PROC 0x200 #define TAG_THUMBNAIL_OFFSET 0x0201 #define TAG_THUMBNAIL_LENGTH 0x0202 #define TAG_YCBCR_COEFICIENTS 0x211 #define TAG_YCBCR_SUBSAMPLING 0x212 #define TAG_YCBCR_POSITIONING 0x213 #define TAG_REFERENCE_BLACK_WHITE 0x214 #define TAG_RELATED_IMAGE_WIDTH 0x1001 #define TAG_RELATED_IMAGE_LENGTH 0x1002 #define TAG_CFA_REPEAT_PATTERN_DIM 0x828D #define TAG_CFA_PATTERN_ 0x828E #define TAG_BATTERY_LEVEL 0x828F #define TAG_COPYRIGHT 0x8298 #define TAG_EXPOSURETIME 0x829A #define TAG_FNUMBER 0x829D #define TAG_IPTC_NAA 0x83BB #define TAG_EXIF_OFFSET 0x8769 #define TAG_INTER_COLOR_PROFILE 0x8773 #define TAG_EXPOSURE_PROGRAM 0x8822 #define TAG_SPECTRAL_SENSITIVITY 0x8824 #define TAG_GPSINFO 0x8825 #define TAG_ISO_EQUIVALENT 0x8827 #define TAG_OECF 0x8828 #define TAG_EXIF_VERSION 0x9000 #define TAG_DATETIME_ORIGINAL 0x9003 #define TAG_DATETIME_DIGITIZED 0x9004 #define TAG_COMPONENTS_CONFIGURATION 0x9101 #define TAG_COMPRESSED_BITS_PER_PIXEL 0x9102 #define TAG_SHUTTERSPEED 0x9201 #define TAG_APERTURE 0x9202 #define TAG_BRIGHTNESS_VALUE 0x9203 #define TAG_EXPOSURE_BIAS 0x9204 #define TAG_MAXAPERTURE 0x9205 #define TAG_SUBJECT_DISTANCE 0x9206 #define TAG_METERING_MODE 0x9207 #define TAG_LIGHT_SOURCE 0x9208 #define TAG_FLASH 0x9209 #define TAG_FOCALLENGTH 0x920A #define TAG_MAKER_NOTE 0x927C #define TAG_USERCOMMENT 0x9286 #define TAG_SUB_SEC_TIME 0x9290 #define TAG_SUB_SEC_TIME_ORIGINAL 0x9291 #define TAG_SUB_SEC_TIME_DIGITIZED 0x9292 #define TAG_FLASH_PIX_VERSION 0xA000 #define TAG_COLORSPACE 0xA001 #define TAG_EXIF_IMAGEWIDTH 0xa002 #define TAG_EXIF_IMAGELENGTH 0xa003 #define TAG_RELATED_AUDIO_FILE 0xA004 #define TAG_INTEROP_OFFSET 0xa005 #define TAG_FLASH_ENERGY 0xA20B #define TAG_SPATIAL_FREQUENCY_RESPONSE 0xA20C #define TAG_FOCALPLANEXRES 0xa20E #define TAG_FOCALPLANEYRES 0xA20F #define TAG_FOCALPLANEUNITS 0xa210 #define TAG_SUBJECT_LOCATION 0xA214 #define TAG_EXPOSURE_INDEX 0xa215 #define TAG_SENSING_METHOD 0xA217 #define TAG_FILE_SOURCE 0xA300 #define TAG_SCENE_TYPE 0xA301 #define TAG_CFA_PATTERN 0xA301 #define TAG_CUSTOM_RENDERED 0xA401 #define TAG_EXPOSURE_MODE 0xa402 #define TAG_WHITEBALANCE 0xa403 #define TAG_DIGITALZOOMRATIO 0xA404 #define TAG_FOCALLENGTH_35MM 0xa405 #define TAG_SCENE_CAPTURE_TYPE 0xA406 #define TAG_GAIN_CONTROL 0xA407 #define TAG_CONTRAST 0xA408 #define TAG_SATURATION 0xA409 #define TAG_SHARPNESS 0xA40a #define TAG_SUBJECT_DISTANCE_RANGE 0xA40c //-------------------------------------------------------------------------- // Convert a 16 bit unsigned value from file's native byte order //-------------------------------------------------------------------------- int Get16u(void * Short) { if (MotorolaOrder){ return (((uchar *)Short)[0] << 8) | ((uchar *)Short)[1]; } else { return (((uchar *)Short)[1] << 8) | ((uchar *)Short)[0]; } } //-------------------------------------------------------------------------- // Convert a 32 bit signed value from file's native byte order //-------------------------------------------------------------------------- int Get32s(void * Long) { if (MotorolaOrder) { return (((char *)Long)[0] << 24) | (((uchar *)Long)[1] << 16) | (((uchar *)Long)[2] << 8 ) | (((uchar *)Long)[3] << 0 ); } else { return (((char *)Long)[3] << 24) | (((uchar *)Long)[2] << 16) | (((uchar *)Long)[1] << 8 ) | (((uchar *)Long)[0] << 0 ); } } //-------------------------------------------------------------------------- // Convert a 32 bit unsigned value from file's native byte order //-------------------------------------------------------------------------- unsigned Get32u(void * Long) { return (unsigned)Get32s(Long) & 0xffffffff; } //-------------------------------------------------------------------------- // Evaluate number, be it int, rational, or float from directory. //-------------------------------------------------------------------------- double ConvertAnyFormat(void * ValuePtr, int Format) { double Value; Value = 0; switch(Format){ case FMT_SBYTE: Value = *(signed char *)ValuePtr; break; case FMT_BYTE: Value = *(uchar *)ValuePtr; break; case FMT_USHORT: Value = Get16u(ValuePtr); break; case FMT_ULONG: Value = Get32u(ValuePtr); break; case FMT_URATIONAL: case FMT_SRATIONAL: { int Num, Den; Num = Get32s(ValuePtr); Den = Get32s(4+(char *)ValuePtr); if (Den == 0) { Value = 0; } else { Value = (double)Num/Den; } break; } case FMT_SSHORT: Value = (signed short)Get16u(ValuePtr); break; case FMT_SLONG: Value = Get32s(ValuePtr); break; // Not sure if this is correct (never seen float used in Exif format) case FMT_SINGLE: Value = (double)*(float *)ValuePtr; break; case FMT_DOUBLE: Value = *(double *)ValuePtr; break; } return Value; } NSString *removeUnprintables(unsigned char *valuePtr, int byteCount) { NSMutableString *str = [NSMutableString string]; BOOL noprint = NO; int i; for (i = 0; i < byteCount; i++) { if (valuePtr[i] >= 32) { [str appendFormat: @"%c", valuePtr[i]]; noprint = NO; } else { if ((noprint == NO) && (i != byteCount-1)) { [str appendString: @"?"]; noprint = YES; } } } return str; } //-------------------------------------------------------------------------- // Process one of the nested EXIF directories. //-------------------------------------------------------------------------- static void ProcessExifDir(unsigned char *DirStart, unsigned char *OffsetBase, unsigned ExifLength, int NestingLevel, NSMutableDictionary *imageInfo) { int de; int a; int NumDirEntries; char IndentString[25]; #define SET_IF_EXISTS(v, k) \ do { value = v; if (value) [imageInfo setObject: value forKey: k]; } while (0) if (NestingLevel > 4){ ErrNonfatal("Maximum directory nesting exceeded (corrupt exif header)", 0,0); return; } memset(IndentString, ' ', 25); IndentString[NestingLevel * 4] = '\0'; NumDirEntries = Get16u(DirStart); #define DIR_ENTRY_ADDR(Start, Entry) (Start+2+12*(Entry)) { unsigned char *DirEnd = DIR_ENTRY_ADDR(DirStart, NumDirEntries); if (DirEnd+4 > (OffsetBase+ExifLength)) { if (DirEnd+2 == OffsetBase+ExifLength || DirEnd == OffsetBase+ExifLength){ // Version 1.3 of jhead would truncate a bit too much. // This also caught later on as well. } else { ErrNonfatal("Illegally sized directory",0,0); return; } } if (DirEnd > LastExifRefd) { LastExifRefd = DirEnd; } } for (de = 0; de < NumDirEntries; de++) { char buff[255]; int Tag, Format, Components; unsigned char *ValuePtr; int ByteCount; unsigned char *DirEntry; id value; DirEntry = DIR_ENTRY_ADDR(DirStart, de); Tag = Get16u(DirEntry); Format = Get16u(DirEntry+2); Components = Get32u(DirEntry+4); if ((Format-1) >= NUM_FORMATS) { // (-1) catches illegal zero case as unsigned underflows to positive large. ErrNonfatal("Illegal number format %d for tag %04x", Format, Tag); continue; } ByteCount = Components * BytesPerFormat[Format]; if (ByteCount > 4){ unsigned OffsetVal; OffsetVal = Get32u(DirEntry+8); // If its bigger than 4 bytes, the dir entry contains an offset. if (OffsetVal+ByteCount > ExifLength){ // Bogus pointer offset and / or bytecount value ErrNonfatal("Illegal value pointer for tag %04x", Tag,0); continue; } ValuePtr = OffsetBase+OffsetVal; }else{ // 4 bytes or less and value is in the dir entry itself ValuePtr = DirEntry+8; } if (LastExifRefd < ValuePtr+ByteCount){ // Keep track of last byte in the exif header that was actually referenced. // That way, we know where the discardable thumbnail data begins. LastExifRefd = ValuePtr+ByteCount; } if (Tag == TAG_MAKER_NOTE){ continue; } // Extract useful components of tag switch(Tag) { /*********************************************/ case TAG_COLORSPACE: { int space = (int)ConvertAnyFormat(ValuePtr, Format); NSString *spacestr; switch (space) { case 1: spacestr = @"RGB"; break; default: spacestr = @"Unknown"; break; } [imageInfo setObject: spacestr forKey: @"GSMDItemColorSpace"]; break; } case TAG_EXIF_VERSION: { SET_IF_EXISTS (removeUnprintables(ValuePtr, ByteCount), @"GSMDItemEXIFVersion"); break; } case TAG_X_RESOLUTION: { int xres = (int)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithInt: xres], @"GSMDItemResolutionWidthDPI"); break; } case TAG_Y_RESOLUTION: { int yres = (int)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithInt: yres], @"GSMDItemResolutionHeightDPI"); break; } case TAG_DOCUMENT_NAME: SET_IF_EXISTS (removeUnprintables(ValuePtr, ByteCount), @"GSMDItemTitle"); break; case TAG_ARTIST: { NSString *author = removeUnprintables(ValuePtr, ByteCount); if (author) { [imageInfo setObject: [NSArray arrayWithObject: author] forKey: @"GSMDItemAuthors"]; } break; } case TAG_COPYRIGHT: SET_IF_EXISTS (removeUnprintables(ValuePtr, ByteCount), @"GSMDItemCopyright"); break; // TAG_INTER_COLOR_PROFILE /*********************************************/ case TAG_MAKE: strncpy(buff, (char *)ValuePtr, ByteCount < 31 ? ByteCount : 31); SET_IF_EXISTS ([NSString stringWithCString: buff], @"GSMDItemAcquisitionMake"); break; case TAG_MODEL: strncpy(buff, (char *)ValuePtr, ByteCount < 39 ? ByteCount : 39); SET_IF_EXISTS ([NSString stringWithCString: buff], @"GSMDItemAcquisitionModel"); break; case TAG_DATETIME_ORIGINAL: // If we get a DATETIME_ORIGINAL, we use that one. strncpy(buff, (char *)ValuePtr, strlen((char *)ValuePtr) + 1); SET_IF_EXISTS ([NSString stringWithCString: buff], @"GSMDItemExposureTimeString"); case TAG_DATETIME_DIGITIZED: case TAG_DATETIME: if ([imageInfo objectForKey: @"GSMDItemExposureTimeString"] == nil) { strncpy(buff, (char *)ValuePtr, strlen((char *)ValuePtr) + 1); SET_IF_EXISTS ([NSString stringWithCString: buff], @"GSMDItemExposureTimeString"); } break; case TAG_USERCOMMENT: { NSString *comments = [imageInfo objectForKey: @"GSMDItemComment"]; if (comments == nil) { comments = [NSString string]; } // Olympus has this padded with trailing spaces. Remove these first. for (a = ByteCount;;) { a--; if ((ValuePtr)[a] == ' ') { (ValuePtr)[a] = '\0'; } else { break; } if (a == 0) { break; } } // Copy the comment if (memcmp(ValuePtr, "ASCII", 5) == 0) { for (a = 5; a < 10; a++) { int c; c = (ValuePtr)[a]; if (c != '\0' && c != ' ') { strncpy(buff, (char *)ValuePtr + a, 199); comments = [comments stringByAppendingString: [NSString stringWithCString: buff]]; break; } } } else { strncpy(buff, (char *)ValuePtr + a, 199); value = [NSString stringWithCString: buff]; if (value) { comments = [comments stringByAppendingString: value]; } } [imageInfo setObject: comments forKey: @"GSMDItemComment"]; break; } case TAG_FNUMBER: { float aperture = (float)ConvertAnyFormat(ValuePtr, Format); // Simplest way of expressing aperture, so I trust it the most. // (overwrite previously computd value if there is one) SET_IF_EXISTS ([NSNumber numberWithFloat: aperture], @"GSMDItemFNumber"); SET_IF_EXISTS ([NSNumber numberWithFloat: aperture], @"GSMDItemMaxAperture"); break; } case TAG_APERTURE: case TAG_MAXAPERTURE: { float aperture = (float)exp(ConvertAnyFormat(ValuePtr, Format) * log(2) * 0.5); SET_IF_EXISTS ([NSNumber numberWithFloat: aperture], @"GSMDItemFNumber"); break; } case TAG_FOCALLENGTH: { // Nice digital cameras actually save the focal length as a function // of how farthey are zoomed in. float flen = (float)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithFloat: flen], @"GSMDItemFocalLength"); break; } case TAG_SUBJECT_DISTANCE: { // Inidcates the distacne the autofocus camera is focused to. // Tends to be less accurate as distance increases. float distance = (float)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithFloat: distance], @"distance"); break; } case TAG_EXPOSURETIME: { // Simplest way of expressing exposure time, so I trust it most. // (overwrite previously computd value if there is one) float exptime = (float)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithFloat: exptime], @"GSMDItemExposureTimeSeconds"); break; } case TAG_SHUTTERSPEED: // More complicated way of expressing exposure time, so only use // this value if we don't already have it from somewhere else. if ([imageInfo objectForKey: @"GSMDItemExposureTimeSeconds"] == nil) { float exptime = (float)(1/exp(ConvertAnyFormat(ValuePtr, Format)*log(2))); SET_IF_EXISTS ([NSNumber numberWithFloat: exptime], @"GSMDItemExposureTimeSeconds"); } break; case TAG_FLASH: { int flash = (int)ConvertAnyFormat(ValuePtr, Format); BOOL flashused = (flash > 0); BOOL redeye = ((flash == 0x41) || (flash == 0x45) || (flash == 0x47) || (flash == 0x49) || (flash == 0x4d) || (flash == 0x4f) || (flash == 0x59) || (flash == 0x5d) || (flash == 0x5f)); SET_IF_EXISTS ([NSNumber numberWithUnsignedInt: flashused], @"GSMDItemFlashOnOff"); SET_IF_EXISTS ([NSNumber numberWithUnsignedInt: redeye], @"GSMDItemRedEyeOnOff"); break; } case TAG_ORIENTATION: if ([imageInfo objectForKey: @"GSMDItemOrientation"] == nil) { int orientation = (int)ConvertAnyFormat(ValuePtr, Format); if (orientation < 1 || orientation > 8) { ErrNonfatal("Undefined rotation value %d", orientation, 0); orientation = 0; } SET_IF_EXISTS ([NSNumber numberWithInt: orientation], @"GSMDItemOrientation"); } break; case TAG_EXIF_IMAGELENGTH: case TAG_EXIF_IMAGEWIDTH: break; case TAG_FOCALPLANEXRES: break; case TAG_FOCALPLANEUNITS: break; case TAG_EXPOSURE_BIAS: { float bias = (float)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithFloat: bias], @"exposurebias"); break; } case TAG_WHITEBALANCE: { int balance = (int)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithInt: balance], @"GSMDItemWhiteBalance"); break; } case TAG_LIGHT_SOURCE: { int lsource = (int)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithInt: lsource], @"lightsource"); break; } case TAG_METERING_MODE: { int mode = (int)ConvertAnyFormat(ValuePtr, Format); NSString *modestr; switch (mode) { case 2: modestr = @"Center weight"; break; case 3: modestr = @"Spot"; break; case 5: modestr = @"Matrix"; break; default: modestr = @"Unknown"; break; } [imageInfo setObject: modestr forKey: @"GSMDItemMeteringMode"]; break; } case TAG_EXPOSURE_PROGRAM: { int exprog = (int)ConvertAnyFormat(ValuePtr, Format); NSString *expstr; switch (exprog) { case 1: expstr = @"Manual"; break; case 2: expstr = @"Normal"; break; case 3: expstr = @"Aperture priority"; break; case 4: expstr = @"Shutter priority"; break; case 5: expstr = @"Creative Program (based towards depth of field)"; break; case 6: expstr = @"Action program (based towards fast shutter speed)"; break; case 7: expstr = @"Portrait Mode"; break; case 8: expstr = @"Landscape Mode"; break; default: expstr = @"Unknown"; break; } [imageInfo setObject: expstr forKey: @"GSMDItemExposureProgram"]; break; } case TAG_EXPOSURE_INDEX: if ([imageInfo objectForKey: @"GSMDItemISOSpeed"] == nil) { int iso = (int)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithInt: iso], @"GSMDItemISOSpeed"); } break; case TAG_EXPOSURE_MODE: { int mode = (int)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithInt: mode], @"GSMDItemExposureMode"); break; } case TAG_ISO_EQUIVALENT: { int isoeq = (int)ConvertAnyFormat(ValuePtr, Format); if (isoeq < 50) { // Fixes strange encoding on some older digicams. isoeq *= 200; } SET_IF_EXISTS ([NSNumber numberWithInt: isoeq], @"GSMDItemISOSpeed"); break; } case TAG_DIGITALZOOMRATIO: { // float zoom = (float)ConvertAnyFormat(ValuePtr, Format); // SET_IF_EXISTS ([NSNumber numberWithFloat: zoom], @"digitalzoomratio"); break; } case TAG_THUMBNAIL_OFFSET: break; case TAG_THUMBNAIL_LENGTH: break; case TAG_EXIF_OFFSET: case TAG_INTEROP_OFFSET: { unsigned char *SubdirStart = OffsetBase + Get32u(ValuePtr); if (SubdirStart < OffsetBase || SubdirStart > OffsetBase + ExifLength){ ErrNonfatal("Illegal exif or interop ofset directory link",0,0); } else { ProcessExifDir(SubdirStart, OffsetBase, ExifLength, NestingLevel+1, imageInfo); } continue; break; } case TAG_GPSINFO: { unsigned char *SubdirStart = OffsetBase + Get32u(ValuePtr); if (SubdirStart < OffsetBase || SubdirStart > OffsetBase+ExifLength){ ErrNonfatal("Illegal GPS directory link",0,0); } else { // ProcessGpsInfo(SubdirStart, ByteCount, OffsetBase, ExifLength); } continue; break; } case TAG_FOCALLENGTH_35MM: { // The focal length equivalent 35 mm is a 2.2 tag (defined as of April 2002) // if its present, use it to compute equivalent focal length instead of // computing it from sensor geometry and actual focal length. unsigned flength = (unsigned)ConvertAnyFormat(ValuePtr, Format); SET_IF_EXISTS ([NSNumber numberWithUnsignedInt: flength], @"focallength35mmequiv"); break; } } } { // In addition to linking to subdirectories via exif tags, // there's also a potential link to another directory at the end of each // directory. this has got to be the result of a comitee! unsigned char * SubdirStart; unsigned Offset; if (DIR_ENTRY_ADDR(DirStart, NumDirEntries) + 4 <= OffsetBase+ExifLength){ Offset = Get32u(DirStart+2+12*NumDirEntries); if (Offset){ SubdirStart = OffsetBase + Offset; if (SubdirStart > OffsetBase+ExifLength || SubdirStart < OffsetBase){ if (SubdirStart > OffsetBase && SubdirStart < OffsetBase+ExifLength+20){ // Jhead 1.3 or earlier would crop the whole directory! // As Jhead produces this form of format incorrectness, // I'll just let it pass silently } else { ErrNonfatal("Illegal subdirectory link",0,0); } } else { if (SubdirStart <= OffsetBase+ExifLength){ ProcessExifDir(SubdirStart, OffsetBase, ExifLength, NestingLevel+1, imageInfo); } } } } else { // The exif header ends before the last next directory pointer. } } } //-------------------------------------------------------------------------- // Process a EXIF marker // Describes all the drivel that most digital cameras include... //-------------------------------------------------------------------------- void process_EXIF (unsigned char * ExifSection, unsigned int length, NSMutableDictionary *imageInfo) { static uchar ExifHeader[] = "Exif\0\0"; int FirstOffset; // Check the EXIF header component if (memcmp(ExifSection+2, ExifHeader,6)){ ErrNonfatal("Incorrect Exif header",0,0); return; } if (memcmp(ExifSection+8,"II",2) == 0) { MotorolaOrder = 0; } else{ if (memcmp(ExifSection+8,"MM",2) == 0){ MotorolaOrder = 1; } else { ErrNonfatal("Invalid Exif alignment marker.",0,0); return; } } // Check the next value for correctness. if (Get16u(ExifSection+10) != 0x2a){ ErrNonfatal("Invalid Exif start (1)",0,0); return; } FirstOffset = Get32u(ExifSection+12); if (FirstOffset < 8 || FirstOffset > 16){ // I used to ensure this was set to 8 (website I used indicated its 8) // but PENTAX Optio 230 has it set differently, and uses it as offset. (Sept 11 2002) ErrNonfatal("Suspicious offset of first IFD value",0,0); } LastExifRefd = ExifSection; // First directory starts 16 bytes in. All offset are relative to 8 bytes in. ProcessExifDir(ExifSection+8+FirstOffset, ExifSection+8, length-6, 0, imageInfo); } gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/jhead.h0000644000175000001440000000607713214346537026550 0ustar multixusers//-------------------------------------------------------------------------- // Include file for jhead program. // // This include file only defines stuff that goes across modules. // I like to keep the definitions for macros and structures as close to // where they get used as possible, so include files only get stuff that // gets used in more than one file. //-------------------------------------------------------------------------- #ifndef JHEAD_H #define JHEAD_H #include typedef unsigned char uchar; #define MAX_COMMENT 2000 //-------------------------------------------------------------------------- // This structure is used to store jpeg file sections in memory. typedef struct { uchar *Data; int Type; unsigned Size; } Section_t; // prototypes for jhead.c functions void ErrNonfatal(char *msg, int a1, int a2); // Prototypes for exif.c functions. void process_EXIF (unsigned char * CharBuf, unsigned int length, NSMutableDictionary *imageInfo); double ConvertAnyFormat(void * ValuePtr, int Format); int Get16u(void * Short); unsigned Get32u(void * Long); int Get32s(void * Long); //-------------------------------------------------------------------------- // Exif format descriptor stuff extern const int BytesPerFormat[]; #define NUM_FORMATS 12 #define FMT_BYTE 1 #define FMT_STRING 2 #define FMT_USHORT 3 #define FMT_ULONG 4 #define FMT_URATIONAL 5 #define FMT_SBYTE 6 #define FMT_UNDEFINED 7 #define FMT_SSHORT 8 #define FMT_SLONG 9 #define FMT_SRATIONAL 10 #define FMT_SINGLE 11 #define FMT_DOUBLE 12 // Prototypes from jpgfile.c BOOL ReadJpegSections (FILE *infile, NSMutableDictionary *imageInfo); void DiscardData(void); BOOL ReadJpegFile(const char *FileName, NSMutableDictionary *imageInfo); void ResetJpgfile(void); //-------------------------------------------------------------------------- // JPEG markers consist of one or more 0xFF bytes, followed by a marker // code byte (which is not an FF). Here are the marker codes of interest // in this program. (See jdmarker.c for a more complete list.) //-------------------------------------------------------------------------- #define M_SOF0 0xC0 // Start Of Frame N #define M_SOF1 0xC1 // N indicates which compression process #define M_SOF2 0xC2 // Only SOF0-SOF2 are now in common use #define M_SOF3 0xC3 #define M_SOF5 0xC5 // NB: codes C4 and CC are NOT SOF markers #define M_SOF6 0xC6 #define M_SOF7 0xC7 #define M_SOF9 0xC9 #define M_SOF10 0xCA #define M_SOF11 0xCB #define M_SOF13 0xCD #define M_SOF14 0xCE #define M_SOF15 0xCF #define M_SOI 0xD8 // Start Of Image (beginning of datastream) #define M_EOI 0xD9 // End Of Image (end of datastream) #define M_SOS 0xDA // Start Of Scan (begins compressed data) #define M_JFIF 0xE0 // Jfif marker #define M_EXIF 0xE1 // Exif marker #define M_COM 0xFE // COMment #define M_DQT 0xDB #define M_DHT 0xC4 #define M_DRI 0xDD #endif // JHEAD_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/jhead.m0000644000175000001440000000170113214346537026542 0ustar multixusers//-------------------------------------------------------------------------- // Program to pull the information out of various types of EXIF digital // camera files and show it in a reasonably consistent way // // Version 2.4-2 // // // Compiling under Windows: Use microsoft's compiler. from command line: // cl -Ox jhead.c exif.c myglob.c // // Dec 1999 - Jun 2005 // // by Matthias Wandel www.sentex.net/~mwandel //-------------------------------------------------------------------------- #include "jhead.h" //-------------------------------------------------------------------------- // Report non fatal errors. Now that microsoft.net modifies exif headers, // there's corrupted ones, and there could be more in the future. //-------------------------------------------------------------------------- void ErrNonfatal(char *msg, int a1, int a2) { fprintf(stderr,"Nonfatal Error : "); fprintf(stderr, msg, a1, a2); fprintf(stderr, "\n"); } gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/JpegExtractor/jpgfile.m0000644000175000001440000001747613214346537027127 0ustar multixusers//-------------------------------------------------------------------------- // Program to pull the information out of various types of EXIF digital // camera files and show it in a reasonably consistent way // // This module handles basic Jpeg file handling // // Matthias Wandel, Dec 1999 - Dec 2002 //-------------------------------------------------------------------------- #include "jhead.h" // Storage for simplified info extracted from file. #define SET_IF_EXISTS(v, k) \ do { value = v; if (value) [imageInfo setObject: value forKey: k]; } while (0) #define MAX_SECTIONS 100 static Section_t Sections[MAX_SECTIONS]; static int SectionsRead; static int HaveAll; //-------------------------------------------------------------------------- // Get 16 bits motorola order (always) for jpeg header stuff. //-------------------------------------------------------------------------- static int Get16m(const void * Short) { return (((uchar *)Short)[0] << 8) | ((uchar *)Short)[1]; } //-------------------------------------------------------------------------- // Process a COM marker. // We want to print out the marker contents as legible text; // we must guard against random junk and varying newline representations. //-------------------------------------------------------------------------- static void process_COM (const uchar *Data, int length, NSMutableDictionary *imageInfo) { int ch; char Comment[MAX_COMMENT+1]; id value; int nch; int a; nch = 0; if (length > MAX_COMMENT) { length = MAX_COMMENT; // Truncate if it won't fit in our structure. } for (a = 2; a < length; a++) { ch = Data[a]; if (ch == '\r' && Data[a+1] == '\n') { continue; // Remove cr followed by lf. } if (ch >= 32 || ch == '\n' || ch == '\t') { Comment[nch++] = (char)ch; } else { Comment[nch++] = '?'; } } Comment[nch] = '\0'; // Null terminate SET_IF_EXISTS ([NSString stringWithCString: Comment], @"GSMDItemComment"); } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // AcquisitionModel // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //-------------------------------------------------------------------------- // Process a SOFn marker. This is useful for the image dimensions //-------------------------------------------------------------------------- static void process_SOFn (const uchar *Data, int marker, NSMutableDictionary *imageInfo) { int data_precision = Data[2]; // int num_components = Data[7]; // BOOL isColor = (num_components >= 3); id value; #define SET_IF_EXISTS(v, k) \ do { value = v; if (value) [imageInfo setObject: value forKey: k]; } while (0) SET_IF_EXISTS ([NSNumber numberWithInt: Get16m(Data+3)], @"GSMDItemFNumber"); SET_IF_EXISTS ([NSNumber numberWithInt: Get16m(Data+5)], @"GSMDItemPixelWidth"); // SET_IF_EXISTS ([NSNumber numberWithUnsignedInt: isColor], @"iscolor"); // SET_IF_EXISTS ([NSNumber numberWithInt: marker], @"process"); SET_IF_EXISTS ([NSNumber numberWithInt: data_precision], @"GSMDItemBitsPerSample"); // SET_IF_EXISTS ([NSNumber numberWithInt: num_components], @"colorcomponents"); } //-------------------------------------------------------------------------- // Parse the marker stream until SOS or EOI is seen; //-------------------------------------------------------------------------- BOOL ReadJpegSections(FILE *infile, NSMutableDictionary *imageInfo) { int a; BOOL HaveCom = NO; a = fgetc(infile); if (a != 0xff || fgetc(infile) != M_SOI){ return NO; } while(1) { int itemlen; int marker = 0; int ll, lh, got; uchar *Data; if (SectionsRead >= MAX_SECTIONS) { fprintf(stderr, "Too many sections in jpg file\n"); return NO; } for (a = 0; a < 7; a++) { marker = fgetc(infile); if (marker != 0xff) { break; } if (a >= 6){ fprintf(stderr, "too many padding bytes\n"); return NO; } } if (marker == 0xff){ // 0xff is legal padding, but if we get that many, something's wrong. fprintf(stderr, "too many padding bytes!\n"); return NO; } Sections[SectionsRead].Type = marker; // Read the length of the section. lh = fgetc(infile); ll = fgetc(infile); itemlen = (lh << 8) | ll; if (itemlen < 2){ fprintf(stderr, "invalid marker\n"); return NO; } Sections[SectionsRead].Size = itemlen; Data = (uchar *)malloc(itemlen); if (Data == NULL){ fprintf(stderr, "Could not allocate memory\n"); return NO; } Sections[SectionsRead].Data = Data; // Store first two pre-read bytes. Data[0] = (uchar)lh; Data[1] = (uchar)ll; got = fread(Data + 2, 1, itemlen - 2, infile); // Read the whole section. if (got != itemlen-2) { fprintf(stderr, "Premature end of file?\n"); return NO; } SectionsRead += 1; switch(marker) { case M_SOS: // stop before hitting compressed data return YES; case M_EOI: // in case it's a tables-only JPEG stream fprintf(stderr, "No image in jpeg!\n"); return NO; case M_COM: // Comment section if (HaveCom){ // Discard this section. free(Sections[--SectionsRead].Data); } else{ process_COM(Data, itemlen, imageInfo); HaveCom = YES; } break; case M_JFIF: // Regular jpegs always have this tag, exif images have the exif // marker instead, althogh ACDsee will write images with both markers. // this program will re-create this marker on absence of exif marker. // hence no need to keep the copy from the file. free(Sections[--SectionsRead].Data); break; case M_EXIF: // Seen files from some 'U-lead' software with Vivitar scanner // that uses marker 31 for non exif stuff. Thus make sure // it says 'Exif' in the section before treating it as exif. if (memcmp(Data+2, "Exif", 4) == 0){ process_EXIF(Data, itemlen, imageInfo); } else { // Discard this section. free(Sections[--SectionsRead].Data); } break; case M_SOF0: case M_SOF1: case M_SOF2: case M_SOF3: case M_SOF5: case M_SOF6: case M_SOF7: case M_SOF9: case M_SOF10: case M_SOF11: case M_SOF13: case M_SOF14: case M_SOF15: process_SOFn(Data, marker, imageInfo); break; default: // Skip any other sections. break; } } return YES; } //-------------------------------------------------------------------------- // Discard read data. //-------------------------------------------------------------------------- void DiscardData(void) { int a; for (a = 0; a < SectionsRead; a++){ free(Sections[a].Data); } SectionsRead = 0; HaveAll = 0; } //-------------------------------------------------------------------------- // Read image data. //-------------------------------------------------------------------------- BOOL ReadJpegFile(const char * FileName, NSMutableDictionary *imageInfo) { FILE *infile; BOOL ret; infile = fopen(FileName, "rb"); // Unix ignores 'b', windows needs it. if (infile == NULL) { fprintf(stderr, "can't open '%s'\n", FileName); return NO; } // Scan the JPEG headers. ret = ReadJpegSections(infile, imageInfo); if (ret == NO) { fprintf(stderr, "Not JPEG: '%s'\n", FileName); } fclose(infile); if (ret == NO) { DiscardData(); } return ret; } //-------------------------------------------------------------------------- // Initialisation. //-------------------------------------------------------------------------- void ResetJpgfile(void) { memset(&Sections, 0, sizeof(Sections)); SectionsRead = 0; HaveAll = 0; } gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/0000755000175000001440000000000014752464315026445 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/GNUmakefile0000644000175000001440000000075013231754602030511 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = OpenOfficeExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # OpenOfficeExtractor_OBJC_FILES = OpenOfficeExtractor.m OpenOfficeExtractor_PRINCIPAL_CLASS = OpenOfficeExtractor OpenOfficeExtractor_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/GNUmakefile.postamble0000644000175000001440000000137013214346537032502 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache TAGS GNUmakefile config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/GNUmakefile.preamble0000644000175000001440000000064713214346537032311 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/OpenOfficeExtractor.h0000644000175000001440000000412413214346537032525 0ustar multixusers/* OpenOfficeExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef OPEN_OFFICE_EXTRACTOR_H #define OPEN_OFFICE_EXTRACTOR_H #include #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface OpenOfficeExtractor: NSObject { GSXMLDocument *stylesheet; NSString *tempdir; NSString *unzcomm; id extractor; NSArray *extensions; NSMutableCharacterSet *skipSet; NSFileManager *fm; } - (NSDictionary *)unzippedPathsForPath:(NSString *)path; - (NSDictionary *)getAttributes:(NSMutableDictionary *)attributes fromNode:(GSXMLNode *)node; @end #endif // OPEN_OFFICE_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/OpenOfficeExtractor/OpenOfficeExtractor.m0000644000175000001440000002212013214346537032526 0ustar multixusers/* OpenOfficeExtractor.m * * Copyright (C) 2006-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #import #import "OpenOfficeExtractor.h" #import "extractors.h" #define MAXFSIZE 600000 #define WORD_MAX 40 static char *style = " " " " ""; @implementation OpenOfficeExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); RELEASE (tempdir); RELEASE (unzcomm); RELEASE (stylesheet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { NSData *data = [NSData dataWithBytes: style length: strlen(style)]; GSXMLParser *parser = [GSXMLParser parserWithData: data]; [parser parse]; ASSIGN (stylesheet, [parser document]); fm = [NSFileManager defaultManager]; tempdir = NSTemporaryDirectory(); tempdir = [tempdir stringByAppendingPathComponent: @"ooextractor"]; RETAIN (tempdir); if ([fm fileExistsAtPath: tempdir]) { [fm removeFileAtPath: tempdir handler: nil]; } ASSIGN (unzcomm, [NSString stringWithUTF8String: UNZIP_PATH]); ASSIGN (extensions, ([NSArray arrayWithObjects: @"sxw", @"odt", @"odp", @"sxi", @"ods", @"sxc", @"odg", @"sxd", nil])); skipSet = [NSMutableCharacterSet new]; [skipSet formUnionWithCharacterSet: [NSCharacterSet controlCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet illegalCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet punctuationCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet symbolCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet decimalDigitCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]]; extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { return ([extensions containsObject: ext]); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; NSDictionary *unzpaths = nil; NSString *unzpath = nil; GSXMLParser *parser = nil; BOOL success = NO; unzpaths = [self unzippedPathsForPath: path]; if (unzpaths == nil) { RELEASE (arp); return NO; } unzpath = [unzpaths objectForKey: @"content"]; if (unzpath) { parser = [GSXMLParser parserWithContentsOfFile: unzpath]; } if (parser && [parser parse]) { GSXMLDocument *doc = [[parser document] xsltTransform: stylesheet]; NSString *contents; if (doc == nil) { RELEASE (arp); return NO; } contents = [doc description]; if (contents && [contents length]) { NSScanner *scanner = [NSScanner scannerWithString: contents]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[NSCountedSet alloc] initWithCapacity: 1]; unsigned long wcount = 0; NSString *word; if ([scanner scanString: @"" intoString: NULL]) { [scanner scanString: @"?>" intoString: NULL]; } } [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; RELEASE (wordset); [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } } unzpath = [unzpaths objectForKey: @"meta"]; if (unzpath) { parser = [GSXMLParser parserWithContentsOfFile: unzpath]; } else { parser = nil; } if (parser && [parser parse]) { GSXMLDocument *doc = [parser document]; if (doc) { GSXMLNode *node = [doc root]; NSDictionary *dict = [self getAttributes: nil fromNode: node]; NSMutableDictionary *attrsdict = [NSMutableDictionary dictionary]; id entry; entry = [dict objectForKey: @"title"]; if (entry) { [attrsdict setObject: entry forKey: @"GSMDItemTitle"]; } entry = [dict objectForKey: @"keyword"]; if (entry) { NSArray *words = [entry componentsSeparatedByString: @", "]; [attrsdict setObject: [words description] forKey: @"GSMDItemKeywords"]; } entry = [dict objectForKey: @"creator"]; if (entry) { [attrsdict setObject: entry forKey: @"GSMDItemCreator"]; } entry = [dict objectForKey: @"generator"]; if (entry) { [attrsdict setObject: [[NSArray arrayWithObject: entry] description] forKey: @"GSMDItemEncodingApplications"]; } [mddict setObject: attrsdict forKey: @"attributes"]; } } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } - (NSDictionary *)unzippedPathsForPath:(NSString *)path { NSMutableDictionary *paths = nil; NSTask *task = nil; NSFileHandle *nullHandle; [fm removeFileAtPath: tempdir handler: nil]; if ([fm createDirectoryAtPath: tempdir attributes: nil] == NO) { return nil; } NS_DURING { task = [NSTask new]; [task setCurrentDirectoryPath: tempdir]; [task setLaunchPath: unzcomm]; [task setArguments: [NSArray arrayWithObject: path]]; nullHandle = [NSFileHandle fileHandleWithNullDevice]; [task setStandardOutput: nullHandle]; [task setStandardError: nullHandle]; [task launch]; } NS_HANDLER { DESTROY (task); } NS_ENDHANDLER if (task) { [task waitUntilExit]; if ([task terminationStatus] == 0) { NSString *contspath = [tempdir stringByAppendingPathComponent: @"content.xml"]; NSString *metapath = [tempdir stringByAppendingPathComponent: @"meta.xml"]; paths = [NSMutableDictionary dictionary]; if ([fm fileExistsAtPath: contspath]) { [paths setObject: contspath forKey: @"content"]; } if ([fm fileExistsAtPath: metapath]) { [paths setObject: metapath forKey: @"meta"]; } } RELEASE (task); } if (paths && [paths count]) { return paths; } return nil; } - (NSDictionary *)getAttributes:(NSMutableDictionary *)attributes fromNode:(GSXMLNode *)node { if (attributes == nil) { attributes = [NSMutableDictionary dictionary]; } while (node != nil) { NSDictionary *ndattrs = [node attributes]; GSXMLNode *child; if (ndattrs && [ndattrs count]) { [attributes addEntriesFromDictionary: ndattrs]; } else { NSString *name = [node name]; NSString *content = [node content]; if (name && [name length] && content && [content length]) { [attributes setObject: content forKey: name]; } } child = [node firstChildElement]; if (child != nil) { [attributes addEntriesFromDictionary: [self getAttributes: attributes fromNode: child]]; } node = [node nextElement]; } return attributes; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/0000755000175000001440000000000014752464315025141 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/GNUmakefile0000644000175000001440000000070713231754602027207 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = PdfExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # PdfExtractor_OBJC_FILES = PdfExtractor.m PdfExtractor_PRINCIPAL_CLASS = PdfExtractor PdfExtractor_TOOL_LIBS += -lPDFKit -lgnustep-gui $(SYSTEM_LIBS) include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/GNUmakefile.postamble0000644000175000001440000000137013214346537031176 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache TAGS GNUmakefile config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/GNUmakefile.preamble0000644000175000001440000000064413214346537031002 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search # ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/PdfExtractor.h0000644000175000001440000000337413214346537027723 0ustar multixusers/* PdfExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PDF_EXTRACTOR_H #define PDF_EXTRACTOR_H #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface PdfExtractor: NSObject { id extractor; NSArray *extensions; NSMutableCharacterSet *skipSet; } @end #endif // PDF_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/PdfExtractor/PdfExtractor.m0000644000175000001440000001266713214346537027735 0ustar multixusers/* PdfExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include "PdfExtractor.h" #define MAXFSIZE 600000 #define DLENGTH 256 #define WORD_MAX 40 @implementation PdfExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { NSCharacterSet *set; skipSet = [NSMutableCharacterSet new]; set = [NSCharacterSet controlCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet illegalCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet punctuationCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet symbolCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet decimalDigitCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]; [skipSet formUnionWithCharacterSet: set]; ASSIGN (extensions, ([NSArray arrayWithObject: @"pdf"])); extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { return ([extensions containsObject: ext]); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; PDFDocument *doc = [PDFDocument documentFromFile: path]; BOOL success = NO; if (doc && [doc isOk] && ([doc errorCode] == 0)) { NSString *contents = [doc getAllText]; NSDictionary *info = [doc getDocumentInfo]; if (contents && [contents length]) { NSScanner *scanner = [NSScanner scannerWithString: contents]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[NSCountedSet alloc] initWithCapacity: 1]; unsigned long wcount = 0; NSString *word; [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; RELEASE (wordset); [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } if (info) { NSMutableDictionary *attrsdict = [NSMutableDictionary dictionary]; id entry; entry = [info objectForKey: @"Title"]; if (entry) { [attrsdict setObject: entry forKey: @"GSMDItemTitle"]; } // entry = [info objectForKey: @"Subject"]; // if (entry) { // [attrsdict setObject: entry forKey: @"GSMDItemTitle"]; // } entry = [info objectForKey: @"Keywords"]; if (entry) { NSArray *words = [entry componentsSeparatedByString: @", "]; [attrsdict setObject: [words description] forKey: @"GSMDItemKeywords"]; } entry = [info objectForKey: @"Author"]; if (entry) { [attrsdict setObject: [[NSArray arrayWithObject: entry] description] forKey: @"GSMDItemAuthors"]; } entry = [info objectForKey: @"Creator"]; if (entry) { [attrsdict setObject: entry forKey: @"GSMDItemCreator"]; } entry = [info objectForKey: @"Producer"]; if (entry) { [attrsdict setObject: [[NSArray arrayWithObject: entry] description] forKey: @"GSMDItemEncodingApplications"]; } [mddict setObject: attrsdict forKey: @"attributes"]; } } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/0000755000175000001440000000000014752464315025163 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/GNUmakefile0000644000175000001440000000067613231754602027236 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = RtfExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # RtfExtractor_OBJC_FILES = RtfExtractor.m RtfExtractor_PRINCIPAL_CLASS = RtfExtractor RtfExtractor_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/GNUmakefile.postamble0000644000175000001440000000137013214346537031220 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache TAGS GNUmakefile config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/GNUmakefile.preamble0000644000175000001440000000064713214346537031027 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/RtfExtractor.h0000644000175000001440000000340213214346537027757 0ustar multixusers/* RtfExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef RTF_EXTRACTOR_H #define RTF_EXTRACTOR_H #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface RtfExtractor: NSObject { NSArray *extensions; NSMutableCharacterSet *skipSet; id extractor; } @end #endif // RTF_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/RtfExtractor/RtfExtractor.m0000644000175000001440000001164313214346537027772 0ustar multixusers/* RtfExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "RtfExtractor.h" #define MAXFSIZE 600000 #define WORD_MAX 40 @implementation RtfExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { ASSIGN (extensions, ([NSArray arrayWithObjects: @"rtf", @"rtfd", nil])); skipSet = [NSMutableCharacterSet new]; [skipSet formUnionWithCharacterSet: [NSCharacterSet controlCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet illegalCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet punctuationCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet symbolCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet decimalDigitCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]]; extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { return ([extensions containsObject: ext]); } else if ([attributes fileType] == NSFileTypeDirectory) { return ([ext isEqual: @"rtfd"]); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; NSString *ext = [[path pathExtension] lowercaseString]; NSAttributedString *attrstr = nil; NSString *contents = nil; BOOL success = NO; NS_DURING { if ([ext isEqual: @"rtf"]) { NSData *data = [NSData dataWithContentsOfFile: path]; attrstr = [[NSAttributedString alloc] initWithRTF: data documentAttributes: NULL]; } else if ([ext isEqual: @"rtfd"]) { if ([attributes fileType] == NSFileTypeRegular) { NSData *data = [NSData dataWithContentsOfFile: path]; attrstr = [[NSAttributedString alloc] initWithRTF: data documentAttributes: NULL]; } else if ([attributes fileType] == NSFileTypeDirectory) { NSFileWrapper *wrapper = [[NSFileWrapper alloc] initWithPath: path]; attrstr = [[NSAttributedString alloc] initWithRTFDFileWrapper: wrapper documentAttributes: NULL]; RELEASE (wrapper); } } } NS_HANDLER { RELEASE (arp); return NO; } NS_ENDHANDLER if (attrstr == nil) { RELEASE (arp); return NO; } contents = [attrstr string]; if (contents && [contents length]) { NSScanner *scanner = [NSScanner scannerWithString: contents]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[[NSCountedSet alloc] initWithCapacity: 1] autorelease]; unsigned long wcount = 0; NSString *word; [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/TextExtractor/0000755000175000001440000000000014752464315025354 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/TextExtractor/GNUmakefile0000644000175000001440000000101613231754602027414 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = TextExtractor BUNDLE_EXTENSION = .extr TextExtractor_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # TextExtractor_OBJC_FILES = TextExtractor.m TextExtractor_PRINCIPAL_CLASS = TextExtractor TextExtractor_TOOL_LIBS += -lgnustep-gui #TextExtractor_RESOURCE_FILES = stopwords.plist include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/TextExtractor/GNUmakefile.preamble0000644000175000001440000000127013214346537031211 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search #ADDITIONAL_INCLUDE_DIRS += -I../../WordsKit # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += -L../../WordsKit/$(GNUSTEP_OBJ_DIR) ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/TextExtractor/TextExtractor.h0000644000175000001440000000340513214346537030344 0ustar multixusers/* TextExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TEXT_EXTRACTOR_H #define TEXT_EXTRACTOR_H #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface TextExtractor: NSObject { id extractor; NSArray *extensions; NSMutableCharacterSet *skipSet; } @end #endif // TEXT_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/TextExtractor/TextExtractor.m0000644000175000001440000001017013214346541030341 0ustar multixusers/* TextExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "TextExtractor.h" #define MAXFSIZE 600000 #define DLENGTH 256 #define WORD_MAX 40 @implementation TextExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { NSCharacterSet *set; skipSet = [NSMutableCharacterSet new]; set = [NSCharacterSet controlCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet illegalCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet punctuationCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet symbolCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet decimalDigitCharacterSet]; [skipSet formUnionWithCharacterSet: set]; set = [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]; [skipSet formUnionWithCharacterSet: set]; ASSIGN (extensions, [NSArray arrayWithObject: @"txt"]); extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { const char *bytes = (const char *)[testdata bytes]; int i; for (i = 0; i < [testdata length]; i++) { if (bytes[i] == 0x00) { return NO; break; } } return YES; } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSString *contents = [NSString stringWithContentsOfFile: path]; BOOL success = YES; if (contents && [contents length]) { NSScanner *scanner = [NSScanner scannerWithString: contents]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[NSCountedSet alloc] initWithCapacity: 1]; unsigned long wcount = 0; NSString *word; [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (wordset); } RELEASE (arp); return success; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/0000755000175000001440000000000014752464315025170 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/GNUmakefile0000644000175000001440000000067613231754602027243 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = XmlExtractor BUNDLE_EXTENSION = .extr OBJCFLAGS += -Wall # # We are creating a bundle # XmlExtractor_OBJC_FILES = XmlExtractor.m XmlExtractor_PRINCIPAL_CLASS = XmlExtractor XmlExtractor_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.preamble -include GNUmakefile.local -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/GNUmakefile.postamble0000644000175000001440000000137013214346542031221 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache TAGS GNUmakefile config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/GNUmakefile.preamble0000644000175000001440000000064713214346542031030 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += # ADDITIONAL_TOOL_LIBS += gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/XmlExtractor.h0000644000175000001440000000352513214346542027773 0ustar multixusers/* XmlExtractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XML_EXTRACTOR_H #define XML_EXTRACTOR_H #include #include @protocol GMDSExtractorProtocol - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface XmlExtractor: NSObject { NSArray *extensions; GSXMLDocument *stylesheet; NSMutableCharacterSet *skipSet; id extractor; NSFileManager *fm; } @end #endif // XML_EXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/XmlExtractor/XmlExtractor.m0000644000175000001440000001135113214346542027774 0ustar multixusers/* XmlExtractor.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "XmlExtractor.h" #define MAXFSIZE 600000 #define WORD_MAX 40 static char *style = " " " " ""; @implementation XmlExtractor - (void)dealloc { RELEASE (extensions); RELEASE (skipSet); RELEASE (stylesheet); [super dealloc]; } - (id)initForExtractor:(id)extr { self = [super init]; if (self) { NSData *data = [NSData dataWithBytes: style length: strlen(style)]; GSXMLParser *parser = [GSXMLParser parserWithData: data]; [parser parse]; ASSIGN (stylesheet, [parser document]); fm = [NSFileManager defaultManager]; ASSIGN (extensions, ([NSArray arrayWithObjects: @"xml", nil])); skipSet = [NSMutableCharacterSet new]; [skipSet formUnionWithCharacterSet: [NSCharacterSet controlCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet illegalCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet punctuationCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet symbolCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet decimalDigitCharacterSet]]; [skipSet formUnionWithCharacterSet: [NSCharacterSet characterSetWithCharactersInString: @"+-=<>&@$*%#\"\'^`|~_/\\"]]; extractor = extr; } return self; } - (NSArray *)pathExtensions { return extensions; } - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata { if (testdata && ([attributes fileSize] < MAXFSIZE)) { return ([extensions containsObject: ext]); } return NO; } - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *mddict = [NSMutableDictionary dictionary]; GSXMLParser *parser = [GSXMLParser parserWithContentsOfFile: path]; GSXMLDocument *doc = nil; NSString *contents = nil; BOOL success = NO; if (parser && [parser parse]) { doc = [[parser document] xsltTransform: stylesheet]; contents = [doc description]; if (contents && [contents length]) { NSScanner *scanner = [NSScanner scannerWithString: contents]; SEL scanSel = @selector(scanUpToCharactersFromSet:intoString:); IMP scanImp = [scanner methodForSelector: scanSel]; NSMutableDictionary *wordsDict = [NSMutableDictionary dictionary]; NSCountedSet *wordset = [[NSCountedSet alloc] initWithCapacity: 1]; unsigned long wcount = 0; NSString *word; if ([scanner scanString: @"" intoString: NULL]) { [scanner scanString: @"?>" intoString: NULL]; } } [scanner setCharactersToBeSkipped: skipSet]; while ([scanner isAtEnd] == NO) { (*scanImp)(scanner, scanSel, skipSet, &word); if (word) { unsigned wl = [word length]; if ((wl > 3) && (wl < WORD_MAX)) { [wordset addObject: word]; } wcount++; } } [wordsDict setObject: wordset forKey: @"wset"]; RELEASE (wordset); [wordsDict setObject: [NSNumber numberWithUnsignedLong: wcount] forKey: @"wcount"]; [mddict setObject: wordsDict forKey: @"words"]; } } success = [extractor setMetadata: mddict forPath: path withID: path_id]; RELEASE (arp); return success; } @end gworkspace-1.1.0/GWMetadata/gmds/mdextractor/Extractors/extractors.h.in0000644000175000001440000000115713214346542025505 0ustar multixusers/* extractors.h.in. Generated from configure.ac by autoheader. */ /* debug logging */ #undef GW_DEBUG_LOG /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Path to unzip */ #undef UNZIP_PATH gworkspace-1.1.0/GWMetadata/gmds/mdextractor/GNUmakefile0000644000175000001440000000140713251572120022435 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = Extractors TOOL_NAME = mdextractor mdextractor_OBJC_FILES = mdextractor.m \ updater.m mdextractor_TOOL_LIBS += -lgnustep-gui mdextractor_TOOL_LIBS += -L../../../GWMetadata/MDKit/MDKit.framework -lMDKit mdextractor_TOOL_LIBS += -L../../../DBKit/$(GNUSTEP_OBJ_DIR) -lDBKit mdextractor_TOOL_LIBS += -L../../../FSNode/FSNode.framework -lFSNode ADDITIONAL_INCLUDE_DIRS += -I../../../GWMetadata/MDKit ADDITIONAL_INCLUDE_DIRS += -I../../../GWMetadata/gmds ADDITIONAL_INCLUDE_DIRS += -I../../../DBKit -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdextractor/GNUmakefile.postamble0000644000175000001440000000137013251572120024421 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f GNUmakefile config.status config.log config.cache TAGS config.h # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdextractor/GNUmakefile.preamble0000644000175000001440000000134413214346542024231 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ -I../../MDKit -I../../../DBKit ADDITIONAL_LIB_DIRS += -L../../MDKit/MDKit.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) -L../../../DBKit/$(GNUSTEP_OBJ_DIR) -L../../../FSNode/FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../../../DBKit/$(GNUSTEP_OBJ_DIR) # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += -lFSNode -lsqlite3 gworkspace-1.1.0/GWMetadata/gmds/mdextractor/mdextractor.h0000644000175000001440000001553514751213523023104 0ustar multixusers/* mdextractor.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MDEXTRACTOR_H #define MDEXTRACTOR_H #include #include "MDKQuery.h" #include "SQLite.h" #include "DBKPathsTree.h" @class GMDSIndexablePath; @protocol FSWClientProtocol - (oneway void)watchedPathDidChange:(NSData *)info; - (oneway void)globalWatchedPathDidChange:(NSDictionary *)info; @end @protocol FSWatcherProtocol - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; @end @protocol DDBdProtocol - (NSArray *)userMetadataForPath:(NSString *)apath; @end @protocol ExtractorsProtocol - (id)initForExtractor:(id)extr; - (NSArray *)pathExtensions; - (BOOL)canExtractFromFileType:(NSString *)type withExtension:(NSString *)ext attributes:(NSDictionary *)attributes testData:(NSData *)testdata; - (BOOL)extractMetadataAtPath:(NSString *)path withID:(int)path_id attributes:(NSDictionary *)attributes; @end @interface GMDSExtractor: NSObject { NSMutableArray *indexablePaths; pcomp *includePathsTree; pcomp *excludedPathsTree; NSMutableSet *excludedSuffixes; BOOL indexingEnabled; BOOL extracting; BOOL subpathsChanged; NSString *dbdir; NSString *dbpath; SQLite *sqlite; NSMutableDictionary *extractors; id textExtractor; NSConnection *conn; NSString *indexedStatusPath; NSDistributedLock *indexedStatusLock; NSTimer *statusTimer; NSFileHandle *errHandle; NSFileManager *fm; id ws; NSNotificationCenter *nc; NSNotificationCenter *dnc; // // fswatcher_update // id fswatcher; NSMutableArray *fswupdatePaths; NSMutableDictionary *fswupdateSkipBuff; NSMutableArray *lostPaths; NSTimer *fswupdateTimer; NSTimer *lostPathsTimer; // // ddbd_update // id ddbd; // // scheduled_update // NSMutableArray *directories; int dirpos; NSTimer *schedupdateTimer; // // update_notifications // NSTimer *notificationsTimer; NSDate *notifDate; } - (void)indexedDirectoriesChanged:(NSNotification *)notification; - (BOOL)synchronizePathsStatus:(BOOL)onstart; - (NSArray *)readPathsStatus; - (void)writePathsStatus:(id)sender; - (NSDictionary *)infoOfPath:(NSString *)path inSavedStatus:(NSArray *)status; - (void)updateStatusOfPath:(GMDSIndexablePath *)indpath startTime:(NSDate *)stime endTime:(NSDate *)etime filesCount:(unsigned long)count indexedDone:(BOOL)indexed; - (GMDSIndexablePath *)indexablePathWithPath:(NSString *)path; - (GMDSIndexablePath *)ancestorOfAddedPath:(NSString *)path; - (GMDSIndexablePath *)ancestorForAddingPath:(NSString *)path; - (void)startExtracting; - (void)stopExtracting; - (BOOL)extractFromPath:(GMDSIndexablePath *)indpath; - (int)insertOrUpdatePath:(NSString *)path ofType:(NSString *)type withAttributes:(NSDictionary *)attributes; - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id; - (id)extractorForPath:(NSString *)path ofType:(NSString *)type withAttributes:(NSDictionary *)attributes; - (void)loadExtractors; - (BOOL)opendb; - (void)logError:(NSString *)err; - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; - (void)connectionDidDie:(NSNotification *)notification; @end @interface GMDSExtractor (updater) - (void)setupUpdaters; - (BOOL)addPath:(NSString *)path; - (BOOL)updatePath:(NSString *)path; - (BOOL)updateRenamedPath:(NSString *)path oldPath:(NSString *)oldpath isDirectory:(BOOL)isdir; - (BOOL)removePath:(NSString *)path; - (void)checkLostPaths:(id)sender; - (NSArray *)filteredDirectoryContentsAtPath:(NSString *)path escapeEntries:(BOOL)escape; @end @interface GMDSExtractor (fswatcher_update) - (void)setupFswatcherUpdater; - (oneway void)globalWatchedPathDidChange:(NSDictionary *)info; - (void)processPendingChanges:(id)sender; - (void)connectFSWatcher:(id)sender; - (void)fswatcherConnectionDidDie:(NSNotification *)notif; @end @interface GMDSExtractor (ddbd_update) - (void)setupDDBdUpdater; - (void)connectDDBd; - (void)ddbdConnectionDidDie:(NSNotification *)notif; - (void)userAttributeModified:(NSNotification *)notif; @end @interface GMDSExtractor (scheduled_update) - (void)setupScheduledUpdater; - (void)checkNextDir:(id)sender; @end @interface GMDSExtractor (update_notifications) - (void)setupUpdateNotifications; - (void)notifyUpdates:(id)sender; @end @interface GMDSIndexablePath: NSObject { NSString *path; unsigned long filescount; BOOL indexed; NSDate *startTime; NSDate *endTime; NSMutableArray *subpaths; GMDSIndexablePath *ancestor; } - (id)initWithPath:(NSString *)apath ancestor:(GMDSIndexablePath *)prepath; - (NSString *)path; - (NSArray *)subpaths; - (GMDSIndexablePath *)subpathWithPath:(NSString *)apath; - (BOOL)acceptsSubpath:(NSString *)subpath; - (GMDSIndexablePath *)addSubpath:(NSString *)apath; - (void)removeSubpath:(NSString *)apath; - (BOOL)isSubpath; - (GMDSIndexablePath *)ancestor; - (unsigned long)filescount; - (void)setFilesCount:(unsigned long)count; - (NSDate *)startTime; - (void)setStartTime:(NSDate *)date; - (NSDate *)endTime; - (void)setEndTime:(NSDate *)date; - (BOOL)indexed; - (void)setIndexed:(BOOL)value; - (void)checkIndexingDone; - (NSDictionary *)info; @end void setUpdating(BOOL value); BOOL isDotFile(NSString *path); BOOL subPathOfPath(NSString *p1, NSString *p2); NSString *path_separator(void); #endif // MDEXTRACTOR_H gworkspace-1.1.0/GWMetadata/gmds/mdextractor/mdextractor.m0000644000175000001440000013124314751213523023104 0ustar multixusers/* mdextractor.m * * Copyright (C) 2006-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include #include #import #import #import "mdextractor.h" #import "dbschema.h" #include "config.h" #define DLENGTH 256 #define MAX_RETRY 1000 #define UPDATE_COUNT 100 #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) #define EXECUTE_QUERY(q, r) \ do { \ if ([sqlite executeQuery: q] == NO) { \ NSLog(@"error at: %@", q); \ return r; \ } \ } while (0) #define STATEMENT_EXECUTE_QUERY(s, r) \ do { \ if ([sqlite executeQueryWithStatement: s] == NO) { \ NSLog(@"error at: %@", [s query]); \ return r; \ } \ } while (0) static BOOL updating = NO; static void check_updating(sqlite3_context *context, int argc, sqlite3_value **argv) { sqlite3_result_int(context, (int)updating); } static void path_exists(sqlite3_context *context, int argc, sqlite3_value **argv) { const unsigned char *path = sqlite3_value_text(argv[0]); int exists = 0; if (path) { struct stat statbuf; exists = (stat((const char *)path, &statbuf) == 0); } sqlite3_result_int(context, exists); } static void path_moved(sqlite3_context *context, int argc, sqlite3_value **argv) { // FIXME: This code also exists in GWMetadata/gmds/gmds/gmds.m. // It may be useful to move it to a library. // old dirname, and its length const unsigned char *oldbase = sqlite3_value_text(argv[0]); int oldblen = strlen((const char *)oldbase); // new dirname, and its length const unsigned char *newbase = sqlite3_value_text(argv[1]); int newblen = strlen((const char *)newbase); // old full path, and its length const unsigned char *oldpath = sqlite3_value_text(argv[2]); int oldplen = strlen((const char *)oldpath); // new full path, and its length char *newpath = NULL; int newplen = newblen + (oldplen - oldblen); int i = newblen; int j; ///// // allocate space for new path + nul terminator newpath = malloc(newplen + 1); // copy the new dirname over, but restrict up to allocated space. // add a null terminator in case the newbase is exactly newplen // in size. strncpy(newpath, (const char *)newbase, newplen); newpath[newplen] = '\0'; // concatenate the new pathname. // equivalent of: strncat(newpath, oldpath+oldblen, newplen), // which may be safer as it will also add a nul terminator at // newpath[newplen]. for (j = oldblen; j < oldplen; j++) { newpath[i] = oldpath[j]; i++; } newpath[i] = '\0'; // return the path. sqlite3_result_text(context, newpath, strlen(newpath), SQLITE_TRANSIENT); free(newpath); } static void time_stamp(sqlite3_context *context, int argc, sqlite3_value **argv) { NSTimeInterval interval = [[NSDate date] timeIntervalSinceReferenceDate]; sqlite3_result_double(context, interval); } @implementation GMDSExtractor - (void)dealloc { if (statusTimer && [statusTimer isValid]) { [statusTimer invalidate]; } TEST_RELEASE (statusTimer); [dnc removeObserver: self]; [nc removeObserver: self]; RELEASE (indexablePaths); freeTree(includePathsTree); freeTree(excludedPathsTree); RELEASE (excludedSuffixes); RELEASE (dbpath); RELEASE (sqlite); RELEASE (indexedStatusPath); RELEASE (indexedStatusLock); TEST_RELEASE (errHandle); RELEASE (extractors); RELEASE (textExtractor); // // fswatcher_update // if (fswatcher && [[(NSDistantObject *)fswatcher connectionForProxy] isValid]) { [fswatcher unregisterClient: (id )self]; DESTROY (fswatcher); } if (fswupdateTimer && [fswupdateTimer isValid]) { [fswupdateTimer invalidate]; } TEST_RELEASE (fswupdateTimer); RELEASE (fswupdatePaths); RELEASE (fswupdateSkipBuff); RELEASE (lostPaths); if (lostPathsTimer && [lostPathsTimer isValid]) { [lostPathsTimer invalidate]; } TEST_RELEASE (lostPathsTimer); // // ddbd_update // DESTROY (ddbd); // // scheduled_update // if (schedupdateTimer && [schedupdateTimer isValid]) { [schedupdateTimer invalidate]; } TEST_RELEASE (schedupdateTimer); RELEASE (directories); // // update_notifications // if (notificationsTimer && [notificationsTimer isValid]) { [notificationsTimer invalidate]; } TEST_RELEASE (notificationsTimer); RELEASE (notifDate); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults; id entry; NSString *lockpath; NSString *errpath; unsigned i; fm = [NSFileManager defaultManager]; dbdir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; dbdir = [dbdir stringByAppendingPathComponent: @"gmds"]; dbdir = [dbdir stringByAppendingPathComponent: @".db"]; ASSIGN (indexedStatusPath, [dbdir stringByAppendingPathComponent: @"status.plist"]); lockpath = [dbdir stringByAppendingPathComponent: @"extractors.lock"]; errpath = [dbdir stringByAppendingPathComponent: @"error.log"]; dbdir = [dbdir stringByAppendingPathComponent: db_version]; RETAIN (dbdir); ASSIGN (dbpath, [dbdir stringByAppendingPathComponent: @"contents.db"]); sqlite = [SQLite new]; if ([self opendb] == NO) { DESTROY (self); return self; } indexedStatusLock = [[NSDistributedLock alloc] initWithPath: lockpath]; if (indexedStatusLock == nil) { DESTROY (self); return self; } if ([fm fileExistsAtPath: errpath] == NO) { [fm createFileAtPath: errpath contents: nil attributes: nil]; } errHandle = [NSFileHandle fileHandleForWritingAtPath: errpath]; RETAIN (errHandle); conn = [NSConnection defaultConnection]; [conn setRootObject: self]; [conn setDelegate: self]; if ([conn registerName: @"mdextractor"] == NO) { NSLog(@"unable to register with name server - quitting."); DESTROY (self); return self; } nc = [NSNotificationCenter defaultCenter]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: conn]; textExtractor = nil; [self loadExtractors]; dnc = [NSDistributedNotificationCenter defaultCenter]; [dnc addObserver: self selector: @selector(indexedDirectoriesChanged:) name: @"GSMetadataIndexedDirectoriesChanged" object: nil]; ws = [NSWorkspace sharedWorkspace]; defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize]; indexablePaths = [NSMutableArray new]; includePathsTree = newTreeWithIdentifier(@"included"); excludedPathsTree = newTreeWithIdentifier(@"excluded"); excludedSuffixes = [[NSMutableSet alloc] initWithCapacity: 1]; entry = [defaults arrayForKey: @"GSMetadataIndexablePaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { NSString *path = [entry objectAtIndex: i]; GMDSIndexablePath *indpath = [[GMDSIndexablePath alloc] initWithPath: path ancestor: nil]; [indexablePaths addObject: indpath]; RELEASE (indpath); insertComponentsOfPath(path, includePathsTree); } } entry = [defaults arrayForKey: @"GSMetadataExcludedPaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], excludedPathsTree); } } entry = [defaults arrayForKey: @"GSMetadataExcludedSuffixes"]; if (entry == nil) { entry = [NSArray arrayWithObjects: @"a", @"d", @"dylib", @"er1", @"err", @"extinfo", @"frag", @"la", @"log", @"o", @"out", @"part", @"sed", @"so", @"status", @"temp", @"tmp", nil]; } [excludedSuffixes addObjectsFromArray: entry]; indexingEnabled = [defaults boolForKey: @"GSMetadataIndexingEnabled"]; extracting = NO; subpathsChanged = NO; statusTimer = nil; [self setupUpdaters]; if ([self synchronizePathsStatus: YES] && indexingEnabled) { [self startExtracting]; } } return self; } - (void)indexedDirectoriesChanged:(NSNotification *)notification { CREATE_AUTORELEASE_POOL(arp); NSDictionary *info = [notification userInfo]; NSArray *indexable = [info objectForKey: @"GSMetadataIndexablePaths"]; NSArray *excluded = [info objectForKey: @"GSMetadataExcludedPaths"]; NSArray *suffixes = [info objectForKey: @"GSMetadataExcludedSuffixes"]; NSArray *excludedPaths = pathsOfTreeWithBase(excludedPathsTree); BOOL shouldExtract; unsigned count; unsigned i; emptyTreeWithBase(includePathsTree); for (i = 0; i < [indexable count]; i++) { NSString *path = [indexable objectAtIndex: i]; GMDSIndexablePath *indpath = [self indexablePathWithPath: path]; if (indpath == nil) { indpath = [[GMDSIndexablePath alloc] initWithPath: path ancestor: nil]; [indexablePaths addObject: indpath]; RELEASE (indpath); } insertComponentsOfPath(path, includePathsTree); } count = [indexablePaths count]; for (i = 0; i < count; i++) { GMDSIndexablePath *indpath = [indexablePaths objectAtIndex: i]; if ([indexable containsObject: [indpath path]] == NO) { [indexablePaths removeObject: indpath]; count--; i--; /* FIXME - remove the path from the db? - stop indexing if the current indexed path == indpath? */ } } emptyTreeWithBase(excludedPathsTree); for (i = 0; i < [excluded count]; i++) { NSString *path = [excluded objectAtIndex: i]; insertComponentsOfPath(path, excludedPathsTree); if ([excludedPaths containsObject: path] == NO) { GMDSIndexablePath *ancestor = [self ancestorOfAddedPath: path]; if (ancestor) { [ancestor removeSubpath: path]; /* FIXME - remove the path from the db? - stop indexing if the current indexed path == path? */ } } } for (i = 0; i < [excludedPaths count]; i++) { NSString *path = [excludedPaths objectAtIndex: i]; if ([excluded containsObject: path] == NO) { GMDSIndexablePath *indpath = [self ancestorForAddingPath: path]; if (indpath) { [indpath addSubpath: path]; subpathsChanged = YES; } } } [excludedSuffixes removeAllObjects]; [excludedSuffixes addObjectsFromArray: suffixes]; indexingEnabled = [[info objectForKey: @"GSMetadataIndexingEnabled"] boolValue]; shouldExtract = [self synchronizePathsStatus: NO]; if (indexingEnabled) { if (shouldExtract && (extracting == NO)) { subpathsChanged = NO; [self startExtracting]; } } else if (extracting) { [self stopExtracting]; } RELEASE (arp); } - (BOOL)synchronizePathsStatus:(BOOL)onstart { BOOL shouldExtract = NO; unsigned i; if (onstart) { NSArray *savedPaths = [self readPathsStatus]; for (i = 0; i < [indexablePaths count]; i++) { GMDSIndexablePath *indPath = [indexablePaths objectAtIndex: i]; NSDictionary *savedInfo = [self infoOfPath: [indPath path] inSavedStatus: savedPaths]; id entry; if (savedInfo) { entry = [savedInfo objectForKey: @"subpaths"]; if (entry) { unsigned j; for (j = 0; j < [entry count]; j++) { NSDictionary *subSaved = [entry objectAtIndex: j]; id subentry = [subSaved objectForKey: @"path"]; GMDSIndexablePath *subpath = [indPath addSubpath: subentry]; subentry = [subSaved objectForKey: @"indexed"]; [subpath setIndexed: [subentry boolValue]]; if ([subpath indexed] == NO) { shouldExtract = YES; } } } entry = [savedInfo objectForKey: @"count"]; if (entry) { [indPath setFilesCount: [entry unsignedLongValue]]; } entry = [savedInfo objectForKey: @"indexed"]; if (entry) { [indPath setIndexed: [entry boolValue]]; if ([indPath indexed] == NO) { shouldExtract = YES; } } } else { shouldExtract = YES; } } } else { for (i = 0; i < [indexablePaths count]; i++) { GMDSIndexablePath *indPath = [indexablePaths objectAtIndex: i]; if ([indPath indexed] == NO) { shouldExtract = YES; } if (shouldExtract == NO) { NSArray *subpaths = [indPath subpaths]; unsigned j; for (j = 0; j < [subpaths count]; j++) { GMDSIndexablePath *subpath = [subpaths objectAtIndex: j]; if ([subpath indexed] == NO) { shouldExtract = YES; break; } } } if (shouldExtract == YES) { break; } } [self writePathsStatus: nil]; } return shouldExtract; } - (NSArray *)readPathsStatus { NSArray *status = nil; if (indexedStatusPath && [fm isReadableFileAtPath: indexedStatusPath]) { if ([indexedStatusLock tryLock] == NO) { unsigned sleeps = 0; if ([[indexedStatusLock lockDate] timeIntervalSinceNow] < -20.0) { NS_DURING { [indexedStatusLock breakLock]; } NS_HANDLER { NSLog(@"Unable to break lock %@ ... %@", indexedStatusLock, localException); } NS_ENDHANDLER } for (sleeps = 0; sleeps < 10; sleeps++) { if ([indexedStatusLock tryLock]) { break; } sleeps++; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; } if (sleeps >= 10) { NSLog(@"Unable to obtain lock %@", indexedStatusLock); return [NSArray array]; } } status = [NSArray arrayWithContentsOfFile: indexedStatusPath]; [indexedStatusLock unlock]; } if (status != nil) { return status; } return [NSArray array]; } - (void)writePathsStatus:(id)sender { if (indexedStatusPath) { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *status = [NSMutableArray array]; unsigned i; if ([indexedStatusLock tryLock] == NO) { unsigned sleeps = 0; if ([[indexedStatusLock lockDate] timeIntervalSinceNow] < -20.0) { NS_DURING { [indexedStatusLock breakLock]; } NS_HANDLER { NSLog(@"Unable to break lock %@ ... %@", indexedStatusLock, localException); } NS_ENDHANDLER } for (sleeps = 0; sleeps < 10; sleeps++) { if ([indexedStatusLock tryLock]) { break; } sleeps++; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; } if (sleeps >= 10) { NSLog(@"Unable to obtain lock %@", indexedStatusLock); RELEASE (arp); return; } } for (i = 0; i < [indexablePaths count]; i++) { [status addObject: [[indexablePaths objectAtIndex: i] info]]; } [status writeToFile: indexedStatusPath atomically: YES]; [indexedStatusLock unlock]; GWDebugLog(@"paths status updated"); RELEASE (arp); } } - (NSDictionary *)infoOfPath:(NSString *)path inSavedStatus:(NSArray *)status { unsigned i; for (i = 0; i < [status count]; i++) { NSDictionary *info = [status objectAtIndex: i]; if ([[info objectForKey: @"path"] isEqual: path]) { return info; } } return nil; } - (void)updateStatusOfPath:(GMDSIndexablePath *)indpath startTime:(NSDate *)stime endTime:(NSDate *)etime filesCount:(unsigned long)count indexedDone:(BOOL)indexed { if ([indexablePaths containsObject: indpath]) { if (stime) { [indpath setStartTime: stime]; } if (etime) { [indpath setEndTime: etime]; } [indpath setFilesCount: count]; [indpath setIndexed: indexed]; } else { GMDSIndexablePath *ancestor = [indpath ancestor]; if (ancestor) { if (stime) { [indpath setStartTime: stime]; } if (etime) { [indpath setEndTime: etime]; } [indpath setFilesCount: count]; [indpath setIndexed: indexed]; if (indexed) { [ancestor checkIndexingDone]; } } } } - (GMDSIndexablePath *)indexablePathWithPath:(NSString *)path { unsigned i; for (i = 0; i < [indexablePaths count]; i++) { GMDSIndexablePath *indpath = [indexablePaths objectAtIndex: i]; if ([[indpath path] isEqual: path]) { return indpath; } } return nil; } - (GMDSIndexablePath *)ancestorForAddingPath:(NSString *)path { unsigned i; for (i = 0; i < [indexablePaths count]; i++) { GMDSIndexablePath *indpath = [indexablePaths objectAtIndex: i]; if ([indpath acceptsSubpath: path]) { return indpath; } } return nil; } - (GMDSIndexablePath *)ancestorOfAddedPath:(NSString *)path { unsigned i; for (i = 0; i < [indexablePaths count]; i++) { GMDSIndexablePath *indpath = [indexablePaths objectAtIndex: i]; if ([indpath subpathWithPath: path] != nil) { return indpath; } } return nil; } - (void)startExtracting { unsigned index = 0; GWDebugLog(@"start extracting"); extracting = YES; if (statusTimer && [statusTimer isValid]) { [statusTimer invalidate]; } DESTROY (statusTimer); statusTimer = [NSTimer scheduledTimerWithTimeInterval: 5.0 target: self selector: @selector(writePathsStatus:) userInfo: nil repeats: YES]; RETAIN (statusTimer); while (1) { if (index < [indexablePaths count]) { GMDSIndexablePath *indpath = [indexablePaths objectAtIndex: index]; NSArray *subpaths = [indpath subpaths]; BOOL indexed = [indpath indexed]; RETAIN (indpath); if (indexed == NO) { if ([self extractFromPath: indpath] == NO) { NSLog(@"An error occurred while processing %@", [indpath path]); RELEASE (indpath); break; } } if (subpaths) { unsigned i; for (i = 0; i < [subpaths count]; i++) { GMDSIndexablePath *subpath = [subpaths objectAtIndex: i]; RETAIN (subpath); if ([subpath indexed] == NO) { if ([self extractFromPath: subpath] == NO) { NSLog(@"An error occurred while processing %@", [subpath path]); RELEASE (subpath); break; } } TEST_RELEASE (subpath); } } TEST_RELEASE (indpath); } else { break; } if (extracting == NO) { break; } index++; } if (statusTimer && [statusTimer isValid]) { [statusTimer invalidate]; } DESTROY (statusTimer); [self writePathsStatus: nil]; extracting = NO; GWDebugLog(@"extracting done!"); if (subpathsChanged) { subpathsChanged = NO; [self startExtracting]; } } - (void)stopExtracting { extracting = NO; } - (BOOL)extractFromPath:(GMDSIndexablePath *)indpath { NSString *path = [NSString stringWithString: [indpath path]]; NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: NO]; if (attributes) { NSString *app = nil; NSString *type = nil; NSDirectoryEnumerator *enumerator; id extractor = nil; unsigned long fcount = 0; int path_id; [self updateStatusOfPath: indpath startTime: [NSDate date] endTime: nil filesCount: fcount indexedDone: NO]; EXECUTE_QUERY (@"BEGIN", NO); [ws getInfoForFile: path application: &app type: &type]; path_id = [self insertOrUpdatePath: path ofType: type withAttributes: attributes]; if (path_id == -1) { [sqlite executeQuery: @"ROLLBACK"]; return NO; } extractor = [self extractorForPath: path ofType: type withAttributes: attributes]; if (extractor) { if ([extractor extractMetadataAtPath: path withID: path_id attributes: attributes] == NO) { [sqlite executeQuery: @"ROLLBACK"]; return NO; } } [sqlite executeQuery: @"COMMIT"]; GWDebugLog(@"%@", path); fcount++; enumerator = [fm enumeratorAtPath: path]; while (1) { CREATE_AUTORELEASE_POOL(arp); NSString *entry = [enumerator nextObject]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow: 0.001]; BOOL skip = NO; [[NSRunLoop currentRunLoop] runUntilDate: date]; if (entry) { NSString *subpath = [path stringByAppendingPathComponent: entry]; NSString *ext = [[subpath pathExtension] lowercaseString]; skip = ([excludedSuffixes containsObject: ext] || isDotFile(subpath) || inTreeFirstPartOfPath(subpath, excludedPathsTree)); attributes = [fm fileAttributesAtPath: subpath traverseLink: NO]; if (attributes) { BOOL failed = NO; BOOL hasextractor = NO; if (skip == NO) { NSString *app = nil; NSString *type = nil; [sqlite executeQuery: @"BEGIN"]; [ws getInfoForFile: subpath application: &app type: &type]; path_id = [self insertOrUpdatePath: subpath ofType: type withAttributes: attributes]; if (path_id != -1) { extractor = [self extractorForPath: subpath ofType: type withAttributes: attributes]; if (extractor) { hasextractor = YES; if ([extractor extractMetadataAtPath: subpath withID: path_id attributes: attributes] == NO) { failed = YES; } } } else { failed = YES; } [sqlite executeQuery: (failed ? @"ROLLBACK" : @"COMMIT")]; if ((failed == NO) && (skip == NO)) { fcount++; } if ((fcount % UPDATE_COUNT) == 0) { [self updateStatusOfPath: indpath startTime: nil endTime: nil filesCount: fcount indexedDone: NO]; GWDebugLog(@"updating %lu", fcount); } } if (skip) { GWDebugLog(@"skipping %@", subpath); if ([attributes fileType] == NSFileTypeDirectory) { [enumerator skipDescendents]; } } else { if (failed) { [self logError: [NSString stringWithFormat: @"EXTRACT %@", subpath]]; GWDebugLog(@"error extracting at: %@", subpath); } else if (hasextractor == NO) { GWDebugLog(@"no extractor for: %@", subpath); } else { GWDebugLog(@"extracted: %@", subpath); } } } } else { RELEASE (arp); break; } if (extracting == NO) { GWDebugLog(@"stopped"); RELEASE (arp); break; } TEST_RELEASE (arp); } [self updateStatusOfPath: indpath startTime: nil endTime: [NSDate date] filesCount: fcount indexedDone: extracting]; [self writePathsStatus: nil]; GWDebugLog(@"done %@", path); } return YES; } - (int)insertOrUpdatePath:(NSString *)path ofType:(NSString *)type withAttributes:(NSDictionary *)attributes { NSTimeInterval interval = [[attributes fileModificationDate] timeIntervalSinceReferenceDate]; NSMutableArray *mdattributes = [NSMutableArray array]; NSString *qpath = stringForQuery(path); NSString *qname = stringForQuery([path lastPathComponent]); NSString *qext = stringForQuery([[path pathExtension] lowercaseString]); SQLitePreparedStatement *statement; NSString *query; int path_id; BOOL didexist; unsigned i; #define KEY_AND_ATTRIBUTE(k, a) \ do { \ if (a) { \ NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: \ k, @"key", a, @"attribute", nil]; \ [mdattributes addObject: dict]; \ } \ } while (0) query = @"SELECT id FROM paths WHERE path = :path"; statement = [sqlite statementForQuery: query withIdentifier: @"insert_or_update_1" bindings: SQLITE_TEXT, @":path", qpath, 0]; path_id = [sqlite getIntEntryWithStatement: statement]; didexist = (path_id != INT_MAX); if (didexist == NO) { BOOL isdir = ([attributes fileType] == NSFileTypeDirectory); if (isdir && ([directories containsObject: path] == NO)) { [directories addObject: path]; } query = @"INSERT INTO paths " @"(path, words_count, moddate, is_directory) " @"VALUES(:path, 0, :moddate, :isdir)"; statement = [sqlite statementForQuery: query withIdentifier: @"insert_or_update_2" bindings: SQLITE_TEXT, @":path", qpath, SQLITE_FLOAT, @":moddate", interval, SQLITE_INTEGER, @":isdir", isdir, 0]; STATEMENT_EXECUTE_QUERY (statement, -1); path_id = [sqlite lastInsertRowId]; } else { query = @"UPDATE paths " @"SET words_count = 0, moddate = :moddate " @"WHERE id = :pathid"; statement = [sqlite statementForQuery: query withIdentifier: @"insert_or_update_3" bindings: SQLITE_FLOAT, @":moddate", interval, SQLITE_INTEGER, @":pathid", path_id, 0]; STATEMENT_EXECUTE_QUERY (statement, -1); query = @"DELETE FROM attributes WHERE path_id = :pathid"; statement = [sqlite statementForQuery: query withIdentifier: @"insert_or_update_4" bindings: SQLITE_INTEGER, @":pathid", path_id, 0]; STATEMENT_EXECUTE_QUERY (statement, -1); query = @"DELETE FROM postings WHERE path_id = :pathid"; statement = [sqlite statementForQuery: query withIdentifier: @"insert_or_update_5" bindings: SQLITE_INTEGER, @":pathid", path_id, 0]; STATEMENT_EXECUTE_QUERY (statement, -1); } KEY_AND_ATTRIBUTE (@"GSMDItemFSName", qname); KEY_AND_ATTRIBUTE (@"GSMDItemFSExtension", qext); KEY_AND_ATTRIBUTE (@"GSMDItemFSType", type); if (ddbd) { NSArray *usermdata = [ddbd userMetadataForPath: path]; if (usermdata) { [mdattributes addObjectsFromArray: usermdata]; } } for (i = 0; i < [mdattributes count]; i++) { NSDictionary *dict = [mdattributes objectAtIndex: i]; NSString *key = [dict objectForKey: @"key"]; NSString *attribute = [dict objectForKey: @"attribute"]; query = @"INSERT INTO attributes (path_id, key, attribute) " @"VALUES(:pathid, :key, :attribute)"; statement = [sqlite statementForQuery: query withIdentifier: @"insert_or_update_6" bindings: SQLITE_INTEGER, @":pathid", path_id, SQLITE_TEXT, @":key", key, SQLITE_TEXT, @":attribute", attribute, 0]; STATEMENT_EXECUTE_QUERY (statement, -1); } return path_id; } - (BOOL)setMetadata:(NSDictionary *)mddict forPath:(NSString *)path withID:(int)path_id { NSDictionary *wordsdict; NSDictionary *attrsdict; SQLitePreparedStatement *statement; NSString *query; wordsdict = [mddict objectForKey: @"words"]; if (wordsdict) { NSCountedSet *wordset = [wordsdict objectForKey: @"wset"]; NSEnumerator *enumerator = [wordset objectEnumerator]; unsigned wcount = [[wordsdict objectForKey: @"wcount"] unsignedLongValue]; NSString *word; query = @"UPDATE paths " @"SET words_count = :wcount " @"WHERE id = :pathid"; statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_1" bindings: SQLITE_INTEGER, @":wcount", wcount, SQLITE_INTEGER, @":pathid", path_id, 0]; STATEMENT_EXECUTE_QUERY (statement, NO); while ((word = [enumerator nextObject])) { NSString *qword = stringForQuery(word); unsigned word_count = [wordset countForObject: word]; int word_id; query = @"SELECT id FROM words WHERE word = :word"; statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_2" bindings: SQLITE_TEXT, @":word", qword, 0]; word_id = [sqlite getIntEntryWithStatement: statement]; if (word_id == INT_MAX) { query = @"INSERT INTO words (word) VALUES(:word)"; statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_3" bindings: SQLITE_TEXT, @":word", qword, 0]; STATEMENT_EXECUTE_QUERY (statement, NO); word_id = [sqlite lastInsertRowId]; } query = @"INSERT INTO postings (word_id, path_id, word_count) " @"VALUES(:wordid, :pathid, :wordcount)"; statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_4" bindings: SQLITE_INTEGER, @":wordid", word_id, SQLITE_INTEGER, @":pathid", path_id, SQLITE_INTEGER, @":wordcount", word_count, 0]; STATEMENT_EXECUTE_QUERY (statement, NO); } } attrsdict = [mddict objectForKey: @"attributes"]; if (attrsdict) { NSArray *keys = [attrsdict allKeys]; unsigned i; for (i = 0; i < [keys count]; i++) { NSString *key = [keys objectAtIndex: i]; id mdvalue = [attrsdict objectForKey: key]; query = @"INSERT INTO attributes " @"(path_id, key, attribute) " @"VALUES(:pathid, :key, :mdvalue)"; if ([mdvalue isKindOfClass: [NSString class]]) { statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_5" bindings: SQLITE_INTEGER, @":pathid", path_id, SQLITE_TEXT, @":key", key, SQLITE_TEXT, @":mdvalue", mdvalue, 0]; } else if ([mdvalue isKindOfClass: [NSArray class]]) { statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_5" bindings: SQLITE_INTEGER, @":pathid", path_id, SQLITE_TEXT, @":key", key, SQLITE_TEXT, @":mdvalue", [mdvalue description], 0]; } else if ([mdvalue isKindOfClass: [NSNumber class]]) { statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_5" bindings: SQLITE_INTEGER, @":pathid", path_id, SQLITE_TEXT, @":key", key, SQLITE_TEXT, @":mdvalue", [mdvalue description], 0]; } else if ([mdvalue isKindOfClass: [NSData class]]) { statement = [sqlite statementForQuery: query withIdentifier: @"set_metadata_5" bindings: SQLITE_INTEGER, @":pathid", path_id, SQLITE_TEXT, @":key", key, SQLITE_BLOB, @":mdvalue", mdvalue, 0]; } else { return NO; } STATEMENT_EXECUTE_QUERY (statement, NO); } } return YES; } - (id)extractorForPath:(NSString *)path ofType:(NSString *)type withAttributes:(NSDictionary *)attributes { NSString *ext = [[path pathExtension] lowercaseString]; NSData *data = nil; id extractor = nil; if ([attributes fileType] == NSFileTypeRegular) { NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath: path]; if (handle) { NS_DURING { data = [handle readDataOfLength: DLENGTH]; } NS_HANDLER { data = nil; } NS_ENDHANDLER [handle closeFile]; } } extractor = [extractors objectForKey: ext]; if (extractor) { if ([extractor canExtractFromFileType: type withExtension: ext attributes: attributes testData: data]) { return extractor; } } if ([textExtractor canExtractFromFileType: type withExtension: ext attributes: attributes testData: data]) { return textExtractor; } return nil; } - (void)loadExtractors { NSString *bundlesDir; NSMutableArray *bundlesPaths; NSEnumerator *e1; NSEnumerator *enumerator; NSString *dir; int i; bundlesPaths = [NSMutableArray array]; e1 = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [e1 nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; enumerator = [[fm directoryContentsAtPath: bundlesDir] objectEnumerator]; while ((dir = [enumerator nextObject])) { if ([[dir pathExtension] isEqual: @"extr"]) { [bundlesPaths addObject: [bundlesDir stringByAppendingPathComponent: dir]]; } } } extractors = [NSMutableDictionary new]; for (i = 0; i < [bundlesPaths count]; i++) { NSString *bpath = [bundlesPaths objectAtIndex: i]; NSBundle *bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; if ([principalClass conformsToProtocol: @protocol(ExtractorsProtocol)]) { id extractor = [[principalClass alloc] initForExtractor: self]; if (extractor) { NSArray *extensions = [extractor pathExtensions]; if ([extensions containsObject: @"txt"]) { ASSIGN (textExtractor, extractor); } else { unsigned j; for (j = 0; j < [extensions count]; j++) { [extractors setObject: extractor forKey: [[extensions objectAtIndex: j] lowercaseString]]; } RELEASE ((id)extractor); } } } } } } - (BOOL)opendb { BOOL newdb; if ([sqlite opendbAtPath: dbpath isNew: &newdb]) { if (newdb) { if ([sqlite executeSimpleQuery: db_schema] == NO) { NSLog(@"unable to create the database at %@", dbpath); return NO; } else { GWDebugLog(@"contents database created"); } } } else { NSLog(@"unable to open the database at %@", dbpath); return NO; } [sqlite createFunctionWithName: @"checkUpdating" argumentsCount: 0 userFunction: check_updating]; [sqlite createFunctionWithName: @"pathExists" argumentsCount: 1 userFunction: path_exists]; [sqlite createFunctionWithName: @"pathMoved" argumentsCount: 3 userFunction: path_moved]; [sqlite createFunctionWithName: @"timeStamp" argumentsCount: 0 userFunction: time_stamp]; [sqlite executeQuery: @"PRAGMA cache_size = 20000"]; [sqlite executeQuery: @"PRAGMA count_changes = 0"]; [sqlite executeQuery: @"PRAGMA synchronous = OFF"]; [sqlite executeQuery: @"PRAGMA temp_store = MEMORY"]; if ([sqlite executeSimpleQuery: db_schema_tmp] == NO) { NSLog(@"unable to create temp tables"); [sqlite closeDb]; return NO; } /* only to avoid a compiler warning */ if (0) { NSLog(@"%@", user_db_schema); NSLog(@"%@", user_db_schema_tmp); } return YES; } - (void)logError:(NSString *)err { NSString *errbuf = [NSString stringWithFormat: @"%@\n", err]; NSData *data = [errbuf dataUsingEncoding: [NSString defaultCStringEncoding]]; if (data == nil) { data = [errbuf dataUsingEncoding: NSUnicodeStringEncoding]; } [errHandle seekToEndOfFile]; [errHandle writeData: data]; } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; { [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: newConn]; [newConn setDelegate: self]; GWDebugLog(@"new connection"); return YES; } - (void)connectionDidDie:(NSNotification *)notification { id connection = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; if (connection == conn) { NSLog(@"mdextractor connection has been destroyed. Exiting."); [sqlite closeDb]; exit(EXIT_FAILURE); } else { GWDebugLog(@"connection closed"); } } @end @implementation GMDSIndexablePath - (void)dealloc { RELEASE (path); TEST_RELEASE (startTime); TEST_RELEASE (endTime); RELEASE (subpaths); TEST_RELEASE (ancestor); [super dealloc]; } - (id)initWithPath:(NSString *)apath ancestor:(GMDSIndexablePath *)prepath { self = [super init]; if (self) { ASSIGN (path, apath); subpaths = [NSMutableArray new]; ancestor = nil; if (prepath) { ASSIGN (ancestor, prepath); } startTime = nil; endTime = nil; filescount = 0L; indexed = NO; } return self; } - (NSString *)path { return path; } - (NSArray *)subpaths { return subpaths; } - (GMDSIndexablePath *)subpathWithPath:(NSString *)apath { unsigned i; for (i = 0; i < [subpaths count]; i++) { GMDSIndexablePath *subpath = [subpaths objectAtIndex: i]; if ([[subpath path] isEqual: apath]) { return subpath; } } return nil; } - (BOOL)acceptsSubpath:(NSString *)subpath { if (subPathOfPath(path, subpath)) { return ([self subpathWithPath: subpath] == nil); } return NO; } - (GMDSIndexablePath *)addSubpath:(NSString *)apath { if ([self acceptsSubpath: apath]) { GMDSIndexablePath *subpath = [[GMDSIndexablePath alloc] initWithPath: apath ancestor: self]; [subpaths addObject: subpath]; RELEASE (subpath); return subpath; } return nil; } - (void)removeSubpath:(NSString *)apath { GMDSIndexablePath *subpath = [self subpathWithPath: apath]; if (subpath) { [subpaths removeObject: subpath]; } } - (BOOL)isSubpath { return (ancestor != nil); } - (GMDSIndexablePath *)ancestor { return ancestor; } - (unsigned long)filescount { return filescount; } - (void)setFilesCount:(unsigned long)count { filescount = count; } - (NSDate *)startTime { return startTime; } - (void)setStartTime:(NSDate *)date { ASSIGN (startTime, date); } - (NSDate *)endTime { return endTime; } - (void)setEndTime:(NSDate *)date { ASSIGN (endTime, date); } - (BOOL)indexed { return indexed; } - (void)setIndexed:(BOOL)value { indexed = value; } - (void)checkIndexingDone { unsigned count = [subpaths count]; unsigned i; for (i = 0; i < count; i++) { GMDSIndexablePath *subpath = [subpaths objectAtIndex: i]; [self setFilesCount: (filescount + [subpath filescount])]; if ([subpath indexed]) { [self setEndTime: [subpath endTime]]; [subpaths removeObject: subpath]; count--; i--; } } } - (NSDictionary *)info { NSMutableDictionary *info = [NSMutableDictionary dictionary]; NSMutableArray *subinfo = [NSMutableArray array]; unsigned i; [info setObject: path forKey: @"path"]; if (startTime) { [info setObject: startTime forKey: @"start_time"]; } if (endTime) { [info setObject: endTime forKey: @"end_time"]; } [info setObject: [NSNumber numberWithBool: indexed] forKey: @"indexed"]; [info setObject: [NSNumber numberWithUnsignedLong: filescount] forKey: @"count"]; for (i = 0; i < [subpaths count]; i++) { [subinfo addObject: [[subpaths objectAtIndex: i] info]]; } [info setObject: [subinfo makeImmutableCopyOnFail: NO] forKey: @"subpaths"]; return [info makeImmutableCopyOnFail: NO]; } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL(pool); NSProcessInfo *info = [NSProcessInfo processInfo]; NSMutableArray *args = AUTORELEASE ([[info arguments] mutableCopy]); BOOL subtask = YES; if ([[info arguments] containsObject: @"--daemon"]) { subtask = NO; } if (subtask) { NSTask *task = [NSTask new]; NS_DURING { [args removeObjectAtIndex: 0]; [args addObject: @"--daemon"]; [task setLaunchPath: [[NSBundle mainBundle] executablePath]]; [task setArguments: args]; [task setEnvironment: [info environment]]; [task launch]; DESTROY (task); } NS_HANDLER { fprintf (stderr, "unable to launch the mdextractor task. exiting.\n"); DESTROY (task); } NS_ENDHANDLER exit(EXIT_FAILURE); } RELEASE(pool); { CREATE_AUTORELEASE_POOL (pool); GMDSExtractor *extractor; [NSApplication sharedApplication]; extractor = [GMDSExtractor new]; RELEASE (pool); if (extractor != nil) { CREATE_AUTORELEASE_POOL (pool); [[NSRunLoop currentRunLoop] run]; RELEASE (pool); } } exit(EXIT_SUCCESS); } void setUpdating(BOOL value) { updating = value; } BOOL isDotFile(NSString *path) { NSArray *components; NSEnumerator *e; NSString *c; BOOL found; if (path == nil) return NO; found = NO; components = [path pathComponents]; e = [components objectEnumerator]; while ((c = [e nextObject]) && !found) { if (([c length] > 0) && ([c characterAtIndex:0] == '.')) found = YES; } return found; } BOOL subPathOfPath(NSString *p1, NSString *p2) { int l1 = [p1 length]; int l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqual: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqual: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } NSString *path_separator(void) { static NSString *separator = nil; if (separator == nil) { #if defined(__MINGW32__) separator = @"\\"; #else separator = @"/"; #endif RETAIN (separator); } return separator; } gworkspace-1.1.0/GWMetadata/gmds/mdextractor/updater.m0000644000175000001440000010051214751213523022207 0ustar multixusers/* updater.m * * Copyright (C) 2006-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include "config.h" #include #include #include #include #import #import #import "mdextractor.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) #define EXECUTE_QUERY(q, r) \ do { \ if ([sqlite executeQuery: q] == NO) { \ NSLog(@"error at: %@", q); \ return r; \ } \ } while (0) #define EXECUTE_OR_ROLLBACK(q, r) \ do { \ if ([sqlite executeQuery: q] == NO) { \ [sqlite executeQuery: @"ROLLBACK"]; \ NSLog(@"error at: %@", q); \ return r; \ } \ } while (0) #define STATEMENT_EXECUTE_QUERY(s, r) \ do { \ if ([sqlite executeQueryWithStatement: s] == NO) { \ NSLog(@"error at: %@", [s query]); \ return r; \ } \ } while (0) #define STATEMENT_EXECUTE_OR_ROLLBACK(s, u, r) \ do { \ if ([sqlite executeQueryWithStatement: s] == NO) { \ if (u) { \ setUpdating(NO); \ } \ [sqlite executeQuery: @"ROLLBACK"]; \ NSLog(@"error at: %@", [s query]); \ return r; \ } \ } while (0) #define SKIP_EXPIRE (1.0) #define LOST_PATHS_EXPIRE (60.0) #define LOST_PATHS_CHECK (30.0) #define SCHED_TIME (1.0) #define NOTIF_TIME (60.0) @implementation GMDSExtractor (updater) - (void)setupUpdaters { [self setupFswatcherUpdater]; [self setupDDBdUpdater]; [self setupScheduledUpdater]; [self setupUpdateNotifications]; } - (BOOL)addPath:(NSString *)path { NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: NO]; if (attributes) { NSString *app = nil; NSString *type = nil; id extractor = nil; BOOL failed = NO; BOOL hasextractor = NO; int path_id; EXECUTE_QUERY (@"BEGIN", NO); setUpdating(YES); [ws getInfoForFile: path application: &app type: &type]; path_id = [self insertOrUpdatePath: path ofType: type withAttributes: attributes]; if (path_id != -1) { extractor = [self extractorForPath: path ofType: type withAttributes: attributes]; if (extractor) { hasextractor = YES; if ([extractor extractMetadataAtPath: path withID: path_id attributes: attributes] == NO) { failed = YES; } } } else { failed = YES; } if (failed == NO) { setUpdating(NO); [sqlite executeQuery: @"COMMIT"]; if (hasextractor) { GWDebugLog(@"updated: %@", path); } else { GWDebugLog(@"no extractor for: %@", path); } } else { setUpdating(NO); [sqlite executeQuery: @"ROLLBACK"]; [self logError: [NSString stringWithFormat: @"UPDATE %@", path]]; GWDebugLog(@"error updating at: %@", path); return NO; } if ([attributes fileType] == NSFileTypeDirectory) { NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath: path]; while (1) { CREATE_AUTORELEASE_POOL(arp); NSString *entry = [enumerator nextObject]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow: 0.001]; BOOL skip = NO; [[NSRunLoop currentRunLoop] runUntilDate: date]; if (entry) { NSString *subpath = [path stringByAppendingPathComponent: entry]; NSString *ext = [[subpath pathExtension] lowercaseString]; skip = ([excludedSuffixes containsObject: ext] || isDotFile(subpath) || inTreeFirstPartOfPath(subpath, excludedPathsTree)); attributes = [fm fileAttributesAtPath: subpath traverseLink: NO]; if (attributes) { failed = NO; hasextractor = NO; if (skip == NO) { NSString *app = nil; NSString *type = nil; [sqlite executeQuery: @"BEGIN"]; setUpdating(YES); [ws getInfoForFile: subpath application: &app type: &type]; path_id = [self insertOrUpdatePath: subpath ofType: type withAttributes: attributes]; if (path_id != -1) { extractor = [self extractorForPath: subpath ofType: type withAttributes: attributes]; if (extractor) { hasextractor = YES; if ([extractor extractMetadataAtPath: subpath withID: path_id attributes: attributes] == NO) { failed = YES; } } } else { failed = YES; } setUpdating(NO); [sqlite executeQuery: @"COMMIT"]; } if (skip) { GWDebugLog(@"skipping (update) %@", subpath); if ([attributes fileType] == NSFileTypeDirectory) { [enumerator skipDescendents]; } } else { if (failed) { [self logError: [NSString stringWithFormat: @"UPDATE %@", subpath]]; GWDebugLog(@"error updating: %@", subpath); } else if (hasextractor == NO) { GWDebugLog(@"no extractor for: %@", subpath); } else { GWDebugLog(@"updated: %@", subpath); } } } } else { RELEASE (arp); break; } TEST_RELEASE (arp); } } } return YES; } - (BOOL)updatePath:(NSString *)path { NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: NO]; if (attributes) { NSString *app = nil; NSString *type = nil; id extractor; int path_id; EXECUTE_QUERY (@"BEGIN", NO); setUpdating(YES); [ws getInfoForFile: path application: &app type: &type]; path_id = [self insertOrUpdatePath: path ofType: type withAttributes: attributes]; if (path_id == -1) { setUpdating(NO); [sqlite executeQuery: @"COMMIT"]; return NO; } extractor = [self extractorForPath: path ofType: type withAttributes: attributes]; if (extractor) { if ([extractor extractMetadataAtPath: path withID: path_id attributes: attributes] == NO) { setUpdating(NO); [sqlite executeQuery: @"COMMIT"]; return NO; } } setUpdating(NO); [sqlite executeQuery: @"COMMIT"]; } return YES; } - (BOOL)updateRenamedPath:(NSString *)path oldPath:(NSString *)oldpath isDirectory:(BOOL)isdir { NSString *qpath = stringForQuery(path); NSString *qoldpath = stringForQuery(oldpath); SQLitePreparedStatement *statement; NSString *query; EXECUTE_QUERY (@"BEGIN", NO); setUpdating(YES); statement = [sqlite statementForQuery: @"DELETE FROM renamed_paths" withIdentifier: @"update_renamed_1" bindings: 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); statement = [sqlite statementForQuery: @"DELETE FROM renamed_paths_base" withIdentifier: @"update_renamed_2" bindings: 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); query = @"INSERT INTO renamed_paths_base " @"(base, oldbase) " @"VALUES(:path, :oldpath)"; statement = [sqlite statementForQuery: query withIdentifier: @"update_renamed_3" bindings: SQLITE_TEXT, @":path", qpath, SQLITE_TEXT, @":oldpath", qoldpath, 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); if (isdir) { query = @"INSERT INTO renamed_paths " @"(id, path, base, oldbase) " @"SELECT paths.id, paths.path, " @"renamed_paths_base.base, renamed_paths_base.oldbase " @"FROM paths, renamed_paths_base " @"WHERE paths.path = :oldpath " @"OR paths.path GLOB :minpath "; statement = [sqlite statementForQuery: query withIdentifier: @"update_renamed_4" bindings: SQLITE_TEXT, @":oldpath", qoldpath, SQLITE_TEXT, @":minpath", [NSString stringWithFormat: @"%@%@*", qoldpath, path_separator()], 0]; } else { query = @"INSERT INTO renamed_paths " @"(id, path, base, oldbase) " @"SELECT paths.id, paths.path, " @"renamed_paths_base.base, renamed_paths_base.oldbase " @"FROM paths, renamed_paths_base " @"WHERE paths.path = :oldpath"; statement = [sqlite statementForQuery: query withIdentifier: @"update_renamed_5" bindings: SQLITE_TEXT, @":oldpath", qoldpath, 0]; } STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); setUpdating(NO); EXECUTE_QUERY (@"COMMIT", NO); return YES; } - (BOOL)removePath:(NSString *)path { NSString *qpath = stringForQuery(path); SQLitePreparedStatement *statement; NSString *query; EXECUTE_QUERY (@"BEGIN", NO); setUpdating(YES); statement = [sqlite statementForQuery: @"DELETE FROM removed_id" withIdentifier: @"remove_path_1" bindings: 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); query = @"INSERT INTO removed_id (id) " @"SELECT id FROM paths " @"WHERE path = :path " @"OR path GLOB :minpath"; statement = [sqlite statementForQuery: query withIdentifier: @"remove_path_2" bindings: SQLITE_TEXT, @":path", qpath, SQLITE_TEXT, @":minpath", [NSString stringWithFormat: @"%@%@*", qpath, path_separator()], 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); query = @"DELETE FROM attributes WHERE path_id IN (SELECT id FROM removed_id)"; statement = [sqlite statementForQuery: query withIdentifier: @"remove_path_3" bindings: 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); query = @"DELETE FROM postings WHERE path_id IN (SELECT id FROM removed_id)"; statement = [sqlite statementForQuery: query withIdentifier: @"remove_path_4" bindings: 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); query = @"DELETE FROM paths WHERE id IN (SELECT id FROM removed_id)"; statement = [sqlite statementForQuery: query withIdentifier: @"remove_path_5" bindings: 0]; STATEMENT_EXECUTE_OR_ROLLBACK (statement, YES, NO); setUpdating(NO); EXECUTE_QUERY (@"COMMIT", NO); return YES; } - (void)checkLostPaths:(id)sender { NSDate *now = [NSDate date]; unsigned count = [lostPaths count]; unsigned i; for (i = 0; i < count; i++) { NSDictionary *d = [lostPaths objectAtIndex: i]; NSDate *stamp = [d objectForKey: @"stamp"]; if ([stamp timeIntervalSinceDate: now] > LOST_PATHS_EXPIRE) { GWDebugLog(@"removing expired lost path: %@ ", [d objectForKey: @"path"]); [lostPaths removeObjectAtIndex: i]; count--; i--; } } } - (NSArray *)filteredDirectoryContentsAtPath:(NSString *)path escapeEntries:(BOOL)escape { NSMutableArray *contents = [NSMutableArray array]; NSEnumerator *enumerator = [[fm directoryContentsAtPath: path] objectEnumerator]; NSString *fname; while ((fname = [enumerator nextObject])) { NSString *subpath = [path stringByAppendingPathComponent: fname]; NSString *ext = [[subpath pathExtension] lowercaseString]; if (([excludedSuffixes containsObject: ext] == NO) && (isDotFile(subpath) == NO) && (inTreeFirstPartOfPath(subpath, excludedPathsTree) == NO)) { [contents addObject: (escape ? stringForQuery(subpath) : subpath)]; } } return [contents makeImmutableCopyOnFail: NO]; } @end @implementation GMDSExtractor (fswatcher_update) - (void)setupFswatcherUpdater { fswupdatePaths = [NSMutableArray new]; fswupdateSkipBuff = [NSMutableDictionary new]; lostPaths = [NSMutableArray new]; fswupdateTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target: self selector: @selector(processPendingChanges:) userInfo: nil repeats: YES]; RETAIN (fswupdateTimer); lostPathsTimer = [NSTimer scheduledTimerWithTimeInterval: LOST_PATHS_CHECK target: self selector: @selector(checkLostPaths:) userInfo: nil repeats: YES]; RETAIN (lostPathsTimer); fswatcher = nil; [self connectFSWatcher: nil]; } - (oneway void)globalWatchedPathDidChange:(NSDictionary *)info { if (extracting == NO) { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSString *path = [info objectForKey: @"path"]; NSString *event = [info objectForKey: @"event"]; NSNumber *exists = nil; if ([event isEqual: @"GWWatchedPathDeleted"]) { exists = [NSNumber numberWithBool: NO]; } else if ([event isEqual: @"GWWatchedFileModified"] || [event isEqual: @"GWFileCreatedInWatchedDirectory"]) { exists = [NSNumber numberWithBool: YES]; } else if ([event isEqual: @"GWWatchedPathRenamed"]) { NSString *oldpath = [info objectForKey: @"oldpath"]; if (oldpath != nil) { [dict setObject: oldpath forKey: @"oldpath"]; } exists = [NSNumber numberWithBool: YES]; } [dict setObject: path forKey: @"path"]; [dict setObject: event forKey: @"event"]; [dict setObject: exists forKey: @"exists"]; if ([fswupdatePaths containsObject: dict] == NO) { NSDictionary *skipInfo = [fswupdateSkipBuff objectForKey: path]; BOOL caninsert = YES; if (skipInfo != nil) { NSNumber *didexists = [skipInfo objectForKey: @"exists"]; NSDate *stamp = [skipInfo objectForKey: @"stamp"]; NSDate *now = [NSDate date]; if ([exists isEqual: didexists] && ([now timeIntervalSinceDate: stamp] < SKIP_EXPIRE)) { caninsert = NO; } else { skipInfo = [NSDictionary dictionaryWithObjectsAndKeys: event, @"event", exists, @"exists", now, @"stamp", nil]; [fswupdateSkipBuff setObject: skipInfo forKey: path]; } } else { skipInfo = [NSDictionary dictionaryWithObjectsAndKeys: event, @"event", exists, @"exists", [NSDate date], @"stamp", nil]; [fswupdateSkipBuff setObject: skipInfo forKey: path]; } if (caninsert) { [fswupdatePaths insertObject: dict atIndex: 0]; GWDebugLog(@"queueing: %@ - %@", path, event); } } RELEASE (arp); } } - (void)processPendingChanges:(id)sender { if (extracting == NO) { CREATE_AUTORELEASE_POOL(arp); while ([fswupdatePaths count] > 0) { NSDictionary *dict = [fswupdatePaths lastObject]; NSString *path = [dict objectForKey: @"path"]; NSString *event = [dict objectForKey: @"event"]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow: 0.001]; [[NSRunLoop currentRunLoop] runUntilDate: date]; if ([event isEqual: @"GWWatchedFileModified"] || [event isEqual: @"GWFileCreatedInWatchedDirectory"]) { if ([fm fileExistsAtPath: path]) { GWDebugLog(@"db update: %@", path); if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { /* "GWFileCreatedInWatchedDirectory" is reported only by fswatcher-inotify. In this case, if "path" is a directory, we must add also its contents. */ if ([self addPath: path] == NO) { NSLog(@"An error occurred while processing %@", path); } } else { if ([self updatePath: path] == NO) { NSLog(@"An error occurred while processing %@", path); } } } else { NSMutableDictionary *d = [NSMutableDictionary dictionary]; [d setObject: path forKey: @"path"]; [d setObject: [NSDate date] forKey: @"stamp"]; GWDebugLog(@"add lost path: %@", path); [lostPaths addObject: d]; } } else if ([event isEqual: @"GWWatchedPathDeleted"]) { if ([fm fileExistsAtPath: path] == NO) { GWDebugLog(@"db remove: %@", path); [self removePath: path]; } } else if ([event isEqual: @"GWWatchedPathRenamed"]) { BOOL isdir; if ([fm fileExistsAtPath: path isDirectory: &isdir]) { NSString *oldpath = [dict objectForKey: @"oldpath"]; if (oldpath != nil) { unsigned count = [lostPaths count]; unsigned i; for (i = 0; i < count; i++) { NSMutableDictionary *d = [lostPaths objectAtIndex: i]; NSString *lost = [d objectForKey: @"path"]; if (subPathOfPath(oldpath, lost)) { unsigned pos = [lost rangeOfString: oldpath].length +1; NSString *part = [lost substringFromIndex: pos]; NSString *newpath = [path stringByAppendingPathComponent: part]; GWDebugLog(@"found lost path: %@", lost); [self removePath: lost]; if ([fm fileExistsAtPath: newpath]) { [self updatePath: newpath]; [lostPaths removeObjectAtIndex: i]; count--; i--; } else { [d setObject: newpath forKey: @"path"]; [d setObject: [NSDate date] forKey: @"stamp"]; GWDebugLog(@"changed lost path: %@ to: %@", lost, newpath); } } } GWDebugLog(@"db rename: %@ -> %@", oldpath, path); if ([self updateRenamedPath: path oldPath: oldpath isDirectory: isdir] == NO) { NSLog(@"An error occurred while processing %@", path); } } else { GWDebugLog(@"db update renamed: %@", path); [self addPath: path]; } } else { NSMutableDictionary *d = [NSMutableDictionary dictionary]; [d setObject: path forKey: @"path"]; [d setObject: [NSDate date] forKey: @"stamp"]; [lostPaths addObject: d]; GWDebugLog(@"add lost path: %@", path); } } [fswupdatePaths removeLastObject]; } { NSArray *skipPaths = [fswupdateSkipBuff allKeys]; NSDate *now = [NSDate date]; unsigned i; RETAIN (skipPaths); for (i = 0; i < [skipPaths count]; i++) { NSString *path = [skipPaths objectAtIndex: i]; NSDictionary *skipInfo = [fswupdateSkipBuff objectForKey: path]; NSDate *stamp = [skipInfo objectForKey: @"stamp"]; if ([now timeIntervalSinceDate: stamp] > SKIP_EXPIRE) { [fswupdateSkipBuff removeObjectForKey: path]; } } RELEASE (skipPaths); } RELEASE (arp); } } - (void)connectFSWatcher:(id)sender { if (fswatcher == nil) { fswatcher = [NSConnection rootProxyForConnectionWithRegisteredName: @"fswatcher" host: @""]; if (fswatcher == nil) { NSString *cmd; NSMutableArray *arguments; int i; cmd = [NSTask launchPathForTool: @"fswatcher"]; arguments = [NSMutableArray arrayWithCapacity:2]; [arguments addObject:@"--daemon"]; [arguments addObject:@"--auto"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: arguments]; for (i = 0; i < 40; i++) { [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; fswatcher = [NSConnection rootProxyForConnectionWithRegisteredName: @"fswatcher" host: @""]; if (fswatcher) break; } } if (fswatcher) { RETAIN (fswatcher); [fswatcher setProtocolForProxy: @protocol(FSWatcherProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(fswatcherConnectionDidDie:) name: NSConnectionDidDieNotification object: [fswatcher connectionForProxy]]; [fswatcher registerClient: (id )self isGlobalWatcher: YES]; NSLog(@"fswatcher connected!"); } else { NSLog(@"unable to contact fswatcher!"); } } } - (void)fswatcherConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [fswatcher connectionForProxy], NSInternalInconsistencyException); RELEASE (fswatcher); fswatcher = nil; NSLog(@"The fswatcher connection died!"); [NSTimer scheduledTimerWithTimeInterval: 5.0 target: self selector: @selector(connectFSWatcher:) userInfo: nil repeats: NO]; } @end @implementation GMDSExtractor (ddbd_update) - (void)setupDDBdUpdater { ddbd = nil; [self connectDDBd]; [dnc addObserver: self selector: @selector(userAttributeModified:) name: @"GSMetadataUserAttributeModifiedNotification" object: nil]; } - (void)connectDDBd { if (ddbd == nil) { ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd == nil) { NSString *cmd; int i; cmd = [NSTask launchPathForTool: @"ddbd"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 0; i < 40; i++) { [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd) { break; } } } if (ddbd) { RETAIN (ddbd); [ddbd setProtocolForProxy: @protocol(DDBdProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(ddbdConnectionDidDie:) name: NSConnectionDidDieNotification object: [ddbd connectionForProxy]]; NSLog(@"ddbd connected!"); } else { NSLog(@"unable to contact ddbd!"); } } } - (void)ddbdConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [ddbd connectionForProxy], NSInternalInconsistencyException); RELEASE (ddbd); ddbd = nil; NSLog(@"The ddbd connection died!"); [self connectDDBd]; } - (void)userAttributeModified:(NSNotification *)notif { if (extracting == NO) { NSString *path = [notif object]; NSString *ext = [[path pathExtension] lowercaseString]; if (([excludedSuffixes containsObject: ext] == NO) && (isDotFile(path) == NO) && inTreeFirstPartOfPath(path, includePathsTree) && (inTreeFirstPartOfPath(path, excludedPathsTree) == NO)) { GWDebugLog(@"ddbd_update: %@", path); [self updatePath: path]; } } } @end @implementation GMDSExtractor (scheduled_update) - (void)setupScheduledUpdater { NSString *query; NSArray *lines; NSUInteger i; CREATE_AUTORELEASE_POOL(arp); query = @"SELECT path FROM paths WHERE is_directory = 1"; lines = [sqlite resultsOfQuery: query]; directories = [NSMutableArray new]; for (i = 0; i < [lines count]; i++) { [directories addObject: [[lines objectAtIndex: i] objectForKey: @"path"]]; } dirpos = 0; schedupdateTimer = [NSTimer scheduledTimerWithTimeInterval: SCHED_TIME target: self selector: @selector(checkNextDir:) userInfo: nil repeats: YES]; RETAIN (schedupdateTimer); RELEASE (arp); } - (void)checkNextDir:(id)sender { if (extracting == NO) { CREATE_AUTORELEASE_POOL(arp); NSUInteger count = [directories count]; NSString *dir; NSDictionary *attributes; BOOL dirok; NSUInteger i; if (count == 0) { RELEASE(arp); return; } if ((dirpos >= count) || (dirpos < 0)) dirpos = 0; dir = [directories objectAtIndex: dirpos]; attributes = [fm fileAttributesAtPath: dir traverseLink: NO]; dirok = (attributes && ([attributes fileType] == NSFileTypeDirectory)); if (dirok) { NSArray *contents = [self filteredDirectoryContentsAtPath: dir escapeEntries: YES]; NSMutableDictionary *dbcontents = [NSMutableDictionary dictionary]; NSArray *dbpaths = nil; NSString *qdir = stringForQuery(dir); NSString *sep = path_separator(); NSString *query; SQLitePreparedStatement *statement; NSArray *results; query = @"SELECT path, moddate FROM paths " @"WHERE path > :minpath " @"AND path < :maxpath " @"AND path NOT GLOB :limit"; statement = [sqlite statementForQuery: query withIdentifier: @"check_next_dir" bindings: SQLITE_TEXT, @":minpath", [NSString stringWithFormat: @"%@%@", qdir, sep], SQLITE_TEXT, @":maxpath", [NSString stringWithFormat: @"%@0", qdir], SQLITE_TEXT, @":limit", [NSString stringWithFormat: @"%@%@*%@*", qdir, sep, sep], 0]; results = [sqlite resultsOfQueryWithStatement: statement]; for (i = 0; i < [results count]; i++) { NSDictionary *dict = [results objectAtIndex: i]; [dbcontents setObject: [dict objectForKey: @"moddate"] forKey: [dict objectForKey: @"path"]]; } for (i = 0; i < [contents count]; i++) { NSString *path = [contents objectAtIndex: i]; NSNumber *dbdate = [dbcontents objectForKey: path]; if (dbdate == nil) { GWDebugLog(@"schedule-add %@", path); [self addPath: path]; } else { NSDictionary *attrs = [fm fileAttributesAtPath: path traverseLink: NO]; NSTimeInterval date = [[attrs fileModificationDate] timeIntervalSinceReferenceDate]; if ((date - [dbdate floatValue]) > 10) { GWDebugLog(@"schedule-update %@ ---- %f - %f", path, date, [dbdate floatValue]); [self updatePath: path]; } } } dbpaths = [dbcontents allKeys]; for (i = 0; i < [dbpaths count]; i++) { NSString *path = [dbpaths objectAtIndex: i]; if ([contents containsObject: path] == NO) { GWDebugLog(@"schedule-remove %@", path); [self removePath: path]; } } } else { [self removePath: dir]; RETAIN (dir); GWDebugLog(@"schedule-remove %@", dir); [directories removeObjectAtIndex: dirpos]; count--; dirpos--; for (i = 0; i < count; i++) { if (subPathOfPath(dir, [directories objectAtIndex: i])) { GWDebugLog(@"schedule-remove %@", [directories objectAtIndex: i]); [directories removeObjectAtIndex: i]; count--; if (dirpos >= i) { dirpos--; } i--; } } if (attributes) { [self addPath: dir]; GWDebugLog(@"schedule-remove->add %@", dir); } RELEASE (dir); } dirpos++; if ((dirpos >= count) || (dirpos < 0)) { dirpos = 0; } RELEASE (arp); } } @end @implementation GMDSExtractor (update_notifications) - (void)setupUpdateNotifications { ASSIGN (notifDate, [NSDate date]); notificationsTimer = [NSTimer scheduledTimerWithTimeInterval: NOTIF_TIME target: self selector: @selector(notifyUpdates:) userInfo: nil repeats: YES]; RETAIN (notificationsTimer); } - (void)notifyUpdates:(id)sender { if (extracting == NO) { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *removed = [NSMutableArray array]; NSTimeInterval lastStamp; NSString *query; NSArray *results; NSDictionary *info; unsigned i; [sqlite executeQuery: @"BEGIN"]; query = @"SELECT path FROM removed_paths;"; results = [sqlite resultsOfQuery: query]; query = @"DELETE FROM removed_paths;"; [sqlite executeQuery: query]; lastStamp = [notifDate timeIntervalSinceReferenceDate]; query = [NSString stringWithFormat: @"DELETE FROM updated_paths " @"WHERE timestamp < %f;", lastStamp]; [sqlite executeQuery: query]; [sqlite executeQuery: @"COMMIT"]; ASSIGN (notifDate, [NSDate date]); for (i = 0; i < [results count]; i++) { [removed addObject: [[results objectAtIndex: i] objectForKey: @"path"]]; } info = [NSDictionary dictionaryWithObject: [removed makeImmutableCopyOnFail: NO] forKey: @"removed"]; [dnc postNotificationName: @"GWMetadataDidUpdateNotification" object: nil userInfo: info]; RELEASE (arp); } } @end gworkspace-1.1.0/GWMetadata/gmds/mdfind/0000755000175000001440000000000014752464315017303 5ustar multixusersgworkspace-1.1.0/GWMetadata/gmds/mdfind/GNUmakefile0000644000175000001440000000117213231754602021346 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) TOOL_NAME = gmdfind else TOOL_NAME = mdfind endif $(TOOL_NAME)_OBJC_FILES = \ mdfind.m $(TOOL_NAME)_TOOL_LIBS += -L../../../GWMetadata/MDKit/MDKit.framework -lMDKit $(TOOL_NAME)_TOOL_LIBS += -L../../../DBKit/$(GNUSTEP_OBJ_DIR) -lDBKit $(TOOL_NAME)_TOOL_LIBS += -L../../../FSNode/FSNode.framework -lFSNode ADDITIONAL_INCLUDE_DIRS += -I../../../GWMetadata/MDKit -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/GWMetadata/gmds/mdfind/GNUmakefile.postamble0000644000175000001440000000131013214346542023326 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -rf autom4te*.cache # rm -f config.status config.log config.cache config.h GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWMetadata/gmds/mdfind/GNUmakefile.preamble0000644000175000001440000000162713214346542023142 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../MDKit # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += -L../../MDKit/MDKit.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../../../DBKit/$(GNUSTEP_OBJ_DIR) ADDITIONAL_LIB_DIRS += -L../../../FSNode/FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_TOOL_LIBS += -lDBKit -lFSNode # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWMetadata/gmds/mdfind/mdfind.m0000644000175000001440000001607214751213523020720 0ustar multixusers/* mdfind.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "MDKQuery.h" @interface MDFind : NSObject { MDKQuery *query; unsigned rescount; NSString *searchdir; BOOL repscore; BOOL onlycount; } - (id)initWithArguments:(NSArray *)args; - (void)queryDidStartGathering:(MDKQuery *)query; - (void)appendRawResults:(NSArray *)lines; - (void)queryDidEndGathering:(MDKQuery *)query; - (void)printAttributesList; - (void)printAttributeDescription:(NSString *)attribute; - (void)printHelp; @end @implementation MDFind - (id)initWithArguments:(NSArray *)args { self = [super init]; if (self) { unsigned count = [args count]; unsigned pos = 1; BOOL runquery = YES; unsigned i; if (count <= 1) { GSPrintf(stderr, @"mdfind: too few arguments supplied!\n"); [self printHelp]; return self; } searchdir = nil; repscore = NO; onlycount = NO; rescount = 0; for (i = 1; i < count; i++) { NSString *arg = [args objectAtIndex: i]; if ([arg isEqual: @"-h"]) { [self printHelp]; runquery = NO; } else if ([arg isEqual: @"-a"]) { if ((i + 1) < count) { [self printAttributeDescription: [args objectAtIndex: (i + 1)]]; } else { [self printAttributesList]; } runquery = NO; } else if ([arg isEqual: @"-s"]) { repscore = YES; pos++; } else if ([arg isEqual: @"-c"]) { onlycount = YES; pos++; } else if ([arg isEqual: @"-onlyin"]) { BOOL pathok = YES; if (i++ < count) { arg = [args objectAtIndex: i]; if ([[NSFileManager defaultManager] fileExistsAtPath: arg]) { ASSIGN (searchdir, arg); pos += 2; } else { pathok = NO; } } else { pathok = NO; } if (pathok == NO) { GSPrintf(stderr, @"mdfind: no search path or invalid path supplied!\n"); runquery = NO; } } } if ((pos < count) && runquery) { NSArray *queryargs = [args subarrayWithRange: NSMakeRange(pos, count - pos)]; NSString *qstr = [queryargs componentsJoinedByString: @" "]; NS_DURING { NSArray *dirs = (searchdir ? [NSArray arrayWithObject: searchdir] : nil); ASSIGN (query, [MDKQuery queryFromString: qstr inDirectories: dirs]); [query setDelegate: self]; [query setReportRawResults: YES]; [query startGathering]; } NS_HANDLER { GSPrintf(stderr, @"mdfind: %@\n", localException); exit(EXIT_FAILURE); } NS_ENDHANDLER } } return self; } - (void)queryDidStartGathering:(MDKQuery *)query { } - (void)appendRawResults:(NSArray *)lines { if (onlycount == NO) { unsigned i; for (i = 0; i < [lines count]; i++) { NSArray *line = [lines objectAtIndex: i]; NSString *path = [line objectAtIndex: 0]; GSPrintf(stdout, @"%@", path); if (repscore) { GSPrintf(stdout, @" %@", [[line objectAtIndex: 1] description]); } GSPrintf(stdout, @"\n"); } } else { rescount += [lines count]; } } - (void)queryDidEndGathering:(MDKQuery *)query { if (onlycount) { GSPrintf(stdout, @"%i\n", rescount); } exit(EXIT_SUCCESS); } - (void)printAttributesList { NSArray *attributes = [MDKQuery attributesNames]; unsigned i; for (i = 0; i < [attributes count]; i++) { GSPrintf(stderr, @"%@\n", [attributes objectAtIndex: i]); } } - (void)printAttributeDescription:(NSString *)attribute { NSString *description = [MDKQuery attributeDescription: attribute]; if (description) { GSPrintf(stderr, @"%@\n", description); } else { GSPrintf(stderr, @"%@: invalid attribute name!\n", attribute); } } - (void)printHelp { GSPrintf(stderr, @"\n" @"The 'mdfind' tool finds files matching a given query\n" @"\n" @"usage: mdfind [arguments] query\n" @"\n" @"Arguments:\n" @" -onlyin 'directory' limits the the search to 'directory'.\n" @" -s reports also the score for each found path.\n" @" -c reports only the count of the found paths.\n" @" -a [attribute] if 'attribute' is supplied, prints the attribute\n" @" description, else prints the attributes list.\n" @" -h shows this help and exit.\n" @"\n" @"The query have the format: attribute operator value\n" @"where 'attribute' is one of the attributes used by the mdextractor\n" @"tool when indexing (type 'mdfind -a' for the attribute list),\n" @"and 'operator' is one of the following:\n" @" == equal\n" @" != not equal\n" @" < less than (only for numeric values and dates)\n" @" <= less than or equal (only for numeric values and dates)\n" @" > greater than (only for numeric values and dates)\n" @" >= greater than or equal (only for numeric values and dates)\n" @"\n" @"Value comparison modifiers for string values:\n" @"Appending the 'c' character to the search value (ex. \"value\"c),\n" @"makes the query case insensitive.\n" @"You can use the '*' wildcard to match substrings anywhere in the\n" @"search value.\n" @"\n" @"Combining queries:\n" @"Queries can be combined using '&&' for AND and '||' for OR and\n" @"parenthesis to define nesting criteria.\n" @"\n" ); } @end int main(int argc, char **argv, char **env) { NSAutoreleasePool *pool; NSProcessInfo *proc; MDFind *mdfind; #ifdef GS_PASS_ARGUMENTS [NSProcessInfo initializeWithArguments: argv count: argc environment: env]; #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; if (proc == nil) { GSPrintf(stderr, @"mdfind: unable to get process information!\n"); RELEASE (pool); exit(EXIT_FAILURE); } mdfind = [[MDFind alloc] initWithArguments: [proc arguments]]; RELEASE (pool); if (mdfind != nil) { CREATE_AUTORELEASE_POOL (pool); [[NSRunLoop currentRunLoop] run]; RELEASE (pool); } exit(EXIT_SUCCESS); } gworkspace-1.1.0/GWorkspace/0000755000175000001440000000000014753500006015164 5ustar multixusersgworkspace-1.1.0/GWorkspace/Desktop/0000755000175000001440000000000014751213523016600 5ustar multixusersgworkspace-1.1.0/GWorkspace/Desktop/Dock/0000755000175000001440000000000014751213523017460 5ustar multixusersgworkspace-1.1.0/GWorkspace/Desktop/Dock/Dock.h0000644000175000001440000000664014751213523020517 0ustar multixusers/* Dock.h * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWDesktopManager.h" #import "FSNodeRep.h" @class NSWindow; @class NSColor; @class NSImage; @class DockIcon; @class GWorkspace; typedef enum DockStyle { DockStyleClassic = 0, DockStyleModern = 1 } DockStyle; @interface Dock : NSView { DockPosition position; DockStyle style; BOOL singleClickLaunch; NSMutableArray *icons; int iconSize; NSColor *backColor; DockIcon *dndSourceIcon; BOOL isDragTarget; int dragdelay; int targetIndex; NSRect targetRect; GWDesktopManager *manager; GWorkspace *gw; NSFileManager *fm; id ws; } - (id)initForManager:(id)mngr; - (void)createWorkspaceIcon; - (void)createTrashIcon; - (DockIcon *)addIconForApplicationAtPath:(NSString *)path withName:(NSString *)name atIndex:(int)index; - (void)addDraggedIcon:(NSData *)icondata atIndex:(int)index; - (void)removeIcon:(DockIcon *)icon; - (DockIcon *)iconForApplicationName:(NSString *)name; - (DockIcon *)workspaceAppIcon; - (DockIcon *)trashIcon; - (DockIcon *)iconContainingPoint:(NSPoint)p; - (void)setDndSourceIcon:(DockIcon *)icon; - (void)appWillLaunch:(NSString *)appPath appName:(NSString *)appName; - (void)appDidLaunch:(NSString *)appPath appName:(NSString *)appName; - (void)appTerminated:(NSString *)appName; - (void)appDidHide:(NSString *)appName; - (void)appDidUnhide:(NSString *)appName; - (void)iconMenuAction:(id)sender; - (void)setSingleClickLaunch:(BOOL)value; - (void)setPosition:(DockPosition)pos; - (DockStyle)style; - (void)setStyle:(DockStyle)s; - (void)setBackColor:(NSColor *)color; - (void)tile; - (void)updateDefaults; - (void)checkRemovedApp:(id)sender; @end @interface Dock (NodeRepContainer) - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)unselectOtherReps:(id)arep; - (FSNSelectionMask)selectionMask; - (void)setBackgroundColor:(NSColor *)acolor; - (NSColor *)backgroundColor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; @end @interface Dock (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; - (BOOL)isDragTarget; @end gworkspace-1.1.0/GWorkspace/Desktop/Dock/Dock.m0000644000175000001440000006462314751213523020531 0ustar multixusers/* Dock.m * * Copyright (C) 2005-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "Dock.h" #import "DockIcon.h" #import "GWDesktopView.h" #import "GWorkspace.h" #define MAX_ICN_SIZE 48 #define MIN_ICN_SIZE 16 #define ICN_INCR 4 /* small category to access NSNUmericSearch through a selector */ @interface NSString (NumericSort) - (NSComparisonResult)numericCompare:(NSString *)s; @end @implementation NSString (NumericSort) - (NSComparisonResult)numericCompare:(NSString *)s { return [self compare:s options:NSNumericSearch]; } @end @implementation Dock - (void)dealloc { RELEASE (icons); RELEASE (backColor); [super dealloc]; } - (id)initForManager:(id)mngr { self = [super initWithFrame: NSMakeRect(0, 0, 64, 64)]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *appsdict; NSArray *pbTypes; int i; id defEntry; manager = mngr; position = [manager dockPosition]; defEntry = [defaults objectForKey: @"dockstyle"]; style = DockStyleClassic; if ([defEntry intValue] == DockStyleModern) style = DockStyleModern; singleClickLaunch = [defaults boolForKey: @"singleclicklaunch"]; gw = [GWorkspace gworkspace]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; icons = [NSMutableArray new]; iconSize = MAX_ICN_SIZE; dndSourceIcon = nil; isDragTarget = NO; dragdelay = 0; targetIndex = -1; targetRect = NSZeroRect; pbTypes = [NSArray arrayWithObjects: NSFilenamesPboardType, @"DockIconPboardType", nil]; [self registerForDraggedTypes: pbTypes]; if (style == DockStyleModern) [self setBackColor: [[NSColor grayColor] colorWithAlphaComponent: 0.33]]; else [self setBackColor: [NSColor grayColor]]; [self createWorkspaceIcon]; appsdict = [defaults objectForKey: @"applications"]; if (appsdict) { NSArray *indexes = [appsdict allKeys]; indexes = [indexes sortedArrayUsingSelector: @selector(numericCompare:)]; for (i = 0; i < [indexes count]; i++) { NSNumber *index = [indexes objectAtIndex: i]; NSString *name = [[appsdict objectForKey: index] stringByDeletingPathExtension]; NSString *path = [ws fullPathForApplication: name]; if (path) { DockIcon *icon = [self addIconForApplicationAtPath: path withName: name atIndex: [index intValue]]; [icon setDocked: YES]; } } } [self createTrashIcon]; } return self; } - (void)createWorkspaceIcon; { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *wsname = [defaults stringForKey: @"GSWorkspaceApplication"]; NSString *path; FSNode *node; DockIcon *icon; if (wsname == nil) { wsname = [gw gworkspaceProcessName]; } path = [ws fullPathForApplication: wsname]; node = [FSNode nodeWithPath: path]; icon = [[DockIcon alloc] initForNode: node appName: wsname iconSize: iconSize]; [icon setHighlightColor: backColor]; [icon setWsIcon: YES]; [icon setDocked: YES]; [icons insertObject: icon atIndex: 0]; [self addSubview: icon]; RELEASE (icon); } - (void)createTrashIcon { NSString *path = [manager trashPath]; FSNode *node = [FSNode nodeWithPath: path]; DockIcon *icon = [[DockIcon alloc] initForNode: node appName: nil iconSize: iconSize]; [icon setHighlightColor: backColor]; [icon setTrashIcon: YES]; [icon setDocked: YES]; [icons insertObject: icon atIndex: [icons count]]; [self addSubview: icon]; RELEASE (icon); [manager addWatcherForPath: path]; } - (DockIcon *)addIconForApplicationAtPath:(NSString *)path withName:(NSString *)name atIndex:(int)index { if ([fm fileExistsAtPath: path]) { FSNode *node = [FSNode nodeWithPath: path]; if ([node isApplication]) { int icnindex; DockIcon *icon = [[DockIcon alloc] initForNode: node appName: name iconSize: iconSize]; if (index == -1) { icnindex = ([icons count]) ? ([icons count] - 1) : 0; } else { icnindex = (index < [icons count]) ? (index + 1) : [icons count]; } [icon setHighlightColor: backColor]; [icons insertObject: icon atIndex: icnindex]; [icon setSingleClickLaunch: singleClickLaunch]; [self addSubview: icon]; RELEASE (icon); [manager addWatcherForPath: [node path]]; return icon; } } return nil; } - (void)addDraggedIcon:(NSData *)icondata atIndex:(int)index { NSDictionary *dict = [NSUnarchiver unarchiveObjectWithData: icondata]; NSString *name = [dict objectForKey: @"name"]; NSString *path = [dict objectForKey: @"path"]; DockIcon *icon = [self addIconForApplicationAtPath: path withName: name atIndex: index]; [icon setDocked: [[dict objectForKey: @"docked"] boolValue]]; [icon setLaunched: [[dict objectForKey: @"launched"] boolValue]]; [icon setHidden: [[dict objectForKey: @"hidden"] boolValue]]; } - (void)removeIcon:(DockIcon *)icon { [manager removeWatcherForPath: [[icon node] path]]; if ([icon superview]) { [icon removeFromSuperview]; } if ([icon isLaunched]) { [icon setLaunched: NO]; } [icons removeObject: icon]; [self tile]; } - (DockIcon *)iconForApplicationName:(NSString *)name { NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if ([[icon appName] isEqual: name]) { return icon; } } return nil; } - (DockIcon *)workspaceAppIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if ([icon isWsIcon]) { return icon; } } return nil; } - (DockIcon *)trashIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if ([icon isTrashIcon]) { return icon; } } return nil; } - (DockIcon *)iconContainingPoint:(NSPoint)p { NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; NSRect r = [icon frame]; if (NSPointInRect(p, NSInsetRect(r, 0.0, 2.0))) { return icon; } } return nil; } - (void)setDndSourceIcon:(DockIcon *)icon { dndSourceIcon = icon; } - (void)appWillLaunch:(NSString *)appPath appName:(NSString *)appName { if ([appName isEqual: [gw gworkspaceProcessName]] == NO) { DockIcon *icon = [self iconForApplicationName: appName]; if (icon == nil) { icon = [self addIconForApplicationAtPath: appPath withName: appName atIndex: -1]; } [self tile]; [icon animateLaunch]; } } - (void)appDidLaunch:(NSString *)appPath appName:(NSString *)appName { if ([appName isEqual: [gw gworkspaceProcessName]] == NO) { DockIcon *icon = [self iconForApplicationName: appName]; if (icon == nil) { icon = [self addIconForApplicationAtPath: appPath withName: appName atIndex: -1]; [self tile]; } [icon setLaunched: YES]; } } - (void)appTerminated:(NSString *)appName { if ([appName isEqual: [gw gworkspaceProcessName]] == NO) { DockIcon *icon = [self iconForApplicationName: appName]; if (icon) { if (([icon isDocked] == NO) && ([icon isSpecialIcon] == NO)) { [self removeIcon: icon]; } else { [icon setAppHidden: NO]; [icon setLaunched: NO]; } } } } - (void)appDidHide:(NSString *)appName { if ([appName isEqual: [gw gworkspaceProcessName]] == NO) { DockIcon *icon = [self iconForApplicationName: appName]; if (icon) { [icon setAppHidden: YES]; } } } - (void)appDidUnhide:(NSString *)appName { if ([appName isEqual: [gw gworkspaceProcessName]] == NO) { DockIcon *icon = [self iconForApplicationName: appName]; if (icon) { [icon setAppHidden: NO]; } } } - (void)iconMenuAction:(id)sender { NSString *title = [(NSMenuItem *)sender title]; if ([title isEqual: NSLocalizedString(@"Show In File Viewer", @"")]) { NSString *path = [(NSMenuItem *)sender representedObject]; NSString *basePath = [path stringByDeletingLastPathComponent]; [gw selectFile: path inFileViewerRootedAtPath: basePath]; } else { GWLaunchedApp *app = (GWLaunchedApp *)[(NSMenuItem *)sender representedObject]; if ([app isRunning] == NO) { /* terminated while the icon menu is open */ return; } if ([title isEqual: NSLocalizedString(@"Hide", @"")]) { [app hideApplication]; } else if ([title isEqual: NSLocalizedString(@"Unhide", @"")]) { [app unhideApplication]; } else if ([title isEqual: NSLocalizedString(@"Quit", @"")]) { [app terminateApplication]; } } } - (void)setSingleClickLaunch:(BOOL)value { NSUInteger i; singleClickLaunch = value; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; [icon setSingleClickLaunch: singleClickLaunch]; } } - (void)setPosition:(DockPosition)pos { position = pos; [self tile]; } - (void)setStyle:(DockStyle)s { if(style != s) { if (s == DockStyleClassic) { [self setBackColor: [NSColor grayColor]]; } else if (s == DockStyleModern) { [self setBackColor: [[NSColor grayColor] colorWithAlphaComponent: 0.33]]; } } style = s; } - (DockStyle)style { return style; } - (void)setBackColor:(NSColor *)color { NSColor *hlgtcolor = [color highlightWithLevel: 0.2]; int i; for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] setHighlightColor: hlgtcolor]; } ASSIGN (backColor, hlgtcolor); if ([self superview]) { [self tile]; } } - (void)tile { NSView *view = [self superview]; NSRect scrrect = [[NSScreen mainScreen] frame]; int oldIcnSize = iconSize; CGFloat maxheight = scrrect.size.height; NSRect icnrect = NSZeroRect; NSRect rect = NSZeroRect; NSUInteger i; iconSize = MAX_ICN_SIZE; icnrect.origin.x = 0; icnrect.origin.y = 0; icnrect.size.width = ceil(iconSize / 3 * 4); icnrect.size.height = icnrect.size.width; rect.size.height = [icons count] * icnrect.size.height; if (targetIndex != -1) { rect.size.height += icnrect.size.height; } maxheight -= (icnrect.size.height * 2); while (rect.size.height > maxheight) { iconSize -= ICN_INCR; icnrect.size.height = ceil(iconSize / 3 * 4); icnrect.size.width = icnrect.size.height; rect.size.height = [icons count] * icnrect.size.height; if (targetIndex != -1) { rect.size.height += icnrect.size.height; } if (iconSize <= MIN_ICN_SIZE) { break; } } rect.size.width = icnrect.size.width; rect.origin.x = (position == DockPositionLeft) ? 0 : scrrect.size.width - rect.size.width; rect.origin.y = ceil((scrrect.size.height - rect.size.height) / 2); if (view) { [view setNeedsDisplayInRect: [self frame]]; } [self setFrame: rect]; icnrect.origin.y = rect.size.height; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if (oldIcnSize != iconSize) { [icon setIconSize: iconSize]; } icnrect.origin.y -= icnrect.size.height; [icon setFrame: icnrect]; if ((targetIndex != -1) && (targetIndex == i)) { icnrect.origin.y -= icnrect.size.height; targetRect = icnrect; } } [self setNeedsDisplay: YES]; if (view) { [view setNeedsDisplayInRect: [self frame]]; } } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSUInteger i; [defaults setObject: [NSNumber numberWithInt: style] forKey: @"dockstyle"]; [defaults setBool: singleClickLaunch forKey: @"singleclicklaunch"]; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if (([icon isSpecialIcon] == NO) && [icon isDocked]) { [dict setObject: [icon appName] forKey: [[NSNumber numberWithInt: i] stringValue]]; [manager removeWatcherForPath: [[icon node] path]]; } [icon setSingleClickLaunch: singleClickLaunch]; } [defaults setObject: dict forKey: @"applications"]; [manager removeWatcherForPath: [manager trashPath]]; } - (void)checkRemovedApp:(id)sender { DockIcon *icon = (DockIcon *)[sender userInfo]; if ([[icon node] isValid] == NO) { [self removeIcon: icon]; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; [backColor set]; NSRectFill(rect); } @end @implementation Dock (NodeRepContainer) - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSUInteger i, count; if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"]) { count = [icons count]; for (i = 0; i < count; i++) { DockIcon *icon = [icons objectAtIndex: i]; FSNode *node = [icon node]; if ([source isEqual: [node parentPath]]) { if ([files containsObject: [node name]]) { if ([icon isSpecialIcon] == NO) { [self removeIcon: icon]; count--; i--; } } } } } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceRecycleOperation]) { DockIcon *icon = [self trashIcon]; NSString *trashPath = [[icon node] path]; if ([destination isEqual: trashPath]) { [icon setTrashFull: YES]; } } if ([operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"] || [operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation]) { DockIcon *icon = [self trashIcon]; FSNode *node = [icon node]; NSString *trashPath = [node path]; NSString *basePath; if ([operation isEqual: @"GWorkspaceEmptyRecyclerOperation"] || [operation isEqual: NSWorkspaceDestroyOperation]) { basePath = destination; } else { basePath = source; } if ([basePath isEqual: trashPath]) { NSArray *subNodes = [node subNodes]; NSUInteger count = [subNodes count]; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count --; } } if (count == 0) { [icon setTrashFull: NO]; } } } } - (void)watchedPathChanged:(NSDictionary *)info { CREATE_AUTORELEASE_POOL(arp); NSString *event = [info objectForKey: @"event"]; NSString *path = [info objectForKey: @"path"]; if ([event isEqual: @"GWWatchedPathDeleted"]) { NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if ([icon isSpecialIcon] == NO) { FSNode *node = [icon node]; if ([path isEqual: [node path]]) { [NSTimer scheduledTimerWithTimeInterval: 1.0 target: self selector: @selector(checkRemovedApp:) userInfo: icon repeats: NO]; } } } } else if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { NSArray *files = [info objectForKey: @"files"]; NSUInteger i; for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fullpath = [path stringByAppendingPathComponent: fname]; int j; for (j = 0; j < [icons count]; j++) { DockIcon *icon = [icons objectAtIndex:j]; if ([icon isSpecialIcon] == NO) { FSNode *node = [icon node]; if ([fullpath isEqual: [node path]]) { [NSTimer scheduledTimerWithTimeInterval: 1.0 target: self selector: @selector(checkRemovedApp:) userInfo: icon repeats: NO]; } } } } if ([path isEqual: [manager trashPath]]) { DockIcon *icon = [self trashIcon]; FSNode *node = [icon node]; NSArray *subNodes = [node subNodes]; int count = [subNodes count]; int i; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count --; } } if (count == 0) { [icon setTrashFull: NO]; } } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { if ([path isEqual: [manager trashPath]]) { DockIcon *icon = [self trashIcon]; FSNode *node = [icon node]; NSArray *subNodes = [node subNodes]; NSUInteger i; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved] == NO) { [icon setTrashFull: YES]; break; } } } } RELEASE (arp); } - (void)unselectOtherReps:(id)arep { NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if (icon != arep) { [icon unselect]; } } } - (FSNSelectionMask)selectionMask { return NSSingleSelectionMask; } - (void)setBackgroundColor:(NSColor *)acolor { NSColor *hlgtcolor = [acolor highlightWithLevel: 0.2]; NSUInteger i; for (i = 0; i < [icons count]; i++) [[icons objectAtIndex: i] setHighlightColor: hlgtcolor]; ASSIGN (backColor, hlgtcolor); if ([self superview]) { [self tile]; } } - (NSColor *)backgroundColor { return backColor; } - (NSColor *)textColor { return [NSColor controlTextColor]; } - (NSColor *)disabledTextColor { return [NSColor disabledControlTextColor]; } @end @implementation Dock (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPoint location = [sender draggingLocation]; DockIcon *icon; isDragTarget = YES; targetIndex = -1; targetRect = NSZeroRect; dragdelay = 0; location = [self convertPoint: location fromView: nil]; icon = [self iconContainingPoint: location]; if (icon) { NSUInteger index = [icons indexOfObjectIdenticalTo: icon]; if (dndSourceIcon && ([sender draggingSource] == dndSourceIcon)) { if (icon != dndSourceIcon) { RETAIN (dndSourceIcon); [icons removeObject: dndSourceIcon]; [icons insertObject: dndSourceIcon atIndex: index]; RELEASE (dndSourceIcon); [self tile]; return NSDragOperationMove; } } else { NSPasteboard *pb = [sender draggingPasteboard]; if ([[pb types] containsObject: @"DockIconPboardType"]) { if ([icon isTrashIcon] == NO) { targetIndex = index; return NSDragOperationMove; } } else if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSString *path = [sourcePaths objectAtIndex: 0]; FSNode *node = [FSNode nodeWithPath: path]; if ([node isApplication] && ([icon isSpecialIcon] == NO)) { NSUInteger i; for (i = 0; i < [icons count]; i++) { if ([[[icons objectAtIndex: i] node] isEqualToNode: node]) { isDragTarget = NO; return NSDragOperationNone; } } targetIndex = index; return NSDragOperationMove; } else { if ([icon acceptsDraggedPaths: sourcePaths]) { return NSDragOperationMove; } else { [icon unselect]; } } } } } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSPoint location; DockIcon *icon; if (dragdelay < 2) { dragdelay++; return NSDragOperationNone; } isDragTarget = YES; location = [sender draggingLocation]; icon = [self iconContainingPoint: location]; if (targetIndex != -1) { if (NSEqualRects(targetRect, NSZeroRect)) { [self tile]; return NSDragOperationMove; } } if (targetIndex != -1) { if (NSPointInRect(location, NSInsetRect(targetRect, 0.0, 2.0))) { return NSDragOperationMove; } } location = [self convertPoint: location fromView: nil]; if (NSPointInRect(location, NSInsetRect(targetRect, 0.0, 2.0))) { return NSDragOperationMove; } if (icon == nil) { icon = [self iconContainingPoint: location]; } if (icon) { NSUInteger index = [icons indexOfObjectIdenticalTo: icon]; if (dndSourceIcon && ([sender draggingSource] == dndSourceIcon)) { if ((icon != dndSourceIcon) && ([icon isSpecialIcon] == NO)) { RETAIN (dndSourceIcon); [icons removeObject: dndSourceIcon]; [icons insertObject: dndSourceIcon atIndex: index]; RELEASE (dndSourceIcon); [self tile]; } return NSDragOperationMove; } else { NSPasteboard *pb = [sender draggingPasteboard]; if (pb && [[pb types] containsObject: @"DockIconPboardType"]) { if ((targetIndex != index) && ([icon isTrashIcon] == NO)) { targetIndex = index; [self tile]; return NSDragOperationMove; } } else if (pb && [[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSString *path = [sourcePaths objectAtIndex: 0]; FSNode *node = [FSNode nodeWithPath: path]; if (([node isApplication] == NO) || ([node isApplication] && [icon isTrashIcon])) { if ([icon acceptsDraggedPaths: sourcePaths]) { return NSDragOperationMove; } else { [icon unselect]; } } else if ((targetIndex != index) && ([icon isTrashIcon] == NO)) { targetIndex = index; [self tile]; return NSDragOperationMove; } } } } return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; dragdelay = 0; [self unselectOtherReps: nil]; if (dndSourceIcon && [dndSourceIcon superview]) { [self removeIcon: dndSourceIcon]; [self setDndSourceIcon: nil]; } if (targetIndex != -1) { targetIndex = -1; targetRect = NSZeroRect; [self tile]; } } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return isDragTarget; } - (void)concludeDragOperation:(id )sender { [self unselectOtherReps: nil]; if (dndSourceIcon && ([sender draggingSource] == dndSourceIcon)) { [dndSourceIcon setIsDndSourceIcon: NO]; [self setDndSourceIcon: nil]; } else { NSPasteboard *pb = [sender draggingPasteboard]; if ([[pb types] containsObject: @"DockIconPboardType"]) { [self addDraggedIcon: [pb dataForType: @"DockIconPboardType"] atIndex: targetIndex]; } else if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSPoint location = [sender draggingLocation]; DockIcon *icon; BOOL concluded = NO; location = [self convertPoint: location fromView: nil]; icon = [self iconContainingPoint: location]; if ([sourcePaths count] == 1) { NSString *path = [sourcePaths objectAtIndex: 0]; FSNode *node = [FSNode nodeWithPath: path]; NSString *appName = [[node name] stringByDeletingPathExtension]; if ([node isApplication]) { if ((icon == nil) || (icon && ([icon isTrashIcon] == NO))) { BOOL duplicate = NO; NSUInteger i; for (i = 0; i < [icons count]; i++) { DockIcon *icon = [icons objectAtIndex: i]; if ([[icon node] isEqual: node] && [[icon appName] isEqual: appName]) { RETAIN (icon); [icons removeObject: icon]; [icons insertObject: icon atIndex: targetIndex]; RELEASE (icon); duplicate = YES; break; } } if (duplicate == NO) { DockIcon *icon = [self addIconForApplicationAtPath: path withName: appName atIndex: targetIndex]; [icon setDocked: YES]; } concluded = YES; } } } if (concluded == NO) { if (icon) { [icon setDraggedPaths: sourcePaths]; } } } } isDragTarget = NO; targetIndex = -1; targetRect = NSZeroRect; [self tile]; } - (BOOL)isDragTarget { return isDragTarget; } @end gworkspace-1.1.0/GWorkspace/Desktop/Dock/DockIcon.h0000644000175000001440000000435714751213523021333 0ustar multixusers/* DockIcon.h * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNIcon.h" @class NSColor; @class NSImage; @interface DockIcon : FSNIcon { NSString *appName; BOOL isWsIcon; BOOL isTrashIcon; NSImage *trashFullIcon; BOOL trashFull; BOOL docked; BOOL launched; BOOL launching; BOOL apphidden; BOOL appactive; float dissFract; int minimumLaunchClicks; NSColor *darkerColor; NSColor *highlightColor; NSImage *highlightImage; BOOL useHligtImage; NSImage *dragIcon; BOOL isDndSourceIcon; NSFileManager *fm; NSNotificationCenter *nc; id ws; } - (id)initForNode:(FSNode *)anode appName:(NSString *)aname iconSize:(int)isize; - (NSString *)appName; - (void)setWsIcon:(BOOL)value; - (BOOL)isWsIcon; - (void)setTrashIcon:(BOOL)value; - (void)setTrashFull:(BOOL)value; - (BOOL)isTrashIcon; - (BOOL)isSpecialIcon; - (void)setDocked:(BOOL)value; - (BOOL)isDocked; - (void)setSingleClickLaunch:(BOOL)value; - (void)setLaunched:(BOOL)value; - (BOOL)isLaunched; - (void)setAppHidden:(BOOL)value; - (BOOL)isAppHidden; - (void)animateLaunch; - (void)setHighlightColor:(NSColor *)color; - (void)setHighlightImage:(NSImage *)image; - (void)setUseHlightImage:(BOOL)value; - (void)setIsDndSourceIcon:(BOOL)value; - (BOOL)acceptsDraggedPaths:(NSArray *)paths; - (void)setDraggedPaths:(NSArray *)paths; @end gworkspace-1.1.0/GWorkspace/Desktop/Dock/DockIcon.m0000644000175000001440000004031314751213523021330 0ustar multixusers/* DockIcon.m * * Copyright (C) 2005-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #import #import #import "DockIcon.h" #import "Dock.h" #import "GWDesktopManager.h" #import "GWorkspace.h" @implementation DockIcon - (void)dealloc { RELEASE (appName); RELEASE (highlightColor); RELEASE (darkerColor); RELEASE (highlightImage); RELEASE (trashFullIcon); RELEASE (dragIcon); [super dealloc]; } - (id)initForNode:(FSNode *)anode appName:(NSString *)aname iconSize:(int)isize { self = [super initForNode: anode nodeInfoType: FSNInfoNameType extendedType: nil iconSize: isize iconPosition: NSImageOnly labelFont: [NSFont systemFontOfSize: 12] textColor: [NSColor controlTextColor] gridIndex: 0 dndSource: NO acceptDnd: NO slideBack: NO]; if (self) { if (aname != nil) { ASSIGN (appName, aname); } else { ASSIGN (appName, [[node name] stringByDeletingPathExtension]); } dragIcon = [icon copy]; docked = NO; launched = NO; apphidden = NO; minimumLaunchClicks = 2; nc = [NSNotificationCenter defaultCenter]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; [self setToolTip: appName]; } return self; } - (NSString *)appName { return appName; } - (void)setWsIcon:(BOOL)value { isWsIcon = value; if (isWsIcon) { [self removeAllToolTips]; } } - (BOOL)isWsIcon { return isWsIcon; } - (void)setTrashIcon:(BOOL)value { if (value != isTrashIcon) { isTrashIcon = value; if (isTrashIcon) { NSArray *subNodes; NSUInteger i, count; ASSIGN (icon, [fsnodeRep trashIconOfSize: ceil(icnBounds.size.width)]); ASSIGN (trashFullIcon, [fsnodeRep trashFullIconOfSize: ceil(icnBounds.size.width)]); subNodes = [node subNodes]; count = [subNodes count]; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count --; } } [self setTrashFull: !(count == 0)]; } else { ASSIGN (icon, [fsnodeRep iconOfSize: ceil(icnBounds.size.width) forNode: node]); } } if (isTrashIcon) { [self removeAllToolTips]; } } - (void)setTrashFull:(BOOL)value { trashFull = value; [self setNeedsDisplay: YES]; } - (BOOL)isTrashIcon { return isTrashIcon; } - (BOOL)isSpecialIcon { return (isWsIcon || isTrashIcon); } - (void)setDocked:(BOOL)value { docked = value; } - (BOOL)isDocked { return docked; } - (void)setSingleClickLaunch:(BOOL)value { minimumLaunchClicks = (value == YES) ? 1 : 2; } - (void)setLaunched:(BOOL)value { launched = value; [self setNeedsDisplay: YES]; } - (BOOL)isLaunched { return launched; } - (void)setAppHidden:(BOOL)value { apphidden = value; [self setNeedsDisplay: YES]; [container setNeedsDisplayInRect: [self frame]]; } - (BOOL)isAppHidden { return apphidden; } - (void)animateLaunch { launching = YES; dissFract = 0.2; while (1) { NSDate *date = [NSDate dateWithTimeIntervalSinceNow: 0.02]; [[NSRunLoop currentRunLoop] runUntilDate: date]; [self display]; dissFract += 0.05; if (dissFract >= 1) { launching = NO; break; } } [self setNeedsDisplay: YES]; } - (void)setHighlightColor:(NSColor *)color { ASSIGN (highlightColor, [color highlightWithLevel: 0.2]); ASSIGN (darkerColor, [color shadowWithLevel: 0.4]); } - (void)setHighlightImage:(NSImage *)image { DESTROY (highlightImage); if (image) { NSSize size = [self frame].size; highlightImage = [[NSImage alloc] initWithSize: size]; [highlightImage lockFocus]; [image compositeToPoint: NSZeroPoint fromRect: [self frame] operation: NSCompositeCopy]; [highlightImage unlockFocus]; } } - (void)setUseHlightImage:(BOOL)value { useHligtImage = value; } - (void)setIsDndSourceIcon:(BOOL)value { if (isDndSourceIcon != value) { isDndSourceIcon = value; [self setNeedsDisplay: YES]; } } - (void)setIconSize:(int)isize { icnBounds = NSMakeRect(0, 0, isize, isize); if (isTrashIcon) { ASSIGN (icon, [fsnodeRep trashIconOfSize: ceil(icnBounds.size.width)]); ASSIGN (trashFullIcon, [fsnodeRep trashFullIconOfSize: ceil(icnBounds.size.width)]); } else { ASSIGN (icon, [fsnodeRep iconOfSize: ceil(icnBounds.size.width) forNode: node]); } hlightRect.size.width = ceil(isize / 3 * 4); hlightRect.size.height = ceil(hlightRect.size.width * [fsnodeRep highlightHeightFactor]); if ((hlightRect.size.height - isize) < 4) { hlightRect.size.height = isize + 4; } hlightRect.origin.x = 0; hlightRect.origin.y = 0; ASSIGN (highlightPath, [fsnodeRep highlightPathOfSize: hlightRect.size]); [self tile]; } - (void)mouseUp:(NSEvent *)theEvent { if ([theEvent clickCount] >= minimumLaunchClicks) { if ([self isSpecialIcon] == NO) { if (launched == NO) { [ws launchApplication: appName]; } else if (apphidden) { [[GWorkspace gworkspace] unhideAppWithPath: [node path] andName: appName]; } else { [[GWorkspace gworkspace] activateAppWithPath: [node path] andName: appName]; } } else if (isWsIcon) { [[GWDesktopManager desktopManager] showRootViewer]; } else if (isTrashIcon) { NSString *path = [node path]; [[GWDesktopManager desktopManager] selectFile: path inFileViewerRootedAtPath: path]; } } } - (void)mouseDown:(NSEvent *)theEvent { NSEvent *nextEvent = nil; BOOL startdnd = NO; if ([theEvent clickCount] == 1) { [self select]; dragdelay = 0; [(Dock *)container setDndSourceIcon: nil]; while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { [[self window] postEvent: nextEvent atStart: YES]; [self unselect]; break; } else if (([nextEvent type] == NSLeftMouseDragged) && ([self isSpecialIcon] == NO)) { if (dragdelay < 5) { dragdelay++; } else { startdnd = YES; break; } } } if (startdnd == YES) { [self startExternalDragOnEvent: theEvent withMouseOffset: NSZeroSize]; } } } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { if ([self isSpecialIcon] == NO) { NSString *appPath = [ws fullPathForApplication: appName]; if (appPath) { CREATE_AUTORELEASE_POOL(arp); NSMenu *menu = [[NSMenu alloc] initWithTitle: appName]; NSMenuItem *item; GWLaunchedApp *app; item = [NSMenuItem new]; [item setTitle: NSLocalizedString(@"Show In File Viewer", @"")]; [item setTarget: (Dock *)container]; [item setAction: @selector(iconMenuAction:)]; [item setRepresentedObject: appPath]; [menu addItem: item]; RELEASE (item); app = [[GWorkspace gworkspace] launchedAppWithPath: appPath andName: appName]; if (app && [app isRunning]) { item = [NSMenuItem new]; [item setTarget: (Dock *)container]; [item setAction: @selector(iconMenuAction:)]; [item setRepresentedObject: app]; if ([app isHidden]) { [item setTitle: NSLocalizedString(@"Unhide", @"")]; } else { [item setTitle: NSLocalizedString(@"Hide", @"")]; } [menu addItem: item]; RELEASE (item); item = [NSMenuItem new]; [item setTitle: NSLocalizedString(@"Quit", @"")]; [item setTarget: (Dock *)container]; [item setAction: @selector(iconMenuAction:)]; [item setRepresentedObject: app]; [menu addItem: item]; RELEASE (item); } RELEASE (arp); return AUTORELEASE (menu); } } return [super menuForEvent: theEvent]; } - (void)startExternalDragOnEvent:(NSEvent *)event withMouseOffset:(NSSize)offset { NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: appName forKey: @"name"]; [dict setObject: [node path] forKey: @"path"]; [dict setObject: [NSNumber numberWithBool: docked] forKey: @"docked"]; [dict setObject: [NSNumber numberWithBool: launched] forKey: @"launched"]; [dict setObject: [NSNumber numberWithBool: apphidden] forKey: @"hidden"]; [pb declareTypes: [NSArray arrayWithObject: @"DockIconPboardType"] owner: nil]; if ([pb setData: [NSArchiver archivedDataWithRootObject: dict] forType: @"DockIconPboardType"]) { NSPoint dragPoint = [event locationInWindow]; NSSize fs = [self frame].size; dragPoint.x -= ((fs.width - icnPoint.x) / 2); dragPoint.y -= ((fs.height - icnPoint.y) / 2); [self unselect]; [self setIsDndSourceIcon: YES]; [(Dock *)container setDndSourceIcon: self]; [(Dock *)container tile]; [[self window] dragImage: dragIcon at: dragPoint offset: NSZeroSize event: event pasteboard: pb source: self slideBack: NO]; } } - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag { dragdelay = 0; [self setIsDndSourceIcon: NO]; [(Dock *)container setDndSourceIcon: nil]; } - (void)drawRect:(NSRect)rect { #define DRAWDOT(c1, c2, p) \ { \ [c1 set]; \ NSRectFill(NSMakeRect(p.x, p.y, 3, 2)); \ [c2 set]; \ NSRectFill(NSMakeRect(p.x + 1, p.y, 2, 1)); \ NSRectFill(NSMakeRect(p.x + 2, p.y + 1, 1, 1)); \ } #define DRAWDOTS(c1, c2, p) \ { \ int i, x = p.x, y = p.y; \ for (i = 0; i < 3; i++) { \ [c1 set]; \ NSRectFill(NSMakeRect(x, y, 3, 2)); \ [c2 set]; \ NSRectFill(NSMakeRect(x + 1, y, 2, 1)); \ NSRectFill(NSMakeRect(x + 2, y + 1, 1, 1)); \ x += 6; \ } \ } if (isSelected || launching) { [highlightColor set]; NSRectFill(rect); if (highlightImage && useHligtImage) { [highlightImage dissolveToPoint: NSZeroPoint fraction: 0.2]; } } if (launching) { [icon dissolveToPoint: icnPoint fraction: dissFract]; return; } if (isDndSourceIcon == NO) { if (isTrashIcon == NO) { [icon compositeToPoint: icnPoint operation: NSCompositeSourceOver]; } else { if (trashFull) { [trashFullIcon compositeToPoint: icnPoint operation: NSCompositeSourceOver]; } else { [icon compositeToPoint: icnPoint operation: NSCompositeSourceOver]; } } if ((isWsIcon == NO) && (isTrashIcon == NO)) { if (apphidden) { DRAWDOT (darkerColor, [NSColor whiteColor], NSMakePoint(4, 2)); } else if (launched == NO) { DRAWDOTS (darkerColor, [NSColor whiteColor], NSMakePoint(4, 2)); } } } } - (BOOL)acceptsDraggedPaths:(NSArray *)paths { unsigned i; if ([self isSpecialIcon] == NO) { for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; FSNode *nod = [FSNode nodeWithPath: path]; if (([nod isPlain] || ([nod isPackage] && ([nod isApplication] == NO))) == NO) { return NO; } } [self select]; return YES; } else if (isTrashIcon) { NSString *fromPath = [[paths objectAtIndex: 0] stringByDeletingLastPathComponent]; BOOL accept = YES; if ([fromPath isEqual: [[GWDesktopManager desktopManager] trashPath]] == NO) { NSArray *vpaths = [ws mountedLocalVolumePaths]; for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; if (([vpaths containsObject: path] == NO) && ([fm isWritableFileAtPath: path] == NO)) { accept = NO; break; } } } else { accept = NO; } if (accept) { [self select]; } return accept; } return NO; } - (void)setDraggedPaths:(NSArray *)paths { NSUInteger i; [self unselect]; if ([self isSpecialIcon] == NO) { for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; FSNode *nod = [FSNode nodeWithPath: path]; if ([nod isPlain] || ([nod isPackage] && ([nod isApplication] == NO))) { NS_DURING { [ws openFile: path withApplication: appName]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [path lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } else if (isTrashIcon) // FIXME this is largely similar to RecyclerIcon #### { NSArray *vpaths = [ws mountedLocalVolumePaths]; NSMutableArray *files = [NSMutableArray array]; NSMutableArray *umountPaths = [NSMutableArray array]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; for (i = 0; i < [paths count]; i++) { NSString *srcpath = [paths objectAtIndex: i]; if ([vpaths containsObject: srcpath]) { [umountPaths addObject: srcpath]; } else { [files addObject: [srcpath lastPathComponent]]; } } for (i = 0; i < [umountPaths count]; i++) { NSString *umpath = [umountPaths objectAtIndex: i]; if (![ws unmountAndEjectDeviceAtPath: umpath]) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You are not allowed to umount\n", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, umpath], buttstr, nil, nil); [[GWDesktopManager desktopManager] unlockVolumeAtPath:umpath]; } } if ([files count]) { NSString *fromPath = [[paths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([fm isWritableFileAtPath: fromPath] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You do not have write permission\nfor", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, fromPath], buttstr, nil, nil); return; } [opinfo setObject: NSWorkspaceRecycleOperation forKey: @"operation"]; [opinfo setObject: fromPath forKey: @"source"]; [opinfo setObject: [node path] forKey: @"destination"]; [opinfo setObject: files forKey: @"files"]; [[GWDesktopManager desktopManager] performFileOperation: opinfo]; } } } @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopIcon.h0000644000175000001440000000204714751213523021434 0ustar multixusers/* GWDesktopIcon.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef GW_DESKTOP_ICON #define GW_DESKTOP_ICON #include "FSNIcon.h" @interface GWDesktopIcon : FSNIcon { } @end #endif // GW_DESKTOP_ICON gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopIcon.m0000644000175000001440000000763114751213523021445 0ustar multixusers/* GWDesktopIcon.m * * Copyright (C) 2005-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "GWDesktopIcon.h" @implementation GWDesktopIcon - (id)initForNode:(FSNode *)anode nodeInfoType:(FSNInfoType)type extendedType:(NSString *)exttype iconSize:(int)isize iconPosition:(NSUInteger)ipos labelFont:(NSFont *)lfont textColor:(NSColor *)tcolor gridIndex:(NSUInteger)gindex dndSource:(BOOL)dndsrc acceptDnd:(BOOL)dndaccept slideBack:(BOOL)slback { self = [super initForNode: anode nodeInfoType: type extendedType: exttype iconSize: isize iconPosition: ipos labelFont: lfont textColor: tcolor gridIndex: gindex dndSource: dndsrc acceptDnd: dndaccept slideBack: slback]; if (self) { drawLabelBackground = YES; } return self; } - (void)mouseDown:(NSEvent *)theEvent { NSWindow *win = [self window]; NSPoint location = [theEvent locationInWindow]; NSPoint selfloc = [self convertPoint: location fromView: nil]; BOOL onself = NO; NSEvent *nextEvent = nil; BOOL startdnd = NO; NSSize offset; [win makeMainWindow]; [win makeKeyWindow]; if (icnPosition == NSImageOnly) { onself = [self mouse: selfloc inRect: icnBounds]; } else { onself = ([self mouse: selfloc inRect: icnBounds] || [self mouse: selfloc inRect: labelRect]); } if (onself) { if (selectable == NO) { return; } if ([theEvent clickCount] == 1) { if (isSelected == NO) { [container stopRepNameEditing]; [container repSelected: self]; } if ([theEvent modifierFlags] & NSShiftKeyMask) { [container setSelectionMask: FSNMultipleSelectionMask]; if (isSelected) { if ([container selectionMask] == FSNMultipleSelectionMask) { [self unselect]; [container selectionDidChange]; return; } } else { [self select]; } } else { [container setSelectionMask: NSSingleSelectionMask]; if (isSelected == NO) { [self select]; } } if (dndSource) { while (1) { nextEvent = [win nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { [win postEvent: nextEvent atStart: YES]; break; } else if (([nextEvent type] == NSLeftMouseDragged) && ([self mouse: selfloc inRect: icnBounds])) { if (dragdelay < 5) { dragdelay++; } else { NSPoint p = [nextEvent locationInWindow]; offset = NSMakeSize(p.x - location.x, p.y - location.y); startdnd = YES; break; } } } } if (startdnd == YES) { [container stopRepNameEditing]; [self startExternalDragOnEvent: theEvent withMouseOffset: offset]; } editstamp = [theEvent timestamp]; } } else { [container mouseDown: theEvent]; } } @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopManager.h0000644000175000001440000001057014751213523022116 0ustar multixusers/* GWDesktopManager.h * * Copyright (C) 2005-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNodeRep.h" typedef enum DockPosition { DockPositionLeft = 0, DockPositionRight = 1 } DockPosition; @class GWorkspace; @class GWDesktopView; @class Dock; @class MPointWatcher; @interface GWDesktopManager : NSObject { FSNode *dskNode; id win; BOOL usexbundle; GWDesktopView *desktopView; BOOL singleClickLaunch; Dock *dock; BOOL hidedock; DockPosition dockPosition; NSRect dockReservedFrame; NSRect macmenuReservedFrame; NSRect tshelfReservedFrame; NSRect tshelfActivateFrame; GWorkspace *gworkspace; FSNodeRep *fsnodeRep; MPointWatcher *mpointWatcher; id ws; NSFileManager *fm; NSNotificationCenter *nc; } + (GWDesktopManager *)desktopManager; - (void)activateDesktop; - (void)deactivateDesktop; - (BOOL)isActive; - (void)checkDesktopDirs; - (void)setUsesXBundle:(BOOL)value; - (BOOL)usesXBundle; - (id)loadXWinBundle; - (BOOL)hasWindow:(id)awindow; - (id)desktopView; - (BOOL)singleClickLaunch; - (void)setSingleClickLaunch:(BOOL)value; - (Dock *)dock; - (DockPosition)dockPosition; - (void)setDockPosition:(DockPosition)pos; - (void)setDockActive:(BOOL)value; - (BOOL)dockActive; - (void)setReservedFrames; - (NSRect)macmenuReservedFrame; - (NSRect)dockReservedFrame; - (NSRect)tshelfReservedFrame; - (NSRect)tshelfActivateFrame; - (NSImage *)tabbedShelfBackground; - (void)mouseEnteredTShelfActivateFrame; - (void)mouseExitedTShelfActiveFrame; - (void)deselectAllIcons; - (void)addWatcherForPath:(NSString *)path; - (void)removeWatcherForPath:(NSString *)path; - (void)showRootViewer; - (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath; - (void)performFileOperation:(NSDictionary *)opinfo; - (NSString *)trashPath; - (void)moveToTrash; - (void)checkNewRemovableMedia; - (void)fileSystemWillChange:(NSNotification *)notif; - (void)fileSystemDidChange:(NSNotification *)notif; - (void)watcherNotification:(NSNotification *)notif; - (void)thumbnailsDidChangeInPaths:(NSArray *)paths; - (void)removableMediaPathsDidChange; - (void)hideDotsFileDidChange:(BOOL)hide; - (void)hiddenFilesDidChange:(NSArray *)paths; - (void)newVolumeMounted:(NSNotification *)notif; - (void)mountedVolumeWillUnmount:(NSNotification *)notif; - (void)mountedVolumeDidUnmount:(NSNotification *)notif; - (void)mountedVolumesDidChange; - (void)unlockVolumeAtPath:(NSString *)volpath; - (void)updateDefaults; - (void)setContextHelp; @end // // GWDesktopWindow Delegate Methods // @interface GWDesktopManager (GWDesktopWindowDelegateMethods) - (BOOL)validateItem:(id)menuItem; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionAsFolder; - (void)openSelectionWith; - (void)newFolder; - (void)newFile; - (void)duplicateFiles; - (void)recycleFiles; - (void)emptyTrash; - (void)deleteFiles; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)selectAllInViewer; - (void)showTerminal; @end @interface MPointWatcher : NSObject { NSArray *mountedRemovableVolumes; NSTimer *timer; BOOL active; GWDesktopManager *manager; NSFileManager *fm; } - (id)initForManager:(GWDesktopManager *)mngr; - (void)startWatching; - (void)stopWatching; - (void)watchMountPoints:(id)sender; @end @interface GWMounter : NSObject { } + (void)mountRemovableMedia; @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopManager.m0000644000175000001440000005550314751213523022130 0ustar multixusers/* GWDesktopManager.m * * Copyright (C) 2005-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWDesktopManager.h" #import "GWDesktopWindow.h" #import "GWDesktopView.h" #import "Dock.h" #import "FSNFunctions.h" #import "GWorkspace.h" #import "GWViewersManager.h" #import "TShelf/TShelfWin.h" #import "Thumbnailer/GWThumbnailer.h" #define RESV_MARGIN 10 static GWDesktopManager *desktopManager = nil; @implementation GWDesktopManager + (GWDesktopManager *)desktopManager { if (desktopManager == nil) { desktopManager = [[GWDesktopManager alloc] init]; } return desktopManager; } - (void)dealloc { [[ws notificationCenter] removeObserver: self]; [nc removeObserver: self]; RELEASE (dskNode); RELEASE (win); RELEASE (dock); RELEASE (mpointWatcher); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults; id defentry; NSString *path; id window = nil; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; ws = [NSWorkspace sharedWorkspace]; gworkspace = [GWorkspace gworkspace]; fsnodeRep = [FSNodeRep sharedInstance]; mpointWatcher = [[MPointWatcher alloc] initForManager: self]; [self checkDesktopDirs]; path = [NSHomeDirectory() stringByAppendingPathComponent: @"Desktop"]; ASSIGN (dskNode, [FSNode nodeWithPath: path]); defaults = [NSUserDefaults standardUserDefaults]; singleClickLaunch = [defaults boolForKey: @"singleclicklaunch"]; defentry = [defaults objectForKey: @"dockposition"]; dockPosition = defentry ? [defentry intValue] : DockPositionRight; [self setReservedFrames]; usexbundle = [defaults boolForKey: @"xbundle"]; if (usexbundle) { window = [self loadXWinBundle]; [window retain]; } if (window == nil) { usexbundle = NO; window = [GWDesktopWindow new]; } [window setDelegate: self]; desktopView = [[GWDesktopView alloc] initForManager: self]; [(NSWindow *)window setContentView: desktopView]; RELEASE (desktopView); win = RETAIN (window); RELEASE (window); hidedock = [defaults boolForKey: @"hidedock"]; dock = [[Dock alloc] initForManager: self]; [nc addObserver: self selector: @selector(fileSystemWillChange:) name: @"GWFileSystemWillChangeNotification" object: nil]; [nc addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; [nc addObserver: self selector: @selector(watcherNotification:) name: @"GWFileWatcherFileDidChangeNotification" object: nil]; [[ws notificationCenter] addObserver: self selector: @selector(newVolumeMounted:) name: NSWorkspaceDidMountNotification object: nil]; [[ws notificationCenter] addObserver: self selector: @selector(mountedVolumeWillUnmount:) name: NSWorkspaceWillUnmountNotification object: nil]; [[ws notificationCenter] addObserver: self selector: @selector(mountedVolumeDidUnmount:) name: NSWorkspaceDidUnmountNotification object: nil]; [self setContextHelp]; } return self; } - (void)activateDesktop { [win activate]; [desktopView showMountedVolumes]; [desktopView showContentsOfNode: dskNode]; [self addWatcherForPath: [dskNode path]]; if ((hidedock == NO) && ([dock superview] == nil)) { [desktopView addSubview: dock]; [dock tile]; } [mpointWatcher startWatching]; } - (void)deactivateDesktop { [win deactivate]; [self removeWatcherForPath: [dskNode path]]; [mpointWatcher stopWatching]; } - (BOOL)isActive { return [win isVisible]; } - (void)checkDesktopDirs { NSString *path; BOOL isdir; path = [NSHomeDirectory() stringByAppendingPathComponent: @"Desktop"]; if (([fm fileExistsAtPath: path isDirectory: &isdir] && isdir) == NO) { NSString *hiddenNames = @".gwsort\n.gwdir\n.hidden\n"; if ([fm createDirectoryAtPath: path attributes: nil] == NO) { NSRunAlertPanel(NSLocalizedString(@"error", @""), NSLocalizedString(@"Can't create the Desktop directory!", @""), NSLocalizedString(@"OK", @""), nil, nil); [NSApp terminate: self]; } [hiddenNames writeToFile: [path stringByAppendingPathComponent: @".hidden"] atomically: YES]; } path = [NSHomeDirectory() stringByAppendingPathComponent: @".Trash"]; if ([fm fileExistsAtPath: path isDirectory: &isdir] == NO) { if ([fm createDirectoryAtPath: path attributes: nil] == NO) { NSLog(@"Can't create the Recycler directory! Quitting now."); [NSApp terminate: self]; } } } - (void)setUsesXBundle:(BOOL)value { usexbundle = value; if ([self isActive]) { id window = nil; BOOL changed = NO; if (usexbundle) { if ([win isKindOfClass: [GWDesktopWindow class]]) { window = [self loadXWinBundle]; changed = (window != nil); } } else { if ([win isKindOfClass: [GWDesktopWindow class]] == NO) { window = [GWDesktopWindow new]; changed = YES; } } if (changed) { RETAIN (desktopView); [desktopView removeFromSuperview]; [win close]; DESTROY (win); [window setDelegate: self]; [(NSWindow *)window setContentView: desktopView]; RELEASE (desktopView); win = RETAIN (window); RELEASE (window); [win activate]; } } } - (BOOL)usesXBundle { return usexbundle; } - (id)loadXWinBundle { NSEnumerator *enumerator; NSString *bpath; NSBundle *bundle; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bpath = [enumerator nextObject]) != nil) { bpath = [bpath stringByAppendingPathComponent: @"Bundles"]; bpath = [bpath stringByAppendingPathComponent: @"XDesktopWindow.bundle"]; bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { id pC; pC = [[[bundle principalClass] alloc] init]; [pC autorelease]; return pC; } } return nil; } - (BOOL)hasWindow:(id)awindow { return (win && (win == awindow)); } - (id)desktopView { return desktopView; } - (BOOL)singleClickLaunch { return singleClickLaunch; } - (void)setSingleClickLaunch:(BOOL)value { singleClickLaunch = value; [dock setSingleClickLaunch:singleClickLaunch]; } - (Dock *)dock { return dock; } - (DockPosition)dockPosition { return dockPosition; } - (void)setDockPosition:(DockPosition)pos { dockPosition = pos; [dock setPosition: pos]; [self setReservedFrames]; [desktopView dockPositionDidChange]; } - (void)setDockActive:(BOOL)value { hidedock = !value; if (hidedock && [dock superview]) { [dock removeFromSuperview]; [desktopView setNeedsDisplayInRect: dockReservedFrame]; } else if ([dock superview] == nil) { [desktopView addSubview: dock]; [dock tile]; [desktopView setNeedsDisplayInRect: dockReservedFrame]; } } - (BOOL)dockActive { return !hidedock; } - (void)setReservedFrames { NSRect screenFrame = [[NSScreen mainScreen] frame]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *menuStyle = [defaults objectForKey: @"NSMenuInterfaceStyle"]; macmenuReservedFrame = NSZeroRect; if (menuStyle && [menuStyle isEqual: @"NSMacintoshInterfaceStyle"]) { macmenuReservedFrame.size.width = screenFrame.size.width; macmenuReservedFrame.size.height = 25; macmenuReservedFrame.origin.x = 0; macmenuReservedFrame.origin.y = screenFrame.size.height - 25; } dockReservedFrame.size.height = screenFrame.size.height; dockReservedFrame.size.width = 64 + RESV_MARGIN; dockReservedFrame.origin.x = 0; dockReservedFrame.origin.y = 0; if (dockPosition == DockPositionRight) { dockReservedFrame.origin.x = screenFrame.size.width - 64 - RESV_MARGIN; } tshelfReservedFrame = NSMakeRect(0, 0, screenFrame.size.width, 106 + RESV_MARGIN); tshelfActivateFrame = NSMakeRect(0, 0, screenFrame.size.width, 20); } - (NSRect)macmenuReservedFrame { return macmenuReservedFrame; } - (NSRect)dockReservedFrame { return dockReservedFrame; } - (NSRect)tshelfReservedFrame { return tshelfReservedFrame; } - (NSRect)tshelfActivateFrame { return tshelfActivateFrame; } - (NSImage *)tabbedShelfBackground { return [desktopView tshelfBackground]; } - (void)mouseEnteredTShelfActivateFrame { [[gworkspace tabbedShelf] animateShowing]; } - (void)mouseExitedTShelfActiveFrame { [[gworkspace tabbedShelf] animateHiding]; } - (void)deselectAllIcons { [desktopView unselectOtherReps: nil]; [desktopView selectionDidChange]; [desktopView stopRepNameEditing]; } - (void)addWatcherForPath:(NSString *)path { [gworkspace addWatcherForPath: path]; } - (void)removeWatcherForPath:(NSString *)path { [gworkspace removeWatcherForPath: path]; } - (void)showRootViewer { [gworkspace newViewerAtPath: path_separator()]; } - (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath { return [gworkspace selectFile: fullPath inFileViewerRootedAtPath: rootFullpath]; } - (void)performFileOperation:(NSDictionary *)opinfo { [gworkspace performFileOperation: opinfo]; } - (NSString *)trashPath { return [gworkspace trashPath]; } - (void)moveToTrash { [gworkspace moveToTrash]; } - (void)checkNewRemovableMedia { NS_DURING { [NSThread detachNewThreadSelector: @selector(mountRemovableMedia) toTarget: [GWMounter class] withObject: nil]; } NS_HANDLER { NSLog(@"Error! A fatal error occurred while detaching the thread."); } NS_ENDHANDLER } - (void)makeThumbnails:(id)sender { NSString *path; path = [dskNode path]; path = [path stringByResolvingSymlinksInPath]; if (path) { Thumbnailer *t; t = [Thumbnailer sharedThumbnailer]; [t makeThumbnails:path]; [t release]; } } - (void)removeThumbnails:(id)sender { NSString *path; path = [dskNode path]; path = [path stringByResolvingSymlinksInPath]; if (path) { Thumbnailer *t; t = [Thumbnailer sharedThumbnailer]; [t removeThumbnails:path]; [t release]; } } - (void)fileSystemWillChange:(NSNotification *)notif { NSDictionary *opinfo = (NSDictionary *)[notif object]; if ([dskNode involvedByFileOperation: opinfo]) { [[self desktopView] nodeContentsWillChange: opinfo]; } } - (void)fileSystemDidChange:(NSNotification *)notif { NSDictionary *opinfo = (NSDictionary *)[notif object]; if ([dskNode isValid] == NO) { NSRunAlertPanel(nil, NSLocalizedString(@"The Desktop directory has been deleted! Quitting now!", @""), NSLocalizedString(@"OK", @""), nil, nil); [NSApp terminate: self]; } /* update the desktop view, but only if it is visible */ if ([self isActive] && [dskNode involvedByFileOperation: opinfo]) { [[self desktopView] nodeContentsDidChange: opinfo]; } if ([self dockActive]) { [dock nodeContentsDidChange: opinfo]; } } - (void)watcherNotification:(NSNotification *)notif { NSDictionary *info = (NSDictionary *)[notif object]; NSString *path = [info objectForKey: @"path"]; NSString *event = [info objectForKey: @"event"]; if ([path isEqual: [dskNode path]]) { if ([event isEqual: @"GWWatchedPathDeleted"]) { NSRunAlertPanel(nil, NSLocalizedString(@"The Desktop directory has been deleted! Quitting now!", @""), NSLocalizedString(@"OK", @""), nil, nil); [NSApp terminate: self]; } /* update the desktop view, but only if active */ else if ([self isActive]) { [[self desktopView] watchedPathChanged: info]; } } /* update the dock, if active */ if ([self dockActive]) [dock watchedPathChanged: info]; } - (void)thumbnailsDidChangeInPaths:(NSArray *)paths { [[self desktopView] updateIcons]; } - (void)removableMediaPathsDidChange { [[self desktopView] showMountedVolumes]; [mpointWatcher startWatching]; } - (void)hideDotsFileDidChange:(BOOL)hide { [[self desktopView] reloadFromNode: dskNode]; } - (void)hiddenFilesDidChange:(NSArray *)paths { [[self desktopView] reloadFromNode: dskNode]; } - (void)newVolumeMounted:(NSNotification *)notif { if (win && [win isVisible]) { NSDictionary *dict = [notif userInfo]; NSString *volpath = [dict objectForKey: @"NSDevicePath"]; [[self desktopView] newVolumeMountedAtPath: volpath]; } } - (void)mountedVolumeWillUnmount:(NSNotification *)notif { if (win && [win isVisible]) { NSDictionary *dict = [notif userInfo]; NSString *volpath = [dict objectForKey: @"NSDevicePath"]; [fsnodeRep lockPaths: [NSArray arrayWithObject: volpath]]; [[self desktopView] workspaceWillUnmountVolumeAtPath: volpath]; } } - (void)mountedVolumeDidUnmount:(NSNotification *)notif { if (win && [win isVisible]) { NSDictionary *dict = [notif userInfo]; NSString *volpath = [dict objectForKey: @"NSDevicePath"]; [fsnodeRep unlockPaths: [NSArray arrayWithObject: volpath]]; [[self desktopView] workspaceDidUnmountVolumeAtPath: volpath]; } } - (void)unlockVolumeAtPath:(NSString *)volpath { [fsnodeRep unlockPaths: [NSArray arrayWithObject: volpath]]; [[self desktopView] unlockVolumeAtPath: volpath]; } - (void)mountedVolumesDidChange { [[self desktopView] showMountedVolumes]; } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: [NSNumber numberWithInt: dockPosition] forKey: @"dockposition"]; [defaults setBool: singleClickLaunch forKey: @"singleclicklaunch"]; [defaults setBool: usexbundle forKey: @"xbundle"]; [defaults setBool: hidedock forKey: @"hidedock"]; [dock updateDefaults]; [desktopView updateDefaults]; } - (void)setContextHelp { NSHelpManager *manager = [NSHelpManager sharedHelpManager]; NSString *help; help = @"Desktop.rtfd"; [manager setContextHelp: (NSAttributedString *)help withObject: [self desktopView]]; help = @"Dock.rtfd"; [manager setContextHelp: (NSAttributedString *)help withObject: dock]; help = @"Recycler.rtfd"; [manager setContextHelp: (NSAttributedString *)help withObject: [dock trashIcon]]; } @end // // GWDesktopWindow Delegate Methods // @implementation GWDesktopManager (GWDesktopWindowDelegateMethods) - (BOOL)validateItem:(id)menuItem { if ([self isActive]) { SEL action = [menuItem action]; if (sel_isEqual(action, @selector(duplicateFiles:)) || sel_isEqual(action, @selector(recycleFiles:)) || sel_isEqual(action, @selector(deleteFiles:))) { return ([[desktopView selectedNodes] count] > 0); } else if (sel_isEqual(action, @selector(openSelection:))) { NSArray *selection = [desktopView selectedNodes]; return (selection && [selection count] && ([selection isEqual: [NSArray arrayWithObject: dskNode]] == NO)); } else if (sel_isEqual(action, @selector(openWith:))) { NSArray *selection = [desktopView selectedNodes]; BOOL canopen = YES; int i; if (selection && [selection count] && ([selection isEqual: [NSArray arrayWithObject: dskNode]] == NO)) { for (i = 0; i < [selection count]; i++) { FSNode *node = [selection objectAtIndex: i]; if (([node isPlain] == NO) && (([node isPackage] == NO) || [node isApplication])) { canopen = NO; break; } } } else { canopen = NO; } return canopen; } else if (sel_isEqual(action, @selector(openSelectionAsFolder:))) { NSArray *selection = [desktopView selectedNodes]; if (selection && ([selection count] == 1)) { return [[selection objectAtIndex: 0] isDirectory]; } return NO; } return YES; } return NO; } - (void)openSelectionInNewViewer:(BOOL)newv { NSArray *selreps = [desktopView selectedReps]; NSUInteger i; for (i = 0; i < [selreps count]; i++) { FSNode *node = [[selreps objectAtIndex: i] node]; if ([node hasValidPath]) { NS_DURING { if ([node isDirectory]) { if ([node isPackage]) { if ([node isApplication] == NO) { [gworkspace openFile: [node path]]; } else { [ws launchApplication: [node path]]; } } else { [gworkspace newViewerAtPath: [node path]]; } } else if ([node isPlain]) { [gworkspace openFile: [node path]]; } } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } else { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } } } - (void)openSelectionAsFolder { NSArray *selnodes = [desktopView selectedNodes]; unsigned i; for (i = 0; i < [selnodes count]; i++) { FSNode *node = [selnodes objectAtIndex: i]; if ([node isDirectory]) { [gworkspace newViewerAtPath: [node path]]; } else if ([node isPlain]) { [gworkspace openFile: [node path]]; } } } - (void)openSelectionWith { [gworkspace openSelectedPathsWith]; } - (void)newFolder { [gworkspace newObjectAtPath: [dskNode path] isDirectory: YES]; } - (void)newFile { [gworkspace newObjectAtPath: [dskNode path] isDirectory: NO]; } - (void)duplicateFiles { if ([[desktopView selectedNodes] count]) { [gworkspace duplicateFiles]; } } - (void)recycleFiles { if ([[desktopView selectedNodes] count]) { [gworkspace moveToTrash]; } } - (void)emptyTrash { [gworkspace emptyRecycler: nil]; } - (void)deleteFiles { if ([[desktopView selectedNodes] count]) { [gworkspace deleteFiles]; } } - (void)setShownType:(id)sender { NSString *title = [sender title]; FSNInfoType type = FSNInfoNameType; if ([title isEqual: NSLocalizedString(@"Name", @"")]) { type = FSNInfoNameType; } else if ([title isEqual: NSLocalizedString(@"Type", @"")]) { type = FSNInfoKindType; } else if ([title isEqual: NSLocalizedString(@"Size", @"")]) { type = FSNInfoSizeType; } else if ([title isEqual: NSLocalizedString(@"Modification date", @"")]) { type = FSNInfoDateType; } else if ([title isEqual: NSLocalizedString(@"Owner", @"")]) { type = FSNInfoOwnerType; } else { type = FSNInfoNameType; } [desktopView setShowType: type]; } - (void)setExtendedShownType:(id)sender { [desktopView setExtendedShowType: [sender title]]; } - (void)setIconsSize:(id)sender { [desktopView setIconSize: [[sender title] intValue]]; } - (void)setIconsPosition:(id)sender { NSString *title = [sender title]; if ([title isEqual: NSLocalizedString(@"Left", @"")]) { [desktopView setIconPosition: NSImageLeft]; } else { [desktopView setIconPosition: NSImageAbove]; } } - (void)setLabelSize:(id)sender { [desktopView setLabelTextSize: [[sender title] intValue]]; } - (void)selectAllInViewer { [desktopView selectAll]; } - (void)showTerminal { [gworkspace startXTermOnDirectory: [dskNode path]]; } @end @implementation MPointWatcher - (void)dealloc { if (timer && [timer isValid]) { [timer invalidate]; } RELEASE (mountedRemovableVolumes); [super dealloc]; } - (id)initForManager:(GWDesktopManager *)mngr { self = [super init]; if (self) { manager = mngr; active = NO; fm = [NSFileManager defaultManager]; timer = [NSTimer scheduledTimerWithTimeInterval: 1.5 target: self selector: @selector(watchMountPoints:) userInfo: nil repeats: YES]; } return self; } - (void)startWatching { [mountedRemovableVolumes release]; mountedRemovableVolumes = [[NSWorkspace sharedWorkspace] mountedRemovableMedia]; [mountedRemovableVolumes retain]; active = YES; } - (void)stopWatching { active = NO; [mountedRemovableVolumes release]; mountedRemovableVolumes = nil; } - (void)watchMountPoints:(id)sender { if (active) { BOOL removed = NO; BOOL added = NO; NSUInteger i; NSArray *newVolumes = [[NSWorkspace sharedWorkspace] mountedRemovableMedia]; for (i = 0; i < [mountedRemovableVolumes count]; i++) { NSString *vol; vol = [mountedRemovableVolumes objectAtIndex:i]; if (![newVolumes containsObject:vol]) removed |= YES; } for (i = 0; i < [newVolumes count]; i++) { NSString *vol; vol = [newVolumes objectAtIndex:i]; if (![mountedRemovableVolumes containsObject:vol]) added |= YES; } if (added || removed) [manager mountedVolumesDidChange]; [mountedRemovableVolumes release]; mountedRemovableVolumes = newVolumes; [mountedRemovableVolumes retain]; } } @end @implementation GWMounter + (void)mountRemovableMedia { CREATE_AUTORELEASE_POOL(pool); [[NSWorkspace sharedWorkspace] mountNewRemovableMedia]; RELEASE (pool); } @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopView.h0000644000175000001440000000636214751213523021462 0ustar multixusers/* GWDesktopView.h * * Copyright (C) 2005-2024 Free Software Foundation, Inc. * * Author: Enrico SersalE * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "FSNIconsView.h" @class NSImage; @class GWDesktopManager; typedef enum BackImageStyle { BackImageCenterStyle = 0, BackImageFitStyle = 1, BackImageTileStyle = 2, BackImageScaleStyle = 3 } BackImageStyle; @interface GWDesktopView : FSNIconsView { NSRect screenFrame; NSRect *grid; NSInteger gridItemsCount; NSInteger rowItemsCount; NSImage *dragIcon; NSPoint dragPoint; NSUInteger insertIndex; BOOL dragLocalIcon; NSImage *backImage; NSString *imagePath; BackImageStyle backImageStyle; BOOL useBackImage; NSMutableArray *mountedVolumes; NSMutableDictionary *desktopInfo; GWDesktopManager *manager; } - (id)initForManager:(id)mngr; - (void)newVolumeMountedAtPath:(NSString *)vpath; - (void)workspaceWillUnmountVolumeAtPath:(NSString *)vpath; - (void)workspaceDidUnmountVolumeAtPath:(NSString *)vpath; - (void)unlockVolumeAtPath:(NSString *)path; - (void)showMountedVolumes; - (void)dockPositionDidChange; - (NSUInteger)firstFreeGridIndex; - (NSUInteger)firstFreeGridIndexAfterIndex:(NSUInteger)index; - (BOOL)isFreeGridIndex:(NSUInteger)index; - (FSNIcon *)iconWithGridIndex:(NSUInteger)index; - (NSArray *)iconsWithGridOriginX:(float)x; - (NSArray *)iconsWithGridOriginY:(float)y; - (NSUInteger)indexOfGridRectContainingPoint:(NSPoint)p; - (NSRect)iconBoundsInGridAtIndex:(NSUInteger)index; - (void)makeIconsGrid; - (NSImage *)tshelfBackground; - (void)getDesktopInfo; - (void)updateDefaults; @end @interface GWDesktopView (NodeRepContainer) @end @interface GWDesktopView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end @interface GWDesktopView (BackgroundColors) - (NSColor *)currentColor; - (void)setCurrentColor:(NSColor *)color; - (void)createBackImage:(NSImage *)image; - (NSImage *)backImage; - (NSString *)backImagePath; - (void)setBackImageAtPath:(NSString *)impath; - (BOOL)useBackImage; - (void)setUseBackImage:(BOOL)value; - (BackImageStyle)backImageStyle; - (void)setBackImageStyle:(BackImageStyle)style; @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopView.m0000644000175000001440000013535514751213523021474 0ustar multixusers/* GWDesktopView.m * * Copyright (C) 2005-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNodeRep.h" #import "FSNFunctions.h" #import "GWDesktopView.h" #import "GWDesktopIcon.h" #import "GWDesktopManager.h" #import "Dock.h" #define DEF_ICN_SIZE 48 #define DEF_TEXT_SIZE 12 #define DEF_ICN_POS NSImageAbove #define X_MARGIN (10) #define Y_MARGIN (12) #define EDIT_MARGIN (4) #ifndef max #define max(a,b) ((a) >= (b) ? (a):(b)) #endif #ifndef min #define min(a,b) ((a) <= (b) ? (a):(b)) #endif #define DEF_COLOR [NSColor colorWithCalibratedRed: 0.39 green: 0.51 blue: 0.57 alpha: 1.00] @implementation GWDesktopView - (void)dealloc { if (grid != NULL) { NSZoneFree (NSDefaultMallocZone(), grid); } RELEASE (mountedVolumes); RELEASE (desktopInfo); RELEASE (backImage); RELEASE (imagePath); RELEASE (dragIcon); [super dealloc]; } - (id)initForManager:(id)mngr { self = [super init]; if (self) { NSSize size; NSCachedImageRep *rep; manager = mngr; screenFrame = [[NSScreen mainScreen] frame]; [self setFrame: screenFrame]; size = NSMakeSize(screenFrame.size.width, 2); horizontalImage = [[NSImage allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: size]; rep = [[NSCachedImageRep allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: size depth: [NSWindow defaultDepthLimit] separate: YES alpha: YES]; [horizontalImage addRepresentation: rep]; RELEASE (rep); size = NSMakeSize(2, screenFrame.size.height); verticalImage = [[NSImage allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: size]; rep = [[NSCachedImageRep allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize: size depth: [NSWindow defaultDepthLimit] separate: YES alpha: YES]; [verticalImage addRepresentation: rep]; RELEASE (rep); ASSIGN (backColor, DEF_COLOR); backImageStyle = BackImageCenterStyle; mountedVolumes = [NSMutableArray new]; [self getDesktopInfo]; [self makeIconsGrid]; dragIcon = nil; } return self; } - (void)newVolumeMountedAtPath:(NSString *)vpath { FSNode *vnode = [FSNode nodeWithPath: vpath]; [vnode setMountPoint: YES]; [self removeRepOfSubnode: vnode]; [self addRepForSubnode: vnode]; [self tile]; } - (void)workspaceWillUnmountVolumeAtPath:(NSString *)vpath { [self checkLockedReps]; } - (void)workspaceDidUnmountVolumeAtPath:(NSString *)vpath { FSNIcon *icon = [self repOfSubnodePath: vpath]; if (icon) { [self removeRep: icon]; [self tile]; } } - (void)unlockVolumeAtPath:(NSString *)path { [self checkLockedReps]; } - (void)showMountedVolumes { NSArray *rvPaths; NSMutableArray *newVolumes; NSUInteger i; BOOL added; added = NO; rvPaths = [[NSWorkspace sharedWorkspace] mountedRemovableMedia]; newVolumes = [NSMutableArray arrayWithCapacity:1]; for (i = 0; i < [mountedVolumes count]; i++) { NSString *v; v = [mountedVolumes objectAtIndex:i]; if ([rvPaths indexOfObject:v] == NSNotFound) { NSLog(@"removing: %@", v); [mountedVolumes removeObjectAtIndex:i]; [self workspaceDidUnmountVolumeAtPath: v]; } } for (i = 0; i < [rvPaths count]; i++) { NSString *v; v = [rvPaths objectAtIndex:i]; if ([mountedVolumes indexOfObject:v] == NSNotFound) { [newVolumes addObject:v]; if ([v isEqual: path_separator()] == NO) { NSLog(@"new volume: %@", v); [self newVolumeMountedAtPath:v]; } added = YES; } } // we add new volumes at once at the end, or we disturb our for cycle // we Tile only when adding, since workspaceDidUnmountVolumeAtPath does it for us if (added) { [mountedVolumes addObjectsFromArray:newVolumes]; [self tile]; } } - (void)dockPositionDidChange { [self makeIconsGrid]; [self tile]; [self setNeedsDisplay: YES]; } - (void)tile { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if (index < gridItemsCount) { if (NSEqualRects(grid[index], [icon frame]) == NO) { [icon setFrame: grid[index]]; } } else { NSUInteger freeindex = [self firstFreeGridIndex]; [icon setGridIndex: freeindex]; [icon setFrame: grid[freeindex]]; } } [self updateNameEditor]; } - (NSUInteger)firstFreeGridIndex { NSUInteger i; for (i = 0; i < gridItemsCount; i++) { if ([self isFreeGridIndex: i]) { return i; } } return NSNotFound; } - (NSUInteger)firstFreeGridIndexAfterIndex:(NSUInteger)index { NSUInteger ind; for (ind = index + 1; ind < gridItemsCount; ind++) { if ([self isFreeGridIndex: ind]) { return ind; } } return [self firstFreeGridIndex]; } - (BOOL)isFreeGridIndex:(NSUInteger)index { NSUInteger i; if ((index == NSNotFound) || (index >= gridItemsCount)) return NO; for (i = 0; i < [icons count]; i++) { if ([[icons objectAtIndex: i] gridIndex] == index) { return NO; } } return YES; } - (FSNIcon *)iconWithGridIndex:(NSUInteger)index { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon gridIndex] == index) { return icon; } } return nil; } - (NSArray *)iconsWithGridOriginX:(float)x { NSMutableArray *icns = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSPoint p = [icon frame].origin; if (p.x == x) { [icns addObject: icon]; } } if ([icns count]) { return icns; } return nil; } - (NSArray *)iconsWithGridOriginY:(float)y { NSMutableArray *icns = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSPoint p = [icon frame].origin; if (p.y == y) { [icns addObject: icon]; } } if ([icns count]) { return icns; } return nil; } - (NSUInteger)indexOfGridRectContainingPoint:(NSPoint)p { NSUInteger i; for (i = 0; i < gridItemsCount; i++) { if (NSPointInRect(p, grid[i])) { return i; } } return NSNotFound; } - (NSRect)iconBoundsInGridAtIndex:(NSUInteger)index { NSRect icnBounds = NSMakeRect(grid[index].origin.x, grid[index].origin.y, iconSize, iconSize); NSRect hlightRect = NSZeroRect; hlightRect.size.width = ceil(iconSize / 3 * 4); hlightRect.size.height = ceil(hlightRect.size.width * [fsnodeRep highlightHeightFactor]); if ((hlightRect.size.height - iconSize) < 2) { hlightRect.size.height = iconSize + 2; } if (iconPosition == NSImageAbove) { hlightRect.origin.x = ceil((gridSize.width - hlightRect.size.width) / 2); if (infoType != FSNInfoNameType) { hlightRect.origin.y = floor([fsnodeRep heightOfFont: labelFont] * 2 - 2); } else { hlightRect.origin.y = floor([fsnodeRep heightOfFont: labelFont]); } } else { hlightRect.origin.x = 0; hlightRect.origin.y = 0; } icnBounds.origin.x += hlightRect.origin.x + ((hlightRect.size.width - iconSize) / 2); icnBounds.origin.y += hlightRect.origin.y + ((hlightRect.size.height - iconSize) / 2); return NSIntegralRect(icnBounds); } - (void)makeIconsGrid { NSRect dckr = [manager dockReservedFrame]; NSRect tshfr = [manager tshelfReservedFrame]; NSRect mmfr = [manager macmenuReservedFrame]; NSRect gridrect = screenFrame; unsigned ymargin; NSPoint gpnt; NSUInteger i; if (grid != NULL) { NSZoneFree (NSDefaultMallocZone(), grid); } [self calculateGridSize]; gridrect.origin.y += tshfr.size.height; gridrect.size.height -= tshfr.size.height; gridrect.size.width -= dckr.size.width; gridrect.size.height -= mmfr.size.height; if ([manager dockPosition] == DockPositionLeft) { gridrect.origin.x += dckr.size.width; } if (infoType != FSNInfoNameType) { ymargin = 2; } else { ymargin = Y_MARGIN; } colItemsCount = (NSInteger)(gridrect.size.width / (gridSize.width + X_MARGIN)); rowItemsCount = (NSInteger)(gridrect.size.height / (gridSize.height + ymargin)); gridItemsCount = colItemsCount * rowItemsCount; grid = NSZoneMalloc (NSDefaultMallocZone(), sizeof(NSRect) * gridItemsCount); gpnt.x = gridrect.size.width + gridrect.origin.x; gpnt.y = gridrect.size.height + gridrect.origin.y; gpnt.x -= (gridSize.width + X_MARGIN); for (i = 0; i < gridItemsCount; i++) { gpnt.y -= (gridSize.height + ymargin); if (gpnt.y <= gridrect.origin.y) { gpnt.y = gridrect.size.height + gridrect.origin.y; gpnt.y -= (gridSize.height + ymargin); gpnt.x -= (gridSize.width + X_MARGIN); } grid[i].origin = gpnt; grid[i].size = gridSize; } gpnt = grid[gridItemsCount - 1].origin; if (gpnt.x != (gridrect.origin.x + X_MARGIN)) { float diffx = gpnt.x - (gridrect.origin.x + X_MARGIN); float xshft = 0.0; diffx /= (int)(gridrect.size.width / (gridSize.width + X_MARGIN)); for (i = 0; i < gridItemsCount; i++) { if (div(i, rowItemsCount).rem == 0) { xshft += diffx; } grid[i].origin.x -= xshft; } } if (gpnt.y != (gridrect.origin.y + ymargin)) { float diffy = gpnt.y - (gridrect.origin.y + ymargin); float yshft = 0.0; diffy /= rowItemsCount; for (i = 0; i < gridItemsCount; i++) { if (div(i, rowItemsCount).rem == 0) { yshft = 0.0; } yshft += diffy; grid[i].origin.y -= yshft; } } for (i = 0; i < gridItemsCount; i++) { grid[i] = NSIntegralRect(grid[i]); } } - (NSImage *)tshelfBackground { CREATE_AUTORELEASE_POOL (pool); NSSize size = NSMakeSize([self frame].size.width, 112); NSImage *image = [[NSImage alloc] initWithSize: size]; [image lockFocus]; NSCopyBits([[self window] gState], NSMakeRect(0, 0, size.width, size.height), NSMakePoint(0.0, 0.0)); [image unlockFocus]; RETAIN (image); RELEASE (image); RELEASE (pool); return AUTORELEASE(image); } - (void)getDesktopInfo { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *dskinfo = [defaults objectForKey: @"desktopinfo"]; if (dskinfo) { id entry = [dskinfo objectForKey: @"backcolor"]; FSNInfoType itype; if (entry) { float red = [[(NSDictionary *)entry objectForKey: @"red"] floatValue]; float green = [[(NSDictionary *)entry objectForKey: @"green"] floatValue]; float blue = [[(NSDictionary *)entry objectForKey: @"blue"] floatValue]; float alpha = [[(NSDictionary *)entry objectForKey: @"alpha"] floatValue]; ASSIGN (backColor, [NSColor colorWithCalibratedRed: red green: green blue: blue alpha: alpha]); } entry = [dskinfo objectForKey: @"imagestyle"]; backImageStyle = entry ? [entry intValue] : backImageStyle; entry = [dskinfo objectForKey: @"imagepath"]; if (entry) { CREATE_AUTORELEASE_POOL (pool); NSImage *image = [[NSImage alloc] initWithContentsOfFile: entry]; if (image) { ASSIGN (imagePath, entry); [self createBackImage: image]; RELEASE (image); } RELEASE (pool); } entry = [dskinfo objectForKey: @"usebackimage"]; useBackImage = entry ? [entry boolValue] : NO; entry = [dskinfo objectForKey: @"iconsize"]; iconSize = entry ? [entry intValue] : iconSize; entry = [dskinfo objectForKey: @"labeltxtsize"]; if (entry) { labelTextSize = [entry intValue]; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); } entry = [dskinfo objectForKey: @"iconposition"]; iconPosition = entry ? [entry intValue] : iconPosition; entry = [dskinfo objectForKey: @"fsn_info_type"]; itype = entry ? [entry intValue] : infoType; if (infoType != itype) { infoType = itype; [self makeIconsGrid]; } infoType = itype; if (infoType == FSNInfoExtendedType) { DESTROY (extInfoType); entry = [dskinfo objectForKey: @"ext_info_type"]; if (entry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: entry]) { ASSIGN (extInfoType, entry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; [self makeIconsGrid]; } } desktopInfo = [dskinfo mutableCopy]; } else { desktopInfo = [NSMutableDictionary new]; } } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *indexes = [NSMutableDictionary dictionary]; NSColor *tempColor; NSMutableDictionary *backColorDict = [NSMutableDictionary dictionary]; CGFloat red, green, blue, alpha; NSUInteger i; tempColor = [backColor colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; [tempColor getRed: &red green: &green blue: &blue alpha: &alpha]; [backColorDict setObject: [NSNumber numberWithFloat: red] forKey: @"red"]; [backColorDict setObject: [NSNumber numberWithFloat: green] forKey: @"green"]; [backColorDict setObject: [NSNumber numberWithFloat: blue] forKey: @"blue"]; [backColorDict setObject: [NSNumber numberWithFloat: alpha] forKey: @"alpha"]; [desktopInfo setObject: backColorDict forKey: @"backcolor"]; [desktopInfo setObject: [NSNumber numberWithBool: useBackImage] forKey: @"usebackimage"]; [desktopInfo setObject: [NSNumber numberWithInt: backImageStyle] forKey: @"imagestyle"]; if (backImage) { [desktopInfo setObject: imagePath forKey: @"imagepath"]; } [desktopInfo setObject: [NSNumber numberWithInt: iconSize] forKey: @"iconsize"]; [desktopInfo setObject: [NSNumber numberWithInt: labelTextSize] forKey: @"labeltxtsize"]; [desktopInfo setObject: [NSNumber numberWithInt: iconPosition] forKey: @"iconposition"]; [desktopInfo setObject: [NSNumber numberWithInt: infoType] forKey: @"fsn_info_type"]; if (infoType == FSNInfoExtendedType) { [desktopInfo setObject: extInfoType forKey: @"ext_info_type"]; } for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [indexes setObject: [NSNumber numberWithUnsignedInteger: [icon gridIndex]] forKey: [[icon node] name]]; } [desktopInfo setObject: indexes forKey: @"indexes"]; [defaults setObject: desktopInfo forKey: @"desktopinfo"]; } - (void)selectIconInPrevLine { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if ([icon isSelected]) { FSNIcon *prev; while (index > 0) { prev = [self iconWithGridIndex: index-1]; if (prev) { [prev select]; break; } index--; } break; } } } - (void)selectIconInNextLine { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if ([icon isSelected]) { FSNIcon *next; while (index < gridItemsCount) { index++; next = [self iconWithGridIndex: index]; if (next) { [next select]; break; } } break; } } } - (void)selectPrevIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if ([icon isSelected]) { NSArray *rowicons = [self iconsWithGridOriginY: [icon frame].origin.y]; if (rowicons) { FSNIcon *prev; while (index < gridItemsCount) { index++; prev = [self iconWithGridIndex: index]; if (prev && [rowicons containsObject: prev]) { [prev select]; break; } } } break; } } } - (void)selectNextIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if ([icon isSelected]) { NSArray *rowicons = [self iconsWithGridOriginY: [icon frame].origin.y]; if (rowicons) { FSNIcon *next; while (index > 0) { next = [self iconWithGridIndex: index - 1]; if (next && [rowicons containsObject: next]) { [next select]; break; } index--; } } break; } } } - (void)mouseUp:(NSEvent *)theEvent { [self setSelectionMask: NSSingleSelectionMask]; } - (void)mouseDown:(NSEvent *)theEvent { NSWindow *win = [self window]; [win makeMainWindow]; [win makeKeyWindow]; if ([theEvent modifierFlags] != NSShiftKeyMask) { selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = NSSingleSelectionMask; DESTROY (lastSelection); [self selectionDidChange]; } } static void GWHighlightFrameRect(NSRect aRect) { NSFrameRectWithWidthUsingOperation(aRect, 1.0, GSCompositeHighlight); } - (void)mouseDragged:(NSEvent *)theEvent { unsigned int eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask; NSPoint locp; NSPoint startp; NSRect oldRect; NSRect r; float x, y, w, h; NSUInteger i; transparentSelection = NO; if ([[manager dock] style] == DockStyleModern) transparentSelection = YES; locp = [theEvent locationInWindow]; locp = [self convertPoint: locp fromView: nil]; startp = locp; oldRect = NSZeroRect; [[self window] disableFlushWindow]; [self lockFocus]; while ([theEvent type] != NSLeftMouseUp) { CREATE_AUTORELEASE_POOL (arp); theEvent = [[self window] nextEventMatchingMask: eventMask]; locp = [theEvent locationInWindow]; locp = [self convertPoint: locp fromView: nil]; x = min(startp.x, locp.x); y = min(startp.y, locp.y); w = max(1, max(locp.x, startp.x) - min(locp.x, startp.x)); h = max(1, max(locp.y, startp.y) - min(locp.y, startp.y)); r = NSMakeRect(x, y, w, h); // Erase the previous rect if (transparentSelection) { [self setNeedsDisplayInRect: oldRect]; [[self window] displayIfNeeded]; } else { GWHighlightFrameRect(oldRect); } // Draw the new rect if (transparentSelection) { [[NSColor darkGrayColor] set]; NSFrameRect(r); [[[NSColor darkGrayColor] colorWithAlphaComponent: 0.33] set]; NSRectFillUsingOperation(r, NSCompositeSourceOver); } else { GWHighlightFrameRect(r); } oldRect = r; [[self window] enableFlushWindow]; [[self window] flushWindow]; [[self window] disableFlushWindow]; DESTROY (arp); } [self unlockFocus]; [[self window] postEvent: theEvent atStart: NO]; // Erase the previous rect [self setNeedsDisplayInRect: oldRect]; [[self window] displayIfNeeded]; [[self window] enableFlushWindow]; [[self window] flushWindow]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; x = min(startp.x, locp.x); y = min(startp.y, locp.y); w = max(1, max(locp.x, startp.x) - min(locp.x, startp.x)); h = max(1, max(locp.y, startp.y) - min(locp.y, startp.y)); r = NSMakeRect(x, y, w, h); for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSRect iconBounds = [self convertRect: [icon iconBounds] fromView: icon]; if (NSIntersectsRect(r, iconBounds)) { [icon select]; } } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)keyDown:(NSEvent *)theEvent { unsigned flags = [theEvent modifierFlags]; NSString *characters = [theEvent characters]; if ([characters length] > 0) { unichar character = [characters characterAtIndex: 0]; if (character == NSCarriageReturnCharacter) { [manager openSelectionInNewViewer: NO]; return; } if ((flags & NSCommandKeyMask) || (flags & NSControlKeyMask)) { if (character == NSBackspaceKey) { if (flags & NSShiftKeyMask) { [manager emptyTrash]; } else { [manager moveToTrash]; } return; } } } [super keyDown: theEvent]; } - (void)mouseMoved:(NSEvent *)theEvent { NSPoint p = [theEvent locationInWindow]; if (NSPointInRect(p, [manager tshelfActivateFrame])) { [manager mouseEnteredTShelfActivateFrame]; } else if (NSPointInRect(p, [manager tshelfReservedFrame]) == NO) { [manager mouseExitedTShelfActiveFrame]; } [super mouseMoved: theEvent]; } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (backImage && useBackImage) { NSSize imsize = [backImage size]; if ((imsize.width >= screenFrame.size.width) || (imsize.height >= screenFrame.size.height)) { if (backImageStyle == BackImageTileStyle) backImageStyle = BackImageCenterStyle; } if (backImageStyle == BackImageFitStyle) { [backImage drawInRect: NSMakeRect(0, 0, screenFrame.size.width, screenFrame.size.height) fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0 respectFlipped: YES hints: nil]; } else if (backImageStyle == BackImageTileStyle) { CGFloat x = 0; CGFloat y = screenFrame.size.width - imsize.width; while (y > (0 - imsize.height)) { [backImage compositeToPoint: NSMakePoint(x, y) operation: NSCompositeSourceOver]; x += imsize.width; if (x >= screenFrame.size.width) { y -= imsize.height; x = 0; } } } else if (backImageStyle == BackImageScaleStyle) { float imRatio; float screenRatio; float scale; NSPoint imagePoint; imRatio = imsize.width / imsize.height; screenRatio = screenFrame.size.width / screenFrame.size.height; if (imRatio > screenRatio) { /* image is wider in aspect than screen */ scale = imsize.width / screenFrame.size.width; imagePoint = NSMakePoint(0, (screenFrame.size.height - imsize.height/scale) / 2); } else { /* image is taller in aspect than screen */ scale = imsize.height / screenFrame.size.height; imagePoint = NSMakePoint((screenFrame.size.width - imsize.width/scale) / 2, 0); } [backImage drawInRect: NSMakeRect(imagePoint.x, imagePoint.y, imsize.width / scale, imsize.height / scale) fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0 respectFlipped: YES hints: nil]; } else { NSPoint imagePoint; imagePoint = NSMakePoint((screenFrame.size.width - imsize.width) / 2, (screenFrame.size.height - imsize.height) / 2); [backImage compositeToPoint: imagePoint operation: NSCompositeSourceOver]; } } if (dragIcon) { [dragIcon dissolveToPoint: dragPoint fraction: 0.3]; } } @end @implementation GWDesktopView (NodeRepContainer) - (void)showContentsOfNode:(FSNode *)anode { CREATE_AUTORELEASE_POOL(arp); NSArray *subNodes = [anode subNodes]; NSMutableArray *unsorted = [NSMutableArray array]; NSDictionary *indexes = [desktopInfo objectForKey: @"indexes"]; NSUInteger i; i = [icons count]; while (i > 0) { FSNIcon *icon = [icons objectAtIndex: i-1]; if ([[icon node] isMountPoint] == NO) { [icon removeFromSuperview]; [icons removeObject: icon]; } i--; } ASSIGN (node, anode); for (i = 0; i < [subNodes count]; i++) { FSNode *subnode = [subNodes objectAtIndex: i]; GWDesktopIcon *icon = [[GWDesktopIcon alloc] initForNode: subnode nodeInfoType: infoType extendedType: extInfoType iconSize: iconSize iconPosition: iconPosition labelFont: labelFont textColor: textColor gridIndex: NSNotFound dndSource: YES acceptDnd: YES slideBack: YES]; [unsorted addObject: icon]; RELEASE (icon); } if (indexes) { for (i = 0; i < [unsorted count]; i++) { FSNIcon *icon = [unsorted objectAtIndex: i]; NSString *name = [[icon node] name]; NSNumber *indnum = [indexes objectForKey: name]; if (indnum) { NSUInteger index = [indnum unsignedIntegerValue]; if (index >= gridItemsCount) index = [self firstFreeGridIndex]; if (index != NSNotFound) { [icon setGridIndex: index]; [icons addObject: icon]; [self addSubview: icon]; } } } } for (i = 0; i < [unsorted count]; i++) { FSNIcon *icon = [unsorted objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if (index == NSNotFound) { index = [self firstFreeGridIndex]; if (index != NSNotFound) { [icon setGridIndex: index]; [icons addObject: icon]; [self addSubview: icon]; } } } [self tile]; [self setNeedsDisplay: YES]; RELEASE (arp); } - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if ([[node path] isEqual: source] && ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"])) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { FSNIcon *icon = [self repOfSubnode: subnode]; if (icon) { insertIndex = [icon gridIndex]; } } [self removeRepOfSubnode: subnode]; } } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if ([[node path] isEqual: destination] && ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"])) { NSUInteger index = 0; // during drag operations, we assune insertIndex is still valid if (insertIndex != NSNotFound) { if ([self isFreeGridIndex: insertIndex]) { index = insertIndex; } else { index = [self firstFreeGridIndexAfterIndex: insertIndex]; if (index == NSNotFound) { index = [self firstFreeGridIndex]; } } } else { index = [self firstFreeGridIndex]; } for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; FSNode *subnode = [FSNode nodeWithRelativePath: fname parent: node]; FSNIcon *icon = [self repOfSubnode: subnode]; index = [self firstFreeGridIndexAfterIndex: index]; if (index == NSNotFound) { index = [self firstFreeGridIndex]; } if (icon) { [icon setNode: subnode]; [icon setGridIndex: index]; } else { icon = [self addRepForSubnode: subnode]; [icon setGridIndex: index]; } } } [self checkLockedReps]; [self tile]; [self setNeedsDisplay: YES]; [self selectionDidChange]; } - (void)watchedPathChanged:(NSDictionary *)info { NSString *event = [info objectForKey: @"event"]; NSArray *files = [info objectForKey: @"files"]; NSString *ndpath = [node path]; BOOL needupdate = NO; NSString *fname; NSString *fpath; NSUInteger i; if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { for (i = 0; i < [files count]; i++) { fname = [files objectAtIndex: i]; fpath = [ndpath stringByAppendingPathComponent: fname]; [self removeRepOfSubnodePath: fpath]; needupdate = YES; } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { for (i = 0; i < [files count]; i++) { fname = [files objectAtIndex: i]; fpath = [ndpath stringByAppendingPathComponent: fname]; if ([self repOfSubnodePath: fpath] == nil) { [self addRepForSubnodePath: fpath]; needupdate = YES; } } } if (needupdate) { [self tile]; [self setNeedsDisplay: YES]; [self selectionDidChange]; } } - (void)setShowType:(FSNInfoType)type { if (infoType != type) { BOOL newgrid = ((infoType == FSNInfoNameType) || (type == FSNInfoNameType)); NSUInteger i; infoType = type; DESTROY (extInfoType); if (newgrid) { [self makeIconsGrid]; } for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setNodeInfoShowType: infoType]; [icon tile]; } [self tile]; } } - (void)setExtendedShowType:(NSString *)type { if ((extInfoType == nil) || ([extInfoType isEqual: type] == NO)) { BOOL newgrid = (infoType == FSNInfoNameType); NSUInteger i; infoType = FSNInfoExtendedType; ASSIGN (extInfoType, type); if (newgrid) { [self makeIconsGrid]; } for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setExtendedShowType: extInfoType]; [icon tile]; } [self tile]; } } - (void)setIconSize:(int)size { NSUInteger i; iconSize = size; [self makeIconsGrid]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setIconSize: iconSize]; } [self tile]; } - (void)setLabelTextSize:(int)size { NSUInteger i; labelTextSize = size; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); [self makeIconsGrid]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setFont: labelFont]; } [nameEditor setFont: labelFont]; [self tile]; } - (void)setIconPosition:(int)pos { NSUInteger i; iconPosition = pos; [self makeIconsGrid]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; [icon setIconPosition: iconPosition]; } [self tile]; } - (id)addRepForSubnode:(FSNode *)anode { CREATE_AUTORELEASE_POOL(arp); GWDesktopIcon *icon = [[GWDesktopIcon alloc] initForNode: anode nodeInfoType: infoType extendedType: extInfoType iconSize: iconSize iconPosition: iconPosition labelFont: labelFont textColor: textColor gridIndex: NSNotFound dndSource: YES acceptDnd: YES slideBack: YES]; [icon setGridIndex: [self firstFreeGridIndex]]; [icons addObject: icon]; [self addSubview: icon]; RELEASE (icon); RELEASE (arp); return icon; } - (void)repSelected:(id)arep { NSWindow *win = [self window]; if (win != [NSApp keyWindow]) { [win makeKeyWindow]; } } - (void)selectAll { NSUInteger i; selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = FSNMultipleSelectionMask; selectionMask |= FSNCreatingSelectionMask; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; FSNode *inode = [icon node]; if (([inode isReserved] == NO) && ([inode isMountPoint] == NO)) { [icon select]; } } selectionMask = NSSingleSelectionMask; [self selectionDidChange]; } - (void)selectionDidChange { if (!(selectionMask & FSNCreatingSelectionMask)) { NSArray *selection = [self selectedNodes]; if ([selection count] == 0) selection = [NSArray arrayWithObject: node]; ASSIGN (lastSelection, selection); [desktopApp selectionChanged: selection]; [self updateNameEditor]; } } - (void)openSelectionInNewViewer:(BOOL)newv { [manager openSelectionInNewViewer: newv]; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { NSMutableArray *sourcePaths = [names mutableCopy]; NSString *basePath; NSString *nodePath = [node path]; NSString *prePath = [NSString stringWithString: nodePath]; NSUInteger count = [names count]; NSUInteger i; AUTORELEASE (sourcePaths); if (count == 0) { return NO; } if ([node isWritable] == NO) { return NO; } basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NO; } if ([sourcePaths containsObject: nodePath]) { return NO; } while (1) { if ([sourcePaths containsObject: prePath]) { return NO; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } i = 0; while(i < [sourcePaths count]) { NSString *srcpath = [sourcePaths objectAtIndex: i]; FSNIcon *icon = [self repOfSubnodePath: srcpath]; if (icon && [[icon node] isMountPoint]) { [sourcePaths removeObject: srcpath]; } else { i++; } } if ([sourcePaths count] == 0) { return NO; } return YES; } - (void)setBackgroundColor:(NSColor *)acolor { [super setBackgroundColor: acolor]; } - (void)setTextColor:(NSColor *)acolor { [super setTextColor: acolor]; [self setNeedsDisplay: YES]; } @end @implementation GWDesktopView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *basePath; NSString *nodePath; NSString *prePath; NSUInteger count; NSUInteger i; isDragTarget = NO; pb = [sender draggingPasteboard]; if (pb && [[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } else { return NSDragOperationNone; } count = [sourcePaths count]; if (count == 0) { return NSDragOperationNone; } dragLocalIcon = YES; for (i = 0; i < [sourcePaths count]; i++) { NSString *srcpath = [sourcePaths objectAtIndex: i]; if ([self repOfSubnodePath: srcpath] == nil) { dragLocalIcon = NO; } } if (dragLocalIcon) { isDragTarget = YES; dragPoint = NSZeroPoint; DESTROY (dragIcon); insertIndex = NSNotFound; return NSDragOperationEvery; } if ([node isWritable] == NO) { return NSDragOperationNone; } nodePath = [node path]; basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NSDragOperationNone; } if ([sourcePaths containsObject: nodePath]) { return NSDragOperationNone; } prePath = [NSString stringWithString: nodePath]; while (1) { if ([sourcePaths containsObject: prePath]) { return NSDragOperationNone; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: basePath]) { NSArray *subNodes = [node subNodes]; NSUInteger i; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { NSUInteger j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } isDragTarget = YES; forceCopy = NO; dragPoint = NSZeroPoint; DESTROY (dragIcon); insertIndex = NSNotFound; sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { if ([[NSFileManager defaultManager] isWritableFileAtPath: basePath]) { return NSDragOperationMove; } forceCopy = YES; return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSPoint dpoint = [sender draggingLocation]; NSUInteger index; if (NSPointInRect(dpoint, [manager tshelfActivateFrame])) { [manager mouseEnteredTShelfActivateFrame]; return NSDragOperationNone; } if (NSPointInRect(dpoint, [manager tshelfReservedFrame]) == NO) { [manager mouseExitedTShelfActiveFrame]; } if (isDragTarget == NO) { return NSDragOperationNone; } index = [self indexOfGridRectContainingPoint: dpoint]; if ([self isFreeGridIndex: index]) { NSImage *img = [sender draggedImage]; NSSize sz = [img size]; NSRect irect = [self iconBoundsInGridAtIndex: index]; dragPoint.x = ceil(irect.origin.x + ((irect.size.width - sz.width) / 2)); dragPoint.y = ceil(irect.origin.y + ((irect.size.height - sz.height) / 2)); if (dragIcon == nil) { ASSIGN (dragIcon, img); } if (insertIndex != index) { [self setNeedsDisplayInRect: grid[index]]; if (insertIndex != NSNotFound) { [self setNeedsDisplayInRect: grid[insertIndex]]; } } insertIndex = index; } else { DESTROY (dragIcon); if (insertIndex != NSNotFound) { [self setNeedsDisplayInRect: grid[insertIndex]]; } insertIndex = NSNotFound; return NSDragOperationNone; } if (sourceDragMask & NSDragOperationMove) { if (forceCopy) { return NSDragOperationCopy; } return NSDragOperationMove; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { NSPoint dpoint = [sender draggingLocation]; DESTROY (dragIcon); if (insertIndex != NSNotFound) { [self setNeedsDisplayInRect: grid[insertIndex]]; } isDragTarget = NO; if (NSPointInRect(dpoint, [manager tshelfReservedFrame]) == NO) { [manager mouseExitedTShelfActiveFrame]; } } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } NSComparisonResult sortDragged(id icn1, id icn2, void *context) { NSArray *indexes = (NSArray *)context; NSUInteger pos1 = [icn1 gridIndex]; NSUInteger pos2 = [icn2 gridIndex]; NSUInteger i; for (i = 0; i < [indexes count]; i++) { NSNumber *n = [indexes objectAtIndex: i]; if ([n unsignedIntegerValue] == pos1) { return NSOrderedAscending; } if ([n intValue] == pos2) { return NSOrderedDescending; } } return NSOrderedSame; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSMutableArray *sourcePaths; NSString *operation, *source; NSMutableArray *files; NSMutableDictionary *opDict; NSString *trashPath; NSInteger i; // FIXME see if it can be made unsigned DESTROY (dragIcon); if ([self isFreeGridIndex: insertIndex]) { [self setNeedsDisplayInRect: grid[insertIndex]]; } isDragTarget = NO; sourceDragMask = [sender draggingSourceOperationMask]; pb = [sender draggingPasteboard]; if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [desktopApp concludeRemoteFilesDragOperation: pbData atLocalPath: [node path]]; return; } if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [desktopApp lsfolderDragOperation: pbData concludedAtPath: [node path]]; return; } sourcePaths = [[pb propertyListForType: NSFilenamesPboardType] mutableCopy]; AUTORELEASE (sourcePaths); if (dragLocalIcon && (insertIndex != NSNotFound)) { NSMutableArray *removed = [NSMutableArray array]; NSArray *sorted = nil; NSMutableArray *sortIndexes = [NSMutableArray array]; NSUInteger firstinrow = gridItemsCount - rowItemsCount; NSUInteger row = 0; for (i = 0; i < [sourcePaths count]; i++) { NSString *locPath = [sourcePaths objectAtIndex: i]; FSNIcon *icon = [self repOfSubnodePath: locPath]; if (icon) { [removed addObject: icon]; [icons removeObject: icon]; } } while (firstinrow < gridItemsCount) { for (i = firstinrow; i >= (NSInteger)row; i -= rowItemsCount) { [sortIndexes insertObject: [NSNumber numberWithInteger: i] atIndex: [sortIndexes count]]; } row++; firstinrow++; } sorted = [removed sortedArrayUsingFunction: sortDragged context: (void *)sortIndexes]; for (i = 0; i < [sorted count]; i++) { FSNIcon *icon = [sorted objectAtIndex: i]; NSUInteger oldindex = [icon gridIndex]; NSUInteger index = 0; NSInteger shift = 0; if (i == 0) { index = insertIndex; shift = oldindex - index; } else { index = oldindex - shift; if ((oldindex - shift) || (index >= gridItemsCount)) { index = [self firstFreeGridIndexAfterIndex: insertIndex]; } if (index == NSNotFound) { index = [self firstFreeGridIndex]; } if ([self isFreeGridIndex: index] == NO) { index = [self firstFreeGridIndexAfterIndex: index]; } if (index == NSNotFound) { index = [self firstFreeGridIndex]; } } [icons addObject: icon]; [icon setGridIndex: index]; [icon setFrame: grid[index]]; [self setNeedsDisplayInRect: grid[oldindex]]; [self setNeedsDisplayInRect: grid[index]]; } return; } i = [sourcePaths count]; while (i > 0) { NSString *srcpath = [sourcePaths objectAtIndex: i-1]; FSNIcon *icon = [self repOfSubnodePath: srcpath]; if (icon && [[icon node] isMountPoint]) { [sourcePaths removeObject: srcpath]; } i--; } if ([sourcePaths count] == 0) { return; } source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; trashPath = [desktopApp trashPath]; if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { operation = NSWorkspaceMoveOperation; } else if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask & NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } else { if ([[NSFileManager defaultManager] isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } } files = [NSMutableArray array]; for(i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } opDict = [NSMutableDictionary dictionary]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [node path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [desktopApp performFileOperation: opDict]; } @end @implementation GWDesktopView (BackgroundColors) - (NSColor *)currentColor { return backColor; } - (void)setCurrentColor:(NSColor *)color { ASSIGN (backColor, color); [[self window] setBackgroundColor: backColor]; [self setNeedsDisplay: YES]; } - (void)createBackImage:(NSImage *)image { ASSIGN(backImage, image); } - (NSImage *)backImage { return backImage; } - (NSString *)backImagePath { return imagePath; } - (void)setBackImageAtPath:(NSString *)impath { CREATE_AUTORELEASE_POOL (pool); NSImage *image = [[NSImage alloc] initWithContentsOfFile: impath]; if (image) { ASSIGN (imagePath, impath); [self createBackImage: image]; RELEASE (image); [self setNeedsDisplay: YES]; } RELEASE (pool); } - (BOOL)useBackImage { return useBackImage; } - (void)setUseBackImage:(BOOL)value { useBackImage = value; [self setNeedsDisplay: YES]; } - (BackImageStyle)backImageStyle { return backImageStyle; } - (void)setBackImageStyle:(BackImageStyle)style { if (style != backImageStyle) { backImageStyle = style; if (backImage) { [self setBackImageAtPath: imagePath]; [self setNeedsDisplay: YES]; } } } @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopWindow.h0000644000175000001440000000437314751213523022017 0ustar multixusers/* GWDesktopWindow.h * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @interface GWDesktopWindow : NSWindow { id delegate; } - (void)activate; - (void)deactivate; - (id)desktopView; - (void)openSelection:(id)sender; - (void)openSelectionAsFolder:(id)sender; - (void)openWith:(id)sender; - (void)newFolder:(id)sender; - (void)newFile:(id)sender; - (void)duplicateFiles:(id)sender; - (void)recycleFiles:(id)sender; - (void)deleteFiles:(id)sender; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer:(id)sender; - (void)showTerminal:(id)sender; @end @interface NSObject (GWDesktopWindowDelegateMethods) - (BOOL)validateItem:(id)menuItem; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionAsFolder; - (void)openSelectionWith; - (void)newFolder; - (void)newFile; - (void)duplicateFiles; - (void)recycleFiles; - (void)emptyTrash; - (void)deleteFiles; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer; - (void)showTerminal; @end gworkspace-1.1.0/GWorkspace/Desktop/GWDesktopWindow.m0000644000175000001440000000665214751213523022026 0ustar multixusers/* GWDesktopWindow.m * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "GWDesktopWindow.h" @implementation GWDesktopWindow - (void)dealloc { [super dealloc]; } - (id)init { self = [super initWithContentRect: [[NSScreen mainScreen] frame] styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO]; if (self) { [self setReleasedWhenClosed: NO]; [self setExcludedFromWindowsMenu: YES]; [self setAcceptsMouseMovedEvents: YES]; [self setCanHide: NO]; } return self; } - (void)activate { [self orderFront: nil]; } - (void)deactivate { [self orderOut: self]; } - (id)desktopView { return [self contentView]; } - (void)openSelection:(id)sender { [delegate openSelectionInNewViewer: NO]; } - (void)openSelectionAsFolder:(id)sender { [delegate openSelectionAsFolder]; } - (void)openWith:(id)sender { [delegate openSelectionWith]; } - (void)newFolder:(id)sender { [delegate newFolder]; } - (void)newFile:(id)sender { [delegate newFile]; } - (void)duplicateFiles:(id)sender { [delegate duplicateFiles]; } - (void)recycleFiles:(id)sender { [delegate recycleFiles]; } - (void)deleteFiles:(id)sender { [delegate deleteFiles]; } - (void)setShownType:(id)sender { [delegate setShownType: sender]; } - (void)setExtendedShownType:(id)sender { [delegate setExtendedShownType: sender]; } - (void)setIconsSize:(id)sender { [delegate setIconsSize: sender]; } - (void)setIconsPosition:(id)sender { [delegate setIconsPosition: sender]; } - (void)setLabelSize:(id)sender { [delegate setLabelSize: sender]; } - (void)chooseLabelColor:(id)sender { [delegate chooseLabelColor: sender]; } - (void)chooseBackColor:(id)sender { [delegate chooseBackColor: sender]; } - (void)selectAllInViewer:(id)sender { [delegate selectAllInViewer]; } - (void)showTerminal:(id)sender { [delegate showTerminal]; } - (void)keyDown:(NSEvent *)theEvent { [super keyDown: theEvent]; } - (void)setDelegate:(id)adelegate { delegate = adelegate; [super setDelegate: adelegate]; } - (BOOL)validateMenuItem:(id )menuItem { return [delegate validateItem: menuItem]; } - (void)print:(id)sender { [super print: sender]; } - (void)orderWindow:(NSWindowOrderingMode)place relativeTo:(NSInteger)otherWin { [super orderWindow: place relativeTo: otherWin]; [self setLevel: NSDesktopWindowLevel]; } - (BOOL)canBecomeKeyWindow { return YES; } - (BOOL)canBecomeMainWindow { return YES; } @end gworkspace-1.1.0/GWorkspace/Desktop/XBundles/0000755000175000001440000000000013214346542020325 5ustar multixusersgworkspace-1.1.0/GWorkspace/Desktop/XBundles/GNUmakefile0000644000175000001440000000035213214346542022377 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = XDesktopWindow -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Desktop/XBundles/README.rtf0000644000175000001440000000104613214346542022000 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f1\fmodern Courier;\f0\fswiss Helvetica;} \f0\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 This bundle is used by \b \uc0 GWorkspace\b0 \uc0 to make "omnipresent" the \b \uc0 Desktop window \b0 \uc0 if your window manager is not \f1\b \uc0 NET_WM\b0 \uc0 compliant\f0 \uc0 .\par To install them give a "make install" in this directory. Then choose Info->Preferences->Desktop from the GWorkspace menu and select "Omnipresent" from the "General" tab.}gworkspace-1.1.0/GWorkspace/Desktop/XBundles/XDesktopWindow/0000755000175000001440000000000014751213523023255 5ustar multixusersgworkspace-1.1.0/GWorkspace/Desktop/XBundles/XDesktopWindow/GNUmakefile0000644000175000001440000000053513214346542025333 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = XDesktopWindow OBJCFLAGS += -Wall XDesktopWindow_OBJC_FILES = XDesktopWindow.m XDesktopWindow_PRINCIPAL_CLASS = XDesktopWindow ADDITIONAL_GUI_LIBS += -lX11 -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Desktop/XBundles/XDesktopWindow/XDesktopWindow.h0000644000175000001440000000457514751213523026372 0ustar multixusers/* XDesktopWindow.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef X_DESKTOP_WINDOW #define X_DESKTOP_WINDOW #include @interface XDesktopWindow : NSWindow { id delegate; } - (void)activate; - (void)deactivate; - (id)desktopView; - (void)openSelection:(id)sender; - (void)openSelectionAsFolder:(id)sender; - (void)openWith:(id)sender; - (void)newFolder:(id)sender; - (void)newFile:(id)sender; - (void)duplicateFiles:(id)sender; - (void)recycleFiles:(id)sender; - (void)deleteFiles:(id)sender; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer:(id)sender; - (void)showAnnotationWindows:(id)sender; - (void)showTerminal:(id)sender; @end @interface NSObject (XDesktopWindowDelegateMethods) - (BOOL)validateItem:(id)menuItem; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionAsFolder; - (void)openSelectionWith; - (void)newFolder; - (void)newFile; - (void)duplicateFiles; - (void)recycleFiles; - (void)emptyTrash; - (void)deleteFiles; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer; - (void)showAnnotationWindows; - (void)showTerminal; @end #endif // X_DESKTOP_WINDOW gworkspace-1.1.0/GWorkspace/Desktop/XBundles/XDesktopWindow/XDesktopWindow.m0000644000175000001440000001016214751213523026364 0ustar multixusers/* XDesktopWindow.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include #include #include #include "XDesktopWindow.h" @implementation XDesktopWindow - (void)dealloc { [super dealloc]; } - (id)init { self = [super initWithContentRect: [[NSScreen mainScreen] frame] styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO]; if (self) { [self setReleasedWhenClosed: NO]; [self setExcludedFromWindowsMenu: YES]; [self setAcceptsMouseMovedEvents: YES]; [self setCanHide: NO]; } return self; } - (void)activate { GSDisplayServer *server = GSCurrentServer(); Display *dpy = (Display *)[server serverDevice]; void *winptr = [server windowDevice: [self windowNumber]]; Window win = *(Window *)winptr; Atom atom = 0; long data = 1; atom = XInternAtom(dpy, "KWM_WIN_STICKY", False); XChangeProperty(dpy, win, atom, atom, 32, PropModeReplace, (unsigned char *)&data, 1); atom = XInternAtom(dpy, "WIN_STATE_STICKY", False); XChangeProperty(dpy, win, atom, atom, 32, PropModeReplace, (unsigned char *)&data, 1); [self orderFront: nil]; } - (void)deactivate { [self orderOut: self]; } - (id)desktopView { return [self contentView]; } - (void)openSelection:(id)sender { [delegate openSelectionInNewViewer: NO]; } - (void)openSelectionAsFolder:(id)sender { [delegate openSelectionAsFolder]; } - (void)openWith:(id)sender { [delegate openSelectionWith]; } - (void)newFolder:(id)sender { [delegate newFolder]; } - (void)newFile:(id)sender { [delegate newFile]; } - (void)duplicateFiles:(id)sender { [delegate duplicateFiles]; } - (void)recycleFiles:(id)sender { [delegate recycleFiles]; } - (void)deleteFiles:(id)sender { [delegate deleteFiles]; } - (void)setShownType:(id)sender { [delegate setShownType: sender]; } - (void)setExtendedShownType:(id)sender { [delegate setExtendedShownType: sender]; } - (void)setIconsSize:(id)sender { [delegate setIconsSize: sender]; } - (void)setIconsPosition:(id)sender { [delegate setIconsPosition: sender]; } - (void)setLabelSize:(id)sender { [delegate setLabelSize: sender]; } - (void)chooseLabelColor:(id)sender { [delegate chooseLabelColor: sender]; } - (void)chooseBackColor:(id)sender { [delegate chooseBackColor: sender]; } - (void)selectAllInViewer:(id)sender { [delegate selectAllInViewer]; } - (void)showAnnotationWindows:(id)sender { [delegate showAnnotationWindows]; } - (void)showTerminal:(id)sender { [delegate showTerminal]; } - (void)keyDown:(NSEvent *)theEvent { [super keyDown: theEvent]; } - (void)setDelegate:(id)adelegate { delegate = adelegate; [super setDelegate: adelegate]; } - (BOOL)validateMenuItem:(id )menuItem { return [delegate validateItem: menuItem]; } - (void)print:(id)sender { [super print: sender]; } - (void)orderWindow:(NSWindowOrderingMode)place relativeTo:(NSInteger)otherWin { [super orderWindow: place relativeTo: otherWin]; [self setLevel: NSDesktopWindowLevel]; } - (BOOL)canBecomeKeyWindow { return YES; } - (BOOL)canBecomeMainWindow { return YES; } @end gworkspace-1.1.0/GWorkspace/Dialogs/0000755000175000001440000000000014751214620016550 5ustar multixusersgworkspace-1.1.0/GWorkspace/Dialogs/CompletionField.h0000644000175000001440000000214314751213523021777 0ustar multixusers/* CompletionField.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @interface CompletionField : NSTextView { id fm; id controller; } @end @interface NSObject (CompletionField) - (void)completionFieldDidEndLine:(id)afield; @end gworkspace-1.1.0/GWorkspace/Dialogs/CompletionField.m0000644000175000001440000002274114751213523022012 0ustar multixusers/* CompletionField.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "GWFunctions.h" #import "FSNFunctions.h" #import "CompletionField.h" @implementation CompletionField - (void)dealloc { [super dealloc]; } - (id)initWithCoder: (NSCoder *) coder { self = [super initWithCoder: coder]; if (self) { [self setRichText: NO]; [self setImportsGraphics: NO]; [self setUsesFontPanel: NO]; [self setUsesRuler: NO]; [self setEditable: YES]; fm = [NSFileManager defaultManager]; } return self; } - (void)setFrame:(NSRect)frameRect { NSSize size; [super setFrame: frameRect]; size = NSMakeSize(1e7, [self bounds].size.height); [[self textContainer] setContainerSize: size]; [[self textContainer] setWidthTracksTextView: YES]; } - (void)keyDown:(NSEvent *)theEvent { NSString *eventstr = [theEvent characters]; NSString *str = [self string]; #define CHECK_SEPARATOR \ if ([path hasSuffix: pathSeparator] == NO) \ [path appendString: pathSeparator] if (([eventstr isEqual: @"\r"] == NO) && ([eventstr isEqual: @"\t"] == NO)) { [super keyDown: theEvent]; } if ([eventstr isEqual: @"\t"] && [str length]) { CREATE_AUTORELEASE_POOL(arp); NSString *pathSeparator = path_separator(); NSArray *components = [str componentsSeparatedByString: pathSeparator]; NSMutableString *path = [NSMutableString string]; NSUInteger i, j, m, n; if ([[components objectAtIndex: 0] isEqual: str]) { NSArray *appPaths; NSMutableArray *appBundles; NSUInteger i; NSString *completedAppName = nil; appPaths = NSStandardApplicationPaths(); appBundles = [[NSMutableArray alloc] initWithCapacity:1]; for (i = 0; i < [appPaths count]; i++) { NSArray *contents; contents = [fm directoryContentsAtPath: [appPaths objectAtIndex:i]]; [appBundles addObjectsFromArray:contents]; } for (i = 0; i < [appBundles count]; i++) { NSString *appToCheck = [appBundles objectAtIndex:i]; // for simplicity, we complete with the first app found if ([appToCheck hasPrefix: str] || [appToCheck isEqualToString:str]) { completedAppName = appToCheck; } } [self setString: completedAppName]; [appBundles release]; RELEASE (arp); return; } [path appendString: pathSeparator]; for (i = 0; i < [components count]; i++) { NSString *component = [components objectAtIndex: i]; NSString *teststr = [path stringByAppendingString: component]; BOOL isDir; if (([fm fileExistsAtPath: teststr isDirectory: &isDir] && isDir) && ([path isEqual: teststr] == NO)) { NSArray *contents = [fm directoryContentsAtPath: teststr]; if (contents && ([str hasSuffix: pathSeparator] == NO)) { BOOL found = NO; for (j = 0; j < [contents count]; j++) { NSString *fname = [contents objectAtIndex: j]; if ([fname hasPrefix: component] && (![fname isEqual: component])) { found = YES; } } if (found) { CHECK_SEPARATOR; [path appendString: component]; NSBeep(); } else { CHECK_SEPARATOR; [path appendString: component]; if (isDir) { [path appendString: pathSeparator]; } } } else { CHECK_SEPARATOR; [path appendString: component]; if (isDir) { [path appendString: pathSeparator]; } } } else { NSArray *contents = [fm directoryContentsAtPath: path]; if (contents) { NSMutableArray *common = [NSMutableArray array]; NSUInteger *lengths = NSZoneMalloc (NSDefaultMallocZone(), sizeof(NSUInteger) * [contents count]); NSUInteger prefLength = 0; NSUInteger index = 0; for (j = 0; j < [contents count]; j++) { lengths[j] = 0; } for (j = 0; j < [contents count]; j++) { NSString *fname = [contents objectAtIndex: j]; if ([fname hasPrefix: component]) { NSRange range = [fname rangeOfString: component]; if (range.length >= prefLength) { prefLength = range.length; lengths[j] = range.length; index = j; } [common addObject: fname]; } } if (prefLength != 0) { BOOL found = NO; for (m = 0; m < [contents count]; m++) { NSUInteger l1 = lengths[m]; for (n = 0; n < [contents count]; n++) { NSUInteger l2 = lengths[n]; if ((m != n) && ((l1 != 0) && (l2 != 0))) { if ((l1 == l2) && (l1 == prefLength)) { found = YES; break; } } } if (found) { break; } } if (found == NO) { NSString *cprefix = commonPrefixInArray(common); if (cprefix) { CHECK_SEPARATOR; [path appendString: cprefix]; if ([fm fileExistsAtPath: path isDirectory: &isDir]) { if (isDir) { [path appendString: pathSeparator]; } } else { NSBeep(); } } else { CHECK_SEPARATOR; [path appendString: [contents objectAtIndex: index]]; [path appendString: pathSeparator]; } } else { NSString *cprefix = commonPrefixInArray(common); if (cprefix) { CHECK_SEPARATOR; [path appendString: cprefix]; } else { NSString *s = [[contents objectAtIndex: index] substringToIndex: prefLength]; [path appendString: s]; } NSZoneFree (NSDefaultMallocZone(), lengths); NSBeep(); break; } } NSZoneFree (NSDefaultMallocZone(), lengths); } } } [self setString: path]; RELEASE (arp); } else if ([eventstr isEqual: @"\r"] && [str length]) { [controller completionFieldDidEndLine: self]; } } @end gworkspace-1.1.0/GWorkspace/Dialogs/Dialogs.h0000644000175000001440000000322114751214620020301 0ustar multixusers/* Dialogs.h * * Copyright (C) 2003-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DIALOGS_H #define DIALOGS_H #include #include @class NSString; @class NSTextField; @class NSButton; @interface GWDialogView : NSView { BOOL useSwitch; } - (id)initWithFrame:(NSRect)frameRect useSwitch:(BOOL)aBool; @end @interface GWDialog : NSWindow { GWDialogView *dialogView; NSTextField *titleField, *editField; NSButton *switchButt; NSButton *cancelButt, *okButt; BOOL useSwitch; NSModalResponse result; } - (id)initWithTitle:(NSString *)title editText:(NSString *)eText switchTitle:(NSString *)swTitle; - (NSModalResponse)runModal; - (NSString *)getEditFieldText; - (NSControlStateValue)switchButtonState; - (void)buttonAction:(id)sender; @end #endif // DIALOGS_H gworkspace-1.1.0/GWorkspace/Dialogs/Dialogs.m0000644000175000001440000001127414751214620020315 0ustar multixusers/* Dialogs.m * * Copyright (C) 2003-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "GWFunctions.h" #import "Dialogs.h" @implementation GWDialogView - (id)initWithFrame:(NSRect)frameRect useSwitch:(BOOL)aBool { self = [super initWithFrame: frameRect]; if (self) { useSwitch = aBool; } return self; } - (void)drawRect:(NSRect)rect { if (useSwitch) { STROKE_LINE (darkGrayColor, 0, 121, 240, 121); STROKE_LINE (whiteColor, 0, 120, 240, 120); } else { STROKE_LINE (darkGrayColor, 0, 91, 240, 91); STROKE_LINE (whiteColor, 0, 90, 240, 90); } STROKE_LINE (darkGrayColor, 0, 45, 240, 45); STROKE_LINE (whiteColor, 0, 44, 240, 44); } @end @implementation GWDialog - (void)dealloc { [super dealloc]; } - (id)initWithTitle:(NSString *)title editText:(NSString *)eText switchTitle:(NSString *)swTitle { NSRect r = swTitle ? NSMakeRect(0, 0, 240, 160) : NSMakeRect(0, 0, 240, 120); self = [super initWithContentRect: r styleMask: NSTitledWindowMask backing: NSBackingStoreRetained defer: NO]; if(self) { NSFont *font; useSwitch = swTitle ? YES : NO; dialogView = [[GWDialogView alloc] initWithFrame: [self frame] useSwitch: useSwitch]; AUTORELEASE (dialogView); font = [NSFont systemFontOfSize: 18]; r = useSwitch ? NSMakeRect(10, 125, 200, 20) : NSMakeRect(10, 95, 200, 20); titleField = [[NSTextField alloc] initWithFrame: r]; [titleField setBackgroundColor: [NSColor windowBackgroundColor]]; [titleField setBezeled: NO]; [titleField setEditable: NO]; [titleField setSelectable: NO]; [titleField setFont: font]; [titleField setStringValue: title]; [dialogView addSubview: titleField]; RELEASE (titleField); r = useSwitch ? NSMakeRect(30, 86, 180, 22) : NSMakeRect(30, 56, 180, 22); editField = [[NSTextField alloc] initWithFrame: r]; [editField setStringValue: eText]; [dialogView addSubview: editField]; RELEASE (editField); if (useSwitch) { switchButt = [[NSButton alloc] initWithFrame: NSMakeRect(30, 62, 180, 16)]; [switchButt setButtonType: NSSwitchButton]; [switchButt setTitle: swTitle]; [dialogView addSubview: switchButt]; RELEASE (switchButt); } cancelButt = [[NSButton alloc] initWithFrame: NSMakeRect(100, 10, 60, 25)]; [cancelButt setButtonType: NSMomentaryLight]; [cancelButt setTitle: NSLocalizedString(@"Cancel", @"")]; [cancelButt setTarget: self]; [cancelButt setAction: @selector(buttonAction:)]; [dialogView addSubview: cancelButt]; RELEASE (cancelButt); okButt = [[NSButton alloc] initWithFrame: NSMakeRect(170, 10, 60, 25)]; [okButt setButtonType: NSMomentaryLight]; [okButt setTitle: NSLocalizedString(@"OK", @"")]; [okButt setTarget: self]; [okButt setAction: @selector(buttonAction:)]; [dialogView addSubview: okButt]; RELEASE (okButt); [self setContentView: dialogView]; [self setTitle: @""]; [self setInitialFirstResponder: editField]; } return self; } - (NSModalResponse)runModal { [[NSApplication sharedApplication] runModalForWindow: self]; return result; } - (NSString *)getEditFieldText { return [editField stringValue]; } - (NSControlStateValue)switchButtonState { if (useSwitch) { return [switchButt state]; } return NSOffState; } - (void)buttonAction:(id)sender { if (sender == okButt) { result = NSAlertDefaultReturn; } else { result = NSAlertAlternateReturn; } [[NSApplication sharedApplication] stopModal]; [self orderOut: nil]; } @end gworkspace-1.1.0/GWorkspace/Dialogs/ExecuteController.h0000644000175000001440000000324314751213523022372 0ustar multixusers/* ExecuteController.h * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: July 2024 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef EXECUTE_CONTROLLER_H #define EXECUTE_CONTROLLER_H #import @class CompletionField; @class NSBox; @class NSWindow; @interface ExecuteController : NSObject { IBOutlet id win; IBOutlet NSTextField *titleLabel; IBOutlet id firstLabel; IBOutlet id secondLabel; IBOutlet id cancelButt; IBOutlet id okButt; IBOutlet CompletionField *cfield; NSInteger result; NSArray *pathsArr; NSFileManager *fm; } - (instancetype)initWithNibName:(NSString *)nibName NS_DESIGNATED_INITIALIZER; - (NSString *)checkCommand:(NSString *)comm; - (void)activate; - (NSWindow *)win; - (IBAction)cancelButtAction:(id)sender; - (IBAction)okButtAction:(id)sender; - (void)completionFieldDidEndLine:(id)afield; @end #endif gworkspace-1.1.0/GWorkspace/Dialogs/ExecuteController.h~0000644000175000001440000000270414641601652022573 0ustar multixusers/* ExecuteController.h * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: Julu 2024 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import @class CompletionField; @class NSBox; @class NSWindow; @interface ExecuteController : NSObject { IBOutlet id win; IBOutlet id firstLabel; IBOutlet id secondLabel; IBOutlet id cancelButt; IBOutlet id okButt; IBOutlet CompletionField *cfield; unsigned result; } - (NSString *)checkCommand:(NSString *)comm; - (void)activate; - (NSWindow *)win; - (IBAction)cancelButtAction:(id)sender; - (IBAction)okButtAction:(id)sender; - (void)completionFieldDidEndLine:(id)afield; gworkspace-1.1.0/GWorkspace/Dialogs/ExecuteController.m0000644000175000001440000000636014751213523022402 0ustar multixusers/* ExecuteController.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: July 2024 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "ExecuteController.h" #import "CompletionField.h" #import "FSNode.h" @implementation ExecuteController - (void)dealloc { RELEASE (win); RELEASE (pathsArr); [super dealloc]; } - (instancetype)initWithNibName:(NSString *)nibName { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); [self release]; return nil; } else { [okButt setTitle:NSLocalizedString(@"OK", @"")]; [cancelButt setTitle:NSLocalizedString(@"Cancel", @"")]; } } return self; } - (NSWindow *)win { return win; } - (IBAction)cancelButtAction:(id)sender { [win close]; } - (NSString *)checkCommand:(NSString *)comm { if ([comm isAbsolutePath]) { FSNode *node = [FSNode nodeWithPath: comm]; if ([node isApplication]) { // standardize path, to remove e.g. trailing / return [comm stringByStandardizingPath]; } if (node && [node isPlain] && [node isExecutable]) { return comm; } } else { NSUInteger i; // check if we suppose an application if ([comm hasSuffix:@".app"]) { NSLog(@"assume app name"); return comm; } else { // we look for a standard tool or executable for (i = 0; i < [pathsArr count]; i++) { NSString *basePath = [pathsArr objectAtIndex: i]; NSArray *contents = [fm directoryContentsAtPath: basePath]; if (contents && [contents containsObject: comm]) { NSString *fullPath = [basePath stringByAppendingPathComponent: comm]; if ([fm isExecutableFileAtPath: fullPath]) { return fullPath; } } } } } return nil; } - (void)activate { [win makeKeyAndOrderFront: nil]; [cfield setString: @""]; [win makeFirstResponder: cfield]; } - (IBAction)okButtAction:(id)sender { } - (void)completionFieldDidEndLine:(id)afield { } - (void)windowWillClose:(NSNotification *)aNotification { } @end gworkspace-1.1.0/GWorkspace/Dialogs/ExecuteController.m~0000644000175000001440000000226514641603336022603 0ustar multixusers/* ExecuteController.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: July 2024 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ @implementation ExecuteController - (void)dealloc { RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { } } - (NSWindow *)win { return win; } - (IBAction)cancelButtAction:(id)sender { [win close]; } gworkspace-1.1.0/GWorkspace/Dialogs/OpenWithController.h0000644000175000001440000000210314751213523022517 0ustar multixusers/* OpenWithController.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "ExecuteController.h" @class GWorkspace; @interface OpenWithController : ExecuteController { GWorkspace *gw; } @end gworkspace-1.1.0/GWorkspace/Dialogs/OpenWithController.m0000644000175000001440000000773114751213523022540 0ustar multixusers/* OpenWithController.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "OpenWithController.h" #import "CompletionField.h" #import "GWorkspace.h" #import "FSNode.h" @implementation OpenWithController - (void)dealloc { [super dealloc]; } - (instancetype)init { self = [super initWithNibName:@"OpenWith"]; if (self) { gw = [GWorkspace gworkspace]; [win setTitle:NSLocalizedString(@"Open With", @"")]; [firstLabel setStringValue:NSLocalizedString(@"Type the name or the path of the application", @"")]; [secondLabel setStringValue:NSLocalizedString(@"to use to open the current selection", @"")]; } return self; } - (void)activate { NSArray *selpaths = RETAIN ([gw selectedPaths]); NSWorkspace *ws = [NSWorkspace sharedWorkspace]; NSUInteger i; // first we check incoming selection or it is useless to check for a command for (i = 0; i < [selpaths count]; i++) { NSString *spath = [selpaths objectAtIndex: i]; NSString *defApp = nil, *fileType = nil; [ws getInfoForFile: spath application: &defApp type: &fileType]; if ((fileType == nil) || (([fileType isEqual: NSPlainFileType] == NO) && ([fileType isEqual: NSShellCommandFileType] == NO))) { NSRunAlertPanel(NULL, NSLocalizedString(@"Can't edit a directory!", @""), NSLocalizedString(@"OK", @""), NULL, NULL); RELEASE (selpaths); return; } } [NSApp runModalForWindow: win]; RELEASE (selpaths); } - (IBAction)cancelButtAction:(id)sender { result = NSAlertAlternateReturn; [NSApp stopModal]; [win close]; } - (IBAction)okButtAction:(id)sender { NSString *str = [cfield string]; NSUInteger i; result = NSAlertDefaultReturn; [NSApp stopModal]; [win close]; if ([str length]) { NSArray *selpaths = [gw selectedPaths]; NSArray *components = [str componentsSeparatedByString: @" "]; NSMutableArray *args = [NSMutableArray array]; NSString *command = [components objectAtIndex: 0]; for (i = 1; i < [components count]; i++) { [args addObject: [components objectAtIndex: i]]; } command = [self checkCommand: command]; if (command) { if ([command hasSuffix:@".app"]) { NSUInteger i; for (i = 0; i < [selpaths count]; i++) { NSString *fileName = [selpaths objectAtIndex:i]; [[NSWorkspace sharedWorkspace] openFile:fileName withApplication: command]; } } else { [args addObjectsFromArray:selpaths]; [NSTask launchedTaskWithLaunchPath: command arguments: args]; } } else { NSRunAlertPanel(NULL, NSLocalizedString(@"No executable found!", @""), NSLocalizedString(@"OK", @""), NULL, NULL); } } } - (void)completionFieldDidEndLine:(id)afield { [win makeFirstResponder: okButt]; } @end gworkspace-1.1.0/GWorkspace/Dialogs/RunExternalController.h0000644000175000001440000000226614751213523023243 0ustar multixusers/* RunExternalController.h * * Copyright (C) 2003-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef RUN_EXTERNAL_CONTROLLER_H #define RUN_EXTERNAL_CONTROLLER_H #import #import "ExecuteController.h" @class NSTextField; @class NSWindow; @interface RunExternalController : ExecuteController { } @end #endif // RUN_EXTERNAL_CONTROLLER_H gworkspace-1.1.0/GWorkspace/Dialogs/RunExternalController.m0000644000175000001440000000534514751213523023251 0ustar multixusers/* RunExternalController.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "RunExternalController.h" #import "CompletionField.h" #import "GWorkspace.h" @implementation RunExternalController - (void)dealloc { [super dealloc]; } - (instancetype)init { self = [super initWithNibName:@"RunExternal"]; if (self) { [win setFrameUsingName: @"run_external"]; [win setTitle:NSLocalizedString(@"Run", @"")]; [titleLabel setStringValue:NSLocalizedString(@"Run", @"")]; [secondLabel setStringValue:NSLocalizedString(@"Type the command to execute:", @"")]; } return self; } - (IBAction)okButtAction:(id)sender { NSString *str = [cfield string]; NSUInteger i; if ([str length]) { NSArray *components = [str componentsSeparatedByString: @" "]; NSMutableArray *args = [NSMutableArray array]; NSString *command = [components objectAtIndex: 0]; for (i = 1; i < [components count]; i++) { [args addObject: [components objectAtIndex: i]]; } command = [self checkCommand: command]; if (command) { if ([command hasSuffix:@".app"]) [[NSWorkspace sharedWorkspace] launchApplication: command]; else [NSTask launchedTaskWithLaunchPath: command arguments: args]; [win close]; } else { NSRunAlertPanel(NULL, NSLocalizedString(@"No executable found!", @""), NSLocalizedString(@"OK", @""), NULL, NULL); } } } - (void)completionFieldDidEndLine:(id)afield { [super completionFieldDidEndLine:afield]; [win makeFirstResponder: okButt]; } - (void)windowWillClose:(NSNotification *)aNotification { [super windowWillClose:aNotification]; [win saveFrameUsingName: @"run_external"]; } @end gworkspace-1.1.0/GWorkspace/Dialogs/StartAppWin.h0000644000175000001440000000264314751213523021143 0ustar multixusers/* StartAppWin.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef START_APP_WIN #define START_APP_WIN #include @interface StartAppWin: NSObject { IBOutlet id win; IBOutlet id startLabel; IBOutlet id nameField; IBOutlet id progInd; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname operation:(NSString *)operation maxProgValue:(double)maxvalue; - (void)updateProgressBy:(double)incr; - (NSWindow *)win; @end #endif // START_APP_WIN gworkspace-1.1.0/GWorkspace/Dialogs/StartAppWin.m0000644000175000001440000000514414751213523021147 0ustar multixusers/* StartAppWin.m * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "StartAppWin.h" static NSString *nibName = @"StartAppWin"; @implementation StartAppWin - (void)dealloc { RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } else { NSRect wframe = [win frame]; NSRect scrframe = [[NSScreen mainScreen] frame]; NSRect winrect = NSMakeRect((scrframe.size.width - wframe.size.width) / 2, (scrframe.size.height - wframe.size.height) / 2, wframe.size.width, wframe.size.height); [win setFrame: winrect display: NO]; [win setDelegate: self]; /* Internationalization */ [startLabel setStringValue: NSLocalizedString(@"starting:", @"")]; } } return self; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname operation:(NSString *)operation maxProgValue:(double)maxvalue { if (win) { [win setTitle: title]; [startLabel setStringValue: operation]; [nameField setStringValue: appname]; [progInd setMinValue: 0.0]; [progInd setMaxValue: maxvalue]; [progInd setDoubleValue: 0.0]; if ([win isVisible] == NO) { [win orderFrontRegardless]; } } } - (void)updateProgressBy:(double)incr { [progInd incrementBy: incr]; } - (NSWindow *)win { return win; } - (BOOL)windowShouldClose:(id)sender { return YES; } @end gworkspace-1.1.0/GWorkspace/Fiend/0000755000175000001440000000000014751213736016222 5ustar multixusersgworkspace-1.1.0/GWorkspace/Fiend/Fiend.h0000644000175000001440000000544714751213523017424 0ustar multixusers/* Fiend.h * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authora: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FIEND_H #define FIEND_H #include @class NSString; @class NSArray; @class NSNotification; @class NSWindow; @class NSImage; @class NSMutableArray; @class NSTextFieldCell; @class NSButton; @class FiendLeaf; @class GWorkspace; @interface Fiend : NSView { NSWindow *myWin; NSImage *tile; NSImage *leftArr; NSImage *rightArr; NSMutableDictionary *layers; NSString *currentName; NSMutableArray *leavesPlaces; NSMutableArray *freePositions; NSCountedSet *watchedPaths; NSTextFieldCell *namelabel; NSButton *ffButt, *rewButt; BOOL leaveshidden; BOOL isDragTarget; GWorkspace *gw; } - (void)activate; - (NSWindow *)myWin; - (NSPoint)positionOfLeaf:(id)aleaf; - (BOOL)dissolveLeaf:(id)aleaf; - (void)addLayer; - (void)removeCurrentLayer; - (void)renameCurrentLayer; - (void)goToLayerNamed:(NSString *)lname; - (void)switchLayer:(id)sender; - (void)draggedFiendLeaf:(FiendLeaf *)leaf atPoint:(NSPoint)location mouseUp:(BOOL)mouseup; - (void)findFreePositions; - (NSArray *)positionsAroundLeafAtPosX:(int)posx posY:(int)posy; - (void)orderFrontLeaves; - (void)hide; - (void)verifyDraggingExited:(id)sender; - (void)removeInvalidLeaf:(FiendLeaf *)leaf; - (void)checkIconsAfterDotsFilesChange; - (void)checkIconsAfterHidingOfPaths:(NSArray *)paths; - (void)fileSystemDidChange:(NSNotification *)notification; - (void)watcherNotification:(NSNotification *)notification; - (void)updateDefaults; @end @interface Fiend (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // FIEND_H gworkspace-1.1.0/GWorkspace/Fiend/Fiend.m0000644000175000001440000007332014751213736017432 0ustar multixusers/* Fiend.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNode.h" #import "FSNFunctions.h" #import "GWFunctions.h" #import "Fiend.h" #import "FiendLeaf.h" #import "Dialogs/Dialogs.h" #import "GWorkspace.h" @implementation Fiend - (void)dealloc { NSEnumerator *enumerator = [watchedPaths objectEnumerator]; NSString *wpath; while ((wpath = [enumerator nextObject])) { [gw removeWatcherForPath: wpath]; } RELEASE (watchedPaths); [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE (layers); RELEASE (namelabel); RELEASE (ffButt); RELEASE (rewButt); RELEASE (leftArr); RELEASE (rightArr); RELEASE (currentName); RELEASE (freePositions); RELEASE (tile); RELEASE (myWin); [super dealloc]; } - (id)init { self = [super initWithFrame: NSMakeRect(0, 0, 64, 64)]; if (self) { NSUserDefaults *defaults; NSDictionary *myPrefs; id leaf; NSRect r; int i, j; gw = [GWorkspace gworkspace]; myWin = [[NSWindow alloc] initWithContentRect: NSZeroRect styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO]; if ([myWin setFrameUsingName: @"fiend_window"] == NO) { [myWin setFrame: NSMakeRect(100, 100, 64, 64) display: NO]; } r = [myWin frame]; r.size = NSMakeSize(64, 64); [myWin setFrame: r display: NO]; [myWin setReleasedWhenClosed: NO]; [myWin setExcludedFromWindowsMenu: YES]; defaults = [NSUserDefaults standardUserDefaults]; layers = [[NSMutableDictionary alloc] initWithCapacity: 1]; watchedPaths = [[NSCountedSet alloc] initWithCapacity: 1]; myPrefs = [defaults dictionaryForKey: @"fiendlayers"]; if (myPrefs != nil) { NSArray *names = [myPrefs allKeys]; for (i = 0; i < [names count]; i++) { NSString *layername = [names objectAtIndex: i]; NSDictionary *pathsAndRects = [myPrefs objectForKey: layername]; NSArray *paths = [pathsAndRects allKeys]; NSMutableArray *leaves = [NSMutableArray arrayWithCapacity: 1]; for (j = 0; j < [paths count]; j++) { NSString *path = [paths objectAtIndex: j]; NSString *watched = [path stringByDeletingLastPathComponent]; if ([[NSFileManager defaultManager] fileExistsAtPath: path]) { NSDictionary *dict = [pathsAndRects objectForKey: path]; int posx = [[dict objectForKey: @"posx"] intValue]; int posy = [[dict objectForKey: @"posy"] intValue]; leaf = [[FiendLeaf alloc] initWithPosX: posx posY: posy relativeToPoint: r.origin forPath: path inFiend: self layerName: layername ghostImage: nil]; [leaves addObject: leaf]; RELEASE (leaf); if ([watchedPaths containsObject: watched] == NO) { [gw addWatcherForPath: watched]; } [watchedPaths addObject: watched]; } } [layers setObject: leaves forKey: layername]; } currentName = [defaults stringForKey: @"fiendcurrentlayer"]; if (currentName == nil) { ASSIGN (currentName, [names objectAtIndex: 0]); } else { RETAIN (currentName); } } else { NSMutableArray *leaves = [NSMutableArray arrayWithCapacity: 1]; ASSIGN (currentName, @"Workspace"); [layers setObject: leaves forKey: currentName]; } namelabel = [NSTextFieldCell new]; [namelabel setFont: [NSFont boldSystemFontOfSize: 10]]; [namelabel setBordered: NO]; [namelabel setAlignment: NSLeftTextAlignment]; [namelabel setStringValue: cutFileLabelText(currentName, namelabel, 52)]; [namelabel setDrawsBackground: NO]; ASSIGN (leftArr, [NSImage imageNamed: @"FFArrow.tiff"]); ffButt = [[NSButton alloc] initWithFrame: NSMakeRect(49, 6, 9, 9)]; [ffButt setButtonType: NSMomentaryLight]; [ffButt setBordered: NO]; [ffButt setTransparent: YES]; [ffButt setTarget: self]; [ffButt setAction: @selector(switchLayer:)]; [self addSubview: ffButt]; ASSIGN (rightArr, [NSImage imageNamed: @"REWArrow.tiff"]); rewButt = [[NSButton alloc] initWithFrame: NSMakeRect(37, 6, 9, 9)]; [rewButt setButtonType: NSMomentaryLight]; [rewButt setBordered: NO]; [rewButt setTransparent: YES]; [rewButt setTarget: self]; [rewButt setAction: @selector(switchLayer:)]; [self addSubview: rewButt]; ASSIGN (tile, [NSImage imageNamed: @"common_Tile.tiff"]); [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]]; [self findFreePositions]; leaveshidden = NO; isDragTarget = NO; [myWin setContentView: self]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(watcherNotification:) name: @"GWFileWatcherFileDidChangeNotification" object: nil]; } return self; } - (void)activate { [self orderFrontLeaves]; } - (NSWindow *)myWin { return myWin; } - (NSPoint)positionOfLeaf:(id)aleaf { return [aleaf iconPosition]; } - (BOOL)dissolveLeaf:(id)aleaf { return [aleaf dissolveAndReturnWhenDone]; } - (void)addLayer { GWDialog *dialog; NSString *layerName; NSMutableArray *leaves; int result; if ([myWin isVisible] == NO) { return; } dialog = [[GWDialog alloc] initWithTitle: NSLocalizedString(@"New Layer", @"") editText: @"" switchTitle: nil]; [dialog center]; [dialog makeKeyWindow]; [dialog orderFrontRegardless]; result = [dialog runModal]; [dialog release]; if(result != NSAlertDefaultReturn) return; layerName = [dialog getEditFieldText]; if ([layerName length] == 0) { NSString *msg = NSLocalizedString(@"No name supplied!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } if ([[layers allKeys] containsObject: layerName]) { NSString *msg = NSLocalizedString(@"A layer with this name is already present!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } leaves = [NSMutableArray arrayWithCapacity: 1]; [layers setObject: leaves forKey: layerName]; [self goToLayerNamed: layerName]; } - (void)removeCurrentLayer { NSArray *names, *leaves; NSString *newname; NSString *title, *msg, *buttstr; int i, index, result; if ([myWin isVisible] == NO) { return; } if ([layers count] == 1) { msg = NSLocalizedString(@"You can't remove the last layer!", @""); buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } title = NSLocalizedString(@"Remove layer", @""); msg = NSLocalizedString(@"Are you sure that you want to remove this layer?", @""); buttstr = NSLocalizedString(@"Continue", @""); result = NSRunAlertPanel(title, msg, NSLocalizedString(@"OK", @""), buttstr, NULL); if(result != NSAlertDefaultReturn) { return; } names = [layers allKeys]; index = [names indexOfObject: currentName]; if (index == 0) { index = [names count]; } index--; newname = [names objectAtIndex: index]; leaves = [layers objectForKey: currentName]; for (i = 0; i < [leaves count]; i++) { id leaf = [leaves objectAtIndex: i]; NSString *watched = [[[leaf node] path] stringByDeletingLastPathComponent]; if ([watchedPaths containsObject: watched]) { [watchedPaths removeObject: watched]; if ([watchedPaths containsObject: watched] == NO) { [gw removeWatcherForPath: watched]; } } [[leaf window] close]; } [layers removeObjectForKey: currentName]; ASSIGN (currentName, newname); [self switchLayer: ffButt]; } - (void)renameCurrentLayer { GWDialog *dialog; NSString *layerName; NSMutableArray *leaves; int result; if ([myWin isVisible] == NO) { return; } dialog = [[GWDialog alloc] initWithTitle: NSLocalizedString(@"Rename Layer", @"") editText: currentName switchTitle: nil]; [dialog center]; [dialog makeKeyWindow]; [dialog orderFrontRegardless]; result = [dialog runModal]; [dialog release]; if(result != NSAlertDefaultReturn) return; layerName = [dialog getEditFieldText]; if ([layerName isEqual: currentName]) { return; } if ([[layers allKeys] containsObject: layerName]) { NSString *msg = NSLocalizedString(@"A layer with this name is already present!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } leaves = [layers objectForKey: currentName]; RETAIN (leaves); [layers removeObjectForKey: currentName]; ASSIGN (currentName, layerName); [layers setObject: leaves forKey: currentName]; RELEASE (leaves); [namelabel setStringValue: cutFileLabelText(currentName, namelabel, 52)]; [self setNeedsDisplay: YES]; } - (void)goToLayerNamed:(NSString *)lname { NSArray *leaves; int i; if ([myWin isVisible] == NO) { return; } leaves = [layers objectForKey: currentName]; for (i = 0; i < [leaves count]; i++) { [[[leaves objectAtIndex: i] window] orderOut: self]; } ASSIGN (currentName, lname); [self orderFrontLeaves]; [self findFreePositions]; [namelabel setStringValue: cutFileLabelText(currentName, namelabel, 52)]; [self setNeedsDisplay: YES]; } - (void)switchLayer:(id)sender { NSArray *names, *leaves; NSString *newname; int i, index; if ([myWin isVisible] == NO) { return; } names = [layers allKeys]; index = [names indexOfObject: currentName]; if (sender == ffButt) { if (index == [names count] -1) { index = -1; } index++; } else { if (index == 0) { index = [names count]; } index--; } newname = [names objectAtIndex: index]; leaves = [layers objectForKey: currentName]; for (i = 0; i < [leaves count]; i++) { [[[leaves objectAtIndex: i] window] orderOut: self]; } ASSIGN (currentName, newname); [self orderFrontLeaves]; [self findFreePositions]; [namelabel setStringValue: cutFileLabelText(currentName, namelabel, 52)]; [self setNeedsDisplay: YES]; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (void)mouseDown:(NSEvent*)theEvent { NSEvent *nextEvent; NSPoint location, lastLocation, origin, leaforigin; float initx, inity; id leaf; NSWindow *leafWin; NSArray *names, *leaves; int i, j; BOOL hidden = NO, dragged = NO; [self orderFrontLeaves]; leaves = [layers objectForKey: currentName]; if ([theEvent clickCount] > 1) { if (leaveshidden == NO) { leaveshidden = YES; for (i = 0; i < [leaves count]; i++) { leafWin = [[leaves objectAtIndex: i] window]; [leafWin orderOut: nil]; } } else { leaveshidden = NO; [self orderFrontLeaves]; } return; } names = [layers allKeys]; initx = [myWin frame].origin.x; inity = [myWin frame].origin.y; lastLocation = [theEvent locationInWindow]; while (1) { nextEvent = [myWin nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { if (dragged == YES) { float nowx = [myWin frame].origin.x; float nowy = [myWin frame].origin.y; for (i = 0; i < [names count]; i++) { leaves = [layers objectForKey: [names objectAtIndex: i]]; for (j = 0; j < [leaves count]; j++) { leaf = [leaves objectAtIndex: j]; leafWin = [leaf window]; leaforigin = [leafWin frame].origin; leaforigin.x -= (initx - nowx); leaforigin.y -= (inity - nowy); [leafWin setFrameOrigin: leaforigin]; } } } [self findFreePositions]; [self orderFrontLeaves]; [self updateDefaults]; break; } else if ([nextEvent type] == NSLeftMouseDragged) { dragged = YES; if (hidden == NO) { for (i = 0; i < [names count]; i++) { leaves = [layers objectForKey: [names objectAtIndex: i]]; for (j = 0; j < [leaves count]; j++) { leaf = [leaves objectAtIndex: j]; [[leaf window] orderOut: self]; } } hidden = YES; } location = [myWin mouseLocationOutsideOfEventStream]; origin = [myWin frame].origin; origin.x += (location.x - lastLocation.x); origin.y += (location.y - lastLocation.y); [myWin setFrameOrigin: origin]; } } } - (void)draggedFiendLeaf:(FiendLeaf *)leaf atPoint:(NSPoint)location mouseUp:(BOOL)mouseup { LeafPosition *leafpos; static NSMutableArray *leaves; static FiendLeaf *hlightleaf; BOOL hlight, newpos; int i; NSRect r; static BOOL started = NO; if (started == NO) { leaves = [layers objectForKey: currentName]; hlightleaf = nil; leafpos = [[LeafPosition alloc] initWithPosX: [leaf posx] posY: [leaf posy] relativeToPoint: [[self window] frame].origin]; [freePositions addObject: leafpos]; RELEASE (leafpos); started = YES; } r = [myWin frame]; if (mouseup == NO) { hlight = NO; for (i = 0; i < [freePositions count]; i++) { LeafPosition *lfpos = [freePositions objectAtIndex: i]; if ([lfpos containsPoint: location]) { if (hlightleaf == nil) { hlightleaf = [[FiendLeaf alloc] initWithPosX: [lfpos posx] posY: [lfpos posy] relativeToPoint: r.origin forPath: nil inFiend: self layerName: nil ghostImage: [leaf icon]]; [[hlightleaf window] display]; [[hlightleaf window] orderBack: self]; } else { [hlightleaf setPosX: [lfpos posx] posY: [lfpos posy] relativeToPoint: r.origin]; [[hlightleaf window] orderBack: self]; } hlight = YES; break; } } if ((hlight == NO) && (hlightleaf != nil)) { [[hlightleaf window] orderOut: self]; RELEASE (hlightleaf); hlightleaf = nil; } } else { if (hlightleaf != nil) { [[hlightleaf window] orderOut: nil]; RELEASE (hlightleaf); hlightleaf = nil; } newpos = NO; for (i = 0; i < [freePositions count]; i++) { leafpos = [freePositions objectAtIndex: i]; if ([leafpos containsPoint: location]) { [leaf setPosX: [leafpos posx] posY: [leafpos posy] relativeToPoint: r.origin]; newpos = YES; break; } } if (newpos == NO) { NSString *watched = [[[leaf node] path] stringByDeletingLastPathComponent]; if ([watchedPaths containsObject: watched]) { [watchedPaths removeObject: watched]; if ([watchedPaths containsObject: watched] == NO) { [gw removeWatcherForPath: watched]; } } [[leaf window] close]; [leaves removeObject: leaf]; } [self orderFrontLeaves]; [self findFreePositions]; started = NO; } } - (void)findFreePositions { NSArray *leaves; id leaf; NSArray *positions; int posx, posy; int i, j, m, count; RELEASE (freePositions); freePositions = [[NSMutableArray alloc] initWithCapacity: 1]; positions = [self positionsAroundLeafAtPosX: 0 posY: 0]; [freePositions addObjectsFromArray: positions]; leaves = [layers objectForKey: currentName]; for (i = 0; i < [leaves count]; i++) { leaf = [leaves objectAtIndex: i]; posx = [leaf posx]; posy = [leaf posy]; positions = [self positionsAroundLeafAtPosX: posx posY: posy]; [freePositions addObjectsFromArray: positions]; } count = [freePositions count]; for (i = 0; i < count; i++) { BOOL inuse = NO; LeafPosition *lpos = [freePositions objectAtIndex: i]; posx = [lpos posx]; posy = [lpos posy]; inuse = (posx == 0 && posy == 0); if (inuse == NO) { for (j = 0; j < [leaves count]; j++) { leaf = [leaves objectAtIndex: j]; inuse = (posx == [leaf posx] && posy == [leaf posy]); if (inuse == YES) { break; } } } if (inuse == NO) { for (m = 0; m < count; m++) { LeafPosition *lpos2 = [freePositions objectAtIndex: m]; if (m != i) { inuse = (posx == [lpos2 posx] && posy == [lpos2 posy]); if (inuse == YES) { break; } } } } if (inuse == YES) { [freePositions removeObjectAtIndex: i]; i--; count--; } } } - (NSArray *)positionsAroundLeafAtPosX:(int)posx posY:(int)posy { NSMutableArray *leafpositions; LeafPosition *leafpos; NSPoint or; int x, y; or = [myWin frame].origin; leafpositions = [NSMutableArray arrayWithCapacity: 1]; for (x = posx - 1; x <= posx + 1; x++) { for (y = posy + 1; y >= posy - 1; y--) { if ((x == posx && y == posy) == NO) { leafpos = [[LeafPosition alloc] initWithPosX: x posY: y relativeToPoint: or]; [leafpositions addObject: leafpos]; RELEASE (leafpos); } } } return leafpositions; } - (void)orderFrontLeaves { NSArray *leaves; int i; leaves = [layers objectForKey: currentName]; [myWin orderFront: nil]; [myWin setLevel: NSNormalWindowLevel]; [self setNeedsDisplay: YES]; if (leaveshidden == NO) { for (i = 0; i < [leaves count]; i++) { NSWindow *win = [[leaves objectAtIndex: i] window]; [win orderFront: nil]; [win setLevel: NSNormalWindowLevel]; } } } - (void)hide { NSArray *leaves; int i; leaves = [layers objectForKey: currentName]; for (i = 0; i < [leaves count]; i++) { [[[leaves objectAtIndex: i] window] orderOut: self]; } [myWin orderOut: self]; } - (void)verifyDraggingExited:(id)sender { NSArray *leaves; int i; leaves = [layers objectForKey: currentName]; for (i = 0; i < [leaves count]; i++) { FiendLeaf *leaf = [leaves objectAtIndex: i]; if ((leaf != (FiendLeaf *)sender) && ([leaf isDragTarget] == YES)) { [leaf draggingExited: nil]; } } } - (void)removeInvalidLeaf:(FiendLeaf *)leaf { NSString *layerName = [leaf layerName]; NSMutableArray *leaves = [layers objectForKey: layerName]; NSString *watched = [[[leaf node] path] stringByDeletingLastPathComponent]; if ([watchedPaths containsObject: watched]) { [watchedPaths removeObject: watched]; if ([watchedPaths containsObject: watched] == NO) { [gw removeWatcherForPath: watched]; } } [[leaf window] close]; [leaves removeObject: leaf]; } - (void)checkIconsAfterDotsFilesChange { NSArray *names = [layers allKeys]; int i; for (i = 0; i < [names count]; i++) { NSString *lname = [names objectAtIndex: i]; NSMutableArray *leaves = [layers objectForKey: lname]; int count = [leaves count]; BOOL modified = NO; int j; for (j = 0; j < count; j++) { id leaf = [leaves objectAtIndex: j]; NSString *leafpath = [[leaf node] path]; if ([leafpath rangeOfString: @"."].location != NSNotFound) { [self removeInvalidLeaf: leaf]; modified = YES; count--; j--; } } if (modified && ([lname isEqual: currentName])) { [self orderFrontLeaves]; [self findFreePositions]; } } } - (void)checkIconsAfterHidingOfPaths:(NSArray *)paths { NSArray *names = [layers allKeys]; int i; for (i = 0; i < [names count]; i++) { NSString *lname = [names objectAtIndex: i]; NSMutableArray *leaves = [layers objectForKey: lname]; int count = [leaves count]; BOOL modified = NO; int j, m; for (j = 0; j < count; j++) { id leaf = [leaves objectAtIndex: j]; NSString *leafpath = [[leaf node] path]; for (m = 0; m < [paths count]; m++) { NSString *path = [paths objectAtIndex: m]; if (isSubpathOfPath(path, leafpath) || [path isEqual: leafpath]) { [self removeInvalidLeaf: leaf]; modified = YES; count--; j--; break; } } } if (modified && ([lname isEqual: currentName])) { [self orderFrontLeaves]; [self findFreePositions]; } } } - (void)fileSystemDidChange:(NSNotification *)notification { CREATE_AUTORELEASE_POOL(arp); NSDictionary *dict = [notification object]; NSString *operation = [dict objectForKey: @"operation"]; NSString *source = [dict objectForKey: @"source"]; NSArray *files = [dict objectForKey: @"files"]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { NSMutableArray *paths = [NSMutableArray arrayWithCapacity: 1]; NSArray *names = [layers allKeys]; int i; for (i = 0; i < [files count]; i++) { NSString *s = [source stringByAppendingPathComponent: [files objectAtIndex: i]]; [paths addObject: s]; } for (i = 0; i < [names count]; i++) { NSString *lname = [names objectAtIndex: i]; NSMutableArray *leaves = [layers objectForKey: lname]; int count = [leaves count]; BOOL modified = NO; int j, m; for (j = 0; j < count; j++) { id leaf = [leaves objectAtIndex: j]; NSString *leafpath = [[leaf node] path]; for (m = 0; m < [paths count]; m++) { NSString *path = [paths objectAtIndex: m]; if (isSubpathOfPath(path, leafpath) || [path isEqual: leafpath]) { [self removeInvalidLeaf: leaf]; modified = YES; count--; j--; break; } } } if (modified && ([lname isEqual: currentName])) { [self orderFrontLeaves]; [self findFreePositions]; } } } RELEASE (arp); } - (void)watcherNotification:(NSNotification *)notification { CREATE_AUTORELEASE_POOL(arp); NSDictionary *notifdict = (NSDictionary *)[notification object]; NSString *path = [notifdict objectForKey: @"path"]; NSString *event = [notifdict objectForKey: @"event"]; NSEnumerator *enumerator; NSString *wpath; BOOL contained = NO; if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { RELEASE (arp); return; } enumerator = [watchedPaths objectEnumerator]; while ((wpath = [enumerator nextObject])) { if (([wpath isEqual: path]) || (isSubpathOfPath(path, wpath))) { contained = YES; break; } } if (contained) { NSArray *names = [layers allKeys]; int i; for (i = 0; i < [names count]; i++) { NSString *lname = [names objectAtIndex: i]; NSMutableArray *leaves = [layers objectForKey: lname]; int count = [leaves count]; BOOL modified = NO; int j; if ([event isEqual: @"GWWatchedPathDeleted"]) { for (j = 0; j < count; j++) { id leaf = [leaves objectAtIndex: j]; NSString *leafpath = [[leaf node] path]; if (isSubpathOfPath(path, leafpath)) { [self removeInvalidLeaf: leaf]; modified = YES; count--; j--; } } } else if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { NSArray *files = [notifdict objectForKey: @"files"]; for (j = 0; j < count; j++) { id leaf = [leaves objectAtIndex: j]; NSString *leafpath = [[leaf node] path]; int m; for (m = 0; m < [files count]; m++) { NSString *fname = [files objectAtIndex: m]; NSString *fullPath = [path stringByAppendingPathComponent: fname]; if ((isSubpathOfPath(fullPath, leafpath)) || ([fullPath isEqual: leafpath])) { [self removeInvalidLeaf: leaf]; modified = YES; count--; j--; break; } } } } if (modified && ([lname isEqual: currentName])) { [self orderFrontLeaves]; [self findFreePositions]; } } } RELEASE (arp); } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithCapacity: 1]; NSArray *names = [layers allKeys]; int i, j; for (i = 0; i < [names count]; i++) { NSString *name = [names objectAtIndex: i]; NSArray *leaves = [layers objectForKey: name]; NSMutableDictionary *pathsAndRects = [NSMutableDictionary dictionaryWithCapacity: 1]; for (j = 0; j < [leaves count]; j++) { NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity: 1]; id leaf = [leaves objectAtIndex: j]; [dict setObject: [NSString stringWithFormat: @"%i", [leaf posx]] forKey: @"posx"]; [dict setObject: [NSString stringWithFormat: @"%i", [leaf posy]] forKey: @"posy"]; [pathsAndRects setObject: dict forKey: [[leaf node] path]]; } [prefs setObject: pathsAndRects forKey: name]; } [defaults setObject: prefs forKey: @"fiendlayers"]; [defaults setObject: currentName forKey: @"fiendcurrentlayer"]; [myWin saveFrameUsingName: @"fiend_window"]; } - (void)drawRect:(NSRect)rect { [self lockFocus]; [tile compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; [leftArr compositeToPoint: NSMakePoint(49, 6) operation: NSCompositeSourceOver]; [rightArr compositeToPoint: NSMakePoint(37, 6) operation: NSCompositeSourceOver]; [namelabel drawWithFrame: NSMakeRect(4, 50, 56, 10) inView: self]; [self unlockFocus]; } @end @implementation Fiend (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; if([[pb types] indexOfObject: NSFilenamesPboardType] != NSNotFound) { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { isDragTarget = YES; return NSDragOperationMove; } } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask; if (isDragTarget == NO) { return NSDragOperationNone; } sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask & NSDragOperationMove) { return NSDragOperationMove; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb; NSArray *sourcePaths; NSString *path; NSString *basepath; NSMutableArray *leaves; id leaf; NSRect r; int px, py, posx, posy; int i; pb = [sender draggingPasteboard]; sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([sourcePaths count] > 1) { NSString *msg = NSLocalizedString(@"You can't dock multiple paths!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); isDragTarget = NO; return; } leaves = [layers objectForKey: currentName]; path = [sourcePaths objectAtIndex: 0]; basepath = [path stringByDeletingLastPathComponent]; if ([basepath isEqual: [gw trashPath]]) { isDragTarget = NO; return; } for (i = 0; i < [leaves count]; i++) { leaf = [leaves objectAtIndex: i]; if ([[[leaf node] path] isEqual: path] == YES) { NSString *msg = NSLocalizedString(@"This object is already present in this layer!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); isDragTarget = NO; return; } } r = [myWin frame]; posx = 0; posy = 0; for (i = 0; i < [leaves count]; i++) { leaf = [leaves objectAtIndex: i]; px = [leaf posx]; py = [leaf posy]; if ((px == posx) && (py < posy)) { posy = py; } } posy--; leaf = [[FiendLeaf alloc] initWithPosX: posx posY: posy relativeToPoint: r.origin forPath: path inFiend: self layerName: currentName ghostImage: nil]; [leaves addObject: leaf]; RELEASE (leaf); if ([watchedPaths containsObject: basepath] == NO) { [gw addWatcherForPath: basepath]; } [watchedPaths addObject: basepath]; leaf = [leaves objectAtIndex: [leaves count] -1]; [[leaf window] display]; [self findFreePositions]; [self orderFrontLeaves]; isDragTarget = NO; [self updateDefaults]; } @end gworkspace-1.1.0/GWorkspace/Fiend/FiendLeaf.h0000644000175000001440000000517614751213523020213 0ustar multixusers/* FiendLeaf.h * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authora: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FIENDLEAF_H #define FIENDLEAF_H #include #include @class NSImage; @class NSTextFieldCell; @class Fiend; @class NSWorkspace; @class GWorkspace; @class FSNode; @interface LeafPosition : NSObject { NSRect r; int posx, posy; } - (id)initWithPosX:(int)px posY:(int)py relativeToPoint:(NSPoint)p; - (NSRect)lfrect; - (int)posx; - (int)posy; - (BOOL)containsPoint:(NSPoint)p; @end @interface FiendLeaf : NSView { FSNode *node; NSString *layerName; NSImage *tile, *hightile, *icon; NSTextFieldCell *namelabel; BOOL isGhost; BOOL isDragTarget; BOOL forceCopy; int posx, posy; NSTimer *dissTimer; float dissFraction; int dissCounter; BOOL dissolving; NSFileManager *fm; NSWorkspace *ws; GWorkspace *gw; Fiend *fiend; } - (id)initWithPosX:(int)px posY:(int)py relativeToPoint:(NSPoint)p forPath:(NSString *)apath inFiend:(Fiend *)afiend layerName:(NSString *)lname ghostImage:(NSImage *)ghostimage; - (void)setPosX:(int)px posY:(int)py relativeToPoint:(NSPoint)p; - (int)posx; - (int)posy; - (NSPoint)iconPosition; - (FSNode *)node; - (NSImage *)icon; - (NSString *)layerName; - (void)startDissolve; - (BOOL)dissolveAndReturnWhenDone; @end @interface FiendLeaf (DraggingDestination) - (BOOL)isDragTarget; - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // FIENDLEAF_H gworkspace-1.1.0/GWorkspace/Fiend/FiendLeaf.m0000644000175000001440000003643114751213523020216 0ustar multixusers/* FiendLeaf.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "GWFunctions.h" #import "FiendLeaf.h" #import "Fiend.h" #import "GWorkspace.h" #import "FSNodeRep.h" #import "FSNFunctions.h" #define ICON_SIZE 48 #define INTERVALS 40.0 @implementation LeafPosition - (id)initWithPosX:(int)px posY:(int)py relativeToPoint:(NSPoint)p { self = [super init]; posx = px; posy = py; r = NSMakeRect((int)p.x + (64 * posx), (int)p.y + (64 * posy), 64, 64); return self; } - (NSRect)lfrect { return r; } - (int)posx { return posx; } - (int)posy { return posy; } - (BOOL)containsPoint:(NSPoint)p { return NSPointInRect(p, r); } @end @implementation FiendLeaf - (void)dealloc { RELEASE (node); RELEASE (layerName); RELEASE (tile); RELEASE (hightile); RELEASE (icon); RELEASE (namelabel); [super dealloc]; } - (id)initWithPosX:(int)px posY:(int)py relativeToPoint:(NSPoint)p forPath:(NSString *)apath inFiend:(Fiend *)afiend layerName:(NSString *)lname ghostImage:(NSImage *)ghostimage { NSWindow *win; self = [super init]; win = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 64, 64) styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO]; [win setExcludedFromWindowsMenu: YES]; [self setFrame: [[win contentView] bounds]]; [win setContentView: self]; [self setPosX: px posY: py relativeToPoint: p]; if (apath && lname) { fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; gw = [GWorkspace gworkspace]; ASSIGN (layerName, lname); ASSIGN (node, [FSNode nodeWithPath: apath]); ASSIGN (icon, [[FSNodeRep sharedInstance] iconOfSize: ICON_SIZE forNode: node]); if ([node isApplication] == NO) { NSString *name; if ([[node path] isEqual: path_separator()]) { NSHost *host = [NSHost currentHost]; NSString *hname = [host name]; NSRange range = [hname rangeOfString: @"."]; if (range.length != 0) { hname = [hname substringToIndex: range.location]; } name = hname; } else { name = [node name]; } namelabel = [NSTextFieldCell new]; [namelabel setFont: [NSFont systemFontOfSize: 10]]; [namelabel setBordered: NO]; [namelabel setAlignment: NSCenterTextAlignment]; [namelabel setStringValue: cutFileLabelText(name, namelabel, 50)]; } else { namelabel = nil; } [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]]; } else { icon = nil; } ASSIGN (tile, [NSImage imageNamed: @"common_Tile.tiff"]); if (ghostimage == nil) { tile = [NSImage imageNamed: @"common_Tile.tiff"]; fiend = afiend; isGhost = NO; } else { ASSIGN (icon, ghostimage); ASSIGN (hightile, [NSImage imageNamed: @"TileHighlight.tiff"]); isGhost = YES; } isDragTarget = NO; dissolving = NO; return self; } - (void)setPosX:(int)px posY:(int)py relativeToPoint:(NSPoint)p { posx = px; posy = py; [[self window] setFrameOrigin: NSMakePoint(p.x + (64 * posx), p.y + (64 * posy))]; } - (int)posx { return posx; } - (int)posy { return posy; } - (NSPoint)iconPosition { NSWindow *win = [self window]; NSPoint p = [win frame].origin; NSSize s = [icon size]; NSSize shift = NSMakeSize((64 - s.width) / 2, (64 - s.height) / 2); return NSMakePoint(p.x + shift.width, p.y + shift.height); } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (FSNode *)node { return node; } - (NSImage *)icon { return icon; } - (NSString *)layerName { return layerName; } - (void)startDissolve { dissolving = YES; dissCounter = 0; dissFraction = 0.2; dissTimer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(display) userInfo: nil repeats: YES]; RETAIN (dissTimer); } - (BOOL)dissolveAndReturnWhenDone { dissolving = YES; dissCounter = 0; dissFraction = 0.2; while (1) { NSDate *date = [NSDate dateWithTimeIntervalSinceNow: 0.02]; [[NSRunLoop currentRunLoop] runUntilDate: date]; [self display]; if (dissolving == NO) { break; } } return YES; } - (void)mouseDown:(NSEvent*)theEvent { [fiend orderFrontLeaves]; if ([node isValid]) { NSEvent *nextEvent; NSPoint location, lastLocation, origin; NSWindow *win; if ([theEvent clickCount] > 1) { if ([node isApplication]) { NS_DURING { [ws launchApplication: [node path]]; [self startDissolve]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } else if ([node isPlain] || [node isDirectory] || [node isMountPoint]) { NSArray *paths = [NSArray arrayWithObjects: [node path], nil]; [gw openSelectedPaths: paths newViewer: YES]; } return; } win = [self window]; [win orderFront: self]; nextEvent = [win nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { #if 0 // Ordering a window back after a single mouse click is outright annoying [win orderBack: self]; #endif return; } lastLocation = [theEvent locationInWindow]; while (1) { nextEvent = [win nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { break; } location = [win mouseLocationOutsideOfEventStream]; origin = [win frame].origin; origin.x += (location.x - lastLocation.x); origin.y += (location.y - lastLocation.y); [win setFrameOrigin: origin]; [fiend draggedFiendLeaf: self atPoint: origin mouseUp: NO]; } #if 0 // Ordering a window back after a single mouse click is outright annoying [win orderBack: self]; #endif [fiend draggedFiendLeaf: self atPoint: [win frame].origin mouseUp: YES]; } else { [fiend removeInvalidLeaf: self]; } } - (void)drawRect:(NSRect)rect { NSSize iconSize; NSPoint iconPosn; NSRect textFrame; [self lockFocus]; if ((isGhost == NO) && (dissolving == NO)) { [tile compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; } else if (dissolving == NO) { [hightile compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; } if (icon != nil) { iconSize = [icon size]; if (isGhost || [node isApplication]) { iconPosn = NSMakePoint((64 - iconSize.width) / 2.0, (64 - iconSize.height) / 2.0); } else { iconPosn = NSMakePoint((64 - iconSize.width) / 2.0, 13); } if (dissolving) { if (dissCounter++ >= 5) { dissFraction += 0.1; } [[NSColor whiteColor] set]; NSRectFill(rect); [tile dissolveToPoint: NSZeroPoint fraction: fabs(dissFraction)]; [icon dissolveToPoint: iconPosn fraction: fabs(dissFraction)]; if (dissFraction >= 1) { if (dissTimer && [dissTimer isValid]) { [dissTimer invalidate]; DESTROY (dissTimer); } dissolving = NO; } [self unlockFocus]; return; } if (isGhost == NO) { [icon compositeToPoint: iconPosn operation: NSCompositeSourceOver]; } else { [icon dissolveToPoint: iconPosn fraction: 0.2]; } if (namelabel != nil) { textFrame = NSMakeRect(4, 3, 56, 9); [namelabel setDrawsBackground: NO]; [namelabel drawWithFrame: textFrame inView: self]; } } [self unlockFocus]; } @end @implementation FiendLeaf (DraggingDestination) - (BOOL)isDragTarget { return isDragTarget; } - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask = 0; NSArray *sourcePaths; NSString *fromPath; NSString *buff; int i, count; [fiend verifyDraggingExited: self]; if ((([node isDirectory] == NO) && ([node isMountPoint] == NO) && ([node isApplication] == NO)) || ([node isPackage] && ([node isApplication] == NO))) { return NSDragOperationNone; } pb = [sender draggingPasteboard]; sourceDragMask = [sender draggingSourceOperationMask]; if ([[pb types] indexOfObject: NSFilenamesPboardType] != NSNotFound) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; count = [sourcePaths count]; fromPath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if (count == 0) { return NSDragOperationNone; } if ([node isApplication] == NO) { if ([node isWritable] == NO) { return NSDragOperationNone; } if ([[node path] isEqual: fromPath]) { return NSDragOperationNone; } for (i = 0; i < count; i++) { if ([[node path] isEqual: [sourcePaths objectAtIndex: i]]) { return NSDragOperationNone; } } buff = [NSString stringWithString: [node path]]; while (1) { for (i = 0; i < count; i++) { if ([buff isEqual: [sourcePaths objectAtIndex: i]]) { return NSDragOperationNone; } } if ([buff isEqual: path_separator()]) { break; } buff = [buff stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: fromPath]) { NSArray *subNodes = [node subNodes]; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { int j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } isDragTarget = YES; forceCopy = NO; ASSIGN (icon, [[FSNodeRep sharedInstance] openFolderIconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; if (sourceDragMask & NSDragOperationMove) { if ([fm isWritableFileAtPath: fromPath]) { return NSDragOperationMove; } else { forceCopy = YES; return NSDragOperationCopy; } } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } else if (sourceDragMask & NSDragOperationLink) { return NSDragOperationLink; } } else { if (sourceDragMask & NSDragOperationMove) { for (i = 0; i < [sourcePaths count]; i++) { FSNode *fnode = [FSNode nodeWithPath: [sourcePaths objectAtIndex: i]]; if ([fnode isPlain] == NO) { return NSDragOperationNone; } } ASSIGN (icon, [[FSNodeRep sharedInstance] openFolderIconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; isDragTarget = YES; return NSDragOperationMove; } if ((sourceDragMask & NSDragOperationCopy) || (sourceDragMask & NSDragOperationLink)) { return NSDragOperationNone; } } } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; if (isDragTarget == NO) { return NSDragOperationNone; } if ((([node isDirectory] == NO) && ([node isMountPoint] == NO) && ([node isApplication] == NO)) || ([node isPackage] && ([node isApplication] == NO))) { return NSDragOperationNone; } if ([node isApplication] == NO) { if (sourceDragMask & NSDragOperationMove) { return forceCopy ? NSDragOperationCopy : NSDragOperationMove; } if (sourceDragMask & NSDragOperationCopy) { return NSDragOperationCopy; } else if (sourceDragMask == NSDragOperationLink) { return NSDragOperationLink; } } else { if (sourceDragMask & NSDragOperationMove) { return NSDragOperationMove; } } return NSDragOperationNone; } - (void)draggingExited:(id )sender { if (isDragTarget) { isDragTarget = NO; ASSIGN (icon, [[FSNodeRep sharedInstance] iconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; } } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSPasteboard *pb = [sender draggingPasteboard]; NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSUInteger i = 0; ASSIGN (icon, [[FSNodeRep sharedInstance] iconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; if ([node isApplication] == NO) { NSString *operation, *source; NSMutableArray *files; NSInteger tag; operation = nil; source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([source isEqual: [gw trashPath]]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask & NSDragOperationMove) { if ([fm isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } if (sourceDragMask & NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask & NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } } files = [NSMutableArray arrayWithCapacity: 1]; for(i = 0; i < [sourcePaths count]; i++) { [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; } [gw performFileOperation: operation source: source destination: [node path] files: files tag: &tag]; } else { for(i = 0; i < [sourcePaths count]; i++) { FSNode *draggednode = [FSNode nodeWithPath: [sourcePaths objectAtIndex: i]]; if ([draggednode isPlain]) { NS_DURING { [ws openFile: [draggednode path] withApplication: [node path]]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [draggednode name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } isDragTarget = NO; } @end gworkspace-1.1.0/GWorkspace/FileViewer/0000755000175000001440000000000014751352021017225 5ustar multixusersgworkspace-1.1.0/GWorkspace/FileViewer/GWViewer.h0000644000175000001440000001100014751213523021070 0ustar multixusers/* GWViewer.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import typedef enum { GWViewTypeBrowser = 1, GWViewTypeIcon, GWViewTypeList } GWViewType; @class GWViewersManager; @class FSNode; @class FSNodeRep; @class GWViewerWindow; @class GWViewerSplit; @class GWViewerShelf; @class GWViewerScrollView; @class GWViewerIconsPath; @class GWViewerPathsScroll; @class NSView; @class GWorkspace; @interface GWViewer : NSObject { GWViewerWindow *vwrwin; GWViewerSplit *split; GWViewerShelf *shelf; float shelfHeight; NSView *lowBox; GWViewerPathsScroll *pathsScroll; GWViewerIconsPath *pathsView; GWViewerScrollView *nviewScroll; id nodeView; NSDictionary *viewerPrefs; GWViewType viewType; BOOL rootViewer; /* base path = root */ BOOL firstRootViewer; /* special first viewer */ NSString *defaultsKeyStr; int visibleCols; int resizeIncrement; FSNode *baseNode; NSArray *baseNodeArray; NSArray *lastSelection; NSMutableArray *watchedNodes; FSNodeRep *fsnodeRep; NSMutableArray *history; int historyPosition; BOOL invalidated; BOOL closing; GWViewersManager *manager; GWorkspace *gworkspace; NSNotificationCenter *nc; } - (id)initForNode:(FSNode *)node inWindow:(GWViewerWindow *)win showType:(GWViewType)stype showSelection:(BOOL)showsel withKey:(NSString *)key; - (void)createSubviews; - (FSNode *)baseNode; - (BOOL)isShowingNode:(FSNode *)anode; - (BOOL)isShowingPath:(NSString *)apath; - (void)reloadNodeContents; - (void)reloadFromNode:(FSNode *)anode; - (void)unloadFromNode:(FSNode *)anode; - (void)updateShownSelection; - (GWViewerWindow *)win; - (id)nodeView; - (id)shelf; - (GWViewType)viewType; /* the first among root viewers, the default Viewer */ - (BOOL)isFirstRootViewer; /* returns the key used in the defaults (prefsname) */ - (NSString *)defaultsKey; - (void)activate; - (void)deactivate; - (void)tileViews; - (void)scrollToBeginning; - (void)invalidate; - (BOOL)invalidated; - (BOOL)isClosing; - (void)setOpened:(BOOL)opened repOfNode:(FSNode *)anode; - (void)unselectAllReps; - (void)selectionChanged:(NSArray *)newsel; - (void)multipleNodeViewDidSelectSubNode:(FSNode *)node; - (void)pathsViewDidSelectIcon:(id)icon; - (void)shelfDidSelectIcon:(id)icon; - (void)setSelectableNodesRange:(NSRange)range; - (void)updeateInfoLabels; - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (NSArray *)watchedNodes; - (void)hideDotsFileChanged:(BOOL)hide; - (void)hiddenFilesChanged:(NSArray *)paths; - (NSMutableArray *)history; - (int)historyPosition; - (void)setHistoryPosition:(int)pos; - (void)columnsWidthChanged:(NSNotification *)notification; - (void)updateDefaults; @end // // GWViewerWindow Delegate Methods // @interface GWViewer (GWViewerWindowDelegateMethods) - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionAsFolder; - (void)openSelectionWith; - (void)newFolder; - (void)newFile; - (void)duplicateFiles; - (void)recycleFiles; - (void)emptyTrash; - (void)deleteFiles; - (void)goBackwardInHistory; - (void)goForwardInHistory; - (void)setViewerType:(id)sender; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer; - (void)showTerminal; - (BOOL)validateItem:(id)menuItem; - (void)makeThumbnails:(id)sender; - (void)removeThumbnails:(id)sender; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewer.m0000644000175000001440000012406514751213523021115 0ustar multixusers/* GWViewer.m * * Copyright (C) 2004-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import "GWViewer.h" #import "GWViewersManager.h" #import "GWViewerBrowser.h" #import "GWViewerIconsView.h" #import "GWViewerListView.h" #import "GWViewerWindow.h" #import "GWViewerScrollView.h" #import "GWViewerSplit.h" #import "GWViewerShelf.h" #import "GWViewerIconsPath.h" #import "GWorkspace.h" #import "GWFunctions.h" #import "FSNBrowser.h" #import "FSNIconsView.h" #import "FSNodeRep.h" #import "FSNIcon.h" #import "FSNFunctions.h" #import "Thumbnailer/GWThumbnailer.h" #define DEFAULT_INCR 150 #define MIN_WIN_H 300 #define MIN_SHELF_HEIGHT 2.0 #define MID_SHELF_HEIGHT 77.0 #define MAX_SHELF_HEIGHT 150.0 #define COLLAPSE_LIMIT 35 #define MID_LIMIT 110 @implementation GWViewer - (void)dealloc { [nc removeObserver: self]; RELEASE (baseNode); RELEASE (baseNodeArray); RELEASE (lastSelection); RELEASE (defaultsKeyStr); RELEASE (watchedNodes); RELEASE (vwrwin); RELEASE (viewerPrefs); RELEASE (history); [super dealloc]; } - (id)initForNode:(FSNode *)node inWindow:(GWViewerWindow *)win showType:(GWViewType)stype showSelection:(BOOL)showsel withKey:(NSString *)key { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname; id defEntry; NSRect r; NSString *viewTypeStr; ASSIGN (baseNode, [FSNode nodeWithPath: [node path]]); ASSIGN (baseNodeArray, [NSArray arrayWithObject: baseNode]); fsnodeRep = [FSNodeRep sharedInstance]; lastSelection = nil; history = [NSMutableArray new]; historyPosition = 0; watchedNodes = [NSMutableArray new]; manager = [GWViewersManager viewersManager]; gworkspace = [GWorkspace gworkspace]; nc = [NSNotificationCenter defaultCenter]; defEntry = [defaults objectForKey: @"browserColsWidth"]; if (defEntry) { resizeIncrement = [defEntry intValue]; } else { resizeIncrement = DEFAULT_INCR; } rootViewer = [[baseNode path] isEqual: path_separator()]; firstRootViewer = (rootViewer && ([[manager viewersForBaseNode: baseNode] count] == 0)); if (rootViewer == YES) { if (firstRootViewer) { prefsname = @"root_viewer"; } else { if (key == nil) { NSNumber *rootViewerKey; rootViewerKey = [NSNumber numberWithUnsignedLong: (unsigned long)self]; prefsname = [NSString stringWithFormat: @"%lu_viewer_at_%@", [rootViewerKey unsignedLongValue], [node path]]; } else { prefsname = [key retain]; } } } else { prefsname = [NSString stringWithFormat: @"viewer_at_%@", [node path]]; } defaultsKeyStr = [prefsname retain]; if ([baseNode isWritable] && (rootViewer == NO) && ([[fsnodeRep volumes] containsObject: [baseNode path]] == NO)) { NSString *dictPath = [[baseNode path] stringByAppendingPathComponent: @".gwdir"]; if ([[NSFileManager defaultManager] fileExistsAtPath: dictPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; if (dict) { viewerPrefs = [dict copy]; } } } if (viewerPrefs == nil) { defEntry = [defaults dictionaryForKey: defaultsKeyStr]; if (defEntry) { viewerPrefs = [defEntry copy]; } else { viewerPrefs = [NSDictionary new]; } } viewType = GWViewTypeBrowser; viewTypeStr = [viewerPrefs objectForKey: @"viewtype"]; if (viewTypeStr == nil) { if (stype != 0) { viewType = stype; } } else if ([viewTypeStr isEqual: @"Browser"]) { viewType = GWViewTypeBrowser; } else if ([viewTypeStr isEqual: @"List"]) { viewType = GWViewTypeList; } else if ([viewTypeStr isEqual: @"Icon"]) { viewType = GWViewTypeIcon; } defEntry = [viewerPrefs objectForKey: @"shelfheight"]; if (defEntry) { shelfHeight = [defEntry floatValue]; } else { shelfHeight = MID_SHELF_HEIGHT; } ASSIGN (vwrwin, win); [vwrwin setDelegate: self]; defEntry = [viewerPrefs objectForKey: @"geometry"]; if (defEntry) { [vwrwin setFrameFromString: defEntry]; } else { r = NSMakeRect(200, 200, resizeIncrement * 3, 350); [vwrwin setFrame: rectForWindow([manager viewerWindows], r, YES) display: NO]; } r = [vwrwin frame]; if (r.size.height < MIN_WIN_H) { r.origin.y -= (MIN_WIN_H - r.size.height); r.size.height = MIN_WIN_H; if (r.origin.y < 0) { r.origin.y = 5; } [vwrwin setFrame: r display: NO]; } [vwrwin setMinSize: NSMakeSize(resizeIncrement * 2, MIN_WIN_H)]; [vwrwin setResizeIncrements: NSMakeSize(resizeIncrement, 1)]; if (firstRootViewer) { [vwrwin setTitle: NSLocalizedString(@"File Viewer", @"")]; } else { if (rootViewer) { [vwrwin setTitle: [NSString stringWithFormat: @"%@ - %@", [node name], [node parentPath]]]; } else { [vwrwin setTitle: [NSString stringWithFormat: @"%@", [node name]]]; } } [self createSubviews]; defEntry = [viewerPrefs objectForKey: @"shelfdicts"]; if (defEntry && [defEntry count]) { [shelf setContents: defEntry]; } else if (rootViewer) { NSDictionary *sfdict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: 0], @"index", [NSArray arrayWithObject: NSHomeDirectory()], @"paths", nil]; [shelf setContents: [NSArray arrayWithObject: sfdict]]; } if (viewType == GWViewTypeIcon) { nodeView = [[GWViewerIconsView alloc] initForViewer: self]; [pathsScroll setDelegate: pathsView]; } else if (viewType == GWViewTypeList) { NSRect r = [[nviewScroll contentView] bounds]; nodeView = [[GWViewerListView alloc] initWithFrame: r forViewer: self]; [pathsScroll setDelegate: pathsView]; } else if (viewType == GWViewTypeBrowser ) { nodeView = [[GWViewerBrowser alloc] initWithBaseNode: baseNode inViewer: self visibleColumns: visibleCols scroller: [pathsScroll horizontalScroller] cellsIcons: NO editableCells: NO selectionColumn: YES]; } [nviewScroll setDocumentView: nodeView]; RELEASE (nodeView); [nodeView showContentsOfNode: baseNode]; if (showsel) { defEntry = [viewerPrefs objectForKey: @"lastselection"]; if (defEntry) { NSFileManager *fm = [NSFileManager defaultManager]; NSMutableArray *selection = [defEntry mutableCopy]; int count = [selection count]; int i; for (i = 0; i < count; i++) { NSString *s = [selection objectAtIndex: i]; if ([fm fileExistsAtPath: s] == NO) { [selection removeObject: s]; count--; i--; } } if ([selection count]) { if ([nodeView isSingleNode]) { NSString *base = [selection objectAtIndex: 0]; FSNode *basenode = [FSNode nodeWithPath: base]; if (([basenode isDirectory] == NO) || [basenode isPackage]) { base = [base stringByDeletingLastPathComponent]; basenode = [FSNode nodeWithPath: base]; } [nodeView showContentsOfNode: basenode]; [nodeView selectRepsOfPaths: selection]; } else { [nodeView selectRepsOfPaths: selection]; } } RELEASE (selection); } } [nc addObserver: self selector: @selector(columnsWidthChanged:) name: @"GWBrowserColumnWidthChangedNotification" object: nil]; invalidated = NO; closing = NO; } return self; } - (void)createSubviews { NSRect r = [[vwrwin contentView] bounds]; CGFloat w = r.size.width; CGFloat h = r.size.height; CGFloat d = 0.0; int xmargin = 8; int ymargin = 6; int pathscrh = 98; NSUInteger resizeMask; BOOL hasScroller; split = [[GWViewerSplit alloc] initWithFrame: r]; [split setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; [split setDelegate: self]; d = [split dividerThickness]; r = NSMakeRect(0, 0, w, shelfHeight); shelf = [[GWViewerShelf alloc] initWithFrame: r forViewer: self]; [split addSubview: shelf]; RELEASE (shelf); r = NSMakeRect(0, shelfHeight + d, w, h - shelfHeight - d); lowBox = [[NSView alloc] initWithFrame: r]; resizeMask = NSViewWidthSizable | NSViewHeightSizable; [lowBox setAutoresizingMask: resizeMask]; [lowBox setAutoresizesSubviews: YES]; [split addSubview: lowBox]; RELEASE (lowBox); r = [lowBox bounds]; w = r.size.width; h = r.size.height; r = NSMakeRect(xmargin, h - pathscrh, w - (xmargin * 2), pathscrh); pathsScroll = [[GWViewerPathsScroll alloc] initWithFrame: r]; [pathsScroll setBorderType: NSBezelBorder]; [pathsScroll setHasHorizontalScroller: YES]; [pathsScroll setHasVerticalScroller: NO]; [pathsScroll setDelegate: nil]; resizeMask = NSViewNotSizable | NSViewWidthSizable | NSViewMinYMargin; [pathsScroll setAutoresizingMask: resizeMask]; [lowBox addSubview: pathsScroll]; RELEASE (pathsScroll); visibleCols = myrintf(r.size.width / [vwrwin resizeIncrements].width); r = [[pathsScroll contentView] bounds]; pathsView = [[GWViewerIconsPath alloc] initWithFrame: r visibleIcons: visibleCols forViewer: self ownsScroller: (viewType != GWViewTypeBrowser)]; resizeMask = NSViewNotSizable; [pathsView setAutoresizingMask: resizeMask]; [pathsScroll setDocumentView: pathsView]; RELEASE (pathsView); r = NSMakeRect(xmargin, 0, w - (xmargin * 2), h - pathscrh - ymargin); nviewScroll = [[GWViewerScrollView alloc] initWithFrame: r inViewer: self]; [nviewScroll setBorderType: NSBezelBorder]; hasScroller = ((viewType ==GWViewTypeIcon) || (viewType ==GWViewTypeList)); [nviewScroll setHasHorizontalScroller: hasScroller]; [nviewScroll setHasVerticalScroller: hasScroller]; resizeMask = NSViewNotSizable | NSViewWidthSizable | NSViewHeightSizable; [nviewScroll setAutoresizingMask: resizeMask]; [lowBox addSubview: nviewScroll]; RELEASE (nviewScroll); [vwrwin setContentView: split]; RELEASE (split); } - (FSNode *)baseNode { return baseNode; } - (BOOL)isShowingNode:(FSNode *)anode { NSArray *comps = [FSNode nodeComponentsFromNode: baseNode toNode: [nodeView shownNode]]; return [comps containsObject: anode]; } - (BOOL)isShowingPath:(NSString *)apath { FSNode *node = [FSNode nodeWithPath: apath]; return [self isShowingNode: node]; } - (void)reloadNodeContents { [nodeView reloadContents]; } - (void)reloadFromNode:(FSNode *)anode { [nodeView reloadFromNode: anode]; [self updeateInfoLabels]; } - (void)unloadFromNode:(FSNode *)anode { if ([baseNode isEqual: anode] || [baseNode isSubnodeOfNode: anode]) { [self deactivate]; } else { [nodeView unloadFromNode: anode]; } } - (void)updateShownSelection { [pathsView updateLastIcon]; } - (GWViewerWindow *)win { return vwrwin; } - (id)nodeView { return nodeView; } - (id)shelf { return shelf; } - (GWViewType)viewType { return viewType; } - (BOOL)isFirstRootViewer { return firstRootViewer; } - (NSString *)defaultsKey { return defaultsKeyStr; } - (void)activate { [vwrwin makeKeyAndOrderFront: nil]; [self tileViews]; [self scrollToBeginning]; } - (void)deactivate { [vwrwin close]; } - (void)tileViews { NSRect r = [split bounds]; CGFloat w = r.size.width; CGFloat h = r.size.height; CGFloat d = [split dividerThickness]; [shelf setFrame: NSMakeRect(0, 0, w, shelfHeight)]; [lowBox setFrame: NSMakeRect(0, shelfHeight + d, w, h - shelfHeight - d)]; } - (void)scrollToBeginning { if ([nodeView isSingleNode]) { [nodeView scrollSelectionToVisible]; } } - (void)invalidate { invalidated = YES; } - (BOOL)invalidated { return invalidated; } - (BOOL)isClosing { return closing; } - (void)setOpened:(BOOL)opened repOfNode:(FSNode *)anode { id rep = [nodeView repOfSubnode: anode]; if (rep) { [rep setOpened: opened]; if ([nodeView isSingleNode]) { [rep select]; } } } - (void)unselectAllReps { [nodeView unselectOtherReps: nil]; [nodeView selectionDidChange]; } - (void)selectionChanged:(NSArray *)newsel { FSNode *node; NSArray *components; if (closing) return; [manager selectionChanged: newsel]; if (lastSelection && [newsel isEqual: lastSelection]) { if ([[newsel objectAtIndex: 0] isEqual: [nodeView shownNode]] == NO) { return; } } ASSIGN (lastSelection, newsel); [self updeateInfoLabels]; node = [newsel objectAtIndex: 0]; if (([node isDirectory] == NO) || [node isPackage] || ([newsel count] > 1)) { if ([node isEqual: baseNode] == NO) { // if baseNode is a package node = [FSNode nodeWithPath: [node parentPath]]; } } components = [FSNode nodeComponentsFromNode: baseNode toNode: node]; [pathsView showPathComponents: components selection: newsel]; if ([node isDirectory] && ([newsel count] == 1)) { if ([nodeView isSingleNode] && ([node isEqual: [nodeView shownNode]] == NO)) { node = [FSNode nodeWithPath: [node parentPath]]; components = [FSNode nodeComponentsFromNode: baseNode toNode: node]; } } if ([components isEqual: watchedNodes] == NO) { NSUInteger count = [components count]; unsigned pos = 0; NSUInteger i; for (i = 0; i < [watchedNodes count]; i++) { FSNode *nd = [watchedNodes objectAtIndex: i]; if (i < count) { FSNode *ndcomp = [components objectAtIndex: i]; if ([nd isEqual: ndcomp] == NO) { [gworkspace removeWatcherForPath: [nd path]]; } else { pos = i + 1; } } else { [gworkspace removeWatcherForPath: [nd path]]; } } for (i = pos; i < count; i++) { [gworkspace addWatcherForPath: [[components objectAtIndex: i] path]]; } [watchedNodes removeAllObjects]; [watchedNodes addObjectsFromArray: components]; } [manager addNode: node toHistoryOfViewer: self]; } - (void)multipleNodeViewDidSelectSubNode:(FSNode *)node { } - (void)pathsViewDidSelectIcon:(id)icon { FSNode *node = [icon node]; int index = [icon gridIndex]; if ([node isDirectory] && (([node isPackage] == NO) || (index == 0))) { if ([nodeView isSingleNode]) { [nodeView showContentsOfNode: node]; [self scrollToBeginning]; [self selectionChanged: [NSArray arrayWithObject: node]]; } else { [nodeView setLastShownNode: node]; } } } - (void)shelfDidSelectIcon:(id)icon { FSNode *node = [icon node]; NSArray *selection = [icon selection]; FSNode *nodetoshow; if (selection && ([selection count] > 1)) { nodetoshow = [FSNode nodeWithPath: [node parentPath]]; } else { if ([node isDirectory] && ([node isPackage] == NO)) { nodetoshow = node; if (viewType != GWViewTypeBrowser) { selection = nil; } else { selection = [NSArray arrayWithObject: node]; } } else { nodetoshow = [FSNode nodeWithPath: [node parentPath]]; selection = [NSArray arrayWithObject: node]; } } [nodeView showContentsOfNode: nodetoshow]; if (selection) { [nodeView selectRepsOfSubnodes: selection]; } if ([nodeView respondsToSelector: @selector(scrollSelectionToVisible)]) { [nodeView scrollSelectionToVisible]; } } - (void)setSelectableNodesRange:(NSRange)range { visibleCols = range.length; [pathsView setSelectableIconsRange: range]; } - (void)updeateInfoLabels { NSFileManager *fm = [NSFileManager defaultManager]; NSDictionary *attributes = [fm fileSystemAttributesAtPath: [[nodeView shownNode] path]]; NSNumber *freefs = [attributes objectForKey: NSFileSystemFreeSize]; NSString *labelstr; if (freefs == nil) { labelstr = NSLocalizedString(@"unknown volume size", @""); } else { unsigned long long freeSize = [freefs unsignedLongLongValue]; NSUInteger systemType = [[NSProcessInfo processInfo] operatingSystem]; switch (systemType) { case NSMACHOperatingSystem: freeSize = (freeSize >> 8); break; default: break; } labelstr = [NSString stringWithFormat: @"%@ %@", sizeDescription(freeSize), NSLocalizedString(@"free", @"")]; } [split updateDiskSpaceInfo: labelstr]; } - (BOOL)involvedByFileOperation:(NSDictionary *)opinfo { FSNode *lastNode = [nodeView shownNode]; NSArray *comps = [FSNode nodeComponentsFromNode: baseNode toNode: lastNode]; int i; for (i = 0; i < [comps count]; i++) { if ([[comps objectAtIndex: i] involvedByFileOperation: opinfo]) { return YES; } } return NO; } - (void)nodeContentsWillChange:(NSDictionary *)info { [nodeView nodeContentsWillChange: info]; } - (void)nodeContentsDidChange:(NSDictionary *)info { if ([nodeView isSingleNode]) { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { destination = [destination stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { [nodeView reloadFromNode: [FSNode nodeWithPath: destination]]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { [nodeView reloadFromNode: [FSNode nodeWithPath: source]]; } } else { [nodeView nodeContentsDidChange: info]; } } - (void)watchedPathChanged:(NSDictionary *)info { if (invalidated == NO) { if ([nodeView isSingleNode]) { NSString *path = [info objectForKey: @"path"]; NSString *event = [info objectForKey: @"event"]; if ([event isEqual: @"GWWatchedPathDeleted"]) { NSString *s = [path stringByDeletingLastPathComponent]; if ([self isShowingPath: s]) { FSNode *node = [FSNode nodeWithPath: s]; [nodeView reloadFromNode: node]; } } else if ([nodeView isShowingPath: path]) { [nodeView watchedPathChanged: info]; } } else { [nodeView watchedPathChanged: info]; } } } - (NSMutableArray *)history { return history; } - (int)historyPosition { return historyPosition; } - (void)setHistoryPosition:(int)pos { historyPosition = pos; } - (NSArray *)watchedNodes { return watchedNodes; } - (void)hideDotsFileChanged:(BOOL)hide { [self reloadFromNode: baseNode]; [shelf checkIconsAfterDotsFilesChange]; } - (void)hiddenFilesChanged:(NSArray *)paths { [self reloadFromNode: baseNode]; [shelf checkIconsAfterHidingOfPaths: paths]; } - (void)columnsWidthChanged:(NSNotification *)notification { NSRect r = [vwrwin frame]; NSRange range; RETAIN (nodeView); [nodeView removeFromSuperviewWithoutNeedingDisplay]; [nviewScroll setDocumentView: nil]; RETAIN (pathsView); [pathsView removeFromSuperviewWithoutNeedingDisplay]; [pathsScroll setDocumentView: nil]; resizeIncrement = [(NSNumber *)[notification object] intValue]; r.size.width = (visibleCols * resizeIncrement); [vwrwin setFrame: r display: YES]; [vwrwin setMinSize: NSMakeSize(resizeIncrement * 2, MIN_WIN_H)]; [vwrwin setResizeIncrements: NSMakeSize(resizeIncrement, 1)]; [pathsScroll setDocumentView: pathsView]; RELEASE (pathsView); range = NSMakeRange([pathsView firstVisibleIcon], [pathsView lastVisibleIcon]); [pathsView setSelectableIconsRange: range]; [nviewScroll setDocumentView: nodeView]; RELEASE (nodeView); [nodeView resizeWithOldSuperviewSize: [nodeView bounds].size]; [self windowDidResize: nil]; } - (void)updateDefaults { if ([baseNode isValid]) { NSMutableDictionary *updatedprefs = [nodeView updateNodeInfo: NO]; id defEntry; NSString *viewTypeStr; if (viewType == GWViewTypeIcon) viewTypeStr = @"Icon"; else if (viewType == GWViewTypeList) viewTypeStr = @"List"; else viewTypeStr = @"Browser"; if (updatedprefs == nil) { updatedprefs = [NSMutableDictionary dictionary]; } [updatedprefs setObject: [NSNumber numberWithBool: [nodeView isSingleNode]] forKey: @"singlenode"]; [updatedprefs setObject: viewTypeStr forKey: @"viewtype"]; [updatedprefs setObject: [NSNumber numberWithFloat: shelfHeight] forKey: @"shelfheight"]; [updatedprefs setObject: [shelf contentsInfo] forKey: @"shelfdicts"]; defEntry = [nodeView selectedPaths]; if (defEntry) { if ([defEntry count] == 0) { defEntry = [NSArray arrayWithObject: [[nodeView shownNode] path]]; } [updatedprefs setObject: defEntry forKey: @"lastselection"]; } [updatedprefs setObject: [vwrwin stringWithSavedFrame] forKey: @"geometry"]; [baseNode checkWritable]; if ([baseNode isWritable] && (rootViewer == NO) && ([[fsnodeRep volumes] containsObject: [baseNode path]] == NO)) { NSString *dictPath = [[baseNode path] stringByAppendingPathComponent: @".gwdir"]; [updatedprefs writeToFile: dictPath atomically: YES]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: updatedprefs forKey: defaultsKeyStr]; } ASSIGN (viewerPrefs, [updatedprefs makeImmutableCopyOnFail: NO]); } } // // splitView delegate methods // - (void)splitView:(NSSplitView *)sender resizeSubviewsWithOldSize:(NSSize)oldSize { [self tileViews]; } - (void)splitViewDidResizeSubviews:(NSNotification *)aNotification { [self tileViews]; } - (CGFloat)splitView:(NSSplitView *)sender constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)offset { if (proposedPosition < COLLAPSE_LIMIT) { shelfHeight = MIN_SHELF_HEIGHT; } else if (proposedPosition <= MID_LIMIT) { shelfHeight = MID_SHELF_HEIGHT; } else { shelfHeight = MAX_SHELF_HEIGHT; } return shelfHeight; } - (CGFloat)splitView:(NSSplitView *)sender constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)offset { if (proposedMax >= MAX_SHELF_HEIGHT) { return MAX_SHELF_HEIGHT; } return proposedMax; } - (CGFloat)splitView:(NSSplitView *)sender constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)offset { if (proposedMin <= MIN_SHELF_HEIGHT) { return MIN_SHELF_HEIGHT; } return proposedMin; } @end // // GWViewerWindow Delegate Methods // @implementation GWViewer (GWViewerWindowDelegateMethods) - (void)windowDidExpose:(NSNotification *)aNotification { [self updeateInfoLabels]; } - (void)windowDidBecomeKey:(NSNotification *)aNotification { NSArray *selection = [nodeView selectedNodes]; [manager updateDesktop]; if ([selection count] == 0) { selection = [NSArray arrayWithObject: [nodeView shownNode]]; } [self selectionChanged: selection]; [manager changeHistoryOwner: self]; } - (void)windowDidResize:(NSNotification *)aNotification { if (nodeView) { [nodeView stopRepNameEditing]; [pathsView stopRepNameEditing]; if ([nodeView isSingleNode]) { NSRect r = [[vwrwin contentView] bounds]; int cols = myrintf(r.size.width / [vwrwin resizeIncrements].width); if (cols != visibleCols) { [self setSelectableNodesRange: NSMakeRange(0, cols)]; } } } } - (BOOL)windowShouldClose:(id)sender { [manager updateDesktop]; return YES; } - (void)windowWillClose:(NSNotification *)aNotification { if (invalidated == NO) { closing = YES; [self updateDefaults]; [vwrwin setDelegate: nil]; [manager viewerWillClose: self]; } } - (void)windowWillMiniaturize:(NSNotification *)aNotification { NSImage *image = [fsnodeRep iconOfSize: 48 forNode: baseNode]; [vwrwin setMiniwindowImage: image]; [vwrwin setMiniwindowTitle: [baseNode name]]; } - (void)openSelectionInNewViewer:(BOOL)newv { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { NSArray *selection = [nodeView selectedNodes]; NSUInteger count = (selection ? [selection count] : 0); if (count) { NSMutableArray *dirs = [NSMutableArray array]; NSUInteger i; if (count > MAX_FILES_TO_OPEN_DIALOG) { NSString *msg1 = NSLocalizedString(@"Are you sure you want to open", @""); NSString *msg2 = NSLocalizedString(@"items?", @""); if (NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %lu %@", msg1, (unsigned long)count, msg2], NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Yes", @""), nil)) { return; } } for (i = 0; i < count; i++) { FSNode *node = [selection objectAtIndex: i]; NS_DURING { if ([node isDirectory]) { if ([node isPackage]) { if ([node isApplication] == NO) { [gworkspace openFile: [node path]]; } else { [[NSWorkspace sharedWorkspace] launchApplication: [node path]]; } } else { [dirs addObject: node]; } } else if ([node isPlain]) { [gworkspace openFile: [node path]]; } } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } if (([dirs count] == 1) && ([selection count] == 1)) { if (newv == NO) { if ([nodeView isSingleNode]) { [nodeView showContentsOfNode: [dirs objectAtIndex: 0]]; [self scrollToBeginning]; } } else { [manager openAsFolderSelectionInViewer: self]; } } } else if (newv) { [manager openAsFolderSelectionInViewer: self]; } } else { NSRunAlertPanel(nil, NSLocalizedString(@"You can't open a document that is in the Recycler!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)openSelectionAsFolder { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { [manager openAsFolderSelectionInViewer: self]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"You can't do this in the Recycler!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)openSelectionWith { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { [manager openWithSelectionInViewer: self]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"You can't do this in the Recycler!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)newFolder { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { [gworkspace newObjectAtPath: [[nodeView shownNode] path] isDirectory: YES]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"You can't create a new folder in the Recycler!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)newFile { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { [gworkspace newObjectAtPath: [[nodeView shownNode] path] isDirectory: NO]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"You can't create a new file in the Recycler!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)duplicateFiles { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { NSArray *selection = [nodeView selectedNodes]; if (selection && [selection count]) { if ([nodeView isSingleNode]) { [gworkspace duplicateFiles]; } else if ([selection isEqual: baseNodeArray] == NO) { [gworkspace duplicateFiles]; } } } else { NSRunAlertPanel(nil, NSLocalizedString(@"You can't duplicate files in the Recycler!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)recycleFiles { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { NSArray *selection = [nodeView selectedNodes]; if (selection && [selection count]) { if ([nodeView isSingleNode]) { [gworkspace moveToTrash]; } else if ([selection isEqual: baseNodeArray] == NO) { [gworkspace moveToTrash]; } } } } - (void)emptyTrash { [gworkspace emptyRecycler: nil]; } - (void)deleteFiles { NSArray *selection = [nodeView selectedNodes]; if (selection && [selection count]) { if ([nodeView isSingleNode]) { [gworkspace deleteFiles]; } else if ([selection isEqual: baseNodeArray] == NO) { [gworkspace deleteFiles]; } } } - (void)goBackwardInHistory { [manager goBackwardInHistoryOfViewer: self]; } - (void)goForwardInHistory { [manager goForwardInHistoryOfViewer: self]; } - (void)setViewerType:(id)sender { NSInteger tag = [sender tag]; if (tag > 0) { NSArray *selection = [nodeView selectedNodes]; NSUInteger i; [nodeView updateNodeInfo: YES]; if ([nodeView isSingleNode] && ([selection count] == 0)) selection = [NSArray arrayWithObject: [nodeView shownNode]]; RETAIN (selection); [nviewScroll setDocumentView: nil]; if (tag == GWViewTypeBrowser) { [pathsScroll setDelegate: nil]; [pathsView setOwnsScroller: NO]; [nviewScroll setHasVerticalScroller: NO]; [nviewScroll setHasHorizontalScroller: NO]; nodeView = [[GWViewerBrowser alloc] initWithBaseNode: baseNode inViewer: self visibleColumns: visibleCols scroller: [pathsScroll horizontalScroller] cellsIcons: NO editableCells: NO selectionColumn: YES]; viewType = GWViewTypeBrowser; } else if (tag == GWViewTypeIcon) { NSScroller *scroller = RETAIN ([pathsScroll horizontalScroller]); [pathsScroll setHasHorizontalScroller: NO]; [pathsScroll setHorizontalScroller: scroller]; [pathsScroll setHasHorizontalScroller: YES]; RELEASE (scroller); [pathsView setOwnsScroller: YES]; [pathsScroll setDelegate: pathsView]; [nviewScroll setHasVerticalScroller: YES]; [nviewScroll setHasHorizontalScroller: YES]; nodeView = [[GWViewerIconsView alloc] initForViewer: self]; viewType = GWViewTypeIcon; } else if (tag == GWViewTypeList) { NSRect r = [[nviewScroll contentView] bounds]; NSScroller *scroller = RETAIN ([pathsScroll horizontalScroller]); [pathsScroll setHasHorizontalScroller: NO]; [pathsScroll setHorizontalScroller: scroller]; [pathsScroll setHasHorizontalScroller: YES]; RELEASE (scroller); [pathsView setOwnsScroller: YES]; [pathsScroll setDelegate: pathsView]; [nviewScroll setHasVerticalScroller: YES]; [nviewScroll setHasHorizontalScroller: YES]; nodeView = [[GWViewerListView alloc] initWithFrame: r forViewer: self]; viewType = GWViewTypeList; } [nviewScroll setDocumentView: nodeView]; RELEASE (nodeView); [nodeView showContentsOfNode: baseNode]; if ([selection count]) { if ([nodeView isSingleNode]) { FSNode *basend = [selection objectAtIndex: 0]; if ([basend isEqual: baseNode] == NO) { if (([selection count] > 1) || (([basend isDirectory] == NO) || ([basend isPackage]))) { basend = [FSNode nodeWithPath: [basend parentPath]]; } } [nodeView showContentsOfNode: basend]; [nodeView selectRepsOfSubnodes: selection]; } else { [nodeView selectRepsOfSubnodes: selection]; } } DESTROY (selection); [self scrollToBeginning]; [vwrwin makeFirstResponder: nodeView]; for (i = 0; i < [watchedNodes count]; i++) { [gworkspace removeWatcherForPath: [[watchedNodes objectAtIndex: i] path]]; } [watchedNodes removeAllObjects]; DESTROY (lastSelection); selection = [nodeView selectedNodes]; if ([selection count] == 0) { selection = [NSArray arrayWithObject: [nodeView shownNode]]; } [self selectionChanged: selection]; [self updateDefaults]; } } - (void)setShownType:(id)sender { NSString *title = [sender title]; FSNInfoType type = FSNInfoNameType; if ([title isEqual: NSLocalizedString(@"Name", @"")]) { type = FSNInfoNameType; } else if ([title isEqual: NSLocalizedString(@"Type", @"")]) { type = FSNInfoKindType; } else if ([title isEqual: NSLocalizedString(@"Size", @"")]) { type = FSNInfoSizeType; } else if ([title isEqual: NSLocalizedString(@"Modification date", @"")]) { type = FSNInfoDateType; } else if ([title isEqual: NSLocalizedString(@"Owner", @"")]) { type = FSNInfoOwnerType; } else { type = FSNInfoNameType; } [(id )nodeView setShowType: type]; [self scrollToBeginning]; [nodeView updateNodeInfo: YES]; } - (void)setExtendedShownType:(id)sender { [(id )nodeView setExtendedShowType: [sender title]]; [self scrollToBeginning]; [nodeView updateNodeInfo: YES]; } - (void)setIconsSize:(id)sender { if ([nodeView respondsToSelector: @selector(setIconSize:)]) { [(id )nodeView setIconSize: [[sender title] intValue]]; [self scrollToBeginning]; [nodeView updateNodeInfo: YES]; } } - (void)setIconsPosition:(id)sender { if ([nodeView respondsToSelector: @selector(setIconPosition:)]) { NSString *title = [sender title]; if ([title isEqual: NSLocalizedString(@"Left", @"")]) { [(id )nodeView setIconPosition: NSImageLeft]; } else { [(id )nodeView setIconPosition: NSImageAbove]; } [self scrollToBeginning]; [nodeView updateNodeInfo: YES]; } } - (void)setLabelSize:(id)sender { if ([nodeView respondsToSelector: @selector(setLabelTextSize:)]) { [nodeView setLabelTextSize: [[sender title] intValue]]; [self scrollToBeginning]; [nodeView updateNodeInfo: YES]; } } - (void)chooseLabelColor:(id)sender { if ([nodeView respondsToSelector: @selector(setTextColor:)]) { } } - (void)chooseBackColor:(id)sender { if ([nodeView respondsToSelector: @selector(setBackgroundColor:)]) { } } - (void)selectAllInViewer { [nodeView selectAll]; } - (void)showTerminal { NSString *path; if ([nodeView isSingleNode]) { path = [[nodeView shownNode] path]; } else { NSArray *selection = [nodeView selectedNodes]; if (selection) { FSNode *node = [selection objectAtIndex: 0]; if ([selection count] > 1) { path = [node parentPath]; } else { if ([node isDirectory] && ([node isPackage] == NO)) { path = [node path]; } else { path = [node parentPath]; } } } else { path = [[nodeView shownNode] path]; } } [gworkspace startXTermOnDirectory: path]; } - (BOOL)validateItem:(id)menuItem { if ([NSApp keyWindow] == vwrwin) { SEL action = [menuItem action]; NSString *itemTitle = [menuItem title]; NSString *menuTitle = [[menuItem menu] title]; if ([menuTitle isEqual: NSLocalizedString(@"Icon Size", @"")]) { return [nodeView respondsToSelector: @selector(setIconSize:)]; } else if ([menuTitle isEqual: NSLocalizedString(@"Icon Position", @"")]) { return [nodeView respondsToSelector: @selector(setIconPosition:)]; } else if ([menuTitle isEqual: NSLocalizedString(@"Label Size", @"")]) { return [nodeView respondsToSelector: @selector(setLabelTextSize:)]; } else if ([itemTitle isEqual: NSLocalizedString(@"Label Color...", @"")]) { return [nodeView respondsToSelector: @selector(setTextColor:)]; } else if ([itemTitle isEqual: NSLocalizedString(@"Background Color...", @"")]) { return [nodeView respondsToSelector: @selector(setBackgroundColor:)]; } else if (sel_isEqual(action, @selector(duplicateFiles:)) || sel_isEqual(action, @selector(recycleFiles:)) || sel_isEqual(action, @selector(deleteFiles:))) { if (lastSelection && [lastSelection count] && ([lastSelection isEqual: baseNodeArray] == NO)) { return ([[baseNode path] isEqual: [gworkspace trashPath]] == NO); } return NO; } else if (sel_isEqual(action, @selector(makeThumbnails:)) || sel_isEqual(action, @selector(removeThumbnails:))) { /* Make or Remove Thumbnails */ return YES; } else if (sel_isEqual(action, @selector(openSelection:))) { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { BOOL canopen = YES; NSUInteger i; if (lastSelection && [lastSelection count] && ([lastSelection isEqual: baseNodeArray] == NO)) { for (i = 0; i < [lastSelection count]; i++) { FSNode *node = [lastSelection objectAtIndex: i]; if ([node isDirectory] && ([node isPackage] == NO)) { canopen = NO; break; } } } else { canopen = NO; } return canopen; } return NO; } else if (sel_isEqual(action, @selector(openSelectionAsFolder:))) { if (lastSelection && ([lastSelection count] == 1)) { return [[lastSelection objectAtIndex: 0] isDirectory]; } return NO; } else if (sel_isEqual(action, @selector(openWith:))) { BOOL canopen = YES; int i; if (lastSelection && [lastSelection count] && ([lastSelection isEqual: baseNodeArray] == NO)) { for (i = 0; i < [lastSelection count]; i++) { FSNode *node = [lastSelection objectAtIndex: i]; if (([node isPlain] == NO) && (([node isPackage] == NO) || [node isApplication])) { canopen = NO; break; } } } else { canopen = NO; } return canopen; } else if (sel_isEqual(action, @selector(newFolder:)) || sel_isEqual(action, @selector(newFile:))) { if ([[baseNode path] isEqual: [gworkspace trashPath]] == NO) { return [[nodeView shownNode] isWritable]; } return NO; } return YES; } else { SEL action = [menuItem action]; if (sel_isEqual(action, @selector(makeKeyAndOrderFront:))) { return YES; } } return NO; } - (void)makeThumbnails:(id)sender { NSString *path; path = [[nodeView shownNode] path]; path = [path stringByResolvingSymlinksInPath]; if (path) { Thumbnailer *t; t = [Thumbnailer sharedThumbnailer]; [t makeThumbnails:path]; [t release]; } } - (void)removeThumbnails:(id)sender { NSString *path; path = [[nodeView shownNode] path]; path = [path stringByResolvingSymlinksInPath]; if (path) { Thumbnailer *t; t = [Thumbnailer sharedThumbnailer]; [t removeThumbnails:path]; [t release]; } } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerBrowser.h0000644000175000001440000000241114751213523022442 0ustar multixusers/* GWViewerBrowser.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNBrowser.h" @interface GWViewerBrowser : FSNBrowser { } - (id)initWithBaseNode:(FSNode *)bsnode inViewer:(id)vwr visibleColumns:(int)vcols scroller:(NSScroller *)scrl cellsIcons:(BOOL)cicns editableCells:(BOOL)edcells selectionColumn:(BOOL)selcol; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerBrowser.m0000644000175000001440000000417714751213523022462 0ustar multixusers/* GWViewerBrowser.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWViewerBrowser.h" #import "FSNBrowserColumn.h" #import "FSNBrowserMatrix.h" #import "FSNBrowserCell.h" #import "GWViewersManager.h" @implementation GWViewerBrowser - (id)initWithBaseNode:(FSNode *)bsnode inViewer:(id)vwr visibleColumns:(int)vcols scroller:(NSScroller *)scrl cellsIcons:(BOOL)cicns editableCells:(BOOL)edcells selectionColumn:(BOOL)selcol { self = [super initWithBaseNode: bsnode visibleColumns: vcols scroller: scrl cellsIcons: cicns editableCells: edcells selectionColumn: selcol]; if (self) { viewer = vwr; manager = [GWViewersManager viewersManager]; } return self; } - (void)notifySelectionChange:(NSArray *)newsel { if (newsel) { if ((lastSelection == nil) || ([newsel isEqual: lastSelection] == NO)) { if ([newsel count] == 0) { newsel = [NSArray arrayWithObject: baseNode]; } ASSIGN (lastSelection, newsel); [viewer selectionChanged: newsel]; [self synchronizeViewer]; } } } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerIconsPath.h0000644000175000001440000000676614751213523022730 0ustar multixusers/* GWViewerIconsPath.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FSNodeRep.h" @class GWViewerPathsScroll; @class FSNIcon; @class FSNIconNameEditor; @interface GWViewerIconsPath : NSView { NSMutableArray *icons; FSNIconNameEditor *nameEditor; FSNIcon *editIcon; int iconSize; int labelTextSize; NSFont *labelFont; int iconPosition; FSNInfoType infoType; NSString *extInfoType; int visibleIcons; int firstVisibleIcon; int lastVisibleIcon; int shift; NSSize gridSize; BOOL ownScroller; NSColor *backColor; NSColor *textColor; NSColor *disabledTextColor; FSNodeRep *fsnodeRep; id viewer; } - (id)initWithFrame:(NSRect)frameRect visibleIcons:(int)vicns forViewer:(id)vwr ownsScroller:(BOOL)ownscr; - (void)setOwnsScroller:(BOOL)ownscr; - (void)showPathComponents:(NSArray *)components selection:(NSArray *)selection; - (void)setSelectableIconsRange:(NSRange)range; - (int)firstVisibleIcon; - (int)lastVisibleIcon; - (id)lastIcon; - (void)updateLastIcon; - (void)calculateGridSize; - (void)tile; - (void)gwviewerPathsScroll:(GWViewerPathsScroll *)sender scrollViewScrolled:(NSClipView *)clip hitPart:(NSScrollerPart)hitpart; @end @interface GWViewerIconsPath (NodeRepContainer) - (FSNode *)baseNode; - (id)repOfSubnode:(FSNode *)anode; - (id)repOfSubnodePath:(NSString *)apath; - (id)addRepForSubnode:(FSNode *)anode; - (id)addRepForSubnodePath:(NSString *)apath; - (void)removeRep:(id)arep; - (void)repSelected:(id)arep; - (void)unselectOtherReps:(id)arep; - (NSArray *)selectedNodes; - (NSArray *)selectedPaths; - (void)checkLockedReps; - (FSNSelectionMask)selectionMask; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)restoreLastSelection; - (NSColor *)backgroundColor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; - (NSDragOperation)draggingUpdated:(id )sender; @end @interface GWViewerIconsPath (IconNameEditing) - (void)updateNameEditor; - (void)setNameEditorForRep:(id)arep; - (void)stopRepNameEditing; - (BOOL)canStartRepNameEditing; - (void)controlTextDidChange:(NSNotification *)aNotification; - (void)controlTextDidEndEditing:(NSNotification *)aNotification; @end @interface GWViewerPathsScroll : NSScrollView { id delegate; } - (void)setDelegate:(id)anObject; - (id)delegate; @end @interface NSObject(GWViewerPathsScrollDelegateMethods) - (void)gwviewerPathsScroll:(GWViewerPathsScroll *)sender scrollViewScrolled:(NSClipView *)clip hitPart:(NSScrollerPart)hitpart; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerIconsPath.m0000644000175000001440000005323514751213523022726 0ustar multixusers/* GWViewerIconsPath.m * * Copyright (C) 2004-2022 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include #import #import "FSNIcon.h" #import "FSNFunctions.h" #import "GWViewerIconsPath.h" #import "GWViewer.h" #import "GWorkspace.h" #define DEF_ICN_SIZE 48 #define DEF_TEXT_SIZE 12 #define DEF_ICN_POS NSImageAbove #define X_MARGIN (10) #define Y_MARGIN (12) #define EDIT_MARGIN (4) @implementation GWViewerIconsPath - (void)dealloc { RELEASE (icons); RELEASE (extInfoType); RELEASE (labelFont); RELEASE (backColor); RELEASE (textColor); RELEASE (disabledTextColor); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect visibleIcons:(int)vicns forViewer:(id)vwr ownsScroller:(BOOL)ownscr { self = [super initWithFrame: frameRect]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id defentry; fsnodeRep = [FSNodeRep sharedInstance]; visibleIcons = vicns; viewer = vwr; ownScroller = ownscr; firstVisibleIcon = 0; lastVisibleIcon = visibleIcons - 1; shift = 0; defentry = [defaults dictionaryForKey: @"backcolor"]; if (defentry) { float red = [[(NSDictionary *)defentry objectForKey: @"red"] floatValue]; float green = [[(NSDictionary *)defentry objectForKey: @"green"] floatValue]; float blue = [[(NSDictionary *)defentry objectForKey: @"blue"] floatValue]; float alpha = [[(NSDictionary *)defentry objectForKey: @"alpha"] floatValue]; ASSIGN (backColor, [NSColor colorWithCalibratedRed: red green: green blue: blue alpha: alpha]); } else { ASSIGN (backColor, [[NSColor windowBackgroundColor] colorUsingColorSpaceName: NSDeviceRGBColorSpace]); } defentry = [defaults dictionaryForKey: @"textcolor"]; if (defentry) { float red = [[(NSDictionary *)defentry objectForKey: @"red"] floatValue]; float green = [[(NSDictionary *)defentry objectForKey: @"green"] floatValue]; float blue = [[(NSDictionary *)defentry objectForKey: @"blue"] floatValue]; float alpha = [[(NSDictionary *)defentry objectForKey: @"alpha"] floatValue]; ASSIGN (textColor, [NSColor colorWithCalibratedRed: red green: green blue: blue alpha: alpha]); } else { ASSIGN (textColor, [[NSColor controlTextColor] colorUsingColorSpaceName: NSDeviceRGBColorSpace]); } ASSIGN (disabledTextColor, [textColor highlightWithLevel: NSDarkGray]); iconSize = DEF_ICN_SIZE; defentry = [defaults objectForKey: @"labeltxtsize"]; labelTextSize = defentry ? [defentry intValue] : DEF_TEXT_SIZE; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); iconPosition = DEF_ICN_POS; defentry = [defaults objectForKey: @"fsn_info_type"]; infoType = defentry ? [defentry intValue] : FSNInfoNameType; extInfoType = nil; if (infoType == FSNInfoExtendedType) { defentry = [defaults objectForKey: @"extended_info_type"]; if (defentry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: defentry]) { ASSIGN (extInfoType, defentry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } icons = [NSMutableArray new]; nameEditor = [FSNIconNameEditor new]; [nameEditor setDelegate: self]; [nameEditor setFont: labelFont]; [nameEditor setBezeled: NO]; [nameEditor setAlignment: NSCenterTextAlignment]; [nameEditor setBackgroundColor: backColor]; [nameEditor setTextColor: textColor]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; editIcon = nil; [self calculateGridSize]; } return self; } - (void)setOwnsScroller:(BOOL)ownscr { ownScroller = ownscr; [self setFrame: [[self superview] bounds]]; [self tile]; } - (void)showPathComponents:(NSArray *)components selection:(NSArray *)selection { FSNode *node = [selection objectAtIndex: 0]; int count = [components count]; FSNIcon *icon; int icncount; int i; [self stopRepNameEditing]; while ([icons count] > count) { icon = [self lastIcon]; if (icon) { [self removeRep: icon]; } } icncount = [icons count]; for (i = 0; i < [components count]; i++) { FSNode *component = [components objectAtIndex: i]; if (i < icncount) { icon = [icons objectAtIndex: i]; [icon setNode: component]; } else { icon = [self addRepForSubnode: component]; } [icon setLeaf: NO]; [icon setNameEdited: NO]; [icon setGridIndex: i]; } if ([node isEqual: [components objectAtIndex: (count -1)]] == NO) { icon = [self addRepForSubnode: node]; if ([selection count] > 1) { NSMutableArray *selnodes = [NSMutableArray array]; for (i = 0; i < [selection count]; i++) { FSNode *selnode = [selection objectAtIndex: i]; [selnodes addObject: selnode]; } [icon showSelection: selnodes]; } } icon = [self lastIcon]; [icon setLeaf: YES]; [icon select]; editIcon = nil; [self tile]; } - (void)setSelectableIconsRange:(NSRange)range { int cols = range.length; if (cols != visibleIcons) { [self setFrame: [[self superview] bounds]]; visibleIcons = cols; } firstVisibleIcon = range.location; lastVisibleIcon = firstVisibleIcon + visibleIcons - 1; shift = 0; if (([icons count] - 1) < lastVisibleIcon) { shift = lastVisibleIcon - [icons count] + 1; } [self tile]; } - (int)firstVisibleIcon { return firstVisibleIcon; } - (int)lastVisibleIcon { return lastVisibleIcon; } - (id)lastIcon { int count = [icons count]; return (count ? [icons objectAtIndex: (count - 1)] : nil); } - (void)updateLastIcon { FSNIcon *icon = [self lastIcon]; if (icon) { NSArray *selection = [icon selection]; if (selection) { [icon showSelection: selection]; } else { [icon setNode: [icon node]]; } } } - (void)calculateGridSize { NSSize highlightSize = NSZeroSize; NSSize labelSize = NSZeroSize; highlightSize.width = ceil(iconSize / 3 * 4); highlightSize.height = ceil(highlightSize.width * [fsnodeRep highlightHeightFactor]); if ((highlightSize.height - iconSize) < 4) { highlightSize.height = iconSize + 4; } labelSize.height = myrintf([fsnodeRep heightOfFont: labelFont]); gridSize.height = highlightSize.height + labelSize.height; } - (void)tile { NSClipView *clip = (NSClipView *)[self superview]; float vwidth = [clip visibleRect].size.width; int count = [icons count]; int i; if (ownScroller) { NSRect fr = [self frame]; float x = [clip bounds].origin.x; float y = [clip bounds].origin.y; float posx = 0.0; gridSize.width = myrintf(vwidth / visibleIcons); [(NSScrollView *)[clip superview] setLineScroll: gridSize.width]; for (i = 0; i < count; i++) { NSRect r = NSZeroRect; r.size = gridSize; r.origin.y = 0; r.origin.x = posx; [[icons objectAtIndex: i] setFrame: r]; posx += gridSize.width; } if (posx != fr.size.width) { [self setFrame: NSMakeRect(0, fr.origin.y, posx, fr.size.height)]; } if (count > visibleIcons) { x += gridSize.width * count; [clip scrollToPoint: NSMakePoint(x, y)]; } } else { vwidth -= visibleIcons; gridSize.width = myrintf(vwidth / visibleIcons); for (i = 0; i < count; i++) { int n = i - firstVisibleIcon; NSRect r = NSZeroRect; r.size = gridSize; r.origin.y = 0; if (i < firstVisibleIcon) { r.origin.x = (n * gridSize.width) - 8; } else { if (i == firstVisibleIcon) { r.origin.x = (n * gridSize.width); } else if (i <= lastVisibleIcon) { r.origin.x = (n * gridSize.width) + n; } else { r.origin.x = (n * gridSize.width) + n + 8; } } if (i == lastVisibleIcon) { r.size.width = [[self superview] visibleRect].size.width - r.origin.x; } [[icons objectAtIndex: i] setFrame: r]; } } [self updateNameEditor]; [self setNeedsDisplay: YES]; } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { [self tile]; } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { NSPoint location = [theEvent locationInWindow]; NSPoint selfloc = [self convertPoint: location fromView: nil]; if (editIcon && [self mouse: selfloc inRect: [editIcon frame]]) { NSArray *selnodes; NSMenu *menu; NSMenuItem *menuItem; NSString *firstext; NSDictionary *apps; NSEnumerator *app_enum; id key; int i; if ([theEvent modifierFlags] == NSControlKeyMask) { return [super menuForEvent: theEvent]; } selnodes = [self selectedNodes]; if ([selnodes count]) { NSAutoreleasePool *pool; firstext = [[[selnodes objectAtIndex: 0] path] pathExtension]; for (i = 0; i < [selnodes count]; i++) { FSNode *snode = [selnodes objectAtIndex: i]; NSString *selpath = [snode path]; NSString *ext = [selpath pathExtension]; if ([ext isEqual: firstext] == NO) { return [super menuForEvent: theEvent]; } if ([snode isDirectory] == NO) { if ([snode isPlain] == NO) { return [super menuForEvent: theEvent]; } } else { if (([snode isPackage] == NO) || [snode isApplication]) { return [super menuForEvent: theEvent]; } } } menu = [[NSMenu alloc] initWithTitle: NSLocalizedString(@"Open with", @"")]; apps = [[NSWorkspace sharedWorkspace] infoForExtension: firstext]; app_enum = [[apps allKeys] objectEnumerator]; pool = [NSAutoreleasePool new]; while ((key = [app_enum nextObject])) { menuItem = [NSMenuItem new]; key = [key stringByDeletingPathExtension]; [menuItem setTitle: key]; [menuItem setTarget: [GWorkspace gworkspace]]; [menuItem setAction: @selector(openSelectionWithApp:)]; [menuItem setRepresentedObject: key]; [menu addItem: menuItem]; RELEASE (menuItem); } RELEASE (pool); return [menu autorelease]; } } return [super menuForEvent: theEvent]; } // // scrollview delegate // - (void)gwviewerPathsScroll:(GWViewerPathsScroll *)sender scrollViewScrolled:(NSClipView *)clip hitPart:(NSScrollerPart)hitpart { if (hitpart != NSScrollerNoPart) { int x = (int)[clip bounds].origin.x; int y = (int)[clip bounds].origin.y; int rem = x % (int)(myrintf(gridSize.width)); [self stopRepNameEditing]; if (rem != 0) { if (rem <= gridSize.width / 2) { x -= rem; } else { x += myrintf(gridSize.width) - rem; } [clip scrollToPoint: NSMakePoint(x, y)]; [self setNeedsDisplay: YES]; } editIcon = [self lastIcon]; if (editIcon && NSContainsRect([editIcon visibleRect], [editIcon iconBounds])) { [self updateNameEditor]; } } } @end @implementation GWViewerIconsPath (NodeRepContainer) - (FSNode *)baseNode { return [viewer baseNode]; } - (id)repOfSubnode:(FSNode *)anode { int i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([[icon node] isEqualToNode: anode]) { return icon; } } return nil; } - (id)repOfSubnodePath:(NSString *)apath { int i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([[[icon node] path] isEqual: apath]) { return icon; } } return nil; } - (id)addRepForSubnode:(FSNode *)anode { FSNIcon *icon = [[FSNIcon alloc] initForNode: anode nodeInfoType: infoType extendedType: extInfoType iconSize: iconSize iconPosition: iconPosition labelFont: labelFont textColor: textColor gridIndex: -1 dndSource: YES acceptDnd: YES slideBack: YES]; [icons addObject: icon]; [self addSubview: icon]; RELEASE (icon); return icon; } - (id)addRepForSubnodePath:(NSString *)apath { FSNode *subnode = [FSNode nodeWithPath: apath]; return [self addRepForSubnode: subnode]; } - (void)removeRep:(id)arep { if (arep == editIcon) { editIcon = nil; } [arep removeFromSuperviewWithoutNeedingDisplay]; [icons removeObject: arep]; } - (void)repSelected:(id)arep { if (([arep isShowingSelection] == NO) && ((arep == [self lastIcon]) == NO)) { [viewer pathsViewDidSelectIcon: arep]; } } - (void)unselectOtherReps:(id)arep { int i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if (icon != arep) { [icon unselect]; } } } - (NSArray *)selectedNodes { NSMutableArray *selectedNodes = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { NSArray *selection = [icon selection]; if (selection) { [selectedNodes addObjectsFromArray: selection]; } else { [selectedNodes addObject: [icon node]]; } } } return [selectedNodes makeImmutableCopyOnFail: NO]; } - (NSArray *)selectedPaths { NSMutableArray *selectedPaths = [NSMutableArray array]; NSUInteger i, j; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { NSArray *selection = [icon selection]; if (selection) { for (j = 0; j < [selection count]; j++) { [selectedPaths addObject: [[selection objectAtIndex: j] path]]; } } else { [selectedPaths addObject: [[icon node] path]]; } } } return [selectedPaths makeImmutableCopyOnFail: NO]; } - (void)checkLockedReps { NSUInteger i; for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] checkLocked]; } } - (FSNSelectionMask)selectionMask { return NSSingleSelectionMask; } - (void)openSelectionInNewViewer:(BOOL)newv { [viewer openSelectionInNewViewer: newv]; } - (void)restoreLastSelection { [[self lastIcon] select]; [nameEditor setBackgroundColor: [NSColor selectedControlColor]]; } - (NSColor *)backgroundColor { return [NSColor windowBackgroundColor]; } - (NSColor *)textColor { return [NSColor controlTextColor]; } - (NSColor *)disabledTextColor { return [NSColor disabledControlTextColor]; } - (NSDragOperation)draggingUpdated:(id )sender { return NSDragOperationNone; } @end @implementation GWViewerIconsPath (IconNameEditing) - (void)updateNameEditor { [self stopRepNameEditing]; editIcon = [self lastIcon]; if (editIcon && NSContainsRect([editIcon visibleRect], [editIcon iconBounds])) { FSNode *ednode = [editIcon node]; NSString *nodeDescr = [editIcon shownInfo]; NSRect icnr = [editIcon frame]; CGFloat centerx = icnr.origin.x + (icnr.size.width / 2); NSRect labr = [editIcon labelRect]; int margin = [fsnodeRep labelMargin]; CGFloat bw = [self bounds].size.width - EDIT_MARGIN; CGFloat edwidth = 0.0; NSRect edrect; [editIcon setNameEdited: YES]; edwidth = [[nameEditor font] widthOfString: nodeDescr]; edwidth += margin; if ((centerx + (edwidth / 2)) >= bw) { centerx -= (centerx + (edwidth / 2) - bw); } else if ((centerx - (edwidth / 2)) < margin) { centerx += fabs(centerx - (edwidth / 2)) + margin; } edrect = [self convertRect: labr fromView: editIcon]; edrect.origin.x = centerx - (edwidth / 2); edrect.size.width = edwidth; edrect = NSIntegralRect(edrect); [nameEditor setFrame: edrect]; [nameEditor setAlignment: NSCenterTextAlignment]; [nameEditor setNode: ednode stringValue: nodeDescr]; [nameEditor setBackgroundColor: [NSColor selectedControlColor]]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [self addSubview: nameEditor]; } } - (void)setNameEditorForRep:(id)arep { [self updateNameEditor]; } - (void)stopRepNameEditing { int i; if ([[self subviews] containsObject: nameEditor]) { NSRect edrect = [nameEditor frame]; [nameEditor abortEditing]; [nameEditor setEditable: NO]; [nameEditor setSelectable: NO]; [nameEditor setNode: nil stringValue: @""]; [nameEditor removeFromSuperview]; [self setNeedsDisplayInRect: edrect]; } for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] setNameEdited: NO]; } editIcon = nil; } - (BOOL)canStartRepNameEditing { return (editIcon && ([editIcon isLocked] == NO) && ([editIcon isShowingSelection] == NO) && ([[editIcon node] isMountPoint] == NO) && (infoType == FSNInfoNameType)); } - (void)controlTextDidChange:(NSNotification *)aNotification { NSRect icnr = [editIcon frame]; float centerx = icnr.origin.x + (icnr.size.width / 2); float edwidth = [[nameEditor font] widthOfString: [nameEditor stringValue]]; int margin = [fsnodeRep labelMargin]; float bw = [self bounds].size.width - EDIT_MARGIN; NSRect edrect = [nameEditor frame]; edwidth += margin; while ((centerx + (edwidth / 2)) > bw) { centerx --; if (centerx < EDIT_MARGIN) { break; } } while ((centerx - (edwidth / 2)) < EDIT_MARGIN) { centerx ++; if (centerx >= bw) { break; } } edrect.origin.x = centerx - (edwidth / 2); edrect.size.width = edwidth; [self setNeedsDisplayInRect: [nameEditor frame]]; [nameEditor setFrame: NSIntegralRect(edrect)]; } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { FSNode *ednode = [nameEditor node]; if ([ednode isParentWritable] == NO) { showAlertNoPermission([FSNode class], [ednode parentName]); [self updateNameEditor]; return; } if ([ednode isSubnodeOfPath: [[GWorkspace gworkspace] trashPath]]) { showAlertInRecycler([FSNode class]); [self updateNameEditor]; return; } else { NSString *newname = [nameEditor stringValue]; NSString *newpath = [[ednode parentPath] stringByAppendingPathComponent: newname]; NSString *extension = [newpath pathExtension]; NSCharacterSet *notAllowSet = [NSCharacterSet characterSetWithCharactersInString: @"/\\*:?\33"]; NSRange range = [newname rangeOfCharacterFromSet: notAllowSet]; NSArray *dirContents = [ednode subNodeNamesOfParent]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; if (([newname length] == 0) || (range.length > 0)) { showAlertInvalidName([FSNode class]); [self updateNameEditor]; return; } if (([extension length] && ([ednode isDirectory] && ([ednode isPackage] == NO)))) { if (showAlertExtensionChange([FSNode class], extension) == NSAlertDefaultReturn) { [self updateNameEditor]; return; } } if ([dirContents containsObject: newname]) { if ([newname isEqual: [ednode name]]) { [self updateNameEditor]; return; } else { showAlertNameInUse([FSNode class], newname); [self updateNameEditor]; return; } } [opinfo setObject: @"GWorkspaceRenameOperation" forKey: @"operation"]; [opinfo setObject: [ednode path] forKey: @"source"]; [opinfo setObject: newpath forKey: @"destination"]; [opinfo setObject: [NSArray arrayWithObject: @""] forKey: @"files"]; [self stopRepNameEditing]; [[GWorkspace gworkspace] performFileOperation: opinfo]; } } @end @implementation GWViewerPathsScroll - (void)setDelegate:(id)anObject { delegate = anObject; } - (id)delegate { return delegate; } - (void)reflectScrolledClipView:(NSClipView *)aClipView { [super reflectScrolledClipView: aClipView]; if (delegate) { NSScroller *scroller = [self horizontalScroller]; NSScrollerPart hitPart = [scroller hitPart]; [delegate gwviewerPathsScroll: self scrollViewScrolled: aClipView hitPart: hitPart]; } } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerIconsView.h0000644000175000001440000000214514751213523022731 0ustar multixusers/* GWViewerIconsView.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNIconsView.h" @class GWViewersManager; @interface GWViewerIconsView : FSNIconsView { id viewer; id manager; } - (id)initForViewer:(id)vwr; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerIconsView.m0000644000175000001440000000436714751213523022746 0ustar multixusers/* GWViewerIconsView.m * * Copyright (C) 2004-2022 Free Software Foundation, Inc. * * Authora: Enrico Sersale * Riccardo Mottola * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWViewerIconsView.h" #import "FSNIcon.h" #import "GWViewer.h" #import "GWViewersManager.h" @implementation GWViewerIconsView - (void)dealloc { [super dealloc]; } - (id)initForViewer:(id)vwr { self = [super init]; if (self) { viewer = vwr; manager = [GWViewersManager viewersManager]; } return self; } - (void)selectionDidChange { if (!(selectionMask & FSNCreatingSelectionMask)) { NSArray *selection = [self selectedNodes]; if ([selection count] == 0) selection = [NSArray arrayWithObject: node]; if ((lastSelection == nil) || ([selection isEqual: lastSelection] == NO)) { ASSIGN (lastSelection, selection); [viewer selectionChanged: selection]; } [self updateNameEditor]; } } - (void)openSelectionInNewViewer:(BOOL)newv { [viewer openSelectionInNewViewer: newv]; } - (void)mouseDown:(NSEvent *)theEvent { if ([theEvent modifierFlags] != NSShiftKeyMask) { selectionMask = NSSingleSelectionMask; selectionMask |= FSNCreatingSelectionMask; [self unselectOtherReps: nil]; selectionMask = NSSingleSelectionMask; DESTROY (lastSelection); [self selectionDidChange]; [self stopRepNameEditing]; } } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerListView.h0000644000175000001440000000240714751213523022572 0ustar multixusers/* GWViewerListView.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNListView.h" @class GWViewersManager; @interface GWViewerListViewDataSource : FSNListViewDataSource { id viewer; id manager; } - (void)setViewer:(id)vwr; @end @interface GWViewerListView : FSNListView { id viewer; id manager; } - (id)initWithFrame:(NSRect)rect forViewer:(id)vwr; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerListView.m0000644000175000001440000001111414751213523022572 0ustar multixusers/* GWViewerListView.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWViewerListView.h" #import "GWViewer.h" #import "GWViewersManager.h" #import "GWorkspace.h" @implementation GWViewerListViewDataSource - (id)initForListView:(FSNListView *)aview { self = [super initForListView: aview]; if (self) { manager = [GWViewersManager viewersManager]; } return self; } - (void)setViewer:(id)vwr { viewer = vwr; } - (FSNode *)infoNode { if (viewer) { return [viewer baseNode]; } return node; } - (BOOL)keepsColumnsInfo { return (viewer != nil); } - (void)selectionDidChange { NSArray *selection = [self selectedNodes]; if ([selection count] == 0) selection = [NSArray arrayWithObject: node]; if ((lastSelection == nil) || ([selection isEqual: lastSelection] == NO)) { ASSIGN (lastSelection, selection); [viewer selectionChanged: selection]; } } - (void)openSelectionInNewViewer:(BOOL)newv { BOOL closesndr = ((mouseFlags == NSAlternateKeyMask) || (mouseFlags == NSControlKeyMask)); [viewer openSelectionInNewViewer: (closesndr || newv)]; } @end @implementation GWViewerListView - (id)initWithFrame:(NSRect)rect forViewer:(id)vwr { self = [super initWithFrame: rect dataSourceClass: [GWViewerListViewDataSource class]]; if (self) { viewer = vwr; manager = [GWViewersManager viewersManager]; [dsource setViewer: viewer]; } return self; } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { if ([theEvent type] == NSRightMouseDown) { NSPoint location = [theEvent locationInWindow]; int row = [self rowAtPoint: [self convertPoint: location fromView: nil]]; if (row != -1) { NSArray *selnodes = [self selectedNodes]; NSAutoreleasePool *pool; NSMenu *menu; NSMenuItem *menuItem; NSString *firstext; NSDictionary *apps; NSEnumerator *app_enum; id key; int i; if (selnodes && [selnodes count]) { FSNListViewNodeRep *rep = [[self reps] objectAtIndex: row]; if ([selnodes containsObject: [rep node]] == NO) { return [super menuForEvent: theEvent]; } firstext = [[[selnodes objectAtIndex: 0] path] pathExtension]; for (i = 0; i < [selnodes count]; i++) { FSNode *snode = [selnodes objectAtIndex: i]; NSString *selpath = [snode path]; NSString *ext = [selpath pathExtension]; if ([ext isEqual: firstext] == NO) { return [super menuForEvent: theEvent]; } if ([snode isDirectory] == NO) { if ([snode isPlain] == NO) { return [super menuForEvent: theEvent]; } } else { if (([snode isPackage] == NO) || [snode isApplication]) { return [super menuForEvent: theEvent]; } } } menu = [[NSMenu alloc] initWithTitle: NSLocalizedString(@"Open with", @"")]; apps = [[NSWorkspace sharedWorkspace] infoForExtension: firstext]; app_enum = [[apps allKeys] objectEnumerator]; pool = [NSAutoreleasePool new]; while ((key = [app_enum nextObject])) { menuItem = [NSMenuItem new]; key = [key stringByDeletingPathExtension]; [menuItem setTitle: key]; [menuItem setTarget: [GWorkspace gworkspace]]; [menuItem setAction: @selector(openSelectionWithApp:)]; [menuItem setRepresentedObject: key]; [menu addItem: menuItem]; RELEASE (menuItem); } RELEASE (pool); return [menu autorelease]; } } } return [super menuForEvent: theEvent]; } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerPathsPopUp.h0000644000175000001440000000217714751213523023073 0ustar multixusers/* GWViewerPathsPopUp.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class FSNode; @interface GWViewerPathsPopUp : NSPopUpButton { BOOL closeViewer; } - (void)setItemsToNode:(FSNode *)node; - (void)setItemsEnabled:(BOOL)enabled; - (BOOL)closeViewer; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerPathsPopUp.m0000644000175000001440000000441114751213523023071 0ustar multixusers/* GWViewerPathsPopUp.m * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FSNode.h" #import "GWViewerPathsPopUp.h" @implementation GWViewerPathsPopUp - (void)setItemsToNode:(FSNode *)node { NSMenu *menu = [self menu]; NSArray *components = [FSNode pathComponentsToNode: node]; NSString *progPath = nil; int i; [self removeAllItems]; for (i = 0; i < [components count]; i++) { NSString *path = [components objectAtIndex: i]; NSMenuItem *item = [NSMenuItem new]; if (i == 0) { progPath = path; } else { progPath = [progPath stringByAppendingPathComponent: path]; } [item setTitle: path]; [item setRepresentedObject: progPath]; [menu addItem: item]; RELEASE (item); } [self selectItemAtIndex: ([components count] - 1)]; } - (void)setItemsEnabled:(BOOL)enabled { NSArray *items = [[self menu] itemArray]; int i; for (i = 0; i < [items count]; i++) { [[items objectAtIndex: i] setEnabled: enabled]; } } - (BOOL)closeViewer { return closeViewer; } - (void)mouseDown:(NSEvent *)theEvent { RETAIN (self); closeViewer = (([theEvent modifierFlags] == NSAlternateKeyMask) || ([theEvent modifierFlags] == NSControlKeyMask)); [super mouseDown: theEvent]; if ([self superview]) { [self selectItemAtIndex: ([self numberOfItems] - 1)]; } RELEASE (self); } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerScrollView.h0000644000175000001440000000310014751213523023104 0ustar multixusers/* GWViewerScrollView.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FSNodeRep.h" @interface GWViewerScrollView : NSScrollView { id viewer; id nodeView; } - (id)initWithFrame:(NSRect)frameRect inViewer:(id)aviewer; @end @interface GWViewerScrollView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerScrollView.m0000644000175000001440000000573014751213523023124 0ustar multixusers/* GWViewerScrollView.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: December 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNFunctions.h" #import "GWViewerScrollView.h" #import "GWViewer.h" @implementation GWViewerScrollView - (id)initWithFrame:(NSRect)frameRect inViewer:(id)aviewer { self = [super initWithFrame: frameRect]; if (self) { viewer = aviewer; } return self; } - (void)setDocumentView:(NSView *)aView { [super setDocumentView: aView]; if (aView != nil) { nodeView = [viewer nodeView]; if ([nodeView needsDndProxy]) { [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]]; } else { [self unregisterDraggedTypes]; } } else { nodeView = nil; [self unregisterDraggedTypes]; } } @end @implementation GWViewerScrollView (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { if (nodeView && [nodeView needsDndProxy]) { return [nodeView draggingEntered: sender]; } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { if (nodeView && [nodeView needsDndProxy]) { return [nodeView draggingUpdated: sender]; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { if (nodeView && [nodeView needsDndProxy]) { [nodeView draggingExited: sender]; } } - (BOOL)prepareForDragOperation:(id )sender { if (nodeView && [nodeView needsDndProxy]) { return [nodeView prepareForDragOperation: sender]; } return NO; } - (BOOL)performDragOperation:(id )sender { if (nodeView && [nodeView needsDndProxy]) { return [nodeView performDragOperation: sender]; } return NO; } - (void)concludeDragOperation:(id )sender { if (nodeView && [nodeView needsDndProxy]) { [nodeView concludeDragOperation: sender]; } } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerShelf.h0000644000175000001440000000747114751213523022073 0ustar multixusers/* GWViewerShelf.h * * Copyright (C) 2004-2022 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FSNodeRep.h" @class NSTextField; @class GWorkspace; @interface GWViewerShelf : NSView { NSMutableArray *icons; int iconSize; int labelTextSize; NSFont *labelFont; int iconPosition; FSNInfoType infoType; NSString *extInfoType; NSRect *grid; NSSize gridSize; NSInteger gridCount; NSInteger colCount; NSInteger rowCount; id focusedIcon; NSTextField *focusedIconLabel; NSCountedSet *watchedPaths; NSImage *dragIcon; NSPoint dragPoint; NSInteger insertIndex; BOOL dragLocalIcon; BOOL isDragTarget; NSColor *backColor; NSColor *textColor; NSColor *disabledTextColor; FSNodeRep *fsnodeRep; id viewer; GWorkspace *gworkspace; } - (id)initWithFrame:(NSRect)frameRect forViewer:(id)vwr; - (void)setContents:(NSArray *)iconsInfo; - (NSArray *)contentsInfo; - (id)addIconForNode:(FSNode *)node atIndex:(NSInteger)index; - (id)addIconForSelection:(NSArray *)selection atIndex:(NSInteger)index; - (id)iconForNode:(FSNode *)node; - (id)iconForPath:(NSString *)path; - (id)iconForNodesSelection:(NSArray *)selection; - (id)iconForPathsSelection:(NSArray *)selection; - (void)calculateGridSize; - (void)makeIconsGrid; - (NSInteger)firstFreeGridIndex; - (NSInteger)firstFreeGridIndexAfterIndex:(NSInteger)index; - (BOOL)isFreeGridIndex:(NSInteger)index; - (id)iconWithGridIndex:(NSInteger)index; - (NSInteger)indexOfGridRectContainingPoint:(NSPoint)p; - (NSRect)iconBoundsInGridAtIndex:(NSInteger)index; - (void)tile; - (void)updateFocusedIconLabel; - (void)setWatcherForPath:(NSString *)path; - (void)unsetWatcherForPath:(NSString *)path; - (void)unsetWatchers; - (NSArray *)watchedPaths; - (void)checkIconsAfterDotsFilesChange; - (void)checkIconsAfterHidingOfPaths:(NSArray *)hpaths; @end @interface GWViewerShelf (NodeRepContainer) - (void)removeRep:(id)arep; - (void)removeUndepositedRep:(id)arep; - (void)repSelected:(id)arep; - (void)unselectOtherReps:(id)arep; - (NSArray *)selectedPaths; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)nodeContentsWillChange:(NSDictionary *)info; - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (void)checkLockedReps; - (FSNSelectionMask)selectionMask; - (void)restoreLastSelection; - (void)setFocusedRep:(id)arep; - (NSColor *)backgroundColor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; @end @interface GWViewerShelf (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerShelf.m0000644000175000001440000010201414751352021022062 0ustar multixusers/* GWViewerShelf.h * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import "GWViewerShelf.h" #import "GWViewer.h" #import "GWorkspace.h" #import "FSNTextCell.h" #import "FSNBrowser.h" #import "FSNIconsView.h" #import "FSNIcon.h" #import "FSNFunctions.h" #define DEF_ICN_SIZE 48 #define DEF_TEXT_SIZE 12 #define DEF_ICN_POS NSImageAbove #define DEF_GRID_WIDTH 90 #define Y_MARGIN (4) #define EDIT_MARGIN (4) @interface GWTextField : NSTextField @end @implementation GWTextField - (id) initWithFrame: (NSRect)aFrame { NSTextFieldCell *cell; self = [super initWithFrame: aFrame]; if (self) { cell = [[[FSNTextCell alloc] init] autorelease]; [cell setDrawsBackground: YES]; [self setCell: cell]; } return self; } @end @implementation GWViewerShelf - (void)dealloc { [self unsetWatchers]; RELEASE (watchedPaths); RELEASE (icons); RELEASE (extInfoType); if (grid != NULL) { NSZoneFree (NSDefaultMallocZone(), grid); } RELEASE (dragIcon); RELEASE (focusedIconLabel); RELEASE (backColor); RELEASE (textColor); RELEASE (disabledTextColor); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect forViewer:(id)vwr { self = [super initWithFrame: frameRect]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id defentry; fsnodeRep = [FSNodeRep sharedInstance]; defentry = [defaults dictionaryForKey: @"backcolor"]; if (defentry) { float red = [[(NSDictionary *)defentry objectForKey: @"red"] floatValue]; float green = [[(NSDictionary *)defentry objectForKey: @"green"] floatValue]; float blue = [[(NSDictionary *)defentry objectForKey: @"blue"] floatValue]; float alpha = [[(NSDictionary *)defentry objectForKey: @"alpha"] floatValue]; ASSIGN (backColor, [NSColor colorWithCalibratedRed: red green: green blue: blue alpha: alpha]); } else { ASSIGN (backColor, [[NSColor windowBackgroundColor] colorUsingColorSpaceName: NSDeviceRGBColorSpace]); } defentry = [defaults dictionaryForKey: @"textcolor"]; if (defentry) { float red = [[(NSDictionary *)defentry objectForKey: @"red"] floatValue]; float green = [[(NSDictionary *)defentry objectForKey: @"green"] floatValue]; float blue = [[(NSDictionary *)defentry objectForKey: @"blue"] floatValue]; float alpha = [[(NSDictionary *)defentry objectForKey: @"alpha"] floatValue]; ASSIGN (textColor, [NSColor colorWithCalibratedRed: red green: green blue: blue alpha: alpha]); } else { ASSIGN (textColor, [[NSColor controlTextColor] colorUsingColorSpaceName: NSDeviceRGBColorSpace]); } ASSIGN (disabledTextColor, [textColor highlightWithLevel: NSDarkGray]); iconSize = DEF_ICN_SIZE; defentry = [defaults objectForKey: @"labeltxtsize"]; labelTextSize = defentry ? [defentry intValue] : DEF_TEXT_SIZE; ASSIGN (labelFont, [NSFont systemFontOfSize: labelTextSize]); iconPosition = DEF_ICN_POS; defentry = [defaults objectForKey: @"fsn_info_type"]; infoType = defentry ? [defentry intValue] : FSNInfoNameType; extInfoType = nil; if (infoType == FSNInfoExtendedType) { defentry = [defaults objectForKey: @"extended_info_type"]; if (defentry) { NSArray *availableTypes = [fsnodeRep availableExtendedInfoNames]; if ([availableTypes containsObject: defentry]) { ASSIGN (extInfoType, defentry); } } if (extInfoType == nil) { infoType = FSNInfoNameType; } } defentry = [defaults objectForKey: @"shelfcellswidth"]; gridSize.width = defentry ? [defentry intValue] : DEF_GRID_WIDTH; icons = [NSMutableArray new]; viewer = vwr; gworkspace = [GWorkspace gworkspace]; dragIcon = nil; focusedIcon = nil; [self calculateGridSize]; [self makeIconsGrid]; [self registerForDraggedTypes: [NSArray arrayWithObject: NSFilenamesPboardType]]; watchedPaths = [[NSCountedSet alloc] initWithCapacity: 1]; focusedIconLabel = [GWTextField new]; [focusedIconLabel setFont: [NSFont systemFontOfSize: 12]]; [focusedIconLabel setBezeled: NO]; [focusedIconLabel setAlignment: NSCenterTextAlignment]; [focusedIconLabel setEditable: NO]; [focusedIconLabel setSelectable: NO]; [focusedIconLabel setBackgroundColor: backColor]; [focusedIconLabel setTextColor: [NSColor controlTextColor]]; [focusedIconLabel setFrame: NSMakeRect(0, 0, 0, 14)]; } return self; } - (void)setContents:(NSArray *)iconsInfo { FSNode *baseNode = [viewer baseNode]; NSInteger i; for (i = 0; i < [iconsInfo count]; i++) { NSDictionary *info = [iconsInfo objectAtIndex: i]; NSArray *paths = [info objectForKey: @"paths"]; NSInteger index = [[info objectForKey: @"index"] intValue]; NSMutableArray *icnnodes = [NSMutableArray array]; NSInteger j; for (j = 0; j < [paths count]; j++) { FSNode *node = [FSNode nodeWithPath: [paths objectAtIndex: j]]; if ([node isValid] && [baseNode isParentOfNode: node]) { [icnnodes addObject: node]; } } if ([icnnodes count] && (index != -1)) { if ([icnnodes count] == 1) { [self addIconForNode: [icnnodes objectAtIndex: 0] atIndex: index]; } else { [self addIconForSelection: icnnodes atIndex: index]; } } } [self tile]; } - (NSArray *)contentsInfo { NSMutableArray *iconsInfo = [NSMutableArray array]; NSInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; if ([icon isShowingSelection]) { NSArray *selection = [icon selection]; NSMutableArray *paths = [NSMutableArray array]; NSInteger j; for (j = 0; j < [selection count]; j++) { [paths addObject: [[selection objectAtIndex: j] path]]; } [dict setObject: paths forKey: @"paths"]; } else { [dict setObject: [NSArray arrayWithObject: [[icon node] path]] forKey: @"paths"]; } [dict setObject: [NSNumber numberWithInt: [icon gridIndex]] forKey: @"index"]; [iconsInfo addObject: dict]; } return iconsInfo; } - (id)addIconForNode:(FSNode *)node atIndex:(NSInteger)index { FSNIcon *icon = [[FSNIcon alloc] initForNode: node nodeInfoType: infoType extendedType: extInfoType iconSize: iconSize iconPosition: iconPosition labelFont: labelFont textColor: textColor gridIndex: index dndSource: YES acceptDnd: YES slideBack: NO]; [icons addObject: icon]; [self addSubview: icon]; RELEASE (icon); { NSString *watched = [node parentPath]; if ([watchedPaths containsObject: watched] == NO) { [self setWatcherForPath: watched]; } [watchedPaths addObject: watched]; } return icon; } - (id)addIconForSelection:(NSArray *)selection atIndex:(NSInteger)index { FSNIcon *icon = [self addIconForNode: [selection objectAtIndex: 0] atIndex: index]; [icon showSelection: selection]; return icon; } - (id)iconForNode:(FSNode *)node { NSInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([[icon node] isEqual: node] && ([icon selection] == nil)) { return icon; } } return nil; } - (id)iconForPath:(NSString *)path { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([[[icon node] path] isEqual: path] && ([icon selection] == nil)) { return icon; } } return nil; } - (id)iconForNodesSelection:(NSArray *)selection { NSInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSArray *selnodes = [icon selection]; if (selnodes && [selnodes isEqual: selection]) { return icon; } } return nil; } - (id)iconForPathsSelection:(NSArray *)selection { NSUInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSArray *selnodes = [icon selection]; if (selnodes) { NSMutableArray *selpaths = [NSMutableArray array]; NSUInteger j; for (j = 0; j < [selnodes count]; j++) { [selpaths addObject: [[selnodes objectAtIndex: j] path]]; } if ([selpaths isEqual: selection]) { return icon; } } } return nil; } - (void)calculateGridSize { NSSize highlightSize = NSZeroSize; NSSize labelSize = NSZeroSize; highlightSize.width = ceil(iconSize / 3 * 4); highlightSize.height = ceil(highlightSize.width * [fsnodeRep highlightHeightFactor]); if ((highlightSize.height - iconSize) < 4) { highlightSize.height = iconSize + 4; } labelSize.height = myrintf([fsnodeRep heightOfFont: labelFont]); labelSize.width = gridSize.width; gridSize.height = highlightSize.height + labelSize.height; } - (void)makeIconsGrid { NSRect gridrect = [self bounds]; NSPoint gpnt; NSInteger i; if (grid != NULL) { NSZoneFree (NSDefaultMallocZone(), grid); } colCount = (int)(gridrect.size.width / gridSize.width); rowCount = (int)(gridrect.size.height / gridSize.height); gridCount = colCount * rowCount; grid = NSZoneMalloc (NSDefaultMallocZone(), sizeof(NSRect) * gridCount); gpnt.x = 0; gpnt.y = gridrect.size.height - gridSize.height - Y_MARGIN; for (i = 0; i < gridCount; i++) { if (i > 0) { gpnt.x += gridSize.width; } if (gpnt.x >= (gridrect.size.width - gridSize.width)) { gpnt.x = 0; gpnt.y -= (gridSize.height + Y_MARGIN); } grid[i].origin = gpnt; grid[i].size = gridSize; grid[i] = NSIntegralRect(grid[i]); } } - (NSInteger)firstFreeGridIndex { NSInteger i; for (i = 0; i < gridCount; i++) { if ([self isFreeGridIndex: i]) { return i; } } return -1; } - (NSInteger)firstFreeGridIndexAfterIndex:(NSInteger)index { NSInteger newind = index; while (1) { newind++; if (newind >= gridCount) { return [self firstFreeGridIndex]; } if ([self isFreeGridIndex: newind]) { return newind; } } return -1; } - (BOOL)isFreeGridIndex:(NSInteger)index { NSUInteger i; if ((index < 0) || (index >= gridCount)) { return NO; } for (i = 0; i < [icons count]; i++) { if ([[icons objectAtIndex: i] gridIndex] == index) { return NO; } } return YES; } - (id)iconWithGridIndex:(NSInteger)index { NSInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon gridIndex] == index) { return icon; } } return nil; } - (NSInteger)indexOfGridRectContainingPoint:(NSPoint)p { NSInteger i; for (i = 0; i < gridCount; i++) { if (NSPointInRect(p, grid[i])) { return i; } } return -1; } - (NSRect)iconBoundsInGridAtIndex:(NSInteger)index { NSRect icnBounds = NSMakeRect(grid[index].origin.x, grid[index].origin.y, iconSize, iconSize); NSRect hlightRect = NSZeroRect; hlightRect.size.width = ceil(iconSize / 3 * 4); hlightRect.size.height = ceil(hlightRect.size.width * [fsnodeRep highlightHeightFactor]); hlightRect.origin.x = ceil((gridSize.width - hlightRect.size.width) / 2); hlightRect.origin.y = floor([fsnodeRep heightOfFont: labelFont]); icnBounds.origin.x += hlightRect.origin.x + ((hlightRect.size.width - iconSize) / 2); icnBounds.origin.y += hlightRect.origin.y + ((hlightRect.size.height - iconSize) / 2); return icnBounds; } - (void)tile { NSArray *subviews = [self subviews]; NSUInteger i; [self makeIconsGrid]; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; if (index < gridCount) { if ([subviews containsObject: icon] == NO) { [self addSubview: icon]; } if (NSEqualRects(grid[index], [icon frame]) == NO) { [icon setFrame: grid[index]]; } } else { if (focusedIcon == icon) { focusedIcon = nil; } [icon removeFromSuperview]; } } [self updateFocusedIconLabel]; } - (void)updateFocusedIconLabel { if ([[self subviews] containsObject: focusedIconLabel]) { NSRect rect = [focusedIconLabel frame]; [focusedIconLabel removeFromSuperview]; [self setNeedsDisplayInRect: rect]; } if (focusedIcon) { NSRect icnr = [focusedIcon frame]; float centerx = icnr.origin.x + (icnr.size.width / 2); NSRect edrect = [self convertRect: [focusedIcon labelRect] fromView: focusedIcon]; int margin = [fsnodeRep labelMargin]; float bw = [self bounds].size.width - EDIT_MARGIN; NSString *nodeDescr = [focusedIcon shownInfo]; float edwidth = [[focusedIconLabel font] widthOfString: nodeDescr]; edwidth += margin; if ((centerx + (edwidth / 2)) >= bw) { centerx -= (centerx + (edwidth / 2) - bw); } else if ((centerx - (edwidth / 2)) < margin) { centerx += fabs(centerx - (edwidth / 2)) + margin; } edrect.origin.x = centerx - (edwidth / 2); edrect.size.width = edwidth; edrect = NSIntegralRect(edrect); [focusedIconLabel setFrame: edrect]; [focusedIconLabel setStringValue: nodeDescr]; if ([focusedIcon isLocked] == NO) { [focusedIconLabel setTextColor: [NSColor controlTextColor]]; } else { [focusedIconLabel setTextColor: [NSColor disabledControlTextColor]]; } [focusedIcon setNameEdited: YES]; [self addSubview: focusedIconLabel]; [self setNeedsDisplayInRect: edrect]; } } - (void)setWatcherForPath:(NSString *)path { [gworkspace addWatcherForPath: path]; } - (void)unsetWatcherForPath:(NSString *)path { [gworkspace removeWatcherForPath: path]; } - (void)unsetWatchers { NSEnumerator *enumerator = [watchedPaths objectEnumerator]; NSString *wpath; while ((wpath = [enumerator nextObject])) { [self unsetWatcherForPath: wpath]; } } - (NSArray *)watchedPaths { return [watchedPaths allObjects]; } - (void)checkIconsAfterDotsFilesChange { NSUInteger count = [icons count]; BOOL updated = NO; NSInteger i; for (i = 0; i < count; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isShowingSelection] == NO) { if ([[[icon node] path] rangeOfString: @"."].location != NSNotFound) { [self removeRep: icon]; updated = YES; count--; i--; } } else { NSArray *iconpaths = [icon pathsSelection]; NSInteger j; for (j = 0; j < [iconpaths count]; j++) { NSString *iconpath = [iconpaths objectAtIndex: j]; if ([iconpath rangeOfString: @"."].location != NSNotFound) { [self removeRep: icon]; updated = YES; count--; i--; break; } } } } if (updated) { [self tile]; [self setNeedsDisplay: YES]; } } - (void)checkIconsAfterHidingOfPaths:(NSArray *)hpaths { NSInteger count = [icons count]; BOOL updated = NO; NSInteger i; for (i = 0; i < count; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSInteger j, m; if ([icon isShowingSelection] == NO) { NSString *iconpath = [[icon node] path]; for (m = 0; m < [hpaths count]; m++) { NSString *hpath = [hpaths objectAtIndex: m]; if (isSubpathOfPath(hpath, iconpath) || [hpath isEqual: iconpath]) { [self removeRep: icon]; updated = YES; count--; i--; break; } } } else { NSArray *iconpaths = [icon pathsSelection]; BOOL removed = NO; for (j = 0; j < [iconpaths count]; j++) { NSString *iconpath = [iconpaths objectAtIndex: j]; for (m = 0; m < [hpaths count]; m++) { NSString *hpath = [hpaths objectAtIndex: m]; if (isSubpathOfPath(hpath, iconpath) || [hpath isEqual: iconpath]) { [self removeRep: icon]; updated = YES; count--; i--; removed = YES; break; } } if (removed) { break; } } } } if (updated) { [self tile]; [self setNeedsDisplay: YES]; } } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { [self tile]; } - (void)setFrame:(NSRect)frameRect { [super setFrame: frameRect]; [self tile]; } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (dragIcon) { [dragIcon dissolveToPoint: dragPoint fraction: 0.3]; } } @end @implementation GWViewerShelf (NodeRepContainer) - (void)removeRep:(id)arep { NSString *watched = [[arep node] parentPath]; if ([watchedPaths containsObject: watched]) { [watchedPaths removeObject: watched]; if ([watchedPaths containsObject: watched] == NO) { [self unsetWatcherForPath: watched]; } } if ([[self subviews] containsObject: arep]) { [arep removeFromSuperviewWithoutNeedingDisplay]; } if (focusedIcon == arep) { focusedIcon = nil; [self updateFocusedIconLabel]; } [icons removeObject: arep]; } - (void)removeUndepositedRep:(id)arep { [self removeRep: arep]; [self setNeedsDisplay: YES]; } - (void)repSelected:(id)arep { [viewer shelfDidSelectIcon: arep]; [arep unselect]; } - (void)unselectOtherReps:(id)arep { NSInteger i; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if (icon != arep) { [icon unselect]; } } } - (NSArray *)selectedPaths { NSMutableArray *selectedPaths = [NSMutableArray array]; NSUInteger i, j; for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { NSArray *selection = [icon selection]; if (selection) { for (j = 0; j < [selection count]; j++) { [selectedPaths addObject: [[selection objectAtIndex: j] path]]; } } else { [selectedPaths addObject: [[icon node] path]]; } } } return [NSArray arrayWithArray: selectedPaths]; } - (void)openSelectionInNewViewer:(BOOL)newv { [viewer openSelectionInNewViewer: newv]; } - (void)nodeContentsWillChange:(NSDictionary *)info { [self checkLockedReps]; } - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSInteger i; if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { for (i = 0; i < [icons count]; i++) { FSNIcon *icon = [icons objectAtIndex: i]; if ([icon isShowingSelection] == NO) { if ([[[icon node] path] isEqual: source]) { [icon setNode: [FSNode nodeWithPath: destination]]; break; } } } } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { NSMutableArray *oppaths = [NSMutableArray array]; NSUInteger count = [icons count]; BOOL updated = NO; for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fpath = [source stringByAppendingPathComponent: fname]; [oppaths addObject: fpath]; } for (i = 0; i < count; i++) { FSNIcon *icon = [icons objectAtIndex: i]; NSInteger j, m; if ([icon isShowingSelection] == NO) { NSString *iconpath = [[icon node] path]; for (m = 0; m < [oppaths count]; m++) { if ([iconpath hasPrefix: [oppaths objectAtIndex: m]]) { [self removeRep: icon]; updated = YES; count--; i--; break; } } } else { NSArray *iconpaths = [icon pathsSelection]; BOOL removed = NO; for (j = 0; j < [iconpaths count]; j++) { NSString *iconpath = [iconpaths objectAtIndex: j]; for (m = 0; m < [oppaths count]; m++) { if ([iconpath hasPrefix: [oppaths objectAtIndex: m]]) { [self removeRep: icon]; updated = YES; count--; i--; removed = YES; break; } } if (removed) { break; } } } } if (updated) { [self tile]; [self setNeedsDisplay: YES]; } } } - (void)watchedPathChanged:(NSDictionary *)info { NSString *path = [info objectForKey: @"path"]; NSString *event = [info objectForKey: @"event"]; NSEnumerator *enumerator; NSString *wpath; BOOL contained = NO; if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { return; } enumerator = [watchedPaths objectEnumerator]; while ((wpath = [enumerator nextObject])) { if (([wpath isEqual: path]) || (isSubpathOfPath(path, wpath))) { contained = YES; break; } } if (contained) { NSUInteger count = [icons count]; BOOL updated = NO; FSNIcon *icon; NSInteger i; if ([event isEqual: @"GWWatchedPathDeleted"]) { for (i = 0; i < count; i++) { icon = [icons objectAtIndex: i]; if ([[icon node] isSubnodeOfPath: path]) { [self removeRep: icon]; updated = YES; count--; i--; } } if (updated) { [self tile]; [self setNeedsDisplay: YES]; } return; } if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { NSArray *files = [info objectForKey: @"files"]; for (i = 0; i < count; i++) { NSUInteger j; icon = [icons objectAtIndex: i]; if ([icon isShowingSelection] == NO) { FSNode *node = [icon node]; for (j = 0; j < [files count]; j++) { NSString *fname = [files objectAtIndex: j]; NSString *fpath = [path stringByAppendingPathComponent: fname]; if ([[node path] isEqual: fpath] || [node isSubnodeOfPath: fpath]) { [self removeRep: icon]; updated = YES; count--; i--; break; } } } else { FSNode *node = [icon node]; NSArray *selection = [icon selection]; for (j = 0; j < [files count]; j++) { NSString *fname = [files objectAtIndex: j]; NSString *fpath = [path stringByAppendingPathComponent: fname]; BOOL deleted = NO; NSUInteger m; if (deleted) { break; } if ([node isSubnodeOfPath: fpath]) { [self removeRep: icon]; updated = YES; count--; i--; break; } for (m = 0; m < [selection count]; m++) { node = [selection objectAtIndex: m]; if ([[node path] isEqual: fpath]) { [self removeRep: icon]; updated = YES; count--; i--; deleted = YES; break; } } } } } if (updated) { [self tile]; [self setNeedsDisplay: YES]; } } } } - (void)checkLockedReps { NSUInteger i; for (i = 0; i < [icons count]; i++) { [[icons objectAtIndex: i] checkLocked]; } } - (FSNSelectionMask)selectionMask { return NSSingleSelectionMask; } - (void)restoreLastSelection { [self unselectOtherReps: nil]; } - (void)setFocusedRep:(id)arep { if (arep == nil) { if (focusedIcon) { [focusedIcon setNameEdited: NO]; } } focusedIcon = arep; [self updateFocusedIconLabel]; } - (NSColor *)backgroundColor { return backColor; } - (NSColor *)textColor { return textColor; } - (NSColor *)disabledTextColor { return disabledTextColor; } @end @implementation GWViewerShelf (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; DESTROY (dragIcon); isDragTarget = NO; dragLocalIcon = NO; if (!((sourceDragMask & NSDragOperationMove) || (sourceDragMask & NSDragOperationLink) || (sourceDragMask & NSDragOperationCopy) )) { return NSDragOperationNone; } if (pb && [[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSUInteger count = [sourcePaths count]; FSNode *baseNode = [viewer baseNode]; NSString *basePath; NSUInteger i; if (count == 0) { return NSDragOperationNone; } for (i = 0; i < count; i++) { NSString *path = [sourcePaths objectAtIndex: i]; if ([baseNode isParentOfPath: path] == NO) { return NSDragOperationNone; } } basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: [gworkspace trashPath]]) { return NSDragOperationNone; } if (count == 1) { dragLocalIcon = ([self iconForPath: [sourcePaths objectAtIndex: 0]] != nil); } else { dragLocalIcon = ([self iconForPathsSelection: sourcePaths] != nil); } isDragTarget = YES; dragPoint = NSZeroPoint; DESTROY (dragIcon); insertIndex = -1; return NSDragOperationMove; } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask; NSPoint dpoint; NSInteger index; if (isDragTarget == NO) { return NSDragOperationNone; } sourceDragMask = [sender draggingSourceOperationMask]; if (!((sourceDragMask & NSDragOperationMove) || (sourceDragMask & NSDragOperationLink) || (sourceDragMask & NSDragOperationCopy) )) { if (dragIcon) { DESTROY (dragIcon); if (insertIndex != -1) { [self setNeedsDisplayInRect: grid[insertIndex]]; } } return NSDragOperationNone; } dpoint = [sender draggingLocation]; dpoint = [self convertPoint: dpoint fromView: nil]; index = [self indexOfGridRectContainingPoint: dpoint]; if ((index != -1) && ([self isFreeGridIndex: index])) { NSImage *img = [sender draggedImage]; NSSize sz = [img size]; NSRect irect = [self iconBoundsInGridAtIndex: index]; dragPoint.x = ceil(irect.origin.x + ((irect.size.width - sz.width) / 2)); dragPoint.y = ceil(irect.origin.y + ((irect.size.height - sz.height) / 2)); if (dragIcon == nil) { ASSIGN (dragIcon, img); } if (insertIndex != index) { [self setNeedsDisplayInRect: grid[index]]; if (insertIndex != -1) { [self setNeedsDisplayInRect: grid[insertIndex]]; } } insertIndex = index; } else { DESTROY (dragIcon); if (insertIndex != -1) { [self setNeedsDisplayInRect: grid[insertIndex]]; } insertIndex = -1; return NSDragOperationNone; } return NSDragOperationEvery; } - (void)draggingExited:(id )sender { DESTROY (dragIcon); if (insertIndex != -1) { [self setNeedsDisplayInRect: grid[insertIndex]]; } isDragTarget = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSMutableArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSInteger count = [sourcePaths count]; id icon; DESTROY (dragIcon); isDragTarget = NO; if (insertIndex != -1) { if (dragLocalIcon) { if (count == 1) { icon = [self iconForPath: [sourcePaths objectAtIndex: 0]]; } else { icon = [self iconForPathsSelection: sourcePaths]; } if (icon) { [icon setGridIndex: insertIndex]; } } else { FSNode *baseNode = [viewer baseNode]; NSMutableArray *icnnodes = [NSMutableArray array]; NSInteger i; for (i = 0; i < [sourcePaths count]; i++) { FSNode *node = [FSNode nodeWithPath: [sourcePaths objectAtIndex: i]]; if ([node isValid] && [baseNode isParentOfNode: node]) { [icnnodes addObject: node]; } } if ([icnnodes count]) { if ([icnnodes count] == 1) { [self addIconForNode: [icnnodes objectAtIndex: 0] atIndex: insertIndex]; } else { [self addIconForSelection: icnnodes atIndex: insertIndex]; } } } } [self tile]; [self setNeedsDisplay: YES]; } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerSplit.h0000644000175000001440000000226414751213523022120 0ustar multixusers/* GWViewerSplit.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ # #import @class NSString; @class NSMutableArray; @class NSTextFieldCell; @interface GWViewerSplit : NSSplitView { NSTextFieldCell *diskInfoField; NSString *diskInfoString; NSRect diskInfoRect; } - (void)updateDiskSpaceInfo:(NSString *)info; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerSplit.m0000644000175000001440000000403214751213523022120 0ustar multixusers/* GWViewerSplit.m * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWViewerSplit.h" @implementation GWViewerSplit - (void)dealloc { RELEASE (diskInfoField); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; diskInfoField = [NSTextFieldCell new]; [diskInfoField setFont: [NSFont systemFontOfSize: 10]]; [diskInfoField setBordered: NO]; [diskInfoField setAlignment: NSLeftTextAlignment]; [diskInfoField setTextColor: [NSColor controlShadowColor]]; diskInfoRect = NSZeroRect; return self; } - (void)updateDiskSpaceInfo:(NSString *)info { if (info) { [diskInfoField setStringValue: info]; } else { [diskInfoField setStringValue: @""]; } if (NSEqualRects(diskInfoRect, NSZeroRect) == NO) { [diskInfoField drawWithFrame: diskInfoRect inView: self]; } } - (CGFloat)dividerThickness { return 11; } - (void)drawDividerInRect:(NSRect)aRect { diskInfoRect = NSMakeRect(8, aRect.origin.y, 200, 10); [super drawDividerInRect: aRect]; [diskInfoField setBackgroundColor: [self backgroundColor]]; [diskInfoField drawWithFrame: diskInfoRect inView: self]; } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerWindow.h0000644000175000001440000000470214751213523022273 0ustar multixusers/* GWViewer.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import @class GWorkspace; @interface GWViewerWindow : NSWindow { } - (void)openSelection:(id)sender; - (void)openSelectionAsFolder:(id)sender; - (void)openWith:(id)sender; - (void)newFolder:(id)sender; - (void)newFile:(id)sender; - (void)duplicateFiles:(id)sender; - (void)recycleFiles:(id)sender; - (void)deleteFiles:(id)sender; - (void)goBackwardInHistory:(id)sender; - (void)goForwardInHistory:(id)sender; - (void)setViewerType:(id)sender; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer:(id)sender; - (void)showTerminal:(id)sender; @end @interface NSObject (GWViewerWindowDelegateMethods) - (BOOL)validateItem:(id)menuItem; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionAsFolder; - (void)openSelectionWith; - (void)newFolder; - (void)newFile; - (void)duplicateFiles; - (void)recycleFiles; - (void)emptyTrash; - (void)deleteFiles; - (void)goBackwardInHistory; - (void)goForwardInHistory; - (void)setViewerBehaviour:(id)sender; - (void)setViewerType:(id)sender; - (void)setShownType:(id)sender; - (void)setExtendedShownType:(id)sender; - (void)setIconsSize:(id)sender; - (void)setIconsPosition:(id)sender; - (void)setLabelSize:(id)sender; - (void)chooseLabelColor:(id)sender; - (void)chooseBackColor:(id)sender; - (void)selectAllInViewer; - (void)showTerminal; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewerWindow.m0000644000175000001440000000764614751213523022312 0ustar multixusers/* GWViewerWindow.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "GWViewerWindow.h" @implementation GWViewerWindow - (void)dealloc { [super dealloc]; } - (id)init { unsigned int style = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask; self = [super initWithContentRect: NSZeroRect styleMask: style backing: NSBackingStoreBuffered defer: NO]; return self; } - (BOOL)validateMenuItem:(id )menuItem { return [[self delegate] validateItem: menuItem]; } - (void)openSelection:(id)sender { [[self delegate] openSelectionInNewViewer: NO]; } - (void)openSelectionAsFolder:(id)sender { [[self delegate] openSelectionAsFolder]; } - (void)openWith:(id)sender { [[self delegate] openSelectionWith]; } - (void)newFolder:(id)sender { [[self delegate] newFolder]; } - (void)newFile:(id)sender { [[self delegate] newFile]; } - (void)duplicateFiles:(id)sender { [[self delegate] duplicateFiles]; } - (void)recycleFiles:(id)sender { [[self delegate] recycleFiles]; } - (void)deleteFiles:(id)sender { [[self delegate] deleteFiles]; } - (void)goBackwardInHistory:(id)sender { [[self delegate] goBackwardInHistory]; } - (void)goForwardInHistory:(id)sender { [[self delegate] goForwardInHistory]; } - (void)setViewerType:(id)sender { [[self delegate] setViewerType: sender]; } - (void)setShownType:(id)sender { [[self delegate] setShownType: sender]; } - (void)setExtendedShownType:(id)sender { [[self delegate] setExtendedShownType: sender]; } - (void)setIconsSize:(id)sender { [[self delegate] setIconsSize: sender]; } - (void)setIconsPosition:(id)sender { [[self delegate] setIconsPosition: sender]; } - (void)setLabelSize:(id)sender { [[self delegate] setLabelSize: sender]; } - (void)chooseLabelColor:(id)sender { [[self delegate] chooseLabelColor: sender]; } - (void)chooseBackColor:(id)sender { [[self delegate] chooseBackColor: sender]; } - (void)selectAllInViewer:(id)sender { [[self delegate] selectAllInViewer]; } - (void)showTerminal:(id)sender { [[self delegate] showTerminal]; } - (void)keyDown:(NSEvent *)theEvent { unsigned flags = [theEvent modifierFlags]; NSString *characters = [theEvent characters]; unichar character = 0; if ([characters length] > 0) { character = [characters characterAtIndex: 0]; } switch (character) { case NSLeftArrowFunctionKey: if ((flags & NSCommandKeyMask) || (flags & NSControlKeyMask)) { [[self delegate] goBackwardInHistory]; } return; case NSRightArrowFunctionKey: if ((flags & NSCommandKeyMask) || (flags & NSControlKeyMask)) { [[self delegate] goForwardInHistory]; } return; case NSBackspaceKey: if (flags & NSShiftKeyMask) { [[self delegate] emptyTrash]; } else { [[self delegate] recycleFiles]; } return; } [super keyDown: theEvent]; } - (void)print:(id)sender { [super print: sender]; } @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewersManager.h0000644000175000001440000000627714751213523022572 0ustar multixusers/* GWViewersManager.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNodeRep.h" #import "GWViewer.h" @class GWorkspace; @class History; @interface GWViewersManager : NSObject { NSMutableArray *viewers; BOOL orderingViewers; GWorkspace *gworkspace; History *historyWindow; BOOL settingHistoryPath; NSHelpManager *helpManager; NSAttributedString *bviewerHelp; NSNotificationCenter *nc; } + (GWViewersManager *)viewersManager; - (void)showViewers; - (id)showRootViewer; - (void)selectRepOfNode:(FSNode *)node inViewerWithBaseNode:(FSNode *)base; - (id)viewerForNode:(FSNode *)node showType:(GWViewType)stype showSelection:(BOOL)showsel forceNew:(BOOL)force withKey:(NSString *)key; - (NSArray *)viewersForBaseNode:(FSNode *)node; - (id)viewerWithBaseNode:(FSNode *)node; - (id)viewerShowingNode:(FSNode *)node; - (id)rootViewer; - (void)viewerWillClose:(id)aviewer; - (void)closeInvalidViewers:(NSArray *)vwrs; - (void)selectionChanged:(NSArray *)selection; - (void)openSelectionInViewer:(id)viewer closeSender:(BOOL)close; - (void)openAsFolderSelectionInViewer:(id)viewer; - (void)openWithSelectionInViewer:(id)viewer; - (void)sortTypeDidChange:(NSNotification *)notif; - (void)fileSystemWillChange:(NSNotification *)notif; - (void)fileSystemDidChange:(NSNotification *)notif; - (void)watcherNotification:(NSNotification *)notif; - (void)thumbnailsDidChangeInPaths:(NSArray *)paths; - (void)hideDotsFileDidChange:(BOOL)hide; - (void)hiddenFilesDidChange:(NSArray *)paths; - (BOOL)hasViewerWithWindow:(id)awindow; - (id)viewerWithWindow:(id)awindow; - (NSArray *)viewerWindows; - (BOOL)orderingViewers; - (void)updateDesktop; - (void)updateDefaults; @end @interface GWViewersManager (History) - (void)addNode:(FSNode *)node toHistoryOfViewer:(id)viewer; - (void)removeDuplicatesInHistory:(NSMutableArray *)history position:(int *)pos; - (void)changeHistoryOwner:(id)viewer; - (void)goToHistoryPosition:(int)pos ofViewer:(id)viewer; - (void)goBackwardInHistoryOfViewer:(id)viewer; - (void)goForwardInHistoryOfViewer:(id)viewer; - (void)setPosition:(int)position inHistory:(NSMutableArray *)history ofViewer:(id)viewer; @end gworkspace-1.1.0/GWorkspace/FileViewer/GWViewersManager.m0000644000175000001440000006335614751213523022600 0ustar multixusers/* GWViewersManager.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWViewersManager.h" #import "GWViewer.h" #import "GWViewerWindow.h" #import "History.h" #import "FSNFunctions.h" #import "GWorkspace.h" #import "GWDesktopManager.h" static GWViewersManager *vwrsmanager = nil; @implementation GWViewersManager + (GWViewersManager *)viewersManager { if (vwrsmanager == nil) { vwrsmanager = [[GWViewersManager alloc] init]; } return vwrsmanager; } - (void)dealloc { [[NSDistributedNotificationCenter defaultCenter] removeObserver: self]; [nc removeObserver: self]; RELEASE (viewers); RELEASE (bviewerHelp); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSNotificationCenter *wsnc; gworkspace = [GWorkspace gworkspace]; helpManager = [NSHelpManager sharedHelpManager]; wsnc = [[NSWorkspace sharedWorkspace] notificationCenter]; ASSIGN (bviewerHelp, [gworkspace contextHelpFromName: @"BViewer.rtfd"]); viewers = [NSMutableArray new]; orderingViewers = NO; historyWindow = [gworkspace historyWindow]; nc = [NSNotificationCenter defaultCenter]; [nc addObserver: self selector: @selector(fileSystemWillChange:) name: @"GWFileSystemWillChangeNotification" object: nil]; [nc addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; [nc addObserver: self selector: @selector(watcherNotification:) name: @"GWFileWatcherFileDidChangeNotification" object: nil]; [[NSDistributedNotificationCenter defaultCenter] addObserver: self selector: @selector(sortTypeDidChange:) name: @"GWSortTypeDidChangeNotification" object: nil]; // should perhaps volume notification be distributed? [wsnc addObserver: self selector: @selector(newVolumeMounted:) name: NSWorkspaceDidMountNotification object: nil]; [wsnc addObserver: self selector: @selector(mountedVolumeDidUnmount:) name: NSWorkspaceDidUnmountNotification object: nil]; [[FSNodeRep sharedInstance] setLabelWFactor: 9.0]; } return self; } - (void)showViewers { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *viewersInfo = [defaults objectForKey: @"viewersinfo"]; if (viewersInfo && [viewersInfo count]) { NSUInteger i; for (i = 0; i < [viewersInfo count]; i++) { NSDictionary *dict = [viewersInfo objectAtIndex: i]; NSString *path = [dict objectForKey: @"path"]; FSNode *node = [FSNode nodeWithPath: path]; NSString *key = [dict objectForKey: @"key"]; if (node && [node isValid]) { [self viewerForNode: node showType: 0 showSelection: YES forceNew: YES withKey: key]; } } } else { [self showRootViewer]; } } - (id)showRootViewer { NSString *path = path_separator(); FSNode *node = [FSNode nodeWithPath: path]; id viewer = [self rootViewer]; if (viewer == nil) { viewer = [self viewerForNode: node showType: 0 showSelection: YES forceNew: NO withKey: nil]; } else { if ([[viewer win] isVisible] == NO) { [viewer activate]; } else { viewer = [self viewerForNode: node showType: 0 showSelection: YES forceNew: YES withKey: nil]; } } return viewer; } - (void)selectRepOfNode:(FSNode *)node inViewerWithBaseNode:(FSNode *)base { BOOL inRootViewer = [[base path] isEqual: path_separator()]; NSArray *selection = [NSArray arrayWithObject: node]; id viewer = nil; if ([base isEqual: node] || ([node isSubnodeOfNode: base] == NO)) { selection = nil; } if (inRootViewer) { viewer = [self rootViewer]; if (viewer == nil) { viewer = [self showRootViewer]; } } else { viewer = [self viewerForNode : base showType: 0 showSelection: NO forceNew: NO withKey: nil]; } if (selection) { [[viewer nodeView] selectRepsOfSubnodes: selection]; } } - (id)viewerForNode:(FSNode *)node showType:(GWViewType)stype showSelection:(BOOL)showsel forceNew:(BOOL)force withKey:(NSString *)key { id viewer = [self viewerWithBaseNode: node]; if ((viewer == nil) || (force)) { Class c = [GWViewer class]; GWViewerWindow *win = [GWViewerWindow new]; [win setReleasedWhenClosed: NO]; viewer = [[c alloc] initForNode: node inWindow: win showType: stype showSelection: showsel withKey: key]; [viewers addObject: viewer]; RELEASE (win); RELEASE (viewer); } [viewer activate]; [helpManager setContextHelp: bviewerHelp forObject: [[viewer win] contentView]]; return viewer; } - (NSArray *)viewersForBaseNode:(FSNode *)node { NSMutableArray *vwrs = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([[viewer baseNode] isEqual: node]) { [vwrs addObject: viewer]; } } return vwrs; } - (id)viewerWithBaseNode:(FSNode *)node { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([[viewer baseNode] isEqual: node]) { return viewer; } } return nil; } - (id)viewerShowingNode:(FSNode *)node { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer isShowingNode: node]) { return viewer; } } return nil; } - (id)rootViewer { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer isFirstRootViewer]) { return viewer; } } return nil; } - (void)viewerWillClose:(id)aviewer { FSNode *node = [aviewer baseNode]; NSArray *watchedNodes = [aviewer watchedNodes]; NSUInteger i; if ([node isValid] == NO) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *prefsname; NSDictionary *vwrprefs; prefsname = [aviewer defaultsKey]; vwrprefs = [defaults dictionaryForKey: prefsname]; if (vwrprefs) { [defaults removeObjectForKey: prefsname]; } [NSWindow removeFrameUsingName: prefsname]; } for (i = 0; i < [watchedNodes count]; i++) [gworkspace removeWatcherForPath: [[watchedNodes objectAtIndex: i] path]]; if (aviewer == [historyWindow viewer]) [self changeHistoryOwner: nil]; [helpManager removeContextHelpForObject: [[aviewer win] contentView]]; [viewers removeObject: aviewer]; } - (void)closeInvalidViewers:(NSArray *)vwrs { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSUInteger i, j; for (i = 0; i < [vwrs count]; i++) { id viewer = [vwrs objectAtIndex: i]; NSString *vpath = [[viewer baseNode] path]; NSArray *watchedNodes = [viewer watchedNodes]; NSString *prefsname = [NSString stringWithFormat: @"viewer_at_%@", vpath]; NSDictionary *vwrprefs = [defaults dictionaryForKey: prefsname]; if (vwrprefs) [defaults removeObjectForKey: prefsname]; [NSWindow removeFrameUsingName: prefsname]; for (j = 0; j < [watchedNodes count]; j++) [gworkspace removeWatcherForPath: [[watchedNodes objectAtIndex: j] path]]; } for (i = 0; i < [vwrs count]; i++) { id viewer = [vwrs objectAtIndex: i]; NSDate *limit = [NSDate dateWithTimeIntervalSinceNow: 0.1]; if (viewer == [historyWindow viewer]) [self changeHistoryOwner: nil]; [viewer deactivate]; [[NSRunLoop currentRunLoop] runUntilDate: limit]; [helpManager removeContextHelpForObject: [[viewer win] contentView]]; [viewers removeObject: viewer]; } } - (void)selectionChanged:(NSArray *)selection { if (orderingViewers == NO) { [gworkspace selectionChanged: selection]; } } - (void)openSelectionInViewer:(id)viewer closeSender:(BOOL)close { NSArray *selreps = [[viewer nodeView] selectedReps]; NSUInteger count = [selreps count]; NSUInteger i; if (count > MAX_FILES_TO_OPEN_DIALOG) { NSString *msg1 = NSLocalizedString(@"Are you sure you want to open", @""); NSString *msg2 = NSLocalizedString(@"items?", @""); if (NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %"PRIuPTR" %@", msg1, count, msg2], NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Yes", @""), nil)) { return; } } for (i = 0; i < count; i++) { FSNode *node = [[selreps objectAtIndex: i] node]; if ([node hasValidPath]) { NS_DURING { if ([node isDirectory]) { if ([node isPackage]) { if ([node isApplication] == NO) [gworkspace openFile: [node path]]; else [[NSWorkspace sharedWorkspace] launchApplication: [node path]]; } else { [self viewerForNode: node showType: 0 showSelection: NO forceNew: NO withKey: nil]; } } else if ([node isPlain]) { [gworkspace openFile: [node path]]; } } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } else { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } } if (close) { [[viewer win] close]; } } - (void)openAsFolderSelectionInViewer:(id)viewer { NSArray *selnodes = [[viewer nodeView] selectedNodes]; BOOL force = NO; NSUInteger i; if ((selnodes == nil) || ([selnodes count] == 0)) { selnodes = [NSArray arrayWithObject: [[viewer nodeView] shownNode]]; force = YES; } for (i = 0; i < [selnodes count]; i++) { FSNode *node = [selnodes objectAtIndex: i]; if ([node isDirectory]) { [self viewerForNode: node showType: [viewer viewType] showSelection: NO forceNew: force withKey: nil]; } else if ([node isPlain]) { [gworkspace openFile: [node path]]; } } } - (void)openWithSelectionInViewer:(id)viewer { [gworkspace openSelectedPathsWith]; } - (void)sortTypeDidChange:(NSNotification *)notif { NSString *notifPath = [notif object]; NSUInteger i; for (i = 0; i < [viewers count]; i++) { [[[viewers objectAtIndex: i] nodeView] sortTypeChangedAtPath: notifPath]; } } - (void)fileSystemWillChange:(NSNotification *)notif { NSDictionary *opinfo = (NSDictionary *)[notif object]; NSMutableArray *viewersToClose = [NSMutableArray array]; int i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer involvedByFileOperation: opinfo]) { if ([[viewer baseNode] willBeValidAfterFileOperation: opinfo] == NO) { [viewer invalidate]; [viewersToClose addObject: viewer]; } else { [viewer nodeContentsWillChange: opinfo]; } } if ([viewer invalidated] == NO) { id shelf = [viewer shelf]; if (shelf) { [shelf nodeContentsWillChange: opinfo]; } } } [self closeInvalidViewers: viewersToClose]; } - (void)fileSystemDidChange:(NSNotification *)notif { NSDictionary *opinfo = (NSDictionary *)[notif object]; NSMutableArray *viewersToClose = [NSMutableArray array]; int i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; FSNode *vnode = [viewer baseNode]; if (([vnode isValid] == NO) && ([viewer invalidated] == NO)) { [viewer invalidate]; [viewersToClose addObject: viewer]; } else { if ([viewer involvedByFileOperation: opinfo]) { [viewer nodeContentsDidChange: opinfo]; } } if ([viewer invalidated] == NO) { id shelf = [viewer shelf]; if (shelf) { [shelf nodeContentsDidChange: opinfo]; } } } [self closeInvalidViewers: viewersToClose]; } - (void)watcherNotification:(NSNotification *)notif { NSDictionary *info = (NSDictionary *)[notif object]; NSString *event = [info objectForKey: @"event"]; NSString *path = [info objectForKey: @"path"]; NSMutableArray *viewersToClose = [NSMutableArray array]; int i, j; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; FSNode *node = [viewer baseNode]; NSArray *watchedNodes = [viewer watchedNodes]; if ([event isEqual: @"GWWatchedPathDeleted"]) { if (([[node path] isEqual: path]) || [node isSubnodeOfPath: path]) { if ([viewer invalidated] == NO) { [viewer invalidate]; [viewersToClose addObject: viewer]; } } } for (j = 0; j < [watchedNodes count]; j++) { if ([[[watchedNodes objectAtIndex: j] path] isEqual: path]) { [viewer watchedPathChanged: info]; break; } } if ([viewer invalidated] == NO) { id shelf = [viewer shelf]; if (shelf) { [shelf watchedPathChanged: info]; } } } [self closeInvalidViewers: viewersToClose]; } - (void)thumbnailsDidChangeInPaths:(NSArray *)paths { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer invalidated] == NO) { if (paths == nil) { [viewer reloadFromNode: [viewer baseNode]]; } else { NSUInteger j; for (j = 0; j < [paths count]; j++) { NSString *path = [paths objectAtIndex: j]; if ([viewer isShowingPath: path]) { FSNode *node = [FSNode nodeWithPath: path]; [viewer reloadFromNode: node]; if ([viewer respondsToSelector: @selector(updateShownSelection)]) { [viewer updateShownSelection]; } } } } } } } - (void)hideDotsFileDidChange:(BOOL)hide { NSMutableArray *viewersToClose = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer invalidated] == NO) { if (hide) { if ([[[viewer baseNode] path] rangeOfString: @"."].location != NSNotFound) { [viewer invalidate]; [viewersToClose addObject: viewer]; } } if ([viewersToClose containsObject: viewer] == NO) { [viewer hideDotsFileChanged: hide]; } } } [self closeInvalidViewers: viewersToClose]; } - (void)hiddenFilesDidChange:(NSArray *)paths { NSMutableArray *viewersToClose = [NSMutableArray array]; NSUInteger i, j; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; NSString *vwrpath = [[viewer baseNode] path]; for (j = 0; j < [paths count]; j++) { NSString *path = [paths objectAtIndex: j]; if (isSubpathOfPath(path, vwrpath) || [path isEqual: vwrpath]) { [viewer invalidate]; [viewersToClose addObject: viewer]; } } if ([viewersToClose containsObject: viewer] == NO) { [viewer hiddenFilesChanged: paths]; } } [self closeInvalidViewers: viewersToClose]; } - (BOOL)hasViewerWithWindow:(id)awindow { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer win] == awindow) { return YES; } } return NO; } - (id)viewerWithWindow:(id)awindow { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer win] == awindow) { return viewer; } } return nil; } - (NSArray *)viewerWindows { NSMutableArray *wins = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer invalidated] == NO) { [wins addObject: [viewer win]]; } } return wins; } - (BOOL)orderingViewers { return orderingViewers; } - (void)updateDesktop { id desktopManager = [gworkspace desktopManager]; if ([desktopManager isActive]) { [desktopManager deselectAllIcons]; } } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *viewersInfo = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [viewers count]; i++) { id viewer = [viewers objectAtIndex: i]; if ([viewer invalidated] == NO) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: [[viewer baseNode] path] forKey: @"path"]; if ([viewer defaultsKey]) [dict setObject: [viewer defaultsKey] forKey: @"key"]; [viewersInfo addObject: dict]; } } [defaults setObject: viewersInfo forKey: @"viewersinfo"]; } - (void)newVolumeMounted:(NSNotification *)notif { NSDictionary *dict = [notif userInfo]; NSString *volpath = [dict objectForKey: @"NSDevicePath"]; FSNodeRep *fnr = [FSNodeRep sharedInstance]; if (volpath) [fnr addVolumeAt:volpath]; else NSLog(@"newVolumeMounted notification received with empty NSDevicePath"); } - (void)mountedVolumeDidUnmount:(NSNotification *)notif { NSDictionary *dict = [notif userInfo]; NSString *volpath = [dict objectForKey: @"NSDevicePath"]; FSNodeRep *fnr = [FSNodeRep sharedInstance]; if (volpath) [fnr removeVolumeAt:volpath]; else NSLog(@"mountedVolumeDidUnmount notification received with empty NSDevicePath"); } @end @implementation GWViewersManager (History) - (void)addNode:(FSNode *)node toHistoryOfViewer:(id)viewer { if ([node isValid] && (settingHistoryPath == NO)) { NSMutableArray *history = [viewer history]; int position = [viewer historyPosition]; id hisviewer = [historyWindow viewer]; int cachemax = [gworkspace maxHistoryCache]; int count; while ([history count] > cachemax) { [history removeObjectAtIndex: 0]; if (position > 0) { position--; } } count = [history count]; if (position == (count - 1)) { if ([[history lastObject] isEqual: node] == NO) { [history insertObject: node atIndex: count]; } position = [history count] - 1; } else if (count > (position + 1)) { BOOL equalpos = [[history objectAtIndex: position] isEqual: node]; BOOL equalnext = [[history objectAtIndex: position + 1] isEqual: node]; if (((equalpos == NO) && (equalnext == NO)) || equalnext) { position++; if (equalnext == NO) { [history insertObject: node atIndex: position]; } while ((position + 1) < [history count]) { int last = [history count] - 1; [history removeObjectAtIndex: last]; } } } [self removeDuplicatesInHistory: history position: &position]; [viewer setHistoryPosition: position]; if (viewer == hisviewer) { [historyWindow setHistoryNodes: history position: position]; } } } - (void)removeDuplicatesInHistory:(NSMutableArray *)history position:(int *)pos { int count = [history count]; int i; #define CHECK_POSITION(n) \ if (*pos >= i) *pos -= n; \ *pos = (*pos < 0) ? 0 : *pos; \ *pos = (*pos >= count) ? (count - 1) : *pos for (i = 0; i < count; i++) { FSNode *node = [history objectAtIndex: i]; if ([node isValid] == NO) { [history removeObjectAtIndex: i]; CHECK_POSITION (1); count--; i--; } } for (i = 0; i < count; i++) { FSNode *node = [history objectAtIndex: i]; if (i < ([history count] - 1)) { FSNode *next = [history objectAtIndex: i + 1]; if ([next isEqual: node]) { [history removeObjectAtIndex: i + 1]; CHECK_POSITION (1); count--; i--; } } } count = [history count]; if (count > 4) { FSNode *na[2], *nb[2]; for (i = 0; i < count; i++) { if (i < (count - 3)) { na[0] = [history objectAtIndex: i]; na[1] = [history objectAtIndex: i + 1]; nb[0] = [history objectAtIndex: i + 2]; nb[1] = [history objectAtIndex: i + 3]; if (([na[0] isEqual: nb[0]]) && ([na[1] isEqual: nb[1]])) { [history removeObjectAtIndex: i + 3]; [history removeObjectAtIndex: i + 2]; CHECK_POSITION (2); count -= 2; i--; } } } } CHECK_POSITION (0); } - (void)changeHistoryOwner:(id)viewer { if (viewer && (viewer != [historyWindow viewer])) { NSMutableArray *history = [viewer history]; int position = [viewer historyPosition]; [historyWindow setHistoryNodes: history position: position]; } else if (viewer == nil) { [historyWindow setHistoryNodes: nil]; } [historyWindow setViewer: viewer]; } - (void)goToHistoryPosition:(int)pos ofViewer:(id)viewer { if (viewer) { NSMutableArray *history = [viewer history]; int position = [viewer historyPosition]; [self removeDuplicatesInHistory: history position: &position]; if ((pos >= 0) && (pos < [history count])) { [self setPosition: pos inHistory: history ofViewer: viewer]; } } } - (void)goBackwardInHistoryOfViewer:(id)viewer { NSMutableArray *history = [viewer history]; int position = [viewer historyPosition]; [self removeDuplicatesInHistory: history position: &position]; if ((position > 0) && (position < [history count])) { position--; [self setPosition: position inHistory: history ofViewer: viewer]; } } - (void)goForwardInHistoryOfViewer:(id)viewer { NSMutableArray *history = [viewer history]; int position = [viewer historyPosition]; [self removeDuplicatesInHistory: history position: &position]; if ((position >= 0) && (position < ([history count] - 1))) { position++; [self setPosition: position inHistory: history ofViewer: viewer]; } } - (void)setPosition:(int)position inHistory:(NSMutableArray *)history ofViewer:(id)viewer { FSNode *node = [history objectAtIndex: position]; id nodeView = [viewer nodeView]; settingHistoryPath = YES; if ([viewer viewType] != GWViewTypeBrowser) { [nodeView showContentsOfNode: node]; } else { [nodeView showContentsOfNode: [FSNode nodeWithPath: [node parentPath]]]; [nodeView selectRepsOfSubnodes: [NSArray arrayWithObject: node]]; } if ([nodeView respondsToSelector: @selector(scrollSelectionToVisible)]) [nodeView scrollSelectionToVisible]; [viewer setHistoryPosition: position]; [historyWindow setHistoryPosition: position]; settingHistoryPath = NO; } @end gworkspace-1.1.0/GWorkspace/Finder/0000755000175000001440000000000014751213523016376 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/FindModuleView.h0000644000175000001440000000312014751213523021424 0ustar multixusers/* FindModuleView.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FIND_MODULE_VIEW_H #define FIND_MODULE_VIEW_H #include @class NSBox; @interface FindModuleView : NSObject { IBOutlet id win; IBOutlet NSBox *mainBox; IBOutlet id popUp; IBOutlet NSBox *moduleBox; IBOutlet id removeButt; IBOutlet id addButt; id delegate; id module; NSMutableArray *usedModulesNames; } - (id)initWithDelegate:(id)anobject; - (NSBox *)mainBox; - (void)setModule:(id)mdl; - (void)updateMenuForModules:(NSArray *)modules; - (void)setAddEnabled:(BOOL)value; - (void)setRemoveEnabled:(BOOL)value; - (id)module; - (IBAction)popUpAction:(id)sender; - (IBAction)buttonsAction:(id)sender; @end #endif // FIND_MODULE_VIEW_H gworkspace-1.1.0/GWorkspace/Finder/FindModuleView.m0000644000175000001440000000663414751213523021446 0ustar multixusers/* FindModuleView.m * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FindModuleView.h" #import "Finder.h" #import "LSFEditor.h" #import "FinderModulesProtocol.h" static NSString *nibName = @"FindModuleView"; @implementation FindModuleView - (void)dealloc { RELEASE (mainBox); RELEASE (usedModulesNames); [super dealloc]; } - (id)initWithDelegate:(id)anobject { self = [super init]; if (self) { NSArray *modules; int i; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (mainBox); RELEASE (win); [removeButt setImage: [NSImage imageNamed: @"remove"]]; [addButt setImage: [NSImage imageNamed: @"add"]]; delegate = anobject; modules = [delegate modules]; module = nil; usedModulesNames = [NSMutableArray new]; [popUp removeAllItems]; for (i = 0; i < [modules count]; i++) { id mdl = [modules objectAtIndex: i]; NSString *mname = [mdl moduleName]; if ([mdl used]) { [usedModulesNames addObject: mname]; } [popUp insertItemWithTitle: mname atIndex: i]; } } return self; } - (NSBox *)mainBox { return mainBox; } - (void)setModule:(id)mdl { module = mdl; [moduleBox setContentView: [module controls]]; [popUp selectItemWithTitle: [mdl moduleName]]; } - (void)updateMenuForModules:(NSArray *)modules { int i; [usedModulesNames removeAllObjects]; for (i = 0; i < [modules count]; i++) { id mdl = [modules objectAtIndex: i]; NSString *mname = [mdl moduleName]; if ([mdl used] && (mdl != module)) { [usedModulesNames addObject: mname]; } } [[popUp menu] update]; [popUp selectItemWithTitle: [module moduleName]]; } - (void)setAddEnabled:(BOOL)value { [addButt setEnabled: value]; } - (void)setRemoveEnabled:(BOOL)value { [removeButt setEnabled: value]; } - (id)module { return module; } - (IBAction)popUpAction:(id)sender { NSString *title = [sender titleOfSelectedItem]; if ([title isEqual: [module moduleName]] == NO) { [delegate findModuleView: self changeModuleTo: title]; } } - (BOOL)validateMenuItem:(id )anItem { if (module == nil) { return NO; } if ([usedModulesNames containsObject: [anItem title]]) { return NO; } return YES; } - (IBAction)buttonsAction:(id)sender { if (sender == addButt) { [delegate addModule: self]; } else { [delegate removeModule: self]; } } @end gworkspace-1.1.0/GWorkspace/Finder/Finder.h0000644000175000001440000001002414751213523017753 0ustar multixusers/* Finder.h * * Copyright (C) 2005-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FINDER_H #define FINDER_H #include @class FSNode; @class NSScrollView; @class NSMatrix; @class FindModuleView; @class LSFolder; @class NSPopUpButton; @class NSWindow; @class NSBox; @class NSTextField; @class NSButton; @class SearchPlacesBox; @interface Finder : NSObject { IBOutlet NSWindow *win; IBOutlet NSTextField *searchLabel; IBOutlet NSPopUpButton *wherePopUp; IBOutlet SearchPlacesBox *placesBox; NSScrollView *placesScroll; NSMatrix *placesMatrix; IBOutlet NSButton *addPlaceButt; IBOutlet NSButton *removePlaceButt; IBOutlet NSTextField *itemsLabel; IBOutlet NSBox *modulesBox; IBOutlet NSButton *recursiveSwitch; IBOutlet NSButton *findButt; NSMutableArray *modules; NSMutableArray *fmviews; NSArray *currentSelection; BOOL usesSearchPlaces; BOOL splacesDndTarget; NSMutableArray *searchResults; int searchResh; NSMutableArray *lsFolders; NSFileManager *fm; NSNotificationCenter *nc; id ws; id gworkspace; } + (Finder *)finder; - (void)activate; - (void)loadModules; - (NSArray *)modules; - (NSArray *)usedModules; - (id)firstUnusedModule; - (id)moduleWithName:(NSString *)mname; - (void)addModule:(FindModuleView *)aview; - (void)removeModule:(FindModuleView *)aview; - (void)findModuleView:(FindModuleView *)aview changeModuleTo:(NSString *)mname; - (IBAction)chooseSearchPlacesType:(id)sender; - (NSDragOperation)draggingEnteredInSearchPlaces:(id )sender; - (NSDragOperation)draggingUpdatedInSearchPlaces:(id )sender; - (void)concludeDragOperationInSearchPlaces:(id )sender; - (IBAction)addSearchPlaceFromDialog:(id)sender; - (void)addSearchPlaceWithPath:(NSString *)spath; - (void)placesMatrixAction:(id)sender; - (IBAction)removeSearchPlaceButtAction:(id)sender; - (void)removeSearchPlaceWithPath:(NSString *)spath; - (NSArray *)searchPlacesPaths; - (NSArray *)selectedSearchPlacesPaths; - (void)setCurrentSelection:(NSArray *)paths; - (IBAction)startFind:(id)sender; - (void)stopAllSearchs; - (id)resultWithAddress:(unsigned long)address; - (void)resultsWindowWillClose:(id)results; - (void)setSearchResultsHeight:(int)srh; - (int)searchResultsHeight; - (void)foundSelectionChanged:(NSArray *)selected; - (void)openFoundSelection:(NSArray *)selection; - (void)fileSystemWillChange:(NSNotification *)notif; - (void)fileSystemDidChange:(NSNotification *)notif; - (void)watcherNotification:(NSNotification *)notif; - (void)tile; - (void)adjustMatrix; - (void)updateDefaults; @end @interface Finder (LSFolders) - (void)lsfolderDragOperation:(NSData *)opinfo concludedAtPath:(NSString *)path; - (BOOL)openLiveSearchFolderAtPath:(NSString *)path; - (LSFolder *)addLiveSearchFolderWithPath:(NSString *)path createIndex:(BOOL)index; - (void)removeLiveSearchFolder:(LSFolder *)folder; - (LSFolder *)lsfolderWithNode:(FSNode *)node; - (LSFolder *)lsfolderWithPath:(NSString *)path; @end @interface NSDictionary (ColumnsSort) - (int)compareColInfo:(NSDictionary *)dict; @end #endif // FINDER_H gworkspace-1.1.0/GWorkspace/Finder/Finder.m0000644000175000001440000007722014751213523017773 0ustar multixusers/* Finder.m * * Copyright (C) 2005-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "Finder.h" #import "FinderModulesProtocol.h" #import "FindModuleView.h" #import "SearchPlacesBox.h" #import "SearchPlacesCell.h" #import "SearchResults.h" #import "LSFolder.h" #import "FSNodeRep.h" #import "GWorkspace.h" #import "GWFunctions.h" #define WINH (262.0) #define FMVIEWH (34.0) #define BORDER (4.0) #define HMARGIN (12.0) #define SELECTION 0 #define PLACES 1 #define CELLS_HEIGHT (28.0) #define CHECKSIZE(sz) \ if (sz.width < 0) sz.width = 0; \ if (sz.height < 0) sz.height = 0 static NSString *nibName = @"Finder"; static Finder *finder = nil; @implementation Finder + (Finder *)finder { if (finder == nil) { finder = [[Finder alloc] init]; } return finder; } - (void)dealloc { [nc removeObserver: self]; RELEASE (modules); RELEASE (fmviews); RELEASE (currentSelection); RELEASE (win); RELEASE (searchResults); RELEASE (lsFolders); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id defentry; NSArray *usedModules; NSRect rect; NSSize cs, ms; NSUInteger i; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } fmviews = [NSMutableArray new]; modules = nil; currentSelection = nil; searchResults = [NSMutableArray new]; lsFolders = [NSMutableArray new]; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; ws = [NSWorkspace sharedWorkspace]; gworkspace = [GWorkspace gworkspace]; [win setTitle: NSLocalizedString(@"Finder", @"")]; [win setDelegate: self]; [win setFrameUsingName: @"finder" force: YES]; [placesBox setFinder: self]; rect = [[(NSBox *)placesBox contentView] bounds]; placesScroll = [[NSScrollView alloc] initWithFrame: rect]; [placesScroll setBorderType: NSBezelBorder]; [placesScroll setHasHorizontalScroller: NO]; [placesScroll setHasVerticalScroller: YES]; [(NSBox *)placesBox setContentView: placesScroll]; RELEASE (placesScroll); placesMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSListModeMatrix prototype: [[SearchPlacesCell new] autorelease] numberOfRows: 0 numberOfColumns: 0]; [placesMatrix setTarget: self]; [placesMatrix setAction: @selector(placesMatrixAction:)]; [placesMatrix setIntercellSpacing: NSZeroSize]; [placesMatrix setCellSize: NSMakeSize(1, CELLS_HEIGHT)]; [placesMatrix setAutoscroll: YES]; [placesMatrix setAllowsEmptySelection: YES]; cs = [placesScroll contentSize]; ms = [placesMatrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [placesMatrix setCellSize: ms]; [placesScroll setDocumentView: placesMatrix]; RELEASE (placesMatrix); defentry = [defaults objectForKey: @"saved_places"]; if (defentry && [defentry isKindOfClass: [NSArray class]]) { for (i = 0; i < [defentry count]; i++) { NSString *path = [defentry objectAtIndex: i]; if ([fm fileExistsAtPath: path]) { [self addSearchPlaceWithPath: path]; } } } [removePlaceButt setEnabled: ([[placesMatrix cells] count] != 0)]; [self loadModules]; usedModules = [self usedModules]; for (i = 0; i < [usedModules count]; i++) { id module = [usedModules objectAtIndex: i]; id fmview = [[FindModuleView alloc] initWithDelegate: self]; [fmview setModule: module]; if ([usedModules count] == [modules count]) { [fmview setAddEnabled: NO]; } [[modulesBox contentView] addSubview: [fmview mainBox]]; [fmviews insertObject: fmview atIndex: [fmviews count]]; RELEASE (fmview); } for (i = 0; i < [fmviews count]; i++) { [[fmviews objectAtIndex: i] updateMenuForModules: modules]; } [recursiveSwitch setState: NSOnState]; defentry = [defaults objectForKey: @"search_res_h"]; if (defentry) { searchResh = [defentry intValue]; } else { searchResh = 0; } defentry = [defaults objectForKey: @"lsfolders_paths"]; if (defentry) { for (i = 0; i < [defentry count]; i++) { NSString *lsfpath = [defentry objectAtIndex: i]; if ([fm fileExistsAtPath: lsfpath]) { if ([self addLiveSearchFolderWithPath: lsfpath createIndex: NO] != nil) { GWDebugLog(@"added lsf with path %@", lsfpath); } } } } [nc addObserver: self selector: @selector(fileSystemWillChange:) name: @"GWFileSystemWillChangeNotification" object: nil]; [nc addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; [nc addObserver: self selector: @selector(watcherNotification:) name: @"GWFileWatcherFileDidChangeNotification" object: nil]; /* Internationalization */ [searchLabel setStringValue: NSLocalizedString(@"Search in:", @"")]; [wherePopUp removeAllItems]; [wherePopUp insertItemWithTitle: NSLocalizedString(@"Current selection", @"") atIndex: SELECTION]; [wherePopUp insertItemWithTitle: NSLocalizedString(@"Specific places", @"") atIndex: PLACES]; [addPlaceButt setTitle: NSLocalizedString(@"Add", @"")]; [removePlaceButt setTitle: NSLocalizedString(@"Remove", @"")]; [itemsLabel setStringValue: NSLocalizedString(@"Search for items whose:", @"")]; [recursiveSwitch setTitle: NSLocalizedString(@"Recursive", @"")]; [findButt setTitle: NSLocalizedString(@"Search", @"")]; usesSearchPlaces = [defaults boolForKey: @"uses_search_places"]; if (usesSearchPlaces) { [wherePopUp selectItemAtIndex: PLACES]; } else { [wherePopUp selectItemAtIndex: SELECTION]; } [self chooseSearchPlacesType: wherePopUp]; } return self; } - (void)activate { [win makeKeyAndOrderFront: nil]; [self tile]; } - (void)loadModules { NSString *bundlesDir; NSEnumerator *enumerator; NSString *path; NSMutableArray *bundlesPaths; NSMutableArray *unsortedModules; NSDictionary *lastUsedModules; NSArray *usedNames; NSUInteger index; NSUInteger i; bundlesPaths = [NSMutableArray array]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { NSEnumerator *enumerator; bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; enumerator = [[fm directoryContentsAtPath: bundlesDir] objectEnumerator]; while ((path = [enumerator nextObject])) { if ([[path pathExtension] isEqual: @"finder"]) { [bundlesPaths addObject: [bundlesDir stringByAppendingPathComponent: path]]; } } } unsortedModules = [NSMutableArray array]; for (i = 0; i < [bundlesPaths count]; i++) { CREATE_AUTORELEASE_POOL(arp); NSString *bpath = [bundlesPaths objectAtIndex: i]; NSBundle *bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; if ([principalClass conformsToProtocol: @protocol(FinderModulesProtocol)]) { id module = [[principalClass alloc] initInterface]; [unsortedModules addObject: module]; RELEASE ((id)module); } } RELEASE (arp); } if ([unsortedModules count] == 0) { NSRunAlertPanel(NSLocalizedString(@"error", @""), NSLocalizedString(@"No Finder modules! Quitting now.", @""), NSLocalizedString(@"OK", @""), nil, nil); [NSApp terminate: self]; } lastUsedModules = [[NSUserDefaults standardUserDefaults] objectForKey: @"last_used_modules"]; if ((lastUsedModules == nil) || ([lastUsedModules count] == 0)) { lastUsedModules = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: 0], NSLocalizedString(@"name", @""), [NSNumber numberWithInt: 1], NSLocalizedString(@"kind", @""), [NSNumber numberWithInt: 2], NSLocalizedString(@"size", @""), [NSNumber numberWithInt: 3], NSLocalizedString(@"owner", @""), [NSNumber numberWithInt: 4], NSLocalizedString(@"date created", @""), [NSNumber numberWithInt: 5], NSLocalizedString(@"date modified", @""), [NSNumber numberWithInt: 6], NSLocalizedString(@"contents", @""), nil]; usedNames = [NSArray arrayWithObject: NSLocalizedString(@"name", @"")]; } else { usedNames = [lastUsedModules allKeys]; } index = [usedNames count]; for (i = 0; i < [unsortedModules count]; i++) { id module = [unsortedModules objectAtIndex: i]; NSString *mname = [module moduleName]; NSNumber *num = [lastUsedModules objectForKey: mname]; if (num) { [module setIndex: [num intValue]]; [module setInUse: [usedNames containsObject: mname]]; } else { [module setIndex: index]; [module setInUse: NO]; index++; } } modules = [[unsortedModules sortedArrayUsingSelector: @selector(compareModule:)] mutableCopy]; } - (NSArray *)modules { return modules; } - (NSArray *)usedModules { NSMutableArray *used = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; if ([module used]) { [used addObject: module]; } } return used; } - (id)firstUnusedModule { NSUInteger i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; if ([module used] == NO) { return module; } } return nil; } - (id)moduleWithName:(NSString *)mname { NSUInteger i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; if ([[module moduleName] isEqual: mname]) { return module; } } return nil; } - (void)addModule:(FindModuleView *)aview { NSArray *usedModules = [self usedModules]; if ([usedModules count] < [modules count]) { NSUInteger index = [fmviews indexOfObjectIdenticalTo: aview]; id module = [self firstUnusedModule]; id fmview = [[FindModuleView alloc] initWithDelegate: self]; NSUInteger count; NSUInteger i; [module setInUse: YES]; [fmview setModule: module]; [[modulesBox contentView] addSubview: [fmview mainBox]]; [fmviews insertObject: fmview atIndex: index + 1]; RELEASE (fmview); count = [fmviews count]; for (i = 0; i < count; i++) { fmview = [fmviews objectAtIndex: i]; [fmview updateMenuForModules: modules]; if (count == [modules count]) { [fmview setAddEnabled: NO]; } if (count > 1) { [fmview setRemoveEnabled: YES]; } } [self tile]; } } - (void)removeModule:(FindModuleView *)aview { if ([fmviews count] > 1) { NSUInteger count; NSUInteger i; [[aview module] setInUse: NO]; [[aview mainBox] removeFromSuperview]; [fmviews removeObject: aview]; count = [fmviews count]; for (i = 0; i < count; i++) { id fmview = [fmviews objectAtIndex: i]; [fmview updateMenuForModules: modules]; [fmview setAddEnabled: YES]; if (count == 1) { [fmview setRemoveEnabled: NO]; } } [self tile]; } } - (void)findModuleView:(FindModuleView *)aview changeModuleTo:(NSString *)mname { id module = [self moduleWithName: mname]; if (module && ([aview module] != module)) { NSUInteger i; [[aview module] setInUse: NO]; [module setInUse: YES]; [aview setModule: module]; for (i = 0; i < [fmviews count]; i++) { [[fmviews objectAtIndex: i] updateMenuForModules: modules]; } } } - (IBAction)chooseSearchPlacesType:(id)sender { NSArray *cells = [placesMatrix cells]; NSUInteger i; usesSearchPlaces = ([sender indexOfSelectedItem] == PLACES); for (i = 0; i < [cells count]; i++) { [[cells objectAtIndex: i] setEnabled: usesSearchPlaces]; } [placesMatrix deselectAllCells]; [placesMatrix setNeedsDisplay: YES]; [addPlaceButt setEnabled: usesSearchPlaces]; [removePlaceButt setEnabled: NO]; } - (NSDragOperation)draggingEnteredInSearchPlaces:(id )sender { if (usesSearchPlaces) { NSPasteboard *pb = [sender draggingPasteboard]; splacesDndTarget = NO; if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSArray *cells = [placesMatrix cells]; NSUInteger count = [sourcePaths count]; NSUInteger i; if (count == 0) return NSDragOperationNone; for (i = 0; i < [cells count]; i++) { SearchPlacesCell *cell = [cells objectAtIndex: i]; if ([sourcePaths containsObject: [cell path]]) return NSDragOperationNone; } splacesDndTarget = YES; return [sender draggingSourceOperationMask]; } } return NSDragOperationNone; } - (NSDragOperation)draggingUpdatedInSearchPlaces:(id )sender { if (splacesDndTarget && usesSearchPlaces) { return [sender draggingSourceOperationMask]; } return NSDragOperationNone; } - (void)concludeDragOperationInSearchPlaces:(id )sender { if (usesSearchPlaces) { NSPasteboard *pb = [sender draggingPasteboard]; if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSUInteger i; for (i = 0; i < [sourcePaths count]; i++) { [self addSearchPlaceWithPath: [sourcePaths objectAtIndex: i]]; } } } splacesDndTarget = NO; } - (IBAction)addSearchPlaceFromDialog:(id)sender { NSOpenPanel *openPanel; NSArray *filenames; NSInteger result; NSUInteger i; openPanel = [NSOpenPanel openPanel]; [openPanel setTitle: NSLocalizedString(@"open", @"")]; [openPanel setAllowsMultipleSelection: YES]; [openPanel setCanChooseFiles: YES]; [openPanel setCanChooseDirectories: YES]; result = [openPanel runModalForDirectory: systemRoot() file: nil types: nil]; if (result != NSOKButton) return; filenames = [openPanel filenames]; for (i = 0; i < [filenames count]; i++) { [self addSearchPlaceWithPath: [filenames objectAtIndex: i]]; } } - (void)addSearchPlaceWithPath:(NSString *)spath { NSArray *cells = [placesMatrix cells]; NSUInteger count = [cells count]; BOOL found = NO; NSUInteger i; for (i = 0; i < [cells count]; i++) { NSString *srchpath = [[cells objectAtIndex: i] path]; if ([srchpath isEqual: spath]) { found = YES; break; } } if (found == NO) { FSNode *node = [FSNode nodeWithPath: spath]; SEL compareSel = [[FSNodeRep sharedInstance] defaultCompareSelector]; SearchPlacesCell *cell; [placesMatrix insertRow: count]; cell = [placesMatrix cellAtRow: count column: 0]; [cell setNode: node]; [cell setLeaf: YES]; [cell setIcon]; [placesMatrix sortUsingSelector: compareSel]; [self adjustMatrix]; } } - (void)placesMatrixAction:(id)sender { if ([[placesMatrix cells] count] && usesSearchPlaces) { [removePlaceButt setEnabled: YES]; } } - (IBAction)removeSearchPlaceButtAction:(id)sender { NSArray *cells = [placesMatrix selectedCells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { [self removeSearchPlaceWithPath: [[cells objectAtIndex: i] path]]; } } - (void)removeSearchPlaceWithPath:(NSString *)spath { NSArray *cells = [placesMatrix cells]; NSUInteger i; for (i = 0; i < [cells count]; i++) { SearchPlacesCell *cell = [cells objectAtIndex: i]; if ([[cell path] isEqual: spath]) { NSInteger row, col; [placesMatrix getRow: &row column: &col ofCell: cell]; [placesMatrix removeRow: row]; [self adjustMatrix]; // TODO - STOP SEARCHING IN THIS PATH ! break; } } if ([[placesMatrix cells] count] == 0) { [removePlaceButt setEnabled: NO]; } } - (NSArray *)searchPlacesPaths { NSArray *cells = [placesMatrix cells]; if (cells && [cells count]) { NSMutableArray *paths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [cells count]; i++) { [paths addObject: [[cells objectAtIndex: i] path]]; } return paths; } return [NSArray array]; } - (NSArray *)selectedSearchPlacesPaths { NSArray *cells = [placesMatrix selectedCells]; if (cells && [cells count]) { NSMutableArray *paths = [NSMutableArray array]; NSUInteger i; RETAIN (cells); for (i = 0; i < [cells count]; i++) { NSString *path = [[cells objectAtIndex: i] path]; if ([fm fileExistsAtPath: path]) { [paths addObject: path]; } else { [self removeSearchPlaceWithPath: path]; } } RELEASE (cells); return paths; } return nil; } - (void)setCurrentSelection:(NSArray *)paths { NSString *elmstr = NSLocalizedString(@"elements", @""); NSString *title; ASSIGN (currentSelection, paths); if ([currentSelection count] == 1) { title = [[currentSelection objectAtIndex: 0] lastPathComponent]; } else { title = [NSString stringWithFormat: @"%lu %@", (unsigned long)[currentSelection count], elmstr]; } [[wherePopUp itemAtIndex: SELECTION] setTitle: title]; [wherePopUp setNeedsDisplay: YES]; } - (IBAction)startFind:(id)sender { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSArray *selection; NSUInteger i; if (usesSearchPlaces == NO) { if (currentSelection == nil) { NSRunAlertPanel(nil, NSLocalizedString(@"No selection!", @""), NSLocalizedString(@"OK", @""), nil, nil); return; } else { selection = currentSelection; } } else { selection = [self selectedSearchPlacesPaths]; if (selection == nil) { NSRunAlertPanel(nil, NSLocalizedString(@"No selection!", @""), NSLocalizedString(@"OK", @""), nil, nil); return; } } for (i = 0; i < [fmviews count]; i++) { id module = [[fmviews objectAtIndex: i] module]; NSDictionary *dict = [module searchCriteria]; if (dict) { [criteria setObject: dict forKey: NSStringFromClass([module class])]; } } if ([criteria count]) { SearchResults *results = [SearchResults new]; [searchResults addObject: results]; RELEASE (results); [results activateForSelection: selection withSearchCriteria: criteria recursive: ([recursiveSwitch state] == NSOnState)]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"No search criteria!", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)stopAllSearchs { NSUInteger i; for (i = 0; i < [searchResults count]; i++) { SearchResults *results = [searchResults objectAtIndex: i]; [results stopSearch: nil]; if ([[results win] isVisible]) { [[results win] close]; } } } - (id)resultWithAddress:(unsigned long)address { NSUInteger i; for (i = 0; i < [searchResults count]; i++) { SearchResults *results = [searchResults objectAtIndex: i]; if ([results memAddress] == address) { return results; } } return nil; } - (void)resultsWindowWillClose:(id)results { [searchResults removeObject: results]; } - (void)setSearchResultsHeight:(int)srh { searchResh = srh; } - (int)searchResultsHeight { return searchResh; } - (void)foundSelectionChanged:(NSArray *)selected { [gworkspace selectionChanged: selected]; } - (void)openFoundSelection:(NSArray *)selection { NSUInteger i; for (i = 0; i < [selection count]; i++) { FSNode *node = [selection objectAtIndex: i]; if ([node isDirectory] || [node isMountPoint]) { if ([node isApplication]) { [ws launchApplication: [node path]]; } else if ([node isPackage]) { [gworkspace openFile: [node path]]; } else { [gworkspace newViewerAtPath: [node path]]; } } else if ([node isPlain] || [node isExecutable]) { [gworkspace openFile: [node path]]; } else if ([node isApplication]) { [ws launchApplication: [node path]]; } } } - (void)fileSystemWillChange:(NSNotification *)notif { NSDictionary *info = [notif object]; NSUInteger i; for (i = 0; i < [lsFolders count]; i++) { LSFolder *folder = [lsFolders objectAtIndex: i]; FSNode *node = [folder node]; if ([node involvedByFileOperation: info]) { [gworkspace removeWatcherForPath: [node path]]; [folder setWatcherSuspended: YES]; } } } - (void)fileSystemDidChange:(NSNotification *)notif { CREATE_AUTORELEASE_POOL(arp); NSDictionary *info = [notif object]; NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSArray *origfiles = [info objectForKey: @"origfiles"]; NSMutableArray *srcpaths = [NSMutableArray array]; NSMutableArray *dstpaths = [NSMutableArray array]; BOOL copy, move, remove; NSUInteger i, j, count; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { srcpaths = [NSMutableArray arrayWithObject: source]; dstpaths = [NSMutableArray arrayWithObject: destination]; } else { if ([operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: NSWorkspaceRecycleOperation]) { for (i = 0; i < [files count]; i++) { NSString *fname = [origfiles objectAtIndex: i]; [srcpaths addObject: [source stringByAppendingPathComponent: fname]]; fname = [files objectAtIndex: i]; [dstpaths addObject: [destination stringByAppendingPathComponent: fname]]; } } else { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; [srcpaths addObject: [source stringByAppendingPathComponent: fname]]; if (destination != nil) [dstpaths addObject: [destination stringByAppendingPathComponent: fname]]; } } } copy = ([operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceDuplicateOperation]); move = ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: @"GWorkspaceRenameOperation"]); remove = ([operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation]); // Search Places if (move || remove) { NSArray *placesPaths = [self searchPlacesPaths]; NSMutableArray *deletedPlaces = [NSMutableArray array]; for (i = 0; i < [srcpaths count]; i++) { NSString *srcpath = [srcpaths objectAtIndex: i]; for (j = 0; j < [placesPaths count]; j++) { NSString *path = [placesPaths objectAtIndex: j]; if ([path isEqual: srcpath] || subPathOfPath(srcpath, path)) { [deletedPlaces addObject: path]; } } } if ([deletedPlaces count]) { for (i = 0; i < [deletedPlaces count]; i++) { [self removeSearchPlaceWithPath: [deletedPlaces objectAtIndex: i]]; } } } // LSFolders count = [lsFolders count]; for (i = 0; i < count; i++) { LSFolder *folder = [lsFolders objectAtIndex: i]; FSNode *node = [folder node]; FSNode *newnode = nil; BOOL found = NO; for (j = 0; j < [srcpaths count]; j++) { NSString *srcpath = [srcpaths objectAtIndex: j]; NSString *dstpath = [dstpaths objectAtIndex: j]; if (move || copy) { if ([[node path] isEqual: srcpath]) { if ([fm fileExistsAtPath: dstpath]) { newnode = [FSNode nodeWithPath: dstpath]; found = YES; } break; } else if ([node isSubnodeOfPath: srcpath]) { NSString *newpath = pathRemovingPrefix([node path], srcpath); newpath = [dstpath stringByAppendingPathComponent: newpath]; if ([fm fileExistsAtPath: newpath]) { newnode = [FSNode nodeWithPath: newpath]; found = YES; } break; } } else if (remove) { if ([[node path] isEqual: srcpath] || [node isSubnodeOfPath: srcpath]) { found = YES; break; } } } [folder setWatcherSuspended: NO]; if (found) { if (move) { GWDebugLog(@"moved lsf with path %@ to path %@", [node path], [newnode path]); [folder setNode: newnode]; } else if (copy) { [self addLiveSearchFolderWithPath: [newnode path] createIndex: NO]; GWDebugLog(@"added lsf with path %@", [newnode path]); } else if (remove) { GWDebugLog(@"removed lsf with path %@", [node path]); [self removeLiveSearchFolder: folder]; count--; i--; } } } RELEASE (arp); } - (void)watcherNotification:(NSNotification *)notif { NSDictionary *info = [notif object]; NSString *event = [info objectForKey: @"event"]; if ([event isEqual: @"GWWatchedPathDeleted"]) { LSFolder *folder = [self lsfolderWithPath: [info objectForKey: @"path"]]; if (folder) { GWDebugLog(@"removed (watcher) lsf with path %@", [[folder node] path]); [self removeLiveSearchFolder: folder]; } } } - (void)tile { NSRect wrect = [win frame]; NSRect mbrect = [modulesBox bounds]; NSUInteger count = [fmviews count]; CGFloat hspace = (count * FMVIEWH) + HMARGIN + BORDER; NSUInteger i; if (mbrect.size.height != hspace) { if (wrect.size.height != WINH) { wrect.origin.y -= (hspace - mbrect.size.height); } wrect.size.height += (hspace - mbrect.size.height); [win setFrame: wrect display: NO]; } mbrect = [modulesBox bounds]; for (i = 0; i < count; i++) { FindModuleView *fmview = [fmviews objectAtIndex: i]; NSBox *fmbox = [fmview mainBox]; NSRect mbr = [fmbox frame]; CGFloat posy = mbrect.size.height - (FMVIEWH * (i + 1)) - BORDER; if (mbr.origin.y != posy) { mbr.origin.y = posy; [fmbox setFrame: mbr]; } } } - (void)adjustMatrix { [placesMatrix setCellSize: NSMakeSize([placesScroll contentSize].width, CELLS_HEIGHT)]; [placesMatrix sizeToCells]; [placesMatrix setNeedsDisplay: YES]; } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSArray *cells = [placesMatrix cells]; NSMutableArray *savedPlaces = [NSMutableArray array]; NSMutableArray *lsfpaths = [NSMutableArray array]; NSUInteger i; if (cells && [cells count]) { for (i = 0; i < [cells count]; i++) { NSString *srchpath = [[cells objectAtIndex: i] path]; if ([fm fileExistsAtPath: srchpath]) { [savedPlaces addObject: srchpath]; } } } [defaults setObject: savedPlaces forKey: @"saved_places"]; [defaults setBool: usesSearchPlaces forKey: @"uses_search_places"]; for (i = 0; i < [fmviews count]; i++) { FindModuleView *fmview = [fmviews objectAtIndex: i]; id module = [fmview module]; [dict setObject: [NSNumber numberWithInt: i] forKey: [module moduleName]]; } [defaults setObject: dict forKey: @"last_used_modules"]; [defaults setObject: [NSNumber numberWithInt: searchResh] forKey: @"search_res_h"]; for (i = 0; i < [lsFolders count]; i++) { LSFolder *folder = [lsFolders objectAtIndex: i]; FSNode *node = [folder node]; if ([node isValid]) { [lsfpaths addObject: [node path]]; } } [defaults setObject: lsfpaths forKey: @"lsfolders_paths"]; [win saveFrameUsingName: @"finder"]; } - (BOOL)windowShouldClose:(id)sender { [win saveFrameUsingName: @"finder"]; return YES; } @end @implementation Finder (LSFolders) - (void)lsfolderDragOperation:(NSData *)opinfo concludedAtPath:(NSString *)path { NSDictionary *dict = [NSUnarchiver unarchiveObjectWithData: opinfo]; unsigned long address = [[dict objectForKey: @"sender"] unsignedLongValue]; SearchResults *results = [self resultWithAddress: address]; if (results) { [results createLiveSearchFolderAtPath: path]; } } - (BOOL)openLiveSearchFolderAtPath:(NSString *)path { LSFolder *folder = [self lsfolderWithPath: path]; if (folder == nil) { folder = [self addLiveSearchFolderWithPath: path createIndex: NO]; } if (folder) { [folder updateIfNeeded: nil]; } return YES; } - (LSFolder *)addLiveSearchFolderWithPath:(NSString *)path createIndex:(BOOL)index { LSFolder *folder = [self lsfolderWithPath: path]; if (folder == nil) { FSNode *node = [FSNode nodeWithPath: path]; folder = [[LSFolder alloc] initForFinder: self withNode: node needsIndexing: index]; if (folder) { [lsFolders addObject: folder]; RELEASE (folder); } } if (index) { GWDebugLog(@"creating trees for lsf at %@", path); } return folder; } - (void)removeLiveSearchFolder:(LSFolder *)folder { [folder endUpdate]; [folder closeWindow]; [lsFolders removeObject: folder]; } - (LSFolder *)lsfolderWithNode:(FSNode *)node { NSUInteger i; for (i = 0; i < [lsFolders count]; i++) { LSFolder *folder = [lsFolders objectAtIndex: i]; if ([[folder node] isEqual: node]) { return folder; } } return nil; } - (LSFolder *)lsfolderWithPath:(NSString *)path { NSUInteger i; for (i = 0; i < [lsFolders count]; i++) { LSFolder *folder = [lsFolders objectAtIndex: i]; if ([[[folder node] path] isEqual: path]) { return folder; } } return nil; } @end @implementation NSDictionary (ColumnsSort) - (int)compareColInfo:(NSDictionary *)dict { NSNumber *p1 = [self objectForKey: @"position"]; NSNumber *p2 = [dict objectForKey: @"position"]; return [p1 compare: p2]; } @end gworkspace-1.1.0/GWorkspace/Finder/LiveSearch/0000755000175000001440000000000014751213523020423 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/LiveSearch/LSFEditor.h0000644000175000001440000000355214751213523022374 0ustar multixusers/* LSFEditor.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef LSF_EDITOR_H #define LSF_EDITOR_H #include @class NSMatrix; @class LSFolder; @class FindModuleView; @interface LSFEditor : NSObject { IBOutlet id win; IBOutlet id searchLabel; IBOutlet NSScrollView *placesScroll; NSMatrix *placesMatrix; IBOutlet id modulesLabel; IBOutlet NSBox *modulesBox; IBOutlet id recursiveSwitch; IBOutlet id cancelButt; IBOutlet id saveButt; NSMutableArray *modules; NSMutableArray *fmviews; id folder; id finder; } - (id)initForFolder:(id)fldr; - (void)setModules; - (void)activate; - (NSArray *)modules; - (NSArray *)usedModules; - (id)firstUnusedModule; - (id)moduleWithName:(NSString *)mname; - (void)addModule:(FindModuleView *)aview; - (void)removeModule:(FindModuleView *)aview; - (void)findModuleView:(FindModuleView *)aview changeModuleTo:(NSString *)mname; - (IBAction)buttonsAction:(id)sender; - (void)tile; - (NSWindow *)win; @end #endif // LSF_EDITOR_H gworkspace-1.1.0/GWorkspace/Finder/LiveSearch/LSFEditor.m0000644000175000001440000002342714751213523022404 0ustar multixusers/* LSFEditor.m * * Copyright (C) 2005-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "LSFEditor.h" #import "LSFolder.h" #import "FindModuleView.h" #import "FinderModulesProtocol.h" #import "Finder.h" #import "SearchPlacesCell.h" #import "GWFunctions.h" #define WINH (186.0) #define FMVIEWH (34.0) #define BORDER (4.0) #define HMARGIN (12.0) #define CELLS_HEIGHT (28.0) #define ICON_SIZE NSMakeSize(24.0, 24.0) #define CHECKSIZE(sz) \ if (sz.width < 0) sz.width = 0; \ if (sz.height < 0) sz.height = 0 static NSString *nibName = @"LSFEditor"; @implementation LSFEditor - (void)dealloc { RELEASE (modules); RELEASE (fmviews); [super dealloc]; } - (id)initForFolder:(id)fldr { self = [super init]; if (self) { NSDictionary *sizesDict; NSArray *searchPaths; SEL compareSel; NSSize cs, ms; NSUInteger i; folder = fldr; finder = [Finder finder]; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } [win setTitle: [[folder node] name]]; [win setDelegate: self]; sizesDict = [folder getSizes]; if (sizesDict) { id entry = [sizesDict objectForKey: @"editor_win"]; if (entry) { [win setFrameFromString: entry]; } } [placesScroll setBorderType: NSBezelBorder]; [placesScroll setHasHorizontalScroller: NO]; [placesScroll setHasVerticalScroller: YES]; placesMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSListModeMatrix prototype: [[SearchPlacesCell new] autorelease] numberOfRows: 0 numberOfColumns: 0]; [placesMatrix setIntercellSpacing: NSZeroSize]; [placesMatrix setCellSize: NSMakeSize(1, CELLS_HEIGHT)]; [placesMatrix setAutoscroll: YES]; [placesMatrix setAllowsEmptySelection: YES]; cs = [placesScroll contentSize]; ms = [placesMatrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [placesMatrix setCellSize: ms]; [placesScroll setDocumentView: placesMatrix]; RELEASE (placesMatrix); searchPaths = [folder searchPaths]; for (i = 0; i < [searchPaths count]; i++) { int count = [[placesMatrix cells] count]; FSNode *node = [FSNode nodeWithPath: [searchPaths objectAtIndex: i]]; SearchPlacesCell *cell; [placesMatrix insertRow: count]; cell = [placesMatrix cellAtRow: count column: 0]; [cell setNode: node]; [cell setLeaf: YES]; [cell setIcon]; } compareSel = [[FSNodeRep sharedInstance] defaultCompareSelector]; [placesMatrix sortUsingSelector: compareSel]; [placesMatrix setCellSize: NSMakeSize([placesScroll contentSize].width, CELLS_HEIGHT)]; [placesMatrix sizeToCells]; [recursiveSwitch setState: ([folder recursive] ? NSOnState : NSOffState)]; [searchLabel setStringValue: NSLocalizedString(@"Searching in:", @"")]; [modulesLabel setStringValue: NSLocalizedString(@"Modules:", @"")]; [recursiveSwitch setStringValue: NSLocalizedString(@"recursive", @"")]; fmviews = [NSMutableArray new]; [self setModules]; } return self; } - (void)setModules { CREATE_AUTORELEASE_POOL(arp); NSArray *fmods = [finder modules]; NSDictionary *searchCriteria = [folder searchCriteria]; NSArray *names = [searchCriteria allKeys]; NSArray *usedModules; NSUInteger i; while ([fmviews count] > 0) { FindModuleView *view = [fmviews objectAtIndex: 0]; [[view mainBox] removeFromSuperview]; [fmviews removeObject: view]; } DESTROY (modules); modules = [NSMutableArray new]; for (i = 0; i < [fmods count]; i++) { Class mclass = [[fmods objectAtIndex: i] class]; NSString *cname = NSStringFromClass(mclass); id module = [[mclass alloc] initInterface]; if ([names containsObject: cname]) { [module setControlsState: [searchCriteria objectForKey: cname]]; [module setInUse: YES]; } else { [module setInUse: NO]; } [modules addObject: module]; RELEASE (module); } usedModules = [self usedModules]; for (i = 0; i < [usedModules count]; i++) { id module = [usedModules objectAtIndex: i]; id fmview = [[FindModuleView alloc] initWithDelegate: self]; [fmview setModule: module]; if ([usedModules count] == [modules count]) { [fmview setAddEnabled: NO]; } [[modulesBox contentView] addSubview: [fmview mainBox]]; [fmviews insertObject: fmview atIndex: [fmviews count]]; RELEASE (fmview); } RELEASE (arp); } - (void)activate { [win makeKeyAndOrderFront: nil]; [self tile]; } - (NSArray *)modules { return modules; } - (NSArray *)usedModules { NSMutableArray *used = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; if ([module used]) { [used addObject: module]; } } return used; } - (id)firstUnusedModule { NSUInteger i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; if ([module used] == NO) { return module; } } return nil; } - (id)moduleWithName:(NSString *)mname { int i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; if ([[module moduleName] isEqual: mname]) { return module; } } return nil; } - (void)addModule:(FindModuleView *)aview { NSArray *usedModules = [self usedModules]; if ([usedModules count] < [modules count]) { NSUInteger index = [fmviews indexOfObjectIdenticalTo: aview]; id module = [self firstUnusedModule]; id fmview = [[FindModuleView alloc] initWithDelegate: self]; NSUInteger count; NSUInteger i; [module setInUse: YES]; [fmview setModule: module]; [[modulesBox contentView] addSubview: [fmview mainBox]]; [fmviews insertObject: fmview atIndex: index + 1]; RELEASE (fmview); count = [fmviews count]; for (i = 0; i < count; i++) { fmview = [fmviews objectAtIndex: i]; [fmview updateMenuForModules: modules]; if (count == [modules count]) { [fmview setAddEnabled: NO]; } if (count > 1) { [fmview setRemoveEnabled: YES]; } } [self tile]; } } - (void)removeModule:(FindModuleView *)aview { if ([fmviews count] > 1) { int count; int i; [[aview module] setInUse: NO]; [[aview mainBox] removeFromSuperview]; [fmviews removeObject: aview]; count = [fmviews count]; for (i = 0; i < count; i++) { id fmview = [fmviews objectAtIndex: i]; [fmview updateMenuForModules: modules]; [fmview setAddEnabled: YES]; if (count == 1) { [fmview setRemoveEnabled: NO]; } } [self tile]; } } - (void)findModuleView:(FindModuleView *)aview changeModuleTo:(NSString *)mname { id module = [self moduleWithName: mname]; if (module && ([aview module] != module)) { int i; [[aview module] setInUse: NO]; [module setInUse: YES]; [aview setModule: module]; for (i = 0; i < [fmviews count]; i++) { [[fmviews objectAtIndex: i] updateMenuForModules: modules]; } } } - (IBAction)buttonsAction:(id)sender { if (sender == cancelButt) { [self setModules]; [self tile]; } else { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; int i; for (i = 0; i < [fmviews count]; i++) { id module = [[fmviews objectAtIndex: i] module]; NSDictionary *dict = [module searchCriteria]; if (dict) { [criteria setObject: dict forKey: NSStringFromClass([module class])]; } } if ([criteria count]) { [folder setSearchCriteria: criteria recursive: ([recursiveSwitch state] == NSOnState)]; } } } - (void)tile { NSRect wrect = [win frame]; NSRect mbrect = [modulesBox bounds]; int count = [fmviews count]; float hspace = (count * FMVIEWH) + HMARGIN + BORDER; int i; if (mbrect.size.height != hspace) { if (wrect.size.height != WINH) { wrect.origin.y -= (hspace - mbrect.size.height); } wrect.size.height += (hspace - mbrect.size.height); [win setFrame: wrect display: NO]; } mbrect = [modulesBox bounds]; for (i = 0; i < count; i++) { FindModuleView *fmview = [fmviews objectAtIndex: i]; NSBox *fmbox = [fmview mainBox]; NSRect mbr = [fmbox frame]; float posy = mbrect.size.height - (FMVIEWH * (i + 1)) - BORDER; if (mbr.origin.y != posy) { mbr.origin.y = posy; [fmbox setFrame: mbr]; } } } - (NSWindow *)win { return win; } // // NSWindow delegate // - (void)windowDidBecomeKey:(NSNotification *)aNotification { } - (BOOL)windowShouldClose:(id)sender { return YES; } - (void)windowWillClose:(NSNotification *)aNotification { [folder saveSizes]; } @end gworkspace-1.1.0/GWorkspace/Finder/LiveSearch/LSFolder.h0000644000175000001440000001015414751213523022247 0ustar multixusers/* LSFolder.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef LS_FOLDER_H #define LS_FOLDER_H #import #import "FSNodeRep.h" @class NSWindow; @class NSView; @class NSPopUpButton; @class NSButton; @class ResultsTableView; @class NSTableColumn; @class FSNPathComponentsViewer; @class NSImage; @class ProgrView; @protocol LSFUpdaterProtocol + (void)newUpdater:(NSDictionary *)info; - (oneway void)setFolderInfo:(NSData *)data; - (oneway void)updateSearchCriteria:(NSData *)data; - (oneway void)ddbdInsertTrees; - (oneway void)setAutoupdate:(unsigned)value; - (oneway void)fastUpdate; - (oneway void)terminate; @end @interface LSFolder : NSObject { FSNode *node; NSMutableDictionary *lsfinfo; id finder; id gworkspace; id editor; BOOL watcherSuspended; NSConnection *conn; NSConnection *updaterconn; id updater; BOOL waitingUpdater; SEL nextSelector; BOOL actionPending; BOOL updaterbusy; unsigned autoupdate; NSFileManager *fm; NSNotificationCenter *nc; IBOutlet NSWindow *win; BOOL forceclose; IBOutlet NSBox *topBox; IBOutlet NSBox *progBox; ProgrView *progView; IBOutlet NSTextField *elementsLabel; NSString *elementsStr; IBOutlet NSButton *editButt; IBOutlet NSPopUpButton *autoupdatePopUp; IBOutlet NSButton *updateButt; IBOutlet NSScrollView *resultsScroll; ResultsTableView *resultsView; NSTableColumn *nameColumn; NSTableColumn *parentColumn; NSTableColumn *dateColumn; NSTableColumn *sizeColumn; NSTableColumn *kindColumn; IBOutlet NSBox *pathBox; FSNPathComponentsViewer *pathViewer; int visibleRows; NSMutableArray *foundObjects; FSNInfoType currentOrder; } - (id)initForFinder:(id)fndr withNode:(FSNode *)anode needsIndexing:(BOOL)index; - (void)setNode:(FSNode *)anode; - (FSNode *)node; - (NSString *)infoPath; - (NSString *)foundPath; - (BOOL)watcherSuspended; - (void)setWatcherSuspended:(BOOL)value; - (BOOL)isOpen; - (IBAction)setAutoupdateCycle:(id)sender; - (IBAction)updateIfNeeded:(id)sender; - (void)startUpdater; - (void)checkUpdater:(id)sender; - (void)setUpdater:(id)anObject; - (void)updaterDidEndAction; - (void)updaterError:(NSString *)err; - (void)addFoundPath:(NSString *)path; - (void)removeFoundPath:(NSString *)path; - (void)clearFoundPaths; - (void)endUpdate; - (void)connectionDidDie:(NSNotification *)notification; - (void)loadInterface; - (void)closeWindow; - (NSDictionary *)getSizes; - (void)saveSizes; - (void)updateShownData; - (void)setCurrentOrder:(FSNInfoType)order; - (NSArray *)selectedObjects; - (void)selectObjects:(NSArray *)objects; - (void)doubleClickOnResultsView:(id)sender; - (IBAction)openEditor:(id)sender; - (NSArray *)searchPaths; - (NSDictionary *)searchCriteria; - (BOOL)recursive; - (void)setSearchCriteria:(NSDictionary *)criteria recursive:(BOOL)rec; - (void)fileSystemDidChange:(NSNotification *)notif; @end @interface ProgrView : NSView { NSMutableArray *images; unsigned index; NSTimeInterval rfsh; NSTimer *progTimer; BOOL animating; } - (id)initWithFrame:(NSRect)frameRect refreshInterval:(NSTimeInterval)refresh; - (void)start; - (void)stop; - (void)animate:(id)sender; @end #endif // LS_FOLDER_H gworkspace-1.1.0/GWorkspace/Finder/LiveSearch/LSFolder.m0000644000175000001440000007641114751213523022264 0ustar multixusers/* LSFolder.m * * Copyright (C) 2004-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: October 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "LSFolder.h" #import "ResultsTableView.h" #import "FSNTextCell.h" #import "FSNPathComponentsViewer.h" #import "LSFEditor.h" #import "Finder.h" #import "FinderModulesProtocol.h" #import "GWorkspace.h" #import "GWFunctions.h" #define CELLS_HEIGHT (28.0) #define LSF_INFO(x) [x stringByAppendingPathComponent: @"lsf.info"] #define LSF_FOUND(x) [x stringByAppendingPathComponent: @"lsf.found"] #define LSF_GEOM(x) [x stringByAppendingPathComponent: @"lsf.geometry"] static NSString *nibName = @"LSFolder"; BOOL isPathInResults(NSString *path, NSArray *results); @implementation LSFolder - (void)dealloc { [[NSDistributedNotificationCenter defaultCenter] removeObserver: self]; [nc removeObserver: self]; if (updaterconn != nil) { if (updater != nil) { [updater terminate]; } DESTROY (updater); DESTROY (updaterconn); } if (watcherSuspended == NO) { [gworkspace removeWatcherForPath: [node path]]; } RELEASE (node); RELEASE (lsfinfo); RELEASE (win); RELEASE (foundObjects); RELEASE (editor); RELEASE (elementsStr); DESTROY (conn); [super dealloc]; } - (id)initForFinder:(id)fndr withNode:(FSNode *)anode needsIndexing:(BOOL)index { self = [super init]; if (self) { NSDictionary *dict = nil; ASSIGN (node, anode); updater = nil; actionPending = NO; updaterbusy = NO; waitingUpdater = NO; autoupdate = 0; win = nil; forceclose = NO; finder = fndr; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; gworkspace = [GWorkspace gworkspace]; ASSIGN (elementsStr, NSLocalizedString(@"elements", @"")); if ([anode isValid] && [anode isDirectory]) { NSString *dpath = LSF_INFO([anode path]); if ([fm fileExistsAtPath: dpath]) { dict = [NSDictionary dictionaryWithContentsOfFile: dpath]; } } if (dict) { id entry = [dict objectForKey: @"autoupdate"]; if (entry) { autoupdate = [entry unsignedLongValue]; } lsfinfo = [dict mutableCopy]; watcherSuspended = NO; [gworkspace addWatcherForPath: [node path]]; if (index || (autoupdate > 0)) { if (index) { nextSelector = @selector(ddbdInsertTrees); actionPending = YES; } [self startUpdater]; } } else { DESTROY (self); } } return self; } - (void)setNode:(FSNode *)anode { if (watcherSuspended == NO) { [gworkspace removeWatcherForPath: [node path]]; } ASSIGN (node, anode); [gworkspace addWatcherForPath: [node path]]; if (win) { [win setTitle: [node name]]; } } - (FSNode *)node { return node; } - (NSString *)infoPath { return LSF_INFO([node path]); } - (NSString *)foundPath { return LSF_FOUND([node path]); } - (BOOL)watcherSuspended { return watcherSuspended; } - (void)setWatcherSuspended:(BOOL)value { watcherSuspended = value; } - (BOOL)isOpen { return (win && ([win isVisible])); } - (IBAction)setAutoupdateCycle:(id)sender { id item = [sender selectedItem]; unsigned cycle = [[item representedObject] unsignedLongValue]; [updater setAutoupdate: cycle]; } - (IBAction)updateIfNeeded:(id)sender { BOOL needupdate; if (sender == nil) { if (win) { needupdate = NO; } else { [self loadInterface]; needupdate = YES; } [win makeKeyAndOrderFront: nil]; visibleRows = (int)([resultsScroll bounds].size.height / CELLS_HEIGHT + 1); } else { needupdate = YES; } if (needupdate && (actionPending == NO)) { if ((updater == nil) || updaterbusy) { nextSelector = @selector(fastUpdate); actionPending = YES; if (updater == nil) { [self startUpdater]; } return; } [resultsView noteNumberOfRowsChanged]; [updateButt setEnabled: NO]; [autoupdatePopUp setEnabled: NO]; [progView start]; updaterbusy = YES; [updater fastUpdate]; } } - (void)startUpdater { NSString *cname; NSString *cmd; cname = [NSString stringWithFormat: @"search_%lu", (unsigned long)self]; if (conn == nil) { conn = [[NSConnection alloc] initWithReceivePort: (NSPort *)[NSPort port] sendPort: nil]; [conn setRootObject: self]; [conn registerName: cname]; [conn setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: conn]; } if (updaterconn != nil) { if (updater != nil) { [updater terminate]; } DESTROY (updater); [nc removeObserver: self name: NSConnectionDidDieNotification object: updaterconn]; [updaterconn invalidate]; DESTROY (updaterconn); } updater = nil; waitingUpdater = YES; [NSTimer scheduledTimerWithTimeInterval: 5.0 target: self selector: @selector(checkUpdater:) userInfo: nil repeats: NO]; cmd = [NSTask launchPathForTool: @"lsfupdater"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: [NSArray arrayWithObject: cname]]; } - (void)checkUpdater:(id)sender { if (waitingUpdater && (updater == nil)) { NSRunAlertPanel(nil, NSLocalizedString(@"unable to launch the updater task.", @""), NSLocalizedString(@"Continue", @""), nil, nil); } } - (void)setUpdater:(id)anObject { NSData *info = [NSArchiver archivedDataWithRootObject: lsfinfo]; [anObject setProtocolForProxy: @protocol(LSFUpdaterProtocol)]; updater = (id )[anObject retain]; [updater setFolderInfo: info]; [updater setAutoupdate: autoupdate]; if (actionPending) { actionPending = NO; updaterbusy = YES; if (nextSelector == @selector(fastUpdate)) { [updateButt setEnabled: NO]; [autoupdatePopUp setEnabled: NO]; [progView start]; } [(id)updater performSelector: nextSelector]; } } - (void)updaterDidEndAction { updaterbusy = NO; [progView stop]; [updateButt setEnabled: YES]; [autoupdatePopUp setEnabled: YES]; if (actionPending) { actionPending = NO; updaterbusy = YES; if (nextSelector == @selector(fastUpdate)) { [resultsView noteNumberOfRowsChanged]; [updateButt setEnabled: NO]; [autoupdatePopUp setEnabled: NO]; [progView start]; } [(id)updater performSelector: nextSelector]; } if ([self isOpen]) { [self updateShownData]; } } - (void)updaterError:(NSString *)err { NSRunAlertPanel(nil, err, NSLocalizedString(@"Continue", @""), nil, nil); [self endUpdate]; } - (void)addFoundPath:(NSString *)path { CREATE_AUTORELEASE_POOL(pool); FSNode *nd = [FSNode nodeWithPath: path]; if ([foundObjects containsObject: nd] == NO) { [foundObjects addObject: nd]; if ([foundObjects count] <= visibleRows) { [resultsView noteNumberOfRowsChanged]; } [elementsLabel setStringValue: [NSString stringWithFormat: @"%lu %@", (unsigned long)[foundObjects count], elementsStr]]; } RELEASE (pool); } - (void)removeFoundPath:(NSString *)path { CREATE_AUTORELEASE_POOL(pool); [foundObjects removeObject: [FSNode nodeWithPath: path]]; [elementsLabel setStringValue: [NSString stringWithFormat: @"%lu %@", (unsigned long)[foundObjects count], elementsStr]]; [resultsView noteNumberOfRowsChanged]; [pathViewer showComponentsOfSelection: [self selectedObjects]]; RELEASE (pool); } - (void)clearFoundPaths { [foundObjects removeAllObjects]; [elementsLabel setStringValue: [NSString stringWithFormat: @"%lu %@", (unsigned long)[foundObjects count], elementsStr]]; [resultsView noteNumberOfRowsChanged]; [pathViewer showComponentsOfSelection: nil]; } - (void)endUpdate { if (updater) { [nc removeObserver: self name: NSConnectionDidDieNotification object: updaterconn]; [updater terminate]; DESTROY (updater); DESTROY (updaterconn); actionPending = NO; updaterbusy = NO; [progView stop]; } } - (BOOL)connection:(NSConnection*)ancestor shouldMakeNewConnection:(NSConnection*)newConn { if (ancestor == conn) { ASSIGN (updaterconn, newConn); [updaterconn setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: updaterconn]; } return YES; } - (void)connectionDidDie:(NSNotification *)notification { id diedconn = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: diedconn]; if ((diedconn == conn) || (updaterconn && (diedconn == updaterconn))) { DESTROY (updater); DESTROY (updaterconn); if (diedconn == conn) { DESTROY (conn); } actionPending = NO; updaterbusy = NO; [progView stop]; [updateButt setEnabled: YES]; [autoupdatePopUp setEnabled: YES]; NSRunAlertPanel(nil, NSLocalizedString(@"updater connection died!", @""), NSLocalizedString(@"Continue", @""), nil, nil); } } - (void)loadInterface { #define MINUT 60 #define HOUR (MINUT * 60) #define DAY (HOUR * 24) if ([NSBundle loadNibNamed: nibName owner: self]) { NSDictionary *sizesDict = [self getSizes]; NSArray *items; id entry; NSRect r; int i; if (sizesDict) { entry = [sizesDict objectForKey: @"win_frame"]; if (entry) { [win setFrameFromString: entry]; } } [win setTitle: [node name]]; [win setReleasedWhenClosed: NO]; [win setAcceptsMouseMovedEvents: YES]; [win setDelegate: self]; progView = [[ProgrView alloc] initWithFrame: NSMakeRect(0, 0, 16, 16) refreshInterval: 0.1]; [progBox setContentView: progView]; RELEASE (progView); [elementsLabel setStringValue: @""]; [editButt setTitle: NSLocalizedString(@"Edit", @"")]; while ([[autoupdatePopUp itemArray] count] > 0) { [autoupdatePopUp removeItemAtIndex: 0]; } [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"no autoupdate", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: 0]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"one minute", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: MINUT]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"5 minutes", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: MINUT * 5]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"10 minutes", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: MINUT * 10]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"30 minutes", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: MINUT * 30]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"one hour", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: HOUR]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"2 hours", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: HOUR * 2]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"3 hours", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: HOUR * 3]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"6 hours", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: HOUR * 6]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"12 hours", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: HOUR * 12]]; [autoupdatePopUp addItemWithTitle: NSLocalizedString(@"a day", @"")]; [[autoupdatePopUp lastItem] setRepresentedObject: [NSNumber numberWithLong: DAY]]; items = [autoupdatePopUp itemArray]; for (i = 0; i < [items count]; i++) { NSMenuItem * item = [items objectAtIndex: i]; if ([[item representedObject] unsignedLongValue] == autoupdate) { [autoupdatePopUp selectItemAtIndex: i]; break; } } [updateButt setTitle: NSLocalizedString(@"Update now", @"")]; [resultsScroll setBorderType: NSBezelBorder]; [resultsScroll setHasHorizontalScroller: YES]; [resultsScroll setHasVerticalScroller: YES]; r = [[resultsScroll contentView] bounds]; resultsView = [[ResultsTableView alloc] initWithFrame: r]; [resultsView setDrawsGrid: NO]; [resultsView setAllowsColumnSelection: NO]; [resultsView setAllowsColumnReordering: YES]; [resultsView setAllowsColumnResizing: YES]; [resultsView setAllowsEmptySelection: YES]; [resultsView setAllowsMultipleSelection: YES]; [resultsView setRowHeight: CELLS_HEIGHT]; [resultsView setIntercellSpacing: NSZeroSize]; [resultsView sizeLastColumnToFit]; nameColumn = [[NSTableColumn alloc] initWithIdentifier: @"name"]; [nameColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [nameColumn setEditable: NO]; [nameColumn setResizable: YES]; [[nameColumn headerCell] setStringValue: NSLocalizedString(@"Name", @"")]; [[nameColumn headerCell] setAlignment: NSLeftTextAlignment]; [nameColumn setMinWidth: 80]; [nameColumn setWidth: 140]; [resultsView addTableColumn: nameColumn]; RELEASE (nameColumn); parentColumn = [[NSTableColumn alloc] initWithIdentifier: @"parent"]; [parentColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [parentColumn setEditable: NO]; [parentColumn setResizable: YES]; [[parentColumn headerCell] setStringValue: NSLocalizedString(@"Parent", @"")]; [[parentColumn headerCell] setAlignment: NSLeftTextAlignment]; [parentColumn setMinWidth: 80]; [parentColumn setWidth: 90]; [resultsView addTableColumn: parentColumn]; RELEASE (parentColumn); dateColumn = [[NSTableColumn alloc] initWithIdentifier: @"date"]; [dateColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [dateColumn setEditable: NO]; [dateColumn setResizable: YES]; [[dateColumn headerCell] setStringValue: NSLocalizedString(@"Date Modified", @"")]; [[dateColumn headerCell] setAlignment: NSLeftTextAlignment]; [dateColumn setMinWidth: 80]; [dateColumn setWidth: 90]; [resultsView addTableColumn: dateColumn]; RELEASE (dateColumn); sizeColumn = [[NSTableColumn alloc] initWithIdentifier: @"size"]; [sizeColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [sizeColumn setEditable: NO]; [sizeColumn setResizable: YES]; [[sizeColumn headerCell] setStringValue: NSLocalizedString(@"Size", @"")]; [[sizeColumn headerCell] setAlignment: NSLeftTextAlignment]; [sizeColumn setMinWidth: 50]; [sizeColumn setWidth: 50]; [resultsView addTableColumn: sizeColumn]; RELEASE (sizeColumn); kindColumn = [[NSTableColumn alloc] initWithIdentifier: @"kind"]; [kindColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [kindColumn setEditable: NO]; [kindColumn setResizable: YES]; [[kindColumn headerCell] setStringValue: NSLocalizedString(@"Type", @"")]; [[kindColumn headerCell] setAlignment: NSLeftTextAlignment]; [kindColumn setMinWidth: 80]; [kindColumn setWidth: 80]; [resultsView addTableColumn: kindColumn]; RELEASE (kindColumn); [resultsScroll setDocumentView: resultsView]; RELEASE (resultsView); if (sizesDict) { entry = [sizesDict objectForKey: @"columns_sizes"]; if (entry) { NSArray *columns = [resultsView tableColumns]; NSMutableArray *sortedCols = [NSMutableArray array]; NSArray *keys = [entry keysSortedByValueUsingSelector: @selector(compareColInfo:)]; int i; for (i = 0; i < [keys count]; i++) { NSString *identifier = [keys objectAtIndex: i]; int col = [resultsView columnWithIdentifier: identifier]; NSTableColumn *column = [columns objectAtIndex: col]; NSDictionary *cdict = [entry objectForKey: identifier]; float width = [[cdict objectForKey: @"width"] floatValue]; [column setWidth: width]; [sortedCols insertObject: column atIndex: [sortedCols count]]; } for (i = 0; i < [sortedCols count]; i++) { [resultsView removeTableColumn: [sortedCols objectAtIndex: i]]; } for (i = 0; i < [sortedCols count]; i++) { [resultsView addTableColumn: [sortedCols objectAtIndex: i]]; } } } [resultsView setDataSource: self]; [resultsView setDelegate: self]; [resultsView setTarget: self]; [resultsView setDoubleAction: @selector(doubleClickOnResultsView:)]; foundObjects = [NSMutableArray new]; if (sizesDict) { entry = [sizesDict objectForKey: @"sorting_order"]; if (entry) { [self setCurrentOrder: [entry intValue]]; } else { [self setCurrentOrder: FSNInfoNameType]; } } else { [self setCurrentOrder: FSNInfoNameType]; } r = [[pathBox contentView] bounds]; pathViewer = [[FSNPathComponentsViewer alloc] initWithFrame: r]; [pathBox setContentView: pathViewer]; RELEASE (pathViewer); [[NSDistributedNotificationCenter defaultCenter] addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; } else { NSLog(@"failed to load %@!", nibName); } } - (void)closeWindow { if (win && [win isVisible]) { forceclose = YES; [win close]; } } - (NSDictionary *)getSizes { NSString *dictPath = LSF_GEOM([node path]); if ([fm fileExistsAtPath: dictPath]) { return [NSDictionary dictionaryWithContentsOfFile: dictPath]; } return nil; } - (void)saveSizes { if (forceclose == NO) { NSMutableDictionary *columnsDict = [NSMutableDictionary dictionary]; NSArray *columns = [resultsView tableColumns]; NSString *dictpath = LSF_GEOM([node path]); NSMutableDictionary *sizesDict = nil; int i; if ([fm fileExistsAtPath: dictpath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: dictpath]; if (dict) { sizesDict = [dict mutableCopy]; } } if (sizesDict == nil) { sizesDict = [NSMutableDictionary new]; } [sizesDict setObject: [win stringWithSavedFrame] forKey: @"win_frame"]; if (editor) { [sizesDict setObject: [[editor win] stringWithSavedFrame] forKey: @"editor_win"]; } [sizesDict setObject: [NSNumber numberWithInt: currentOrder] forKey: @"sorting_order"]; for (i = 0; i < [columns count]; i++) { NSTableColumn *column = [columns objectAtIndex: i]; NSString *identifier = [column identifier]; NSNumber *cwidth = [NSNumber numberWithFloat: [column width]]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: [NSNumber numberWithInt: i] forKey: @"position"]; [dict setObject: cwidth forKey: @"width"]; [columnsDict setObject: dict forKey: identifier]; } [sizesDict setObject: columnsDict forKey: @"columns_sizes"]; [sizesDict writeToFile: dictpath atomically: YES]; RELEASE (sizesDict); } } - (void)updateShownData { SEL sortingSel; NSTableColumn *column; switch(currentOrder) { case FSNInfoNameType: sortingSel = @selector(compareAccordingToName:); column = nameColumn; break; case FSNInfoParentType: sortingSel = @selector(compareAccordingToParent:); column = parentColumn; break; case FSNInfoKindType: sortingSel = @selector(compareAccordingToKind:); column = kindColumn; break; case FSNInfoDateType: sortingSel = @selector(compareAccordingToDate:); column = dateColumn; break; case FSNInfoSizeType: sortingSel = @selector(compareAccordingToSize:); column = sizeColumn; break; default: sortingSel = @selector(compareAccordingToName:); column = nameColumn; break; } [foundObjects sortUsingSelector: sortingSel]; [resultsView setHighlightedTableColumn: column]; [resultsView reloadData]; [pathViewer showComponentsOfSelection: [self selectedObjects]]; } - (void)setCurrentOrder:(FSNInfoType)order { currentOrder = order; } - (NSArray *)selectedObjects { NSMutableArray *selected = [NSMutableArray array]; NSEnumerator *enumerator = [resultsView selectedRowEnumerator]; NSNumber *row; while ((row = [enumerator nextObject])) { FSNode *nd = [foundObjects objectAtIndex: [row intValue]]; if ([nd isValid]) { [selected addObject: nd]; } else { [foundObjects removeObject: nd]; [resultsView noteNumberOfRowsChanged]; } } return selected; } - (void)selectObjects:(NSArray *)objects { NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; NSUInteger i; for (i = 0; i < [foundObjects count]; i++) { FSNode *nd = [foundObjects objectAtIndex: i]; if ([objects containsObject: nd]) { [set addIndex: i]; } } if ([set count]) { [resultsView deselectAll: self]; [resultsView selectRowIndexes: set byExtendingSelection: NO]; [resultsView setNeedsDisplay: YES]; } } - (void)doubleClickOnResultsView:(id)sender { [finder openFoundSelection: [self selectedObjects]]; } - (IBAction)openEditor:(id)sender { if (editor == nil) { editor = [[LSFEditor alloc] initForFolder: self]; } [editor activate]; } - (NSArray *)searchPaths { return [lsfinfo objectForKey: @"searchpaths"]; } - (NSDictionary *)searchCriteria { return [lsfinfo objectForKey: @"criteria"]; } - (BOOL)recursive { id recursion = [lsfinfo objectForKey: @"recursion"]; return ((recursion == nil) || [recursion boolValue]); } - (void)setSearchCriteria:(NSDictionary *)criteria recursive:(BOOL)rec { if (([[self searchCriteria] isEqual: criteria] == NO) || ([self recursive] != rec)) { [lsfinfo setObject: criteria forKey: @"criteria"]; [lsfinfo setObject: [NSNumber numberWithBool: rec] forKey: @"recursion"]; if (updater) { NSData *info = [NSArchiver archivedDataWithRootObject: lsfinfo]; [updater updateSearchCriteria: info]; } } } - (void)fileSystemDidChange:(NSNotification *)notif { NSDictionary *info = [notif object]; NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSMutableArray *deletedObjects = [NSMutableArray array]; NSUInteger i, j; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; destination = [destination stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fullPath = [source stringByAppendingPathComponent: fname]; for (j = 0; j < [foundObjects count]; j++) { FSNode *nd = [foundObjects objectAtIndex: j]; NSString *path = [nd path]; if ([fullPath isEqual: path]) { [deletedObjects addObject: nd]; } } } } else if ([operation isEqual: @"GWorkspaceRenameOperation"]) { for (i = 0; i < [foundObjects count]; i++) { FSNode *nd = [foundObjects objectAtIndex: i]; NSString *path = [nd path]; if ([source isEqual: path]) { [deletedObjects addObject: nd]; } } } if ([deletedObjects count]) { for (i = 0; i < [deletedObjects count]; i++) { [foundObjects removeObject: [deletedObjects objectAtIndex: i]]; } [resultsView deselectAll: self]; [self updateShownData]; } } // // NSWindow delegate // - (void)windowDidBecomeKey:(NSNotification *)aNotification { NSArray *selected = [self selectedObjects]; if ([selected count]) { [finder foundSelectionChanged: selected]; } } - (BOOL)windowShouldClose:(id)sender { if (forceclose) { return YES; } return !updaterbusy; } - (void)windowWillClose:(NSNotification *)aNotification { if (editor) { [[editor win] close]; } [self saveSizes]; } // // NSTableDataSource protocol // - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [foundObjects count]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { FSNode *nd = [foundObjects objectAtIndex: rowIndex]; if (aTableColumn == nameColumn) { return [nd name]; } else if (aTableColumn == parentColumn) { return [[nd parentPath] lastPathComponent]; } else if (aTableColumn == dateColumn) { return [nd modDateDescription]; } else if (aTableColumn == sizeColumn) { return [nd sizeDescription]; } else if (aTableColumn == kindColumn) { return [nd typeDescription]; } return [NSString string]; } - (BOOL)tableView:(NSTableView *)aTableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard { NSMutableArray *paths = [NSMutableArray array]; NSMutableArray *parentPaths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [rows count]; i++) { int index = [[rows objectAtIndex: i] intValue]; FSNode *nd = [foundObjects objectAtIndex: index]; NSString *parentPath = [nd parentPath]; if (([parentPaths containsObject: parentPath] == NO) && (i != 0)) { NSString *msg = NSLocalizedString(@"You can't move objects with multiple parent paths!", @""); NSRunAlertPanel(nil, msg, NSLocalizedString(@"Continue", @""), nil, nil); return NO; } if ([nd isValid]) { [paths addObject: [nd path]]; [parentPaths addObject: parentPath]; } } [pboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; [pboard setPropertyList: paths forType: NSFilenamesPboardType]; return YES; } // // NSTableView delegate methods // - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { NSArray *selected = [self selectedObjects]; [pathViewer showComponentsOfSelection: selected]; if ([selected count]) { [finder foundSelectionChanged: selected]; } } - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if (aTableColumn == nameColumn) { FSNTextCell *cell = (FSNTextCell *)[nameColumn dataCell]; FSNode *nd = [foundObjects objectAtIndex: rowIndex]; [cell setIcon: [[FSNodeRep sharedInstance] iconOfSize: 24 forNode: nd]]; } else if (aTableColumn == dateColumn) { [(FSNTextCell *)[dateColumn dataCell] setDateCell: YES]; } } - (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn { NSString *newOrderStr = [tableColumn identifier]; FSNInfoType newOrder = FSNInfoNameType; if ([newOrderStr isEqual: @"name"]) { newOrder = FSNInfoNameType; } else if ([newOrderStr isEqual: @"parent"]) { newOrder = FSNInfoParentType; } else if ([newOrderStr isEqual: @"kind"]) { newOrder = FSNInfoKindType; } else if ([newOrderStr isEqual: @"date"]) { newOrder = FSNInfoDateType; } else if ([newOrderStr isEqual: @"size"]) { newOrder = FSNInfoSizeType; } if (newOrder != currentOrder) { NSArray *selected = [self selectedObjects]; currentOrder = newOrder; [self updateShownData]; if ([selected count]) { id nd = [selected objectAtIndex: 0]; NSUInteger index = [foundObjects indexOfObjectIdenticalTo: nd]; [self selectObjects: selected]; if (index != NSNotFound) { [resultsView scrollRowToVisible: index]; } } } [tableView setHighlightedTableColumn: tableColumn]; } // ResultsTableView - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows { if ([dragRows count] > 1) { return [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: 24]; } else { NSUInteger index = [[dragRows objectAtIndex: 0] unsignedIntegerValue]; FSNode *nd = [foundObjects objectAtIndex: index]; return [[FSNodeRep sharedInstance] iconOfSize: 24 forNode: nd]; } return nil; } @end @implementation ProgrView #define IMAGES 8 - (void)dealloc { RELEASE (images); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect refreshInterval:(NSTimeInterval)refresh { self = [super initWithFrame: frameRect]; if (self) { unsigned i; images = [NSMutableArray new]; for (i = 0; i < IMAGES; i++) { NSString *imname = [NSString stringWithFormat: @"anim-logo-%d.tiff", i]; [images addObject: [NSImage imageNamed: imname]]; } rfsh = refresh; animating = NO; } return self; } - (void)start { index = 0; animating = YES; progTimer = [NSTimer scheduledTimerWithTimeInterval: rfsh target: self selector: @selector(animate:) userInfo: nil repeats: YES]; } - (void)stop { if (animating) { animating = NO; if (progTimer && [progTimer isValid]) { [progTimer invalidate]; } [self setNeedsDisplay: YES]; } } - (void)animate:(id)sender { [self setNeedsDisplay: YES]; index++; if (index == [images count]) { index = 0; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (animating) { [[images objectAtIndex: index] compositeToPoint: NSMakePoint(0, 0) operation: NSCompositeSourceOver]; } } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/0000755000175000001440000000000014751213523020006 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/0000755000175000001440000000000014753472316023570 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/FModuleAnnotations.m0000644000175000001440000001311714751213523027511 0ustar multixusers/* FModuleAnnotations.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleAnnotations"; @interface FModuleAnnotations : NSObject { IBOutlet id win; IBOutlet id controlsBox; IBOutlet id popUp; IBOutlet id textField; NSInteger index; BOOL used; NSString *contentsStr; NSInteger how; id searchtool; } - (IBAction)popUpAction:(id)sender; @end @implementation FModuleAnnotations #define ONE_WORD 0 #define ALL_WORDS 1 #define EXACT_PHRASE 2 #define WITHOUT_WORDS 3 - (void)dealloc { RELEASE (controlsBox); RELEASE (contentsStr); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; contentsStr = nil; [textField setStringValue: @""]; /* Internationalization */ [popUp removeAllItems]; [popUp insertItemWithTitle: NSLocalizedString(@"contains one of", @"") atIndex: ONE_WORD]; [popUp insertItemWithTitle: NSLocalizedString(@"contains all of", @"") atIndex: ALL_WORDS]; [popUp insertItemWithTitle: NSLocalizedString(@"with exactly", @"") atIndex: EXACT_PHRASE]; [popUp insertItemWithTitle: NSLocalizedString(@"without one of", @"") atIndex: WITHOUT_WORDS]; [popUp selectItemAtIndex: ONE_WORD]; } return self; } - (IBAction)popUpAction:(id)sender { } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { ASSIGN (contentsStr, [criteria objectForKey: @"what"]); how = [[criteria objectForKey: @"how"] integerValue]; searchtool = tool; } return self; } - (void)setControlsState:(NSDictionary *)info { NSNumber *num = [info objectForKey: @"how"]; NSString *str = [info objectForKey: @"what"]; if (num) { [popUp selectItemAtIndex: [num intValue]]; } if (str && [str length]) { [textField setStringValue: str]; } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"annotations", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSString *str = [textField stringValue]; if ([str length] != 0) { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSInteger idx = [popUp indexOfSelectedItem]; [criteria setObject: str forKey: @"what"]; [criteria setObject: [NSNumber numberWithInteger: idx] forKey: @"how"]; return criteria; } return nil; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(pool); NSString *annotations = [searchtool ddbdGetAnnotationsForPath: path]; NSRange range; BOOL found = NO; if (annotations) { if (how == EXACT_PHRASE) { range = [annotations rangeOfString: contentsStr options: NSCaseInsensitiveSearch]; found = (range.location != NSNotFound); } else { NSArray *words = [contentsStr componentsSeparatedByString: @" "]; NSUInteger i; for (i = 0; i < [words count]; i++) { NSString *word = [words objectAtIndex: i]; if ([word length] && ([word isEqual: @" "] == NO)) { range = [annotations rangeOfString: word options: NSCaseInsensitiveSearch]; if (how == ONE_WORD) { if (range.location != NSNotFound) { found = YES; break; } } else if (how == ALL_WORDS) { found = YES; if (range.location == NSNotFound) { found = NO; break; } } else if (how == WITHOUT_WORDS) { found = YES; if (range.location != NSNotFound) { found = NO; break; } } } } } } RELEASE (pool); return found; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return NO; } - (BOOL)metadataModule { return YES; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/GNUmakefile0000644000175000001440000000100113251572120025614 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleAnnotations BUNDLE_EXTENSION = .finder FModuleAnnotations_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleAnnotations_OBJC_FILES = FModuleAnnotations.m FModuleAnnotations_PRINCIPAL_CLASS = FModuleAnnotations FModuleAnnotations_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleAnnotations.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/GNUmakefile.postamble0000644000175000001440000000010613251572120027606 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/GNUmakefile.preamble0000644000175000001440000000105513214346542027421 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/0000755000175000001440000000000013214346542025532 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/0000755000175000001440000000000013214346542032246 5ustar multixusers././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/data.classesgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/data0000644000175000001440000000062613214346542033106 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleAnnotations = { Actions = ( "popUpAction:" ); Outlets = ( win, controlsBox, textField, popUp ); Super = NSObject; }; FirstResponder = { Actions = ( "buttonsAction:", "newAction:", "orderFrontFontPanel:", "popUpAction:", "startFind:" ); Super = NSObject; }; }././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/data.infogworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/data0000644000175000001440000000027013214346542033101 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Stream././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/objects.gormgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleAnnotations/Resources/FModuleAnnotations.gorm/obje0000644000175000001440000000673713214346542033125 0ustar multixusersGNUstep archive00002c88:00000023:0000006a:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D C01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSTextField1 NSControl% C  B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Contents01NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01 NSPopUpButton1NSButton% A  C A  C A&0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0&&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%0 1NSImage0!& % common_Nibble%0"0#&%is&&%%0$0%&%doesn't contain&&%%0&0'& % starts with0(&&&%%0)0*& % ends with0+&&&%%%0,&0-&&&&%%%%%0.0/&%Box&&&&&&&& %%0001&%System02&%windowBackgroundColor03&%Window04&%Window05&%Window ? ? F@ F@%0607&%NSApplicationIcon&  D D08 &09 &0:1NSMutableDictionary1 NSDictionary& 0;& % MenuItem30<0=& % starts with0>&&&%%0?&%NSOwner0@&%FModuleAnnotations0A& % MenuItem40B0C& % ends with0D&&&%%0E&%Box10F& % TextField 0G& % GormNSWindow0H&%MenuItem0I0J&%contains0K&&&% %0L&%View1 0M&%GormNSPopUpButton0N& % MenuItem10O0P&%doesn't containK&&%%0Q& % MenuItem20R0S&%isK&&%%0T &0U1 NSNibConnectorG0V&%NSOwner0W EV0X LV0Y FL0Z H0[ N0\ Q0] ;0^ A0_1!NSNibOutletConnectorVF0`& % textField0a!VE0b& % controlsBox0c!VG0d&%win0e MV0f!VM0g1"NSMutableString&%popUp0h1#NSNibControlConnectorMV0i"& % popUpAction:0j&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/0000755000175000001440000000000014753472316023070 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/FModuleContents.m0000644000175000001440000000777714751213523026330 0ustar multixusers/* FModuleContents.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" #define MAXFSIZE 600000 static NSString *nibName = @"FModuleContents"; @interface FModuleContents : NSObject { IBOutlet id win; IBOutlet id controlsBox; IBOutlet id label; IBOutlet id textField; NSInteger index; BOOL used; NSString *searchStr; const char *searchPtr; NSFileManager *fm; } @end @implementation FModuleContents - (void)dealloc { RELEASE (controlsBox); RELEASE (searchStr); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; searchStr = nil; [textField setStringValue: @""]; /* Internationalization */ [label setStringValue: NSLocalizedString(@"includes", @"")]; } return self; } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { ASSIGN (searchStr, [criteria objectForKey: @"what"]); searchPtr = [searchStr UTF8String]; fm = [NSFileManager defaultManager]; } return self; } - (void)setControlsState:(NSDictionary *)info { NSString *str = [info objectForKey: @"what"]; if (str && [str length]) { [textField setStringValue: str]; } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"contents", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSString *str = [textField stringValue]; if ([str length] != 0) { return [NSDictionary dictionaryWithObject: str forKey: @"what"]; } return nil; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { BOOL contains = NO; if (([attributes fileSize] < MAXFSIZE) && ([attributes fileType] == NSFileTypeRegular)) { CREATE_AUTORELEASE_POOL(pool); NSData *contents = [NSData dataWithContentsOfFile: path]; unsigned length = ((contents != nil) ? [contents length] : 0); if (length) { const char *bytesStr = (const char *)[contents bytes]; unsigned testlen = ((length < 256) ? length : 256); unsigned i; for (i = 0; i < testlen; i++) { if (bytesStr[i] == 0x00) { RELEASE (pool); return NO; } } contains = (strstr(bytesStr, searchPtr) != NULL); } RELEASE (pool); } return contains; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return YES; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/GNUmakefile0000644000175000001440000000075113251572120025127 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleContents BUNDLE_EXTENSION = .finder FModuleContents_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleContents_OBJC_FILES = FModuleContents.m FModuleContents_PRINCIPAL_CLASS = FModuleContents FModuleContents_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleContents.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/GNUmakefile.postamble0000644000175000001440000000010613251572120027106 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/GNUmakefile.preamble0000644000175000001440000000105513214346542026721 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/0000755000175000001440000000000013214346542025032 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/FModuleContents.gorm/0000755000175000001440000000000013214346542031046 5ustar multixusers././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/FModuleContents.gorm/data.classesgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/FModuleContents.gorm/data.class0000644000175000001440000000055413214346542033012 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleContents = { Actions = ( ); Outlets = ( win, controlsBox, textField, label ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/FModuleContents.gorm/data.info0000644000175000001440000000027013214346542032633 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Stream././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/FModuleContents.gorm/objects.gormgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleContents/Resources/FModuleContents.gorm/objects.go0000644000175000001440000000570713214346542033037 0ustar multixusersGNUstep archive00002c88:0000001b:0000005b:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSTextField1 NSControl% B  C6 A  C6 A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Contents01NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% A @@ BT A  BT A&0 &%00&%includes&&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor00 &%Box&&&&&&&& %%0!0"&%System0#&%windowBackgroundColor0$&%Window0%&%Window0&&%Window ? ? F@ F@%0'1NSImage0(&%NSApplicationIcon&  D D0) &0* &0+1NSMutableDictionary1 NSDictionary& 0,& % MenuItem30-1 NSMenuItem0.& % starts with0/&&&%%00&%NSOwner01&%FModuleContents02& % MenuItem40304& % ends with05&&&%%06&%Box107& % TextField 08& % GormNSWindow09& % TextField10:&%MenuItem0;0<&%contains0=&&&%0>0?& % common_Nibble%0@&%View1 0A& % MenuItem10B0C&%doesn't contain=&&%%0D& % MenuItem20E0F&%is=&&%%0G &0H1NSNibConnector80I&%NSOwner0J6I0K@I0L7@0M:0NA0OD0P,0Q20R1NSNibOutletConnectorI70S& % textField0TI60U& % controlsBox0VI80W&%win0X9@0YI90Z&%label0[&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/0000755000175000001440000000000014753472316022435 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/FModuleCrDate.m0000644000175000001440000003161714751213523025230 0ustar multixusers/* FModuleCrDate.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleCrDate"; @interface FModuleCrDate : NSObject { IBOutlet id win; IBOutlet NSBox *controlsBox; IBOutlet id isPopUp; IBOutlet id whenPopUp; IBOutlet id dateField; IBOutlet id dateStepper; double stepperValue; NSInteger index; BOOL used; NSFileManager *fm; NSCalendarDate *date; NSTimeInterval interval; NSInteger how; } - (IBAction)popUpAction:(id)sender; - (IBAction)stepperAction:(id)sender; @end @implementation FModuleCrDate #define TODAY 0 #define WITHIN 1 #define BEFORE 2 #define AFTER 3 #define EXACTLY 4 #define LAST_DAY 0 #define LAST_2DAYS 1 #define LAST_3DAYS 2 #define LAST_WEEK 3 #define LAST_2WEEKS 4 #define LAST_3WEEKS 5 #define LAST_MONTH 6 #define LAST_2MONTHS 7 #define LAST_3MONTHS 8 #define LAST_6MONTHS 9 #define MINUTE_TI (60.0) #define HOUR_TI (MINUTE_TI * 60) #define DAY_TI (HOUR_TI * 24) #define DAYS2_TI (DAY_TI * 2) #define DAYS3_TI (DAY_TI * 3) #define WEEK_TI (DAY_TI * 7) #define WEEK2_TI (WEEK_TI * 2) #define WEEK3_TI (WEEK_TI * 3) #define MONTH_TI (DAY_TI * 30) #define MONTH2_TI ((MONTH_TI * 2) + DAY_TI) #define MONTH3_TI ((MONTH_TI * 3) + (DAY_TI * 1.5)) #define MONTH6_TI ((MONTH_TI * 6) + (DAY_TI * 3)) - (void)dealloc { RELEASE (controlsBox); RELEASE (whenPopUp); RELEASE (dateField); RELEASE (dateStepper); RELEASE (date); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { NSDateFormatter *formatter; NSRect r; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; [dateField setStringValue: @""]; r = [dateField frame]; r.origin.y = 0; [dateField setFrame: r]; r = [dateStepper frame]; r.origin.y = 0; [dateStepper setFrame: r]; [dateStepper setMaxValue: MONTH6_TI]; [dateStepper setMinValue: 0]; [dateStepper setIncrement: 1]; [dateStepper setAutorepeat: YES]; [dateStepper setValueWraps: YES]; stepperValue = MONTH3_TI; [dateStepper setDoubleValue: stepperValue]; RETAIN (whenPopUp); RETAIN (dateField); RETAIN (dateStepper); [whenPopUp removeFromSuperview]; formatter = [[NSDateFormatter alloc] initWithDateFormat: @"%m %d %Y" allowNaturalLanguage: NO]; [[dateField cell] setFormatter: formatter]; RELEASE (formatter); /* Internationalization */ [isPopUp removeAllItems]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is today", @"") atIndex: TODAY]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is within", @"") atIndex: WITHIN]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is before", @"") atIndex: BEFORE]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is after", @"") atIndex: AFTER]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is exactly", @"") atIndex: EXACTLY]; [isPopUp selectItemAtIndex: TODAY]; [whenPopUp removeAllItems]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last day", @"") atIndex: LAST_DAY]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 2 days", @"") atIndex: LAST_2DAYS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 3 days", @"") atIndex: LAST_3DAYS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last week", @"") atIndex: LAST_WEEK]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 2 weeks", @"") atIndex: LAST_2WEEKS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 3 weeks", @"") atIndex: LAST_3WEEKS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last month", @"") atIndex: LAST_MONTH]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 2 months", @"") atIndex: LAST_2MONTHS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 3 months", @"") atIndex: LAST_3MONTHS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 6 months", @"") atIndex: LAST_6MONTHS]; [whenPopUp selectItemAtIndex: LAST_DAY]; } return self; } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { how = [[criteria objectForKey: @"how"] intValue]; if ((how == TODAY) || (how == WITHIN)) { interval = [[criteria objectForKey: @"limit"] doubleValue]; } else { ASSIGN (date, [criteria objectForKey: @"date"]); } fm = [NSFileManager defaultManager]; } return self; } - (IBAction)popUpAction:(id)sender { if (sender == isPopUp) { NSInteger idx = [sender indexOfSelectedItem]; NSView *view = [controlsBox contentView]; NSArray *views = [view subviews]; if (idx == TODAY) { if ([views containsObject: dateField]) { [dateField removeFromSuperview]; [dateStepper removeFromSuperview]; } if ([views containsObject: whenPopUp]) { [whenPopUp removeFromSuperview]; } } else if (idx == WITHIN) { if ([views containsObject: dateField]) { [dateField removeFromSuperview]; [dateStepper removeFromSuperview]; } if ([views containsObject: whenPopUp] == NO) { [view addSubview: whenPopUp]; } } else if ((idx == BEFORE) || (idx == AFTER) || (idx == EXACTLY)) { if ([views containsObject: whenPopUp]) { [whenPopUp removeFromSuperview]; } if ([views containsObject: dateField] == NO) { NSCalendarDate *cdate = [NSCalendarDate calendarDate]; int month = [cdate monthOfYear]; int day = [cdate dayOfMonth]; int year = [cdate yearOfCommonEra]; NSString *str = [NSString stringWithFormat: @"%i %i %i", month, day, year]; [view addSubview: dateField]; [dateField setStringValue: str]; [view addSubview: dateStepper]; } } } } - (IBAction)stepperAction:(id)sender { NSString *str = [dateField stringValue]; if ([str length]) { NSCalendarDate *cdate = [NSCalendarDate dateWithString: str calendarFormat: @"%m %d %Y"]; if (cdate) { double sv = [sender doubleValue]; int month, day, year; if (sv > stepperValue) { cdate = [cdate addTimeInterval: DAY_TI]; } else if (sv < stepperValue) { cdate = [cdate addTimeInterval: -DAY_TI]; } month = [cdate monthOfYear]; day = [cdate dayOfMonth]; year = [cdate yearOfCommonEra]; str = [NSString stringWithFormat: @"%i %i %i", month, day, year]; [dateField setStringValue: str]; stepperValue = sv; } } } - (void)setControlsState:(NSDictionary *)info { NSNumber *num = [info objectForKey: @"how"]; if (num) { NSInteger idx = [num integerValue]; [isPopUp selectItemAtIndex: idx]; [self popUpAction: isPopUp]; if (idx == WITHIN) { NSNumber *limnum = [info objectForKey: @"limit"]; int whenidx = 0; if (limnum) { double limit = [limnum doubleValue]; if (limit == DAY_TI) { whenidx = LAST_DAY; } else if (limit == DAYS2_TI) { whenidx = LAST_2DAYS; } else if (limit == DAYS3_TI) { whenidx = LAST_3DAYS; } else if (limit == WEEK_TI) { whenidx = LAST_WEEK; } else if (limit == WEEK2_TI) { whenidx = LAST_2WEEKS; } else if (limit == WEEK3_TI) { whenidx = LAST_3WEEKS; } else if (limit == MONTH_TI) { whenidx = LAST_MONTH; } else if (limit == MONTH2_TI) { whenidx = LAST_2MONTHS; } else if (limit == MONTH3_TI) { whenidx = LAST_3MONTHS; } else if (limit == MONTH6_TI) { whenidx = LAST_6MONTHS; } } [whenPopUp selectItemAtIndex: whenidx]; } else if ((idx == BEFORE) || (idx == AFTER) || (idx == EXACTLY)) { NSCalendarDate *cdate = [info objectForKey: @"date"]; if (cdate) { int month = [cdate monthOfYear]; int day = [cdate dayOfMonth]; int year = [cdate yearOfCommonEra]; NSString *str = [NSString stringWithFormat: @"%i %i %i", month, day, year]; [dateField setStringValue: str]; } } } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"date created", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSCalendarDate *cdate = [NSCalendarDate calendarDate]; NSTimeInterval limit = 0.0; NSInteger idx = [isPopUp indexOfSelectedItem]; if (idx == TODAY) { NSCalendarDate *midnight; midnight = [NSCalendarDate dateWithYear: [cdate yearOfCommonEra] month: [cdate monthOfYear] day: [cdate dayOfMonth] hour: 0 minute: 0 second: 0 timeZone: [cdate timeZone]]; limit = [midnight timeIntervalSinceNow]; } else if (idx == WITHIN) { int when = [whenPopUp indexOfSelectedItem]; switch(when) { case LAST_DAY: limit = DAY_TI; break; case LAST_2DAYS: limit = DAYS2_TI; break; case LAST_3DAYS: limit = DAYS3_TI; break; case LAST_WEEK: limit = WEEK_TI; break; case LAST_2WEEKS: limit = WEEK2_TI; break; case LAST_3WEEKS: limit = WEEK3_TI; break; case LAST_MONTH: limit = MONTH_TI; break; case LAST_2MONTHS: limit = MONTH2_TI; break; case LAST_3MONTHS: limit = MONTH3_TI; break; case LAST_6MONTHS: limit = MONTH6_TI; break; } } else if ((idx == BEFORE) || (idx == AFTER) || (idx == EXACTLY)) { NSString *str = [dateField stringValue]; if ([str length]) { cdate = [NSCalendarDate dateWithString: str calendarFormat: @"%m %d %Y"]; } } [criteria setObject: [NSNumber numberWithDouble: limit] forKey: @"limit"]; [criteria setObject: cdate forKey: @"date"]; [criteria setObject: [NSNumber numberWithInt: idx] forKey: @"how"]; return criteria; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { NSDate *cd = [attributes fileCreationDate]; if (how == TODAY) { return (interval <= [cd timeIntervalSinceNow]); } else if (how == WITHIN) { return (fabs([cd timeIntervalSinceNow]) <= interval); } else if ((how == BEFORE) || (how == AFTER) || (how == EXACTLY)) { NSCalendarDate *cdate = [cd dateWithCalendarFormat: [date calendarFormat] timeZone: [date timeZone]]; if (how == BEFORE) { if ([[date earlierDate: cd] isEqualToDate: cd]) { return ([cdate dayOfMonth] != [date dayOfMonth]); } } else if (how == AFTER) { if ([[date earlierDate: cd] isEqualToDate: date]) { return ([cdate dayOfMonth] != [date dayOfMonth]); } } else if (how == EXACTLY) { if (fabs([cd timeIntervalSinceDate: date]) < DAY_TI) { return ([cdate dayOfMonth] == [date dayOfMonth]); } } } return NO; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return NO; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/GNUmakefile0000644000175000001440000000073213251572120024473 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleCrDate BUNDLE_EXTENSION = .finder FModuleCrDate_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleCrDate_OBJC_FILES = FModuleCrDate.m FModuleCrDate_PRINCIPAL_CLASS = FModuleCrDate FModuleCrDate_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleCrDate.gorm -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/GNUmakefile.postamble0000644000175000001440000000010613251572120026453 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/GNUmakefile.preamble0000644000175000001440000000105513214346542026266 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/Resources/0000755000175000001440000000000013214346542024377 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/Resources/FModuleCrDate.gorm/0000755000175000001440000000000013214346542027760 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/Resources/FModuleCrDate.gorm/data.classes0000644000175000001440000000072013214346542032247 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleCrDate = { Actions = ( "popUpAction:", "stepperAction:" ); Outlets = ( win, controlsBox, isPopUp, whenPopUp, dateField, dateStepper ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:", "stepperAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/Resources/FModuleCrDate.gorm/data.info0000644000175000001440000000027013214346542031545 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleCrDate/Resources/FModuleCrDate.gorm/objects.gorm0000644000175000001440000001015513214346542032301 0ustar multixusersGNUstep archive00002c88:00000026:0000007f:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% C̀ D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSPopUpButton1NSButton1 NSControl% A  B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % starts with0&&&%%00& % ends with0&&&%%%0 &0!&&&&%%%%%0"% B  C A  C A&0# &%0$0%&&&&&&&&&0&0'&0( &0)0*&%the last 3 months0+&&&%%0,0-&%Item 2+&&%%0.0/&%Item 3+&&%%%00&01&&&&)&%%%%%0203&%Box&&&&&&&& %%041 NSTextField% B B B A  B A&05 &%061NSTextFieldCell07& % 10/19/20047&&&&&&&&0%081NSColor09&%NSNamedColorSpace0:&%System0;&%textBackgroundColor0<9:0=& % textColor0>1 NSStepper% CN B A A  A A&0? &%0@1 NSStepperCell0A&%00B1 NSNumber1!NSValuei%&&&&&&&&% @M ?%%0C90D&%System0E&%windowBackgroundColor0F&%Window0G&%Window0H&%Window ? ? F@ F@%0I0J&%NSApplicationIcon&   D D0K &0L &0M1"NSMutableDictionary1# NSDictionary&0N& % MenuItem40O&%Stepper>0P& % MenuItem5,0Q&%Box10R& % MenuItem6.0S&%NSOwner0T& % FModuleCrDate0U& % TextField40V& % GormNSWindow0W&%View1 0X&%GormNSPopUpButton 0Y&%GormNSPopUpButton1"0Z& % MenuItem1)0[& % MenuItem20\&%MenuItem0]& % MenuItem30^ &0_1$NSNibConnectorV0`&%NSOwner0a$Q`0b$W`0c$XW0d$\0e$[0f$]0g$N0h1%NSNibOutletConnector`Q0i& % controlsBox0j%`V0k&%win0l$U`0m$YW0n$Z0o$P0p$R0q$O0r%`O0s& % dateStepper0t%`U0u& % dateField0v%`Y0w& % whenPopUp0x%`X0y&%isPopUp0z1&NSNibControlConnectorO`0{&%stepperAction:0|&X`0}& % popUpAction:0~&Y`}0"&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/0000755000175000001440000000000014753472316022160 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/FModuleKind.m0000644000175000001440000001243414751213523024472 0ustar multixusers/* FModuleKind.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleKind"; @interface FModuleKind : NSObject { IBOutlet id win; IBOutlet id controlsBox; IBOutlet id isPopUp; IBOutlet id typePopUp; NSInteger index; BOOL used; NSFileManager *fm; NSWorkspace *ws; NSInteger kind; NSInteger how; } - (IBAction)popUpAction:(id)sender; @end @implementation FModuleKind #define IS 0 #define IS_NOT 1 #define PLAIN 0 #define DIR 1 #define EXEC 2 #define LINK 3 #define APP 4 - (void)dealloc { RELEASE (controlsBox); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; /* Internationalization */ [isPopUp removeAllItems]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is", @"") atIndex: 0]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is not", @"") atIndex: 1]; [isPopUp selectItemAtIndex: 0]; [typePopUp removeAllItems]; [typePopUp insertItemWithTitle: NSLocalizedString(@"plain file", @"") atIndex: 0]; [typePopUp insertItemWithTitle: NSLocalizedString(@"folder", @"") atIndex: 1]; [typePopUp insertItemWithTitle: NSLocalizedString(@"tool", @"") atIndex: 2]; [typePopUp insertItemWithTitle: NSLocalizedString(@"symbolic link", @"") atIndex: 3]; [typePopUp insertItemWithTitle: NSLocalizedString(@"application", @"") atIndex: 4]; [typePopUp selectItemAtIndex: 0]; } return self; } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { kind = [[criteria objectForKey: @"what"] integerValue]; how = [[criteria objectForKey: @"how"] integerValue]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; } return self; } - (IBAction)popUpAction:(id)sender { } - (void)setControlsState:(NSDictionary *)info { NSNumber *num = [info objectForKey: @"how"]; if (num) { [isPopUp selectItemAtIndex: [num intValue]]; } num = [info objectForKey: @"what"]; if (num) { [typePopUp selectItemAtIndex: [num intValue]]; } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"type", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSInteger is = [isPopUp indexOfSelectedItem]; NSInteger type = [typePopUp indexOfSelectedItem]; NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; [criteria setObject: [NSNumber numberWithInteger: is] forKey: @"how"]; [criteria setObject: [NSNumber numberWithInteger: type] forKey: @"what"]; return criteria; } #define PosixExecutePermission (0111) - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { NSString *fileType = [attributes fileType]; BOOL found = NO; if (fileType == NSFileTypeRegular) { if ([attributes filePosixPermissions] & PosixExecutePermission) { found = (kind == EXEC); } else { found = (kind == PLAIN); } } else if (fileType == NSFileTypeDirectory) { CREATE_AUTORELEASE_POOL(arp); NSString *defApp = nil, *type = nil; [ws getInfoForFile: path application: &defApp type: &type]; if (type == NSApplicationFileType) { found = (kind == APP); } else if (type == NSPlainFileType) { found = (kind == PLAIN); } else { found = (kind == DIR); } RELEASE (arp); } else if (fileType == NSFileTypeSymbolicLink) { found = (kind == LINK); } else { found = (kind == PLAIN); } return (how == IS) ? found : !found; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return NO; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/GNUmakefile0000644000175000001440000000071113251572120024213 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleKind BUNDLE_EXTENSION = .finder FModuleKind_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleKind_OBJC_FILES = FModuleKind.m FModuleKind_PRINCIPAL_CLASS = FModuleKind FModuleKind_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleKind.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/GNUmakefile.postamble0000644000175000001440000000010613251572120026176 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/GNUmakefile.preamble0000644000175000001440000000105513214346542026011 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/Resources/0000755000175000001440000000000013214346542024122 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/Resources/FModuleKind.gorm/0000755000175000001440000000000013214346542027226 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/Resources/FModuleKind.gorm/data.classes0000644000175000001440000000062113214346542031515 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleKind = { Actions = ( "popUpAction:" ); Outlets = ( win, controlsBox, isPopUp, typePopUp ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:", "newAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/Resources/FModuleKind.gorm/data.info0000644000175000001440000000027013214346542031013 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleKind/Resources/FModuleKind.gorm/objects.gorm0000644000175000001440000000562113214346542031551 0ustar multixusersGNUstep archive00002c88:00000020:00000059:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSPopUpButton1NSButton1 NSControl% A  B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%is0&&&%%00&%is not0&&&%%%0&0&&&&%%%%%0% B  C! A  C! A&0 &%00&&&&&&&&&00 &0! &0"0#&%is0$&&&%%0%0&&%is not0'&&&%%%0(&0)&&&&%%%%%0*0+&%Box&&&&&&&& %%0,1NSColor0-&%NSNamedColorSpace0.&%System0/&%windowBackgroundColor00&%Window01&%Window02&%Window ? ? F@ F@%031NSImage04&%NSApplicationIcon&  D D05 &06 &071NSMutableDictionary1 NSDictionary& 08& % MenuItem309&%NSOwner0:& % FModuleKind0;&%GormNSPopUpButton10<&%Box10=& % GormNSWindow0>&%MenuItem"0?&%View1 0@&%GormNSPopUpButton 0A& % MenuItem1%0B& % MenuItem20C &0D1NSNibConnector=0E&%NSOwner0F0OA0PE@0Q&%isPopUp0RE;0S& % typePopUp0TE<0U& % controlsBox0V1 NSNibControlConnector@E0W& % popUpAction:0X ;EW0Y&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/0000755000175000001440000000000014753472316022610 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/FModuleModDate.m0000644000175000001440000003165014751213523025553 0ustar multixusers/* FModuleModDate.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleModDate"; @interface FModuleModDate : NSObject { IBOutlet id win; IBOutlet NSBox *controlsBox; IBOutlet id isPopUp; IBOutlet id whenPopUp; IBOutlet id dateField; IBOutlet id dateStepper; double stepperValue; NSInteger index; BOOL used; NSFileManager *fm; NSCalendarDate *date; NSTimeInterval interval; NSInteger how; } - (IBAction)popUpAction:(id)sender; - (IBAction)stepperAction:(id)sender; @end @implementation FModuleModDate #define TODAY 0 #define WITHIN 1 #define BEFORE 2 #define AFTER 3 #define EXACTLY 4 #define LAST_DAY 0 #define LAST_2DAYS 1 #define LAST_3DAYS 2 #define LAST_WEEK 3 #define LAST_2WEEKS 4 #define LAST_3WEEKS 5 #define LAST_MONTH 6 #define LAST_2MONTHS 7 #define LAST_3MONTHS 8 #define LAST_6MONTHS 9 #define MINUTE_TI (60.0) #define HOUR_TI (MINUTE_TI * 60) #define DAY_TI (HOUR_TI * 24) #define DAYS2_TI (DAY_TI * 2) #define DAYS3_TI (DAY_TI * 3) #define WEEK_TI (DAY_TI * 7) #define WEEK2_TI (WEEK_TI * 2) #define WEEK3_TI (WEEK_TI * 3) #define MONTH_TI (DAY_TI * 30) #define MONTH2_TI ((MONTH_TI * 2) + DAY_TI) #define MONTH3_TI ((MONTH_TI * 3) + (DAY_TI * 1.5)) #define MONTH6_TI ((MONTH_TI * 6) + (DAY_TI * 3)) - (void)dealloc { RELEASE (controlsBox); RELEASE (whenPopUp); RELEASE (dateField); RELEASE (dateStepper); RELEASE (date); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { NSDateFormatter *formatter; NSRect r; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; [dateField setStringValue: @""]; r = [dateField frame]; r.origin.y = 0; [dateField setFrame: r]; r = [dateStepper frame]; r.origin.y = 0; [dateStepper setFrame: r]; [dateStepper setMaxValue: MONTH6_TI]; [dateStepper setMinValue: 0]; [dateStepper setIncrement: 1]; [dateStepper setAutorepeat: YES]; [dateStepper setValueWraps: YES]; stepperValue = MONTH3_TI; [dateStepper setDoubleValue: stepperValue]; RETAIN (whenPopUp); RETAIN (dateField); RETAIN (dateStepper); [whenPopUp removeFromSuperview]; formatter = [[NSDateFormatter alloc] initWithDateFormat: @"%m %d %Y" allowNaturalLanguage: NO]; [[dateField cell] setFormatter: formatter]; RELEASE (formatter); /* Internationalization */ [isPopUp removeAllItems]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is today", @"") atIndex: TODAY]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is within", @"") atIndex: WITHIN]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is before", @"") atIndex: BEFORE]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is after", @"") atIndex: AFTER]; [isPopUp insertItemWithTitle: NSLocalizedString(@"is exactly", @"") atIndex: EXACTLY]; [isPopUp selectItemAtIndex: TODAY]; [whenPopUp removeAllItems]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last day", @"") atIndex: LAST_DAY]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 2 days", @"") atIndex: LAST_2DAYS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 3 days", @"") atIndex: LAST_3DAYS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last week", @"") atIndex: LAST_WEEK]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 2 weeks", @"") atIndex: LAST_2WEEKS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 3 weeks", @"") atIndex: LAST_3WEEKS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last month", @"") atIndex: LAST_MONTH]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 2 months", @"") atIndex: LAST_2MONTHS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 3 months", @"") atIndex: LAST_3MONTHS]; [whenPopUp insertItemWithTitle: NSLocalizedString(@"the last 6 months", @"") atIndex: LAST_6MONTHS]; [whenPopUp selectItemAtIndex: LAST_DAY]; } return self; } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { how = [[criteria objectForKey: @"how"] intValue]; if ((how == TODAY) || (how == WITHIN)) { interval = [[criteria objectForKey: @"limit"] doubleValue]; } else { ASSIGN (date, [criteria objectForKey: @"date"]); } fm = [NSFileManager defaultManager]; } return self; } - (IBAction)popUpAction:(id)sender { if (sender == isPopUp) { NSInteger idx = [sender indexOfSelectedItem]; NSView *view = [controlsBox contentView]; NSArray *views = [view subviews]; if (idx == TODAY) { if ([views containsObject: dateField]) { [dateField removeFromSuperview]; [dateStepper removeFromSuperview]; } if ([views containsObject: whenPopUp]) { [whenPopUp removeFromSuperview]; } } else if (idx == WITHIN) { if ([views containsObject: dateField]) { [dateField removeFromSuperview]; [dateStepper removeFromSuperview]; } if ([views containsObject: whenPopUp] == NO) { [view addSubview: whenPopUp]; } } else if ((idx == BEFORE) || (idx == AFTER) || (idx == EXACTLY)) { if ([views containsObject: whenPopUp]) { [whenPopUp removeFromSuperview]; } if ([views containsObject: dateField] == NO) { NSCalendarDate *cdate = [NSCalendarDate calendarDate]; int month = [cdate monthOfYear]; int day = [cdate dayOfMonth]; int year = [cdate yearOfCommonEra]; NSString *str = [NSString stringWithFormat: @"%i %i %i", month, day, year]; [view addSubview: dateField]; [dateField setStringValue: str]; [view addSubview: dateStepper]; } } } } - (IBAction)stepperAction:(id)sender { NSString *str = [dateField stringValue]; if ([str length]) { NSCalendarDate *cdate = [NSCalendarDate dateWithString: str calendarFormat: @"%m %d %Y"]; if (cdate) { double sv = [sender doubleValue]; int month, day, year; if (sv > stepperValue) { cdate = [cdate addTimeInterval: DAY_TI]; } else if (sv < stepperValue) { cdate = [cdate addTimeInterval: -DAY_TI]; } month = [cdate monthOfYear]; day = [cdate dayOfMonth]; year = [cdate yearOfCommonEra]; str = [NSString stringWithFormat: @"%i %i %i", month, day, year]; [dateField setStringValue: str]; stepperValue = sv; } } } - (void)setControlsState:(NSDictionary *)info { NSNumber *num = [info objectForKey: @"how"]; if (num) { NSInteger idx = [num integerValue]; [isPopUp selectItemAtIndex: idx]; [self popUpAction: isPopUp]; if (idx == WITHIN) { NSNumber *limnum = [info objectForKey: @"limit"]; NSInteger whenidx = 0; if (limnum) { double limit = [limnum doubleValue]; if (limit == DAY_TI) { whenidx = LAST_DAY; } else if (limit == DAYS2_TI) { whenidx = LAST_2DAYS; } else if (limit == DAYS3_TI) { whenidx = LAST_3DAYS; } else if (limit == WEEK_TI) { whenidx = LAST_WEEK; } else if (limit == WEEK2_TI) { whenidx = LAST_2WEEKS; } else if (limit == WEEK3_TI) { whenidx = LAST_3WEEKS; } else if (limit == MONTH_TI) { whenidx = LAST_MONTH; } else if (limit == MONTH2_TI) { whenidx = LAST_2MONTHS; } else if (limit == MONTH3_TI) { whenidx = LAST_3MONTHS; } else if (limit == MONTH6_TI) { whenidx = LAST_6MONTHS; } } [whenPopUp selectItemAtIndex: whenidx]; } else if ((idx == BEFORE) || (idx == AFTER) || (idx == EXACTLY)) { NSCalendarDate *cdate = [info objectForKey: @"date"]; if (cdate) { int month = [cdate monthOfYear]; int day = [cdate dayOfMonth]; int year = [cdate yearOfCommonEra]; NSString *str = [NSString stringWithFormat: @"%i %i %i", month, day, year]; [dateField setStringValue: str]; } } } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"date modified", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSCalendarDate *cdate = [NSCalendarDate calendarDate]; NSTimeInterval limit = 0.0; NSInteger idx = [isPopUp indexOfSelectedItem]; if (idx == TODAY) { NSCalendarDate *midnight; midnight = [NSCalendarDate dateWithYear: [cdate yearOfCommonEra] month: [cdate monthOfYear] day: [cdate dayOfMonth] hour: 0 minute: 0 second: 0 timeZone: [cdate timeZone]]; limit = [midnight timeIntervalSinceNow]; } else if (idx == WITHIN) { NSInteger when = [whenPopUp indexOfSelectedItem]; switch(when) { case LAST_DAY: limit = DAY_TI; break; case LAST_2DAYS: limit = DAYS2_TI; break; case LAST_3DAYS: limit = DAYS3_TI; break; case LAST_WEEK: limit = WEEK_TI; break; case LAST_2WEEKS: limit = WEEK2_TI; break; case LAST_3WEEKS: limit = WEEK3_TI; break; case LAST_MONTH: limit = MONTH_TI; break; case LAST_2MONTHS: limit = MONTH2_TI; break; case LAST_3MONTHS: limit = MONTH3_TI; break; case LAST_6MONTHS: limit = MONTH6_TI; break; } } else if ((idx == BEFORE) || (idx == AFTER) || (idx == EXACTLY)) { NSString *str = [dateField stringValue]; if ([str length]) { cdate = [NSCalendarDate dateWithString: str calendarFormat: @"%m %d %Y"]; } } [criteria setObject: [NSNumber numberWithDouble: limit] forKey: @"limit"]; [criteria setObject: cdate forKey: @"date"]; [criteria setObject: [NSNumber numberWithInt: idx] forKey: @"how"]; return criteria; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { NSDate *cd = [attributes fileModificationDate]; if (how == TODAY) { return (interval <= [cd timeIntervalSinceNow]); } else if (how == WITHIN) { return (fabs([cd timeIntervalSinceNow]) <= interval); } else if ((how == BEFORE) || (how == AFTER) || (how == EXACTLY)) { NSCalendarDate *cdate = [cd dateWithCalendarFormat: [date calendarFormat] timeZone: [date timeZone]]; if (how == BEFORE) { if ([[date earlierDate: cd] isEqualToDate: cd]) { return ([cdate dayOfMonth] != [date dayOfMonth]); } } else if (how == AFTER) { if ([[date earlierDate: cd] isEqualToDate: date]) { return ([cdate dayOfMonth] != [date dayOfMonth]); } } else if (how == EXACTLY) { if (fabs([cd timeIntervalSinceDate: date]) < DAY_TI) { return ([cdate dayOfMonth] == [date dayOfMonth]); } } } return NO; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return YES; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/GNUmakefile0000644000175000001440000000074113251572120024646 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleModDate BUNDLE_EXTENSION = .finder FModuleModDate_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleModDate_OBJC_FILES = FModuleModDate.m FModuleModDate_PRINCIPAL_CLASS = FModuleModDate FModuleModDate_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleModDate.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/GNUmakefile.postamble0000644000175000001440000000010613251572120026626 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/GNUmakefile.preamble0000644000175000001440000000105513214346542026441 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/Resources/0000755000175000001440000000000013214346542024552 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/Resources/FModuleModDate.gorm/0000755000175000001440000000000013214346542030306 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/Resources/FModuleModDate.gorm/data.classes0000644000175000001440000000072113214346542032576 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleModDate = { Actions = ( "popUpAction:", "stepperAction:" ); Outlets = ( win, controlsBox, isPopUp, whenPopUp, dateField, dateStepper ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:", "stepperAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/Resources/FModuleModDate.gorm/data.info0000644000175000001440000000027013214346542032073 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleModDate/Resources/FModuleModDate.gorm/objects.gorm0000644000175000001440000001070513214346542032630 0ustar multixusersGNUstep archive00002c88:00000026:0000008a:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% C D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSPopUpButton1NSButton1 NSControl% A  B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00&%doesn't contain&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$% B  C A  C A&0% &%0&0'&&&&&&&&&0(0)&0* &0+0,&%the last 3 months0-&&&%%0.0/&%Item 2-&&%%0001&%Item 3-&&%%%02&03&&&&+(%%%%%0405&%Box&&&&&&&& %%061 NSTextField% B B B A  B A&07 &%081NSTextFieldCell09& % 10/19/2004&&&&&&&&0%0:1NSColor0;&%NSNamedColorSpace0<&%System0=&%textBackgroundColor0>;<0?& % textColor0@1 NSStepper% CN B A A  A A&0A &%0B1 NSStepperCell0C&%00D1 NSNumber1!NSValuei%&&&&&&&&% @M ?%%0E;0F&%System0G&%windowBackgroundColor0H&%Window0I&%Window0J&%Window ? ? F@ F@%0K0L&%NSApplicationIcon&   D D0M &0N &0O1"NSMutableDictionary1# NSDictionary& 0P& % MenuItem40Q0R& % ends with0S&&&%%0T&%Stepper@0U&%Box10V&%NSOwner0W&%FModuleModDate0X& % TextField160Y& % GormNSWindow0Z&%View1 0[&%GormNSPopUpButton 0\&%GormNSPopUpButton1$0]& % MenuItem10^0_&%doesn't contain0`&&&%%0a& % MenuItem20b0c&%is`&&%%0d&%MenuItem0e0f&%contains`&&%%0g& % MenuItem30h0i& % starts with0j&&&%%0k &0l1$NSNibConnectorY0m&%NSOwner0n$Um0o$Zm0p$d0q$]0r$a0s$g0t$P0u1%NSNibOutletConnectormU0v& % controlsBox0w%mY0x&%win0y$Xm0z$Tm0{$[m0|$\m0}%mT0~& % dateStepper0%mX0& % dateField0%m\0& % whenPopUp0%m[0&%isPopUp01&NSNibControlConnector[m0& % popUpAction:0&\m0&Tm0&%stepperAction:0"&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/0000755000175000001440000000000014753472316022153 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/FModuleName.m0000644000175000001440000001146414751213523024462 0ustar multixusers/* FModuleName.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleName"; @interface FModuleName : NSObject { IBOutlet id win; IBOutlet id controlsBox; IBOutlet id popUp; IBOutlet id textField; NSInteger index; BOOL used; NSString *searchStr; NSInteger how; } - (IBAction)popUpAction:(id)sender; @end @implementation FModuleName #define CONTAINS 0 #define IS 1 #define NOT_CONTAINS 2 #define STARTS 3 #define ENDS 4 - (void)dealloc { RELEASE (controlsBox); RELEASE (searchStr); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; searchStr = nil; [textField setStringValue: @""]; /* Internationalization */ [popUp removeAllItems]; [popUp insertItemWithTitle: NSLocalizedString(@"contains", @"") atIndex: CONTAINS]; [popUp insertItemWithTitle: NSLocalizedString(@"is", @"") atIndex: IS]; [popUp insertItemWithTitle: NSLocalizedString(@"contains not", @"") atIndex: NOT_CONTAINS]; [popUp insertItemWithTitle: NSLocalizedString(@"starts with", @"") atIndex: STARTS]; [popUp insertItemWithTitle: NSLocalizedString(@"ends with", @"") atIndex: ENDS]; [popUp selectItemAtIndex: CONTAINS]; } return self; } - (IBAction)popUpAction:(id)sender { } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { ASSIGN (searchStr, [criteria objectForKey: @"what"]); how = [[criteria objectForKey: @"how"] integerValue]; } return self; } - (void)setControlsState:(NSDictionary *)info { NSNumber *num = [info objectForKey: @"how"]; NSString *str = [info objectForKey: @"what"]; if (num) { [popUp selectItemAtIndex: [num integerValue]]; } if (str && [str length]) { [textField setStringValue: str]; } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"name", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSString *str = [textField stringValue]; if ([str length] != 0) { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSInteger idx = [popUp indexOfSelectedItem]; [criteria setObject: str forKey: @"what"]; [criteria setObject: [NSNumber numberWithInteger: idx] forKey: @"how"]; return criteria; } return nil; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { CREATE_AUTORELEASE_POOL(pool); NSString *fname = [path lastPathComponent]; BOOL pathok = NO; switch(how) { case IS: pathok = [fname isEqual: searchStr]; break; case NOT_CONTAINS: pathok = ([fname rangeOfString: searchStr].location == NSNotFound); break; case CONTAINS: pathok = ([fname rangeOfString: searchStr].location != NSNotFound); break; case STARTS: pathok = [fname hasPrefix: searchStr]; break; case ENDS: pathok = [fname hasSuffix: searchStr]; break; } RELEASE (pool); return pathok; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return NO; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/GNUmakefile0000644000175000001440000000071113251572120024206 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleName BUNDLE_EXTENSION = .finder FModuleName_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleName_OBJC_FILES = FModuleName.m FModuleName_PRINCIPAL_CLASS = FModuleName FModuleName_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleName.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/GNUmakefile.postamble0000644000175000001440000000010613251572120026171 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/GNUmakefile.preamble0000644000175000001440000000105513214346542026004 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/Resources/0000755000175000001440000000000013214346542024115 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/Resources/FModuleName.gorm/0000755000175000001440000000000013214346542027214 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/Resources/FModuleName.gorm/data.classes0000644000175000001440000000061713214346542031510 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleName = { Actions = ( "popUpAction:" ); Outlets = ( win, controlsBox, popUp, textField ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:", "newAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/Resources/FModuleName.gorm/data.info0000644000175000001440000000027013214346542031001 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleName/Resources/FModuleName.gorm/objects.gorm0000644000175000001440000000614013214346542031534 0ustar multixusersGNUstep archive00002c88:00000022:0000005d:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% C D01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSPopUpButton1NSButton1 NSControl% A  B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % contains not&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$1 NSTextField% B  B A  B A&0% &%0&1NSTextFieldCell0'&%Text&&&&&&&&0%0(1NSColor0)&%NSNamedColorSpace0*&%System0+&%textBackgroundColor0,)*0-& % textColor0.0/&%Box&&&&&&&& %%00)01&%System02&%windowBackgroundColor03&%Window04&%Window05&%Window ? ? F@ F@%0607&%NSApplicationIcon&   D D08 &09 &0:1NSMutableDictionary1 NSDictionary& 0;& % MenuItem30<&%NSOwner0=& % FModuleName0>& % MenuItem40?&%Box10@& % TextField$0A& % GormNSWindow0B&%MenuItem0C&%View1 0D&%GormNSPopUpButton 0E& % MenuItem10F& % MenuItem20G &0H1 NSNibConnectorA0I&%NSOwner0J ?I0K CI0L DC0M @C0N B0O E0P F0Q ;0R >0S1!NSNibOutletConnectorI@0T& % textField0U!ID0V&%popUp0W!I?0X& % controlsBox0Y!IA0Z&%win0[1"NSNibControlConnectorDI0\& % popUpAction:0]&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/0000755000175000001440000000000014753472316022365 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/FModuleOwner.m0000644000175000001440000000773314751213523025112 0ustar multixusers/* FModuleOwner.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleOwner"; @interface FModuleOwner : NSObject { IBOutlet id win; IBOutlet id controlsBox; IBOutlet id popUp; IBOutlet id textField; NSInteger index; BOOL used; NSFileManager *fm; NSString *owner; NSInteger how; } - (IBAction)popUpAction:(id)sender; @end @implementation FModuleOwner #define IS 0 #define IS_NOT 1 - (void)dealloc { RELEASE (controlsBox); RELEASE (owner); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; owner = nil; [textField setStringValue: @""]; /* Internationalization */ [popUp removeAllItems]; [popUp insertItemWithTitle: NSLocalizedString(@"is", @"") atIndex: 0]; [popUp insertItemWithTitle: NSLocalizedString(@"is not", @"") atIndex: 2]; [popUp selectItemAtIndex: 0]; } return self; } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { ASSIGN (owner, [criteria objectForKey: @"what"]); how = [[criteria objectForKey: @"how"] intValue]; fm = [NSFileManager defaultManager]; } return self; } - (IBAction)popUpAction:(id)sender { } - (void)setControlsState:(NSDictionary *)info { NSNumber *num = [info objectForKey: @"how"]; NSString *str = [info objectForKey: @"what"]; if (num) { [popUp selectItemAtIndex: [num integerValue]]; } if (str && [str length]) { [textField setStringValue: str]; } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"owner", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSString *str = [textField stringValue]; if ([str length] != 0) { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSInteger idx = [popUp indexOfSelectedItem]; [criteria setObject: str forKey: @"what"]; [criteria setObject: [NSNumber numberWithInteger: idx] forKey: @"how"]; return criteria; } return nil; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { BOOL found = [owner isEqual: [attributes fileOwnerAccountName]]; return (how == IS) ? found : !found; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return NO; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/GNUmakefile0000644000175000001440000000072113251572120024421 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleOwner BUNDLE_EXTENSION = .finder FModuleOwner_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleOwner_OBJC_FILES = FModuleOwner.m FModuleOwner_PRINCIPAL_CLASS = FModuleOwner FModuleOwner_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleOwner.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/GNUmakefile.postamble0000644000175000001440000000010613251572120026403 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/GNUmakefile.preamble0000644000175000001440000000105513214346542026216 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/Resources/0000755000175000001440000000000013214346542024327 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/Resources/FModuleOwner.gorm/0000755000175000001440000000000013214346542027640 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/Resources/FModuleOwner.gorm/data.classes0000644000175000001440000000062013214346542032126 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleOwner = { Actions = ( "popUpAction:" ); Outlets = ( win, controlsBox, popUp, textField ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:", "newAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/Resources/FModuleOwner.gorm/data.info0000644000175000001440000000027013214346542031425 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleOwner/Resources/FModuleOwner.gorm/objects.gorm0000644000175000001440000000576413214346542032173 0ustar multixusersGNUstep archive00002c88:00000022:00000059:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSPopUpButton1NSButton1 NSControl% A  B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00& % starts with0&&&%%00& % ends with0&&&%%%0 &0!&&&&%%%%%0"1 NSTextField% B  C! A  C! A&0# &%0$1NSTextFieldCell0%&%Text&&&&&&&&0%0&1NSColor0'&%NSNamedColorSpace0(&%System0)&%textBackgroundColor0*'(0+& % textColor0,0-&%Box&&&&&&&& %%0.'0/&%System00&%windowBackgroundColor01&%Window02&%Window03&%Window ? ? F@ F@%0405&%NSApplicationIcon&  D D06 &07 &081NSMutableDictionary1 NSDictionary& 09& % MenuItem30:&%NSOwner0;& % FModuleOwner0<& % MenuItem40=&%Box10>& % TextField"0?& % GormNSWindow0@&%MenuItem0A&%View1 0B&%GormNSPopUpButton 0C& % MenuItem20D &0E1 NSNibConnector?0F&%NSOwner0G =F0H AF0I BA0J >A0K @0L C0M 90N <0O1!NSNibOutletConnectorF>0P& % textField0Q!FB0R&%popUp0S!F=0T& % controlsBox0U!F?0V&%win0W1"NSNibControlConnectorBF0X& % popUpAction:0Y&gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/0000755000175000001440000000000014753472316022205 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/FModuleSize.m0000644000175000001440000001025614751213523024544 0ustar multixusers/* FModuleSize.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "FinderModulesProtocol.h" static NSString *nibName = @"FModuleSize"; @interface FModuleSize : NSObject { IBOutlet id win; IBOutlet id controlsBox; IBOutlet id popUp; IBOutlet id textField; NSInteger index; BOOL used; NSFileManager *fm; unsigned long long size; NSInteger how; } - (IBAction)popUpAction:(id)sender; @end @implementation FModuleSize #define GREATER 0 #define LESS 1 - (void)dealloc { RELEASE (controlsBox); [super dealloc]; } - (id)initInterface { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (controlsBox); RELEASE (win); used = NO; index = 0; [textField setStringValue: @""]; /* Internationalization */ [popUp removeAllItems]; [popUp insertItemWithTitle: NSLocalizedString(@"greater than", @"") atIndex: 0]; [popUp insertItemWithTitle: NSLocalizedString(@"less than", @"") atIndex: 1]; [popUp selectItemAtIndex: 0]; } return self; } - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool { self = [super init]; if (self) { size = [[criteria objectForKey: @"what"] unsignedLongLongValue]; how = [[criteria objectForKey: @"how"] intValue]; fm = [NSFileManager defaultManager]; } return self; } - (IBAction)popUpAction:(id)sender { } - (void)setControlsState:(NSDictionary *)info { NSNumber *idxnum = [info objectForKey: @"how"]; NSNumber *sizenum = [info objectForKey: @"what"]; if (idxnum) { [popUp selectItemAtIndex: [idxnum integerValue]]; } if (sizenum) { [textField setStringValue: [sizenum stringValue]]; } } - (id)controls { return controlsBox; } - (NSString *)moduleName { return NSLocalizedString(@"size", @""); } - (BOOL)used { return used; } - (void)setInUse:(BOOL)value { used = value; } - (NSInteger)index { return index; } - (void)setIndex:(NSInteger)idx { index = idx; } - (NSDictionary *)searchCriteria { NSString *str = [textField stringValue]; if ([str length] != 0) { int sz = [str intValue]; if ((sz > 0) && (sz < INT_MAX)) { NSMutableDictionary *criteria = [NSMutableDictionary dictionary]; NSInteger idx = [popUp indexOfSelectedItem]; [criteria setObject: [NSNumber numberWithLong: sz] forKey: @"what"]; [criteria setObject: [NSNumber numberWithInteger: idx] forKey: @"how"]; return criteria; } } return nil; } - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes { unsigned long long fs = ([attributes fileSize] >> 10); if (fs < size) { return (how == LESS) ? YES : NO; } else if (fs > size) { return (how == GREATER) ? YES : NO; } return NO; } - (NSComparisonResult)compareModule:(id )module { NSInteger i1 = [self index]; NSInteger i2 = [module index]; if (i1 < i2) { return NSOrderedAscending; } else if (i1 > i2) { return NSOrderedDescending; } return NSOrderedSame; } - (BOOL)reliesOnModDate { return NO; } - (BOOL)metadataModule { return NO; } @end gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/GNUmakefile0000644000175000001440000000071113251572120024240 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FModuleSize BUNDLE_EXTENSION = .finder FModuleSize_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FModuleSize_OBJC_FILES = FModuleSize.m FModuleSize_PRINCIPAL_CLASS = FModuleSize FModuleSize_RESOURCE_FILES = \ Resources/Images/* \ Resources/FModuleSize.gorm include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/GNUmakefile.postamble0000644000175000001440000000010613251572120026223 0ustar multixusers# Things to do after distcleaning #after-distclean:: # rm GNUmakefile gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/GNUmakefile.preamble0000644000175000001440000000105513214346542026036 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/Resources/0000755000175000001440000000000013214346542024147 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/Resources/FModuleSize.gorm/0000755000175000001440000000000013214346542027300 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/Resources/FModuleSize.gorm/data.classes0000644000175000001440000000061713214346542031574 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FModuleSize = { Actions = ( "popUpAction:" ); Outlets = ( win, controlsBox, popUp, textField ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "popUpAction:", "buttonsAction:", "newAction:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/Resources/FModuleSize.gorm/data.info0000644000175000001440000000027013214346542031065 0ustar multixusersGNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Finder/Modules/FModuleSize/Resources/FModuleSize.gorm/objects.gorm0000644000175000001440000000670513214346542031627 0ustar multixusersGNUstep archive00002c88:00000022:00000068:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% D D@01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &0 1 NSPopUpButton1NSButton1 NSControl% A  B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%contains0&&&%01NSImage0& % common_Nibble%00&%is&&%%00&%is greather then&&%%00& % starts with0&&&%%00 & % ends with0!&&&%%%0"&0#&&&&%%%%%0$1 NSTextField% C  B A  B A&0% &%0&1NSTextFieldCell0'&%Text&&&&&&&&0%0(1NSColor0)&%NSNamedColorSpace0*&%System0+&%textBackgroundColor0,)*0-& % textColor0.% Cj ? A A  A A&0/ &%0001&%KB&&&&&&&&0%02)03&%System04&%textBackgroundColor05)306& % textColor0708&%Box&&&&&&&& %%09)0:&%System0;&%windowBackgroundColor0<&%Window0=&%Window0>&%Window ? ? F@ F@%0?0@&%NSApplicationIcon&  D D0A &0B &0C1NSMutableDictionary1 NSDictionary& 0D& % MenuItem30E&%NSOwner0F& % FModuleSize0G& % MenuItem40H& % TextField$0I&%Box10J&%MenuItem0K& % GormNSWindow0L& % TextField1.0M& % MenuItem10N&%GormNSPopUpButton 0O&%View1 0P& % MenuItem20Q &0R1 NSNibConnectorK0S&%NSOwner0T IS0U OS0V NO0W HO0X J0Y M0Z P0[ D0\ G0]1!NSNibOutletConnectorSH0^& % textField0_!SN0`&%popUp0a!SI0b& % controlsBox0c!SK0d&%win0e LO0f1"NSNibControlConnectorNS0g& % popUpAction:0h&gworkspace-1.1.0/GWorkspace/Finder/Modules/FinderModulesProtocol.h0000644000175000001440000000326414751213523024446 0ustar multixusers/* FinderModulesProtocol.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004-2016 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FINDER_MODULES_PROTOCOL_H #define FINDER_MODULES_PROTOCOL_H @protocol FinderModulesProtocol - (id)initInterface; - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool; - (void)setControlsState:(NSDictionary *)info; - (id)controls; - (NSString *)moduleName; - (BOOL)used; - (void)setInUse:(BOOL)value; - (NSInteger)index; - (void)setIndex:(NSInteger)idx; - (NSDictionary *)searchCriteria; - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes; - (NSComparisonResult)compareModule:(id )module; - (BOOL)reliesOnModDate; - (BOOL)metadataModule; @end @protocol SearchTool - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; @end #endif // FINDER_MODULES_PROTOCOL_H gworkspace-1.1.0/GWorkspace/Finder/Modules/GNUmakefile0000644000175000001440000000057513231754602022067 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = \ FModuleName \ FModuleKind \ FModuleSize \ FModuleOwner \ FModuleCrDate \ FModuleModDate \ FModuleContents \ FModuleAnnotations -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Finder/Modules/GNUmakefile.postamble0000644000175000001440000000117413231754602024050 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWorkspace/Finder/Modules/GNUmakefile.preamble0000644000175000001440000000106013214346542023644 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/Finder/SearchPlacesBox.h0000644000175000001440000000276114751213523021563 0ustar multixusers/* SearchPlacesBox.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef SEARCH_PLACES_BOX #define SEARCH_PLACES_BOX #include #include @interface SearchPlacesBox : NSBox { id finder; } - (void)setFinder:(id)anobject; - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // SEARCH_PLACES_BOX gworkspace-1.1.0/GWorkspace/Finder/SearchPlacesBox.m0000644000175000001440000000373314751213523021570 0ustar multixusers/* SearchPlacesBox.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "SearchPlacesBox.h" #include "Finder.h" @implementation SearchPlacesBox - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if (self) { [self setBorderType: NSNoBorder]; [self setContentViewMargins: NSZeroSize]; [self setTitlePosition: NSNoTitle]; [self registerForDraggedTypes: [NSArray arrayWithObject: NSFilenamesPboardType]]; } return self; } - (void)setFinder:(id)anobject { finder = anobject; } - (NSDragOperation)draggingEntered:(id )sender { return [finder draggingEnteredInSearchPlaces: sender]; } - (NSDragOperation)draggingUpdated:(id )sender { return [finder draggingUpdatedInSearchPlaces: sender]; } - (void)draggingExited:(id )sender { } - (BOOL)prepareForDragOperation:(id )sender { return YES; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { [finder concludeDragOperationInSearchPlaces: sender]; } @end gworkspace-1.1.0/GWorkspace/Finder/SearchPlacesCell.h0000644000175000001440000000214714751213523021710 0ustar multixusers/* SearchPlacesCell.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef SEARCH_PLACES_CELL #define SEARCH_PLACES_CELL #include #include "FSNBrowserCell.h" @interface SearchPlacesCell : FSNBrowserCell { } @end #endif // SEARCH_PLACES_CELL gworkspace-1.1.0/GWorkspace/Finder/SearchPlacesCell.m0000644000175000001440000000227414751213523021716 0ustar multixusers/* SearchPlacesCell.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep FSNode framework * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "SearchPlacesCell.h" @implementation SearchPlacesCell - (void)setNodeInfoShowType:(FSNInfoType)type { showType = type; [self setTitle: [NSString stringWithFormat: @"%@ - %@", [node name], [node parentPath]]]; } @end gworkspace-1.1.0/GWorkspace/Finder/SearchResults/0000755000175000001440000000000014751213736021173 5ustar multixusersgworkspace-1.1.0/GWorkspace/Finder/SearchResults/ResultsTableView.h0000644000175000001440000000241114751213523024600 0ustar multixusers/* ResultsTableView.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef RESULTS_TABLE_VIEW_H #define RESULTS_TABLE_VIEW_H #include #include @interface ResultsTableView : NSTableView { } @end @interface NSObject (ResultsTableViewDelegateMethods) - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows; @end #endif // RESULTS_TABLE_VIEW_H gworkspace-1.1.0/GWorkspace/Finder/SearchResults/ResultsTableView.m0000644000175000001440000000306614751213523024614 0ustar multixusers/* ResultsTableView.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "ResultsTableView.h" @implementation ResultsTableView - (NSImage *)dragImageForRows:(NSArray *)dragRows event:(NSEvent *)dragEvent dragImageOffset:(NSPointPointer)dragImageOffset { id deleg = [self delegate]; if ([deleg respondsToSelector: @selector(tableView:dragImageForRows:)]) { NSImage *image = [deleg tableView: self dragImageForRows: dragRows]; if (image) { return image; } } return [super dragImageForRows: dragRows event: dragEvent dragImageOffset: dragImageOffset]; } @end gworkspace-1.1.0/GWorkspace/Finder/SearchResults/SearchResults.h0000644000175000001440000000753514751213523024137 0ustar multixusers/* SearchResults.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef SEARCH_RESULTS_H #define SEARCH_RESULTS_H #import #import "FSNodeRep.h" @class Finder; @class NSWindow; @class NSView; @class NSScrollView; @class ResultsTableView; @class NSTableColumn; @class FSNPathComponentsViewer; @class NSImage; @class ProgressView; @class DocumentIcon; @protocol SearchToolProtocol - (oneway void)searchWithInfo:(NSData *)srcinfo; - (void)stop; - (oneway void)terminate; @end @interface SearchResults : NSObject { IBOutlet id win; IBOutlet NSBox *topBox; IBOutlet NSBox *progBox; ProgressView *progView; IBOutlet id elementsLabel; NSString *elementsStr; IBOutlet id stopButt; IBOutlet id restartButt; IBOutlet NSBox *dragIconBox; DocumentIcon *documentIcon; IBOutlet NSScrollView *resultsScroll; ResultsTableView *resultsView; NSTableColumn *nameColumn; NSTableColumn *parentColumn; NSTableColumn *dateColumn; NSTableColumn *sizeColumn; NSTableColumn *kindColumn; IBOutlet NSBox *pathBox; FSNPathComponentsViewer *pathViewer; int visibleRows; NSMutableArray *foundObjects; FSNInfoType currentOrder; Finder *finder; NSArray *searchPaths; NSDictionary *searchCriteria; BOOL recursive; NSConnection *conn; NSConnection *toolConn; id searchtool; BOOL searching; NSFileManager *fm; id ws; NSNotificationCenter *nc; } - (void)activateForSelection:(NSArray *)selection withSearchCriteria:(NSDictionary *)criteria recursive:(BOOL)rec; - (void)connectionDidDie:(NSNotification *)notification; - (void)checkSearchTool:(id)sender; - (void)registerSearchTool:(id)tool; - (void)nextResult:(NSString *)path; - (void)endOfSearch; - (BOOL)searching; - (IBAction)stopSearch:(id)sender; - (IBAction)restartSearch:(id)sender; - (void)updateShownData; - (void)setCurrentOrder:(FSNInfoType)order; - (NSArray *)selectedObjects; - (void)doubleClickOnResultsView:(id)sender; - (void)selectObjects:(NSArray *)objects; - (void)fileSystemDidChange:(NSNotification *)notif; - (void)setColumnsSizes; - (void)saveColumnsSizes; - (NSWindow *)win; - (unsigned long)memAddress; - (void)createLiveSearchFolderAtPath:(NSString *)path; // ResultsTableView delegate - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows; @end @interface ProgressView : NSView { NSMutableArray *images; NSUInteger index; NSTimeInterval rfsh; NSTimer *progTimer; BOOL animating; } - (id)initWithFrame:(NSRect)frameRect refreshInterval:(NSTimeInterval)refresh; - (void)start; - (void)stop; - (void)animate:(id)sender; @end @interface DocumentIcon : NSView { NSImage *icon; id searchResult; } - (id)initWithFrame:(NSRect)frameRect searchResult:(id)sres; - (void)startExternalDragOnEvent:(NSEvent *)event; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; - (BOOL)ignoreModifierKeysWhileDragging; @end #endif // SEARCH_RESULTS_H gworkspace-1.1.0/GWorkspace/Finder/SearchResults/SearchResults.m0000644000175000001440000007140314751213736024145 0ustar multixusers/* SearchResults.m * * Copyright (C) 2004-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "SearchResults.h" #import "ResultsTableView.h" #import "FSNTextCell.h" #import "Finder.h" #import "FinderModulesProtocol.h" #import "FSNode.h" #import "FSNodeRep.h" #import "FSNPathComponentsViewer.h" #import "GWFunctions.h" #import "Dialogs/Dialogs.h" #define CELLS_HEIGHT (28.0) #define LSF_INFO(x) [x stringByAppendingPathComponent: @"lsf.info"] #define LSF_FOUND(x) [x stringByAppendingPathComponent: @"lsf.found"] static NSString *nibName = @"SearchResults"; static NSString *lsfname = @"LiveSearch.lsf"; @implementation SearchResults - (void)dealloc { [nc removeObserver: self]; if (toolConn != nil) { if (searchtool != nil) { [searchtool terminate]; } DESTROY (searchtool); DESTROY (toolConn); } RELEASE (win); RELEASE (searchCriteria); RELEASE (foundObjects); RELEASE (searchPaths); RELEASE (elementsStr); DESTROY (conn); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults; id entry; NSRect r; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } [win setFrameUsingName: @"search_results"]; [win setAcceptsMouseMovedEvents: YES]; [win setDelegate: self]; progView = [[ProgressView alloc] initWithFrame: NSMakeRect(0, 0, 16, 16) refreshInterval: 0.1]; [progBox setContentView: progView]; RELEASE (progView); r = [[dragIconBox contentView] bounds]; documentIcon = [[DocumentIcon alloc] initWithFrame: r searchResult: self]; [dragIconBox setContentView: documentIcon]; RELEASE (documentIcon); [elementsLabel setStringValue: @""]; ASSIGN (elementsStr, NSLocalizedString(@"elements", @"")); [stopButt setImage: [NSImage imageNamed: @"stop_small"]]; [stopButt setEnabled: NO]; [restartButt setImage: [NSImage imageNamed: @"magnify_small"]]; [restartButt setEnabled: NO]; [resultsScroll setBorderType: NSBezelBorder]; [resultsScroll setHasHorizontalScroller: YES]; [resultsScroll setHasVerticalScroller: YES]; r = [[resultsScroll contentView] bounds]; resultsView = [[ResultsTableView alloc] initWithFrame: r]; [resultsView setDrawsGrid: NO]; [resultsView setAllowsColumnSelection: NO]; [resultsView setAllowsColumnReordering: YES]; [resultsView setAllowsColumnResizing: YES]; [resultsView setAllowsEmptySelection: YES]; [resultsView setAllowsMultipleSelection: YES]; [resultsView setRowHeight: CELLS_HEIGHT]; [resultsView setIntercellSpacing: NSZeroSize]; [resultsView sizeLastColumnToFit]; nameColumn = [[NSTableColumn alloc] initWithIdentifier: @"name"]; [nameColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [nameColumn setEditable: NO]; [nameColumn setResizable: YES]; [[nameColumn headerCell] setStringValue: NSLocalizedString(@"Name", @"")]; [[nameColumn headerCell] setAlignment: NSLeftTextAlignment]; [nameColumn setMinWidth: 80]; [nameColumn setWidth: 140]; [resultsView addTableColumn: nameColumn]; RELEASE (nameColumn); parentColumn = [[NSTableColumn alloc] initWithIdentifier: @"parent"]; [parentColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [parentColumn setEditable: NO]; [parentColumn setResizable: YES]; [[parentColumn headerCell] setStringValue: NSLocalizedString(@"Parent", @"")]; [[parentColumn headerCell] setAlignment: NSLeftTextAlignment]; [parentColumn setMinWidth: 80]; [parentColumn setWidth: 90]; [resultsView addTableColumn: parentColumn]; RELEASE (parentColumn); dateColumn = [[NSTableColumn alloc] initWithIdentifier: @"date"]; [dateColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [dateColumn setEditable: NO]; [dateColumn setResizable: YES]; [[dateColumn headerCell] setStringValue: NSLocalizedString(@"Date Modified", @"")]; [[dateColumn headerCell] setAlignment: NSLeftTextAlignment]; [dateColumn setMinWidth: 80]; [dateColumn setWidth: 90]; [resultsView addTableColumn: dateColumn]; RELEASE (dateColumn); sizeColumn = [[NSTableColumn alloc] initWithIdentifier: @"size"]; [sizeColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [sizeColumn setEditable: NO]; [sizeColumn setResizable: YES]; [[sizeColumn headerCell] setStringValue: NSLocalizedString(@"Size", @"")]; [[sizeColumn headerCell] setAlignment: NSLeftTextAlignment]; [sizeColumn setMinWidth: 50]; [sizeColumn setWidth: 50]; [resultsView addTableColumn: sizeColumn]; RELEASE (sizeColumn); kindColumn = [[NSTableColumn alloc] initWithIdentifier: @"kind"]; [kindColumn setDataCell: AUTORELEASE ([[FSNTextCell alloc] init])]; [kindColumn setEditable: NO]; [kindColumn setResizable: YES]; [[kindColumn headerCell] setStringValue: NSLocalizedString(@"Type", @"")]; [[kindColumn headerCell] setAlignment: NSLeftTextAlignment]; [kindColumn setMinWidth: 80]; [kindColumn setWidth: 80]; [resultsView addTableColumn: kindColumn]; RELEASE (kindColumn); [resultsScroll setDocumentView: resultsView]; RELEASE (resultsView); [self setColumnsSizes]; [resultsView setDataSource: self]; [resultsView setDelegate: self]; [resultsView setTarget: self]; [resultsView setDoubleAction: @selector(doubleClickOnResultsView:)]; foundObjects = [NSMutableArray new]; defaults = [NSUserDefaults standardUserDefaults]; entry = [defaults stringForKey: @"sorting_order"]; if (entry) { [self setCurrentOrder: [entry intValue]]; } else { [self setCurrentOrder: FSNInfoNameType]; } r = [[pathBox contentView] bounds]; pathViewer = [[FSNPathComponentsViewer alloc] initWithFrame: r]; [pathBox setContentView: pathViewer]; RELEASE (pathViewer); finder = [Finder finder]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; nc = [NSNotificationCenter defaultCenter]; [nc addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; } return self; } - (void)activateForSelection:(NSArray *)selection withSearchCriteria:(NSDictionary *)criteria recursive:(BOOL)rec { NSString *cname; NSString *cmd; [win makeKeyAndOrderFront: nil]; visibleRows = (int)([resultsScroll bounds].size.height / CELLS_HEIGHT + 1); ASSIGN (searchPaths, selection); ASSIGN (searchCriteria, criteria); recursive = rec; cname = [NSString stringWithFormat: @"search_%lu", [self memAddress]]; if (conn == nil) { conn = [[NSConnection alloc] initWithReceivePort: (NSPort *)[NSPort port] sendPort: nil]; [conn setRootObject: self]; [conn registerName: cname]; [conn setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: conn]; } if (toolConn != nil) { if (searchtool != nil) { [searchtool terminate]; } DESTROY (searchtool); [nc removeObserver: self name: NSConnectionDidDieNotification object: toolConn]; [toolConn invalidate]; DESTROY (toolConn); } searchtool = nil; searching = YES; [NSTimer scheduledTimerWithTimeInterval: 5.0 target: self selector: @selector(checkSearchTool:) userInfo: nil repeats: NO]; cmd = [NSTask launchPathForTool: @"searchtool"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: [NSArray arrayWithObject: cname]]; } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn { if (ancestor == conn) { ASSIGN (toolConn, newConn); [toolConn setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: toolConn]; } return YES; } - (void)connectionDidDie:(NSNotification *)notification { id diedconn = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: diedconn]; if ((diedconn == conn) || (toolConn && (diedconn == toolConn))) { DESTROY (searchtool); DESTROY (toolConn); if (diedconn == conn) { DESTROY (conn); } if (searching) { [self endOfSearch]; NSRunAlertPanel(nil, NSLocalizedString(@"the search tool connection died!", @""), NSLocalizedString(@"Continue", @""), nil, nil); } } } - (void)checkSearchTool:(id)sender { if (searching && (searchtool == nil)) { [self endOfSearch]; NSRunAlertPanel(nil, NSLocalizedString(@"unable to launch the search task.", @""), NSLocalizedString(@"Continue", @""), nil, nil); } } - (oneway void)registerSearchTool:(id)tool { NSDictionary *srcdict = [NSDictionary dictionaryWithObjectsAndKeys: searchPaths, @"paths", searchCriteria, @"criteria", [NSNumber numberWithBool: recursive], @"recursion", nil]; NSData *info = [NSArchiver archivedDataWithRootObject: srcdict]; [stopButt setEnabled: YES]; [restartButt setEnabled: NO]; [progView start]; [tool setProtocolForProxy: @protocol(SearchToolProtocol)]; searchtool = (id )[tool retain]; [searchtool searchWithInfo: info]; } - (void)nextResult:(NSString *)path { CREATE_AUTORELEASE_POOL(pool); FSNode *node = [FSNode nodeWithPath: path]; [foundObjects addObject: node]; if ([foundObjects count] <= visibleRows) { [resultsView noteNumberOfRowsChanged]; } [elementsLabel setStringValue: [NSString stringWithFormat: @"%lu %@", (unsigned long)[foundObjects count], elementsStr]]; RELEASE (pool); } - (void)endOfSearch { [stopButt setEnabled: NO]; [restartButt setEnabled: YES]; [progView stop]; searching = NO; if (searchtool) { [nc removeObserver: self name: NSConnectionDidDieNotification object: toolConn]; [searchtool terminate]; DESTROY (searchtool); DESTROY (toolConn); } [self updateShownData]; } - (BOOL)searching { return searching; } - (IBAction)stopSearch:(id)sender { if (searchtool) { [searchtool stop]; } } - (IBAction)restartSearch:(id)sender { if (searchtool == nil) { [pathViewer showComponentsOfSelection: nil]; [foundObjects removeAllObjects]; [resultsView reloadData]; [self activateForSelection: searchPaths withSearchCriteria: searchCriteria recursive: recursive]; } } - (void)updateShownData { SEL sortingSel; NSTableColumn *column; switch(currentOrder) { case FSNInfoNameType: sortingSel = @selector(compareAccordingToName:); column = nameColumn; break; case FSNInfoParentType: sortingSel = @selector(compareAccordingToParent:); column = parentColumn; break; case FSNInfoKindType: sortingSel = @selector(compareAccordingToKind:); column = kindColumn; break; case FSNInfoDateType: sortingSel = @selector(compareAccordingToDate:); column = dateColumn; break; case FSNInfoSizeType: sortingSel = @selector(compareAccordingToSize:); column = sizeColumn; break; default: sortingSel = @selector(compareAccordingToName:); column = nameColumn; break; } [foundObjects sortUsingSelector: sortingSel]; [resultsView setHighlightedTableColumn: column]; [resultsView reloadData]; } - (void)setCurrentOrder:(FSNInfoType)order { currentOrder = order; } - (NSArray *)selectedObjects { NSMutableArray *selected = [NSMutableArray array]; NSEnumerator *enumerator = [resultsView selectedRowEnumerator]; NSNumber *row; while ((row = [enumerator nextObject])) { FSNode *node = [foundObjects objectAtIndex: [row intValue]]; if ([node isValid]) { [selected addObject: node]; } else { [foundObjects removeObject: node]; [resultsView noteNumberOfRowsChanged]; } } return selected; } - (void)doubleClickOnResultsView:(id)sender { [finder openFoundSelection: [self selectedObjects]]; } - (void)selectObjects:(NSArray *)objects { int i; for (i = 0; i < [objects count]; i++) { FSNode *node = [objects objectAtIndex: i]; int index = [foundObjects indexOfObject: node]; [resultsView selectRow: index byExtendingSelection: (i != 0)]; } } - (void)fileSystemDidChange:(NSNotification *)notif { NSDictionary *info = [notif object]; NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; NSArray *files = [info objectForKey: @"files"]; NSMutableArray *deletedObjects = [NSMutableArray array]; NSUInteger i, j; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [destination lastPathComponent]]; } if ([operation isEqual: NSWorkspaceRecycleOperation]) { files = [info objectForKey: @"origfiles"]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fullPath = [source stringByAppendingPathComponent: fname]; for (j = 0; j < [foundObjects count]; j++) { FSNode *node = [foundObjects objectAtIndex: j]; NSString *path = [node path]; if ([fullPath isEqual: path]) { [deletedObjects addObject: node]; } } } } else if ([operation isEqual: @"GWorkspaceRenameOperation"]) { for (i = 0; i < [foundObjects count]; i++) { FSNode *node = [foundObjects objectAtIndex: i]; NSString *path = [node path]; if ([source isEqual: path]) { [deletedObjects addObject: node]; } } } if ([deletedObjects count]) { for (i = 0; i < [deletedObjects count]; i++) { [foundObjects removeObject: [deletedObjects objectAtIndex: i]]; } [resultsView deselectAll: self]; [self updateShownData]; } } - (void)setColumnsSizes { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *columnsDict = [defaults objectForKey: @"columns_sizes"]; if (columnsDict) { NSArray *columns = [resultsView tableColumns]; NSMutableArray *sortedCols = [NSMutableArray array]; NSArray *keys = [columnsDict keysSortedByValueUsingSelector: @selector(compareColInfo:)]; int i; for (i = 0; i < [keys count]; i++) { NSString *identifier = [keys objectAtIndex: i]; int col = [resultsView columnWithIdentifier: identifier]; NSTableColumn *column = [columns objectAtIndex: col]; NSDictionary *cdict = [columnsDict objectForKey: identifier]; float width = [[cdict objectForKey: @"width"] floatValue]; [column setWidth: width]; [sortedCols insertObject: column atIndex: [sortedCols count]]; } for (i = 0; i < [sortedCols count]; i++) { [resultsView removeTableColumn: [sortedCols objectAtIndex: i]]; } for (i = 0; i < [sortedCols count]; i++) { [resultsView addTableColumn: [sortedCols objectAtIndex: i]]; } } } - (void)saveColumnsSizes { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *columnsDict = [NSMutableDictionary dictionary]; NSArray *columns = [resultsView tableColumns]; int i; for (i = 0; i < [columns count]; i++) { NSTableColumn *column = [columns objectAtIndex: i]; NSString *identifier = [column identifier]; NSNumber *cwidth = [NSNumber numberWithFloat: [column width]]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: [NSNumber numberWithInt: i] forKey: @"position"]; [dict setObject: cwidth forKey: @"width"]; [columnsDict setObject: dict forKey: identifier]; } [defaults setObject: columnsDict forKey: @"columns_sizes"]; [defaults synchronize]; } - (NSWindow *)win { return win; } - (unsigned long)memAddress { return (unsigned long)self; } - (void)createLiveSearchFolderAtPath:(NSString *)path { GWDialog *dialog; NSString *folderName; NSArray *contents; int result; dialog = [[GWDialog alloc] initWithTitle: NSLocalizedString(@"New Live Search", @"") editText: lsfname switchTitle: nil]; AUTORELEASE (dialog); [dialog center]; [dialog makeKeyWindow]; [dialog orderFrontRegardless]; result = [dialog runModal]; if (result != NSAlertDefaultReturn) { return; } folderName = [dialog getEditFieldText]; if ([folderName length] == 0) { NSString *msg = NSLocalizedString(@"No name supplied!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } contents = [fm directoryContentsAtPath: path]; if ([contents containsObject: folderName] == NO) { NSNotificationCenter *dnc = [NSDistributedNotificationCenter defaultCenter]; NSMutableDictionary *notifDict = [NSMutableDictionary dictionary]; NSString *lsfpath = [path stringByAppendingPathComponent: folderName]; BOOL lsfdone = YES; [notifDict setObject: @"GWorkspaceCreateDirOperation" forKey: @"operation"]; [notifDict setObject: path forKey: @"source"]; [notifDict setObject: path forKey: @"destination"]; [notifDict setObject: [NSArray arrayWithObject: folderName] forKey: @"files"]; [dnc postNotificationName: @"GWFileSystemWillChangeNotification" object: nil userInfo: notifDict]; if ([fm createDirectoryAtPath: lsfpath attributes: nil]) { NSMutableArray *foundPaths = [NSMutableArray array]; NSMutableDictionary *lsfdict = [NSMutableDictionary dictionary]; int i; for (i = 0; i < [foundObjects count]; i++) { [foundPaths addObject: [[foundObjects objectAtIndex: i] path]]; } [lsfdict setObject: searchPaths forKey: @"searchpaths"]; [lsfdict setObject: searchCriteria forKey: @"criteria"]; [lsfdict setObject: [NSNumber numberWithBool: recursive] forKey: @"recursion"]; [lsfdict setObject: [[NSDate date] description] forKey: @"lastupdate"]; lsfdone = [lsfdict writeToFile: LSF_INFO(lsfpath) atomically: YES]; lsfdone = [foundPaths writeToFile: LSF_FOUND(lsfpath) atomically: YES]; } else { lsfdone = NO; } if (lsfdone) { [finder addLiveSearchFolderWithPath: lsfpath createIndex: YES]; } else { NSString *msg = NSLocalizedString(@"can't create the Live Search folder", @""); NSRunAlertPanel(NULL, msg, NSLocalizedString(@"Ok", @""), NULL, NULL); } [dnc postNotificationName: @"GWFileSystemDidChangeNotification" object: nil userInfo: notifDict]; } else { NSString *msg = [NSString stringWithFormat: @"a file named \"%@\" already exists.\nPlease rename it.", folderName]; NSRunAlertPanel(NULL, msg, NSLocalizedString(@"Ok", @""), NULL, NULL); } } - (BOOL)windowShouldClose:(id)sender { return !searching; } - (void)windowDidMove:(NSNotification *)aNotification { [win saveFrameUsingName: @"search_results"]; } - (void)windowDidBecomeKey:(NSNotification *)aNotification { NSArray *selected = [self selectedObjects]; if ([selected count]) { [finder foundSelectionChanged: selected]; } } - (void)windowWillClose:(NSNotification *)aNotification { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: [NSNumber numberWithInt: currentOrder] forKey: @"sorting_order"]; [defaults synchronize]; [self saveColumnsSizes]; [win saveFrameUsingName: @"search_results"]; [finder resultsWindowWillClose: self]; } // // NSTableDataSource protocol // - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [foundObjects count]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { FSNode *node = [foundObjects objectAtIndex: rowIndex]; if (aTableColumn == nameColumn) { return [node name]; } else if (aTableColumn == parentColumn) { return [[node parentPath] lastPathComponent]; } else if (aTableColumn == dateColumn) { return [node modDateDescription]; } else if (aTableColumn == sizeColumn) { return [node sizeDescription]; } else if (aTableColumn == kindColumn) { return [node typeDescription]; } return [NSString string]; } - (BOOL)tableView:(NSTableView *)aTableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard { NSMutableArray *paths = [NSMutableArray array]; NSMutableArray *parentPaths = [NSMutableArray array]; int i; for (i = 0; i < [rows count]; i++) { int index = [[rows objectAtIndex: i] intValue]; FSNode *node = [foundObjects objectAtIndex: index]; NSString *parentPath = [node parentPath]; if (([parentPaths containsObject: parentPath] == NO) && (i != 0)) { NSString *msg = NSLocalizedString(@"You can't move objects with multiple parent paths!", @""); NSRunAlertPanel(nil, msg, NSLocalizedString(@"Continue", @""), nil, nil); return NO; } if ([node isValid]) { [paths addObject: [node path]]; [parentPaths addObject: parentPath]; } } [pboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; [pboard setPropertyList: paths forType: NSFilenamesPboardType]; return YES; } // // NSTableView delegate methods // - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { NSArray *selected = [self selectedObjects]; [pathViewer showComponentsOfSelection: selected]; if ([selected count]) { [finder foundSelectionChanged: selected]; } } - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if (aTableColumn == nameColumn) { FSNTextCell *cell = (FSNTextCell *)[nameColumn dataCell]; FSNode *node = [foundObjects objectAtIndex: rowIndex]; [cell setIcon: [[FSNodeRep sharedInstance] iconOfSize: 24 forNode: node]]; } else if (aTableColumn == dateColumn) { [(FSNTextCell *)[dateColumn dataCell] setDateCell: YES]; } } - (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn { NSString *newOrderStr = [tableColumn identifier]; FSNInfoType newOrder = FSNInfoNameType; if ([newOrderStr isEqual: @"name"]) { newOrder = FSNInfoNameType; } else if ([newOrderStr isEqual: @"parent"]) { newOrder = FSNInfoParentType; } else if ([newOrderStr isEqual: @"kind"]) { newOrder = FSNInfoKindType; } else if ([newOrderStr isEqual: @"date"]) { newOrder = FSNInfoDateType; } else if ([newOrderStr isEqual: @"size"]) { newOrder = FSNInfoSizeType; } if (newOrder != currentOrder) { currentOrder = newOrder; [self updateShownData]; } [tableView setHighlightedTableColumn: tableColumn]; } // ResultsTableView - (NSImage *)tableView:(NSTableView *)tableView dragImageForRows:(NSArray *)dragRows { if ([dragRows count] > 1) { return [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: 24]; } else { int index = [[dragRows objectAtIndex: 0] intValue]; FSNode *node = [foundObjects objectAtIndex: index]; return [[FSNodeRep sharedInstance] iconOfSize: 24 forNode: node]; } return nil; } @end @implementation ProgressView #define IMAGES 8 - (void)dealloc { RELEASE (images); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect refreshInterval:(NSTimeInterval)refresh { self = [super initWithFrame: frameRect]; if (self) { unsigned i; images = [NSMutableArray new]; for (i = 0; i < IMAGES; i++) { NSString *imname = [NSString stringWithFormat: @"anim-logo-%d.tiff", i]; [images addObject: [NSImage imageNamed: imname]]; } rfsh = refresh; animating = NO; } return self; } - (void)start { index = 0; animating = YES; progTimer = [NSTimer scheduledTimerWithTimeInterval: rfsh target: self selector: @selector(animate:) userInfo: nil repeats: YES]; } - (void)stop { animating = NO; if (progTimer && [progTimer isValid]) { [progTimer invalidate]; } [self setNeedsDisplay: YES]; } - (void)animate:(id)sender { [self setNeedsDisplay: YES]; index++; if (index == [images count]) { index = 0; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (animating) { [[images objectAtIndex: index] compositeToPoint: NSMakePoint(0, 0) operation: NSCompositeSourceOver]; } } @end @implementation DocumentIcon - (void)dealloc { RELEASE (icon); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect searchResult:(id)sres { self = [super initWithFrame: frameRect]; if (self) { ASSIGN (icon, [NSImage imageNamed: @"DragableDocument"]); searchResult = sres; } return self; } - (void)mouseDown:(NSEvent *)theEvent { NSEvent *nextEvent; BOOL startdnd = NO; int dragdelay = 0; if ([theEvent clickCount] == 1) { while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { [[self window] postEvent: nextEvent atStart: NO]; break; } else if ([nextEvent type] == NSLeftMouseDragged) { if (dragdelay < 5) { dragdelay++; } else { startdnd = YES; break; } } } if (startdnd == YES) { [self startExternalDragOnEvent: theEvent]; } } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; [icon compositeToPoint: NSMakePoint(2, 2) operation: NSCompositeSourceOver]; } - (void)startExternalDragOnEvent:(NSEvent *)event { NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; NSArray *dndtypes = [NSArray arrayWithObject: @"GWLSFolderPboardType"]; NSMutableDictionary *pbDict = [NSMutableDictionary dictionary]; NSData *pbData = nil; [pb declareTypes: dndtypes owner: nil]; [pbDict setObject: [NSArray arrayWithObject: lsfname] forKey: @"paths"]; [pbDict setObject: [NSNumber numberWithUnsignedLong: [searchResult memAddress]] forKey: @"sender"]; pbData = [NSArchiver archivedDataWithRootObject: pbDict]; [pb setData: pbData forType: @"GWLSFolderPboardType"]; [self dragImage: icon at: NSZeroPoint offset: NSZeroSize event: event pasteboard: pb source: self slideBack: YES]; } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } - (BOOL)ignoreModifierKeysWhileDragging { return YES; } - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag { [self setNeedsDisplay: YES]; } @end gworkspace-1.1.0/GWorkspace/GNUmakefile.in0000644000175000001440000000602514654175673017670 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make VERSION = @PACKAGE_VERSION@ # # subprojects # SUBPROJECTS = Finder/Modules \ Thumbnailer # # MAIN APP # APP_NAME = GWorkspace GWorkspace_PRINCIPAL_CLASS = GWorkspace GWorkspace_APPLICATION_ICON=FileManager.tiff GWorkspace_HAS_RESOURCE_BUNDLE = yes # # Additional libraries # ADDITIONAL_GUI_LIBS += -lFSNode ADDITIONAL_GUI_LIBS += -lInspector ADDITIONAL_GUI_LIBS += -lOperation GWorkspace_RESOURCE_FILES = \ Resources/Icons/* \ Resources/English.lproj \ Resources/BrasilPortuguese.lproj \ Resources/Dutch.lproj \ Resources/Esperanto.lproj \ Resources/French.lproj \ Resources/German.lproj \ Resources/Hungarian.lproj \ Resources/Italian.lproj \ Resources/Norvegian.lproj \ Resources/Portuguese.lproj \ Resources/Romanian.lproj \ Resources/Spanish.lproj \ Resources/Japanese.lproj \ Resources/Polish.lproj \ GWorkspaceInfo.plist GWorkspace_LANGUAGES = \ Resources/English \ Resources/BrasilPortuguese \ Resources/Dutch \ Resources/Esperanto \ Resources/French \ Resources/German \ Resources/Hungarian \ Resources/Italian \ Resources/Norvegian \ Resources/Portuguese \ Resources/Romanian \ Resources/Spanish \ Resources/Japanese \ Resources/Polish # The Objective-C source files to be compiled GWorkspace_OBJC_FILES = main.m \ GWFunctions.m \ GWorkspace.m \ WorkspaceApplication.m \ Desktop/GWDesktopManager.m \ Desktop/GWDesktopWindow.m \ Desktop/GWDesktopView.m \ Desktop/GWDesktopIcon.m \ Desktop/Dock/Dock.m \ Desktop/Dock/DockIcon.m \ FileViewer/GWViewersManager.m \ FileViewer/GWViewer.m \ FileViewer/GWViewerWindow.m \ FileViewer/GWViewerBrowser.m \ FileViewer/GWViewerIconsView.m \ FileViewer/GWViewerListView.m \ FileViewer/GWViewerShelf.m \ FileViewer/GWViewerSplit.m \ FileViewer/GWViewerScrollView.m \ FileViewer/GWViewerIconsPath.m \ FileViewer/GWViewerPathsPopUp.m \ Finder/Finder.m \ Finder/FindModuleView.m \ Finder/SearchPlacesBox.m \ Finder/SearchPlacesCell.m \ Finder/SearchResults/SearchResults.m \ Finder/SearchResults/ResultsTableView.m \ Finder/LiveSearch/LSFolder.m \ Finder/LiveSearch/LSFEditor.m \ TShelf/TShelfWin.m \ TShelf/TShelfView.m \ TShelf/TShelfViewItem.m \ TShelf/TShelfIcon.m \ TShelf/TShelfFileIcon.m \ TShelf/TShelfPBIcon.m \ TShelf/TShelfIconsView.m \ Preferences/PrefController.m \ Preferences/DefEditorPref.m \ Preferences/XTermPref.m \ Preferences/DefSortOrderPref.m \ Preferences/IconsPref.m \ Preferences/HiddenFilesPref.m \ Preferences/HistoryPref.m \ Preferences/BrowserViewerPref.m \ Preferences/OperationPrefs.m \ Preferences/DesktopPref.m \ History/History.m \ Dialogs/Dialogs.m \ Dialogs/ExecuteController.m \ Dialogs/OpenWithController.m \ Dialogs/RunExternalController.m \ Dialogs/CompletionField.m \ Dialogs/StartAppWin.m \ Fiend/Fiend.m \ Fiend/FiendLeaf.m \ Thumbnailer/GWThumbnailer.m \ -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/GNUmakefile.postamble0000644000175000001440000000345013214346542021231 0ustar multixusers # Things to do before compiling before-all:: $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/GWorkspace $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Desktop $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Desktop/Dock $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Finder $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Finder/SearchResults $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Finder/LiveSearch $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/FileViewer $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/TShelf $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Preferences $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Dialogs $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Fiend $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/History # Things to do after compiling # after-all:: # Things to do before installing before-install:: before-all:: $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/GWorkspace $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/FileViewer $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Desktop $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Desktop/Dock $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Finder $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Finder/SearchResults $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Finder/LiveSearch $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/TShelf $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Preferences $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Dialogs $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Fiend $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/History # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # rm -rf Inspectors/Viewers/Library rm -rf autom4te*.cache rm -f config.status config.log config.cache config.h TAGS GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/GWorkspace/GNUmakefile.preamble0000644000175000001440000000354713214346542021041 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -IGWorkspace -I../GWorkspace -I../../GWorkspace ADDITIONAL_INCLUDE_DIRS += -IDesktop -I../Desktop ADDITIONAL_INCLUDE_DIRS += -IDesktop/Dock ADDITIONAL_INCLUDE_DIRS += -IFinder -I../Finder ADDITIONAL_INCLUDE_DIRS += -IFinder/SearchResults ADDITIONAL_INCLUDE_DIRS += -IFinder/LiveSearch ADDITIONAL_INCLUDE_DIRS += -IFinder/Modules #ADDITIONAL_INCLUDE_DIRS += -IInspector -I../Inspector ADDITIONAL_INCLUDE_DIRS += -IFileViewer -I../FileViewer ADDITIONAL_INCLUDE_DIRS += -IFileAnnotations -I../FileAnnotations ADDITIONAL_INCLUDE_DIRS += -IHistory -I../History ADDITIONAL_INCLUDE_DIRS += -IDialogs -I../Dialogs -I../../Dialogs ADDITIONAL_INCLUDE_DIRS += -I../FSNode -I../../FSNode -I../../../FSNode ADDITIONAL_INCLUDE_DIRS += -I../Inspector -I../../Inspector ADDITIONAL_INCLUDE_DIRS += -I../Operation -I../../Operation # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += -L../FSNode/FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../Inspector/Inspector.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../Operation/Operation.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../FSNode/FSNode.framework ADDITIONAL_LIB_DIRS += -L../Inspector/Inspector.framework ADDITIONAL_LIB_DIRS += -L../Operation/Operation.framework ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/GWorkspace/GWFunctions.h0000644000175000001440000000501514751213523017547 0ustar multixusers/* GWFunctions.h * * Copyright (C) 2003-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FUNCTIONS_H #define FUNCTIONS_H #include "config.h" @class NSString; @class NSMenuItem; #ifndef GW_DEBUG_LOG #define GW_DEBUG_LOG 0 #endif #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) #ifndef MAKE_LABEL #define MAKE_LABEL(label, rect, str, align, release, view) { \ label = [[NSTextField alloc] initWithFrame: rect]; \ [label setFont: [NSFont systemFontOfSize: 12]]; \ if (align == 'c') [label setAlignment: NSCenterTextAlignment]; \ else if (align == 'r') [label setAlignment: NSRightTextAlignment]; \ else [label setAlignment: NSLeftTextAlignment]; \ [label setBackgroundColor: [NSColor windowBackgroundColor]]; \ [label setBezeled: NO]; \ [label setEditable: NO]; \ [label setSelectable: NO]; \ if (str) [label setStringValue: str]; \ [view addSubview: label]; \ if (release) RELEASE (label); \ } #endif #ifndef STROKE_LINE #define STROKE_LINE(c, x1, y1, x2, y2) { \ [[NSColor c] set]; \ [NSBezierPath strokeLineFromPoint: NSMakePoint(x1, y1) \ toPoint: NSMakePoint(x2, y2)]; \ } #endif #ifndef ICONCENTER #define ICONCENTER(v, i, p) \ { \ NSSize ss = [v bounds].size; \ NSSize is = [i size]; \ p = NSMakePoint((ss.width - is.width) / 2, (ss.height - is.height) / 2); \ } #endif #ifndef ICNMAX #define ICNMAX 48 #endif NSString *systemRoot(void); NSString *cutFileLabelText(NSString *filename, id label, int lenght); BOOL subPathOfPath(NSString *p1, NSString *p2); NSString *pathRemovingPrefix(NSString *path, NSString *prefix); NSString *commonPrefixInArray(NSArray *a); NSRect rectForWindow(NSArray *otherwins, NSRect proposedRect, BOOL checkKey); #endif gworkspace-1.1.0/GWorkspace/GWFunctions.m0000644000175000001440000001430514751213523017556 0ustar multixusers/* GWFunctions.m * * Copyright (C) 2003-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #import #import #import "GWFunctions.h" #define ATTRIBUTES_AT_PATH(a, p, l) \ a = [[NSFileManager defaultManager] fileAttributesAtPath: (NSString *)p traverseLink: l] #define SORT_INDEX(i, p) { \ BOOL isdir; \ [[NSFileManager defaultManager] fileExistsAtPath: (NSString *)p isDirectory: &isdir]; \ if (isdir) { \ i = 2; \ } else { \ if ([[NSFileManager defaultManager] isExecutableFileAtPath: (NSString *)p] == YES) { \ i = 1; \ } else { \ i = 0; \ } \ } } #define byname 0 #define bykind 1 #define bydate 2 #define bysize 3 #define byowner 4 static NSString *dots = @"..."; static float dtslenght = 0.0; static NSFont *lablfont = nil; static NSDictionary *fontAttr = nil; @protocol IconsProtocol - (NSString *)myName; @end NSString *systemRoot() { static NSString *root = nil; if (root == nil) { #if defined(__MINGW32__) /* FIXME !!!!!! */ root = @"\\"; #else root = @"/"; #endif RETAIN (root); } return root; } NSString *cutFileLabelText(NSString *filename, id label, int lenght) { if (lenght > 0) { NSFont *font = [label font]; if ((lablfont == nil) || ([lablfont isEqual: font] == NO)) { ASSIGN (lablfont, font); ASSIGN (fontAttr, [NSDictionary dictionaryWithObject: lablfont forKey: NSFontAttributeName]); dtslenght = [dots sizeWithAttributes: fontAttr].width; } if ([filename sizeWithAttributes: fontAttr].width > lenght) { int tl = [filename length]; if (tl <= 5) { return dots; } else { int fpto = (tl / 2) - 2; int spfr = fpto + 3; NSString *fp = [filename substringToIndex: fpto]; NSString *sp = [filename substringFromIndex: spfr]; NSString *dotted = [NSString stringWithFormat: @"%@%@%@", fp, dots, sp]; int dl = [dotted length]; float dotl = [dotted sizeWithAttributes: fontAttr].width; int p = 0; while (dotl > lenght) { if (dl <= 5) { return dots; } if (p) { fpto--; } else { spfr++; } p = !p; fp = [filename substringToIndex: fpto]; sp = [filename substringFromIndex: spfr]; dotted = [NSString stringWithFormat: @"%@%@%@", fp, dots, sp]; dotl = [dotted sizeWithAttributes: fontAttr].width; dl = [dotted length]; } return dotted; } } return filename; } return filename; } BOOL subPathOfPath(NSString *p1, NSString *p2) { int l1 = [p1 length]; int l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqual: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqual: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } NSString *pathRemovingPrefix(NSString *path, NSString *prefix) { if ([path hasPrefix: prefix]) { return [path substringFromIndex: [path rangeOfString: prefix].length + 1]; } return path; } NSString *commonPrefixInArray(NSArray *a) { NSString *s = @""; unsigned minlngt = INT_MAX; int index = 0; BOOL done = NO; int i, j; if ([a count] == 0) { return nil; } if ([a count] == 1) { return [a objectAtIndex: 0]; } for (i = 0; i < [a count]; i++) { unsigned l = [[a objectAtIndex: i] length]; if (l < minlngt) { minlngt = l; } } while (index < minlngt) { NSString *s1, *s2; unichar c1, c2; s1 = s2 = nil; for (i = 0; i < [a count]; i++) { s1 = [a objectAtIndex: i]; c1 = [s1 characterAtIndex: index]; for (j = 0; j < [a count]; j++) { s2 = [a objectAtIndex: j]; c2 = [s2 characterAtIndex: index]; if (i != j) { if (c1 != c2) { done = YES; break; } } } if (done) { break; } } if (done) { break; } s = [s1 substringWithRange: NSMakeRange(0, index + 1)]; index++; } if ([s length]) { return s; } return nil; } NSRect rectForWindow(NSArray *otherwins, NSRect proposedRect, BOOL checkKey) { NSRect scr = [[NSScreen mainScreen] visibleFrame]; NSRect wr = proposedRect; int margin = 50; int shift = 100; NSPoint p = wr.origin; int i; for (i = [otherwins count] - 1; i >= 0; i--) { NSWindow *window = [otherwins objectAtIndex: i]; if ([window isKeyWindow] || (checkKey == NO)) { p = [window frame].origin; p.x += shift; p.y -= shift; p.y = (p.y < margin) ? margin : p.y; if ((p.x + proposedRect.size.width) > (scr.size.width - margin)) { p.x -= (shift * 2); } wr.origin = p; } } for (i = 0; i < [otherwins count]; i++) { NSRect r = [[otherwins objectAtIndex: i] frame]; if (NSEqualRects(wr, r)) { p.x += shift; p.y -= shift; p.y = (p.y < margin) ? margin : p.y; if ((p.x + proposedRect.size.width) > (scr.size.width - margin)) { p.x -= (shift * 2); } wr.origin = p; } } if (NSEqualRects(wr, proposedRect)) { wr.origin.x = scr.origin.x + shift; wr.origin.y = scr.size.height - wr.size.height - shift; } return NSIntegralRect(wr); } gworkspace-1.1.0/GWorkspace/GWorkspace.h0000644000175000001440000003113514751213523017410 0ustar multixusers/* GWorkspace.h * * Copyright (C) 2003-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef GWORKSPACE_H #define GWORKSPACE_H #import #import #import #define NOEDIT 0 #define NOXTERM 1 /* defines the maximum number of files to open before issuing a dialog */ #define MAX_FILES_TO_OPEN_DIALOG 8 @class NSWorkspace; @class FSNode; @class FSNodeRep; @class GWViewersManager; @class GWDesktopManager; @class Finder; @class Inspector; @class Operation; @class GWViewer; @class PrefController; @class Fiend; @class History; @class TShelfWin; @class OpenWithController; @class RunExternalController; @class StartAppWin; @class GWLaunchedApp; @protocol FSWClientProtocol - (oneway void)watchedPathDidChange:(NSData *)dirinfo; - (oneway void)globalWatchedPathDidChange:(NSDictionary *)dirinfo; @end @protocol FSWatcherProtocol - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; @end @protocol RecyclerAppProtocol - (oneway void)emptyTrash:(id)sender; @end @protocol DDBdProtocol - (oneway void)insertPath:(NSString *)path; - (oneway void)removePath:(NSString *)path; - (NSString *)annotationsForPath:(NSString *)path; - (oneway void)setAnnotations:(NSString *)annotations forPath:(NSString *)path; - (oneway void)fileSystemDidChange:(NSData *)info; @end @protocol MDExtractorProtocol @end /* The protocol of the remote dnd source */ @protocol GWRemoteFilesDraggingInfo - (oneway void)remoteDraggingDestinationReply:(NSData *)reply; @end @interface GWorkspace : NSObject { FSNodeRep *fsnodeRep; NSArray *selectedPaths; NSMutableArray *trashContents; NSString *trashPath; id fswatcher; BOOL fswnotifications; NSCountedSet *watchedPaths; id recyclerApp; BOOL recyclerCanQuit; id ddbd; id mdextractor; PrefController *prefController; Fiend *fiend; History *history; int maxHistoryCache; GWViewersManager *vwrsManager; GWDesktopManager *dtopManager; Inspector *inspector; Finder *finder; Operation *fileOpsManager; BOOL dontWarnOnQuit; BOOL terminating; TShelfWin *tshelfWin; NSString *tshelfPBDir; int tshelfPBFileNum; OpenWithController *openWithController; RunExternalController *runExtController; StartAppWin *startAppWin; NSString *gwProcessName; NSString *gwBundlePath; NSString *defEditor; NSString *defXterm; NSString *defXtermArgs; BOOL teminalService; NSFileManager *fm; // // WorkspaceApplication // NSWorkspace *ws; NSNotificationCenter *wsnc; NSMutableArray *launchedApps; GWLaunchedApp *activeApplication; NSString *storedAppinfoPath; NSDistributedLock *storedAppinfoLock; NSTimer *logoutTimer; BOOL loggingout; int autoLogoutDelay; int maxLogoutDelay; int logoutDelay; } + (GWorkspace *)gworkspace; + (void)registerForServices; - (void)createMenu; - (NSString *)defEditor; - (NSString *)defXterm; - (NSString *)defXtermArgs; - (GWViewersManager *)viewersManager; - (GWDesktopManager *)desktopManager; - (History *)historyWindow; - (NSImage *)tshelfBackground; - (void)tshelfBackgroundDidChange; - (NSString *)tshelfPBDir; - (NSString *)tshelfPBFilePath; - (id)rootViewer; - (void)showRootViewer; - (void)rootViewerSelectFiles:(NSArray *)paths; - (void)newViewerAtPath:(NSString *)path; - (void)changeDefaultEditor:(NSNotification *)notif; - (void)changeDefaultXTerm:(NSString *)xterm arguments:(NSString *)args; - (void)setUseTerminalService:(BOOL)value; - (NSString *)gworkspaceProcessName; - (void)updateDefaults; - (void)setContextHelp; - (NSAttributedString *)contextHelpFromName:(NSString *)fileName; - (void)startXTermOnDirectory:(NSString *)dirPath; - (int)defaultSortType; - (void)setDefaultSortType:(int)type; - (void)createTabbedShelf; - (TShelfWin *)tabbedShelf; - (StartAppWin *)startAppWin; - (void)fileSystemWillChange:(NSNotification *)notif; - (void)fileSystemDidChange:(NSNotification *)notif; - (void)setSelectedPaths:(NSArray *)paths; - (void)resetSelectedPaths; - (NSArray *)selectedPaths; - (void)openSelectedPaths:(NSArray *)paths newViewer:(BOOL)newv; - (void)openSelectedPathsWith; - (BOOL)openFile:(NSString *)fullPath; - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename; - (NSArray *)getSelectedPaths; - (void)showPasteboardData:(NSData *)data ofType:(NSString *)type typeIcon:(NSImage *)icon; - (void)newObjectAtPath:(NSString *)basePath isDirectory:(BOOL)directory; - (void)duplicateFiles; - (void)deleteFiles; - (void)moveToTrash; - (BOOL)verifyFileAtPath:(NSString *)path; - (void)setUsesThumbnails:(BOOL)value; - (void)thumbnailsDidChange:(NSNotification *)notif; - (void)removableMediaPathsDidChange:(NSNotification *)notif; - (void)reservedMountNamesDidChange:(NSNotification *)notif; - (void)hideDotsFileDidChange:(NSNotification *)notif; - (void)hiddenFilesDidChange:(NSArray *)paths; - (void)customDirectoryIconDidChange:(NSNotification *)notif; - (void)applicationForExtensionsDidChange:(NSNotification *)notif; - (int)maxHistoryCache; - (void)setMaxHistoryCache:(int)value; - (void)connectFSWatcher; - (void)fswatcherConnectionDidDie:(NSNotification *)notif; - (void)connectRecycler; - (void)recyclerConnectionDidDie:(NSNotification *)notif; - (void)connectDDBd; - (void)ddbdConnectionDidDie:(NSNotification *)notif; - (BOOL)ddbdactive; - (void)ddbdInsertPath:(NSString *)path; - (void)ddbdRemovePath:(NSString *)path; - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; - (void)ddbdSetAnnotations:(NSString *)annotations forPath:(NSString *)path; - (void)connectMDExtractor; - (void)mdextractorConnectionDidDie:(NSNotification *)notif; - (void)slideImage:(NSImage *)image from:(NSPoint)fromPoint to:(NSPoint)toPoint; // // NSServicesRequests protocol // - (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType; - (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard; - (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types; // // Menu Operations // #if 0 - (void)closeMainWin:(id)sender; #endif - (void)logout:(id)sender; - (void)showInfo:(id)sender; - (void)showPreferences:(id)sender; - (void)showViewer:(id)sender; - (void)showHistory:(id)sender; - (void)showInspector:(id)sender; - (void)showAttributesInspector:(id)sender; - (void)showContentsInspector:(id)sender; - (void)showToolsInspector:(id)sender; - (void)showAnnotationsInspector:(id)sender; - (void)showDesktop:(id)sender; - (void)showRecycler:(id)sender; - (void)showFinder:(id)sender; - (void)showFiend:(id)sender; - (void)hideFiend:(id)sender; - (void)addFiendLayer:(id)sender; - (void)removeFiendLayer:(id)sender; - (void)renameFiendLayer:(id)sender; - (void)showTShelf:(id)sender; - (void)hideTShelf:(id)sender; - (void)selectSpecialTShelfTab:(id)sender; - (void)addTShelfTab:(id)sender; - (void)removeTShelfTab:(id)sender; - (void)renameTShelfTab:(id)sender; - (void)runCommand:(id)sender; - (void)checkRemovableMedia:(id)sender; - (void)emptyRecycler:(id)sender; // // DesktopApplication protocol // - (void)selectionChanged:(NSArray *)newsel; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionWithApp:(id)sender; - (void)performFileOperation:(NSDictionary *)opinfo; - (BOOL)filenamesWasCut; - (void)setFilenamesCut:(BOOL)value; - (void)lsfolderDragOperation:(NSData *)opinfo concludedAtPath:(NSString *)path; - (void)concludeRemoteFilesDragOperation:(NSData *)opinfo atLocalPath:(NSString *)localPath; - (void)addWatcherForPath:(NSString *)path; - (void)removeWatcherForPath:(NSString *)path; - (NSString *)trashPath; - (id)workspaceApplication; - (BOOL)terminating; @end @interface GWorkspace (SharedInspector) - (oneway void)showExternalSelection:(NSArray *)selection; @end @interface GWorkspace (WorkspaceApplication) - (BOOL)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files tag:(NSInteger *)tag; - (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath; - (int)extendPowerOffBy:(int)requested; - (NSArray *)launchedApplications; - (NSDictionary *)activeApplication; - (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appname andDeactivate:(BOOL)flag; - (BOOL)launchApplication:(NSString *)appname showIcon:(BOOL)showIcon autolaunch:(BOOL)autolaunch; - (BOOL)openTempFile:(NSString *)fullPath; @end @interface GWorkspace (Applications) - (void)initializeWorkspace; - (void)applicationName:(NSString **)appName andPath:(NSString **)appPath forName:(NSString *)name; - (BOOL)launchApplication:(NSString *)appname arguments:(NSArray *)args; - (void)appWillLaunch:(NSNotification *)notif; - (void)appDidLaunch:(NSNotification *)notif; - (void)appDidTerminate:(NSNotification *)notif; - (void)appDidBecomeActive:(NSNotification *)notif; - (void)appDidResignActive:(NSNotification *)notif; - (void)activateAppWithPath:(NSString *)path andName:(NSString *)name; - (void)appDidHide:(NSNotification *)notif; - (void)appDidUnhide:(NSNotification *)notif; - (void)unhideAppWithPath:(NSString *)path andName:(NSString *)name; - (void)applicationTerminated:(GWLaunchedApp *)app; - (GWLaunchedApp *)launchedAppWithPath:(NSString *)path andName:(NSString *)name; - (NSArray *)storedAppInfo; - (void)updateStoredAppInfoWithLaunchedApps:(NSArray *)apps; - (void)checkLastRunningApps; - (void)startLogout; - (void)doLogout:(id)sender; - (void)terminateTasks:(id)sender; @end @interface GWLaunchedApp : NSObject { NSTask *task; NSString *name; NSString *path; NSNumber *identifier; NSConnection *conn; id application; BOOL active; BOOL hidden; GWorkspace *gw; NSNotificationCenter *nc; } + (id)appWithApplicationPath:(NSString *)apath applicationName:(NSString *)aname launchedTask:(NSTask *)atask; + (id)appWithApplicationPath:(NSString *)apath applicationName:(NSString *)aname processIdentifier:(NSNumber *)ident checkRunning:(BOOL)check; - (NSDictionary *)appInfo; - (void)setTask:(NSTask *)atask; - (NSTask *)task; - (void)setPath:(NSString *)apath; - (NSString *)path; - (void)setName:(NSString *)aname; - (NSString *)name; - (void)setIdentifier:(NSNumber *)ident; - (NSNumber *)identifier; - (id)application; - (void)setActive:(BOOL)value; - (BOOL)isActive; - (void)activateApplication; - (void)setHidden:(BOOL)value; - (BOOL)isHidden; - (void)hideApplication; - (void)unhideApplication; - (BOOL)isApplicationHidden; - (BOOL)gwlaunched; - (BOOL)isRunning; - (void)terminateApplication; - (void)terminateTask; - (void)connectApplication:(BOOL)showProgress; - (void)connectionDidDie:(NSNotification *)notif; @end @interface NSWorkspace (WorkspaceApplication) - (id)_workspaceApplication; @end #endif // GWORKSPACE_H gworkspace-1.1.0/GWorkspace/GWorkspace.m0000644000175000001440000024412114751213523017416 0ustar multixusers/* GWorkspace.m * * Copyright (C) 2003-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include "config.h" /* the following for getrlimit */ #include #include #ifdef HAVE_SYS_RESOURCE_H #include #endif /* getrlimit */ #import #import #import #import "GWFunctions.h" #import "FSNodeRep.h" #import "FSNFunctions.h" #import "GWorkspace.h" #import "Dialogs.h" #import "OpenWithController.h" #import "RunExternalController.h" #import "StartAppWin.h" #import "Preferences/PrefController.h" #import "Fiend/Fiend.h" #import "GWDesktopManager.h" #import "Dock.h" #import "GWViewersManager.h" #import "GWViewer.h" #import "Finder.h" #import "Inspector.h" #import "Operation.h" #import "TShelf/TShelfWin.h" #import "TShelf/TShelfView.h" #import "TShelf/TShelfViewItem.h" #import "TShelf/TShelfIconsView.h" #import "History/History.h" static NSString *defaulteditor = @"nedit.app"; static NSString *defaultxterm = @"xterm"; static GWorkspace *gworkspace = nil; @interface GWorkspace (PrivateMethods) - (void)_updateTrashContents; @end @implementation GWorkspace #ifndef byname #define byname 0 #define bykind 1 #define bydate 2 #define bysize 3 #define byowner 4 #endif #define HISTORT_CACHE_MAX 20 #ifndef TSHF_MAXF #define TSHF_MAXF 999 #endif + (void)initialize { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: @"GWorkspace" forKey: @"DesktopApplicationName"]; [defaults setObject: @"gworkspace" forKey: @"DesktopApplicationSelName"]; [defaults synchronize]; } + (GWorkspace *)gworkspace { if (gworkspace == nil) { gworkspace = [[GWorkspace alloc] init]; } return gworkspace; } + (void)registerForServices { NSArray *sendTypes = [NSArray arrayWithObjects: NSFilenamesPboardType, nil]; NSArray *returnTypes = [NSArray arrayWithObjects: NSFilenamesPboardType, nil]; [NSApp registerServicesMenuSendTypes: sendTypes returnTypes: returnTypes]; } - (void)dealloc { if (fswatcher && [[(NSDistantObject *)fswatcher connectionForProxy] isValid]) { [fswatcher unregisterClient: (id )self]; DESTROY (fswatcher); } [[NSDistributedNotificationCenter defaultCenter] removeObserver: self]; [wsnc removeObserver: self]; [[NSNotificationCenter defaultCenter] removeObserver: self]; if (logoutTimer && [logoutTimer isValid]) { [logoutTimer invalidate]; DESTROY (logoutTimer); } DESTROY (recyclerApp); DESTROY (ddbd); DESTROY (mdextractor); RELEASE (gwProcessName); RELEASE (gwBundlePath); RELEASE (defEditor); RELEASE (defXterm); RELEASE (defXtermArgs); RELEASE (selectedPaths); RELEASE (trashContents); RELEASE (trashPath); RELEASE (watchedPaths); RELEASE (fiend); RELEASE (history); RELEASE (openWithController); RELEASE (runExtController); RELEASE (startAppWin); RELEASE (tshelfWin); RELEASE (tshelfPBDir); RELEASE (vwrsManager); RELEASE (dtopManager); DESTROY (inspector); DESTROY (fileOpsManager); RELEASE (finder); RELEASE (launchedApps); RELEASE (storedAppinfoPath); RELEASE (storedAppinfoLock); [super dealloc]; } - (void)createMenu { NSMenu *mainMenu = [NSMenu new]; NSMenu *menu; NSMenu *subMenu; NSMenu *windows, *services; id menuItem; // Info menuItem = [mainMenu addItemWithTitle:_(@"Info") action:NULL keyEquivalent:@""]; menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; [menu addItemWithTitle: _(@"Info Panel...") action:@selector(showInfo:) keyEquivalent:@""]; [menu addItemWithTitle: _(@"Preferences...") action:@selector(showPreferences:) keyEquivalent:@""]; [menu addItemWithTitle: _(@"Help...") action:@selector(showHelp:) keyEquivalent:@"?"]; [menu addItemWithTitle: _(@"Activate context help") action:@selector(activateContextHelp:) keyEquivalent:@";"]; // File menuItem = [mainMenu addItemWithTitle:_(@"File") action:NULL keyEquivalent:@""]; menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; [menu addItemWithTitle:_(@"Open") action:@selector(openSelection:) keyEquivalent:@"o"]; [menu addItemWithTitle:_(@"Open With...") action:@selector(openWith:) keyEquivalent:@""]; [menu addItemWithTitle:_(@"Open as Folder") action:@selector(openSelectionAsFolder:) keyEquivalent:@"O"]; [menu addItemWithTitle:_(@"New Folder") action:@selector(newFolder:) keyEquivalent:@"n"]; [menu addItemWithTitle:_(@"New File") action:@selector(newFile:) keyEquivalent:@"N"]; [menu addItemWithTitle:_(@"Duplicate") action:@selector(duplicateFiles:) keyEquivalent:@"u"]; [menu addItemWithTitle:_(@"Destroy") action:@selector(deleteFiles:) keyEquivalent:@"r"]; [menu addItemWithTitle:_(@"Move to Recycler") action:@selector(recycleFiles:) keyEquivalent:@"d"]; [menu addItemWithTitle:_(@"Empty Recycler") action:@selector(emptyRecycler:) keyEquivalent:@""]; // Edit menuItem = [mainMenu addItemWithTitle:_(@"Edit") action:NULL keyEquivalent:@""]; menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; [menu addItemWithTitle:_(@"Cut") action:@selector(cut:) keyEquivalent:@"x"]; [menu addItemWithTitle:_(@"Copy") action:@selector(copy:) keyEquivalent:@"c"]; [menu addItemWithTitle:_(@"Paste") action:@selector(paste:) keyEquivalent:@"v"]; [menu addItemWithTitle:_(@"Select All") action:@selector(selectAllInViewer:) keyEquivalent:@"a"]; // View menuItem = [mainMenu addItemWithTitle:_(@"View") action:NULL keyEquivalent:@""]; menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; menuItem = [[NSMenuItem alloc] initWithTitle:_(@"Browser") action:@selector(setViewerType:) keyEquivalent:@"b"]; [menuItem setTag:GWViewTypeBrowser]; [menuItem autorelease]; [menu addItem:menuItem]; menuItem = [[NSMenuItem alloc] initWithTitle:_(@"Icon") action:@selector(setViewerType:) keyEquivalent:@"i"]; [menuItem setTag:GWViewTypeIcon]; [menuItem autorelease]; [menu addItem:menuItem]; menuItem = [[NSMenuItem alloc] initWithTitle:_(@"List") action:@selector(setViewerType:) keyEquivalent:@"l"]; [menuItem setTag:GWViewTypeList]; [menuItem autorelease]; [menu addItem:menuItem]; menuItem = [menu addItemWithTitle:_(@"Show") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"Name only") action:@selector(setShownType:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Type") action:@selector(setShownType:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Size") action:@selector(setShownType:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Modification date") action:@selector(setShownType:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Owner") action:@selector(setShownType:) keyEquivalent:@""]; menuItem = [menu addItemWithTitle:_(@"Icon Size") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"24") action:@selector(setIconsSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"28") action:@selector(setIconsSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"32") action:@selector(setIconsSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"36") action:@selector(setIconsSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"40") action:@selector(setIconsSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"48") action:@selector(setIconsSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"64") action:@selector(setIconsSize:) keyEquivalent:@""]; menuItem = [menu addItemWithTitle:_(@"Icon Position") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"Up") action:@selector(setIconsPosition:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Left") action:@selector(setIconsPosition:) keyEquivalent:@""]; menuItem = [menu addItemWithTitle:_(@"Thumbnails") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"Make thumbnail(s)") action:@selector(makeThumbnails:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Remove thumbnail(s)") action:@selector(removeThumbnails:) keyEquivalent:@""]; menuItem = [menu addItemWithTitle:_(@"Label Size") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"10") action:@selector(setLabelSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"11") action:@selector(setLabelSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"12") action:@selector(setLabelSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"13") action:@selector(setLabelSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"14") action:@selector(setLabelSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"15") action:@selector(setLabelSize:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"16") action:@selector(setLabelSize:) keyEquivalent:@""]; [menu addItemWithTitle:_(@"Viewer") action:@selector(showViewer:) keyEquivalent:@"V"]; // Tools menuItem = [mainMenu addItemWithTitle:_(@"Tools") action:NULL keyEquivalent:@""]; menu = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: menu forItem: menuItem]; menuItem = [menu addItemWithTitle:_(@"Inspectors") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"Show Inspectors") action:NULL keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Attributes") action:@selector(showAttributesInspector:) keyEquivalent:@"1"]; [subMenu addItemWithTitle:_(@"Contents") action:@selector(showContentsInspector:) keyEquivalent:@"2"]; [subMenu addItemWithTitle:_(@"Tools") action:@selector(showToolsInspector:) keyEquivalent:@"3"]; [subMenu addItemWithTitle:_(@"Annotations") action:@selector(showAnnotationsInspector:) keyEquivalent:@"4"]; [menu addItemWithTitle:_(@"Finder") action:@selector(showFinder:) keyEquivalent:@"f"]; menuItem = [menu addItemWithTitle:_(@"Fiend") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; menuItem = [menu addItemWithTitle:_(@"Tabbed Shelf") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"Show Tabbed Shelf") action:@selector(showTShelf:) keyEquivalent:@"s"]; [subMenu addItemWithTitle:_(@"Remove Current Tab") action:@selector(removeTShelfTab:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Rename Current Tab") action:@selector(renameTShelfTab:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Add Tab...") action:@selector(addTShelfTab:) keyEquivalent:@""]; [menu addItemWithTitle:_(@"Terminal") action:@selector(showTerminal:) keyEquivalent:@"t"]; [menu addItemWithTitle:_(@"Run...") action:@selector(runCommand:) keyEquivalent:@""]; menuItem = [menu addItemWithTitle:_(@"History") action:NULL keyEquivalent:@""]; subMenu = AUTORELEASE ([NSMenu new]); [menu setSubmenu: subMenu forItem: menuItem]; [subMenu addItemWithTitle:_(@"Show History") action:@selector(showHistory:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Go backward") action:@selector(goBackwardInHistory:) keyEquivalent:@""]; [subMenu addItemWithTitle:_(@"Go forward") action:@selector(goForwardInHistory:) keyEquivalent:@""]; [menu addItemWithTitle:_(@"Show Desktop") action:@selector(showDesktop:) keyEquivalent:@""]; [menu addItemWithTitle:_(@"Show Recycler") action:@selector(showRecycler:) keyEquivalent:@""]; [menu addItemWithTitle:_(@"Check for disks") action:@selector(checkRemovableMedia:) keyEquivalent:@"E"]; // Windows menuItem = [mainMenu addItemWithTitle:_(@"Windows") action:NULL keyEquivalent:@""]; windows = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: windows forItem: menuItem]; [windows addItemWithTitle:_(@"Arrange in Front") action:@selector(arrangeInFront:) keyEquivalent:@""]; [windows addItemWithTitle:_(@"Miniaturize Window") action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [windows addItemWithTitle:_(@"Close Window") action:@selector(performClose:) keyEquivalent:@"w"]; // Services menuItem = [mainMenu addItemWithTitle:_(@"Services") action:NULL keyEquivalent:@""]; services = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: services forItem: menuItem]; // Hide [mainMenu addItemWithTitle:_(@"Hide") action:@selector(hide:) keyEquivalent:@"h"]; [mainMenu addItemWithTitle:_(@"Hide Others") action:@selector(hideOtherApplications:) keyEquivalent:@"H"]; [mainMenu addItemWithTitle:_(@"Show All") action:@selector(unhideAllApplications:) keyEquivalent:@""]; // Print [mainMenu addItemWithTitle:_(@"Print...") action:@selector(print:) keyEquivalent:@"p"]; // Quit [mainMenu addItemWithTitle:_(@"Quit") action:@selector(terminate:) keyEquivalent:@"Q"]; // Logout [mainMenu addItemWithTitle:_(@"Logout") action:@selector(logout:) keyEquivalent:@""]; [mainMenu update]; [NSApp setServicesMenu: services]; [NSApp setWindowsMenu: windows]; [NSApp setMainMenu: mainMenu]; RELEASE (mainMenu); } - (void)applicationWillFinishLaunching:(NSNotification *)aNotification { NSUserDefaults *defaults; id entry; BOOL boolentry; NSArray *extendedInfo; NSMenu *menu; NSString *lockpath; NSUInteger i; [self createMenu]; [[self class] registerForServices]; ASSIGN (gwProcessName, [[NSProcessInfo processInfo] processName]); ASSIGN (gwBundlePath, [[NSBundle mainBundle] bundlePath]); fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; fsnodeRep = [FSNodeRep sharedInstance]; extendedInfo = [fsnodeRep availableExtendedInfoNames]; menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"View", @"")] submenu]; menu = [[menu itemWithTitle: NSLocalizedString(@"Show", @"")] submenu]; for (i = 0; i < [extendedInfo count]; i++) { [menu addItemWithTitle: [extendedInfo objectAtIndex: i] action: @selector(setExtendedShownType:) keyEquivalent: @""]; } defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: gwProcessName forKey: @"GSWorkspaceApplication"]; entry = [defaults objectForKey: @"reserved_names"]; if (entry) { [fsnodeRep setReservedNames: entry]; } else { [fsnodeRep setReservedNames: [NSArray arrayWithObjects: @".gwdir", @".gwsort", nil]]; } entry = [defaults stringForKey: @"defaulteditor"]; if (entry == nil) { defEditor = [[NSString alloc] initWithString: defaulteditor]; } else { ASSIGN (defEditor, entry); } entry = [defaults stringForKey: @"defxterm"]; if (entry == nil) { defXterm = [[NSString alloc] initWithString: defaultxterm]; } else { ASSIGN (defXterm, entry); } entry = [defaults stringForKey: @"defaultxtermargs"]; if (entry == nil) { defXtermArgs = nil; } else { ASSIGN (defXtermArgs, entry); } teminalService = [defaults boolForKey: @"terminal_services"]; [self setUseTerminalService: teminalService]; entry = [defaults objectForKey: @"default_sortorder"]; if (entry == nil) { [defaults setObject: @"0" forKey: @"default_sortorder"]; [fsnodeRep setDefaultSortOrder: byname]; } else { [fsnodeRep setDefaultSortOrder: [entry intValue]]; } boolentry = [defaults boolForKey: @"GSFileBrowserHideDotFiles"]; [fsnodeRep setHideSysFiles: boolentry]; entry = [defaults objectForKey: @"hiddendirs"]; if (entry) { [fsnodeRep setHiddenPaths: entry]; } entry = [defaults objectForKey: @"history_cache"]; if (entry) { maxHistoryCache = [entry intValue]; } else { maxHistoryCache = HISTORT_CACHE_MAX; } dontWarnOnQuit = [defaults boolForKey: @"NoWarnOnQuit"]; boolentry = [defaults boolForKey: @"use_thumbnails"]; [fsnodeRep setUseThumbnails: boolentry]; selectedPaths = [[NSArray alloc] initWithObjects: NSHomeDirectory(), nil]; trashContents = [NSMutableArray new]; ASSIGN (trashPath, [self trashPath]); [self _updateTrashContents]; startAppWin = [[StartAppWin alloc] init]; watchedPaths = [[NSCountedSet alloc] initWithCapacity: 1]; fswatcher = nil; fswnotifications = YES; [self connectFSWatcher]; recyclerApp = nil; dtopManager = [GWDesktopManager desktopManager]; if ([defaults boolForKey: @"no_desktop"] == NO) { id item; [dtopManager activateDesktop]; menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; item = [menu itemWithTitle: NSLocalizedString(@"Show Desktop", @"")]; [item setTitle: NSLocalizedString(@"Hide Desktop", @"")]; } else if ([defaults boolForKey: @"uses_recycler"]) { [self connectRecycler]; } tshelfPBFileNum = 0; [self createTabbedShelf]; if ([defaults boolForKey: @"tshelf"]) [self showTShelf: nil]; else [self hideTShelf: nil]; prefController = [PrefController new]; history = [[History alloc] init]; openWithController = [[OpenWithController alloc] init]; runExtController = [[RunExternalController alloc] init]; finder = [Finder finder]; fiend = [[Fiend alloc] init]; if ([defaults boolForKey: @"usefiend"]) [self showFiend: nil]; else [self hideFiend: nil]; vwrsManager = [GWViewersManager viewersManager]; [vwrsManager showViewers]; inspector = [Inspector new]; if ([defaults boolForKey: @"uses_inspector"]) { [self showInspector: nil]; } fileOpsManager = [Operation new]; ddbd = nil; [self connectDDBd]; mdextractor = nil; if ([defaults boolForKey: @"GSMetadataIndexingEnabled"]) { [self connectMDExtractor]; } [defaults synchronize]; terminating = NO; [self setContextHelp]; storedAppinfoPath = [NSTemporaryDirectory() stringByAppendingPathComponent: @"GSLaunchedApplications"]; RETAIN (storedAppinfoPath); lockpath = [storedAppinfoPath stringByAppendingPathExtension: @"lock"]; storedAppinfoLock = [[NSDistributedLock alloc] initWithPath: lockpath]; launchedApps = [NSMutableArray new]; activeApplication = nil; } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSNotificationCenter *dnc = [NSDistributedNotificationCenter defaultCenter]; NS_DURING { [NSApp setServicesProvider:self]; } NS_HANDLER { NSLog(@"setServicesProvider: %@", localException); } NS_ENDHANDLER [nc addObserver: self selector: @selector(fileSystemWillChange:) name: @"GWFileSystemWillChangeNotification" object: nil]; [nc addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; [dnc addObserver: self selector: @selector(changeDefaultEditor:) name: @"GWDefaultEditorChangedNotification" object: nil]; [dnc addObserver: self selector: @selector(thumbnailsDidChange:) name: @"GWThumbnailsDidChangeNotification" object: nil]; [dnc addObserver: self selector: @selector(removableMediaPathsDidChange:) name: @"GSRemovableMediaPathsDidChangeNotification" object: nil]; [dnc addObserver: self selector: @selector(reservedMountNamesDidChange:) name: @"GSReservedMountNamesDidChangeNotification" object: nil]; [dnc addObserver: self selector: @selector(hideDotsFileDidChange:) name: @"GSHideDotFilesDidChangeNotification" object: nil]; [dnc addObserver: self selector: @selector(customDirectoryIconDidChange:) name: @"GWCustomDirectoryIconDidChangeNotification" object: nil]; [dnc addObserver: self selector: @selector(applicationForExtensionsDidChange:) name: @"GWAppForExtensionDidChangeNotification" object: nil]; [self initializeWorkspace]; } - (void)applicationDidBecomeActive:(NSNotification *)aNotification { [self resetSelectedPaths]; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; #define TEST_CLOSE(o, w) if ((o) && ([w isVisible])) [w close] if ([fileOpsManager operationsPending]) { NSRunAlertPanel(nil, NSLocalizedString(@"Wait the operations to terminate!", @""), NSLocalizedString(@"Ok", @""), nil, nil); return NSTerminateCancel; } if ((dontWarnOnQuit == NO) && (loggingout == NO)) { if (NSRunAlertPanel(NSLocalizedString(@"Quit!", @""), NSLocalizedString(@"Do you really want to quit?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil, nil) != NSAlertDefaultReturn) { return NSTerminateCancel; } } if (logoutTimer && [logoutTimer isValid]) { [logoutTimer invalidate]; DESTROY (logoutTimer); } [wsnc removeObserver: self]; fswnotifications = NO; terminating = YES; [self updateDefaults]; TEST_CLOSE (prefController, [prefController myWin]); TEST_CLOSE (fiend, [fiend myWin]); TEST_CLOSE (history, [history myWin]); TEST_CLOSE (tshelfWin, tshelfWin); TEST_CLOSE (startAppWin, [startAppWin win]); if (fswatcher) { NSConnection *conn = [(NSDistantObject *)fswatcher connectionForProxy]; if ([conn isValid]) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; NS_DURING [fswatcher unregisterClient: (id )self]; NS_HANDLER NSLog(@"[GWorkspace shouldTerminateApplication] unregister fswatcher: %@", [localException description]); NS_ENDHANDLER DESTROY (fswatcher); } } [inspector updateDefaults]; [finder stopAllSearchs]; if (recyclerApp) { NSConnection *conn; conn = [(NSDistantObject *)recyclerApp connectionForProxy]; if (conn && [conn isValid]) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; [recyclerApp terminateApplication]; DESTROY (recyclerApp); } } if (ddbd) { NSConnection *conn = [(NSDistantObject *)ddbd connectionForProxy]; if (conn && [conn isValid]) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; DESTROY (ddbd); } } if (mdextractor) { NSConnection *conn = [(NSDistantObject *)mdextractor connectionForProxy]; if (conn && [conn isValid]) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; DESTROY (mdextractor); } } return NSTerminateNow; } - (NSString *)defEditor { return defEditor; } - (NSString *)defXterm { return defXterm; } - (NSString *)defXtermArgs { return defXtermArgs; } - (GWViewersManager *)viewersManager { return vwrsManager; } - (GWDesktopManager *)desktopManager { return dtopManager; } - (History *)historyWindow { return history; } - (id)rootViewer { return nil; } - (void)showRootViewer { id viewer = [vwrsManager rootViewer]; if (viewer == nil) { [vwrsManager showRootViewer]; } else { [viewer activate]; } } - (void)rootViewerSelectFiles:(NSArray *)paths { NSString *path = [[paths objectAtIndex: 0] stringByDeletingLastPathComponent]; FSNode *parentnode = [FSNode nodeWithPath: path]; NSArray *selection = [NSArray arrayWithArray: paths]; id viewer = [vwrsManager rootViewer]; id nodeView = nil; if ([paths count] == 1) { FSNode *node = [FSNode nodeWithPath: [paths objectAtIndex: 0]]; if ([node isDirectory] && ([node isPackage] == NO)) { parentnode = [FSNode nodeWithPath: [node path]]; selection = [NSArray arrayWithObject: [node path]]; } } if (viewer == nil) viewer = [vwrsManager showRootViewer]; nodeView = [viewer nodeView]; [nodeView showContentsOfNode: parentnode]; [nodeView selectRepsOfPaths: selection]; if ([nodeView respondsToSelector: @selector(scrollSelectionToVisible)]) [nodeView scrollSelectionToVisible]; } - (void)newViewerAtPath:(NSString *)path { FSNode *node = [FSNode nodeWithPath: path]; [vwrsManager viewerForNode: node showType: 0 showSelection: NO forceNew: NO withKey: nil]; } - (NSImage *)tshelfBackground { if ([dtopManager isActive]) { return [dtopManager tabbedShelfBackground]; } return nil; } - (void)tshelfBackgroundDidChange { if ([tshelfWin isVisible]) { [[tshelfWin shelfView] setNeedsDisplay: YES]; } } - (NSString *)tshelfPBDir { return tshelfPBDir; } - (NSString *)tshelfPBFilePath { NSString *tshelfPBFileNName; tshelfPBFileNum++; if (tshelfPBFileNum >= TSHF_MAXF) { tshelfPBFileNum = 0; } tshelfPBFileNName = [NSString stringWithFormat: @"%i", tshelfPBFileNum]; return [tshelfPBDir stringByAppendingPathComponent: tshelfPBFileNName]; } - (void)changeDefaultEditor:(NSNotification *)notif { NSString *editor = [notif object]; if (editor) { ASSIGN (defEditor, editor); } } - (void)changeDefaultXTerm:(NSString *)xterm arguments:(NSString *)args { ASSIGN (defXterm, xterm); if ([args length]) { ASSIGN (defXtermArgs, args); } else { DESTROY (defXtermArgs); } } - (void)setUseTerminalService:(BOOL)value { teminalService = value; } - (NSString *)gworkspaceProcessName { return gwProcessName; } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; [tshelfWin saveDefaults]; if ([tshelfWin isVisible]) { [defaults setBool: YES forKey: @"tshelf"]; } else { [defaults setBool: NO forKey: @"tshelf"]; } [defaults setObject: [NSString stringWithFormat: @"%i", tshelfPBFileNum] forKey: @"tshelfpbfnum"]; if ([[prefController myWin] isVisible]) { [prefController updateDefaults]; } if ((fiend != nil) && ([[fiend myWin] isVisible])) { [fiend updateDefaults]; [defaults setBool: YES forKey: @"usefiend"]; } else { [defaults setBool: NO forKey: @"usefiend"]; } [history updateDefaults]; [defaults setObject: [fsnodeRep hiddenPaths] forKey: @"hiddendirs"]; entry = [NSNumber numberWithInt: [fsnodeRep defaultSortOrder]]; [defaults setObject: entry forKey: @"default_sortorder"]; [vwrsManager updateDefaults]; [dtopManager updateDefaults]; [defaults setBool: ![dtopManager isActive] forKey: @"no_desktop"]; [finder updateDefaults]; [defaults setObject: defEditor forKey: @"defaulteditor"]; [defaults setObject: defXterm forKey: @"defxterm"]; if (defXtermArgs != nil) { [defaults setObject: defXtermArgs forKey: @"defaultxtermargs"]; } [defaults setBool: teminalService forKey: @"terminal_services"]; [defaults setBool: [fsnodeRep usesThumbnails] forKey: @"use_thumbnails"]; entry = [NSNumber numberWithInt: maxHistoryCache]; [defaults setObject: entry forKey: @"history_cache"]; [defaults setBool: [[inspector win] isVisible] forKey: @"uses_inspector"]; [defaults setBool: (recyclerApp != nil) forKey: @"uses_recycler"]; [defaults synchronize]; } - (void)setContextHelp { NSHelpManager *manager = [NSHelpManager sharedHelpManager]; NSString *help; help = @"TabbedShelf.rtfd"; [manager setContextHelp: (NSAttributedString *)help forObject: [tshelfWin shelfView]]; help = @"History.rtfd"; [manager setContextHelp: (NSAttributedString *)help forObject: [[history myWin] contentView]]; help = @"Fiend.rtfd"; [manager setContextHelp: (NSAttributedString *)help forObject: [[fiend myWin] contentView]]; help = @"RunExternal.rtfd"; [manager setContextHelp: (NSAttributedString *)help forObject: [[runExtController win] contentView]]; help = @"Preferences.rtfd"; [manager setContextHelp: (NSAttributedString *)help forObject: [[prefController myWin] contentView]]; help = @"Inspector.rtfd"; [manager setContextHelp: (NSAttributedString *)help forObject: [[inspector win] contentView]]; } - (NSAttributedString *)contextHelpFromName:(NSString *)fileName { NSString *bpath = [[NSBundle mainBundle] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; NSUInteger i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; helpPath = [helpPath stringByAppendingPathComponent: fileName]; if ([fm fileExistsAtPath: helpPath]) { NS_DURING { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; return AUTORELEASE (help); } NS_HANDLER { return nil; } NS_ENDHANDLER; } } return nil; } - (void)startXTermOnDirectory:(NSString *)dirPath { if (teminalService) { NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName]; NSArray *types = [NSArray arrayWithObject: NSFilenamesPboardType]; [pboard declareTypes: types owner: self]; [pboard setPropertyList: [NSArray arrayWithObject: dirPath] forType: NSFilenamesPboardType]; NSPerformService(@"Terminal/Open shell here", pboard); } else { NSTask *task = [NSTask new]; AUTORELEASE (task); [task setCurrentDirectoryPath: dirPath]; [task setLaunchPath: defXterm]; if (defXtermArgs) { NSArray *args = [defXtermArgs componentsSeparatedByString: @" "]; [task setArguments: args]; } [task launch]; } } - (int)defaultSortType { return [fsnodeRep defaultSortOrder]; } - (void)setDefaultSortType:(int)type { [fsnodeRep setDefaultSortOrder: type]; } - (void)createTabbedShelf { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; NSString *basePath; BOOL isdir; entry = [defaults objectForKey: @"tshelfpbfnum"]; if (entry) { tshelfPBFileNum = [entry intValue]; } else { tshelfPBFileNum = 0; } basePath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; basePath = [basePath stringByAppendingPathComponent: @"GWorkspace"]; if (([fm fileExistsAtPath: basePath isDirectory: &isdir] && isdir) == NO) { if ([fm createDirectoryAtPath: basePath attributes: nil] == NO) { NSLog(@"Can't create the GWorkspace directory! Quitting now."); [NSApp terminate: self]; } } tshelfPBDir = [basePath stringByAppendingPathComponent: @"PBData"]; if ([fm fileExistsAtPath: tshelfPBDir isDirectory: &isdir] == NO) { if ([fm createDirectoryAtPath: tshelfPBDir attributes: nil] == NO) { NSLog(@"Can't create the TShelf directory! Quitting now."); [NSApp terminate: self]; } } else { if (isdir == NO) { NSLog (@"Warning - %@ is not a directory - quitting now!", tshelfPBDir); [NSApp terminate: self]; } } RETAIN (tshelfPBDir); tshelfWin = [[TShelfWin alloc] init]; } - (TShelfWin *)tabbedShelf { return tshelfWin; } - (StartAppWin *)startAppWin { return startAppWin; } - (BOOL)validateMenuItem:(id )anItem { SEL action = [anItem action]; if (sel_isEqual(action, @selector(showRecycler:))) { return (([dtopManager isActive] == NO) || ([dtopManager dockActive] == NO)); } else if (sel_isEqual(action, @selector(emptyRecycler:))) { return ([trashContents count] != 0); } else if (sel_isEqual(action, @selector(removeTShelfTab:)) || sel_isEqual(action, @selector(renameTShelfTab:)) || sel_isEqual(action, @selector(addTShelfTab:))) { return [tshelfWin isVisible]; } else if (sel_isEqual(action, @selector(activateContextHelp:))) { return ([NSHelpManager isContextHelpModeActive] == NO); } else if (sel_isEqual(action, @selector(logout:))) { return !loggingout; } else if (sel_isEqual(action, @selector(cut:)) || sel_isEqual(action, @selector(copy:)) || sel_isEqual(action, @selector(paste:))) { NSWindow *kwin = [NSApp keyWindow]; if (kwin && [kwin isKindOfClass: [TShelfWin class]]) { TShelfViewItem *item = [[tshelfWin shelfView] selectedTabItem]; if (item) { TShelfIconsView *iview = (TShelfIconsView *)[item view]; if ([iview iconsType] == DATA_TAB) { if (sel_isEqual(action, @selector(paste:))) { return YES; } else { return [iview hasSelectedIcon]; } } else { return NO; } } else { return NO; } } } return YES; } - (void)fileSystemWillChange:(NSNotification *)notif { } - (void)fileSystemDidChange:(NSNotification *)notif { NSDictionary *info = (NSDictionary *)[notif object]; if (info) { CREATE_AUTORELEASE_POOL(arp); NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; if ([source isEqual: trashPath] || [destination isEqual: trashPath]) { [self _updateTrashContents]; } if (ddbd != nil) { [ddbd fileSystemDidChange: [NSArchiver archivedDataWithRootObject: info]]; } RELEASE (arp); } } - (void)setSelectedPaths:(NSArray *)paths { if (paths && ([selectedPaths isEqualToArray: paths] == NO)) { NSUInteger i; NSMutableArray *onlyDirPaths; NSFileManager *fileMgr; ASSIGN (selectedPaths, paths); if ([[inspector win] isVisible]) { [inspector setCurrentSelection: paths]; } /* we extract from the selection only valid directories */ onlyDirPaths = [[NSMutableArray arrayWithCapacity:1] retain]; fileMgr = [NSFileManager defaultManager]; for (i = 0; i < [paths count]; i++) { NSString *p; BOOL isDir; p = [paths objectAtIndex:i]; if([fileMgr fileExistsAtPath:p isDirectory:&isDir]) if (isDir) [onlyDirPaths addObject:p]; } if ([onlyDirPaths count] > 0) [finder setCurrentSelection: onlyDirPaths]; [onlyDirPaths release]; [[NSNotificationCenter defaultCenter] postNotificationName: @"GWCurrentSelectionChangedNotification" object: nil]; } } - (void)resetSelectedPaths { if (selectedPaths == nil) { return; } if ([[inspector win] isVisible]) { [inspector setCurrentSelection: selectedPaths]; } [[NSNotificationCenter defaultCenter] postNotificationName: @"GWCurrentSelectionChangedNotification" object: nil]; } - (NSArray *)selectedPaths { return selectedPaths; } - (void)openSelectedPaths:(NSArray *)paths newViewer:(BOOL)newv { NSUInteger count = [paths count]; NSUInteger i; [self setSelectedPaths: paths]; if (count > MAX_FILES_TO_OPEN_DIALOG) { NSString *msg1 = NSLocalizedString(@"Are you sure you want to open", @""); NSString *msg2 = NSLocalizedString(@"items?", @""); if (NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %lu %@", msg1, (unsigned long)count, msg2], NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Yes", @""), nil)) { return; } } for (i = 0; i < count; i++) { NSString *apath = [paths objectAtIndex: i]; if ([fm fileExistsAtPath: apath]) { NSString *defApp = nil, *type = nil; NS_DURING { [ws getInfoForFile: apath application: &defApp type: &type]; if (type != nil) { if ((type == NSDirectoryFileType) || (type == NSFilesystemFileType)) { if (newv) [self newViewerAtPath: apath]; } else if ((type == NSPlainFileType) || ([type isEqual: NSShellCommandFileType])) { [self openFile: apath]; } else if (type == NSApplicationFileType) { [ws launchApplication: apath]; } } } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [apath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } - (void)openSelectedPathsWith { BOOL canopen = YES; NSUInteger i; for (i = 0; i < [selectedPaths count]; i++) { FSNode *node = [FSNode nodeWithPath: [selectedPaths objectAtIndex: i]]; if (([node isPlain] == NO) && (([node isPackage] == NO) || [node isApplication])) { canopen = NO; break; } } if (canopen) { [openWithController activate]; } } - (BOOL)openFile:(NSString *)fullPath { NSString *appName = nil; NSString *type = nil; BOOL success; NSURL *aURL; aURL = nil; [ws getInfoForFile: fullPath application: &appName type: &type]; if (appName == nil) { appName = defEditor; } if (type == NSPlainFileType) { if ([[fullPath pathExtension] isEqualToString: @"webloc"]) { NSDictionary *weblocDict; NSString *urlString; weblocDict = [NSDictionary dictionaryWithContentsOfFile: fullPath]; urlString = [weblocDict objectForKey:@"URL"]; aURL = [NSURL URLWithString: urlString]; } } NS_DURING { if (aURL == nil) success = [ws openFile: fullPath withApplication: appName]; else success = [ws openURL: aURL]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [fullPath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); success = NO; } NS_ENDHANDLER return success; } - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { BOOL isDir; if ([filename isAbsolutePath] && [fm fileExistsAtPath: filename isDirectory: &isDir]) { if (isDir) { if ([[filename pathExtension] isEqual: @"lsf"]) { return [finder openLiveSearchFolderAtPath: filename]; } else { [self newViewerAtPath: filename]; return YES; } } else { [self selectFile: filename inFileViewerRootedAtPath: [filename stringByDeletingLastPathComponent]]; [self openFile: filename]; return YES; } } return NO; } - (NSArray *)getSelectedPaths { return selectedPaths; } - (void)showPasteboardData:(NSData *)data ofType:(NSString *)type typeIcon:(NSImage *)icon { if ([[inspector win] isVisible]) { if ([inspector canDisplayDataOfType: type]) { [inspector showData: data ofType: type]; } } } - (void)newObjectAtPath:(NSString *)basePath isDirectory:(BOOL)directory { NSString *fullPath; NSString *fileName; NSString *operation; NSMutableDictionary *notifObj; unsigned suff; if ([self verifyFileAtPath: basePath] == NO) { return; } if ([fm isWritableFileAtPath: basePath] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You do not have write permission\nfor", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, basePath], buttstr, nil, nil); return; } if (directory) { fileName = @"NewFolder"; operation = @"GWorkspaceCreateDirOperation"; } else { fileName = @"NewFile"; operation = @"GWorkspaceCreateFileOperation"; } fullPath = [basePath stringByAppendingPathComponent: fileName]; if ([fm fileExistsAtPath: fullPath]) { suff = 1; while (1) { NSString *s = [fileName stringByAppendingFormat: @"%i", suff]; fullPath = [basePath stringByAppendingPathComponent: s]; if ([fm fileExistsAtPath: fullPath] == NO) { fileName = [NSString stringWithString: s]; break; } suff++; } } notifObj = [NSMutableDictionary dictionaryWithCapacity: 1]; [notifObj setObject: operation forKey: @"operation"]; [notifObj setObject: basePath forKey: @"source"]; [notifObj setObject: basePath forKey: @"destination"]; [notifObj setObject: [NSArray arrayWithObject: fileName] forKey: @"files"]; [self performFileOperation: notifObj]; } - (void)duplicateFiles { NSString *basePath; NSMutableArray *files; NSInteger tag; NSUInteger i; basePath = [NSString stringWithString: [selectedPaths objectAtIndex: 0]]; basePath = [basePath stringByDeletingLastPathComponent]; if ([fm isWritableFileAtPath: basePath] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You do not have write permission\nfor", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, basePath], buttstr, nil, nil); return; } files = [NSMutableArray array]; for (i = 0; i < [selectedPaths count]; i++) { [files addObject: [[selectedPaths objectAtIndex: i] lastPathComponent]]; } [self performFileOperation: NSWorkspaceDuplicateOperation source: basePath destination: basePath files: files tag: &tag]; } - (void)deleteFiles { NSString *basePath; NSMutableArray *files; NSInteger tag; NSUInteger i; basePath = [NSString stringWithString: [selectedPaths objectAtIndex: 0]]; basePath = [basePath stringByDeletingLastPathComponent]; if ([fm isWritableFileAtPath: basePath] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You do not have write permission\nfor", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, basePath], buttstr, nil, nil); return; } files = [NSMutableArray array]; for (i = 0; i < [selectedPaths count]; i++) { [files addObject: [[selectedPaths objectAtIndex: i] lastPathComponent]]; } [self performFileOperation: NSWorkspaceDestroyOperation source: basePath destination: basePath files: files tag: &tag]; } - (void)moveToTrash { NSArray *vpaths = [ws mountedLocalVolumePaths]; NSMutableArray *umountPaths = [NSMutableArray array]; NSMutableArray *files = [NSMutableArray array]; NSUInteger i; NSInteger tag; for (i = 0; i < [selectedPaths count]; i++) { NSString *path = [selectedPaths objectAtIndex: i]; if ([vpaths containsObject: path]) { [umountPaths addObject: path]; } else { [files addObject: [path lastPathComponent]]; } } for (i = 0; i < [umountPaths count]; i++) { [ws unmountAndEjectDeviceAtPath: [umountPaths objectAtIndex: i]]; } if ([files count]) { NSString *basePath = [NSString stringWithString: [selectedPaths objectAtIndex: 0]]; basePath = [basePath stringByDeletingLastPathComponent]; if ([fm isWritableFileAtPath: basePath] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You do not have write permission\nfor", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, basePath], buttstr, nil, nil); return; } [self performFileOperation: NSWorkspaceRecycleOperation source: basePath destination: trashPath files: files tag: &tag]; } } - (BOOL)verifyFileAtPath:(NSString *)path { if ([fm fileExistsAtPath: path] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@": no such file or directory!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSMutableDictionary *notifObj = [NSMutableDictionary dictionaryWithCapacity: 1]; NSString *basePath = [path stringByDeletingLastPathComponent]; NSRunAlertPanel(err, [NSString stringWithFormat: @"%@%@", path, msg], buttstr, nil, nil); [notifObj setObject: NSWorkspaceDestroyOperation forKey: @"operation"]; [notifObj setObject: basePath forKey: @"source"]; [notifObj setObject: basePath forKey: @"destination"]; [notifObj setObject: [NSArray arrayWithObjects: path, nil] forKey: @"files"]; [[NSNotificationCenter defaultCenter] postNotificationName: @"GWFileSystemWillChangeNotification" object: notifObj]; [[NSNotificationCenter defaultCenter] postNotificationName: @"GWFileSystemDidChangeNotification" object: notifObj]; return NO; } return YES; } - (void)setUsesThumbnails:(BOOL)value { if ([fsnodeRep usesThumbnails] == value) { return; } [fsnodeRep setUseThumbnails: value]; [vwrsManager thumbnailsDidChangeInPaths: nil]; [dtopManager thumbnailsDidChangeInPaths: nil]; if ([tshelfWin isVisible]) { [tshelfWin updateIcons]; } } - (void)thumbnailsDidChange:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSArray *deleted = [info objectForKey: @"deleted"]; NSArray *created = [info objectForKey: @"created"]; NSMutableArray *tmbdirs = [NSMutableArray array]; NSUInteger i; [fsnodeRep thumbnailsDidChange: info]; if ([fsnodeRep usesThumbnails] == NO) return; NSString *thumbnailDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; thumbnailDir = [thumbnailDir stringByAppendingPathComponent: @"Thumbnails"]; if (deleted && [deleted count]) { for (i = 0; i < [deleted count]; i++) { NSString *path = [deleted objectAtIndex: i]; NSString *dir = [path stringByDeletingLastPathComponent]; if ([tmbdirs containsObject: dir] == NO) { [tmbdirs addObject: dir]; } } [vwrsManager thumbnailsDidChangeInPaths: tmbdirs]; [dtopManager thumbnailsDidChangeInPaths: tmbdirs]; if ([tshelfWin isVisible]) [tshelfWin updateIcons]; [tmbdirs removeAllObjects]; } if (created && [created count]) { NSString *dictName = @"thumbnails.plist"; NSString *dictPath = [thumbnailDir stringByAppendingPathComponent: dictName]; if ([fm fileExistsAtPath: dictPath]) { NSDictionary *tdict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; for (i = 0; i < [created count]; i++) { NSString *key = [created objectAtIndex: i]; NSString *dir = [key stringByDeletingLastPathComponent]; NSString *tumbname = [tdict objectForKey: key]; NSString *tumbpath = [thumbnailDir stringByAppendingPathComponent: tumbname]; if ([fm fileExistsAtPath: tumbpath]) { if ([tmbdirs containsObject: dir] == NO) { [tmbdirs addObject: dir]; } } } } [vwrsManager thumbnailsDidChangeInPaths: tmbdirs]; [dtopManager thumbnailsDidChangeInPaths: tmbdirs]; if ([tshelfWin isVisible]) { [tshelfWin updateIcons]; } } } - (void)removableMediaPathsDidChange:(NSNotification *)notif { NSArray *removables; removables = [[[NSUserDefaults standardUserDefaults] persistentDomainForName: NSGlobalDomain] objectForKey: @"GSRemovableMediaPaths"]; [fsnodeRep setVolumes: removables]; [dtopManager removableMediaPathsDidChange]; } - (void)reservedMountNamesDidChange:(NSNotification *)notif { } - (void)hideDotsFileDidChange:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; BOOL hide = [[info objectForKey: @"hide"] boolValue]; [fsnodeRep setHideSysFiles: hide]; [vwrsManager hideDotsFileDidChange: hide]; [dtopManager hideDotsFileDidChange: hide]; [tshelfWin checkIconsAfterDotsFilesChange]; if (fiend != nil) { [fiend checkIconsAfterDotsFilesChange]; } } - (void)hiddenFilesDidChange:(NSArray *)paths { [vwrsManager hiddenFilesDidChange: paths]; [dtopManager hiddenFilesDidChange: paths]; [tshelfWin checkIconsAfterHidingOfPaths: paths]; if (fiend != nil) { [fiend checkIconsAfterHidingOfPaths: paths]; } } - (void)customDirectoryIconDidChange:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *dirpath = [info objectForKey: @"path"]; NSString *imgpath = [info objectForKey: @"icon_path"]; NSArray *paths; [fsnodeRep removeCachedIconsForKey: imgpath]; if ([dirpath isEqual: path_separator()] == NO) { dirpath = [dirpath stringByDeletingLastPathComponent]; } paths = [NSArray arrayWithObject: dirpath]; [vwrsManager thumbnailsDidChangeInPaths: paths]; [dtopManager thumbnailsDidChangeInPaths: paths]; if ([tshelfWin isVisible]) { [tshelfWin updateIcons]; } } - (void)applicationForExtensionsDidChange:(NSNotification *)notif { NSDictionary *changedInfo = [notif userInfo]; NSString *app = [changedInfo objectForKey: @"app"]; NSArray *extensions = [changedInfo objectForKey: @"exts"]; NSUInteger i; for (i = 0; i < [extensions count]; i++) { [[NSWorkspace sharedWorkspace] setBestApp: app inRole: nil forExtension: [extensions objectAtIndex: i]]; } } - (int)maxHistoryCache { return maxHistoryCache; } - (void)setMaxHistoryCache:(int)value { maxHistoryCache = value; } - (void)connectFSWatcher { if (fswatcher == nil) { fswatcher = [NSConnection rootProxyForConnectionWithRegisteredName: @"fswatcher" host: @""]; if (fswatcher == nil) { NSString *cmd; NSMutableArray *arguments; unsigned i; cmd = [NSTask launchPathForTool: @"fswatcher"]; [startAppWin showWindowWithTitle: @"GWorkspace" appName: @"fswatcher" operation: NSLocalizedString(@"starting:", @"") maxProgValue: 40.0]; arguments = [NSMutableArray arrayWithCapacity:2]; [arguments addObject:@"--daemon"]; [arguments addObject:@"--auto"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: arguments]; for (i = 1; i <= 40; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; fswatcher = [NSConnection rootProxyForConnectionWithRegisteredName: @"fswatcher" host: @""]; if (fswatcher) { [startAppWin updateProgressBy: 40.0 - (double)i]; break; } } [[startAppWin win] close]; } if (fswatcher) { RETAIN (fswatcher); [fswatcher setProtocolForProxy: @protocol(FSWatcherProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(fswatcherConnectionDidDie:) name: NSConnectionDidDieNotification object: [fswatcher connectionForProxy]]; [fswatcher registerClient: (id )self isGlobalWatcher: NO]; } else { fswnotifications = NO; NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact fswatcher\nfswatcher notifications disabled!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)fswatcherConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [[NSNotificationCenter defaultCenter] removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [fswatcher connectionForProxy], NSInternalInconsistencyException); RELEASE (fswatcher); fswatcher = nil; if (NSRunAlertPanel(nil, NSLocalizedString(@"The fswatcher connection died.\nDo you want to restart it?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil)) { [self connectFSWatcher]; if (fswatcher != nil) { NSEnumerator *enumerator = [watchedPaths objectEnumerator]; NSString *path; while ((path = [enumerator nextObject])) { unsigned count = [watchedPaths countForObject: path]; unsigned i; for (i = 0; i < count; i++) { [fswatcher client: (id )self addWatcherForPath: path]; } } } } else { fswnotifications = NO; NSRunAlertPanel(nil, NSLocalizedString(@"fswatcher notifications disabled!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } - (oneway void)watchedPathDidChange:(NSData *)dirinfo { CREATE_AUTORELEASE_POOL(arp); NSDictionary *info = [NSUnarchiver unarchiveObjectWithData: dirinfo]; NSString *event = [info objectForKey: @"event"]; if ([event isEqual: @"GWFileDeletedInWatchedDirectory"] || [event isEqual: @"GWFileCreatedInWatchedDirectory"]) { NSString *path = [info objectForKey: @"path"]; if ([path isEqual: trashPath]) { [self _updateTrashContents]; } } [[NSNotificationCenter defaultCenter] postNotificationName: @"GWFileWatcherFileDidChangeNotification" object: info]; RELEASE (arp); } - (oneway void)globalWatchedPathDidChange:(NSDictionary *)dirinfo { } - (void)connectRecycler { if (recyclerApp == nil) { recyclerApp = [NSConnection rootProxyForConnectionWithRegisteredName: @"Recycler" host: @""]; if (recyclerApp == nil) { unsigned i; [startAppWin showWindowWithTitle: @"GWorkspace" appName: @"Recycler" operation: NSLocalizedString(@"starting:", @"") maxProgValue: 80.0]; [ws launchApplication: @"Recycler"]; for (i = 1; i <= 80; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; recyclerApp = [NSConnection rootProxyForConnectionWithRegisteredName: @"Recycler" host: @""]; if (recyclerApp) { [startAppWin updateProgressBy: 80.0 - (double)i]; break; } } [[startAppWin win] close]; } if (recyclerApp) { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; id item = [menu itemWithTitle: NSLocalizedString(@"Show Recycler", @"")]; if (item != nil) { [item setTitle: NSLocalizedString(@"Hide Recycler", @"")]; } RETAIN (recyclerApp); [recyclerApp setProtocolForProxy: @protocol(RecyclerAppProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(recyclerConnectionDidDie:) name: NSConnectionDidDieNotification object: [recyclerApp connectionForProxy]]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact Recycler!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)recyclerConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; id item = [menu itemWithTitle: NSLocalizedString(@"Hide Recycler", @"")]; [[NSNotificationCenter defaultCenter] removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [recyclerApp connectionForProxy], NSInternalInconsistencyException); RELEASE (recyclerApp); recyclerApp = nil; if (item != nil) { [item setTitle: NSLocalizedString(@"Show Recycler", @"")]; } if (recyclerCanQuit == NO) { if (NSRunAlertPanel(nil, NSLocalizedString(@"The Recycler connection died.\nDo you want to restart it?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil)) { [self connectRecycler]; } } } - (void)connectDDBd { if (ddbd == nil) { ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd == nil) { NSString *cmd; NSMutableArray *arguments; unsigned i; cmd = [NSTask launchPathForTool: @"ddbd"]; [startAppWin showWindowWithTitle: @"GWorkspace" appName: @"ddbd" operation: NSLocalizedString(@"starting:", @"") maxProgValue: 40.0]; arguments = [NSMutableArray arrayWithCapacity:2]; [arguments addObject:@"--daemon"]; [arguments addObject:@"--auto"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: arguments]; for (i = 1; i <= 40; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd) { [startAppWin updateProgressBy: 40.0 - (double)i]; break; } } [[startAppWin win] close]; } if (ddbd) { RETAIN (ddbd); [ddbd setProtocolForProxy: @protocol(DDBdProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(ddbdConnectionDidDie:) name: NSConnectionDidDieNotification object: [ddbd connectionForProxy]]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact ddbd.", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)ddbdConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [[NSNotificationCenter defaultCenter] removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [ddbd connectionForProxy], NSInternalInconsistencyException); RELEASE (ddbd); ddbd = nil; NSRunAlertPanel(nil, NSLocalizedString(@"ddbd connection died.", @""), NSLocalizedString(@"Ok", @""), nil, nil); } - (BOOL)ddbdactive { return ((terminating == NO) && (ddbd != nil)); } - (void)ddbdInsertPath:(NSString *)path { if (ddbd != nil) { [ddbd insertPath: path]; } } - (void)ddbdRemovePath:(NSString *)path { if (ddbd != nil) { [ddbd removePath: path]; } } - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path { if (ddbd != nil) { return [ddbd annotationsForPath: path]; } return nil; } - (void)ddbdSetAnnotations:(NSString *)annotations forPath:(NSString *)path { if (ddbd != nil) { [ddbd setAnnotations: annotations forPath: path]; } } - (void)connectMDExtractor { if (mdextractor == nil) { mdextractor = [NSConnection rootProxyForConnectionWithRegisteredName: @"mdextractor" host: @""]; if (mdextractor == nil) { NSString *cmd; unsigned i; cmd = [NSTask launchPathForTool: @"mdextractor"]; [startAppWin showWindowWithTitle: @"MDIndexing" appName: @"mdextractor" operation: NSLocalizedString(@"starting:", @"") maxProgValue: 80.0]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 1; i <= 80; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; mdextractor = [NSConnection rootProxyForConnectionWithRegisteredName: @"mdextractor" host: @""]; if (mdextractor) { [startAppWin updateProgressBy: 80.0 - (double)i]; break; } } [[startAppWin win] close]; } if (mdextractor) { [mdextractor setProtocolForProxy: @protocol(MDExtractorProtocol)]; RETAIN (mdextractor); [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(mdextractorConnectionDidDie:) name: NSConnectionDidDieNotification object: [mdextractor connectionForProxy]]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact mdextractor!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)mdextractorConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [[NSNotificationCenter defaultCenter] removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [mdextractor connectionForProxy], NSInternalInconsistencyException); RELEASE (mdextractor); mdextractor = nil; if (NSRunAlertPanel(nil, NSLocalizedString(@"The mdextractor connection died.\nDo you want to restart it?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil)) { [self connectMDExtractor]; } } - (void)slideImage:(NSImage *)image from:(NSPoint)fromPoint to:(NSPoint)toPoint { [[NSWorkspace sharedWorkspace] slideImage: image from: fromPoint to: toPoint]; } // // NSServicesRequests protocol // - (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType { BOOL sendOK = ((sendType == nil) || ([sendType isEqual: NSFilenamesPboardType])); BOOL returnOK = ((returnType == nil) || ([returnType isEqual: NSFilenamesPboardType] && (selectedPaths != nil))); if (sendOK && returnOK) { return self; } return nil; } - (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard { return ([[pboard types] indexOfObject: NSFilenamesPboardType] != NSNotFound); } - (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types { if ([types containsObject: NSFilenamesPboardType]) { NSArray *typesDeclared = [NSArray arrayWithObject: NSFilenamesPboardType]; [pboard declareTypes: typesDeclared owner: self]; return [pboard setPropertyList: selectedPaths forType: NSFilenamesPboardType]; } return NO; } // // Workspace service // - (void)openInWorkspace:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString **)error { NSArray *types = [pboard types]; if ([types containsObject: NSStringPboardType]) { NSString *path = [pboard stringForType: NSStringPboardType]; path = [path stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; [self openSelectedPaths: [NSArray arrayWithObject: path] newViewer: YES]; } } // // Menu Operations // - (void)logout:(id)sender { [self startLogout]; } - (void)showInfo:(id)sender { [NSApp orderFrontStandardInfoPanel: self]; } - (void)showPreferences:(id)sender { [prefController activate]; } - (void)activateContextHelp:(id)sender { if ([NSHelpManager isContextHelpModeActive] == NO) { [NSHelpManager setContextHelpModeActive: YES]; } } - (void)showViewer:(id)sender { [vwrsManager showRootViewer]; } - (void)showHistory:(id)sender { [history activate]; } - (void)showInspector:(id)sender { [inspector activate]; [inspector setCurrentSelection: selectedPaths]; } - (void)showAttributesInspector:(id)sender { [self showInspector: nil]; [inspector showAttributes]; } - (void)showContentsInspector:(id)sender { [self showInspector: nil]; [inspector showContents]; } - (void)showToolsInspector:(id)sender { [self showInspector: nil]; [inspector showTools]; } - (void)showAnnotationsInspector:(id)sender { [self showInspector: nil]; [inspector showAnnotations]; } - (void)showDesktop:(id)sender { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; id item; if ([dtopManager isActive] == NO) { [dtopManager activateDesktop]; item = [menu itemWithTitle: NSLocalizedString(@"Show Desktop", @"")]; [item setTitle: NSLocalizedString(@"Hide Desktop", @"")]; if (recyclerApp) { recyclerCanQuit = YES; [recyclerApp terminateApplication]; item = [menu itemWithTitle: NSLocalizedString(@"Hide Recycler", @"")]; [item setTitle: NSLocalizedString(@"Show Recycler", @"")]; } } else { [dtopManager deactivateDesktop]; item = [menu itemWithTitle: NSLocalizedString(@"Hide Desktop", @"")]; [item setTitle: NSLocalizedString(@"Show Desktop", @"")]; } } - (void)showRecycler:(id)sender { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; id item; if (recyclerApp == nil) { recyclerCanQuit = NO; [self connectRecycler]; item = [menu itemWithTitle: NSLocalizedString(@"Show Recycler", @"")]; [item setTitle: NSLocalizedString(@"Hide Recycler", @"")]; } else { recyclerCanQuit = YES; [recyclerApp terminateApplication]; item = [menu itemWithTitle: NSLocalizedString(@"Hide Recycler", @"")]; [item setTitle: NSLocalizedString(@"Show Recycler", @"")]; } } - (void)showFinder:(id)sender { [finder activate]; } - (void)showFiend:(id)sender { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; menu = [[menu itemWithTitle: NSLocalizedString(@"Fiend", @"")] submenu]; while (1) { if ([menu numberOfItems] == 0) break; [menu removeItemAtIndex: 0]; } [menu addItemWithTitle: NSLocalizedString(@"Hide Fiend", @"") action: @selector(hideFiend:) keyEquivalent: @""]; [menu addItemWithTitle: NSLocalizedString(@"Remove Current Layer", @"") action: @selector(removeFiendLayer:) keyEquivalent: @""]; [menu addItemWithTitle: NSLocalizedString(@"Rename Current Layer", @"") action: @selector(renameFiendLayer:) keyEquivalent: @""]; [menu addItemWithTitle: NSLocalizedString(@"Add Layer...", @"") action: @selector(addFiendLayer:) keyEquivalent: @""]; [fiend activate]; } - (void)hideFiend:(id)sender { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; menu = [[menu itemWithTitle: NSLocalizedString(@"Fiend", @"")] submenu]; while (1) { if ([menu numberOfItems] == 0) { break; } [menu removeItemAtIndex: 0]; } [menu addItemWithTitle: NSLocalizedString(@"Show Fiend", @"") action: @selector(showFiend:) keyEquivalent: @""]; if (fiend != nil) { [fiend hide]; } } - (void)addFiendLayer:(id)sender { [fiend addLayer]; } - (void)removeFiendLayer:(id)sender { [fiend removeCurrentLayer]; } - (void)renameFiendLayer:(id)sender { [fiend renameCurrentLayer]; } - (void)showTShelf:(id)sender { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; menu = [[menu itemWithTitle: NSLocalizedString(@"Tabbed Shelf", @"")] submenu]; [[menu itemAtIndex: 0] setTitle: NSLocalizedString(@"Hide Tabbed Shelf", @"")]; [[menu itemAtIndex: 0] setAction: @selector(hideTShelf:)]; [tshelfWin activate]; } - (void)hideTShelf:(id)sender { NSMenu *menu = [[[NSApp mainMenu] itemWithTitle: NSLocalizedString(@"Tools", @"")] submenu]; menu = [[menu itemWithTitle: NSLocalizedString(@"Tabbed Shelf", @"")] submenu]; [[menu itemAtIndex: 0] setTitle: NSLocalizedString(@"Show Tabbed Shelf", @"")]; [[menu itemAtIndex: 0] setAction: @selector(showTShelf:)]; if ([tshelfWin isVisible]) { [tshelfWin deactivate]; } } - (void)selectSpecialTShelfTab:(id)sender { if ([tshelfWin isVisible] == NO) { [tshelfWin activate]; } [[tshelfWin shelfView] selectLastItem]; } - (void)addTShelfTab:(id)sender { [tshelfWin addTab]; } - (void)removeTShelfTab:(id)sender { [tshelfWin removeTab]; } - (void)renameTShelfTab:(id)sender { [tshelfWin renameTab]; } - (void)cut:(id)sender { NSWindow *kwin = [NSApp keyWindow]; if (kwin) { if ([kwin isKindOfClass: [TShelfWin class]]) { TShelfViewItem *item = [[tshelfWin shelfView] selectedTabItem]; if (item) { TShelfIconsView *iview = (TShelfIconsView *)[item view]; [iview doCut]; } } else if ([vwrsManager hasViewerWithWindow: kwin] || [dtopManager hasWindow: kwin]) { id nodeView; NSArray *selection; NSArray *basesel; if ([vwrsManager hasViewerWithWindow: kwin]) { nodeView = [[vwrsManager viewerWithWindow: kwin] nodeView]; } else { nodeView = [dtopManager desktopView]; } selection = [nodeView selectedPaths]; basesel = [NSArray arrayWithObject: [[nodeView baseNode] path]]; if ([selection count] && ([selection isEqual: basesel] == NO)) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; [pb declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; if ([pb setPropertyList: selection forType: NSFilenamesPboardType]) { [fileOpsManager setFilenamesCut: YES]; } } } } } - (void)copy:(id)sender { NSWindow *kwin = [NSApp keyWindow]; if (kwin) { if ([kwin isKindOfClass: [TShelfWin class]]) { TShelfViewItem *item = [[tshelfWin shelfView] selectedTabItem]; if (item) { TShelfIconsView *iview = (TShelfIconsView *)[item view]; [iview doCopy]; } } else if ([vwrsManager hasViewerWithWindow: kwin] || [dtopManager hasWindow: kwin]) { id nodeView; NSArray *selection; NSArray *basesel; if ([vwrsManager hasViewerWithWindow: kwin]) { nodeView = [[vwrsManager viewerWithWindow: kwin] nodeView]; } else { nodeView = [dtopManager desktopView]; } selection = [nodeView selectedPaths]; basesel = [NSArray arrayWithObject: [[nodeView baseNode] path]]; if ([selection count] && ([selection isEqual: basesel] == NO)) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; [pb declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; if ([pb setPropertyList: selection forType: NSFilenamesPboardType]) { [fileOpsManager setFilenamesCut: NO]; } } } } } - (void)paste:(id)sender { NSWindow *kwin = [NSApp keyWindow]; if (kwin) { if ([kwin isKindOfClass: [TShelfWin class]]) { TShelfViewItem *item = [[tshelfWin shelfView] selectedTabItem]; if (item) { TShelfIconsView *iview = (TShelfIconsView *)[item view]; [iview doPaste]; } } else if ([vwrsManager hasViewerWithWindow: kwin] || [dtopManager hasWindow: kwin]) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if (sourcePaths) { BOOL cut = [fileOpsManager filenamesWasCut]; id nodeView; if ([vwrsManager hasViewerWithWindow: kwin]) { nodeView = [[vwrsManager viewerWithWindow: kwin] nodeView]; } else { nodeView = [dtopManager desktopView]; } if ([nodeView validatePasteOfFilenames: sourcePaths wasCut: cut]) { NSMutableDictionary *opDict = [NSMutableDictionary dictionary]; NSString *source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; NSString *destination = [[nodeView shownNode] path]; NSMutableArray *files = [NSMutableArray array]; NSString *operation; int i; for (i = 0; i < [sourcePaths count]; i++) { NSString *spath = [sourcePaths objectAtIndex: i]; [files addObject: [spath lastPathComponent]]; } if (cut) { if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { operation = NSWorkspaceMoveOperation; } } else { operation = NSWorkspaceCopyOperation; } [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: destination forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [self performFileOperation: opDict]; } } } } } } - (void)runCommand:(id)sender { [runExtController activate]; } - (void)checkRemovableMedia:(id)sender { [dtopManager checkNewRemovableMedia]; } - (void)emptyRecycler:(id)sender { CREATE_AUTORELEASE_POOL(arp); FSNode *node = [FSNode nodeWithPath: trashPath]; NSMutableArray *subNodes = [[node subNodes] mutableCopy]; int count = [subNodes count]; NSUInteger i; for (i = 0; i < count; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isReserved]) { [subNodes removeObjectAtIndex: i]; i--; count --; } } if ([subNodes count]) { NSMutableArray *files = [NSMutableArray array]; NSMutableDictionary *opinfo = [NSMutableDictionary dictionary]; for (i = 0; i < [subNodes count]; i++) { [files addObject: [[(FSNode *)[subNodes objectAtIndex: i] path] lastPathComponent]]; } [opinfo setObject: @"GWorkspaceEmptyRecyclerOperation" forKey: @"operation"]; [opinfo setObject: trashPath forKey: @"source"]; [opinfo setObject: trashPath forKey: @"destination"]; [opinfo setObject: files forKey: @"files"]; [self performFileOperation: opinfo]; } RELEASE (subNodes); RELEASE (arp); } // // DesktopApplication protocol // - (void)selectionChanged:(NSArray *)newsel { if (newsel && [newsel count] && ([vwrsManager orderingViewers] == NO)) { [self setSelectedPaths: [FSNode pathsOfNodes: newsel]]; } } - (void)openSelectionInNewViewer:(BOOL)newv { if (selectedPaths && [selectedPaths count]) { [self openSelectedPaths: selectedPaths newViewer: newv]; } } - (void)openSelectionWithApp:(id)sender { NSString *appName = (NSString *)[(NSMenuItem *)sender representedObject]; NSUInteger count = (selectedPaths ? [selectedPaths count] : 0); if (count) { NSUInteger i; if (count > MAX_FILES_TO_OPEN_DIALOG) { NSString *msg1 = NSLocalizedString(@"Are you sure you want to open", @""); NSString *msg2 = NSLocalizedString(@"items?", @""); if (NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %lu %@", msg1, (unsigned long)count, msg2], NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Yes", @""), nil)) { return; } } for (i = 0; i < count; i++) { NSString *path = [selectedPaths objectAtIndex: i]; NS_DURING { [ws openFile: path withApplication: appName]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [path lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } - (void)performFileOperation:(NSDictionary *)opinfo { NSString *operation = [opinfo objectForKey: @"operation"]; NSString *source = [opinfo objectForKey: @"source"]; NSString *destination = [opinfo objectForKey: @"destination"]; NSArray *files = [opinfo objectForKey: @"files"]; NSInteger tag; if (destination == nil && [operation isEqualToString:NSWorkspaceRecycleOperation]) destination = [self trashPath]; [self performFileOperation: operation source: source destination: destination files: files tag: &tag]; } - (BOOL)filenamesWasCut { return [fileOpsManager filenamesWasCut]; } - (void)setFilenamesCut:(BOOL)value { [fileOpsManager setFilenamesCut: value]; } - (void)lsfolderDragOperation:(NSData *)opinfo concludedAtPath:(NSString *)path { [finder lsfolderDragOperation: opinfo concludedAtPath: path]; } - (void)concludeRemoteFilesDragOperation:(NSData *)opinfo atLocalPath:(NSString *)localPath { NSDictionary *infoDict = [NSUnarchiver unarchiveObjectWithData: opinfo]; NSArray *srcPaths = [infoDict objectForKey: @"paths"]; BOOL bookmark = [[infoDict objectForKey: @"bookmark"] boolValue]; NSString *connName = [infoDict objectForKey: @"dndconn"]; NSArray *locContents = [fm directoryContentsAtPath: localPath]; BOOL samename = NO; int i; if (locContents) { NSConnection *conn; id remote; for (i = 0; i < [srcPaths count]; i++) { NSString *name = [[srcPaths objectAtIndex: i] lastPathComponent]; if ([locContents containsObject: name]) { samename = YES; break; } } conn = [NSConnection connectionWithRegisteredName: connName host: @""]; if (conn) { remote = [conn rootProxy]; if (remote) { NSMutableDictionary *reply = [NSMutableDictionary dictionary]; NSData *rpdata; [reply setObject: localPath forKey: @"destination"]; [reply setObject: srcPaths forKey: @"paths"]; [reply setObject: [NSNumber numberWithBool: bookmark] forKey: @"bookmark"]; [reply setObject: [NSNumber numberWithBool: !samename] forKey: @"dndok"]; rpdata = [NSArchiver archivedDataWithRootObject: reply]; [remote setProtocolForProxy: @protocol(GWRemoteFilesDraggingInfo)]; remote = (id )remote; [remote remoteDraggingDestinationReply: rpdata]; } } } } - (void)addWatcherForPath:(NSString *)path { [watchedPaths addObject: path]; if (fswnotifications) { [self connectFSWatcher]; [fswatcher client: (id )self addWatcherForPath: path]; } } - (void)removeWatcherForPath:(NSString *)path { [watchedPaths removeObject: path]; if (fswnotifications) { [self connectFSWatcher]; [fswatcher client: (id )self removeWatcherForPath: path]; } } - (NSString *)trashPath { static NSString *tpath = nil; if (tpath == nil) { tpath = [NSHomeDirectory() stringByAppendingPathComponent: @".Trash"]; RETAIN (tpath); } return tpath; } - (id)workspaceApplication { return [GWorkspace gworkspace]; } - (oneway void)terminateApplication { [NSApp terminate: self]; } - (BOOL)terminating { return terminating; } @end @implementation GWorkspace (SharedInspector) - (oneway void)showExternalSelection:(NSArray *)selection { if ([[inspector win] isVisible] == NO) { [self showContentsInspector: nil]; } if (selection) { [inspector setCurrentSelection: selection]; } else { [self resetSelectedPaths]; } } @end @implementation GWorkspace (PrivateMethods) - (void)_updateTrashContents { FSNode *node = [FSNode nodeWithPath: trashPath]; [trashContents removeAllObjects]; if (node && [node isValid]) { NSArray *subNodes = [node subNodes]; NSUInteger i; for (i = 0; i < [subNodes count]; i++) { FSNode *subnode = [subNodes objectAtIndex: i]; if ([subnode isReserved] == NO) { [trashContents addObject: subnode]; } } } } @end gworkspace-1.1.0/GWorkspace/GWorkspaceInfo.plist0000644000175000001440000000256014752466504021142 0ustar multixusers { ApplicationName = "GWorkspace"; ApplicationDescription = "GNUstep Workspace Manager"; ApplicationIcon = "FileManager.tiff"; ApplicationRelease = "1.1.0"; NSBuildVersion = "02 2025"; CFBundleIdentifier = "org.gnustep.GWorkspace"; Authors = ( "Riccardo Mottola", "Enrico Sersale", "Documentation and Help contents by:", "Dennis Leeuw " ); URL = "http://www.gnustep.org/experience/GWorkspace.html"; Copyright = "Copyright (C) 2003-2025 Free Software Foundation, Inc."; CopyrightDescription = "Released under the GNU General Public License 2.0 or later"; NSIcon = "FileManager.tiff"; NSRole = "Viewer"; NSServices = ( { NSMenuItem = { English = "Open in GWorkspace"; German = "In GWorkspace \U00F6ffnen"; French = "Ouvrir dans GWorkspace"; Italian = "Aprire in GWorkspace"; default = "Open in GWorkspace"; }; NSMessage = openInWorkspace; NSPortName = GWorkspace; NSSendTypes = ( NSStringPboardType ); } ); NSTypes = ( { NSUnixExtensions = ( "inspector" ); NSIcon = "MagnifyGlas.tiff"; }, { NSUnixExtensions = ( "lsf" ); NSIcon = "LiveSearchFolder.tiff"; }, { NSUnixExtensions = ( "webloc" ); NSIcon = "FileIcon_WebLink.tiff"; } ); } gworkspace-1.1.0/GWorkspace/History/0000755000175000001440000000000014751213523016630 5ustar multixusersgworkspace-1.1.0/GWorkspace/History/History.h0000644000175000001440000000276114751213523020450 0ustar multixusers/* History.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef HISTORY_H #define HISTORY_H #include @class NSWindow; @class NSScrollView; @class NSMatrix; @interface History : NSObject { NSWindow *win; NSScrollView *scrollView; NSMatrix *matrix; id viewer; } - (void)activate; - (void)setViewer:(id)aviewer; - (id)viewer; - (void)setHistoryNodes:(NSArray *)nodes; - (void)setHistoryPosition:(int)position; - (void)setHistoryNodes:(NSArray *)nodes position:(int)position; - (void)matrixAction:(id)sender; - (void)setMatrixWidth; - (void)updateDefaults; - (NSWindow *)myWin; @end #endif // HISTORY_H gworkspace-1.1.0/GWorkspace/History/History.m0000644000175000001440000001230414751213523020447 0ustar multixusers/* History.m * * Copyright (C) 2003-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "History.h" #import "GWViewersManager.h" #import "GWFunctions.h" #import "FSNodeRep.h" @implementation History - (void)dealloc { RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSSize ms; unsigned int style = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask; win = [[NSWindow alloc] initWithContentRect: NSZeroRect styleMask: style backing: NSBackingStoreBuffered defer: YES]; if ([win setFrameUsingName: @"History"] == NO) { [win setFrame: NSMakeRect(100, 100, 250, 400) display: NO]; } [win setTitle: NSLocalizedString(@"History",@"")]; [win setReleasedWhenClosed: NO]; [win setDelegate: self]; scrollView = [NSScrollView new]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasHorizontalScroller: YES]; [scrollView setHasVerticalScroller: YES]; [scrollView setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; [scrollView setFrame: [[win contentView] bounds]]; [win setContentView: scrollView]; RELEASE (scrollView); matrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSRadioModeMatrix prototype: [[NSBrowserCell new] autorelease] numberOfRows: 0 numberOfColumns: 0]; [matrix setTarget: self]; [matrix setDoubleAction: @selector(matrixAction:)]; [matrix setIntercellSpacing: NSZeroSize]; ms.width = [[scrollView contentView] bounds].size.width; ms.height = [[FSNodeRep sharedInstance] heightOfFont: [NSFont systemFontOfSize: 12]]; [matrix setCellSize: ms]; [matrix setAutoscroll: YES]; [matrix setAllowsEmptySelection: YES]; [scrollView setDocumentView: matrix]; RELEASE (matrix); viewer = nil; } return self; } - (void)activate { [win makeKeyAndOrderFront: nil]; } - (void)setViewer:(id)aviewer { viewer = aviewer; } - (id)viewer { return viewer; } - (void)setHistoryNodes:(NSArray *)nodes { NSUInteger count = (nodes ? [nodes count] : 0); NSUInteger i; [matrix renewRows: count columns: 1]; if ((nodes == nil) || (count == 0)) { [matrix sizeToCells]; [matrix setNeedsDisplay: [win isVisible]]; return; } for (i = 0; i < [nodes count]; i++) { FSNode *node = [nodes objectAtIndex: i]; NSString *base = [node parentPath]; NSString *name = [node name]; NSString *title = [NSString stringWithFormat: @"%@ - %@", name, base]; id cell = [matrix cellAtRow: i column: 0]; [cell setTitle: title]; [cell setLeaf: YES]; } [self setMatrixWidth]; [matrix sizeToCells]; [matrix setNeedsDisplay: [win isVisible]]; } - (void)setHistoryPosition:(int)position { if ((position >= 0) && (position < [[matrix cells] count])) { [matrix scrollCellToVisibleAtRow: position column: 0]; [matrix selectCellAtRow: position column: 0]; } } - (void)setHistoryNodes:(NSArray *)nodes position:(int)position { [self setHistoryNodes: nodes]; [self setHistoryPosition: position]; } - (void)matrixAction:(id)sender { if (viewer) { NSInteger row, col; [matrix getRow: &row column: &col ofCell: [matrix selectedCell]]; [[GWViewersManager viewersManager] goToHistoryPosition: row ofViewer: viewer]; } } - (void)setMatrixWidth { NSFont *font = [NSFont systemFontOfSize: 12]; NSArray *cells = [matrix cells]; float mh = [matrix cellSize].height; float maxw = [[scrollView contentView] bounds].size.width; NSUInteger i; for (i = 0; i < [cells count]; i++) { NSString *s = [[cells objectAtIndex: i] stringValue]; float w = [font widthOfString: s] + 10; maxw = (maxw < w) ? w : maxw; } if ([matrix cellSize].width != maxw) { [matrix setCellSize: NSMakeSize(maxw, mh)]; } } - (void)updateDefaults { if ([win isVisible]) { [win saveFrameUsingName: @"History"]; } } - (NSWindow *)myWin { return win; } - (void)windowDidResize:(NSNotification *)aNotification { if ([aNotification object] == win) { [self setMatrixWidth]; } } - (BOOL)windowShouldClose:(id)sender { [self updateDefaults]; return YES; } @end gworkspace-1.1.0/GWorkspace/Preferences/0000755000175000001440000000000014751213523017430 5ustar multixusersgworkspace-1.1.0/GWorkspace/Preferences/BrowserViewerPref.h0000644000175000001440000000316414751213523023227 0ustar multixusers/* BrowserViewerPref.h * * Copyright (C) 2003-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef BROWSERVIEWERPREF_H #define BROWSERVIEWERPREF_H #import #import #import "PrefProtocol.h" @class NSEvent; @interface Resizer : NSView { NSImage *arrow; id prefview; id controller; } - (id)initForController:(id)acontroller; @end @interface BrowserViewerPref : NSObject { IBOutlet id win; IBOutlet NSBox *prefbox; IBOutlet NSBox *controlsbox; IBOutlet id colExample; IBOutlet NSBox *resizerBox; IBOutlet id setButt; Resizer *resizer; int columnsWidth; } - (void)tile; - (void)mouseDownOnResizer:(NSEvent *)theEvent; - (void)setNewWidth:(int)w; - (IBAction)setDefaultWidth:(id)sender; @end #endif // BROWSERVIEWERPREF_H gworkspace-1.1.0/GWorkspace/Preferences/BrowserViewerPref.m0000644000175000001440000001324314751213523023233 0ustar multixusers/* BrowserViewerPref.m * * Copyright (C) 2003-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "BrowserViewerPref.h" #define RESIZER_W 16 #define RESIZER_Y 48 #define MINIMUM_WIDTH 120 #define DEFAULT_WIDTH 150 #define MAXIMUM_WIDTH 362 static NSString *nibName = @"BrowserViewerPref"; @implementation Resizer - (void)dealloc { RELEASE (arrow); [super dealloc]; } - (id)initForController:(id)acontroller { self = [super init]; [self setFrame: NSMakeRect(0, 0, RESIZER_W, RESIZER_W)]; controller = acontroller; ASSIGN (arrow, [NSImage imageNamed: @"RightArr.tiff"]); return self; } - (void)mouseDown:(NSEvent *)theEvent { [controller mouseDownOnResizer: theEvent]; } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; [arrow compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; } @end @implementation BrowserViewerPref - (void)dealloc { RELEASE (colExample); RELEASE (prefbox); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *widthStr = [defaults objectForKey: @"browserColsWidth"]; RETAIN (prefbox); RELEASE (win); if (widthStr) columnsWidth = [widthStr intValue]; else columnsWidth = DEFAULT_WIDTH; [colExample setBorderType: NSBezelBorder]; [colExample setHasHorizontalScroller: NO]; [colExample setHasVerticalScroller: YES]; resizer = [[Resizer alloc] initForController: self]; [resizer setFrame: NSMakeRect(0, 0, RESIZER_W, RESIZER_W)]; [resizerBox setContentView: resizer]; [self tile]; /* Internationalization */ [controlsbox setTitle: NSLocalizedString(@"Column Width", @"")]; [setButt setTitle: NSLocalizedString(@"Use Default Settings", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Browser", @""); } - (void)tile { NSRect frameRect; frameRect = [colExample frame]; frameRect.size.width = columnsWidth; [colExample setFrame: frameRect]; [resizerBox setFrameOrigin: NSMakePoint(columnsWidth + frameRect.origin.x, RESIZER_Y)]; [controlsbox setNeedsDisplay: YES]; } - (void)mouseDownOnResizer:(NSEvent *)theEvent { NSApplication *app = [NSApplication sharedApplication]; int orx = (int)[controlsbox convertPoint: [theEvent locationInWindow] fromView: nil].x; NSUInteger eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask; int newWidth = (int)[colExample bounds].size.width; NSEvent *e; [controlsbox lockFocus]; [[NSRunLoop currentRunLoop] limitDateForMode: NSEventTrackingRunLoopMode]; e = [app nextEventMatchingMask: eventMask untilDate: [NSDate distantFuture] inMode: NSEventTrackingRunLoopMode dequeue: YES]; while ([e type] != NSLeftMouseUp) { int x = (int)[controlsbox convertPoint: [e locationInWindow] fromView: nil].x; int diff = x - orx; if ((newWidth + diff < MAXIMUM_WIDTH) && (newWidth + diff > MINIMUM_WIDTH)) { NSRect frameExample; frameExample = [colExample frame]; newWidth += diff; [resizerBox setFrameOrigin: NSMakePoint(frameExample.origin.x + newWidth, RESIZER_Y)]; [resizerBox setNeedsDisplay: YES]; frameExample.size.width = newWidth; [colExample setFrame: frameExample]; [colExample setNeedsDisplay: YES]; [controlsbox setNeedsDisplay: YES]; orx = x; } e = [app nextEventMatchingMask: eventMask untilDate: [NSDate distantFuture] inMode: NSEventTrackingRunLoopMode dequeue: YES]; } [controlsbox unlockFocus]; [self setNewWidth: (int)[colExample bounds].size.width]; [setButt setEnabled: YES]; } - (void)setNewWidth:(int)w { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: [NSString stringWithFormat: @"%i", w] forKey: @"browserColsWidth"]; columnsWidth = w; [[NSNotificationCenter defaultCenter] postNotificationName: @"GWBrowserColumnWidthChangedNotification" object: [NSNumber numberWithInt: w]]; [defaults synchronize]; } - (IBAction)setDefaultWidth:(id)sender { columnsWidth = DEFAULT_WIDTH; [self setNewWidth: columnsWidth]; [self tile]; [setButt setEnabled: NO]; } @end gworkspace-1.1.0/GWorkspace/Preferences/DefEditorPref.h0000644000175000001440000000311314751213523022261 0ustar multixusers/* DefEditorPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DEF_EDITOR_PREF_H #define DEF_EDITOR_PREF_H #include #include "PrefProtocol.h" @class NSWorkspace; @class GWorkspace; @class FSNode; @class FSNodeRep; @class NSFont; @interface DefEditorPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id iconbox; IBOutlet id imView; IBOutlet id nameLabel; IBOutlet id chooseButt; NSString *noEditorStr; FSNode *ednode; NSFont *font; float iconBoxWidth; float labelHeight; NSPoint labelOrigin; FSNodeRep *fsnodeRep; NSWorkspace *ws; } - (IBAction)chooseEditor:(id)sender; - (void)setEditor:(NSString *)editor; - (void)tile; @end #endif // DEF_EDITOR_PREF_H gworkspace-1.1.0/GWorkspace/Preferences/DefEditorPref.m0000644000175000001440000001270114751213523022271 0ustar multixusers/* DefEditorPref.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNodeRep.h" #import "DefEditorPref.h" #import "GWorkspace.h" #define LABEL_MARGIN 8 #define ICON_SIZE 48 static NSString *nibName = @"DefEditorPref"; @implementation DefEditorPref - (void)dealloc { RELEASE (prefbox); RELEASE (ednode); RELEASE (noEditorStr); RELEASE (font); [super dealloc]; } - (id)init { self = [super init]; if (self) { ASSIGN (font, [NSFont systemFontOfSize: 12]); ASSIGN (noEditorStr, NSLocalizedString(@"No Default Editor", @"")); if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *editor = [defaults stringForKey: @"defaulteditor"]; RETAIN (prefbox); iconBoxWidth = [iconbox bounds].size.width; labelHeight = [nameLabel frame].size.height; labelOrigin = [nameLabel frame].origin; RELEASE (win); fsnodeRep = [FSNodeRep sharedInstance]; ws = [NSWorkspace sharedWorkspace]; [imView setImageScaling: NSScaleProportionally]; if (editor) { NSString *path = [ws fullPathForApplication: editor]; if (path) { NSImage *image; ASSIGN (ednode, [FSNode nodeWithPath: path]); image = [fsnodeRep iconOfSize: ICON_SIZE forNode: ednode]; [imView setImage: image]; [nameLabel setStringValue: [ednode name]]; [self tile]; } else { [nameLabel setStringValue: noEditorStr]; [self tile]; } } else { [nameLabel setStringValue: noEditorStr]; [self tile]; } /* Internationalization */ [chooseButt setTitle: NSLocalizedString(@"Choose", @"")]; [iconbox setTitle: NSLocalizedString(@"Default Editor", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Editor", @""); } - (IBAction)chooseEditor:(id)sender { NSString *path = [NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSSystemDomainMask, YES) lastObject]; NSOpenPanel *openPanel = [NSOpenPanel openPanel]; NSArray *fileTypes = [NSArray arrayWithObjects: @"app", @"debug", @"profile", nil]; FSNode *node; int result; [openPanel setTitle: @"open"]; [openPanel setAllowsMultipleSelection: NO]; [openPanel setCanChooseFiles: YES]; [openPanel setCanChooseDirectories: NO]; result = [openPanel runModalForDirectory: path file: nil types: fileTypes]; if(result != NSOKButton) { return; } node = [FSNode nodeWithPath: [openPanel filename]]; if (([node isValid] == NO) || ([node isApplication] == NO)) { NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %@", [node name], NSLocalizedString(@"is not a valid application!", @"")], @"Continue", nil, nil); return; } [self setEditor: [node name]]; } - (void)setEditor:(NSString *)editor { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *path; NSImage *image; if ([editor isEqual: [ednode name]]) { return; } path = [ws fullPathForApplication: editor]; if (path) { ASSIGN (ednode, [FSNode nodeWithPath: path]); image = [fsnodeRep iconOfSize: ICON_SIZE forNode: ednode]; [imView setImage: image]; [nameLabel setStringValue: [ednode name]]; [self tile]; [defaults setObject: [ednode name] forKey: @"defaulteditor"]; [defaults synchronize]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWDefaultEditorChangedNotification" object: [ednode name] userInfo: nil]; } else { NSRunAlertPanel(nil, [NSString stringWithFormat: @"%@ %@", editor, NSLocalizedString(@"seems not a valid application!", @"")], @"Continue", nil, nil); } } - (void)tile { NSRect r = [nameLabel frame]; int labw = (int)[font widthOfString: [nameLabel stringValue]] + LABEL_MARGIN; NSPoint p = NSMakePoint(0, labelOrigin.y); r.size.width = labw; [nameLabel setFrame: r]; p.x = ((iconBoxWidth - [nameLabel frame].size.width) / 2); [nameLabel setFrameOrigin: p]; [iconbox setNeedsDisplay: YES]; } @end gworkspace-1.1.0/GWorkspace/Preferences/DefSortOrderPref.h0000644000175000001440000000261514751213523022764 0ustar multixusers/* DefSortOrderPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DEF_SORTORDER_PREF_H #define DEF_SORTORDER_PREF_H #include #include "PrefProtocol.h" @class GWorkspace; @interface DefSortOrderPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id selectbox; IBOutlet id matrix; IBOutlet id sortinfo1; IBOutlet id sortinfo2; IBOutlet id setButt; int sortType; } - (IBAction)changeType:(id)sender; - (IBAction)setNewSortType:(id)sender; @end #endif // DEF_SORTORDER_PREF_H gworkspace-1.1.0/GWorkspace/Preferences/DefSortOrderPref.m0000644000175000001440000000557214751213523022776 0ustar multixusers/* DefSortOrderPref.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNodeRep.h" #import "DefSortOrderPref.h" #import "GWorkspace.h" static NSString *nibName = @"DefSortOrderPref"; @implementation DefSortOrderPref - (void)dealloc { RELEASE (prefbox); [super dealloc]; } - (id)init { self = [super init]; if(self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { RETAIN (prefbox); RELEASE (win); sortType = [[FSNodeRep sharedInstance] defaultSortOrder]; [matrix selectCellAtRow: sortType column: 0]; [setButt setEnabled: NO]; /* Internationalization */ [setButt setTitle: NSLocalizedString(@"Set", @"")]; [selectbox setTitle: NSLocalizedString(@"Sort by", @"")]; [sortinfo1 setStringValue: NSLocalizedString(@"The method will apply to all the folders", @"")]; [sortinfo2 setStringValue: NSLocalizedString(@"that have no order specified", @"")]; [[matrix cellAtRow:0 column:0] setTitle: NSLocalizedString(@"Name", @"")]; [[matrix cellAtRow:1 column:0] setTitle: NSLocalizedString(@"Type", @"")]; [[matrix cellAtRow:2 column:0] setTitle: NSLocalizedString(@"Date", @"")]; [[matrix cellAtRow:3 column:0] setTitle: NSLocalizedString(@"Size", @"")]; [[matrix cellAtRow:4 column:0] setTitle: NSLocalizedString(@"Owner", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Sorting Order", @""); } - (void)changeType:(id)sender { sortType = [[sender selectedCell] tag]; [setButt setEnabled: YES]; } - (void)setNewSortType:(id)sender { [[FSNodeRep sharedInstance] setDefaultSortOrder: sortType]; [setButt setEnabled: NO]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWSortTypeDidChangeNotification" object: nil userInfo: nil]; } @end gworkspace-1.1.0/GWorkspace/Preferences/DesktopPref.h0000644000175000001440000000472714751213523022041 0ustar multixusers/* DesktopPref.h * * Copyright (C) 2005-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "PrefProtocol.h" @class GWDesktopManager; @interface ColorView : NSView { NSColor *color; } - (void)setColor:(NSColor *)c; - (NSColor *)color; @end @interface DesktopPref : NSObject { IBOutlet id win; IBOutlet NSBox *prefbox; IBOutlet id tabView; // Color NSColorPanel *panel; IBOutlet NSTextField *colorLabel; IBOutlet NSColorWell *colorWell; ColorView *colorView; // Background image NSString *imagePath; NSString *imagesDir; IBOutlet NSImageView *imageView; IBOutlet NSMatrix *imagePosMatrix; IBOutlet NSButton *chooseImageButt; IBOutlet NSButton *useImageSwitch; // General IBOutlet NSButton *omnipresentCheck; IBOutlet NSButton *hideTShelfCheck; IBOutlet NSButton *launchSingleClick; // Dock IBOutlet NSBox *dockBox; IBOutlet NSButton *useDockCheck; IBOutlet NSTextField *dockPosLabel; IBOutlet NSMatrix *dockPosMatrix; IBOutlet NSTextField *dockStyleLabel; IBOutlet NSMatrix *dockStyleMatrix; GWDesktopManager *manager; id gworkspace; } // Color - (IBAction)setColor:(id)sender; // Background image - (IBAction)chooseImage:(id)sender; - (IBAction)setImage:(id)sender; - (IBAction)setImageStyle:(id)sender; - (IBAction)setUseImage:(id)sender; // General - (IBAction)setOmnipresent:(id)sender; - (IBAction)setUsesDock:(id)sender; - (IBAction)setDockPosition:(id)sender; - (IBAction)setDockStyle:(id)sender; - (IBAction)setTShelfAutohide:(id)sender; - (IBAction)setSingleClickLaunch:(id)sender; @end gworkspace-1.1.0/GWorkspace/Preferences/DesktopPref.m0000644000175000001440000002036014751213523022035 0ustar multixusers/* DesktopPref.m * * Copyright (C) 2005-2021 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "DesktopPref.h" #import "GWDesktopManager.h" #import "GWorkspace.h" #import "GWDesktopView.h" #import "Dock.h" #import "TShelf/TShelfWin.h" static NSString *nibName = @"DesktopPref"; @implementation DesktopPref - (void)dealloc { RELEASE (prefbox); RELEASE (imagePath); RELEASE (imagesDir); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { NSString *impath; DockPosition dockpos; DockStyle dockstyle; id cell; RETAIN (prefbox); RELEASE (win); manager = [GWDesktopManager desktopManager]; gworkspace = [GWorkspace gworkspace]; // Color [NSColorPanel setPickerMask: NSColorPanelWheelModeMask | NSColorPanelRGBModeMask | NSColorPanelColorListModeMask]; [NSColorPanel setPickerMode: NSWheelModeColorPanel]; [colorWell setColor: [[manager desktopView] currentColor]]; // Background image [imageView setEditable: NO]; [imageView setImageScaling: NSScaleProportionally]; impath = [[manager desktopView] backImagePath]; if (impath) { ASSIGN (imagePath, impath); } if (imagePath) { CREATE_AUTORELEASE_POOL (pool); NSImage *image = [[NSImage alloc] initWithContentsOfFile: imagePath]; if (image) { [imageView setImage: image]; RELEASE (image); } RELEASE (pool); } [imagePosMatrix selectCellAtRow: [[manager desktopView] backImageStyle] column: 0]; BOOL useImage = [[manager desktopView] useBackImage]; [imageView setEnabled: useImage]; [chooseImageButt setEnabled: useImage]; [imagePosMatrix setEnabled: useImage]; [useImageSwitch setState: useImage ? NSOnState : NSOffState]; // General [omnipresentCheck setState: ([manager usesXBundle] ? NSOnState : NSOffState)]; [launchSingleClick setState: ([manager singleClickLaunch] ? NSOnState : NSOffState)]; [useDockCheck setState: ([manager dockActive] ? NSOnState : NSOffState)]; dockpos = [manager dockPosition]; [dockPosMatrix selectCellAtRow: dockpos column: 0]; dockstyle = [[manager dock] style]; [dockStyleMatrix selectCellAtRow: dockstyle column: 0]; [hideTShelfCheck setState: (([[gworkspace tabbedShelf] autohide]) ? NSOnState : NSOffState)]; /* Internationalization */ [[tabView tabViewItemAtIndex: 0] setLabel: NSLocalizedString(@"Background", @"")]; [[tabView tabViewItemAtIndex: 1] setLabel: NSLocalizedString(@"General", @"")]; [colorLabel setStringValue:_(@"Color:")]; cell = [imagePosMatrix cellAtRow: BackImageCenterStyle column: 0]; [cell setTitle: NSLocalizedString(@"center", @"")]; cell = [imagePosMatrix cellAtRow: BackImageFitStyle column: 0]; [cell setTitle: NSLocalizedString(@"fit", @"")]; cell = [imagePosMatrix cellAtRow: BackImageTileStyle column: 0]; [cell setTitle: NSLocalizedString(@"tile", @"")]; cell = [imagePosMatrix cellAtRow: BackImageScaleStyle column: 0]; [cell setTitle: NSLocalizedString(@"scale", @"")]; [useImageSwitch setTitle: NSLocalizedString(@"Use image", @"")]; [chooseImageButt setTitle: NSLocalizedString(@"Choose", @"")]; [dockBox setTitle: _(@"Dock")]; [useDockCheck setTitle: NSLocalizedString(@"Show Dock", @"")]; [dockPosLabel setStringValue: NSLocalizedString(@"Position:", @"")]; cell = [dockPosMatrix cellAtRow: 0 column: 0]; [cell setTitle: NSLocalizedString(@"Left", @"")]; cell = [dockPosMatrix cellAtRow: 1 column: 0]; [cell setTitle: NSLocalizedString(@"Right", @"")]; [dockStyleLabel setStringValue: NSLocalizedString(@"Style:", @"")]; cell = [dockStyleMatrix cellAtRow: 0 column: 0]; [cell setTitle: NSLocalizedString(@"Classic", @"")]; cell = [dockStyleMatrix cellAtRow: 1 column: 0]; [cell setTitle: NSLocalizedString(@"Modern", @"")]; [omnipresentCheck setTitle: _(@"Omnipresent")]; [hideTShelfCheck setTitle: NSLocalizedString(@"Autohide Tabbed Shelf", @"")]; [launchSingleClick setTitle: NSLocalizedString(@"Single Click Launch", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Desktop", @""); } // Color - (IBAction)setColor:(id)sender { [[manager desktopView] setCurrentColor: [colorWell color]]; [gworkspace tshelfBackgroundDidChange]; } // Background image - (IBAction)chooseImage:(id)sender { NSOpenPanel *openPanel; NSInteger result; openPanel = [NSOpenPanel openPanel]; [openPanel setTitle: NSLocalizedString(@"Choose Image", @"")]; [openPanel setAllowsMultipleSelection: NO]; [openPanel setCanChooseFiles: YES]; [openPanel setCanChooseDirectories: NO]; if (imagesDir == nil) { ASSIGN (imagesDir, NSHomeDirectory()); } result = [openPanel runModalForDirectory: imagesDir file: nil types: [NSImage imageFileTypes]]; if (result == NSOKButton) { CREATE_AUTORELEASE_POOL (pool); NSString *impath = [openPanel filename]; NSImage *image = [[NSImage alloc] initWithContentsOfFile: impath]; if (image) { [imageView setImage: image]; ASSIGN (imagePath, impath); ASSIGN (imagesDir, [imagePath stringByDeletingLastPathComponent]); RELEASE (image); } RELEASE (pool); } if (imagePath) { [[manager desktopView] setBackImageAtPath: imagePath]; [imagePosMatrix selectCellAtRow: [[manager desktopView] backImageStyle] column: 0]; [gworkspace tshelfBackgroundDidChange]; } } - (IBAction)setImage:(id)sender { // FIXME: Handle image dropped on image view? } - (IBAction)setImageStyle:(id)sender { id cell = [imagePosMatrix selectedCell]; NSInteger row, col; [imagePosMatrix getRow: &row column: &col ofCell: cell]; [[manager desktopView] setBackImageStyle: row]; [gworkspace tshelfBackgroundDidChange]; } - (IBAction)setUseImage:(id)sender { BOOL useImage = ([sender state] == NSOnState); [[manager desktopView] setUseBackImage: useImage]; [gworkspace tshelfBackgroundDidChange]; [imageView setEnabled: useImage]; [chooseImageButt setEnabled: useImage]; [imagePosMatrix setEnabled: useImage]; } // General - (IBAction)setOmnipresent:(id)sender { [manager setUsesXBundle: ([sender state] == NSOnState)]; if ([manager usesXBundle] == NO) { [sender setState: NSOffState]; } } - (IBAction)setUsesDock:(id)sender { [manager setDockActive: ([sender state] == NSOnState)]; } - (IBAction)setDockPosition:(id)sender { id cell = [dockPosMatrix selectedCell]; NSInteger row, col; [dockPosMatrix getRow: &row column: &col ofCell: cell]; [manager setDockPosition: (row == 0) ? DockPositionLeft : DockPositionRight]; } - (IBAction)setDockStyle:(id)sender { id cell = [dockStyleMatrix selectedCell]; NSInteger row, col; [dockStyleMatrix getRow: &row column: &col ofCell: cell]; [[manager dock] setStyle: (row == 0) ? DockStyleClassic : DockStyleModern]; } - (IBAction)setTShelfAutohide:(id)sender { [[gworkspace tabbedShelf] setAutohide: ([sender state] == NSOnState)]; } - (IBAction)setSingleClickLaunch:(id)sender { [manager setSingleClickLaunch: ([sender state] == NSOnState)]; [[gworkspace tabbedShelf] setSingleClickLaunch: ([sender state] == NSOnState)]; } @end gworkspace-1.1.0/GWorkspace/Preferences/HiddenFilesPref.h0000644000175000001440000000474414751213523022605 0ustar multixusers/* HiddenFilesPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef HIDDEN_FILES_PREF_H #define HIDDEN_FILES_PREF_H #include #include "PrefProtocol.h" @class NSFileManager; @class NSWorkspace; @class GWorkspace; @class FSNode; @interface HiddenFilesPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id tabView; IBOutlet id iconView; IBOutlet id pathField; IBOutlet id hiddenlabel; IBOutlet id leftScroll; IBOutlet id shownlabel; IBOutlet id rightScroll; IBOutlet id addButt; IBOutlet id removeButt; IBOutlet id loadButt; IBOutlet id labelinfo; IBOutlet id setButt; NSMatrix *leftMatrix, *rightMatrix; id cellPrototipe; FSNode *currentNode; IBOutlet id hiddenDirslabel; IBOutlet id hiddenDirsScroll; NSMatrix *dirsMatrix; IBOutlet id addDirButt; IBOutlet id removeDirButt; IBOutlet id setDirButt; NSMutableArray *hiddenPaths; NSFileManager *fm; NSWorkspace *ws; GWorkspace *gw; } - (IBAction)loadContents:(id)sender; - (IBAction)moveToHidden:(id)sender; - (IBAction)moveToShown:(id)sender; - (IBAction)activateChanges:(id)sender; - (IBAction)addDir:(id)sender; - (IBAction)removeDir:(id)sender; - (IBAction)activateDirChanges:(id)sender; - (void)selectionChanged:(NSNotification *)n; - (void)clearAll; - (void)addCellsWithNames:(NSArray *)names inMatrix:(NSMatrix *)matrix; - (void)removeCellsWithNames:(NSArray *)names inMatrix:(NSMatrix *)matrix; - (void)selectCellsWithNames:(NSArray *)names inMatrix:(NSMatrix *)matrix; - (id)cellWithTitle:(NSString *)title inMatrix:(NSMatrix *)matrix; @end #endif // HIDDEN_FILES_PREF_H gworkspace-1.1.0/GWorkspace/Preferences/HiddenFilesPref.m0000644000175000001440000004437414751213523022615 0ustar multixusers/* HiddenFilesPref.m * * Copyright (C) 2003-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNodeRep.h" #import "FSNFunctions.h" #import "HiddenFilesPref.h" #import "GWorkspace.h" static NSString *nibName = @"HiddenFilesPref"; #define ICON_SIZE 48 #define LINEH 20 #define CHECKSIZE(sz) \ if (sz.width < 0) sz.width = 0; \ if (sz.height < 0) sz.height = 0 @implementation HiddenFilesPref - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE (prefbox); RELEASE (currentNode); RELEASE (hiddenPaths); RELEASE (leftMatrix); RELEASE (rightMatrix); RELEASE (dirsMatrix); RELEASE (cellPrototipe); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { NSArray *hpaths; NSArray *selection; FSNode *node; NSImage *icon; RETAIN (prefbox); RELEASE (win); gw = [GWorkspace gworkspace]; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; selection = [gw selectedPaths]; node = [FSNode nodeWithPath: [selection objectAtIndex: 0]]; if ([selection count] > 1) { node = [FSNode nodeWithPath: [node parentPath]]; } else { if ([node isDirectory] == NO) { node = [FSNode nodeWithPath: [node parentPath]]; } else if ([node isPackage]) { node = [FSNode nodeWithPath: [node parentPath]]; } } ASSIGN (currentNode, node); icon = [[FSNodeRep sharedInstance] iconOfSize: ICON_SIZE forNode: currentNode]; [iconView setImage: icon]; cellPrototipe = [NSBrowserCell new]; [leftScroll setBorderType: NSBezelBorder]; [leftScroll setHasHorizontalScroller: NO]; [leftScroll setHasVerticalScroller: YES]; [rightScroll setBorderType: NSBezelBorder]; [rightScroll setHasHorizontalScroller: NO]; [rightScroll setHasVerticalScroller: YES]; leftMatrix = nil; rightMatrix = nil; [addButt setImage: [NSImage imageNamed: @"common_ArrowLeftH.tiff"]]; [removeButt setImage: [NSImage imageNamed: @"common_ArrowRightH.tiff"]]; [setButt setEnabled: NO]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(selectionChanged:) name: @"GWCurrentSelectionChangedNotification" object: nil]; [hiddenDirsScroll setBorderType: NSBezelBorder]; [hiddenDirsScroll setHasHorizontalScroller: NO]; [hiddenDirsScroll setHasVerticalScroller: YES]; hiddenPaths = [NSMutableArray new]; hpaths = [[FSNodeRep sharedInstance] hiddenPaths]; if ([hpaths count]) { NSSize cs, ms; NSUInteger i; [hiddenPaths addObjectsFromArray: hpaths]; dirsMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSListModeMatrix prototype: cellPrototipe numberOfRows: 0 numberOfColumns: 0]; [dirsMatrix setIntercellSpacing: NSZeroSize]; [dirsMatrix setCellSize: NSMakeSize(130, LINEH)]; [dirsMatrix setAutoscroll: YES]; [dirsMatrix setAllowsEmptySelection: YES]; cs = [hiddenDirsScroll contentSize]; ms = [dirsMatrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [dirsMatrix setCellSize: ms]; [hiddenDirsScroll setDocumentView: dirsMatrix]; [dirsMatrix addColumn]; for (i = 0; i < [hiddenPaths count]; ++i) { id cell; if (i != 0) { [dirsMatrix insertRow: i]; } cell = [dirsMatrix cellAtRow: i column: 0]; [cell setStringValue: [hiddenPaths objectAtIndex: i]]; [cell setLeaf: YES]; } [dirsMatrix sizeToCells]; } else { dirsMatrix = nil; } [setDirButt setEnabled: NO]; /* Internationalization */ { NSInteger tabindex; NSTabViewItem *item; tabindex = [tabView indexOfTabViewItemWithIdentifier: @"Files"]; item = [tabView tabViewItemAtIndex: tabindex]; [item setLabel: NSLocalizedString(@"Files", @"")]; tabindex = [tabView indexOfTabViewItemWithIdentifier: @"Folders"]; item = [tabView tabViewItemAtIndex: tabindex]; [item setLabel: NSLocalizedString(@"Folders", @"")]; [setButt setTitle: NSLocalizedString(@"Activate changes", @"")]; [loadButt setTitle: NSLocalizedString(@"Load", @"")]; [hiddenlabel setStringValue: NSLocalizedString(@"Hidden files", @"")]; [shownlabel setStringValue: NSLocalizedString(@"Shown files", @"")]; [labelinfo setStringValue: NSLocalizedString(@"Select and move the files to hide or to show", @"")]; [hiddenDirslabel setStringValue: NSLocalizedString(@"Hidden directories", @"")]; [addDirButt setTitle: NSLocalizedString(@"Add", @"")]; [removeDirButt setTitle: NSLocalizedString(@"Remove", @"")]; [setDirButt setTitle: NSLocalizedString(@"Activate changes", @"")]; } } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Hidden Files", @""); } - (void)selectionChanged:(NSNotification *)n { NSArray *selection; FSNode *node; NSImage *icon; selection = [gw selectedPaths]; node = [FSNode nodeWithPath: [selection objectAtIndex: 0]]; if ([selection count] > 1) { node = [FSNode nodeWithPath: [node parentPath]]; } else { if ([node isDirectory] == NO) { node = [FSNode nodeWithPath: [node parentPath]]; } else if ([node isPackage]) { node = [FSNode nodeWithPath: [node parentPath]]; } } ASSIGN (currentNode, node); icon = [[FSNodeRep sharedInstance] iconOfSize: ICON_SIZE forNode: currentNode]; [iconView setImage: icon]; [pathField setStringValue: [currentNode name]]; [self clearAll]; [prefbox setNeedsDisplay: YES]; } - (void)clearAll { NSSize cs, ms; if (leftMatrix) { [leftMatrix removeFromSuperview]; [leftScroll setDocumentView: nil]; DESTROY (leftMatrix); } leftMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSListModeMatrix prototype: cellPrototipe numberOfRows: 0 numberOfColumns: 0]; [leftMatrix setIntercellSpacing: NSZeroSize]; [leftMatrix setCellSize: NSMakeSize(130, LINEH)]; [leftMatrix setAutoscroll: YES]; [leftMatrix setAllowsEmptySelection: YES]; cs = [leftScroll contentSize]; ms = [leftMatrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [leftMatrix setCellSize: ms]; [leftScroll setDocumentView: leftMatrix]; if (rightMatrix) { [rightMatrix removeFromSuperview]; [rightScroll setDocumentView: nil]; DESTROY (rightMatrix); } rightMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSListModeMatrix prototype: cellPrototipe numberOfRows: 0 numberOfColumns: 0]; [rightMatrix setIntercellSpacing: NSZeroSize]; [rightMatrix setCellSize: NSMakeSize(130, LINEH)]; [rightMatrix setAutoscroll: YES]; [rightMatrix setAllowsEmptySelection: YES]; cs = [rightScroll contentSize]; ms = [rightMatrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [rightMatrix setCellSize: ms]; [rightScroll setDocumentView: rightMatrix]; [setButt setEnabled: NO]; } - (IBAction)loadContents:(id)sender { NSArray *subNodes; NSMutableArray *hiddenFiles; BOOL hideSysFiles; NSString *h; NSUInteger i, count; [self clearAll]; subNodes = [currentNode subNodes]; h = [[currentNode path] stringByAppendingPathComponent: @".hidden"]; if ([fm fileExistsAtPath: h]) { h = [NSString stringWithContentsOfFile: h]; hiddenFiles = [[h componentsSeparatedByString: @"\n"] mutableCopy]; count = [hiddenFiles count]; for (i = 0; i < count; i++) { NSString *s = [hiddenFiles objectAtIndex: i]; if ([s length] == 0) { [hiddenFiles removeObject: s]; count--; i--; } } } else { hiddenFiles = nil; } hideSysFiles = [[FSNodeRep sharedInstance] hideSysFiles]; if (hiddenFiles != nil || hideSysFiles) { NSMutableArray *mutableNodes = AUTORELEASE ([subNodes mutableCopy]); if (hiddenFiles) { NSUInteger count = [mutableNodes count]; for (i = 0; i < count; i++) { FSNode *node = [mutableNodes objectAtIndex: i]; if ([hiddenFiles containsObject: [node name]]) { [mutableNodes removeObject: node]; count--; i--; } } } if (hideSysFiles) { int j = [mutableNodes count] - 1; while (j >= 0) { NSString *file = [(FSNode *)[mutableNodes objectAtIndex: j] name]; if ([file hasPrefix: @"."]) { [mutableNodes removeObjectAtIndex: j]; } j--; } } subNodes = mutableNodes; } count = [subNodes count]; if (count == 0) { TEST_RELEASE (hiddenFiles); return; } [rightMatrix addColumn]; for (i = 0; i < count; ++i) { id cell; if (i != 0) { [rightMatrix insertRow: i]; } cell = [rightMatrix cellAtRow: i column: 0]; [cell setStringValue: [(FSNode *)[subNodes objectAtIndex: i] name]]; [cell setLeaf: YES]; } [rightMatrix sizeToCells]; if (hiddenFiles != nil) { count = [hiddenFiles count]; if (count == 0) { TEST_RELEASE (hiddenFiles); return; } [leftMatrix addColumn]; for (i = 0; i < count; ++i) { id cell; if (i != 0) { [leftMatrix insertRow: i]; } cell = [leftMatrix cellAtRow: i column: 0]; [cell setStringValue: [hiddenFiles objectAtIndex: i]]; [cell setLeaf: YES]; } [leftMatrix sizeToCells]; } TEST_RELEASE (hiddenFiles); } - (IBAction)moveToHidden:(id)sender { NSArray *cells = [rightMatrix selectedCells]; if (cells) { NSMutableArray *names = [NSMutableArray arrayWithCapacity: 1]; NSUInteger i; for (i = 0; i < [cells count]; i++) { NSString *name = [[cells objectAtIndex: i] stringValue]; [names addObject: name]; } [self removeCellsWithNames: names inMatrix: rightMatrix]; [self addCellsWithNames: names inMatrix: leftMatrix]; [setButt setEnabled: YES]; } } - (IBAction)moveToShown:(id)sender { NSArray *cells = [leftMatrix selectedCells]; if (cells) { NSMutableArray *names = [NSMutableArray arrayWithCapacity: 1]; NSUInteger i; for (i = 0; i < [cells count]; i++) { NSString *name = [[cells objectAtIndex: i] stringValue]; [names addObject: name]; } [self removeCellsWithNames: names inMatrix: leftMatrix]; [self addCellsWithNames: names inMatrix: rightMatrix]; [setButt setEnabled: YES]; } } - (IBAction)activateChanges:(id)sender { if ([currentNode isWritable] == NO) { NSString *message = NSLocalizedString(@"You have not write permission\nfor",""); message = [message stringByAppendingString: [currentNode name]]; NSRunAlertPanel(NSLocalizedString(@"Error", @""), message, NSLocalizedString(@"Continue", @""), nil, nil); return; } else { NSString *base = [currentNode path]; NSMutableArray *paths = [NSMutableArray array]; NSArray *cells = [leftMatrix cells]; if (cells) { NSMutableArray *names; NSString *hconts; NSString *h; NSUInteger i; names = [NSMutableArray arrayWithCapacity: 1]; for (i = 0; i < [cells count]; i++) { id cell = [cells objectAtIndex: i]; NSString *name = [cell stringValue]; [names addObject: name]; [paths addObject: [base stringByAppendingPathComponent: name]]; } hconts = [names componentsJoinedByString: @"\n"]; h = [[currentNode path] stringByAppendingPathComponent: @".hidden"]; [hconts writeToFile: h atomically: YES]; [gw hiddenFilesDidChange: paths]; [setButt setEnabled: NO]; } } } - (IBAction)addDir:(id)sender { NSOpenPanel *openPanel; NSString *hidePath; NSInteger result; openPanel = [NSOpenPanel openPanel]; [openPanel setTitle: _(@"Hide")]; [openPanel setAllowsMultipleSelection: NO]; [openPanel setCanChooseFiles: NO]; [openPanel setCanChooseDirectories: YES]; result = [openPanel runModalForDirectory: path_separator() file: nil types: nil]; if(result != NSOKButton) return; hidePath = [NSString stringWithString: [openPanel filename]]; if ([hiddenPaths containsObject: hidePath] == NO) { NSSize cs, ms; NSUInteger i; [hiddenPaths addObject: hidePath]; if (dirsMatrix) { [dirsMatrix removeFromSuperview]; [hiddenDirsScroll setDocumentView: nil]; DESTROY (dirsMatrix); } dirsMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(0, 0, 100, 100) mode: NSListModeMatrix prototype: cellPrototipe numberOfRows: 0 numberOfColumns: 0]; [dirsMatrix setIntercellSpacing: NSZeroSize]; [dirsMatrix setCellSize: NSMakeSize(130, LINEH)]; [dirsMatrix setAutoscroll: YES]; [dirsMatrix setAllowsEmptySelection: YES]; cs = [hiddenDirsScroll contentSize]; ms = [dirsMatrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [dirsMatrix setCellSize: ms]; [hiddenDirsScroll setDocumentView: dirsMatrix]; [dirsMatrix addColumn]; for (i = 0; i < [hiddenPaths count]; ++i) { id cell; if (i != 0) { [dirsMatrix insertRow: i]; } cell = [dirsMatrix cellAtRow: i column: 0]; [cell setStringValue: [hiddenPaths objectAtIndex: i]]; [cell setLeaf: YES]; } [dirsMatrix sizeToCells]; [setDirButt setEnabled: YES]; } } - (IBAction)removeDir:(id)sender { NSArray *cells = [dirsMatrix selectedCells]; if (cells) { NSMutableArray *paths = [NSMutableArray arrayWithCapacity: 1]; NSUInteger i; for (i = 0; i < [cells count]; i++) { NSString *path = [[cells objectAtIndex: i] stringValue]; [hiddenPaths removeObject: path]; [paths addObject: path]; } [self removeCellsWithNames: paths inMatrix: dirsMatrix]; [setDirButt setEnabled: YES]; } } - (IBAction)activateDirChanges:(id)sender { [[FSNodeRep sharedInstance] setHiddenPaths: hiddenPaths]; [gw hiddenFilesDidChange: hiddenPaths]; [setDirButt setEnabled: NO]; } - (void)addCellsWithNames:(NSArray *)names inMatrix:(NSMatrix *)matrix { id cell; NSSize cs, ms; NSUInteger i; [matrix setIntercellSpacing: NSMakeSize(0, 0)]; for (i = 0; i < [names count]; i++) { [matrix addRow]; cell = [matrix cellAtRow: [[matrix cells] count] -1 column: 0]; [cell setStringValue: [names objectAtIndex: i]]; [cell setLeaf: YES]; } if (matrix == leftMatrix) { cs = [leftScroll contentSize]; } else { cs = [rightScroll contentSize]; } ms = [matrix cellSize]; ms.width = cs.width; CHECKSIZE (ms); [matrix setCellSize: ms]; [matrix sizeToCells]; [self selectCellsWithNames: names inMatrix: matrix]; [matrix setNeedsDisplay: YES]; } - (void)removeCellsWithNames:(NSArray *)names inMatrix:(NSMatrix *)matrix { id cell; NSUInteger i; for (i = 0; i < [names count]; i++) { cell = [self cellWithTitle: [names objectAtIndex: i] inMatrix: matrix]; if (cell != nil) { NSInteger row, col; [matrix getRow: &row column: &col ofCell: cell]; [matrix removeRow: row]; } } [matrix sizeToCells]; [matrix setNeedsDisplay: YES]; } - (void)selectCellsWithNames:(NSArray *)names inMatrix:(NSMatrix *)matrix { NSUInteger i, count; NSInteger max; NSInteger *selectedIndexes = NULL; NSMutableArray *cells; cells = [NSMutableArray arrayWithCapacity: 1]; for (i = 0; i < [names count]; i++) { NSString *name = [names objectAtIndex: i]; id cell = [self cellWithTitle: name inMatrix: matrix]; if (cell) { [cells addObject: cell]; } } count = [cells count]; max = [matrix numberOfRows]; selectedIndexes = NSZoneMalloc(NSDefaultMallocZone(), sizeof(NSInteger) * count); for (i = 0; i < count; i++) { NSCell *cell; NSInteger sRow, sColumn; cell = [cells objectAtIndex: i]; [matrix getRow: &sRow column: &sColumn ofCell: cell]; selectedIndexes[i] = sRow; } for (i = 0; i < count; i++) { if (selectedIndexes[i] > max) { break; } [matrix selectCellAtRow: selectedIndexes[i] column: 0]; } NSZoneFree(NSDefaultMallocZone(), selectedIndexes); } - (id)cellWithTitle:(NSString *)title inMatrix:(NSMatrix *)matrix { NSArray *cells; id cell; NSUInteger i; cells = [matrix cells]; if (cells) { for (i = 0; i < [cells count]; i++) { cell = [cells objectAtIndex: i]; if ([[cell stringValue] isEqualToString: title]) { return cell; } } } return nil; } @end gworkspace-1.1.0/GWorkspace/Preferences/HistoryPref.h0000644000175000001440000000241414751213523022060 0ustar multixusers/* HistoryPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: September 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef HISTORY_PREF_H #define HISTORY_PREF_H #include #include "PrefProtocol.h" @interface HistoryPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id cacheBox; IBOutlet id cacheField; IBOutlet id stepper; id gworkspace; } - (IBAction)stepperAction:(id)sender; @end #endif // HISTORY_PREF_H gworkspace-1.1.0/GWorkspace/Preferences/HistoryPref.m0000644000175000001440000000452114751213523022066 0ustar multixusers/* HistoryPref.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: September 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNodeRep.h" #import "HistoryPref.h" #import "GWorkspace.h" #define CACHE_MAX 10000 #define CACHE_MIN 4 static NSString *nibName = @"HistoryPref"; @implementation HistoryPref - (void)dealloc { RELEASE (prefbox); [super dealloc]; } - (id)init { self = [super init]; if(self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { int cachemax; RETAIN (prefbox); RELEASE (win); gworkspace = [GWorkspace gworkspace]; [stepper setMaxValue: CACHE_MAX]; [stepper setMinValue: CACHE_MIN]; [stepper setIncrement: 1]; [stepper setAutorepeat: YES]; [stepper setValueWraps: NO]; cachemax = [gworkspace maxHistoryCache]; [cacheField setStringValue: [NSString stringWithFormat: @"%i", cachemax]]; [stepper setDoubleValue: cachemax]; /* Internationalization */ [cacheBox setTitle: NSLocalizedString(@"Number of saved paths", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"History", @""); } - (IBAction)stepperAction:(id)sender; { int sv = floor([sender doubleValue]); [cacheField setStringValue: [NSString stringWithFormat: @"%i", sv]]; [gworkspace setMaxHistoryCache: sv]; } @end gworkspace-1.1.0/GWorkspace/Preferences/IconsPref.h0000644000175000001440000000240314751213523021470 0ustar multixusers/* IconsPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef ICONS_PREF_H #define ICONS_PREF_H #include #include "PrefProtocol.h" @class GWorkspace; @interface IconsPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id thumbbox; IBOutlet id thumbCheck; GWorkspace *gw; } - (IBAction)setUnsetThumbnails:(id)sender; @end #endif // ICONS_PREF_H gworkspace-1.1.0/GWorkspace/Preferences/IconsPref.m0000644000175000001440000000440214751213523021476 0ustar multixusers/* IconsPref.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "IconsPref.h" #import "GWorkspace.h" static NSString *nibName = @"IconsPref"; @implementation IconsPref - (void)dealloc { RELEASE (prefbox); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; RETAIN (prefbox); RELEASE (win); gw = [GWorkspace gworkspace]; [thumbCheck setState: [defaults boolForKey: @"usesthumbnails"] ? NSOnState : NSOffState]; /* Internationalization */ [thumbbox setTitle: NSLocalizedString(@"Thumbnails", @"")]; [thumbCheck setTitle: NSLocalizedString(@"use thumbnails", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Icons", @""); } - (IBAction)setUnsetThumbnails:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; unsigned int state = [sender state]; [defaults setBool: ((state == NSOnState) ? YES : NO) forKey: @"usesthumbnails"]; [defaults synchronize]; [gw setUsesThumbnails: ((state == NSOnState) ? YES : NO)]; } @end gworkspace-1.1.0/GWorkspace/Preferences/OperationPrefs.h0000644000175000001440000000307214751213523022543 0ustar multixusers/* OperationPrefs.h * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep Operation application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef OPERATION_PREFS_H #define OPERATION_PREFS_H #import #import "PrefProtocol.h" @interface OperationPrefs : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id tabView; NSTabViewItem *statusItem; IBOutlet id statusBox; IBOutlet id statChooseButt; IBOutlet id statuslabel; IBOutlet id statusinfo1; IBOutlet id statusinfo2; NSTabViewItem *confirmItem; IBOutlet id confirmBox; IBOutlet id confMatrix; IBOutlet id labelinfo1; IBOutlet id labelinfo2; BOOL showstatus; } - (IBAction)setUnsetStatWin:(id)sender; - (IBAction)setUnsetFileOp:(id)sender; @end #endif // OPERATION_PREFS_H gworkspace-1.1.0/GWorkspace/Preferences/OperationPrefs.m0000644000175000001440000001325214751213523022551 0ustar multixusers/* OperationPrefs.m * * Copyright (C) 2004-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep Operation application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "OperationPrefs.h" static NSString *nibName = @"OperationPrefs"; #define MOVEOP 0 #define COPYOP 1 #define LINKOP 2 #define RECYCLEOP 3 #define DUPLICATEOP 4 #define DESTROYOP 5 @implementation OperationPrefs - (void)dealloc { RELEASE (prefbox); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *cells; NSString *confirmString; id butt; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (prefbox); RELEASE (win); statusItem = [tabView tabViewItemAtIndex: 0]; [statusItem setLabel: NSLocalizedString(@"Status Window", @"")]; confirmItem = [tabView tabViewItemAtIndex: 1]; [confirmItem setLabel: NSLocalizedString(@"Confirmation", @"")]; showstatus = (![defaults boolForKey: @"fopstatusnotshown"]); [statChooseButt setState: (showstatus ? NSOnState : NSOffState)]; cells = [confMatrix cells]; butt = [cells objectAtIndex: MOVEOP]; confirmString = [NSWorkspaceMoveOperation stringByAppendingString: @"Confirm"]; [butt setState: !([defaults boolForKey: confirmString])]; butt = [cells objectAtIndex: COPYOP]; confirmString = [NSWorkspaceCopyOperation stringByAppendingString: @"Confirm"]; [butt setState: !([defaults boolForKey: confirmString])]; butt = [cells objectAtIndex: LINKOP]; confirmString = [NSWorkspaceLinkOperation stringByAppendingString: @"Confirm"]; [butt setState: !([defaults boolForKey: confirmString])]; butt = [cells objectAtIndex: RECYCLEOP]; confirmString = [NSWorkspaceRecycleOperation stringByAppendingString: @"Confirm"]; [butt setState: !([defaults boolForKey: confirmString])]; butt = [cells objectAtIndex: DUPLICATEOP]; confirmString = [NSWorkspaceDuplicateOperation stringByAppendingString: @"Confirm"]; [butt setState: !([defaults boolForKey: confirmString])]; butt = [cells objectAtIndex: DESTROYOP]; confirmString = [NSWorkspaceDestroyOperation stringByAppendingString: @"Confirm"]; [butt setState: !([defaults boolForKey: confirmString])]; /* Internationalization */ [win setTitle: NSLocalizedString(@"Operation Preferences", @"")]; [statusBox setTitle: NSLocalizedString(@"Status Window", @"")]; [statuslabel setStringValue: NSLocalizedString(@"Show status window", @"")]; [statusinfo1 setStringValue: NSLocalizedString(@"Check this option to show a status window", @"")]; [statusinfo2 setStringValue: NSLocalizedString(@"during the file operations", @"")]; [confirmBox setTitle: NSLocalizedString(@"Confirmation", @"")]; [[confMatrix cellAtRow:0 column:0] setTitle: NSLocalizedString(@"Move", @"")]; [[confMatrix cellAtRow:1 column:0] setTitle: NSLocalizedString(@"Copy", @"")]; [[confMatrix cellAtRow:2 column:0] setTitle: NSLocalizedString(@"Link", @"")]; [[confMatrix cellAtRow:3 column:0] setTitle: NSLocalizedString(@"Recycler", @"")]; [[confMatrix cellAtRow:4 column:0] setTitle: NSLocalizedString(@"Duplicate", @"")]; [[confMatrix cellAtRow:5 column:0] setTitle: NSLocalizedString(@"Destroy", @"")]; [labelinfo1 setStringValue: NSLocalizedString(@"Uncheck the buttons to allow automatic confirmation", @"")]; [labelinfo2 setStringValue: NSLocalizedString(@"of file operations", @"")]; } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"File Operations", @""); } - (void)setUnsetStatWin:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; showstatus = ([sender state] == NSOnState) ? YES : NO; [defaults setBool: !showstatus forKey: @"fopstatusnotshown"]; [defaults synchronize]; } - (void)setUnsetFileOp:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *cells = [confMatrix cells]; NSString *confirmString; #define CHECK_CONFIRM(x, s) \ confirmString = [s stringByAppendingString: @"Confirm"]; \ [defaults setBool: (([[cells objectAtIndex: x] state] == NSOnState) ? NO : YES) \ forKey: confirmString] CHECK_CONFIRM (MOVEOP, NSWorkspaceMoveOperation); CHECK_CONFIRM (COPYOP, NSWorkspaceCopyOperation); CHECK_CONFIRM (LINKOP, NSWorkspaceLinkOperation); CHECK_CONFIRM (RECYCLEOP, NSWorkspaceRecycleOperation); CHECK_CONFIRM (RECYCLEOP, @"GWorkspaceRecycleOutOperation"); CHECK_CONFIRM (RECYCLEOP, @"GWorkspaceEmptyRecyclerOperation"); CHECK_CONFIRM (DUPLICATEOP, NSWorkspaceDuplicateOperation); CHECK_CONFIRM (DESTROYOP, NSWorkspaceDestroyOperation); [defaults synchronize]; } @end gworkspace-1.1.0/GWorkspace/Preferences/PrefController.h0000644000175000001440000000274114751213523022545 0ustar multixusers/* PrefController.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef PREF_CONTROLLER_H #define PREF_CONTROLLER_H #include #include "PrefProtocol.h" @class NSMutableArray; @class NSView; @interface PrefController : NSObject { IBOutlet id win; IBOutlet id topBox; IBOutlet NSPopUpButton *popUp; IBOutlet id viewsBox; NSMutableArray *preferences; id currentPref; } - (void)activate; - (void)addPreference:(id )anobject; - (void)removePreference:(id )anobject; - (IBAction)activatePrefView:(id)sender; - (void)updateDefaults; - (id)myWin; @end #endif // PREF_CONTROLLER_H gworkspace-1.1.0/GWorkspace/Preferences/PrefController.m0000644000175000001440000000770214751213523022554 0ustar multixusers/* PrefController.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "PrefController.h" #import "DefEditorPref.h" #import "XTermPref.h" #import "DefSortOrderPref.h" #import "IconsPref.h" #import "HiddenFilesPref.h" #import "HistoryPref.h" #import "BrowserViewerPref.h" #import "DesktopPref.h" #import "OperationPrefs.h" #import "GWorkspace.h" static NSString *nibName = @"PrefWindow"; @implementation PrefController - (void)dealloc { RELEASE (preferences); RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if(self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"Preferences: failed to load %@!", nibName); } } return self; } - (void)awakeFromNib { #define ADD_PREF_VIEW(c) \ currentPref = (id)[[c alloc] init]; \ [popUp addItemWithTitle: [currentPref prefName]]; \ [preferences addObject: currentPref]; \ RELEASE (currentPref) if ([win setFrameUsingName: @"preferencesWin"] == NO) { [win setFrame: NSMakeRect(100, 100, 396, 310) display: NO]; } [win setDelegate: self]; preferences = [[NSMutableArray alloc] initWithCapacity: 1]; while ([[popUp itemArray] count] > 0) { [popUp removeItemAtIndex: 0]; } ADD_PREF_VIEW ([DefEditorPref class]); ADD_PREF_VIEW ([XTermPref class]); ADD_PREF_VIEW ([BrowserViewerPref class]); ADD_PREF_VIEW ([DefSortOrderPref class]); ADD_PREF_VIEW ([IconsPref class]); ADD_PREF_VIEW ([HiddenFilesPref class]); ADD_PREF_VIEW ([DesktopPref class]); ADD_PREF_VIEW ([OperationPrefs class]); ADD_PREF_VIEW ([HistoryPref class]); currentPref = nil; [popUp selectItemAtIndex: 0]; [self activatePrefView: popUp]; /* Internationalization */ [win setTitle: NSLocalizedString(@"GWorkspace Preferences", @"")]; } - (void)activate { [win makeKeyAndOrderFront: nil]; } - (void)addPreference:(id )anobject { [preferences addObject: anobject]; [popUp addItemWithTitle: [anobject prefName]]; } - (void)removePreference:(id )anobject { NSString *prefName = [anobject prefName]; int i = 0; for (i = 0; i < [preferences count]; i++) { id pref = [preferences objectAtIndex: i]; if ([[pref prefName] isEqual: prefName]) { [preferences removeObject: pref]; break; } } [popUp removeItemWithTitle: prefName]; } - (IBAction)activatePrefView:(id)sender { NSString *prefName = [sender titleOfSelectedItem]; int i; if(currentPref != nil) { if([[currentPref prefName] isEqualToString: prefName]) { return; } [[currentPref prefView] removeFromSuperview]; } for (i = 0; i < [preferences count]; i++) { id pref = [preferences objectAtIndex: i]; if([[pref prefName] isEqualToString: prefName]) { currentPref = pref; break; } } [viewsBox addSubview: [currentPref prefView]]; } - (void)updateDefaults { [win saveFrameUsingName: @"preferencesWin"]; } - (id)myWin { return win; } - (BOOL)windowShouldClose:(id)sender { [self updateDefaults]; return YES; } @end gworkspace-1.1.0/GWorkspace/Preferences/PrefProtocol.h0000644000175000001440000000206114751213523022216 0ustar multixusers/* PrefProtocol.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef PREF_PROTOCOL_H #define PREF_PROTOCOL_H @protocol PrefProtocol - (NSView *)prefView; - (NSString *)prefName; @end #endif // PREF_PROTOCOL_H gworkspace-1.1.0/GWorkspace/Preferences/XTermPref.h0000644000175000001440000000277614751213523021471 0ustar multixusers/* XTermPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef XTERM_PREF_H #define XTERM_PREF_H #include #include "PrefProtocol.h" @class GWorkspace; @interface XTermPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id serviceBox; IBOutlet id serviceCheck; IBOutlet id fieldsBox; IBOutlet id xtermLabel; IBOutlet id xtermField; IBOutlet id argsLabel; IBOutlet id argsField; IBOutlet id setButt; BOOL useService; NSString *xterm; NSString *xtermArgs; GWorkspace *gw; } - (IBAction)setUseService:(id)sender; - (IBAction)setXTerm:(id)sender; @end #endif // XTERM_PREF_H gworkspace-1.1.0/GWorkspace/Preferences/XTermPref.m0000644000175000001440000001047714751213523021473 0ustar multixusers/* XTermPref.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "XTermPref.h" #import "GWorkspace.h" static NSString *nibName = @"XTermPref"; @implementation XTermPref - (void)dealloc { RELEASE (prefbox); RELEASE (xterm); RELEASE (xtermArgs); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; RETAIN (prefbox); RELEASE (win); useService = [defaults boolForKey: @"terminal_services"]; if (useService) { [xtermField setSelectable: NO]; [argsField setSelectable: NO]; [setButt setEnabled: NO]; [serviceCheck setState: NSOnState]; } else { [serviceCheck setState: NSOffState]; } entry = [defaults stringForKey: @"defxterm"]; if (entry) { ASSIGN (xterm, entry); [xtermField setStringValue: xterm]; } entry = [defaults stringForKey: @"defaultxtermargs"]; if (entry) { ASSIGN (xtermArgs, entry); [argsField setStringValue: xtermArgs]; } gw = [GWorkspace gworkspace]; /* Internationalization */ [serviceBox setTitle: NSLocalizedString(@"Terminal.app", @"")]; [serviceCheck setTitle: NSLocalizedString(@"Use Terminal service", @"")]; [xtermLabel setStringValue: NSLocalizedString(@"xterm", @"")]; [argsLabel setStringValue: NSLocalizedString(@"arguments", @"")]; [setButt setTitle: NSLocalizedString(@"Set", @"")]; [fieldsBox setTitle: NSLocalizedString(@"Terminal", @"")]; } } return self; } - (NSView *)prefView { return prefbox; } - (NSString *)prefName { return NSLocalizedString(@"Terminal", @""); } - (IBAction)setUseService:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; useService = ([sender state] == NSOnState); if (useService) { [xtermField setSelectable: NO]; [argsField setSelectable: NO]; [setButt setEnabled: NO]; } else { [xtermField setSelectable: YES]; [argsField setSelectable: YES]; [setButt setEnabled: YES]; } [defaults setBool: useService forKey: @"terminal_services"]; [gw setUseTerminalService: useService]; } - (IBAction)setXTerm:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *xt = [xtermField stringValue]; NSString *xtargs = [argsField stringValue]; int lngt; if ([xterm isEqual: xt] && [xtermArgs isEqual: xtargs]) { return; } lngt = [xt length]; if (lngt) { BOOL xtok = YES; int i; for (i = 0; i < lngt; i++) { unichar c = [xt characterAtIndex: i]; if (c == ' ') { xtok = NO; } } if (xtok) { lngt = [xtargs length]; xtok = (lngt == 0) ? YES : NO; for (i = 0; i < lngt; i++) { unichar c = [xtargs characterAtIndex: i]; if (c != ' ') { xtok = YES; break; } } } if (xtok) { ASSIGN (xterm, xt); ASSIGN (xtermArgs, xtargs); [defaults setObject: xterm forKey: @"defxterm"]; [defaults setObject: xtermArgs forKey: @"defaultxtermargs"]; [defaults synchronize]; [gw changeDefaultXTerm: xterm arguments: xtermArgs]; } } } @end gworkspace-1.1.0/GWorkspace/Resources/0000755000175000001440000000000013633710512017137 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/BrasilPortuguese.lproj/0000755000175000001440000000000014753220701023563 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/BrasilPortuguese.lproj/Localizable.strings0000644000175000001440000002162214753220701027422 0ustar multixusers/* Tradução feita por Tiago Ribeiro */ /* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Painel de Informações..."; "Preferences..." = "Preferências..."; "Help..." = "Ajuda..."; "File" = "Arquivo"; "Open" = "Abrir"; "Open as Folder" = "Abrir como Pasta"; "Edit File" = "Editar Arquivo"; "New Folder" = "Nova Pasta"; "New File" = "Novo Arquivo"; "Duplicate" = "Duplicar"; "Destroy" = "Apagar"; "Empty Recycler" = "Esvaziar Lixo"; "Edit" = "Editar"; "Cut" = "Cortar"; "Copy" = "Copiar"; "Paste" = "Colar"; "Select All" = "Selecionar Tudo"; "View" = "Ver"; "Browser" = "Navegador"; "Icon" = "Icones"; "Tools" = "Ferramentas"; "Viewer" = "Visualizador"; "Inspectors" = "Inspetores"; "Show Inspectors" = "Mostrar Inspetores"; "Attributes" = "Atributos"; "Contents" = "Conteúdo"; "Tools" = "Ferramentas"; "Permissions" = "Permissões"; "Finder" = "Buscador"; "Processes..." = "Processos..."; "Fiend" = "Fiend"; "Show Fiend" = "Mostrar Fiend"; /* R// Arrumar esto */ "Hide Fiend" = "Ocultar Fiend"; "Add Layer..." = "Adicionar Camada..."; "Remove Current Layer" = "Remover Camada Atual"; "Rename Current Layer" = "Renomear Camada Atual"; "Layers" = "Camadas"; "DeskTop Shelf" = "DeskTop Shelf"; "XTerm" = "XTerm"; "Windows" = "Janelas"; "Arrange in Front" = "Organizar à Frente"; "Miniaturize Window" = "Miniaturizar Janela"; "Close Window" = "Fechar Janela"; "Services" = "Serviços"; "Hide" = "Ocultar"; "Quit" = "Encerrar"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Gerenciador de DeskTop GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "Acesse https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Distribuido segundo a Licença Pública Geral GNU 2.0"; "Error" = "Erro"; "You have not write permission\nfor" = "Não há permissões de escrita\npara"; /* R// ? */ "Continue" = "Continuar"; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Cancelar"; "Move" = "Mover"; "Move from: " = "Mover de: "; "\nto: " = "\npara: "; "Copy" = "Copiar"; "Copy from: " = "Copiar de: "; "Link" = "Vincular"; "Link " = "Vincular "; "Delete" = "Apagar"; "Delete the selected objects?" = "Apagar os objetos selecionados?"; "Duplicate" = "Duplicar"; "Duplicate the selected objects?" = "Duplicar os objetos selecionados?"; "From:" = "De:"; "To:" = "Para:"; "In:" = "Em:"; "Stop" = "Parar"; "Pause" = "Pausar"; "Moving" = "Movendo"; "Copying" = "Copiando"; "Linking" = "Vinculando"; "Duplicating" = "Duplicando"; "Destroying" = "Apagando"; "File Operation Completed" = "Operação de Arquivos Completada"; "Backgrounder connection died!" = "Conexção de segundo plano interrompida"; /* R// Jarl */ "Some items have the same name;\ndo you want to substitute them?" = "Alguns ítens têm o mesmo\nnome; Deseja substituí-los?"; "Error" = "Erro"; "File Operation Error!" = "Erro na Operação de Arquivos!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Não há permissões de escrita\npara"; "The name " = "O nome "; " is already in use!" = " já está sendo usado!"; "Cannot rename " = "Não é possível renomear "; "Invalid char in name" = "Caractere inválido no nome"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Itens"; /* InspectorsWin.m */ "Attributes" = "Atributos"; "Contents" = "Conteúdo"; "Tools" = "Ferramentas"; "Access Control" = "Controle de Acesso"; /* AttributesPanel.m */ "Attributes" = "Atributos"; "Attributes Inspector" = "Inspetor de Atributos"; "Path:" = "Caminho:"; "Link To:" = "Vincular a:"; "Size:" = "Tamanho:"; "Owner:" = "Proprietário:"; "Group:" = "Grupo:"; "Changed" = "Mudado"; "Revert" = "Reverter"; "OK" = "OK"; /* ContentsPanel.m */ "Contents" = "Conteúdo"; "Contents Inspector" = "Inspetor de Conteúdo"; "No Contents Inspector" = "Não há Inspetor de Conteúdo"; "No Contents Inspector\nFor Multiple Selection" = "Não há Inspetor de\nConteúdo para\nmúltiplas seleções"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "O método de ordenação se\naplica ao conteúdo da\npasta selecionada, e não\nà sua pasta mãe"; "Sort by" = "Ordenar por"; "Name" = "Nome"; "Type" = "Tipo"; "Date" = "Data"; "Size" = "Tamanho"; "Owner" = "Proprietário"; "Folder Inspector" = "Inspetor de Pastas"; /* ImageViewer.m */ "Image Inspector" = "Inspetor de Imagens"; /* AppViewer.m */ "Open these kinds of documents:" = "Abrir estes tipos de documentos:"; "Invalid Contents" = "Conteúdo Inválido"; "App Inspector" = "Inspetor de Aplicações"; /* PermissionsPanel.m */ "UNIX Permissions" = "Permissões UNIX"; "Access Control" = "Controle de Acesso"; "Also apply to files inside selection" = "Aplicar também aos arquivos da seleção"; /* ToolsPanel.m */ "Tools" = "Ferramentas"; "Tools Inspector" = "Inspetor de Ferramentas"; "No Tools Inspector" = "Não há Inspetor de Ferramentas"; "Set Default" = "Configurar como Padrão"; /* AppsView.m */ "Double-click to open selected document(s)" = "Duplo-clique para abrir documentos selecionados"; "Default:" = "Padrão:"; "Path:" = "Caminho:"; "Click 'Set Default' to set default application\nfor all documents with this extension" ="Clique em 'Configurar como Padrão' para configurar a\naplicação a ser usada para todos\nos documentos com esta extensão"; /* PermsBox.m */ "Permissions" = "Permissões"; "Read" = "Leitura"; "Write" = "Escrita"; "Execute" = "Execução"; "Owner" = "Proprietário"; "Group" = "Grupo"; "Other" = "Outros"; /* ----------------------- Processes strings --------------------------- */ /* Processes.m */ "Processes" = "Processos"; "No Background Process" = "Não há Processos en Segundo Plano"; "Kill" = "Matar"; "Path: " = "Caminho: "; "Status: " = "Estado: "; /* ProcsView.m */ "Applications" = "Aplicações"; "Background" = "Segundo Plano"; /* R// revisar */ /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Buscador"; "Find items with names that match" = "Buscar ítens com nomes que combinem"; "Find items with contents that match" = "Buscar ítens com conteúdo que combine"; "No selection!" = "Não há nenhuma seleção!"; "No arguments!" = "Não há argumentos!"; /* ----------------------- Fiend strings --------------------------- *\ /* Fiend.m */ "New Layer" = "Nova Camada"; "A layer with this name is already present!" = "Já há uma camada com este nome!"; "You can't remove the last layer!" = "Não é possível remover a última camada!"; "Remove layer" = "Remover camada"; "Are you sure that you want to remove this layer?" = "Você tem certeza de que deseja remover esta camada?"; "Rename Layer" = "Renomear camada"; "You can't dock multiple paths!" = "Não é possível agrupar múltiplos caminhos!"; "This object is already present in this layer!" = "Este objeto já está nesta camada!"; /* ----------------------- Preference strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "Preferências do GWorkspace"; /* BackWinPreferences.m */ "DeskTop Shelf" = "Shelf do DeskTop"; "DeskTop Color" = "Cor do DeskTop"; "red" = "vermelho"; "green" = "verde"; "blue" = "azul"; "Set Color" = "Configurar cor"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Pressione o botão \"Configurar Imagem\" para configurar sua\nimagem de fundo. A imagem deve ter o\nmesmo tamanho que a tela."; "Set Image" = "Configurar Imagem"; "Unset Image" = "Remover Imagem"; /* DefaultXTerm.m */ "Set" = "Configurar"; /* BrowserViewsPreferences.m */ "Column Width" = "Largura das Colunas"; "Use Default Settings" = "Usar Ajustes-Padrão"; "Browser" = "Navegador"; /* FileWatchingPreferences.m */ /* timeout */ "File System Watching" = "Vigilancia do Sistema de Arquivos"; "timeout" = "timeout"; "frequency" = "frequência"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "Os valores se aplicarão aos\n novos vigilantes a partir de agora,\ne aos já existentes, a partir do primeiro timeout"; /* ShelfPreferences.m */ "Shelf" = "Shelf"; /* DefaultEditor.m */ "Default Editor" = "Editor Padrão"; "No Default Editor" = "Não há Editor Padrão"; "Choose..." = "Escolher..."; /* IconViewsPreferences.m */ "Title Width" = "Largura do Título"; "Icon View" = "Visualização por Icones"; /* OpenWithController */ "Open With" = "Open With"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; gworkspace-1.1.0/GWorkspace/Resources/Dutch.lproj/0000755000175000001440000000000014654674711021351 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Dutch.lproj/Localizable.strings0000644000175000001440000002160214654674711025206 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* Vertaling door David Bekaert david.bekaert@pandora.be * */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Info scherm..."; "Preferences..." = "Configuratie..."; "Help..." = "Help..."; "File" = "Bestand"; "Open" = "Openen"; "Open as Folder" = "Open als Map"; "Edit File" = "Edit Bestand"; "New Folder" = "Nieuwe Map"; "New File" = "Nieuw Bestand"; "Duplicate" = "Dupliceer"; "Destroy" = "Vernietig"; "Empty Recycler" = "Prullenmand Leegmaken"; "Edit" = "Bewerken"; "Cut" = "Knippen"; "Copy" = "Kopieren"; "Paste" = "Plakken"; "Select All" = "Selecteer Alles"; "View" = "Beeld"; "Browser" = "Browser"; "Icon" = "Icoon"; "Tools" = "Hulpmiddelen"; "Viewer" = "Viewer"; "Inspectors" = "Inspectors"; "Show Inspectors" = "Toon Inspectors"; "Attributes" = "Attributen"; "Contents" = "Inhoud"; "Tools" = "Hulpmiddelen"; "Permissions" = "Rechten"; "Finder" = "Zoeker"; "Processes..." = "Processen..."; "Fiend" = "Clip"; "Show Fiend" = "Toon Clip"; "Hide Fiend" = "Verberg Clip"; "Add Layer..." = "Voeg Laag Toe..."; "Remove Current Layer" = "Verwijder Huidige Laag"; "Rename Current Layer" = "Hernoem Huidige Laag"; "Layers" = "Lagen"; "DeskTop Shelf" = "Bureaublad"; "XTerm" = "XTerm"; "Windows" = "Vensters"; "Arrange in Front" = "Toon Vooraan"; "Miniaturize Window" = "Minimaliseer Venster"; "Close Window" = "Sluit Venster"; "Services" = "Services"; "Hide" = "Verberg"; "Quit" = "Afsluiten"; /* ----------------------- File Operations strings --------------------------- *\ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "Zie http://www.gnustep.it/enrico/gworkspace"; "Released under the GNU General Public License 2.0" = "Gepubliceerd onder de GNU General Public License 2.0"; "Error" = "Fout"; "You have not write permission\nfor" = "Je hebt geen schrijfrechten\nvoor"; "Continue" = "Verder"; /* FileOperation.m */ "OK" = "Ok"; "Cancel" = "Annuleren"; "Move" = "Verplaats"; "Move from: " = "Verplaats van: "; "\nto: " = "\nnaar : "; "Copy" = "Kopieer"; "Copy from: " = "Kopieer van: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Verwijder"; "Delete the selected objects?" = "Verwijder de Geselecteerde Objecten?"; "Duplicate" = "Dupliceer"; "Duplicate the selected objects?" = "Dupliceer de Geselecteerde Objecten?"; "From:" = "Van:"; "To:" = "Naar:"; "In:" = "In:"; "Stop" = "Stop"; "Pause" = "Pause"; "Moving" = "Bezig met Verplaatsen"; "Copying" = "Bezig met Kopiëren"; "Linking" = "Bezig met Linken"; "Duplicating" = "Bezig met Dupliceren"; "Destroying" = "Bezig met Verwijderen"; "File Operation Completed" = "Bestandoperatie Afgewerkt"; "Backgrounder connection died!" = "Verbinding Verbroken!"; "Some items have the same name;\ndo you want to substitute them?" = "Enkele elementen hebben dezelfde naam;\nwil je ze vervangen?"; "Error" = "Fout"; "File Operation Error!" = "Fout bij Bestandmanipulatie!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Je hebt geen schrijfrechten\nvoor"; "The name " = "De naam "; " is already in use!" = " is al in gebruik!"; "Cannot rename " = "Hernoemen mislukt "; "Invalid char in name" = "Er is een ongeldig karakter in de naam"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Items"; /* InspectorsWin.m */ "Attributes" = "Attributen"; "Contents" = "Inhoud"; "Tools" = "Hulpmiddelen"; "Access Control" = "Toegangscontrole"; /* AttributesPanel.m */ "Attributes" = "Attributen"; "Attributes Inspector" = "Attributen Inspector"; "Path:" = "Pad :"; "Link To:" = "Link Naar :"; "Size:" = "Grootte :"; "Owner:" = "Eigenaar :"; "Group:" = "Groep :"; "Changed" = "Verandert"; "Revert" = "Terug"; "OK" = "Ok"; /* ContentsPanel.m */ "Contents" = "Inhoud"; "Contents Inspector" = "Inhoud Inspector"; "No Contents Inspector" = "Geen Inhoud Inspector"; "No Contents Inspector\nFor Multiple Selection" = "Geen Inhoud Inspector\nvoor meerdere selecties"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Sorteren slaat op de \ninhoud van de Map,\nNIET op de bovenliggende Map"; "Sort by" = "Sorteer op"; "Name" = "Naam"; "Type" = "Type"; "Date" = "Datum"; "Size" = "Grootte"; "Owner" = "Eigenaar"; "Folder Inspector" = "Map Inspector"; /* ImageViewer.m */ "Image Inspector" = "Beelden Inspector"; /* AppViewer.m */ "Open these kinds of documents:" = "Open dit soort documenten:"; "Invalid Contents" = "Verkeerde Inhoud"; "App Inspector" = "Toepassing Inspector"; /* PermissionsPanel.m */ "UNIX Permissions" = "UNIX Rechten"; "Access Control" = "Toegangscontrole"; "Also apply to files inside selection" = "Pas tevens toe op geselecteerde bestanden"; /* ToolsPanel.m */ "Tools" = "Hulpmiddelen"; "Tools Inspector" = "Hulpmiddelen Inspector"; "No Tools Inspector" = "Geen Hulpmiddelen Inspector"; "Set Default" = "Zet als Standaard"; /* AppsView.m */ "Double-click to open selected document(s)" = "Dubbelklik om de geselecteerde documenten te openen"; "Default:" = "Standaard:"; "Path:" = "Pad:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Klik 'Zet Standaard' om de standaardtoepassing\nvoor alle documenten met deze extensie"; /* PermsBox.m */ "Permissions" = "Rechten"; "Read" = "Lezen"; "Write" = "Schrijven"; "Execute" = "Starten"; "Owner" = "Eigenaar"; "Group" = "Groep"; "Other" = "Andere"; /* ----------------------- Processes strings --------------------------- */ /* Processes.m */ "Processes" = "Processen"; "No Background Process" = "Geen Achtergrond Processen"; "Kill" = "Kill"; "Path: " = "Pad: "; "Status: " = "Status: "; /* ProcsView.m */ "Applications" = "Toepassingen"; "Background" = "Achtergrond"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Zoeker"; "Find items with names that match" = "Zoek items met de namen"; "Find items with contents that match" = "Zoek items met de inhoud"; "No selection!" = "Geen selectie!"; "No arguments!" = "Geen argumenten!"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Nieuwe Laag"; "A layer with this name is already present!" = "Een laag met die naam is al in gebruik!"; "You can't remove the last layer!" = "Je kan de laatste laag niet verwijderen!"; "Remove layer" = "Verwijder laag"; "Are you sure that you want to remove this layer?" = "Ben je zeker dat je deze laag wilt verwijderen?"; "Rename Layer" = "Hernoem Laag"; "You can't dock multiple paths!" = "Je kan geen meerdere paden dokken!"; "This object is already present in this layer!" = "Dit object zit al in de laag!"; /* ----------------------- Preferences strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "Configuratie van GWorkspace"; /* BackWinPreferences.m */ "DeskTop Shelf" = "Bureaublad"; "DeskTop Color" = "Kleur van Bureaublad"; "red" = "rood"; "green" = "groen"; "blue" = "blauw"; "Set Color" = "Gebruik kleur"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Klik op \"Gebruik beeld\" \nom het beeld als achtergrond te grbuiken.\nHet beeld moet evengroot zijn\nals de afmetingen van je scherm."; "Set Image" = "Gebruik beeld"; "Unset Image" = "Gebruik beeld niet meer"; /* DefaultXTerm.m */ "Set" = "Zet"; /* BrowserViewsPreferences.m */ "Column Width" = "Kolombreedte"; "Use Default Settings" = "Gebruik Standaard Instellingen"; "Browser" = "Browser"; /* FileWatchingPreferences.m */ "File System Watching" = "File Sytem bekijken"; "timeout" = "timeout"; "frequency" = "frequentie"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "De waarde worden vanaf nu \ntoegepast op de nieuwe watchers,\nde bestaande na de eerste timeout"; /* ShelfPreferences.m */ "Shelf" = "Shelf"; /* DefaultEditor.m */ "Default Editor" = "Standaard editor"; "No Default Editor" = "Geen Standaard Editor"; "Choose..." = "Kies..."; /* IconViewsPreferences.m */ "Title Width" = "Titelbreedte"; "Icon View" = "Icoon view"; /* OpenWithController */ "Open With" = "Open With"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; /* Recycler strings */ "Recycle: " = "Steek in de prullenmand: "; "Recycler: " = "Prullenmand : "; "Recycler" = "Prullenmand"; "the Recycler" = "de Prullenmand"; "\nto the Recycler" = "\nin de Prullenmand"; "Move from the Recycler " = "Haal uit de prullenmand "; "In" = "In"; "Empty Recycler" = "Ledig de Prullenmand"; "Empty the Recycler?" = "Ledig de Prullenmand?"; "Put Away" = "Doe Weg"; gworkspace-1.1.0/GWorkspace/Resources/English.lproj/0000755000175000001440000000000014753220702021656 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/BrowserViewerPref.gorm/0000755000175000001440000000000013214346542026245 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/BrowserViewerPref.gorm/data.classes0000644000175000001440000000101713214346542030534 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; BrowserViewerPref = { Actions = ( "setDefaultWidth:" ); Outlets = ( win, prefbox, controlsbox, colExample, resizerBox, setButt ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "initForController:", "setDefaultWidth:" ); Super = NSObject; }; Resizer = { Actions = ( "initForController:" ); Outlets = ( prefview ); Super = NSView; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/BrowserViewerPref.gorm/data.info0000644000175000001440000000027013214346542030032 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/BrowserViewerPref.gorm/objects.gorm0000644000175000001440000000746313214346542030576 0ustar multixusersGNUstep archive000f4240:0000001e:00000065:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? A C C&% D D:01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01 NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % A B C C  C C&0 &0 % @ @ C B  C B&0 &01 GSCustomView1 GSNibItem0& % NSScrollView @ A C B&0 % C" B@ A A  A A&0 &0 %  A A  A A&0 &01NSTextFieldCell1 NSActionCell1NSCell0&%Box01NSFont%0& % Helvetica A@A@&&&&&&&& &&&&&&%01NSColor0&% NSNamedColorSpace0&% System0&% windowBackgroundColor00&%System0& % textColor %%0 0!& % Columns Width0"% A@!&&&&&&&& &&&&&&% %%0#1NSButton1 NSControl% C B< C A  C A&0$ &%0%1 NSButtonCell0&&%Use Default Settings"&&&&&&&&&&&&&&&%0'&0(&&&& &&0)0*&%Box&&&&&&&& &&&&&&% %%0+&%Window0,& % Preferences, C C F@ F@%0-1NSImage0.&% NSApplicationIcon&   D D@0/ &00 &011NSMutableDictionary1 NSDictionary& 02&%Box 03&%View(1) 04&%Box105& % ButtonCell(0)%06& % GormNSWindow07&% NSOwner08&%BrowserViewerPref09&%View(2)0:&%GormCustomView0;&%Box20<&%View(0) 0=&%MenuItem0>1 NSMenuItem0?&%Item 10@&&&%0A0B& %  common_Nibble%0C&%TextFieldCell(0)0D0E%&&&&&&&& &&&&&&%0F0G&% NSCalibratedWhiteColorSpace >~ ?0HG ? ?0I&%Button#0J &0K1NSNibConnector670L40M=0N2<0O:30PI<0Q;30R1NSNibOutletConnector760S&%win0T740U&%prefbox0V7:0W& % colExample0X7;0Y& % resizerBox0Z7I0[&%setButt0\1NSNibControlConnectorI70]&%setDefaultWidth:0^720_& % controlsbox0`<40a320bC:0c9;0d5I0e&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefEditorPref.gorm/0000755000175000001440000000000013214346542025305 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefEditorPref.gorm/data.classes0000644000175000001440000000053413214346542027577 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; DefEditorPref = { Actions = ( "chooseEditor:" ); Outlets = ( win, prefbox, iconbox, imView, nameLabel, chooseButt ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefEditorPref.gorm/data.info0000644000175000001440000000027013214346542027072 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefEditorPref.gorm/objects.gorm0000644000175000001440000000657313214346542027637 0ustar multixusersGNUstep archive00002c24:00000020:0000005f:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C D=@01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % B B CE B  CE B&0 &0 % @ @ CA B  CA B&0 &01 NSImageView1 NSControl% B B  B@ B@  B@ B@&0 &%01 NSImageCell1NSCell01NSFont%0& % Helvetica A@A@&&&&&&&&%%% ? ?01 NSTextField% B| A@ B A  B A&0 &%01NSTextFieldCell1 NSActionCell0&0% A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor00 &%Default Editor &&&&&&&&0%0!0"&%System0#&%windowBackgroundColor0$0%&%System0&& % textColor %%0'1NSButton% C BT B A  B A&0( &%0)1 NSButtonCell0*&%Choose*&&&&&&&&%0+&0,&&&&0-0.&%Box&&&&&&&&0%!0/00&%System01& % textColor %%!02&%Window03&%Window04&%Window C C F@ F@%051NSImage06&%NSApplicationIcon&   D D07 &08 &091NSMutableDictionary1 NSDictionary&0:&%NSOwner0;& % DefEditorPref0<& % ImageView0=&%Box 0>&%Box10?& % TextField0@&%Button'0A&%MenuItem0B1 NSMenuItem0C&%Item 10D&&&%0E0F& % common_Nibble%0G& % GormNSWindow0H &0I1NSNibConnectorG0J&%NSOwner0K>0LA0M=0N<0O?0P@0Q1NSNibOutletConnectorJG0R&%win0SJ>0T&%prefbox0UJ=0V&%iconbox0WJ<0X&%imView0YJ?0Z& % nameLabel0[J@0\& % chooseButt0]1 NSNibControlConnector@J0^& % chooseEditor:0_&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefSortOrderPref.gorm/0000755000175000001440000000000013214346542026002 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefSortOrderPref.gorm/data.classes0000644000175000001440000000060413214346542030272 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; DefSortOrderPref = { Actions = ( "changeType:", "setNewSortType:" ); Outlets = ( win, prefbox, matrix, setButt, sortinfo2, selectbox, sortinfo1 ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/DefSortOrderPref.gorm/objects.gorm0000644000175000001440000001240113214346542030317 0ustar multixusersGNUstep archive00002c24:00000020:00000094:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% D@ D@@01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % C B C B  C B&0 &0 % @ @ C B  C B&0 &01NSMatrix1 NSControl% B A B B  B B&0 &%01 NSActionCell1NSCell0&01NSFont%0& % Helvetica A@A@&&&&&&&&%% B A ?01NSColor0&%NSNamedColorSpace0&%System0&%controlBackgroundColor0& % NSButtonCell01 NSButtonCell0&%Radio01NSImage01NSMutableString&%common_RadioOff&&&&&&&&%0&0&0 0!&%common_RadioOn&&&%%0" &0#0$&%Name0%% A@$&&&&&&&&% &&&0&0'&%Kind%&&&&&&&&% &&&0(0)&%Date%&&&&&&&&% &&&0*0+&%Size%&&&&&&&&% &&&0,0-&%Owner%&&&&&&&&% &&&#0.1NSTextFieldCell0/&%Sort by%/&&&&&&&&0%0001&%System02&%windowBackgroundColor0304&%System05& % textColor %%061 NSTextField% A B C Ap  C Ap&07 &%0809&-%-The sort method will apply to all the folders%9&&&&&&&&0%0:0;&%System0<&%textBackgroundColor0=0>&%NSCalibratedWhiteColorSpace > ?0?% A Bt C Ap  C Ap&0@ &%0A0B&$%$that have no sorting order specified%B&&&&&&&&0%0C0D&%System0E&%textBackgroundColor0F> > ?0G1NSButton% C A B A  B A&0H &%0I0J&%Set%J&&&&&&&&%0K&0L&&&&0M0N&%Box&&&&&&&&0%00O0P&%System0Q& % textColor %%00R&%Window0S&%Window0T&%Window C C F@ F@%0U0V&%NSApplicationIcon&   D D0W &0X &0Y1NSMutableDictionary1 NSDictionary& 0Z& % MenuItem30[1 NSMenuItem0\&%Item 30]&&&%%0^&%NSOwner0_&%DefSortOrderPref0`&%Box 0a&%ButtonG0b& % TextField60c&%Box10d&%MenuItem0e0f&%Item 10g&&&%0h0i& % common_Nibble%0j& % GormNSWindow0k& % TextField1?0l&%Matrix0m& % MenuItem10n0o&%Item 1]&&%h%0p& % MenuItem20q0r&%Item 2]&&%%0s &0t1NSNibConnectorj0u&%NSOwner0vc0wd0xm0yp0zZ0{`0|b0}k0~a0l01NSNibOutletConnectoruj0&%win0ul0&%matrix0ua0&%setButt01 NSNibControlConnectorau0&%setNewSortType:0 lu0& % changeType:0uc0&%prefbox0uk0& % sortinfo20ub0& % sortinfo10u`0& % selectbox0&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/DesktopPref.gorm/0000755000175000001440000000000014136225406025050 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/DesktopPref.gorm/data.classes0000644000175000001440000000236714136225406027350 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; ArrResizer = { Actions = ( "initForController:" ); Outlets = ( ); Super = NSView; }; ColorView = { Actions = ( ); Outlets = ( ); Super = NSView; }; DesktopPref = { Actions = ( "setColor:", "chooseImage:", "setImage:", "setImageStyle:", "setUseImage:", "setOmnipresent:", "setUsesDock:", "setDockPosition:", "setDockStyle:", "setTShelfAutohide:", "setSingleClickLaunch:" ); Outlets = ( win, prefbox, tabView, colorLabel, colorWell, imageView, imagePosMatrix, chooseImageButt, useImageSwitch, omnipresentCheck, hideTShelfCheck, launchSingleClick, dockBox, useDockCheck, dockPosLabel, dockPosMatrix, dockStyleLabel, dockStyleMatrix, gworkspace ); Super = NSObject; }; FirstResponder = { Actions = ( "chooseImage:", "orderFrontFontPanel:", "setColor:", "setDockPosition:", "setDockStyle:", "setImage:", "setImageStyle:", "setOmnipresent:", "setSingleClickLaunch:", "setTShelfAutohide:", "setUseImage:", "setUsesDock:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/DesktopPref.gorm/data.info0000644000175000001440000000027414136225406026641 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%GNUstep gui-0.10.30& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/DesktopPref.gorm/objects.gorm0000644000175000001440000004075714136225406027404 0ustar multixusersGNUstep archive000f4240:00000024:0000013c:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&+01NSString&%Button501NSButton1 NSControl1NSView1 NSResponder% @Q @e @7  @e @7J01 NSTextField% @E @V @2  @V @2J 0 % @` @E @T @2  @T @2J01 NSMatrix% ? @V @B  @V @BJ0 % @`  @S @B  @S @BJ0 % ? @2 @x @m`  @x @m`J0 % @L @g @k @7  @k @7J0 % @L @d @k @7  @k @7J0 1 NSBox% @H @6 @l @]@  @l @]@J0 % @ @ @k @V  @k @VJ 01 NSMutableArray1NSArray& 0 & 01NSCell0&%Dock01NSFont%JJJJJJJJJJJJJJJ @ @%% 0 &I01 NSButtonCell1 NSActionCell0&%Autohide Tabbed Shelf01NSImage01NSMutableString&%GSSwitchJJJJJJJJJJJJJJJI0&00&%GSSwitchSelectedJJJ JJ 0 &I00& % Omnipresent0% A@JJJJJJJJJJJJJJJIJJJ JJ0 & 0 % @L @a @k @7  @k @7J0! &I0"0#&%Single Click LaunchJJJJJJJJJJJJJJJIJJJ JJ0$ &I0%JJJJJJJJJJJJJJJI% @S @2 ? ?0&& % NSButtonCell0'0(&%Radio0)0*&%GSRadioJJJJJJJJJJJJJJJI0+0,&%GSRadioSelectedJJJ JJ%%0- &0.0/&%Classic)JJJJJJJJJJJJJJJI+JJJ JJ0001&%Modern)JJJJJJJJJJJJJJJI+JJJ JJ.02 &I03JJJJJJJJJJJJJJJI% @V @2 ? ?04& % NSButtonCell0506&%Radio)JJJJJJJJJJJJJJJI+JJJ JJ%%07 &0809&%Left)JJJJJJJJJJJJJJJI+JJJ JJ0:0;&%Right)JJJJJJJJJJJJJJJI+JJJ JJ80< &I0=1NSTextFieldCell0>&%Style:>JJJJJJJJ JJJJJJJI0?1NSColor0@&% NSNamedColorSpace0A&%System0B&%textBackgroundColor0C@A0D& % textColor0E &I0F0G& % Position:GJJJJJJJJ JJJJJJJI?C 0H &I0I0J& % Show DockJJJJJJJJJJJJJJJIJJJ JJ0K&% NSOwner0L& % DesktopPref0M& % ButtonCell(6)0N0O&%Center)JJJJJJJJJJJJJJJI+JJJ JJ0P&%MenuItem0Q1 NSMenuItem0R&%Item 1JJI0S0T& %  common_NibbleI0U& % Matrix(1)0V&%Button0W% @Y@ @. @d @0  @d @0J0X1 NSImageView% @Y@ @E @h @b`  @h @b`J 0Y % @r @Q @T @X@  @T @X@J 0Z% @$ @$ @Q@ @8  @Q@ @8J 0[% ? @2 @x @m`  @x @m`J0\ % @$ @i  @T @2  @T @2J0]1 NSColorWell% @Y@ @h` @J @>  @J @>JW\0^ &I0_JJJJJJJJJJJJJJJ0`0a&% NSCalibratedWhiteColorSpace ?[0b &I0c0d&%Color:dJJJJJJJJ JJJJJJJI?CZ0e &XYWZ]\Y0f &I0g0h&%ChooseJJJJJJJJJJJJJJJIJJJ JJX0i &I0jJJJJJJJJJJJJJJJI% @T @8@ 0k@0l&% System0m&% controlBackgroundColork0n& % NSButtonCell0o0p&%Radio)JJJJJJJJJJJJJJJI+JJJ JJ%%0q &N0r0s&%Fit)JJJJJJJJJJJJJJJI+JJJ JJ0t0u&%Tile)JJJJJJJJJJJJJJJI+JJJ JJ0v0w&%Scale)JJJJJJJJJJJJJJJI+JJJ JJrW0x &I0y1 NSImageCellJJJJJJJJJJJJJJJIII ? ?]0z &I0{0|& % Use imageJJJJJJJJJJJJJJJIJJJ JJ0}&%Button40~% @e @A @M @8  @M @8J 0 &I00&%SetJJJJJJJJJJJJJJJIJJJ JJ0&%Button30% @e @P @M @8  @M @8J 0 &I00&%ChooseJJJJJJJJJJJJJJJIJJJ JJ0& % ImageViewX0&%TabViewItem(1)01 NSTabViewItem0&%General0&%General % 01 NSTabView%  @x @o  @x @oJ0 & 0 &00& % Background0& % Background[%[%J0& % ButtonCell(1)00&%View(3) 0&%Button1Z0& % ColorWell(0)]0& % ButtonCell(5)v0& % Matrix(0)0&%Box0 % @b @W @Y @Z  @Y @ZJ 0 &0% @ @ @X @U@  @X @U@J0 &00& % Current colorJJJJJJJJJJJJJJJ %%0& % ButtonCell(9)"0&%TabView0& %  NSDeferred0 &0&%TabViewItem(0)0& % ButtonCell(0).0&%View(2)[0& % ButtonCell(4):0& % ButtonCell(8)t0&%Matrix1Y0& % Button(0) 0& % TextField(1)0&%Box10 %  @x @p  @x @pJ0 &0%  @x @p  @x @pJ0 &00&%Box0%0& % Helvetica A@A@JJJJJJJJ JJJJJJJI0@l0&% windowBackgroundColorC %%0&%View(1)0& % ButtonCell(3)80&%Box(0) 0& % GormNSWindow01GSWindowTemplate1GSClassSwapper0&% NSWindow1NSWindow% ? @" @x @s`JI @q @0% ? @" @x @s`  @x @s`J0 &0&%Window0&%Window0&% Window @x @r` @Ç @|I00±&% NSApplicationIcon&   @ @0ñ& % ButtonCell(7)r0ı& % TextField(0)\0ű&%Button7 0Ʊ&%View(0) 0DZ& % TextField0ȱ&% GSCustomClassMap0ɱ&0ʱ&%View0˱&%Button6 0̱& % ButtonCell(2)0ͱ0α&%Radio)JJJJJJJJJJJJJJJI+JJJ JJ0ϱ& %  NSVisible0б &0ѱ &BB01 NSNibConnector0ӱ P0Ա 0ձ ǰƐ0ֱ 0ױ 0ر K0ٱ }K0ڱ Ɛ01!NSNibOutletConnectorK0ܱ&%win0ݱ!K0ޱ&%prefbox0߱!K0&%tabView0!K0& % imageView0!K0&%imagePosMatrix0!K0&%chooseImageButt0!KV0&%useImageSwitch0!K0& % useDockCheck01"NSNibControlConnector}K0& % setColor:0"K0& % chooseImage:0"VK0& % setUseImage:0"K0&%setImageStyle:0"K0& % setUsesDock:0 ˰0!K0&%omnipresentCheck0"˰K0&%setOmnipresent:0 Ű0!K0&%hideTShelfCheck0"ŰK0&%setTShelfAutohide:0 P İP ̐P"KP& % setColor:P"KP& % setImage:P!KP& % colorWellP ƐP P P UƐP UP UP ƐP P ưP!KUP& % dockPosMatrixP!KP&%dockStyleLabelP!KP&%dockStyleMatrixP"UKP&%setDockPosition:P"KP& % setDockStyle:P P P P P P MP! ðP" P# VP$ P% P&!KP'&%dockBoxP(!KP)& % colorLabelP*!KP+& % dockPosLabelP, P- P.!KP/&%launchSingleClickP0"KP1&%setSingleClickLaunch:P21# NSMutableSet1$NSSet&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/FindModuleView.gorm/0000755000175000001440000000000013214346542025504 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/FindModuleView.gorm/data.classes0000644000175000001440000000074413214346542030001 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FindModuleView = { Actions = ( "setModule:", "popUpAction:", "buttonsAction:" ); Outlets = ( win, mainBox, popUp, moduleBox, removeButt, addButt, module ); Super = NSObject; }; FirstResponder = { Actions = ( "buttonsAction:", "orderFrontFontPanel:", "popUpAction:", "setModule:", "startFind:" ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/FindModuleView.gorm/data.info0000644000175000001440000000027013214346542027271 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/FindModuleView.gorm/objects.gorm0000644000175000001440000001271513214346542030031 0ustar multixusersGNUstep archive00002c24:00000020:000000a0:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C BL&% Cm D%@01 NSView%  C BL  C BL&01 NSMutableArray1 NSArray&01NSBox%  C B  C B&0 &0 %  C B  C B&0 &  0 1NSButton1 NSControl% C B A A  A A&0 &%0 1 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%&&&&&&&&%0&0&&&&0% C B A A  A A&0 &%00&%Button&&&&&&&&%0&0&&&&0% C B A A  A A&0 &%00&%Button&&&&&&&&%0&0&&&&0% C B A A  A A&0 &%0 0!&%Button&&&&&&&&%0"&0#&&&&0$% C  A A  A A&0% &%0&0'&%Button&&&&&&&&%0(&0)&&&&0*1 NSPopUpButton% @ CT B A  B A&0+ &%0,1NSPopUpButtonCell1NSMenuItemCell0-&&&&&&&&&0.1NSMenu0/&00 &011 NSMenuItem02&%Item 103&&&%041NSImage05& % common_Nibble%0607&%Item 23&&%%0809&%Item 33&&%%%0:&0;&&&&1.%%%%%0<% Co C B A  B A&0= &%0>0?&&&&&&&&&0@0A&0B &0C0D&%Item 10E&&&%4%0F0G&%Item 2E&&%%0H0I&%Item 3E&&%%%0J&0K&&&&C@%%%%%0L% Cʀ  A A  A A&0M &%0N0O&%Button&&&&&&&&%0P&0Q&&&&0R% A  B A  B A&0S &%0T0U&&&&&&&&&0V0W&0X &0Y0Z&%Item 10[&&&%4%0\0]&%Item 2[&&%%0^0_&%Item 3[&&%%%0`&0a&&&&YV%%%%%0b% C  C B  C B&0c &0d %  C B  C B&0e &0f0g&%Box&&&&&&&& %%0h0i&%Box&&&&&&&& %%0j1NSColor0k&%NSNamedColorSpace0l&%System0m&%windowBackgroundColor0n&%Window0o&%Window0p&%Window ? ? F@ F@%0q0r&%NSApplicationIcon&   D D0s &0t &0u1NSMutableDictionary1 NSDictionary&0v&%Button20w&%Button30x&%Button4$0y&%NSOwner0z&%FindModuleView0{&%Button5L0|&%Box2b0}& % GormNSWindow0~&%View 0&%View1d0&%GormNSPopUpButton*0&%Button 0&%GormNSPopUpButton1<0&%GormNSPopUpButton2R0&%Box0&%Button10 &01NSNibConnector0&%NSOwner00v0x00001NSNibOutletConnectorx0&%addButt00&%mainBox0|0& % moduleBox00&%popUp0{0& % removeButt0}0&%win01 NSNibControlConnectorx0&%buttonsAction:0 {0 0& % popUpAction:0&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Finder.gorm/0000755000175000001440000000000013214346542024032 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Finder.gorm/data.classes0000644000175000001440000000133513214346542026324 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Finder = { Actions = ( "chooseSearchPlacesType:", "addSearchPlaceFromDialog:", "removeSearchPlaceButtAction:", "startFind:" ); Outlets = ( win, searchLabel, wherePopUp, placesBox, addPlaceButt, removePlaceButt, itemsLabel, modulesBox, findButt, recursiveSwitch ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "startFind:", "chooseSearchPlacesType:", "addSearchPlaceFromDialog:", "removeSearchPlaceButtAction:" ); Super = NSObject; }; SearchPlacesBox = { Actions = ( ); Outlets = ( ); Super = NSBox; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Finder.gorm/data.info0000644000175000001440000000027013214346542025617 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Finder.gorm/objects.gorm0000644000175000001440000001253513214346542026357 0ustar multixusersGNUstep archive000f4240:00000024:0000008a:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? A C C&% C D301 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&  01 NSBox% A B4 C B  C B&0 &0 % @ @ C A  C A&0 &0 1NSCell0 &%Box0 1NSFont%&&&&&&&&&&&&&& %%01NSButton1 NSControl% C A  B A  B A&!0 &%01 NSButtonCell1 NSActionCell0&%Search &&&&&&&&&&&&&&%0&01NSImage0& %  common_retH&&& &&01 NSTextField% A Cg Bl A  Bl A& 0 &%01NSTextFieldCell0& % Search in: &&&&&&&& &&&&&&%01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01 NSPopUpButton% B Cg C& A  C& A& 0 &%0!1NSPopUpButtonCell1NSMenuItemCell &&&&&&&&0"1NSMenu0# &0$1 NSMenuItem0%& % Selection&&%%0&0'&%Specific places&&%%&&&&&&%&&& &&"%%%%%0(% A B C A  C A&0) &%0*0+&%Search for items whose: &&&&&&&& &&&&&&%0,% C Ce Bt A  Bt A& 0- &%0.0/&%Add &&&&&&&&&&&&&&%&&& &&00% C Ce Bt A  Bt A& 01 &%0203&%Remove &&&&&&&&&&&&&&%&&& &&041 GSCustomView1 GSNibItem05&%SearchPlacesBox A B C B&06% A A` C A  C A&$07 &%0809& % Recursive0:0;1NSMutableString&%GSSwitch &&&&&&&&&&&&&&%0<0=&%GSSwitchSelected&&& &&0>0?&% System0@&% windowBackgroundColor0A&%Window0B&%FinderB C Cn F8 F%0C0D&% NSApplicationIcon&   D D@0E &0F &0G1 NSMutableDictionary1! NSDictionary&0H& % TextField1(0I&%Box10J& % TextField0K& % MenuItem1$0L&%Button1,0M& % MenuItem30N0O&%Item&&%0P0Q&%GSMenuSelected0R0S& % GSMenuMixed%0T&%Button360U& % GormNSWindow0V&% NSOwner0W&%Finder0X&%GormCustomView40Y&%MenuItem0Z0[&%Item&&%PR%0\& % MenuItem2&0]&%Button0^&%GormNSPopUpButton0_&%Button200` &0a1"NSNibConnectorI0b"]0c"J0d"^0e"K0f"\0g"M0h&% NSOwner0i"L0j1#NSNibOutletConnectorhU0k&%win0l#hL0m& % addPlaceButt0n#h]0o&%findButt0p#hH0q& % itemsLabel0r#h_0s&%removePlaceButt0t#hJ0u& % searchLabel0v#h^0w& % wherePopUp0x1$NSNibControlConnectorLh0y&%addSearchPlaceFromDialog:0z$_h0{&%removeSearchPlaceButtAction:0|$^h0}&%chooseSearchPlacesType:0~$]h0& % startFind:0#hI0& % modulesBox0"X0#hX0& % placesBox0#U]0&%initialFirstResponder0"Th0#hT0&%recursiveSwitch0 &gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/0000755000175000001440000000000013214346542022550 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/BViewer.rtfd/0000755000175000001440000000000013214346542025051 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/BViewer.rtfd/TXT.rtf0000644000175000001440000000453413214346542026253 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36\b \uc0 File Viewer \par \fs28\i\b0 \uc0 (browsing mode)\par \par \pard\ql\fs24\i0\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 By seleting "Browsing" from the "View->Viewer behaviour" menu, you can select the Browsing mode. \par The Shelf is a place holder for shortcuts. Initially the only shortcut present is the one to your home folder. If you click the icon you are immediately transfered to the place where you store your files and folders. By dragging files, folders or applications to the Shelf you can create your own shortcuts.\par The icon path represents the path from the root of the filesystem towards the point where you are now. It always ends at an highlighted folder or file. It is this highlighted element on which you can perform operations, like dragging and dropping.\par And the last section is the viewing area. Here the contents of the filesystem is displayed. It presents to you in a graphical way the surroundings of the highlighted item.\par \pard\ql\pard\tx0\li100\ql \uc0 \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql{{\NeXTGraphic browsing.tiff \width8000 \height6240} \uc0 \u-4 }\f0\fs24\cf1 \uc0 \par \par GWorkspace gives you a great deal of flexibility of how you want to view the filesystem. If you are quickly browsing through a large tree of folders the browser might be fine for you. But if you are trying to locate an application it would be easier if you can look at the icons, instead of only the names.\par And for this there are different views:\par \par \cf0{{\NeXTGraphic views.tiff \width8000 \height7160} \uc0 \u-4 }\uc0 \par \par The Browser view and the Icon view you have already seen, and now you know how to access them. New is the List view. If you encounter that the commands in the View menu are grey instead of black it means you have not selected a viewer. Move your mouse to the viewer and click on it, so its title bar gets black and the commands in the menu are accessable.\f0\fs24\cf1 \uc0 \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/BViewer.rtfd/browsing.tiff0000644000175000001440000171747413214346542027602 0ustar multixusersII*GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG***LLL,,,"""***999TTTjjj***999VVVVVVVVVVVVVVVAAAyyyOOODDD888[[['''jkjopozzz***999zzzSSSAAA###333:::wwwMMM|||'''TVTTVTFHFegezzz***999zzz^^^~~~~~~~~~uuuSSSAAA'''ddd***TTTMMMAAA888qqq'''000^^^ppp111'''VXVOROHJHdfdzzz***999zzzSSSAAA444999888FFF@@@rrrSSSfffzzznnn222///'''"#"/1/zzz***999zzzSSSAAA444GGGxxx*** rrrlll$$$'''EGE`b`TVTRTRzzz***999zzzaaaxxxSSSAAA444$$$yyyXXXjjj wwwrrrSSS~~~333fffKKKMMMvvv"""'''FHFefeUWUWXWzzz***999iiiiiiiiiiiiiiiAAA888///VVV888000%%%SSSPPP###333XXX(((@@@OOOSSS000 HHH###LLL DDDVVV;;;555333'''wxw{{{www***999AAA333++++++++++++++++++QQQ+++++++++++++++++++++***999###QQQ111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111666```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````!!!***Ԫ===***Ԫ===***Ԫ===***Ԫppv===***ԪROTbbe===***ԪrovJADG)#O82===***Ԫhfn>/1F"^)d+c>4===***ԪQHNA)%U&a)b)`(d/lSMxzF9:{===***ԪywTDFP-&Z(a)_(^'h6(~[Sus\MOa=7r3#a7+===***Ԫrq~vtDBGO9:P'_)a)^'_*i9,niykm`OP[0'o1!}5!u2cA7===0nr`***Ԫyy}vtOLY9*,E Z&_(\&`.zSGvtxszX96f0#~6!y4 v2p/k-bE====&-EPKP***ԪDBNFAK:%#H#S$W%\)l?3je{}`MO^92w5$y4 x3t1n.k-i,a(q\W===/h7QUe\4X(B6GE v6 |k k?iix#***ԪunzR<=E$G!W%V$],uPH|zuzhQRc4)v3 |5 x2s0p.l-j,h+f+Y%zlh===17+yr2J8]LI eB5FqSS ***ԪqswutrL#R#R#T#]- gb{a=9i0 ~6!y4w3t1o.n.l-j,g*e*c)N === Hq8]UAQ8]SI ;*k*{***Ԫk,R"i@5trlTWg8.}7"|5 z4u2s0p/o.m-j,i,g+d*a)`(C===nB6^L;$?<,/GIxF 3FkK9rDCo{***ԪUI||szfJJu:+w4 z4w2u1r0p/o.m-k,i,h+e*d*a(_(]&A=== L\\:99)\-7^I_4 HS/[3SEUN<Y)\/; /***Ԫj_dQ30Ct1{4v2s0q/p.n.m-l-j,h+g+e*c)a(_(\&Y$H3.=== ***Ԫc)IQ"r0r0q/o/n.m-k-j,h+g+e*c)a(_(]&\--Y%T#H95===d***Ԫlll  Jw2o/n.m-k-j,h+f+e*c)a(_'^'\'N-:.#0S+-xmK;8===  S%%%ٗ;x3m-l-j,i,g+e*c)b)`'^'\&Z&N,8.*0___1&2KK; ===)lq uxxxxxxxxxZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZLl-j,i+g+f+e*b)`(^(\&[%X$L,:&"(000```''',!,; ===)l u'***ԪCCCV$g+g+e*d)b(`(_']&[&Y%W$K,;2/3bbb)))KKK***bbb===)%xEvZ(8:vG?u `n }j^99&***Ԫ}|2 0 d*e*d*b)`(_(]&[&Z&Y%X&O-90-2ttt80====)JU^F!M#ZJP!uH!4***Ԫ<>e*c)a(_'^'\&Z%Z&Z&O!K,8009NMVNNVFFFGGGMMMXX]OOX!!**#2===)l=Wv {p% '%uXY***Ԫ6 ?^'`(^']&[%Z%U#P!JG6 O/(90.MMV===*#AH2)l=W8wV{aJE5xUu#UY***Ԫ1 Dc)\&\&Y%V#M O!A46-)TRQ43<  O:1G>55SS\fff555555ppp===& 4d w7 ET ;w***Ԫ"FU$O!O 9. ;76eedKKSiga@!XNB|zFT;zRVNABH===_44&{5w8E),}uG***Ԫ! K G73+)MJIlkkDEINRGgppQs`wzht\PeRCT7BDIGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG_4tKL{FUc[;-h***Ԫ`XVE0+?75YWVqOJ=Qc?U\I`kVssj{gcv{uy===N4aILnR fPY<zG -h***Ԫeeeeee===ggQ4`HKYhNOX;,g***Ԫ===***ԪGGGppp===***Ԫ```ccc;;;[[[ggghhhSSSssseeepppTTTgggnnnTTT===***Ԫjjj777XXXqqqvvv\\\aaaDDDQQQGGGZZZ===***ԪQQQDDD,,,JJJGGGrrrvvvzzzhhhGGGGGGGGGyyyTTTvvv===***Ԫyyyttt~~~333eeevvv{{{hhhGGGGGGGGG\\\===***Ԫyyyzzzzzzvvvuuuooo===***Ԫ===***Ԫ===***Ԫ===***Ԫ===***Ԫ===***Ԫ===***Ԫ===***Ԫiii===***Ԫ}}}///888|||===***Ԫ***===***Ԫ}}}uuu===***Ԫ===***Ԫ===***Ԫxxx%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<<<===***ԪxxxEEE===***ԪxxxFFF===***ԪxxxFFF===***ԪxxxFFF===***ԪxxxFFF===***ԪxxxFFF===***ԪxxxFFF===***ԪxxxFFF_bbbbgvv{VXYfii===***ԪxxxFFFTKOD89eafB57qlmWOSPDE===***ԪxxxFFFrpw@59E%Z(\:/UPV<('O%X&}z{y@59E%Z(kH>===***ԪxxxFFFd`g>))K$`)c+c*[9/~prsG;@A% W&d+c+Y&~{kko}~dah>))K$`)c+c*jH>===***ԪxxxFFFXMRH*%X(`)a)`)i6'}VLufexnpe?8V6.lemL88O'])a)`)`)vI`(h,i,h,f+e*c)a)_(]'[&Y&X%X%U#Q"HB, ywwcZ@Hj-j-i,g+f+d*b)`)^(\'Z&Y%X%W%S#L G:;1.N!>`(h,i,h,f+e*c)a)_(]'\&Y&X%X%U$Q"HB, ===4(***ԪxxxFFFG;b)f+f+e*c)a)`(^'\&Z&Y%W%V$M N!A22(%MKJz`Y=Gk-g+f+d*b)`(_(]'[&Z&Y%V$R"M I9/=86eddG;b)f+f+e*c)a)`(^'\&Z&Y%W%V$M N!A7 B84pnmjjjaaaGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG[[[GGGGGGGGGGGG4'[:***ԪxxxFFF@:c*e+c*b)`(^(\'[&Z&X%S#N!J@081/SQQuuut^X9Gl.d*b)a)_(]'[&Z&Y%W%O!L F90!DBAcbb@:c*e+c*b)`(^(\'[&Z&X%T#N!JB5NFD{yy ===/ l]@***ԪxxxFFF:Ac*b)a)_(]'[&[&W%P"M M!7.<86__^o\V6V$d*b)`(^'\&Z&[&R#O!N!D/2)&KIHsss:Ac*b)a)_(]'[&[&W%P"M N!77&!VQP===%{{LU/~^"{b***ԪxxxFFF5 @a)_(]'\'\&U$Q"N F51&#QONnnnkZU3 W%`(^(\']'X%T#M M <0=75``_~~~5 @a)_(]'\'\'U$Q"N F9?41vts===^CO[Nq%***ԪxxxFFF1 Db)\'Z&T#N!O!D17.+VTSzyyhYT2 ]'^'[&Y&P!P"J:0!EA@gff1 Cb)]'Z&T#N!O!E7#KB?}|===57[:p%***ԪxxxFFF* K^'Q"R"P!>.:54a``eWT4 ]'U$S#P"J2 1&"KIIqqq* J^'Q"R"P!>3SNL===ypc9n%***ԪxxxFFF ES#N!6."CA@hhh_UR) S#S#A04.,WVVxxx ES#N!9;.+c`_===***ԪxxxFFF9-)C45+(XVUsssxrp4?/FA?feeL?>>YYYUUUKKKRRRlll===***ԪxxxFFFGGGJJJWWWttt|||zzz^^^GGGGGGGGGBBB]]]kkkjjj|||]]]{{{eeeqqq{{{jjjhhhqqqRRRbbb;;;:::OOOwwwppp}}}hhh```cccfffsssooouuuLLL>>>PPP:::dddYYYlll===***ԪxxxFFFGGGJJJXXXiiiqqq^^^^^^888GGGGGGGGG???[[[qqqEEEggg|||jjjxxxeeewwwjjjjjjeeeqqq{{{222JJJ@@@aaa}}}zzzcccSSSDDDGGG666^^^]]]___wwwaaaoooiiixxxsss```VVV___^^^GGGxxxaaa\\\---DDDUUUjjjuuu===***ԪxxxFFFGGGJJJiiikkkfffjjj]]]```oooZZZooo===GGG|||GGG888OOOIIIjjjddd}}}jjjjjjeeeqqq{{{~~~}}}aaa___nnn777]]]hhh///GGGmmmlllpppmmmhhhrrrmmmjjjkkkjjjKKKVVV```nnnGGGuuubbbooolllGGGKKKmmmffflll...,,,iii[[[<<>>XXXFFF???WWWppp^^^XXX===JJoLoGS  pL&6{***ԪxxxFFFGGGGGGGGGYYYoooWWWccciiiQQQNNN|||yyyhhheeefffqqq{{{GGGGGGGGG{{{PPP???888nnn^^^jjjWWW===JJhg*1]dig,hmK***ԪxxxFFFGGGGGGGGGYYYjjjZZZcccgggxxxXXXuuufffqqq{{{qqqqqqqqq}}}VVVsssmmmHHHZZZzzz^^^hhhYYY===JJ  JN"***ԪxxxFFFGGGGGGGGGYYYfffqqq{{{[[[^^^www444===g 77nn=4R}n<6=***ԪxxxFFFGGGGGGGGGfffqqq{{{)))hhh6664***ԪxxxFFFGGGGGGGGGhhhfffqqq{{{zzz^^^))):::VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVoooVVVVVVVVVVVV~~~~~~~~4***ԪxxxFFFGGGGGGGGGhhhtttxxx|||}}}zzzjjjkkkfffqqq{{{jjj~~~}}}{{{www~~~JJJ===#***ԪxxxFFFGGGGGGGGGtttkkk~~~hhhWWWXXXyyyvvvnnn///bbb~~~hhheeexxxfffqqq{{{UUUxxxmmmppprrr///;;;yyyFFFzzzWWWyyyaaa>>>ppppppqqq))){{{eee===??'***ԪxxxFFFGGGGGGGGGXXXaaahhh\\\]]]FFF;;;LLL...KKK:::pppeeefffqqq{{{PPP}}}555QQQQQQLLLZZZFFF^^^pppKKK---FFFQQQGGGbbb===***ԪxxxFFFGGGGGGGGGlllhhh[[[TTT>>>NNN___eeefffqqq{{{cccTTTccc___NNN\\\GGG]]]xxxrrrHHHAAA___444~~~vvv===;CA<V\Yd%***ԪxxxFFFGGGGGGGGG]]]]]]xxxnnnRRRgggVVVeeeVVVdddfffqqq{{{gggRRRnnn\\\ZZZeeeooo___ppp___^^^WWWWWWAAAeeeXXX444YYYeee===\aUZ{|~?C***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGJJJ=== _V8+ke***ԪxxxFFFGGGGGGGGGfffqqq{{{xxxzzz=== JK***ԪxxxFFFGGGGGGGGGssssssssssssVVVfffqqq{{{yyy}}}PPP===DA7afyTAiv.***ԪxxxFFFGGGGGGGGG~~~WWW[[[~~~NNNvvvtttfffqqq{{{vvvoootttllluuu~~~xxx$$$zzzCCCGGG===***ԪxxxFFFGGGGGGGGGvvv{{{\\\cccdddZZZ\\\~~~NNNYYYggg~~~eeeyyyfffqqq{{{YYYWWW<<>>^^^OOOwww===***ԪxxxFFFGGGGGGGGGyyy~~~aaaPPPpppTTTRRRTTT___RRR~~~fffqqq{{{]]]QQQ]]]VVVTTT}}}TTTMMMWWWRRRMMM{{{VVVMMMrrrwwwWWWlllMMMWWWWWWgggRRRiiiMMMMMMQQQYYY333555YYYQQQ:::RRRbbb===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGbbb===***ԪxxxFFFGGGGGGGGGfffqqq{{{fffyyy===***ԪxxxFFFGGGGGGGGGfffqqq{{{aaa===***ԪxxxFFFGGGGGGGGGfffqqq{{{```eeegggxxx```eeerrr'''CCCGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{[[[TTT777xxxmmmDDDiiiOOO___QQQ\\\aaaGGGeeezzzTTT[[[NNNcccOOO[[[DDDWWWQQQxxx}}}YYYNNN111SSSYYYfffLLLPPPnnn===***ԪxxxFFFGGGGGGGGGfffqqq{{{OOOkkk555```ZZZMMMhhhsssGGG^^^OOOEEEYYYRRRKKKWWWEEEXXX|||QQQFFFttteee{{{\\\===***ԪxxxFFFGGGGGGGGGfffqqq{{{\\\ZZZRRRNNNEEEGGG]]]nnnIIIxxxOOOEEE```RRRGGGSSSFFFooocccfffllliii<<>>aaa===***ԪxxxFFFGGGGGGGGGfffqqq{{{YYY[[[OOOqqqeeeKKKxxxxxxnnnFFF///RRRPPPlll]]]TTT>>>hhh```YYYEEERRR===***ԪxxxFFFGGGGGGGGGfffqqq{{{wwwlll|||RRRBBBvvvXXXxxxxxxqqq555iiivvvzzz}}}eeehhhRRRyyyWWWggg```WWWuuubbb999ooohhhzzz===***ԪxxxFFFGGGGGGGGGfffqqq{{{~~~```|||CCC===***ԪxxxFFFGGGGGGGGGfffqqq{{{```GGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{gggQQQrrryyysssGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{ccc^^^QQQnnn]]]SSSkkkssshhhGGGYYYgggssspppYYY[[[^^^VVVXXXtttSSSnnn~~~mmmVVVfffjjj```===***ԪxxxFFFGGGGGGGGGfffqqq{{{PPPyyy^^^pppUUU```|||ggg^^^EEEDDDqqqkkkXXXQQQyyyVVV~~~fff]]]ZZZyyy}}}{{{cccgggXXX===ddd===***ԪxxxFFFGGGGGGGGGfffqqq{{{VVVNNNYYYkkkcccPPP~~~yyynnnGGG===OOOaaaZZZQQQPPPvvvTTTEEEDDDiii...KKKDDD{{{iiiNNN;;;fffccc\\\FFFQQQ===***ԪxxxFFFGGGGGGGGGfffqqq{{{lll|||QQQ???qqqRRReee^^^GGGFFF___iiiQQQppp\\\QQQCCC^^^```xxxPPPdddcccccc```[[[<<<~~~mmm===***ԪxxxFFFGGGGGGGGGfffqqq{{{{{{dddddd{{{{{{hhhzzzQQQxxxjjjeeeyyyfffjjjttteee~~~ccclllgggBBBxxxooo===***ԪxxxFFFGGGGGGGGGfffqqq{{{QQQcccGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{qqqRRR|||FFFMMM|||nnn===***ԪxxxFFFGGGGGGGGGfffqqq{{{eeeaaaTTTqqq^^^sssxxxbbb}}}ppptttssszzz}}}ooo(((gggrrrxxxmmmttt}}}jjj~~~ppp===***ԪxxxFFFGGGGGGGGGfffqqq{{{SSS|||iiiSSSbbbsssxxxXXXzzzYYY|||tttfff222DDDhhhooo]]]<<>>dddddd```XXXxxxRRRoooYYYPPPGGGIII:::FFFFFF{{{www[[[OOOGGG000JJJFFFZZZUUUEEEOOOnnnsssGGGPPP===***ԪxxxFFFGGGGGGGGGfffqqq{{{dddRRR>>>mmmMMMxxxxxx|||oooGGGGGG{{{vvvtttVVVLLL]]]KKKHHHOOOcccGGGZZZ===***ԪxxxFFFGGGGGGGGGfffqqq{{{lllSSSxxxrrr{{{oooVVViiiiiijjjYYYvvvTTTaaa\\\}}}SSStttjjjRRRTTTGGGoooZZZ===***ԪxxxFFFGGGGGGGGGfffqqq{{{rrrGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{iii===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGfff|||===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGG???uuu]]]MMMfffoooZZZtttkkkggg>>>xxxfffDDDgggjjjooolllvvvfffbbbuuucccuuudddmmmuuucccTTT\\\nnneee333lllbbb===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGiiiwww{{{MMMIII:::UUUSSSMMMfffaaa___FFFQQQaaaQQQTTTvvv999XXX@@@yyyZZZAAAxxxTTTPPPEEESSS===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGlllwwwzzzMMMGGGYYYiiidddEEEYYYNNNKKKkkk]]]ZZZ```rrrTTTTTT<<>>qqqaaa\\\dddtttXXXgggqqqrrr===***ԪxxxFFFGGGGGGGGGfffqqq{{{555qqqkkkAAA]]]wwwwww\\\ccclllUUUXXXppp333```SSS~~~qqq```UUU666[[[]]]SSSUUUWWWnnn===***ԪxxxFFFGGGGGGGGGfffqqq{{{FFFnnnkkkGGG'''KKKmmm\\\QQQmmm```RRRCCCMMM|||mmmRRRZZZzzz~~~SSSRRR===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGIIIGGG]]]\\\pppfffcccSSSGGGGGG[[[yyytttCCCWWWwwwSSSRRR===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGGGG]]]\\\AAAUUU___tttSSS]]]TTTPPPsssGGGGGGgggaaaOOO___BBB888RRR^^^SSSTTTPPPqqq===***ԪxxxFFFGGGGGGGGGfffqqq{{{eeeSSS===***ԪxxxFFFGGGGGGGGGfffqqq{{{vvvhhh===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{ZZZYYYwwwGGGwww===***ԪxxxFFFGGGGGGGGGfffqqq{{{\\\aaaHHH]]]RRR}}}TTT^^^qqqUUUTTTdddOOOqqqJJJQQQtttQQQbbbggg[[[PPPfffeeeOOOpppEEE\\\RRR<<>>jjjiii===***ԪxxxFFFGGGGGGGGGfffqqq{{{RRRGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{SSSSSSmmmvvvaaauuu===***ԪxxxFFFGGGGGGGGGfffqqq{{{CCCgggtttvvv|||wwweeeCCC^^^zzzzzzZZZJJJuuuttt}}}yyy===***ԪxxxFFFGGGGGGGGGfffqqq{{{:::uuuqqqwwwNNNddd^^^GGGgggzzzooocccrrrQQQvvvlll{{{iii///}}}ssspppgggYYYeeebbbAAAwww}}}```;;;tttqqqttt...eee===***ԪxxxFFFGGGGGGGGGfffqqq{{{---iii}}}wwwwwwqqqaaaGGG---JJJDDDXXXxxxhhhxxxQQQGGGIII111EEELLL}}}ssswww:::KKK...FFFlllJJJ***FFFQQQOOOjjj===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGwwwzzzuuu[[[GGG[[[iiihhhaaammmGGGIIIrrrrrrGGG~~~pppyyy@@@>>>bbb999xxx|||===***ԪxxxFFFGGGGGGGGGfffqqq{{{aaapppSSSHHH^^^\\\zzzTTT\\\sssVVViiijjjUUU~~~aaacccYYYyyy|||SSSqqqaaaaaa\\\YYYVVV???eeeZZZ;;;XXXkkk===***ԪxxxFFFGGGGGGGGGfffqqq{{{RRRGGGSSS===***ԪxxxFFFGGGGGGGGGfffqqq{{{zzz===***ԪxxxFFFGGGGGGGGGfffqqq{{{qqqpppMMM===***ԪxxxFFFGGGGGGGGGfffqqq{{{777rrrtttGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{FFFeeebbbiiiccc\\\iiiddd{{{jjjfffoooGGGeeeiiiaaaQQQ___vvvjjjiii```FFF___```rrr***eeeWWW===***ԪxxxFFFGGGGGGGGGfffqqq{{{!!!GGG:::IIIeeeAAATTTgggkkkUUUGGGAAAeeeIII|||QQQfffDDDGGGRRRCCCVVV===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGhhhbbbaaa\\\tttVVVGGGYYYQQQcccMMMFFFWWW;;;ddd===***ԪxxxFFFGGGGGGGGGfffqqq{{{PPPgggqqqRRRgggXXX[[[ZZZzzzTTTnnnPPPwwwSSSbbbYYYPPPWWWSSSKKKFFF___QQQ000XXXTTT===***ԪxxxFFFGGGGGGGGGfffqqq{{{gggGGGGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{IIIhhhhhh===***ԪxxxFFFGGGGGGGGGfffqqq{{{___===***ԪxxxFFFGGGGGGGGGfffqqq{{{ccc)))cccGGG===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGSSSQQQ>>>RRRmmmFFFKKKZZZUUUZZZGGG555TTTRRR```NNNiiiGGGZZZNNN|||(((SSSSSSpppEEEOOOhhh===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGKKKxxxuuuYYY^^^xxxnnnBBBJJJGGGOOOnnnFFFGGGzzzLLL>>>jjjpppqqqbbb===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGEEEnnnqqqkkkxxxxxxGGGGGGGGG[[[hhh~~~gggppp111GGGiiinnnlll888AAAfffpppvvvddd===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGG]]]aaakkkxxxxxxGGGGGGGGG[[[hhhVVV___...GGGJJJlllXXXaaa666''']]]VVVpppEEE\\\ddd===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGppp|||===***ԪxxxFFFGGGGGGGGGfffqqq{{{XXXyyy===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{sssGGGGGGuuuHHH444GGGGGGccchhh~~~HHH===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGZZZZZZzzzcccGGGGGGzzzSSSTTThhhlll{{{GGGgggPPPwwwNNN```VVVHHHUUUfff===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGXXXccclllkkkGGG222GGGGGGccc]]]mmmhhh^^^GGGVVV???```@@@zzz{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGG:::TTTTTTuuuWWW___GGGGGG```hhh^^^GGG\\\TTT(((EEERRRRRRnnn===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGuuunnnyyywww[[[rrr<<>>ooo~~~nnnggghhh===***ԪxxxFFFGGGGGGGGGfffqqq{{{GGGxxxxxxJJJnnn===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***ԪxxxFFFGGGGGGGGGfffqqq{{{===***Ԫxxx[[[qqqqqqqqq===$$$Ԕ444///DDD***Ԫ===***Ԫ===***Ԫ===GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDDDEEEJJJGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG@@@MMMGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG8ڞ "@,4(R/root/Desktop/Guide/browsing.tiff @^HHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/BViewer.rtfd/dummy.tiff0000644000175000001440000000503213214346542027056 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/BViewer.rtfd/views.tiff0000644000175000001440000213730213214346542027070 0ustar multixusersII* `;;;999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999;;;!!!`===BBBZZZZZZZZZZZZXXXSSSZZZZZZZZZZZZHHH`<<>>NNNTTT333mmm `<<<---$$$$$$%%%QQQ VVV555555OOO,,,))) >>>HHHnnn*** ''' """(((111333^`^|}|lnlrtr^^^ `<<>>~~~uuuVVVCCCvvvUUU}}}@@@~~~{{{vvv333333;=;TUTccc `<<`OOOKVa@D]ZGpQS]F6kM~ Ns.Z6Z;`QQQKVDs vBZGU.S ]D6k/BU .s/No|$`QQQe/6SQ9,fW4R;*"C3=2~We)HR8f d]`pjmmjkQQQ $`^PQK("\-{xQQQY`wzV@>X.#\)d.nC7vuqoh]\QQQ`~|}uhk^?:Z, ](d/ nC8u\XiNKj=4l1!y_XQQQE^^^^^`|ynj{UJTB$Y(a-i:.pMDzc`kJFm6)t2 u2g+upQQQu+ X`YU^G3ebqYXmF>p5&v2s0n.j,a-{QQQ   }+          `L/,P%T#a3&xVOnny][j7+v3x3r0n.k,h+e*]1$QQQdF+bb@cQm^q=%u3`e/c:0{_\jkpIC{>.w5!v2s0p.m-j,g+d)a(Z5*QQQ &\p-|u+ Yzd 6$'vQ`daiTTnE=v6%x3u1r0o.m.k,h+f*c)`(]&X<4QQQ-qRjq{+ @ lJ|:>kPR`Z/%L!l-s1q/o.m-k,i+g+d)a)^(Z(^+YGBQQQBHsMc+j|`p_S|IpwKSNBaXQ,-ZuH~`W%Ko.o.m-k-i,g+d)b)_']&L*/:%/uID`HCQQQ BU4J:/ HM9R4=OH 3V-=W[A : DY@GZ>:3=YP:6( JS1J`O Jl-k-i,g+d*a)_(\&Z&H(.:8;UUV<,4T-)QQQ`GM i,g+e*b)`(]'[&Y%H).NIM???NNNGFH<12QQQ`?N g+b)`(^'\&Z%V%E&)@=C{{{wwwhgkGAMQQQ`7 T#a(_']&Y%W$N!G (]]_urq43.F52VVW\\aZY`QQQCku#`2 W$]&[&T#R"C8 E;7@?DHB;T:/QQQ#} B`. U$U#KB=*%SNM}||mmsBC5kSLpxrQQQSL:#}JaLC 3C m#.N%4*NQ I><<D DI8-N'"LR>O8`.I@ A2-VPO|{{mmpTWO\odjtauZlXDO?uwxQQQN![>#}_xcb'aj!z^ZV ~c{Nsw^mk|]^U^U*`pgeXOLkiizwoluatzlyzQQQ,t#}9/W'y({\  wq` HQ7`QQQ({'#}74)'zx-(U  ) %MiI&:`QQQ v)#} uX'zQ7gk94YwyW`hhhWWWuuuiiiZZZlllpppqqqmmmfffxxxuuujjjQQQ      `pppvvvwwwRRR^^^yyy___dddkkksssvvvlllQQQ`vvvaaayyyllllllsssxxx}}}tttQQQ`QQQ`QQQ-! D`QQQ 7`QQQa>`jH!^RL ]+W_7(RZf:cM!* fpEh6gH2Sj;d`QQQnjq:/Hx^DLeM52n6:97vr `QQQ`MM`esY:]DszMMzq[#RM4st_0q`???OOOQQQqo iDz=4]DQ IjPX.CrH^/y`RRRQQQu+>MM8 l./%Ccw2 tnl`QQQ`QQQ`kkkMMM^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___QQQ`gggQQQ+P>>`gggQQQ/qci`gggQQQq/qH)q`gggQQQ7MHK4 6L%IEASc0&d cq.O2]nC`gggQQQ/ 0] $E `)_Rx7swYSg:B `gggumo[VYyrtZSUkbeQQQ/r!  / mhy(\Fs/LUg: `gggbVXT5/Z+}nii`cS61X+ s[U~vyV<8W,!kbQQQ 3qE+1OqnUS-20IH Mk-s.LU`Tp2`ggg[FES,#[(d-o?2znlzyj][bOOR.'Y(c,l<.vd`fVUn^`R0)W'b+j9*nivecQQQ24@VxLQ &~n [3K]qWYh~1HW<A+0wEco[[<`ggg{y}zzpt^B>Z-"_*e2#i<0z\VkSPh=3p4$rRI~wu|y`FBY/%^)d0!e6*{\VmURf?8p6'jB6gPOY1(](d0 f6)wUMqYVfC3wWR}fdgFBq7(x5"u2p/l-f+lcQQQ`ggg`GEQ+"O#\- sNFnmrVTsD9r5%x3u1q/m.j,f+^+|yfRQS.&M#Z,nH>kju\[sFCh,m.j-h,f+c*a)^'\&Z%W$U#M N=9wFb)n/k-i,g+c*Q" # #YYYgggggggggggg```FFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPPPGGGDDDDDD `gggU0%Gi,h,f+c*a)^'\'Z%W$T#L B7#kfeeErqq^B:=l.d*b)_(]'Z&Y%S#N!E:#F=;ihg{t@d*d*b)`(]'[&U$ WPMQQQ/U`gggF*!N!b)`(]'[&V$Q"I=>0+XUTW?8Gc)`(^'\'W$S#J>=-(PLKysCb)`(^(\&X%S#L AK83mgfQQQ`gggA' S#^([&W$P!G >%F:7mkjS=7L ^([&X%Q"I >#D74fbawrD`)\'X%R"K!E(VGCQQQ`ggg=%Q"U$P"C=& MECrqqN;6K V$R"E<$G=:nmmuqDY%S#HD)"^RNQQQ`ggg=+&GE#A1,VQOyxxOA=CE"A.)QKItss|zC L&N82ldbQQQ`gggxpnVIFb_^~|WKG\YX}pl{zQQQ`gggQQQ`ggg}}}mmmvvv~~~www{{{mmmQQQ`gggrrrfffqqqqqqzzzssswwwMMMtttuuukkksssrrr}}}{{{mmmyyymmmaaazzzsssaaaoookkkjjjQQQ`ggggggrrrooopppsssyyyllltttWWWaaacccqqqmmmyyy}}}~~~pppmmmRRR___tttaaawwwnnnxxxQQQ`gggpppkkkqqqsssnnnffflllkkk^^^aaa}}}oookkkaaahhh|||iiillluuuYYYhhhtttoooccc{{{mmmkkkQQQ`gggtttyyyQQQ`ggg{{{QQQ`gggWWWxxxxxxxxxxxxxxxwwwdddwwwxxxxxxxxxxxxvvvcccfffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeehhhuuuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiQQQ`ggghhhgggQQQ`gggsss{{{rrrUUUyyyJJJQQQ`gggJJJ222{{{!!!VVVUUU???JJJQQQ`ggg}}}***000{{{555UUUrrrJJJQQQ`gggrrrXXX{{{RRR~~~UUUJJJQQQ`gggzzzxxxUUUGGGQQQ`gggrrr```TTTTTTTTTTTTUUUttteeeTTTTTTTTTTTTSSSlllmmmTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUQQQ`QQQ`QQQ`QQQ`|||}}}}}}}}}}}}}}}}}}||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|||}}}}}}}}}}}}}}}}}}}}}{{{|||{{{||||||{{{}}}{{{||||||{{{}}}{{{||||||{{{}}}{{{||||||{{{}}}{{{|||}}}{{{}}}{{{|||}}}{{{}}}||||||}}}{{{}}}||||||}}}{{{}}}|||{{{}}}{{{||||||{{{}}}{{{|||{{{}}}}}}}}}}}}}}}}}}}}}||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}QQQ`gggOOO__________________KKKZZZllllllllllllllllllllllllllllllllllllZZZgggllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllkkkHHHYYY_______________aaa333bbbjjj{{{yyyllllllzzz{{{kkkMMMyyy|||jjjnnnwww~~~hhhpppvvvhhhqqquuuhhhrrrssshhhtttrrrhhhuuuppphhh~~~wwwoooiiizzzEEEWWW__________________JJJ^^^lllllllllllllllaaaaaalllfff\\\lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmQQQ`gggtttnnn|||tttqqq~~~___jjj}}}sssbbbwwwQQQ`gggssslllrrrttttttwww{{{xxxqqqmmmqqq|||]]]hhhppp{{{ssssssuuubbbsssjjjkkk```{{{www{{{iiimmmuuuddd}}}wwwkkk{{{zzz}}}ooouuutttaaasssQQQ`gggssslllrrriiitttmmmeeeDDDqqqsssqqq|||[[[}}}rrr{{{sssjjjzzzlll{{{|||mmmqqqaaagggZZZ]]]nnnwwwmmmuuu}}}uuuVVVaaakkkjjj}}}cccLLLeeewwwssspppQQQ`gggssslllhhhZZZlllggghhhppphhhLLLrrrqqq|||bbbvvv{{{hhh{{{ssslllmmmhhh]]]jjj___llleeelll|||ooolllmmmggg}}}uuuiiiWWW|||lllmmmuuuiiiiiiRRReeejjjlllVVVfffQQQ`gggssslllqqq|||XXXzzzwww{{{ssspppeee|||QQQ`gggssslllqqq|||\\\www{{{sssQQQ`gggssslllqqq|||]]]nnngggwww{{{ssstttxxxnnnlllkkkyyyQQQ`gggssslllvvvqqq|||]]]cccQQQsssXXXsssqqqeeerrrpppwww{{{sssooozzztttvvv]]]yyyjjjaaauuutttzzzyyy|||vvvqqqsssyyypppmmmuuuQQQuuuQQQ`gggssslllqqq|||]]]ccc|||ooobbbsssTTTxxxqqqwww{{{sssnnnzzzqqqqqqooolllgggsss___yyyuuukkkpppPPP{{{nnn```pppggg}}}QQQ`gggssslllqqq|||]]]WWWttt|||ZZZrrrssssssaaannnwww{{{sssrrr~~~zzzXXXqqqrrrmmmmmmwwwsssrrr{{{uuuqqqkkkiiidddxxxHHHrrrQQQ`gggssslllqqq|||]]]xxxwww{{{ssstttzzziiiQQQ`gggssslllqqq|||]]]www{{{sssQQQ`gggssslllqqq|||]]]www{{{sss[[[}}}ppp___{{{eeexxx|||QQQ`gggssslllqqq|||]]]HHHuuuuuussscccvvv|||qqqwww{{{sssLLLmmmzzzVVVmmmvvvyyyyyykkkkkkjjjcccqqqQQQ`gggssslllqqq|||]]]YYYpppooowwwvvvcccvvvhhhzzztttwww{{{sss```zzzpppqqq^^^NNNooolll{{{QQQ`gggssslllqqq|||]]]GGGmmmkkkrrrqqqwww{{{ssstttxxxooogggllldddwwwbbboooQQQ`gggssslllqqq|||]]]lllwww{{{sss{{{QQQ`gggssslllqqq|||]]]www{{{sssQQQ`gggssslllqqq|||]]]kkk|||}}}www{{{ssstttzzzQQQs%7rh`gggssslllqqq|||]]]cccdddrrr~~~aaaxxxfffqqqqqqwww{{{ssslllnnnvvv}}}ggghhh|||aaayyy~~~iii[[[yyylllwwwQQQyr@`gggssslllqqq|||]]]pppyyycccyyyyyyHHHvvvbbb{{{tttwww{{{ssssssdddzzzxxxqqqnnnqqqnnn[[[zzzaaavvvmmm|||QQQZp*:\7if:6YR c:05$%Hh]rJ0 `gggssslll===$$$qqq|||]]]{{{qqq|||mmmdddpppwww{{{sssqqqqqqpppmmmiiiSSSooommmbbbQQQJ!+#3DnrGa! 1{2P\j/8|eUG6m^^^iiittttttttttttttttttcccsssqqq|||]]]www{{{sssooo{{{QQQ+vDSH1pN-C"G @@@MMMMMM///444::::::::::::::::::111AAAMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMFFFsssqqq|||]]]xxxwwwwww{{{sss|||QQQ2Q_+vOcf<><2P<21p ~x7G9`gggssslll }}}qqq|||]]]{{{wwwvvvuuuwww{{{sss~~~ttt___SSSaaaQQQ_pmR4aW 9=<8=kh4dj21G2GQlP1E4?Hpp9`gggssslll______vvvqqq|||]]]uuuzzzuuulllvvvhhh~~~qqqwww{{{ssskkkaaazzzwwwmmmjjjxxxYYYyyyccc{{{hhhCCCxxxiii{{{fffiiiwwwfffpppllliii~~~iiippp~~~QQQ`gggssslllqqq|||]]]wwwvvvssskkkvvvmmmzzzwww{{{ssswwwiiixxxqqqzzzbbboooVVVrrr}}}EEEzzzccceeerrrqqqooopppUUUkkkjjjwwwQQQ`gggssslllqqq|||]]]xxxyyywww{{{sss|||{{{{{{xxxwww{{{||||||zzzjjjqqqkkk}}}QQQ`gggssslllqqq|||]]]www{{{sssQQQ`gggssslllqqq|||]]]www{{{ssssssQQQ'''bbbppppppOOOVVV[[[[[[[[[[[[[[[[[[RRRcccpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppTTTZZZ[[[[[[[[[[[[[[[^^^KKKppppppppppppppppppppppppiiiwww{{{sss|||qqq]]]OOO{{{zzz```|||wwwzzzqqq}}}zzzsssxxx{{{QQQ???;;;@@@@@@@@@@@@@@@666***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************999@@@@@@@@@@@@>>>000333www{{{ssskkkVVV}}}qqqnnnjjjvvv[[[iiiyyymmm@@@xxxiiillluuuTTTtttggglll{{{___xxxQQQ999IIIKKK~~~www{{{sssvvvqqqtttqqqbbb{{{wwwQQQqqq}}}IIIuuuxxxcccrrrTTThhhvvvrrrNNN}}}mmm}}}^^^vvvQQQ999ZZZiii---AAAjjj]]]>>>\\\EEE___```AAA GGG@@@SSS___bbb)))wwwVVV$$$lll FFF444???;;; LLL:::dddVVV"""XXX_`__a_nonwww{{{ssszzz~~~uuuooo~~~nnnVVVyyysss]]]\\\wwwQQQ999ZZZ{{{nnn{{{{{{QQQAAA~~~'''qqq???dddOOODDD~~~KKK///wwwvvvYYYBBBhhhFFFUUUiiippp,,,jjj***vvv www444zzzwww333sss===sssbbb***999HHHfff???{{{dddggg|||LLL ZZZbbb UUU zzzFFFCCCyyyKKK]]]CCCfffaaa:::111xxx 333UWUQSQwxwwww{{{ssssssQQQ999ZZZ___AAA]]]UUUPPPMMMCCC???zzzlll---NNNmmmEEEVVV??????>>>DDDyyyvvv444PPPUUUJJJ;;;MMMwwwnnnzzz+++HHH???}}}gggSSSooohhh~~~>>>KKK@@@ZZZCCCTTTPPP___vvv>>>GGG^^^^^^VWVBDBwww{{{sssQQQ999ZZZ]]]AAA sssvvvAAAjjj;;;rrraaa[[[<<<>>>wwwPPPfff000,,,,,,eee///```***jjj111ZZZ>>>XXXddd444777ZZZ888MMMCCCPPP;;;NNNIIIKKKbbb{{{ oooYYY555nnn```999???KKK<<>>CCCCCCCCCCCC===,,,+++ccc999ppp((( vwvccc999111JJJ""" GGGnnniiivvv===OOOuuu @@@ TTT ooocccRRRPPP|||"""ooo888]]]ooommmUUU___iiiJJJFFFGGG"""XZX[][aaa ccc999aaaOOO"""^^^,,,~~~>>>ZZZnnniii222xxx}}}///QQQrrr)))222```LLLZZZZZZgggNNNggg>>>ppp===sssWWW(((+++zzz]]]WWWBBB|||EEEvvv!!!VVVVVV:::???mmmttt<<>>999HHH222$$$ 111'''555,,, 222### ///000!!!222$$$555*** +++***&&&@@@ &&&333*** 333$$$111 ---111ddd000:::&&&444ggg111 444///$$$ !!!%%% nnn||||||mmmQQQ ccc999AAA666'''+++GGG cccSSSUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkk@@@555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555777%%%cccQQQnnnTTTcccYYYccccccYYYccccccYYYccccccYYYccccccYYYccccccYYYdTTP1+ccccccYYY]HGP(^)])ccccccYYYrbeV61[)`*e2#sMCqWTsWSk<1ccccccYYY}ecrWHJ[5-\*`*h8+xUNqZWjG@m8,u3!t5$ccccccYYYyw]XfM<@G&T%a/!sKBvYTuZWkB:q3#w3s0m.j3#źccccccYYY}puO40I%U(b5)wUOgeoQMp?3t4"w2s0o.k-h+c3%ccccccYYYa5'T%kD9db}dd|UOl3%z4 v2s1o/m.j,f+c)[3'ccccccYYY^Vx`_z^^q?5y7%x4 v2r0p/m.k-h,e+b)^(Z:2ccccccYYY½iOLQ/(m0y3t1r0p/n.l.i,f+d*a)^'W$pYSccccccYYYb5(Hv2q0o/m.k-i,g+d*b)_(\&Y%O!{wccccccYYY^4(Ev2m.k-i,g,d*b)_(]'[&X%U$L!ccccccYYYW1&P"j-i-g+e*b)_(]'Z&X%V$Q"K A&ccccccYYYQ.$S#f+e*c)`)^'[&Y%V$Q"I D'N?:~ccccccYYYM-$U$c*a)_(\'Z&U$Q"FA%VIEccccccYYYI+#U$_(]'Y%U#L F#K5.sljccccccYYYG*"X%Z&S#O"F#N<6zsqccccccYYY>'!R#I F*!WKGccccccYYYhYUR:2lc`ccccccYYYccccccYYYccccccYYYdddccccccYYYccccccYYYccccccYYYccccccYYYcccccc@@@fffhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhccccccWWWccccccYYY~~~qqqRRRccccccYYY~~~@@@ccccccYYY~~~ccccccYYY~~~ccccccYYY~~~|||IIIQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRccccccYYYrrrlllccccccrrrvvvccccccrrrvvvccccccrrrvvvccccccrrrvvvccccccFFFSSSTTTTTTTTTTTTTTTTTTIIIllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllldddJJJTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTFFFNNNTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTMMMFFFTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTlllrrrvvvccccccXXX___^^^^^^^^^^^^^^^]]]iiippp^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OOOddd^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^QQQ``````^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^rrrvvvukmQ74jKCccccccYYYUUUTTTTTTTTTTTTTTTSSShhhoooTTTVVVYYYXXXUUUTTTTTTTTTTTTVVVVVVTTTTTTTTTTTTTTTTTTVVVXXXTTTVVVXXXTTTTTTTTTTTTTTTTTTaaa___ggg[[[hhhaaaiiiVVVTTTTTTTTTTTTTTT```___TTTJJJ^^^TTTVVVYYYWWWZZZeeeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTHHH^^^WWWXXXYYYYYYVVVTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT{{{rrrvvvobdU5/W(b,vODccccccYYYUUUTTTTTTTTTTTTTTTSSShhhMMM]]]oooTTTTTTZZZ___XXXWWWWWW^^^YYYTTTTTTYYYUUU[[[]]]UUUVVV^^^___[[[]]]VVVVVV]]]TTTJJJ^^^[[[lllZZZ```^^^VVVYYY^^^VVVTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTHHH^^^]]]wwwXXXZZZXXX]]]___[[[TTTXXX^^^XXXTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT{{{rrrvvv^GFT)^)b,l=1wYRmUSkE>k9,ƹccccccYYYUUUTTTTTTTTTTTTTTTSSShhhsss***sss<<^(f+d*a)_(]'Z&W%S#L E G2,f`]ccccccYYY~~~ddd|||XXXHHH@@@bbbFFrrrvvv=_(b)`(^'[&X%R#M!C!J82rkiccccccYYY~~~dddFFrrrvvv;]'^(['W%R"GE([MIccccccYYY~~~dddFFrrrvvv<\'X%N!K#I/(h^\ccccccYYY~~~dddjjkkjjiiiiiijjhhmmFFrrrvvv7Q"EK71jcaccccccYYY~~~dddaattyyrrxkkzmmrrzzFFrrrvvvgTO`QMccccccYYY~~~dddcclllhhhvvv~~~FFrrrvvvccccccYYY~~~dddccoookkkmmmrrrjjjzzzvvvvvv}}}~~~vvvvvv~~~FFrrrvvvccccccYYY~~~dddhhjjjkkkrrr}}}xxxwwwtttzzzoootttooo~~~mmmiii{{{]]]qqqEEElllwwwyyyiiirrryyyxxx||||||ooo}}}pppdddqqq|||ttt}}}vvviiihhh~~~888~~~sssnnn|||oooiiiooo{{{sss}}}ttt~~~tttnnnbbbXXX~~~mmmwwwtttzzzFFrrrvvvccccccYYY~~~dddddiiifff}}}dddxxxggg^^^iiiYYYvvv|||gggkkkiii___zzzrrrUUU~~~sss___pppXXXxxxddd|||fff|||xxxmmmsss|||qqqyyy{{{kkkoooiiiuuusssoooyyyvvvvvvdddkkk{{{hhhkkkjjj^^^rrrddd___hhhzzziiiuuuZZZlllbbb|||yyyqqqqqqxxxvvv[[[uuuqqqjjjmmmaaaxxxFFrrrvvvccccccYYY~~~dddddmmm|||vvvsssttt|||___jjj~~~yyy___tttooommmzzz]]]lllrrrzzzLLLnnnUUUxxxuuulllvvv___wwwbbbwwwssszzzdddZZZ}}}xxxwwwkkkjjj|||lllllljjjwwwooolllvvvlllRRRvvvbbbvvvttttttuuu{{{\\\yyy{{{tttqqqxxxfff}}}FFrrrvvvccccccYYY~~~ddddd|||zzzrrrwwwtttRRRyyyzzz|||yyyXXXbbbFFrrrvvvccccccYYY~~~dddgg~~~yyyttttttuuuFFrrrvvvccccccYYY~~~dddmm|||tttnnnqqqzzzFFrrrGGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbccccccYYY~~~ddd~~~FFrrroooccccccYYY~~~dddFFrrrlllccccccYYY~~~dddFFrrrlllccccccYYY~~~dddwQ6,0UFFrrrlllccccccYYY~~~dddQ2+4-#\FFrrrlllccccccYYY~~~dddV54rT{Z}O)fffqqq```}}}xxxrrr{{{xxxwwwuuupppqqqfffuuu~~~{{{uuuwwwsssyyyzzzpppoooxxxFFrrrlllccccccYYY~~~ddd=+ESyOvC|aMU[ibfMb}}}|||}}}gggpppuuuwwwpppvvvaaattt|||ZZZiiirrrqqqbbb}}}ooogggooofffsssJJJkkkssssssllljjj|||~~~xxxvvvwwwnnngggeeetttuuuvvvxxxkkkgggiiittt===pppyyyhhh~~~yyynnn[[[qqqpppsssvvvssszzzuuussszzzfffaaazzz}}}ppplllvvvtttFFsssmmmccccccYYY~~~ddd5'gPwPvIlbw@k:f}}}dddmmmkkkjjjkkk```iii{{{uuuaaaqqqrrrZZZccclll|||bbbnnnkkkkkk|||vvviii{{{bbb~~~yyytttmmmuuuzzz|||{{{mmmqqqkkknnnaaa^^^{{{ttthhhnnnhhhnnnjjj~~~```qqqggghhhrrr}}}xxxlllooo^^^kkkcccvvvqqqqqqwwwuuu\\\sssqqqjjjkkkbbb{{{FFccccccYYY~~~ddd,&@Hi2bK4eNIMSg&_yMuxxx~~~zzzzzzkkktttyyy{{{lllxxx}}}|||pppxxxwwwpppgggooo\\\yyy|||wwwgggrrrsssYYYuuutttooo|||[[[~~~uuu\\\zzzzzzyyyxxxxxxvvvooowwwuuusss}}}pppnnnssspppnnnrrrttt~~~{{{qqqlllqqqqqqOOO{{{}}}bbb{{{uuuxxxxxx|||yyyvvv^^^wwwxxxwwwzzzlllFFccccccYYY~~~ddd7v&)okPr_~z;v{lllmmm}}}}}}www]]]cccFFccccccYYY~~~dddg|$o!!|-x#x{?uFFccccccYYY~~~dddxLpy%nw9zFFxxxIIIXXXXXXXXXXXXXXXXXXMMMLLL[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\[[\[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ccccccYYY~~~dddnm~FFrrrmmmvvvccccccYYY~~~dddFFrrrllltttl~ccccccYYY~~~ddd;E;OYOFFrrrllltttwnea`a_\[\ZYZc|zccccccYYY~~~dddYiZ.=.ASCTfTepeFFrrrllltttMMLLLLMLMMO_uTiccccccYYY~~~ddddzdOgQnwqR_RPiQZt[FFrrrllltttMMPy_YRTqcZfjccc]]]0//!&*MMMjjjccccccYYY~~~ddds{q`pb{}wwgxh||]]]hhhFFFnnnrrroooDDDggg|||mmmiiiwwwpppjjjNNNeeemmmnnnmmmmmmvvvnnnrrruuunnnRRRvvvwwwqqqFFrrrllltttMTYma`QjtttRRRWWV" >?D"C!7 $cccgggvvvccccccYYY~~~ddduvwwVmXWpX}}}uuupppwwwwwwzzz|||zzzyyyxxxxxxuuuyyytttttt{{{rrrddduuu^^^~~~kkkrrrooonnnyyyVVVqqqxxxqqq|||~~~www___ooolllvvv~~~tttnnnqqqfffwwwggguuuooo~~~IIItttrrrhhh~~~tttWWW{{{jjj~~~uuurrrwww~~~sssmmmqqqwwwuuu~~~~~~gggtttFFrrrllltttO_zZnMMj]]]qqq30//5,'RLJb]ZJDA0 "uuupppvvvmmmccccccYYY~~~dddefWnWt{t\s^f~fwv}}}rrrrrr___qqqqqq}}}vvvzzzYYYnnntttuuupppRRRyyyhhhwwwkkksssZZZfffuuuqqqxxxrrr|||yyykkkmmm\\\XXXpppooottthhhmmmjjjvvvbbbqqqfffmmmzzzuuurrriiilll]]]kkkcccwwwqqqqqqwwwsssWWWsssqqqjjjlllccc{{{FFrrrllltttNNO[cSUicOMjaaa{{{30/:+#TTTmmmdddQKG!uuuwww```ccccccYYY~~~dddNfNblccqcGVF}pppssslll}}}uuuooolllbbb~~~WWWqqqUUUpppQQQrrruuussswwwPPPjjj{{{qqqYYY^^^mmm~~~vvvooopppzzzrrrsssrrrsssuuusssjjjuuurrryyyrrr}}}tttuuujjjpppwwwNNNooobbbqqqvvv}}}}}}rrrlllgggnnn}}}~~~mmmrrrFFrrrllltttMMMMPr^SW]oVMjtttddd30/:+#TTTmmmdddQKG!uuuwwwrrrxk`WzzzccccccYYY~~~dddDUF0?1PeRpqOcPHQGppp}}}mmmsssaaacccFFrrrllltttMQRQZQYjMj|||ccc30/:+#TTTmmmdddQKG!uuuaaasssumd{k`VF?\NENA:^K?{ncccccccYYY~~~ddd^g_;K7 C!@8 K%+YYYYYYbSM\C@`A;jKBxWH`NdN^F8URPSLH3*&;/*)3%"fTIfWr[{rccccccYYY~~~dddFFrrrlllttt{{}0/.  uuuo`YeNI`B9lMAvTD]@50"&%$jiiiXU%'<)%bE;dUq^s]{qccccccYYY~~~dddffFFrrrlllttt{{|sf`nYQ[>6E0)%-**___|kfE42S74cD=rRFyXIaOnWypccccccYYY~~~dddưeϾFFrrrllltttxxxstspponnnlll|{|~vojQE?!# [[[xrUC?Y;7eF>pRE}ZJdOlTfULccccccYYY~~~ddḏTǷ^ttt\\\QQQ|||zzzvvvEEEuuu~~~vvvvvvtttqqqtttMMMrrrfffllltttppprrr}}}ooozzzlll|||IIIvvvpppjjjFFrrrllltttxwwjiiXWVGFF886*)) "!#&&*|||bQK[=7cF9*"!ccccccYYY~~~dddS˸Tttt}}}~~~{{{mmmbbbmmmvvvUUUrrrrrreee}}}mmmnnnkkkvvvPPPyyy___uuukkkrrrnnnmmmuuummmvvvmmm}}}zzzssstttvvvnnntttzzz~~~tttiiikkkooorrrhhh|||kkk|||NNNvvvqqqeeeyyyTTTtttddduuu~~~qqqrrrooommmvvvsssooovvvaaasssFFrrrllltttutvUVXNNNKKJ<:;,+-+**&%$ ('+~gXQ`A:cE;U=35% "QQPccccccYYY~~~dddL òRxxx{{{{{{iiimmmXXXooobbbcccVVViiioooiii\\\wwwWWWppp```vvvkkkrrrWWWhhhtttyyyqqq{{{yyyyyy}}}kkksss```XXXlllxxx|||iiikkkjjjoooeeerrrcccooo~~~kkkiiibbbjjjYYYmmmbbb{{{yyyqqqqqqxxxwwwoooNNNsssqqqkkkmmmccc{{{FFrrrlllttt}}}nnneegYYYMMMLMLmmnuvweZQI3.(NNNccccccYYY~~~dddʰYıNzzztttsssvvv~~~vvv}}}vvvuuuooowwwKKKqqq]]]sssXXXtttvvvwwwWWWfffrrr```]]]|||qqquuupppyyy|||zzztttooowwwwwwwwwrrrwwwQQQqqqbbbuuuuuulllwwwrrroooFFrrrlllttt}~}~z|}y{|{|}z||}{zGDDTTTccccccYYY~~~dddƮ[˹WgggmmmmmmxxxmmmmmmFFrrrllltttrrrbbb|||kkktttuuuqqqccccccYYY~~~dddEðXFFrrrllltttbbbqqqllltttxxx{{{^^^{{{nnn{{{mmm}}}tttuuuqqqrrryyyuuu}}}kkkppp]]]PPPyyyrrrrrrkkk}}}qqqnnnsssxxxwwwmmmtttvvvnnnuuuuuuiiitttrrrxxxvvvxxxyyy>>>ppplllsss{{{tttdddqqqvvvtttccccccYYY~~~dddFFrrrllltttbbb|||]]]qqqwwwYYY^^^YYYuuummmyyywwwXXXmmmUUUcccbbbjjjYYYbbb{{{yyypppuuu```~~~qqq^^^zzzVVVzzzsssjjjtttnnnwwwmmmsssMMMnnnyyyhhhrrr|||{{{uuuvvv}}}VVVcccaaabbbsss\\\___nnnppptttuuu}}}{{{uuu```|||YYYnnnaaayyyccccccYYY~~~dddFFrrrllltttlllxxxcccqqqnnn}}}ccc}}}wwwgggsssttt``````zzztttnnnwwwffftttRRRbbb~~~rrr```{{{cccjjj___rrrvvvwww~~~vvvzzznnnhhhOOO}}}```yyybbbwwwssswwwwwwbbbyyypppwwwccciiieeeYYYnnn{{{~~~tttzzzuuudddnnnpppNNN}}}xxx___rrrccccccYYYdddFFrrrllltttpppbbbpppooollltttYYYaaaccccccYYYVVVdddxwoovihollrFFrrrllltttccccccYYYMMMdddqqq[rxLhnBWaFWd35R11PFFrrrllltttccccccYYYMMMdddkmkomtEI`PccccccYYYMMMddd000000000FFrrrlllttttttiii}}wwwlllsssppprrrkkkeeecccgggtttkkkuuuRRtVF6*&$##-JccccccYYYMMMddd>>>%%%FFrrrlllttt}}}̩zzz~~~}}}pppfffccc}}}|||}}MMkFB4%$#"! >ccccccYYYMMMddd>>>%%%FFrrrmmmrrrmmm~~~vvvlllkkkgggeeeuuuNNNH<'$$-71%#VccccccYYYZZZgggMMMdddtYn>>>%%%FFrrr}}}TTTaaa{{}}wwwpppmmmkkknnnjjjiiieeexxxQQZ85:0#Th]`pq'!73yccccccYYYTTTMMMdddkkkllltYY:pg222222FFrrr>>>eee]]]xxxkkkeeeeeefffdddlllxxxyyyppplllhhhwooQQB?1&1tW}QyPwPxRy^|P!9{ccccccYYYMMMdddxxxDDDTTT[[[jccya^>>iiiuuuvvv~~~uuutttwwwnnnpppcccooowwwzzzpppzzzxxxxxx{{{~~~FFrrr>>>yyy/,ʓlllCCCٶssstttnnnjjjooottttttzzznnnoggFFa=<*$:dPwPwPwPwPwQwjs}sccccccYYYMMMddd~~~|||hhhooooXY:f5,`AA~~~wwwtttHHHppp|||yyy~~~pppWWWqqq___fffsssxxxdddmmm999oooHHHkkkssstttmmmnnn~~~wwwwwwwwwnnnvvvcccssstttwwwyyyssshhhgggwww~~~:::rrr|||iiizzzooo___ooorrrqqqxxxttt~~~sssrrr~~~ccc[[[~~~mmmoootttuuuFFrrr>>>hdppp;;;۸rrruuuooofffdddsssyyy|ttDDN:7'#GSzPwPwPwMqAv\By^Kjav%pwms-i|ccccccYYYMMMddd~~~nnnlllvuutbk9/e?=~~~NNNTTTlllsssiii___yyyjjj\\\cccuuulllRRRuuutttsss===kkkfff|||ddd||||||uuummmtttvvv{{{zzzmmmpppjjjzzz~~~vvvooozzzwwwmmmfffmmmhhhllljjj^^^oooZZZZZZfff{{{sss]]]sss[[[lllccc}}}xxxqqqqqqwwwkkkTTTsssqqqiiilllbbbyyyFFrrr>>>rrr:::eeeuuujjjfffcccooo}}}LL@75&#zkT}PwPwPwLp=sYFfT{o/wvk]LUwwrccccccYYYMMMdddzzz͌KNTVµ~~~oooxxxwww|||ooo}}}}}}]]]wwwooouuuVVVcccvvv{{{nnn\\\qqq[[[qqq999tttuuukkkNNNnnnlllhhhvvv}}}KKKxxxmmmKKKkkkvvvrrrqqqrrrpppcccXXXqqqooorrrwwwhhhgggllliiillliiirrryyyjjjcccqqqiiiNNNtttxxxbbbuuuoooqqqqqqtttrrrooo[[[yyylllqqqpppsss|||ccc{{{FFrrr>>>qqqooo444XXX~~eeedddcccxxx~vvRR:22%"xQyPwPwPwPwLqEfTt8~yZvccccccYYYMMMdddpppyhjZ]ƽwww===www^^^cccFFrrr>>>ccc))){{{~~zzzsssooovvv}}}vnnOO6.1$"x]S{KnD~bD}bD}bD}b@w]blW{x[vccccccYYYMMMdddSQQtkl???FFrrr>>>xxxPPP(((qqqppp~~~}}}kkkxppHH3*/$!=TxDd5dN;nV;oV;oV;oVATKP>H^+U~tfccccccYYYMMMddd???FFrrr>>>nnnkkk111<<>>yyyxxxDDD(((wwwß~~~uuuuuuppptllKKd}$k&x(!!:ZvPtIkHjKmR(wk+dccccccYYYMMMddd???FFrrr>>>mmmnnnFFFeeeص|||yyymmmkkknnnvvvwww}}MM4rm]'#/zQbcslPuu7uul~|sjeccccccYYYMMMddd???FFrrr>>>|||bbbcccmmmuuuxxxvvviiiWWW333)))```߼vvvqqqqqqnnniiippprrrqqqyyy~vvPPabTu h& %&i`x}sj3dccccccYYYMMMdddy???FFrrr>>>\\\CCC>>>>>>;;;,,,&&&>>>ttt޻xxxsssnnnoooooossstttyyy||]]j*_]Py!m"xk#dyccccccYYYMMMdddSz{????FFrrr>>>tttaaaXXXpppffjjgg]]RRLLHHEEGGHHEEEEMMNNHHJJPPLLr?i]Ql`z{qt1mccccccYYYLLLdddoq5qt/vvvllllll???ZZZzzz}}}qqqtttxxxyyyrrrpppqqqjjj{{{zzzwwwsssttt}}}uuuvvvxxxqqqqqqzzzFFrrr>>>eg7^`$Ws"i} rldmeo*i\ccccccYYYoooQQQQQQQQQQQQPPPSSSdddUW/lmTbyzHrs**0,?fff___iii[[[hhhzzzllljjj^^^wwwiiiXXXjjjeeeeeeiii???PPPkkkiiijjjzzzmmm|||ppp}}}~~~zzzpppssslllrrrgggwww}}}}}}uuunnnqqqqqqfffdddiii~~~vvv888lllsss[[[|||wwwkkkMMMkkk{{{cccmmmmmmqqqrrrmmmpppttt```[[[rrrrrriii___pppjjjFFrrr>>>ccccccYYYnnndddhj>RS**(wz%rr&vx'yy+}~5reeexxxhhhkkkzzzTTTTTT{{{lllLLLqqqjjjnnnjjjiii???iii___}}}vvvrrrmmmyyy{{{yyyqqqssslllrrrggg```~~~jjjlllssshhhllljjjzzzaaannnXXX___qqqqqqkkkZZZnnn\\\kkkccc}}}xxxqqqqqqwwwgggOOOsssqqqiiilllbbbzzzFFrrrsssHHH>>>YYYnnnwwwkkkccc~~~}}}cccqqqzzzccccccYYYMMMdddkG]`&jl&zz+J{aaaooo~~~pppcccqqq\\\pppwwwzzzooofffuuuZZZqqqeeekkkrrr???uuu[[[rrrrrrqqq{{{QQQwwwrrrRRRkkk}}}pppqqq{{{|||sss}}}ooossssssuuuuuurrrppplllrrrpppuuuvvvyyyssskkkuuusssNNNrrrbbbtttuuuzzzzzzttt|||rrreeepppzzzzzzqqqnnnFFrrrmmm>>>ttt]]]uuu^^^iiitttiiiwwwuuuaaauuuvvvsss|||nnn}}}xxxtttkkksssfffrrrjjjkkkgggxxxuuuttt|||tttwww|||uuuZZZsssnnnuuuyyykkkrrrgggzzzrrrqqqwwwuuuyyyccctttPPPuuuvvvvvvjjj}}}ssseeerrrnnnpppwwwccccccYYY{{{RRRMMMdddruF:=~-vwctttuuurrr???yyyeeehhhFFrrr>>>______[[[cccdddttt___cccbbbuuuNNNYYYeeerrrxxxjjjaaa^^^nnnssskkk???xxxhhhmmmbbbuuu[[[\\\yyyxxxxxxrrrwwwUUUdddqqqrrraaaqqqppp^^^vvv[[[lllbbb{{{kkkttttttjjjlllccc\\\ZZZ~~~uuukkkrrrpppxxxYYYRRR|||rrrQQQssskkknnnhhhiiiccccccYYY===MMMdddtupgh.U???FFrrr>>>ccc}}}lllzzzkkk|||lllppphhhqqqnnnkkk{{{sss^^^yyyfffBBBbbbkkkYYYmmm{{{qqqooopppqqqppp}}}qqqpppsssqqq]]]www___hhhpppIIInnn}}}___pppoookkkyyyqqqlll~~~cccnnnqqqvvvtttnnnqqqssswwwlllrrreeeYYYpppWWWmmmaaaiiiiiiccccccYYY}}}DDDMMMddd???FFrrr>>>ooo```bbbfffssskkkccccccYYYssssssLLLddd???FFrrr>>>ccccccYYYyyyWWWWWWWWWWWWTTTJJJPPPvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv,,,vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvFFrrr>>>ccccccYYYvvvccc{{{EEEsss||||||||||||||||||||||||||||||||||||||||||||||||FFrrr>>>ccccccYYYmmmmmmxxxMMMoooRRRUUU???RRRoooFFrrr>>>ccccccYYYQQQMMMooo[[['''QQQRRR333uuuUUU???777|||RRRoooFFrrr>>>ccccccYYY===MMMooo222QQQMMM]]]UUU???ggg~~~RRRoooFFrrr>>>ccccccYYYXXXMMMoooRRR+++QQQUUU000nnnUUU???RRRoooFFrrr>>>ccccccYYYLLLoooQQQTTT===QQQoooFFrrr>>>@L@2:35=4PVN{̖yccccccYYYyyyTTTTTTTTTTTTOOO<<>>ƺJcK!+"%2&*;+2A3pKgcccccc}}}>>>FFrrr>>>wxb|c3B4%3&,=-8G:AQDG^I[dZkrjESEjjjGFJ.4;+.70;>)07'-2-39++6))6((6))5,,811=޶Qk>>yzmn]u]PgPaia,;,6F8EVGK^MLgNH_I;P;nwnzyz[YaC[bPqsTux\YzZ{CVf8BY++N--K,,L*+HشQk;[3v^cccmmmEEEFFrrr>>>gygmnXtYTnULgM5H6[dZ8H9L`MPiRZvZToTZgZsrs¾VT\?U_BWePosBYkPzrNknLgn27Q++L--J,,J))FඞNi;[3~H-o\Wcccccc???FFrrr===kwkJ_KOhPLfN=V>U_Xjsi=P=OiQVqWceReRpqqVT\)+H,-M/2O+-P.0L-/O-.N--L**N--K++L('DְPm=Z5~J+M.#j[WcccDDDvvvvvvvvvvvvvvvvvvvvvvvvvvvvvviiivvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv+++vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvooo|||vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvZZZ FFrrriiiYYYHHHHHHHHHHHHFFFIIIdmcEYF>U@fkdGUGScSYiX\m\ZiZs{spyqpwonmlVT\?R]CXdLgoNrrHagNjo=L_6=V,,M..L--K()E~~~ТQi:[2I+I*#E.)ccc+ + + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ Frrrjjjwwwwwwwwwwwwwwwwwwpppzzz|rxrdndN_OK`LHZIqrqVT\D]cOprZ}Rx{`ZzLgo5=U**N,,K++L('DծPkS4;U7@X./M++O--L,,N))FҪQj;[3~I+L-#C'!H73hhhcccNN@ F.2FrrrllltttwxklQjQ\i\TeUOhORmT[w\`{aMcL^]a~?>E4>R6?X?N`:K^9DXP>*;*.<-onqTSX;;K:9I66D00C22@31D64F99H;;M??NBBREETqrvMKmKJgggccc `W!Pbt6 P(e$#&Frrrlllttt^q^ - $1%5E7BSDLcMRjQdmcǹz|XqXFXG.>/T`T9(*cCEwwϼgggcccFrrrllltttT^T$-;-=K?I]KSnTYvZjvjĶhiNgP8H9,7*dddWUUgggcccFrrrlllttt.7-/?/BSELbNdeuwx|wijRjRCSE0?2\e\{z{llk^]^ONOBAA667//.***('(-,/wwx}}~gggcccFrrrlllttt~AKAAUBJ_Jc}dpr{{}yyI]J@PB;H:`i`~~iijccc_^^YXXGFF=<<321++)!! !!#BADddggggcccFrrrlllttt^l^mnm~~jllUVUMML5450/1$#$ %%$99;ggh[[[YYYYYYYYYYYYYYYPPPIHHIIIIHHIIHXXXYYYYYYYYYYYYHHHmmmcccl9H:Frrrllltttzzzsuuvwwyzz{|}{}~ccc + Frrrppp|||tuvccc j |{&~p^fAWl(,W oAj,FrrrHHHsss SSShhh{{{^^^DDDdddkkk@@@jjj___ggg\\\ccc}}}uuuaaaccc sq= },\ gC: %D]KaR3 O|||mmm}}};;;}}}&&&;;;hhhwww{{{xxxzzzzzzrrrwww~~~zzzyyy~~~pppoooooovvv___~~~mmmwwwxxxiiihhhrrrcccrrruuuaaatttwwwccc{{{ccczzzsssooouuudddwwwvvvXXXiii|||xxxiiilllxxxZZZ}}}www}}}kkkrrrccc{{{ccc l5]D ~D]YfPg666GGGGGG000666PPPDDDEEE:::777GGG;;;hhhtttUUUfffhhhqqq{{{iiisss```ffffffkkk???yyyxxxiiimmmmmmXXXeeewwwpppooopppnnnbbbtttlll\\\wwwcccwwweee[[[ccciiiyyydddkkkdddeeebbbrrriii|||oooqqqrrrhhhKKK|||vvvsss{{{ccc FS5 Mn4]DWGD]+@8#-i+UwFrrr&&&>>>999KKK}}}mmmllliiiwwwrrrnnn~~~iiiQQQyyydddmmmZZZjjjvvv~~~nnnzzzxxxzzzwwwmmm|||dddlll}}}mmmxxxnnnooofff\\\jjjvvvyyydddmmmooommm|||xxx|||lll___eeesssaaatttzzz|||uuuwwwlllZZZxxx\\\oooZZZlllccc>DtpQr-?,! h!,,pp) Z bzzpFrrrKKKbbb>>>YYYYYYYYYxxxyyyrrrgggyyy{{{cccFrrr===cccFrrriii\\\MMMMMMMMMMMMIIIHHHUUUccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddcccFrrrSSS{{{cccFrrrmmmTTTTTTzzz>>>yyycccFrrrggg |||>>>yyycccFrrr+++<<<>>>yyycccFrrrooo{{{>>>yyycccFrrr===yyycccFrrrkkk\\\HHHHHHHHHHHHAAA===zzzcccFcccFwww[[[FjjjFccc FKKKcccccccccccccccccccccccccccccc]]]hhhcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccXXXmmmcccccccccccccccccccccccccccccc999fZ b@(R/root/Desktop/Guide/views.tiff @HHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Desktop.rtfd/0000755000175000001440000000000013214346542025117 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Desktop.rtfd/FileManager.tiff0000644000175000001440000002244413214346542030151 0ustar multixusersII*$qQuyy}yy}yy}qQuaIeaAeaAeqQuy]my]myy}qQuqQuIiqQuIiaAeIiaAeaIeyy}yy}aIeqQuaIeqQuaIeaAeaAeaAeAiaAeaAeaAeaAiqQuyy}yy}qQuqQuqQuaIeqQuIiqQueaAeeeeeAieeaAeaIeyy}yy}qQuqQuqQuaIeqQuaAeqQuaAeaAeeaAeAieAieAiiiiAiiaAeyqqyy}qQuaIeqQuqQuqQuaIeqQuaIeqQuIiqQueaAeAieAieAieAqiaiAqeAiea,yqqaIeaAeaIeaAeaAeaAeaAeaAeeeAieAieAiiiiaqaqaq aIeqQuIiqQueaAeeaAeAieAieAieAqiaiaia(qQuaIeaAeeeAieiiiiiiaqaq  aIeaAeeeAiiAqiaiaia( yqq    aAeAieAiiaiaqyqqii m        eeAiiayqqiii    ,     ,i(yqqii  ii ((yqqyqq          qAii ,ii yqqIi  ,       ((yqqii  ii ((aayqq      yqqii ,im (yqqIi       , ii (aayqq     qAqAiyqqIiqA,   yqq((,i(qAqA( yqqmqA,aAi(qAyqqmqA  AiqQuqA yqqmqA  (yqq,(    Ii           a      (a(      (aaa          (aa       aaaaaaeqQu       aaaayy}i    aaaaaaaqqyy}        ( aaaaaaaaay]m       (,aaaaaaqaqqaayy}     Aq maaaaaaqaqa(yy}   (( aaaqaqaqaiai(yy}       aaaqaqaqaqa(y]m    (aa qaqaiaeae(yy}  qAaa  qaqaiiei(yy}    aaIi  aaeaeAqeyy}  ,,aaIi  aeiei(y]m , qAaaIi, eeeyy}  aaIiyqq  ee(yy} (aaaa  yy} aaaAi,( (aaaayqq  aaaaqQu00$  V$%*%R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace/Icons/FileManager.tiffgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Desktop.rtfd/TXT.rtf0000644000175000001440000000111113214346542026305 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Desktop help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \cf0{{\NeXTGraphic FileManager.tiff \width960 \height960} \uc0 \u-4 }}gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Dock.rtfd/0000755000175000001440000000000013214346542024366 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Dock.rtfd/TXT.rtf0000644000175000001440000000225713214346542025570 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36\b \uc0 The Dock \par \fs24 \uc0 \par \fs36 \uc0 \fs24\b0 \uc0 The Dock is a place to store applications that you want to be ready at hand. \par \fs36\b \uc0 \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\qc \uc0 \cf0{{\NeXTGraphic dock.tiff \width2180 \height4000} \uc0 \u-4 }\fs24\cf1 \uc0 \par \pard\ql\pard\tx0\li100\ql \uc0 \par \b0 \uc0 Applications you start will also be visible at the Dock. Started applications will not have the \rquote ...\rquote marker, while the not started applications have the \rquote ...\rquote marker.\par To make an application the active one you can double click its icon on the Dock. Hidden application are shown on the Dock with a single \rquote .\rquote in their icon. By double clicking this icon the application gets unhidden and becobes the active one.\par \par \cf0\b \uc0 \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par \pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \tab }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Dock.rtfd/dock.tiff0000644000175000001440000025276213214346542026176 0ustar multixusersII*Tp܂p܂p܂p܂p܂p܂p܂p܂~p܂wyvxt{uvp܂~t{s|qznznrnvrzpu|qp܂(.0ade|z|s|s|qyownqeoen^eBD\ \nxp܂&(07;ggsz{w~qtqspsmtdm^gKNa!  #!np܂#"(&($"+-7>Hnp|{u~pzjtiqbjDI[(  ED:wp܂(-*1-3&/7'/>(04EFObctquhmGI]"  C@>qpeWGrdQrh_Nchp܂ ,.,4-=(29*2G+3E+3C)6C@BL"$+ 8/&|atgaHvgQ`_\IDA=qt/5>>LSp܂$19*2<*2A-7F3E;BL;BR>CX./@  )\XRbYBxn[s[VGMGDnko)+6!'%'+!-7->KSp܂49D49D0C7tp]#&/BNSp܂4BM5BM8BP?AXBBYCCYEI`EI`55J =8<>9:KFA510;77,3/!%/.$+-SZS_]L%$>MSp܂4CM5CODDVCCYEEZGKcGLdINf77N;?O_exDHQ0./;88'#+/*xoh|rne0:8$,7%3@LSp܂;BSAEWAD\GF[GKcIKcLHfMMm66M LKUCG>0/0&# &"+&+&/*2$5F6>K!.4BNYp܂=D[AG_GJbFKbGLdMPmNNlNOn9:R&-0* #EDH!+.!)*4$-@&1B)6L1AK?BY".;BOYp܂FLaHKcKOkKOkLOlQYqVZbQZw9@X#+3'0>'+1%5 09&0G,4I3AK5CVCD\(*=HTVp܂IMfIOhJPjOSoPWpS\sR\wQ[{@DZ+ $,<.0B(28'=&0@*3I,W!"\lpp܂q4DOFPc`fakenenfoPVols}:@X+3I(7N5BO5CV8BY>I^)9C DFFp܂yES_7?NWb|cmkqotUXtln9@Y+7M7?G4CQ=AQ56F#( /;6ZX`p܂[q}2EFPWehnptUXtly~=D[3?I4AK36J%.!.25EIHzrn}p܂?QV6FYhhXZ{koAGY&2G(3)''NMPkdmp܂}m3BP4;KX]n&#/ %.-0IGOgae~p܂p9A: "*#URSoel~~p܂p܂p܂p܂p܂p܂p܂p܂p܂p܂p܂v~Jp܂n|w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~w~u|naKKp܂itxջ߁FMg8p܂itxԵMMe8Z2p܂itxտLLc8\2^2p܂itxz||uww~Ħ~IHb8Z5Z2O.p܂itxuwwwyyuwwּ߃NKe8[2Z4L.I+#p܂itxֽށFMg9Z2_2K*G,"@*"p܂itxί߂MNe9Z2Z8L.F,"@)">&"p܂itxɱކLLd9\2^2P.J+#@*">)"OORp܂itxz||uww}ͮ}IHc8Z5Z3O.C%@*"=%KKOp܂itxwyy׾ރOKf9[2Z4M.J+#@*"=""-((\mvp܂itx݀FMh9Z2_2K+H-"@*"="G/%!#\nwp܂itxԷފbNf9Z2Z8M.G,"@)">&"aF9!#\nwp܂itxԸ榙d9\2^2P.J,#@*">)"P0(!#\nwp܂itxϥ萍zzR9D%@*"=%_>7!#\nwp܂itxݝ囕{ROS6/B+$?##Z<4Ŀ!#\nwp܂itxЕ䑐ς}wLLD.2E2*M2,W;1!#\nwp܂itxþ䧘왚z|tOKG24N38b?Cil!#\nwp܂itxΖ،rpnNIA50b?BUU!#\nwp܂itxbddlsZ\]=@W;7\^Ÿ!#\nwp܂itxvxx/00@*,M34vQN–!#\nwp܂itx " vin!#\nwp܂itx%''BDD!#\nwp܂itxu~~y!#\nwp܂itx!#\nwp܂isx!#\nwp܂t"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"$&-0\nwp܂n^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^py^pyj~p܂p܂ 6B>p܂Tdk '* '*5@E|A<GWp܂RbjG`46 <-)261:?RbjGqVpbCp܂RbjGc*uFI9p܂dw1:?1:?FSYGW*u?  p܂GW*u@lUgc<p܂     p܂3lp܂.qp܂wcM4jcp܂wcP7e7&N=8OIp܂yfL3e7&D3.sQPOp܂wdN6a5%G60tckd7}[ fftJGj rtWHp܂zgP7i9'C1,pE|  ! tG;g[Sx |p܂{l~D.a5%C1,w> ygnJT@@hl#r p܂xorP.$H72qf< ePsS 9sSMRp܂ffsaipywtwKe} m#g_ O74q q$p܂ggucr}p܂RXbEZp܂SZdLSp܂p}SZd2p܂zw}y{}}S[de: p܂eaXKU]f|e:U'o0p܂{caD6_Vg\utmkzZdmQe5<kFAev+j4p܂{ca@3B4E7G8~v~xwsq[ZfV>;@MIQdcpRQ[E:?U-'^/%l3(n4)i3'd0%`.$\-#Z0(u}#"s p܂HHMYT^K@EH10U0*Y-&Z-%d0&m4(k3(e0%`.$]-#Z+!X/'u}5)#w'p܂ggh^]fJJPN<:V0+\.&a1'd2'f2(i3)k3(m4(h1&b/$^-$[,"W*!W/&u}C\BC?QD@Q5>]T?[E .`$;Z$1'SE y&p܂fffRRTRRU]OQZ:7y@4W;5g3)h4)r8,v9,v9,t8,p5*j3'd0%_-$[,"X*!U) U-&u}NG/qeoofmhPAKG8@^B:|HP.p܂z{bbmddp\]df?8E7M>`UqB8n6+s8+|;/z;.v9,r6*m4)h2'b/%]-#Y+!U* S(U-&u} P\:w L\F]Bw)f9%f9LRp܂\]i]eocr|~[_abgloF?UCWDJ:w:.{;.|#$\RuJ]BgBv2f9c<p܂~uz}y~lk[JUB~=0z;-v9-r6*m4)i2'e1&_.$\,#Y+"V* W1*X60Z;6wG859@_Bxf9"}p܂QCm5*c0&e1&fE@gNMfNLjXXqotqpuqpuqpuv}yy$'vat}Ygnrk( k}c.FSZQahcv De,9p܂wh u6Ky ktL0KIk`Tp܂- *'!!Me3l0  bEZ p܂<~>*w ,r3lH)\sfb?DZ7 yp܂' 3*u X`1y !Qu &b=Bizr $4p܂cI[7kshuNShn9=&y] hnrp܂{y|p܂jZ[KDHRX}p܂}eHB>5-)('(0Dup܂PFD@2($#""! !!(Dp܂MCCB4&$##""! "Ep܂LCBB3&$$##"! !Hp܂vTSN>($$#"%,2*!5~gp܂:10-zH2$$#Ih`ablt7?>)$"1prXPwPwPwPwPwPwPwS{e+j.j|p܂d==?5%$$GePwPwPwPwPwPwPwPwPwTyBtkvvp܂`<;S^5U|rzpi8np܂:'x&u,+"!!:V{PwPwDeAaPvPwPwPwPwYkn4~}g^ndp܂W$o#l'x1$!! tVRuPwPwEfFhOuPwNtU~q?"}{RLrxp܂'sv eu d,& %~JOpNtOuGi@}_IlPfeA%}{|qV2[p܂Mqal[~#o*!   T]SV'hp܂Ӝpۊ[eBLQ2J Z ]eg("v.!W+p܂}wՊnvJV4A$,3> Z ^b n/"r2'5!x#]poe+a5Rrp܂mÄp~\j^fW_53,.(@pQ?]f#s3#s3(~7(0''^3G U +g6{p܂uhkzYb8=28#/)2#* = y3Q9al-%v5(0'.#$ (%.i=p܂Xp?CIT09)'+(%D |lLo('2#+)&(+&)_dp܂@N'z)6=%) ($$$JZnx~*U1 o*!)$-$('00?$'bqsp܂~p(g2n&$&!)!)wF'f^|wM# '!()-,8%3c!p܂_x3j>g (oSl93J [bYhdU&nh5rCWypp܂`yt[}uql0b>,Y<|\u.t;p!%+4Y={p܂V{n1W1boݩy_t+6FiUp}m*p6u&#"*&lep܂e:F6xsqi[hJRkw8vHu,(!) *!&"*"Y-p܂d~e|ct\mPZNW3@07-c9x)v1!+"*!*%,'")())#KbXp܂XdHX>IJ.0!('~5bW FlZp܂C{Tj  G_ g,%w5(2 &")mSjhsZb8;(,h$ W =p܂zO* Z f% l0'4')1=tna{DO@F%.&%y2b6Zpnp܂FhT.]g%#r3#3&($05A+m)zΧuo~LV0* &'3!i-T (B,tp܂LqaNd%#3 *,-HRcx2uBy6wB_g27$*(5l*H#L-p܂b}8Q;X Y "\"n&;c?T"zmi{99@C :#!9![rnup܂~au/5J[_p܂QaJa_p܂iJo_p܂p܂p܂p܂p܂mU UUU@UUU(R/root/Desktop/Guide/dock.tiffCreated with The GIMPmGmmm HHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Dock.rtfd/dummy.tiff0000644000175000001440000000503213214346542026373 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Fiend.rtfd/0000755000175000001440000000000013214346542024533 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Fiend.rtfd/Fiend-Develop.tiff0000644000175000001440000007320413214346542030034 0ustar multixusersII*8u000kkv\\eijt <>D116GGO""%ffp449??F&&*77=~~ddoddmeemjjs{{vveen``ihhqhhrkkunny^^gZZceeowwXXa~~ccn[[eooz339SS]ZZcuu}}}}ccn88>}}}}||bbm~~}}||||zzaal~~}}||{{{{zz``k~~}}||{{zzzzyy^_j~~}}||{{zzzzyyxx]^i~~}}||{{zzzzyyxxww\]h~~||||{{zzyyyyxxvvvv\\g~~||{{{{zzyyyyxxvvuuuuZ[f~~}}||{{{{zzyyxxxxvvuuuuttYZd~~}}||{{zzzzyyxxwwvvuuttttssXXc~~}}||{{zzzzyyxxwwvvuuttttssrrWWb~~}}||{{zzzzyyxxwwvvuuttttssrrqqVVb~~||||{{zzyyyyxxwwvvuuttssssrrqqppUUa~~~~}}{{{{zzyyxxxxwwuuuuttttrrrrqqooooTT`~~~~}}{{zzzzzzxxxxwwvvttttttrrrrqqppoo~oo~SS^~~}}||{{zzzzyyxxwwvvuuttttssrrqqqqoooo~oo~mm}RR] ~~}}||{{zzzzyyxxwwwwuuttttssrrqqqqoooo~nn}mm}ll|QQ\ ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{OP[ ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{jjzNOZ ~~~~}}{{zzzzzzxxxxwwvvuuttttrrrrqqppoooo~nn}mm|ll|kk{jjziiyMNY ~~}}}}||zzzzzzyywwwwvvttttttssqqqqppoo~oo~nn}mm|kk{kk{jjziiyiixMMX }}||||zzzzzzyywwvvvvttttttssqqqqppoonn}nn}mm|kk{kk{jjziiyhhwhhwLLW ~~}}||{{zzzzyyxxwwvvvvttttttrrqqppppoo~nn}nn}ll|kk{jjzjjziixhhwhhwffvJJV ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppppoo~nn}mm|ll|kk{jjzjjziixhhwggwggweeuIIU ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{jjziiyiixhhwggwffveeuddtHHS ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{jjziiyiixhhwggwffveeuddtccsGGS }}}}||{{zzzzyywwwwvvuuttttssqqqqppoonn}nn}mm|ll|kk{jjziiyiixhhwggwffveeuddtccsccsFGR }}||||{{zzzzyywwvvvvuuttttssrrppppoonn}nn}mm|ll|jjzjjziiyhhwhhwggwffveeuddtccsbbrbbrEEQ ~~||{{{{zzyyyyxxvvuuuuttssssrrppoooonn~mm|mm|QI ~~}}}}{{zzzzyyxxwwwwuuttttssrrrrqqoooo~oo~nn}ll|ll|kk{iiyiixiixhhwffvffv~ccsccs``p__o^^n]]m]]m\\lZZjZZj<=H ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~oo~mm|ll|kk{kk{iiyiixiixggwffveeueeuccsccsccsaaq``p__o__o^^n]]m]]m\\lZZjZZjYYj;;G ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{jjziiyiixhhwggwffveeuddtccsccsbbraaq``p__o__o^^n]]m\\l[[kZZjYYjYYjXXh:;F hitggrfgqefpdepcdobcmaal``k_`j^^i]^h\\g[\gZZeYYdXXdWWbVVaUV`TT_SS_QR^QQ\PP[NOZNNYMMXLLWJKVIJUHITHHSGGSEFQDDPCCOBCNABM@AL?@K>?J==I<)%$$#"")/7.'y2zHp~~}}||{{zzzzyyxx]^it5..,}2wJ6&$$"2ra`afchtO|)$~8F-zQ}~~}}||{{zzzzyyxxww\]hZ>>?<+2D=%!0q_ZU~QxT}W]qp*z!oB>%v?v{v||||{{zzyyyyxxvvvv\\gyF?>A;'$(3~=khVQyPwPwPwPwPwQxU{_n[yJ+{spTw{z{{zzyyyyxxvvuuuuZ[fU>>>A3&%#!{N}\PwPwPwPwPwPwPwPwPwPwPw]~Azc'`yvzzyyxxwwvvuuuuttYZdA====,%$$&[PwPwPwPwPwPwPwPwPwPwPwQxe|e]xtyyxxwwvvuuttttssXXc?<;<7)$$$"ds|RyPwPwPwPwPwPwPwPwPwPwPwPwWv6me}{zuuttttssrrWWbf;::<3&$$#~!w]PwPwPwPwPwPwPwPwLoIlIlIlIlPm|>||zj~~ttttssrrqqVVbM988=0%$$!qQ{]PwPwPwPwPwPwPwPw2VD)?4-G;-G;-G;1Dkhynn}mm|kk{kk{jjziiyhhwhhwLLW }>~#kz"hz"i,."! :]stOtPvPwOvFgGiOvNtJhmOu:~|y^W[(Ymj{ll|kk{jjzjjziixhhwhhwffvJJV _(qt cq`~$n-$ !0bgtNmJnMrKo8mS>x\@iYgGm6%|{|rXRjMpml|kk{jjzjjziixhhwggwggweeuIIU w;|p`l\n^'*! 0Ji^wTii@p[TWcpJu@c]ri~|yd\\*[nb{kk{jjziiyiixhhwggwffveeuddtHHS Mo _gXfWy"k.%%.7x2s;4*UOF @pg}{|qE@_?dlj|jjziiyiixhhwggwffveeuddtccsGGS ru0kcTaRdV&y)!u k%z[Tpg}v_WL-NfctjjziiyiixhhwggwffveeuddtccsccsFGR b_Q]O\OgZ'' qg!~x~ze]LHl[xjjziiyhhwhhwggwffvddtddtccsbbrbbrEEQ {q-h[MZM[Nl_'%pf |jbQKl>oiiyiiyhhxggwggwffvddtddtccsccsaaqaaqDDP ~kn3h[NVIWKdX}$s"ndykbZ!WfRpjgyiiyhhwggwggwffvddtccsccsbbraaqaaq``pBCN ~~}}psDra#WVJSGZNrh!{kbwrhbZY(YhRriiyiixhhwggwffveeuddtccsccsbbraaq``p``p^^nBBM ~~}}||{{{tw\~i6eYMXKZOcXtj~ t{y`Wy~tof\U^Xl6lm\xiiyiixhhwggwffveeuddtccsccsbbraaq``p__o^^n^^nAAL ~~}}||{{zzzzyxwogQl_CaV.QT K] R_ Uq!ende]QJZTUPX)VkEpi]vmd{iiyiixhhwggwffveeuddtccsccsbbraaq``p__o^^n^^n]]m?@K ~~||{{{{zzyyyyxxvvvvuuttmcyePneOmdNldNlcMkcMjbLjiavll|jjzjjziiyiixggwggwffvddtddtccsccsaaqaaq``p__o^^n^^n]]m\\l??J ~~~~||{{{{zzyyyyxxvvuuuuttssssrrppoooooo~mm|mm|ll|kk{iiyiiyiixggwggwffveeuccsccsccsaaqaaq``p__o^^n^^n]]m\\l[[k=>I ~~}}}}{{zzzzyyxxwwwwuuttttssrrrrqqoooo~oo~nn}ll|ll|kk{iiyiixiixhhwffvffveeuccsccsccsbbr``p``p__o^^n]]m]]m\\lZZjZZj<=H ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~oo~mm|ll|kk{kk{iiyiixiixggwffveeueeuccsccsccsaaq``p__o__o^^n]]m]]m\\lZZjZZjYYj;;G ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{jjziiyiixhhwggwffveeuddtccsccsbbraaq``p__o__o^^n]]m\\l[[kZZjYYjYYjXXh:;F hitggrfgqefpdepcdobcmaal``k_`j^^i]^h\\g[\gZZeYYdXXdWWbVVaUV`TT_SS_QR^QQ\PP[NOZNNYMMXLLWJKVIJUHITHHSGGSEFQDDPCCOBCNABM@AL?@K>?J==I<=DCAI<.,U-%a0&u7,s7+p6*m4)i3'e1%]1+fXaoo~nn}mm|ll|kk{jjziiyMNY joC5D5E6F7VI̳gggJIKKIPfdqKCJP-(X* c0%o5)r7*n5)j3(g1&c/%\0*fX`nn}mm|kk{kk{jjziiyiixMMX ~inD6D5E6G8aSxxx;;r9.n5*w:-}UCVCL;?2t8,}I ~~}}}}{{zzzzyyxxwwwwuuttttssrrrrqqoooo~oo~nn}ll|ll|kk{iiyiixiixhhwffvffveeuccsccsccsbbr``p``p__o^^n]]m]]m\\lZZjZZj<=H ~~}}||{{zzzzyyxxwwvvuuttttssrrqqqqoooo~oo~mm|ll|kk{kk{iiyiixiixggwffveeueeuccsccsccsaaq``p__o__o^^n]]m]]m\\lZZjZZjYYj;;G ~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoooo~nn}mm|ll|kk{jjziiyiixhhwggwffveeuddtccsccsbbraaq``p__o__o^^n]]m\\l[[kZZjYYjYYjXXh:;F hitggrfgqefpdepcdobcmaal``k_`j^^i]^h\\g[\gZZeYYdXXdWWbVVaUV`TT_SS_QR^QQ\PP[NOZNNYMMXLLWJKVIJUHITHHSGGSEFQDDPCCOBCNABM@AL?@K>?J==I<>> (((ZZZ%%%TTTTTTCXXX"""Yn|pkkkTTT222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222zPwww444z'?} YlN$9Laqz7=wUf'[1IxTz/y%O@@@j>EeBBBcccccccccWWWz/)0Y@j4A85 ;oootttlllwwwBBB666TTTsss)))))),,,(6o+Y1Z.:` }t f oootttlllwwwkkkxxx```RRRVVVBBBwwwTTTRRR{{{HHH```bbbSSSXXX...ZZZLLLoooOOOVVV///===ooo'''999999$$$wwwkkkxxx|||pppBBBMMMJJJ999999```uuuiiiyyyeeeBBBCCCSSSDDD999///oootttlllwwwkkkxxxrrryyyBBB+++NNNMMMTTTHHH```iii???OOOLLLxxxOOO999EEERRR===oootttlllwwwkkkxxx^^^gggBBB```yyyHHH```dddOOO999jjjvvv///]]]BSYYYyyyqqqjjj\\\ttt[[[iiixxxllliiibbbkkk=rpY 0R@+(<3jN>oR "Yl4_sUNUNn4#@e\Z~E$=[Z"opntf;0V{ g&Kz=.KPr^eeeKKK------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ z/*yC"BxDEeQZKg }}}666y3*jm"(e71MTDh*^SK^%V<*E} L~Qz;C1V-}Kx+ ) ,,0.#  .*-. ## -K{-WWW[[[qqqvvveeeK^ooo```uuufffhhhtttyyyrrrPPPccc oootttTTTuuuZZZXXXvvv555bbbQQQVVV___RRR]]]ZZZVVVTTTkkkqqqZZZWWW|||]]]999VVVUUUQQQ]]]222```XXXYYYlllNNNUUU\\\UUUKKK///hhhccchhh\\\UUUfff|||zzz{{{YYYXXXppp===___\\\ooo'''888666FFFCCC888>>>eeeuuuuuu___{{{vvv___KKKGGGUUU999VVVUUULLLLLLLLLNNNfff___cccMMMZZZhhhFFFDDD===ooottt}}}qqq...XXXXXX[[[999CCCfff}}}mmm~~~UUUXXXggg222XXXXXXbbb]]]<<>>888fffsssWWWBBB^^^zzz>>>LLLvvvMMMBBBWWWUUUNNN666eeegggdddkkkUUUAAA999999@@@[[[uuuWWWpppZZZxxxuuuccc$"(poootttmmm333bbbcccfff999ggg|||___dddWWWHHHHHHaaa999AAA```dddbbbXXXZZZUUUVVV999^^^UUUdddbbb]]]999999999\\\eee```&&&jjjeeeOOO]]]dddbbbuuunnn-}ooottt^^^iiisssppp999ggg|||{{{___aaaGGGHHHaaa999}}}hhhttt[[[ssszzzbbbTTTUUUVVV999bbb{{{]]]999JJJ}}}///LLLxxxwww&&&OOOooodddxxxuuunnn739_}3= 4;&!-: 09'){{{nnnzzz}}}lllzzzlllmmm}}}mmmzzzlll}}}zzzfffhhhcccccclll{{{vvvpppkkkYy} lus<}{Vs~6 C}}}aaaQhl-}(<19<  >=fff\io@x5},/tWC<m rr|||1i?n}lXMP<mlK`JB;CZZZ888"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" D KA]42(]9H(_O9H,D FcYQU 999]]]999ggg|||ddd`???ooo444\\\|||999yyyyyyzzz;JJ'ZZZQQQjjjbbbeee YYYmmm333|||999nnnqqqjjjaaa^^^YYY]]]mmm^^^,,,nnn***fffI\\\oooLLL444LLL]]]|||999xxxJJJnnnkkk[[[yyyddd^^^KKK+++wwwaaaLLLLLLLLLLLLLLLLLLLLLLLLLL1<S$c5Np j;b[aB vvv)))>>>222PPPJJJ555III___|||999dddkkklll<<'Y8qG8qG0Ef/?8sG5ATMA >&aff!t6[Tz yd\t't%)hk-A2jPYA% N)28#zG(Yt (M)1:\$B@K`ydf{gzcN$ Wv;P}-o#gP8 nqGC ?iO:l3 z? 3~eN%)'i#KmbylM8 q~G>8mK:~%vtG64`t 0ZKnZq{b!8hGXp8rzb :~50ZWkh8jVewO+lXa;ItXkJQ]'3XO>RcX3R]'3? l3aK `T%=J&]dTK[dW" JWYcPA J<<Xrq mfIJJ.3nY 3NJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 脄YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@@@YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYkkk$$$[[[%%%[[[OOO%%%[[[qqqGGGGGGGGGGGGGGGGGGjjjsss<<<((([[[|||""" %%%555 PPPfgfYYY!!!%%%[[[HHH===sssttt ggg000FFF---+++ 222000gggrrrNNNdddGGG444...www444---555]]]666,,,[[[666WWW9;9Z\Z<>>>---uuuJJJ"""999vvv>>>:::777BBBlll$$$ttt+++RRR<<<555jjj666uuusss333ssszzzhhhLLLTTTlll???333[[[RRR;;;|||wwwHHHmmmUUUCCCtttWWWiii ^^^===kkkXXX>>>NNN ...BBB{{{575SUS!!!%%%[[[HHH===ssswww+++???EEEvvv999 vvv)))??????888DDDLLLHHHCCCEEEAAAiii'''ZZZVVVhhhAAA444WWWUUUkkkMMM999WWW(((SSS:::777JJJTTT(((ZZZ ttt666YYYRRR<<<555hhh111 ===444MMM###hhh(((ggglll???333[[[555 333@@@HHH+++eeeiii PPP}}}888EEEUUU))) eee""" ppp686WZW!!!%%%[[[HHH===ssswww555<<<\\\ gggnnn<<<///DDD--- ???EEEEEE,,,bbb~~~yyyyyy666$$$$$$666NNN yyyyyy(((999888TTT:::777jjjrrr,,,WWWttt RRR:::CCC UUU888===444yyyxxxhhh 999lll???333[[[+++YYYjjjsss 888iii)))yyyyyyhhhiiiggg=?=TVT797Y[Y!!!%%%[[[HHH===sssTTTwwwHHHuuuWWWsssFFFXXXsss gggnnn!!!222222 kkkDDD---RRR,,,EEE,,,bbb~~~YYYooo+++mmmFFF```$$$JJJjjjbbb000uuu444999888TTT:::777222kkk???000000222{{{ttt888RRR(((***nnn]]]???uuuGGG999ddd LLL888hhh```jjj>>>xxx???333[[[ZZZrrrxxxTTTmmmjjj???uuu333555WWW444zzz&&&///mmm>>>AAA &&&FFFyyybbbaaaEEE=?=RTR797Z\Z!!!%%%[[[kkk==================dddsssCCCLLLjjjqqqyyy===yyyBBBFFFYYY,,,lll xxx:::,,,??? QQQUUUooo```@@@eeeggg%%%$$$eeewwwvvv666%%%###lllMMM777222 KKKnnn555999XXXWWWhhh~~~jjjppp\\\ hhhuuuzzz333(((!!!;;;}}} ```###VVVDDD333|||111jjjbbbjjjPPPXXX<<<888IIIMMMccc666_a_QQQ!!!%%%[[[ssssssssssssssssssssssss___CCCAAA<<<hhh 555&&&666%%%tttsssssssssssssssssssssiii!!!%%%[[[TTT;;;jjj%%%[[[%%%uuu===================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================FFF 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說///說}}}111BBB///說RRRiii///說{{{MMM\\\///說///說///說///說mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm///說,,,............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///說///說///說///說///說///說||///說}|QPW{|}///說b_e:-1-///說QNU9)+F#Y(N!///說F>E<)(M$^)c+c+Q"///說fckC48?"V&a)c*b)a)e/`>4zlmA23///說\W_F45S* Y'b*a)`)_(^(ZOjbg^OP`7/m2"i@5///說vtljy}ONUL?GB$V'b*b*`(^(`,pB5uPHsjoE//S*!|6"}5!s1lF;///說}{}{}^\m$"&J)#U%b*a)_(]'\'{RGzvtwj]`Y:7e/"u3 }5!z4 u2p0rWO///說nlrpXUd93:9"H"W&\'^(^+c1#}YO|swWJNZ4-s4$w3 {4 x3t1o/l.i-sZR///說:8B?=H6)+;M"V%W%Y&_.!sI=qnsglN55_."6!|5 y3w3s0m.l-j-h,\&///說wuQ>BE(#? N#X%W%W%Z'gb~g[`^=:i0 z5!|5 y3v2s0p/m.k-j-h+g+T#///說rrwg^WP'P#R#S#W%[+i?4`YT=>_2({6"y4 {4 y4v2r0p/o/m.k-h,g+e*d*L ///說X%S#S#W'`XsxkJIj0 y5!~6 z4w2t1r0q/o/m.l.k-i,f+d*c*b)8///說̫b*U'qKAeY_h;3t6%{5 }5 |5 x3t1r0q0p/o.m.l-i-h,g+d*b)`)_(3 ///說ѻg`}N=Ao2"7!|5 z4w3v2s1r0q0p/n.m.k-j,h,g+e+d*a)_(^(X%D,&///說h]`S53@Q#;$z4v2t1s1r0p/o/n.m.l-j-i,g+f+e*c)b)_(]'\&Lrc_///說plU%KJo/o0t1s1q0p/p/n.m.l-k-i,h,f+e+c*a)`(_'\'Z%Y%Gthe///說ŨV$HHt1n/r0p/o/n/m.l-j-i,h,g+e+c*b)a)_(]'[&Z%X%V$:///說çR#FEy3o/o/n.m.l-k-i,h+f+e+d*b)a)_(^'\&[&Y%W$U$T#3 ///說N!BEv2n/m.l-j-i,h,f+e+c*b)a)_(^'\&[&Y%X$V$W%T#R#: ///說J@U#l.l-k-j,h,g+f*d*b)a)_(^'\'[&Z%X%W$X%V$O!M EPA=///說F=X%h,i,i,g+f+d*c)b)`(^(]'\&Z&X%X%X%W$N!LJ=,H?=///說A;Z&h,g+f+d*c)a)`(_(]'\&[&Y%Z%V$U$M!KK<4"=52kji///說=9Z&i,d*c*b)`(_(]'\'[&Y%Z&X%P"N!LI80HBApon///說9@c)e*b)a)`(^']'[&[&X%Y%N!M N!E85*&SNL///說6 =]'a)`(^(]'\&\'Y%T#P!KK?5@86`]\///說3 Af+_(]'\'\']'P"O!Q"N!<0E<9rpp///說0 Bc*]'Z&Y&Q"JR#G:3*(UQP///說+ L a)S#R#P"Q"B1 >2/^[Z///說 ES#S#O!A2E=;jhh///說 Q"J;8)%RNL|zz///說]QND( FR14P 說///說///說///說///說///說///說///          說///]=i\rFvRWd6W說...///[we-!rFO< BPkk%(說///&A-7rF,/~ ?0+(說///*$oWP,-?E說///KK dX@y,Z=EFR說///L說///k說zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/// 說$$$ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}}}///說///000///ZZZ//////B8說///000///ZZZ~~~////// cU說///000///ZZZ~~~//////2PcU說///eeeTTTMMMTTTQQQaaaxxxWWW000///ZZZ~~~//////cqeyZ2*M4 I m/_0,~; 0&Dhb'說{{{***###)))===WWWCCCkkk===^^^000333KKKVVVIIILLLrrr```CCCSSS\\\!!!PPPZZZ$$$WWW000///ZZZ~~~//////Gqc5=7l-'#eyPA")rCZ|@J 4/說555ZZZ===VVV^^^PPPQQQXXXVVVTTTbbbDDDYYY^^^eeeaaaxxxWWW___WWW000///ZZZ~~~//////Gqc]!hOS{O eS3mkD [J3mkCg9 / CCCCCCCCCCCCCCC555 ===222222222222222222222222ZZZ===###EEEGGG+++{{{___RRRnnnQQQ___WWWNNNbbbsss===bbbvvvaaaxxxuuuFFFlllWWW000///ZZZ~~~//////FtcUtG-^eS (Go$2(Fj/떖wwwpppppppppppppppppppppppp///ZZZ===FFF^^^}}}RRR^^^ZZZRRRbbbdddHHHTTTpppcccwwwYYYvvvaaaYYY000///ZZZ~~~//////3ccUfyt$eS {l<X{k0說VVV}}}===xxx```eeeiiifffdddYYYLLLaaaggg```fffhhh___\\\kkkbbb>>>eeeVVV{{{ZZZdddttteee{{{TTTsss___vvv|||uuuVVVwww000///ZZZ~~~////// 4@4- :B.$:4$D9'> ;/'$D9'>n "III 說```[[[ppp...}}}bbbkkkuuu}}}000///ZZZ~~~//////J說///||||||||||||bbbxxxzzzYYY000///ZZZ~~~//////Z 說///]]]]]]]]]]]]___000///ZZZ~~~//////說///000///ZZZ~~~//////說xxx}}}///000///ZZZ~~~//////說yyy}}}///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ~~~//////說///000///ZZZ//////說xxx///###(((;;;說~~~///說~~~///說~~~///說~~~/// //////////////////////////////////////////////////////%%%888000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////###;;;////////////////////////////////////////////////////// )A *"ALA@`AtA|A(R/root/Desktop/Guide/Recycler-content.tiff @@HHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Recycler.rtfd/Recycler-drag.tiff0000644000175000001440000006054413214346542030624 0ustar multixusersII* `|pj}hyfyizm~syPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYPPP 09>PPP 09>YjrPPP 09>YjrPPP 09>YjrPPP 09>YjrPPPPpPpPpPpPpPpPpPpWyWyWyTu__WyWyTu__WyWyTu__Wy 09>YjrPPP 09>YjrPPPPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWy 09>YjrPPP 09>YjrPPPPpPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWy 09>YjrPPP 09>YjrPPPPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWy 09>YjrPPP 09>YjrPPPPpPpPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWy 09>YjrPPP 09>YjrPPPPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWy 09>YjrPPP 09>Yjr]]]]444PPPPpPpPpPpPpPppPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWy :T@lw0A(0(( 8 8 8 ]](4PPP :T@wayay(0( 8 8 8 ]]]]] a(4PPPPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWy -V=BSYaYaYa0( 8 ]8 ]]]]] a( m0 m04PPP $T-[|aYa0A(0 8 8 8 ]]]] m0 m0 m0 m0((4PPPPpPpPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyWyYzYyYzWy !B$ ,0A(0(( 8 8 ]]] a(] m0 m0 m0(}8(}8(((]4]PPP H=zB(0(((}8]]]] m0 m0 m0(}8(}8(}8(( 4]44]PPPP`Pp@`P`P`Pp@`P`P`PpWiW y/0/ @ w(((( a(48 ]] m0 m0(}8 m0(}8(}8(((}8(((}84(((]]PPPrtr B7[7((( 4] m0 m0 m0(}8(((}8((   (((( 4PPP@P@`PP@PG iGYW YGYG iGYW YG iGYW YGYG i@@@Š 7 o((](]] m0 m0(}8(}8(((}8(((((0(((}84PPP@@@SP<9=s< A o (}84] m0(((}8(( (0((((0(]]PPPPpPpPpPpPpPpPpPpPpPpWyWyWyWyWyWyWyWyWyWyWyWyWyWyWy7IUuUuRr@@@SPc`GIG0f] 4] m0(}8(((}8(((((0(0A0A(((PPP@@@SPHFReT W Qay(}8(( (0(((00A0A0APPP000@000@0@000@000@007 IWyWyWy@@@SP   LH W  44((((((((0((00A0A]]PPP@@@SP   85]u_du~]4 m0(( (0((0(0A0A(0 m04PPPPpPpPpPpPpPpPpPpPpWyWyWyWyWy' 9' )@@@SP ROOLHMOUem(444(444(444(4]]4PPP@@@TP lj$ #09>09>09>09>09>09>09>09>09>09>KKJHHBB@B@B " (Yjr](((00A0AIQIQ0A(0QQ(4PPPPPPPPPPPPPYjrYjrYjrYjrYjrYjrYjrYjrYjrYjrYjrJ =zB w zzf w wz?#YjrYjrYjr##Yjr4] m0YaYa0AYaYa0A(0QQ0( a(4]((0((0((0((0( m04]((00A0A0A(0( m04(}8(0((((((((] ](}80((0(0((( (}8(}8(](((0((0(( m0 ](QQ(   m0 m00(0((((0( a( ay ] a((}8(}8(}8]4(40((0((0( 444]]]]]4]4]]]]]44](}8(((((]8 8 ] a( m0 m0(}8(}8(((}8(((yayYaIQ0(((((}8 a(]]]4(0(( 48 ]] m0 m0 m0(}8  (( 4 m0yayIQYa( (((}8 m0]]4Ya(] 8 ]]] m0(}8 m0(}8(}8((((0(4]ayyayIQ0A0((((((}8(}8 a(]]4]0( 8 ]] a( m0 m0(}8(}8(( ((04ayYaYa(0(( m0 m0]]4](}8 8 8 ] a( a( m0(}8(}8(((((0((0(]yyYaYaYaYa0(((((}8 m0]]8 (] 8 ]] m0 m0 m0(}8(( ((0A0A4yyay 0YaIQ0A( (((}8 m0]8 ]8 ]] a( m0 m0(}8(}8(((((0IQIQ4ӮayYa0A0(0((((( m0 m0 a(]8 48 ]] m0 m0(}8(}8 0((0A 0YayayayIQYa0((( (}8(}8 a( m08 4]] a((}8(}8(((}80(YaIQYay ]YaYa0((((((}8(}8 a( a(8 444 m0(}8  (0( 0Yayay4]YaYa((((}8(}8 m0]4(444(444(44Ya0( (]0( (Ya 44RK` 'a.aDa@LaTa\a(R/root/Desktop/Guide/Recycler-drag.tiffCreated with The GIMPRRccgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Recycler.rtfd/Recycler.tiff0000644000175000001440000002246613214346542027712 0ustar multixusersII*$]]]]4440A(0(( 8 8 8 ]](4yayay(0( 8 8 8 ]]]]] a(4ayyayYaYaYa0( 8 ]8 ]]]]] a( m0 m04yӮayYa0A(0 8 8 8 ]]]] m0 m0 m0 m0((4yayYaYa0A0A(0(( 8 8 ]]] a(] m0 m0 m0(}8(}8(((]4] m0ayayYaYa(0Ya(0(((}8]]]] m0 m0 m0(}8(}8(}8(( 4]44]ӮayYaYaYaIQYaYa0(0((((( a(48 ]] m0 m0(}8 m0(}8(}8(((}8(((}84(((]]ayYaYa(00A(0((QQ((( 4] m0 m0 m0(}8(((}8((   (((( 4]Ya0AYa(00(0(QQ((( ((](]] m0 m0(}8(}8(((}8(((((0(((}84]YaIQ0A(0((((( (  (}84] m0(((}8(( (0((((0(]]]0(YaYa(00(((((((((((((] 4] m0(}8(((}8(((((0(0A0A(((]4 m00(((((     Qay(}8(( (0(((00A0A0A]4 m0(((((((}8(((}8] 44((((((((0((00A0A]]](}8 ((  4(}8]4 m0(( (0((0(0A0A(0 m04]4 m0((((4(444(444(444(4]]4]44Qay]] m0((4YayYaay m0]]](}8(}8(((}8(}8440Aayayay 0]] m0  ((   4(}8yyyӮayayYaYa]]]](}8(}8(((}8(((}8(((((( m04 a(ayyayayayYaYaIQ0A4] m0((   ((  (( (((4ayayayYaayYaIQYaIQ0A(0QQ4](((}8(((}8(((}8(((((((0(((0(( m0ayayYaYaIQIQIQ0A(0((]]]  (( ((((((0((00(44Ya 00A0A(0(0(0((0((0((}84] 0((((((00A(00A0AIQ(0IQIQYaYa(0(0(((((((((((]]](}8(0(((00AYaIQYaIQ(00(4IQIQ0A(0(0((0((0((]44 m04](((00A0AIQIQ0A(0QQ(4 m0Ya0((0((((0(0((]4444] m0YaYa0AYaYa0A(0QQ0( a(4]((0((0((0((0( m04]((00A0A0A(0( m04(}8(0((((((((] ](}80((0(0((( (}8(}8(](((0((0(( m0 ](QQ(   m0 m00(0((((0( a( ay ] a((}8(}8(}8]4(40((0((0( 444]]]]]4]4]]]]]44](}8(((((]8 8 ] a( m0 m0(}8(}8(((}8(((yayYaIQ0(((((}8 a(]]]4(0(( 48 ]] m0 m0 m0(}8  (( 4 m0yayIQYa( (((}8 m0]]4Ya(] 8 ]]] m0(}8 m0(}8(}8((((0(4]ayyayIQ0A0((((((}8(}8 a(]]4]0( 8 ]] a( m0 m0(}8(}8(( ((04ayYaYa(0(( m0 m0]]4](}8 8 8 ] a( a( m0(}8(}8(((((0((0(]yyYaYaYaYa0(((((}8 m0]]8 (] 8 ]] m0 m0 m0(}8(( ((0A0A4yyay 0YaIQ0A( (((}8 m0]8 ]8 ]] a( m0 m0(}8(}8(((((0IQIQ4ӮayYa0A0(0((((( m0 m0 a(]8 48 ]] m0 m0(}8(}8 0((0A 0YayayayIQYa0((( (}8(}8 a( m08 4]] a((}8(}8(((}80(YaIQYay ]YaYa0((((((}8(}8 a( a(8 444 m0(}8  (0( 0Yayay4]YaYa((((}8(}8 m0]4(444(444(44Ya0( (]0( (Ya 4400$ "$%@$&%.%(R/root/Desktop/Guide/Recycler.tiffCreated with The GIMPNHNHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Recycler.rtfd/RecyclerFull.tiff0000644000175000001440000002247213214346542030532 0ustar multixusersII*$]]]]4440A(0(( 8 8 8 ]](4yayay(0( 8 8 8 ]]]]] a(4ayyayYaYaYa0( 8 ]8 ]]]]] a( m0 m04yӮayYa0A(0 8 8 8 ]]]] m0 m0 m0 m0((4yayYaYa0A0A(0(( 8 8 ]]] a(] m0 m0 m0(}8(}8(((]4] m0ayayYaYa(0Ya(0(((}8]]]] m0 m0 m0(}8(}8(}8(( 4]44]ӮayYaYaYaIQYaYa0(0((((( a(48 ]] m0 m0(}8 m0(}8(}8(((}8(((}84(((]]ayYaYa(00A(0((QQ((( 4] m0 m0 m0(}8(((}8((   (((( 4]Ya0AYa(00(0(QQ((( ((](]] m0 m0(}8(}8(((}8(((((0(((}84]YaIQ0A(0((((( (  (}84] m0(((}8(( (0((((0(]]]0(YaYa(00(((((((((((((] 4] m0(}8(((}8(((((0(0A0A(((]4 m00(((((     Qay(}8(( (0(((00A0A0A]4 m0(((((((}8(((}8] 44((((((((0((00A0A]]](}8 ((  4(}8]4 m0(( (0((0(0A0A(0 m04]4 m0((((4(444(444(444(4]]4]44Qay]] m0((4YayYaay m0]]](}8(}8(((}8(}8440Aayayay 0]] m0  ((   4(}8yyyӮayayYaYa]]0((((}8 m0 m0]](}8(}8(((}8(((}8(((((( m04 a(ayyayayayYaYaIQ0A40(IQ 00( m0] m0] m0((   ((  (( (((4ayayayYaayYaIQYaIQ0A(0QQ4(( m0]4](((}8(((}8(((}8(((((((0(((0(( m0ayayYaYaIQIQIQ0A(0((]]0( 0 (}8]4]  (( ((((((0((00(44Ya 00A0A(0(0(0((0((0((}84 m0 m0(}8]]]] 0((((((00A(00A0AIQ(0IQIQYaYa(0(0(((((((((((]] m0]]](4 m0](}8(0(((00AYaIQYaIQ(00(4IQIQ0A(0(0((0((0((]44 m04 m04] m0](((00A0AIQIQ0A(0QQ(4 m0Ya0((0((((0(0((]4444] m0YaYa0AYaYa0A(0QQ0( a(4]((0((0((0((0( m04]((00A0A0A(0( m04(}8(0((((((((] ](}80((0(0((( (}8(}8(](((0((0(( m0 ](QQ(   m0 m00(0((((0( a( ay ] a((}8(}8(}8]4(40((0((0( 444]]]]]4]4]]]]]44](}8(((((]8 8 ] a( m0 m0(}8(}8(((}8(((yayYaIQ0(((((}8 a(]]]4(0(( 48 ]] m0 m0 m0(}8  (( 4 m0yayIQYa( (((}8 m0]]4Ya(] 8 ]]] m0(}8 m0(}8(}8((((0(4]ayyayIQ0A0((((((}8(}8 a(]]4]0( 8 ]] a( m0 m0(}8(}8(( ((04ayYaYa(0(( m0 m0]]4](}8 8 8 ] a( a( m0(}8(}8(((((0((0(]yyYaYaYaYa0(((((}8 m0]]8 (] 8 ]] m0 m0 m0(}8(( ((0A0A4yyay 0YaIQ0A( (((}8 m0]8 ]8 ]] a( m0 m0(}8(}8(((((0IQIQ4ӮayYa0A0(0((((( m0 m0 a(]8 48 ]] m0 m0(}8(}8 0((0A 0YayayayIQYa0((( (}8(}8 a( m08 4]] a((}8(}8(((}80(YaIQYay ]YaYa0((((((}8(}8 a( a(8 444 m0(}8  (0( 0Yayay4]YaYa((((}8(}8 m0]4(444(444(44Ya0( (]0( (Ya 4400$ &$%@$*%2%(R/root/Desktop/Guide/RecyclerFull.tiffCreated with The GIMPNHNHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Recycler.rtfd/TXT.rtf0000644000175000001440000000517013214346542026455 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36\b \uc0 The Recycler\par \fs24\b0 \uc0 \par The Recycler is part of the Dock. The bottom icon on the Dock is always the Recycler.\par The icon on the Dock can change based on the state of the Recycler. It can indicate that there are no files in the Recycler (it is empty) or that there are files in it.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\qc{{\NeXTGraphic Recycler.tiff \width960 \height960} \uc0 \u-4 }\uc0 {{\NeXTGraphic RecyclerFull.tiff \width960 \height960} \uc0 \u-4 }\f0\fs24\cf1 \uc0 \par \pard\ql\pard\tx0\li100\ql \uc0 \par There are various ways to place a file in the Recycler.\par The first one is to drag the file towards the Recycler icon on the Dock and as soon as the pointer turns green release the mouse button. \par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql{{\NeXTGraphic Recycler-drag.tiff \width1640 \height1500} \uc0 \u-4 }\f0\fs24\cf1 \uc0 \par \pard\ql\pard\tx0\li100\ql \uc0 \par Another way is to select the file and press ALT-d (or the Backspace key) on your keyboard.\par And the last version is by using the File menu entry Move to Recycler. If the option on the menu is greyed out, you forgot to select the file.\par Before the action is performed a panel will popup to ask for you confirmation.\par When you started with an empty Recycler icon, you will after using one of the above options on e.g. the Test_copy.txt file see the icon of the Recycler change.\par Double clicking on the Recycler icon in the Dock opens a viewer on the .Trash folder. \par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql{{\NeXTGraphic Recycler-content.tiff \width8000 \height5940} \uc0 \u-4 }\f0\fs24\cf1 \uc0 \par \pard\ql\pard\tx0\li100\ql \uc0 \par Dragging the file back to a folder on the system removes it from the recycler.\par The downside of the Recycler is that it is a temporary store for files or folders that need to be thrown away. By placing items in the Recycler they are still part of the filesystem and thus take up space. So placing files in the recycler, does not create more disk space on your system.\par To free the diskspace occupied by the items in the Recycler you must empty the Recycler. Select from the File menu entry the Empty Recycler command and the files will be removed from your system.\par \par \cf0 \uc0 \cf0{{\NeXTGraphic dummy.tiff \width960 \height960} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/Recycler.rtfd/dummy.tiff0000644000175000001440000000503213214346542027263 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/RunExternal.rtfd/0000755000175000001440000000000013214346542025755 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/RunExternal.rtfd/Run-panel.tiff0000644000175000001440000047477613214346542030521 0ustar multixusersII*x  HHH HHH HHH HHH KKK{{{{{{{{{vvvaaa!!!HHH yyyHHH ???999(((``````(((rrr$$$HHH ???WWW@@@@@@mmmrrrHHH DDD@@@@@@JJJ \\\HHH ```OOOiii@@@@@@AAAHHH ???666@@@@@@???HHH ???]]]999MMMooo@@@???HHH 999ddd{{{999999HHH HHH HHH HHH HHH &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&MMMLLL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ***PPP )))ZZZJJJ 666FFF''' 666TTTfffiiilllqqqiii~~~ 666OOO***III YYYmmmHHHdddOOO333$$$lll 333}}};;;UUUIII YYYmmm<<<!!! 999999999777'''666III YYYmmm\\\111 %%%uuuuuuuuuttt]]]333UUUIII YYYmmmjjj888 666JJJ%%%III YYYmmmlll888 666UUU~~~IIIggg YYYmmmlll888 666YYY}}}``` IIIqqq333 YYYmmmlll888 :::mmm000WWWXXX{{{\\\ooonnn<<< jjjCCC@@@@@@EEEqqq@@@vvvGGG |||}}}}}}|||{{{ttt}}}}}}}}}}}}|||yyy}}}zzz777vvv{{{sss~~~{{{ eee}}}llljjj%%%[[[\\\MMM|||\\\\\\\\\eeeWWWZZZUUUhhhmmmXXXZZZWWWrrrqqqPPP@@@ggg\\\JJJuuu???QQQ[[[;;;eeeaaaNNNWWWVVVTTTYYYMMMjjjcccNNNXXXpppTTTXXX^^^%%%vvvqqq lllsssWWWZZZXXXlll oooqqq~~~888MMMiii)))aaafffOOOPPP qqq```[[[yyy%%%uuu===___333VVVOOO...uuu<<>>"""cccSSS???www"""sssxxx///vvv!!!CCC===vvv999TTTqqq ~~~888LLLiii))) eeeCCCiii%%%qqq}}}@@@rrr___uuu>>>bbb}}}SSSKKK"""cccSSS???www"""}}}LLL555vvv!!!LLL---vvvHHHUUU~~~ 999===iii))) hhh111{{{%%%SSSMMMIIIZZZMMMOOOlllPPPMMMOOOrrrqqqPPPMMMQQQxxx"""cccSSS???www"""MMMPPPeeeAAAXXX!!!tttLLLKKK]]](((vvv***\\\xxxQQQMMMPPPppp IIIKKKddd444iii))) vvvTTT%%% gggaaa%%% aaaAAA%%% ggg444.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................111mmm ggg zzz ggg ggg {{{ ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg 666 ggg ggg ggg ggg gggHHH SSSJJJ fff%%% kkkHHH%%% kkkHHH%%% kkkHHH%%% kkkHHH%%% '''kkk///TTT######fffHHH%%% ZZZ@@@DDDggg'''kkkbbbDDD>>>WWW///sss888TTTbbbHHH%%% ^^^lll~~~vvvxxxvvvyyyvvv'''kkkoooSSSooo\\\///~~~sss$$$nnn[[[ooooooooo777bbbHHH%%% ~~~]]]qqqcccPPPMMM___QQQ<<<\\\NNNKKKjjjTTTRRRZZZiiiSSSOOORRR'''kkkDDD___zzz///dddQQQmmm(((|||mmmFFFFFFFFFFFFHHH%%% pppUUUoookkkdddQQQFFF///LLLyyyppp___~~~DDD'''kkk)))[[[kkk///ppp[[[VVViii///yyyHHH%%% pppUUUlllUUULLL888JJJQQQccc+++SSS777NNNQQQHHH'''kkk***[[[lll///999GGGnnn...HHH%%% ~~~]]]QQQgggllliiiGGGBBBQQQeee///VVVLLLjjjmmmjjjlll'''kkkEEE___{{{///ZZZGGGrrrDDDHHH%%% ^^^jjj|||&&&IIIAAAQQQeeeSSSnnnxxx]]]ppp'''kkkoooPPPmmm[[[///FFFxxx>>>HHH%%% YYY;;;???fffmmm===444MMMJJJAAAQQQeeeQQQ:::MMMuuuJJJ444IIIttt'''kkkccc@@@888VVV///BBBzzzIIIHHH%%% kkkHHH%%% kkkHHH%%% kkkHHH%%% kkkHHH%%% kkkHHH%%% fffHHH%%% ???::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222%%% MMM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WWW  ,y #yy@yyy(R/root/Desktop/Guide/Run-panel.tiff,X,, HHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/RunExternal.rtfd/TXT.rtf0000644000175000001440000000120513214346542027147 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36\b \uc0 Using Run\par \par \fs24\b0 \uc0 With the Run command from the File menu, you can start applications if you know the name. Just type the name in the panel and click Ok.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \cf0{{\NeXTGraphic Run-panel.tiff \width6000 \height2700} \uc0 \u-4 }\f0\fs24 \uc0 \par \cf0\pard\ql\pard\tx0\li100\ql\cf1 \uc0 \par \cf0 \uc0 \cf0{{\NeXTGraphic dummy.tiff \width960 \height960} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/RunExternal.rtfd/dummy.tiff0000644000175000001440000000503213214346542027762 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/TabbedShelf.rtfd/0000755000175000001440000000000013214346542025651 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/TabbedShelf.rtfd/TXT.rtf0000644000175000001440000000167313214346542027054 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36\b \uc0 The Tabbed Shelf \par \par \fs24\b0 \uc0 The Tabbed Shelf is comparable with the Shelf. One can stick applications, documents and folders for future use on the Tabbed Shelf. To activate the Shelf select from the Tools menu the Tabbed Shelf entry. This will activate the Shelf at the bottom of your screen.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql{{\NeXTGraphic TabbedShelf-develop.tiff \width8000 \height1180} \uc0 \u-4 }\uc0 \par \par Double clicking an folder object in the TabbedShelf opens a new viewer with the folder. If you click the object with the CTRL pressed opens the selection in the current viewer.\f0\fs24\cf1 \uc0 \par \pard\ql\pard\tx0\li100\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width960 \height960} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Help/TabbedShelf.rtfd/TabbedShelf-develop.tiff0000644000175000001440000027100213214346542032324 0ustar multixusersII*p7>B!&)=px}9<>T'Q)-/dgiFGH $'(7gjk 몪} >sz~ #pQWZt777555hhh{{{666:AD֪TTT,,,888:::```JJJNNNxxxFMQ""" FFFDDDaaaHHHGGGBBBAAA|||{{{111\\\<<<999222<<<,,,qst777,,,GGG***~~~VVVBBB444--->>>wwwEEE444VVV;;;222fffoooBBB...|||iii===...&&&TTTCCCAAA***qtvwyq{w}~""""""???DDD888TTTttt^^^)))<<<^^^yyy$$$!!![[[TTT222ppp\\\UUU###@@@JJJ{{{aaa(((KKKJJJWWW999***777:::777hhh222...TTTVVVfffUUU,,,<<>>hhhcccRRR000yyyIIIbbbyyy{{{+++;;;fff>>>qqq000KKK:::sss|||~~~AAA...UUU)))RRR^^^333'''---\\\^^^hhhCCCggg)))ppp<<:::Y{fL4X0!gZUoWI?6,&$$#%.Mz|fM4Z2$cTO[CC?-%##"!!  .x|fK4Z2#bTN]CCA/%$##"! -qI=N*dVQȋTSI1%$$# E_[c}?1/:>&$"AidejA 8?8%#)|fWPwPwPwPwPwPwQyoy.~Y|vux><>.$$3tPwPwPwPwPwPwPwPwRxGvx\KoLqLqLqLqFf\C^g:]l)bzmekdD5E6G8˰gggMLQa_kPHPV-%]-#n5)n5)j3(e0&]-$U'w%s,*"!'iuPwPwFhCcOvPwPwPwdlw/}ua3\qjD5G7P@lllEDH`_lcboO;<[-$e1'n4)j3'f1&a/$[-$*t|"j&v/!! 2]xvOuPwIlGiOvMr]jq<~|mdrLoleF8UTT4//PMVdcpXVbR0-].$m4)m4)h2'c0%_.$Z,#Esbqa*# )cfuKkLqB~a:iTKQZ3|yb[ʼONVa`mRMUI78J+'W,$c0&n4)j3'd0%_.$\,"X+"{r bhXy"k+ $7{D}yD{='M G|s|lck@fZY`RRUL::P0,]/'`1'c1'e1(j3(m4(f1%`.$\-"Y+!V+!?ubScU($&g_vm~uWQhhhPPR^VX[CDrB:}{f90d2(k4)s8+t8+s7,n5)i2'c/$]-#Y+!V* T) bU[NfY'!!~x\UbqpxecoXW`aB ?0$0%& % NSScrollView Cf B C B&0&% Cf C C A  C A&0' &%0(0)& % Shown files)&&&&&&&&0%0*0+&%System0,&%textBackgroundColor0-# > ?0.1NSButton% C A B A  B A&0/ &%001 NSButtonCell01&%Activate changes1&&&&&&&&%02&03&&&&04% A B( C A  C A&05 &%0607&,%,Select and move the files to hide or to show&&&&&&&&0%0809&%System0:&%textBackgroundColor0;# > ?0<% C- B B@ A  B@ A&0= &%0>0?&%Load?&&&&&&&&%0@&0A&&&&0B% C9 B A A  A A&0C &%0D0E&%Button0F%0G& % Helvetica A@A@&&&&&&&&%0H&0I&&&&0J% C9 B A A  A A&0K &%0L0M&%ButtonF&&&&&&&&%0N&0O&&&&0P0Q&%BoxF&&&&&&&&0%0R0S&%System0T&%windowBackgroundColor0U0V&%System0W& % textColor %%0X1 NSImageView% A C3 B@ B@  B@ B@&0Y &%0Z1 NSImageCellF&&&&&&&&%%% ? ?0[% B C3 C B@  C B@&0\ &%0]0^&0_%0`& % Helvetica AA&&&&&&&&0%0a# ?* ?0b0c&%System0d& % textColor0e0f&%BoxF&&&&&&&&0%R0g0h&%System0i& % textColor %%0j &0k1 NSTabViewItem0l&%Files0m&%Files % 0n0o&%Folders0p&%Folders0q % ? ? C Cm  C Cm&0r &0s0t& % NSScrollView B B CM C&0u% B CT CO A  CO A&0v &%0w0x&%Hidden directoriesF&&&&&&&&0%0y0z&%System0{&%textBackgroundColor0|# > ?0}% C A  C A  C A&0~ &%00&%Activate changes&&&&&&&&%0&0&&&&0% C B Bp A  Bp A&0 &%00&%add&&&&&&&&%0&0&&&&0% CJ B Bp A  Bp A&0 &%00&%remove&&&&&&&&%0&0&&&&% F%%00&%Box1F&&&&&&&&0%00&%System0&%windowBackgroundColor00&%System0& % textColor %%00&%System0&%windowBackgroundColor0&%Window0& % Preferences C C F@ F@%01NSImage0&%NSApplicationIcon&   D D0 &0 &01NSMutableDictionary1 NSDictionary&'0&%Button5<0&%GormCustomView00& % NSScrollView B B C B&0&%Button6B0&%Button7J0&%Button8}0&%Button90&%Button0% C A  B A  B A&0 &%00&%Activate changesF&&&&&&&&%0&0&&&&0&%Box10& % ImageView1X0&%Box20&%Box30&%Button100& % TextField0% B CF C B@  C B@&0 &%00&_&&&&&&&&0%0# ?* ?00&%System0& % textColor0&%View1 0& % GormNSWindow0&%View20&%GormCustomView10±0ñ& % NSScrollView Cf B C B&0ı&%View30ű&%GormCustomView20Ʊ&%GormCustomView3$0DZ&%GormCustomView4s0ȱ&%TabView 0ɱ& % TextField10ʱ% B C& C A  C A&0˱ &%0̱0ͱ& % Hidden filesF&&&&&&&&0%0α0ϱ&%System0б&%textBackgroundColor0ѱ# > ?0ұ&%Box0ӱ%  C CA  C CA&0Ա &0ձ % @ @ C C=  C C=&0ֱ &  ʰ0ױ% Cf C& C A  C A&0ر &%0ٱ0ڱ& % Shown filesF&&&&&&&&0%0۱0ܱ&%System0ݱ&%textBackgroundColor0ޱ# > ?0߱% A B0 C A  C A&0 &%00&,%,Select and move the files to hide or to showF&&&&&&&&0%00&%System0&%textBackgroundColor0# > ?0% C- B B@ A  B@ A&0 &%00&%LoadF&&&&&&&&%0&0&&&&0% C9 C A A  A A&0 &%00&%ButtonF&&&&&&&&%0&0&&&&0% C9 B A A  A A&0 &%00&%ButtonF&&&&&&&&%0&0&&&&00&%BoxF&&&&&&&&0%00&%System0& % textColor %%0& % TextField20& % TextField3P& % TextField4P& % TextField5&P& % TextField64P& % TextField7[P&%NSOwnerP&%HiddenFilesPrefP& % TextField8uP&%MenuItemP1! NSMenuItemP &%Item 1P &&&%P P & % common_Nibble%P &%Button1P&%Button2P& % ImageViewP% A CF B@ B@  B@ B@&P &%PF&&&&&&&&%%% ? ?P&%Button3P&%Button4.P&%View P &DDP1"NSNibConnectorP&%NSOwnerP"P"ҐP"P"P"P"ɐP"P "P!"P""P#" P$"P%"P&1#NSNibControlConnectorP'& % moveToHidden:P(#P)& % moveToShown:P*# P+& % loadContents:P,#P-&%activateChanges:P."P/"P0"P1"P2"P3"P4"P5"P6"P7"P8"P9"P:"P;"P<"P="P>"P?"P@"PA"ǐPB"PC"PD"PE"PF1$NSNibOutletConnectorPG&%winPH$PI&%prefboxPJ$PK&%tabViewPL$PM&%iconViewPN$PO& % pathFieldPP$PQ& % hiddenlabelPR$PS& % leftScrollPT$PU& % shownlabelPV$PW& % rightScrollPX$PY&%addButtPZ$P[& % removeButtP\$P]&%loadButtP^$P_& % labelinfoP`$Pa&%setButtPb$Pc&%hiddenDirslabelPd$Pe&%hiddenDirsScrollPf$Pg& % addDirButtPh$Pi& % removeDirButtPj$Pk& % setDirButtPl#Pm&%activateDirChanges:Pn#Po&%addDir:Pp#Pq& % removeDir:Pr#Ps& % moveToHidden:Pt#Pu& % moveToShown:Pv#Pw& % loadContents:Px#Py&%activateChanges:Pz&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/HistoryPref.gorm/0000755000175000001440000000000013214346542025101 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/HistoryPref.gorm/data.classes0000644000175000001440000000060013214346542027365 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "setUnsetThumbnails:", "stepperAction:" ); Super = NSObject; }; HistoryPref = { Actions = ( "stepperAction:" ); Outlets = ( win, prefbox, cacheBox, cacheField, stepper ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/HistoryPref.gorm/data.info0000644000175000001440000000027013214346542026666 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/HistoryPref.gorm/objects.gorm0000644000175000001440000000614513214346542027426 0ustar multixusersGNUstep archive00002c24:00000021:00000055:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C݀ D%01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % B C CY B  CY B&0 &0 % @ @ CU B   CU B &0 &01 NSTextField1 NSControl% B A  BL A  BL A&0 &%01NSTextFieldCell1 NSActionCell1NSCell0&%12301NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01 NSStepper% B A  A A  A A&0 &%01 NSStepperCell0&%001NSNumber1NSValuei%&&&&&&&&% @M ?%%00 &%Number of saved paths&&&&&&&&0%0!0"&%System0#&%windowBackgroundColor0$0%&%System0&& % textColor %%0'0(&%Box0)%0*& % Helvetica A@A@&&&&&&&&0%!0+0,&%System0-& % textColor %%!0.&%Window0/& % Preferences/ C C F@ F@%001NSImage01&%NSApplicationIcon&   D D02 &03 &041NSMutableDictionary1 NSDictionary&05&%Stepper106&%NSOwner07& % HistoryPref08&%Box109& % TextField0:&%Box2 0;& % GormNSWindow0<&%MenuItem0=1 NSMenuItem0>&%Item 10?&&&%0@0A& % common_Nibble%0B &  0C1NSNibConnector;60D80E<0F:0G960H560I1NSNibOutletConnector6;0J&%win0K680L&%prefbox0M6:0N&%cacheBox0O690P& % cacheField0Q650R&%stepper0S1 NSNibControlConnector560T1!NSMutableString&%stepperAction:0U&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/IconsPref.gorm/0000755000175000001440000000000013214346542024513 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/IconsPref.gorm/data.classes0000644000175000001440000000053613214346542027007 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "setUnsetThumbnails:" ); Super = NSObject; }; IconsPref = { Actions = ( "setUnsetThumbnails:" ); Outlets = ( win, prefbox, thumbbox, thumbCheck ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/IconsPref.gorm/data.info0000644000175000001440000000027013214346542026300 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/IconsPref.gorm/objects.gorm0000644000175000001440000000542313214346542027036 0ustar multixusersGNUstep archive00002c24:0000001e:0000004e:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C D601 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % B B CY BH  CY BH&0 &0 % @ @ CU A  CU A&0 &01NSButton1 NSControl% A A  C7 A  C7 A&0 &%01 NSButtonCell1 NSActionCell1NSCell0&%use thumbnails01NSImage01NSMutableString&%common_SwitchOff01NSFont%&&&&&&&&%0&0&00&%common_SwitchOn&&&01NSTextFieldCell0& % Thumbnails&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor0 0!&%System0"& % textColor %%0#0$&%Box0%%0&& % Helvetica A@A@&&&&&&&&0%0'0(&%System0)& % textColor %%0*&%Window0+& % Preferences+ C C F@ F@%0,0-&%NSApplicationIcon&   D D0. &0/ &001NSMutableDictionary1 NSDictionary&01&%NSOwner02& % IconsPref03&%Button104&%Box105&%Box2 06& % GormNSWindow07&%MenuItem081 NSMenuItem09&%Item 10:&&&%0;0<& % common_Nibble%0= &  0>1NSNibConnector60?&%NSOwner0@40A70B50C30D1NSNibOutletConnector?60E&%win0F?40G&%prefbox0H?50I&%thumbbox0J?30K& % thumbCheck0L1NSNibControlConnector3?0M&%setUnsetThumbnails:0N&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFEditor.gorm/0000755000175000001440000000000013214346542024416 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFEditor.gorm/data.classes0000644000175000001440000000116013214346542026704 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "addSearchPlaceFromDialog:", "buttonsAction:", "chooseSearchPlacesType:", "orderFrontFontPanel:", "removeSearchPlaceButtAction:", "startFind:" ); Super = NSObject; }; LSFEditor = { Actions = ( "buttonsAction:" ); Outlets = ( win, modulesBox, cancelButt, saveButt, modulesLabel, placesScroll, searchLabel, recursiveSwitch ); Super = NSObject; }; SearchPlacesBox = { Actions = ( ); Outlets = ( ); Super = NSBox; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFEditor.gorm/data.info0000644000175000001440000000027013214346542026203 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFEditor.gorm/objects.gorm0000644000175000001440000001021013214346542026727 0ustar multixusersGNUstep archive00002c24:00000021:0000007f:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C:&% C D@01 NSView%  C C:  C C:&01 NSMutableArray1 NSArray&01NSBox% A B0 C B  C B&0 &0 % @ @ C A  C A&0 &0 1NSCell0 &%Box0 1NSFont%&&&&&&&& %%01NSButton1 NSControl% C A Bt A  Bt A&!0 &%01 NSButtonCell1 NSActionCell0&%Revert &&&&&&&&%0&0&&&&0% C΀ A Bt A  Bt A&!0 &%00&%Save &&&&&&&&%0&0&&&&01 GSCustomView1 GSNibItem0& % NSScrollView A B C Bh&01 NSTextField% A C& B A  B A&0 &%01NSTextFieldCell0& % Searching in:0 % A@&&&&&&&&0%0!1NSColor0"&%NSNamedColorSpace0#&%System0$&%textBackgroundColor0%"#0&& % textColor0'% A B B A  B A&0( &%0)0*&%Modules: &&&&&&&&0%0+"0,&%System0-&%textBackgroundColor0.",0/& % textColor00% A A@ B A  B A&$01 &%0203& % recursive041NSImage051NSMutableString&%common_SwitchOff &&&&&&&&%06&07&0809&%common_SwitchOn&&&0:"0;&%System0<&%windowBackgroundColor0=&%Window0>&%Editor> C B F@ F@%0?0@&%NSApplicationIcon&   D D0A &0B &0C1NSMutableDictionary1 NSDictionary& 0D&%Button20E&%Box10F&%NSOwner0G& % LSFEditor0H& % TextField1'0I& % TextField0J& % GormNSWindow0K&%Button00L&%GormCustomView0M& % MenuItem10N1 NSMenuItem0O& % Selection0P&&&%%0Q& % MenuItem20R0S&%Specific placesP&&%%0T& % MenuItem30U0V&%Item0W&&&%0X0Y&%common_2DCheckMark0Z0[& % common_2DDash%0\&%MenuItem0]0^&%Item0_&&&%XZ%0`&%Button10a &0b1NSNibConnectorE0cM0dQ0eT0f&%NSOwner0g`0h1 NSNibOutletConnectorfJ0i&%win0j f`0k& % cancelButt0l fE0m& % modulesBox0n fD0o&%saveButt0p1!NSNibControlConnector`f0q&%buttonsAction:0r!Dfq0sL0tI0u fI0v& % searchLabel0w fL0x& % placesScroll0yHf0z fH0{& % modulesLabel0|Kf0} fK0~&%recursiveSwitch0&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFolder.gorm/0000755000175000001440000000000013214346542024275 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFolder.gorm/data.classes0000644000175000001440000000107113214346542026564 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "openEditor:", "orderFrontFontPanel:", "restartSearch:", "setAutoupdateCycle:", "stopSearch:", "updateIfNeeded:" ); Super = NSObject; }; LSFolder = { Actions = ( "setAutoupdateCycle:", "updateIfNeeded:", "openEditor:" ); Outlets = ( win, topBox, progBox, elementsLabel, autoupdatePopUp, updateButt, resultsScroll, editButt, pathBox ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFolder.gorm/data.info0000644000175000001440000000027013214346542026062 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/LSFolder.gorm/objects.gorm0000644000175000001440000001040513214346542026614 0ustar multixusersGNUstep archive00002c24:00000025:0000007b:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C DC01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox% C C B  C B& 0 &0 % @ @ C A  C A&0 &0 1 NSTextField1 NSControl% A @ B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Text01NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% @ @ A A  A A&0 &0 %  A A  A A&0 &00&%Box&&&&&&&& %%01NSButton% C @ B A  B A&0 &%01 NSButtonCell0& % Update now&&&&&&&&%0 &0!&&&&0"1 NSPopUpButton% C @ B A  B A&0# &%0$1NSPopUpButtonCell1NSMenuItemCell0%&&&&&&&&&0&1NSMenu0'&0( &0)1 NSMenuItem0*&%Item 10+&&&%0,1NSImage0-& % common_Nibble%%0.&0/&&&&)&%%%%%00% C| @ BD A  BD A&01 &%0203&%Edit&&&&&&&&%04&05&&&&0607&%Box&&&&&&&& %%081 GSCustomView1 GSNibItem09& % NSScrollView A Bd C C&0:% A A  C B(  C B(&"0; &0< % @ @ C B  C B&0= &0>0?&%Box&&&&&&&& %%0@0A&%System0B&%windowBackgroundColor0C&%Window0D&%Live Search FolderD C CH F@ F@%0E0F&%NSApplicationIcon&   D D0G &0H &0I1 NSMutableDictionary1! NSDictionary& 0J&%NSOwner0K&%LSFolder0L&%Button100M&%GormCustomView80N&%Box0O&%Button0P& % TextField 0Q&%Box10R&%View<0S&%Box2:0T&%MenuItem)0U& % GormNSWindow0V&%GormNSPopUpButton"0W &0X1"NSNibConnectorN0Y"P0Z"Q0["O0\"V0]"T0^1#NSNibOutletConnector0_&%NSOwnerU0`&%win0a#_V0b&%autoupdatePopUp0c#_P0d& % elementsLabel0e#_N0f&%topBox0g#_O0h& % updateButt0i#_Q0j&%progBox0k1$NSNibControlConnectorO_0l&%updateIfNeeded:0m$V_0n&%setAutoupdateCycle:0o"L0p#_L0q&%editButt0r$L_0s& % openEditor:0t"M0u"S0v"RS0w#_M0x1%NSMutableString& % resultsScroll0y#_S0z&%pathBox0{ &gworkspace-1.1.0/GWorkspace/Resources/English.lproj/Localizable.strings0000644000175000001440000002727714753220702025531 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Info Panel..."; "Preferences..." = "Preferences..."; "Help..." = "Help..."; "Activate context help" = "Activate context help"; "File" = "File"; "Open" = "Open"; "Open With..." = "Open With..."; "Open as Folder" = "Open as Folder"; "Edit File" = "Edit File"; "New Folder" = "New Folder"; "New File" = "New File"; "Duplicate" = "Duplicate"; "Destroy" = "Destroy"; "Move to Recycler" = "Move to Recycler"; "Empty Recycler" = "Empty Recycler"; "Edit" = "Edit"; "Cut" = "Cut"; "Copy" = "Copy"; "Paste" = "Paste"; "Select All" = "Select All"; "View" = "View"; "Browser" = "Browser"; "Icon" = "Icon"; "List" = "List"; "Show" = "Show"; "Name only" = "Name only"; "Type" = "Type"; "Size" = "Size"; "Modification date" = "Modification date"; "Owner" = "Owner"; "Icon Size" = "Icon Size"; "Icon Position" = "Icon Position"; "Up" = "Up"; "Left" = "Left"; "Label Size" = "Label Size"; "Make thumbnail(s)" = "Make thumbnail(s)"; "Remove thumbnail(s)" = "Remove thumbnail(s)"; "Viewer" = "Viewer"; "Tools" = "Tools"; "Inspectors" = "Inspectors"; "Show Inspectors" = "Show Inspectors"; "Attributes" = "Attributes"; "Contents" = "Contents"; "Annotations" = "Annotations"; "Finder" = "Finder"; "Fiend" = "Fiend"; "Show Fiend" = "Show Fiend"; "Hide Fiend" = "Hide Fiend"; "Add Layer..." = "Add Layer..."; "Remove Current Layer" = "Remove Current Layer"; "Rename Current Layer" = "Rename Current Layer"; "Layers" = "Layers"; "Tabbed Shelf" = "Tabbed Shelf"; "Show Tabbed Shelf" = "Show Tabbed Shelf"; "Hide Tabbed Shelf" = "Hide Tabbed Shelf"; "Remove Current Tab" = "Remove Current Tab"; "Rename Current Tab" = "Rename Current Tab"; "Add Tab..." = "Add Tab..."; "Terminal" = "Terminal"; "Run..." = "Run..."; "History" = "History"; "Show History" = "Show History"; "Go backward" = "Go backward"; "Go forward" = "Go forward"; "Show Desktop" = "Show Desktop"; "Hide Desktop" = "Hide Desktop"; "Show Recycler" = "Show Recycler"; "Hide Recycler" = "Hide Recycler"; "Check for disks" = "Check for disks"; "Windows" = "Windows"; "Arrange in Front" = "Arrange in Front"; "Miniaturize Window" = "Miniaturize Window"; "Close Window" = "Close Window"; "Services" = "Services"; "Hide" = "Hide"; "Hide Others" = "Hide Others"; "Show All" = "Show All"; "Print..." = "Print..."; "Quit" = "Quit"; "Logout" = "Logout"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "See https://www.gnustep.org/experience/GWorkspace.html"; "Released under the GNU General Public License 2.0" = "Released under the GNU General Public License 2.0"; "Error" = "Error"; "You have not write permission\nfor" = "You do not have write permission\nfor"; "Continue" = "Continue"; "File Viewer" = "File Viewer"; "Quit!" = "Quit"; "Do you really want to quit?" = "Do you really want to quit?"; "Yes" = "Yes"; "No" = "No"; "Log out" = "Log out"; "Are you sure you want to quit\nall applications and log out now?" = "Are you sure you want to quit\nall applications and log out now?"; "If you do nothing, the system will log out\nautomatically in " = "If you do nothing, the system will log out\nautomatically in "; "seconds." = "seconds."; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Cancel"; "Move" = "Move"; "Move from: " = "Move from: "; "\nto: " = "\nto: "; "Copy from: " = "Copy from: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Delete"; "Delete the selected objects?" = "Delete the selected objects?"; "Duplicate" = "Duplicate"; "Duplicate the selected objects?" = "Duplicate the selected objects?"; "From:" = "From:"; "To:" = "To:"; "In:" = "In:"; "Stop" = "Stop"; "Pause" = "Pause"; "Moving" = "Moving"; "Copying" = "Copying"; "Linking" = "Linking"; "Duplicating" = "Duplicating"; "Destroying" = "Destroying"; "File Operation Completed" = "File Operation Completed"; "Backgrounder connection died!" = "Background connection died!"; "Some items have the same name;\ndo you want to substitute them?" = "Some items have the same name;\ndo you want to substitute them?"; "File Operation Error!" = "File Operation Error!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "You do not have write permission\nfor "; "The name " = "The name "; " is already in use!" = " is already in use!"; "Cannot rename " = "Cannot rename "; "Invalid char in name" = "Invalid character in name"; /* ----------------------------- Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "free"; /* GWViewersManager.m */ "Are you sure you want to open" = "Are you sure you want to open"; "items?" = "items?"; "error" = "error"; "Can't open " = "Can't open "; /* ---------------------------- Inspectors strings --------------------------- */ "Items" = "Items"; /* Attributes.m */ "Attributes Inspector" = "Attributes Inspector"; "Path:" = "Path:"; "Link to:" = "Link To:"; "Size:" = "Size:"; "Calculate" = "Calculate"; "Owner:" = "Owner:"; "Group:" = "Group:"; "Changed" = "Changed"; "Revert" = "Revert"; "also apply to files inside selection" = "Apply to subfolders"; "Permissions" = "Permissions"; "Read" = "Read"; "Write" = "Write"; "Execute" = "Execute"; "Owner_short" = "Owner"; "Group" = "Group"; "Other" = "Other"; /* ContentsPanel.m */ "Contents Inspector" = "Contents Inspector"; "No Contents Inspector" = "No Contents Inspector"; "No Contents Inspector\nFor Multiple Selection" = "No Contents Inspector\nfor Multiple Selection"; "No Contents Inspectors found!" = "No Contents Inspectors found!"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder"; "Sort by" = "Sort by"; "Name" = "Name"; "Date" = "Date"; "Folder Inspector" = "Folder Inspector"; /* ImageViewer.m */ "Image Inspector" = "Image Inspector"; /* AppViewer.m */ "Open these kinds of documents:" = "Open these kinds of documents:"; "Invalid Contents" = "Invalid Contents"; "App Inspector" = "App Inspector"; /* Tools.m */ "Tools Inspector" = "Tools Inspector"; "No Tools Inspector" = "No Tools Inspector"; "Set Default" = "Set Default"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Finder"; "No selection!" = "No selection!"; "No arguments!" = "No arguments!"; "Search in:" = "Search in:"; "Current selection" = "Current selection"; "Add" = "Add"; "Remove" = "Remove"; "Search for items whose:" = "Search for items whose:"; "Specific places" = "Specific places"; "Recursive" = "Recursive"; "Search" = "Search"; /* names */ "contains" = "contains"; "is" = "is"; "contains not" = "contains not"; "starts with" = "starts with"; "ends with" = "ends with"; "name" = "Name"; /* size */ "size"="Size"; "greater than"="greater than"; "less than"="less than"; /* annotations */ "annotations"="Annotations"; "contains one of"="contains one of"; "contains all of"="contains all of"; "with exactly"="with exactly"; "without one of"="without one of"; /* owner */ "owner"="Owner"; /* date */ "date created"="Date created"; "date modified"="Date modified"; "is today" = "is today"; "is within" = "is within"; "is before" = "is before"; "is after" = "is after"; "is exactly" = "is exactly"; "the last day" = "the last day"; "the last 2 days" = "the last 2 days"; "the last 3 days" = "the last 3 days"; "the last week" = "the last week"; "the last 2 weeks" = "the last 2 weeks"; "the last 3 weeks" = "the last 3 weeks"; "the last month" = "the last month"; "the last 2 months" = "the last 2 months"; "the last 3 months" = "the last 3 months"; "the last 6 months" = "the last 6 months"; /* type */ "type"="Type"; "is not" = "is not"; "plain file" = "Plain file"; "folder" = "Folder"; "tool" = "Tool"; "symbolic link" = "Symbolic link"; "application" = "Application"; /* contents */ "contents"="Contents"; "includes"="includes"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "New Layer"; "A layer with this name is already present!" = "A layer with this name is already present!"; "You can't remove the last layer!" = "You can't remove the last layer!"; "Remove layer" = "Remove layer"; "Are you sure that you want to remove this layer?" = "Are you sure you want to remove this layer?"; "Rename Layer" = "Rename Layer"; "You can't dock multiple paths!" = "You can't dock multiple paths!"; "This object is already present in this layer!" = "This object is already present in this layer!"; /* ----------------------- Preference strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace Preferences"; /* XTermPref.m */ "Terminal" = "Terminal"; "Set" = "Set"; "Use Terminal service" = "Use Terminal service"; "arguments" = "arguments"; /* BrowserViewerPref.m */ "Column Width" = "Column Width"; "Use Default Settings" = "Use Default Settings"; /* DefaultEditor.m */ "Editor" = "Editor"; "Default Editor" = "Default Editor"; "No Default Editor" = "No Default Editor"; "Choose" = "Choose"; /* DefSortOrderPref.m */ "Sorting Order" = "Sorting Order"; "The method will apply to all the folders" = "The method will apply to all the folders"; "that have no order specified" = "that have no order specified"; /* HiddenFilesPref.m */ "Hidden Files" = "Hidden Files"; "Files" = "Files"; "Folders" = "Folders"; "Activate changes" = "Activate changes"; "Load" = "Load"; "Hidden files" = "Hidden files"; "Shown files" = "Shown files"; "Select and move the files to hide or to show" = "Select and move the files to hide or to show"; "Hidden directories" = "Hidden directories"; /* IconsPrefs.m */ "Icons" = "Icons"; "Thumbnails" = "Thumbnails"; "use thumbnails" = "Use thumbnails"; "Title Width" = "Title Width"; /* DesktopPref.m */ "Desktop" = "Desktop"; "Background"="Background"; "General"="General"; "Color:" = "Color:"; "center" = "Center"; "fit" = "Fit"; "tile" = "Tile"; "scale" = "Scale"; "Use image"="Use image"; "Choose"="Choose"; "Dock" = "Dock"; "Show Dock"="Show Dock"; "Position:"="Position:"; "Style:"="Style:"; "Left"="Left"; "Right"="Right"; "Classic"="Classic"; "Modern"="Modern"; "Omnipresent"="Omnipresent"; "Autohide Tabbed Shelf"="Autohide Tabbed Shelf"; "Single Click Launch"="Single Click Launch"; /* OperationPrefs.m */ "File Operations" = "File Operations"; "Operation Preferences"="Operation Preferences"; "Status Window"="Status Window"; "Confirmation"="Confirmation"; "Show status window"="Show status window"; "Check this option to show a status window"="Check this option to show a status window"; "during the file operations"="during the file operations"; "Uncheck the buttons to allow automatic confirmation"="Uncheck the buttons to allow automatic confirmation"; "of file operations"="of file operations"; /* HistoryPref.m */ "Number of saved paths"="Number of saved paths"; /* -------- */ /* OpenWithController */ "Open With" = "Open With"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; /* Recycler strings */ "Recycle: " = "Recycle: "; "Recycler: " = "Recycler: "; "Recycler" = "Recycler"; "the Recycler" = "the Recycler"; "\nto the Recycler" = "\nto the Recycler"; "Move from the Recycler " = "Move from the Recycler "; "In" = "In"; "Empty Recycler" = "Empty Recycler"; "Empty the Recycler?" = "Empty the Recycler?"; "Put Away" = "Put Away"; gworkspace-1.1.0/GWorkspace/Resources/English.lproj/OpenWith.gorm/0000755000175000001440000000000013214346542024360 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/OpenWith.gorm/data.classes0000644000175000001440000000122213214346542026645 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CompletionField = { Actions = ( ); Outlets = ( fm, controller ); Super = NSTextView; }; FirstResponder = { Actions = ( "cancelButtAction:", "completionFieldDidEndLine:", "okButtAction:" ); Super = NSObject; }; NSObject = { Actions = ( "completionFieldDidEndLine:" ); }; OpenWithController = { Actions = ( "cancelButtAction:", "okButtAction:", "completionFieldDidEndLine:" ); Outlets = ( win, firstLabel, secondLabel, cancelButt, okButt, cfield ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/OpenWith.gorm/data.info0000644000175000001440000000027013214346542026145 0ustar multixusersGNUstep archive00002e7f:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/OpenWith.gorm/objects.gorm0000644000175000001440000000735013214346542026704 0ustar multixusersGNUstep archive00002e7f:00000022:00000061:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C B&% C D @01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01 NSTextField1 NSControl% A B C A  C A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 &,%,Type the name or the path of the application0 1NSFont%0 & % Helvetica A@A@&&&&&&&& &&&&&&%0 1NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00&%NSCalibratedWhiteColorSpace ?0% A B C A  C A&0 &%00&$%$to use to open the current selection &&&&&&&& &&&&&&% 0 ?01NSButton% CB A  B` A  B` A&0 &%01 NSButtonCell0&%Cancel0%&&&&&&&&&&&&&&%0&0&&&& &&0% C A  B` A  B` A&0 &%0!0"&%Ok0#1NSImage0$& % common_ret&&&&&&&&&&&&&&%0%&% 0&&0'0(& % common_retH&&& &&0)1 NSScrollView% A B4 C A  C A&0* &0+1 NSClipView% @ @ C A A B< C A&0, &0-1GSTextViewTemplate0.&%CompletionField1 NSTextView1NSText% A B4 C A  C A&0/ &  C A K K0001& % textColor C K +% A A A A 0203&%System04&%windowBackgroundColor05&%Window06& % Open with...6 ? B F@ F@%0708&%NSApplicationIcon&   D D09 &0: &0;1NSMutableDictionary1 NSDictionary&0<&%NSOwner0=&%OpenWithController0>&%Button10?& % ScrollView(0))0@& % TextField0A&%Button0B& % TextView(0)-0C& % TextField10D& % GormNSWindow0E &0F1NSNibConnectorD<0G@<0HC<0IA<0J><0K?0LB?0M1 NSNibOutletConnector0T1!NSMutableString& % nextKeyView0U1"NSNibControlConnector><0V& % okButtAction:0W"A<0X&%cancelButtAction:0Y 0`&%okButt0a&B.gworkspace-1.1.0/GWorkspace/Resources/English.lproj/OperationPrefs.gorm/0000755000175000001440000000000013214346542025563 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/OperationPrefs.gorm/data.classes0000644000175000001440000000075113214346542030056 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; OperationPrefs = { Actions = ( "setUnsetStatWin:", "setUnsetFileOp:" ); Outlets = ( win, prefbox, tabView, statusBox, statChooseButt, confirmBox, confMatrix, labelinfo1, labelinfo2, statusinfo1, statusinfo2, statuslabel ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/OperationPrefs.gorm/objects.gorm0000644000175000001440000001733713214346542030115 0ustar multixusersGNUstep archive00002c88:00000022:000000ca:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C C&% C D3@01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C& 0 &0 %  C C  C C&0 &0 1 NSTabView%  C C  C C& 0 &0 % ? ? C Cm  C Cm&0 &0% C Bh C C!  C C!&0 &0 % @ @ C C   C C &0 &01NSMatrix1 NSControl% A A0 B B  B B&0 &%01 NSActionCell1NSCell0&01NSFont%0& % Helvetica A@A@&&&&&&&&&&&&&&%% B A 01NSColor0&%NSNamedColorSpace0&%System0&%controlBackgroundColor0& % NSButtonCell01 NSButtonCell0&%Switch0 1NSImage0!1NSMutableString&%common_SwitchOff&&&&&&&&&&&&&&%0"&0#&0$0%&%common_SwitchOn&&&%%0& &0'0(&%Move 0)% A@&&&&&&&&&&&&&&%"#$&&&0*0+&%Copy )&&&&&&&&&&&&&&%"#$&&&0,0-&%Link )&&&&&&&&&&&&&&%"#$&&&0.0/&%Recycler )&&&&&&&&&&&&&&%"#$&&&0001& % Duplicate )&&&&&&&&&&&&&&%"#$&&&0203&%Destroy )&&&&&&&&&&&&&&%"#$&&&'041NSTextFieldCell05& % Confirmation&&&&&&&&0&&&&&&%0607&%System08&%windowBackgroundColor090:&%System0;& % textColor %%0<1 NSTextField% A B C A  C A&0= &%0>0?&3%3Uncheck the buttons to allow automatic confirmation)&&&&&&&&0&&&&&&%0@0A&%System0B&%textBackgroundColor0C0D&%NSCalibratedWhiteColorSpace > ?0E% A A C A  C A&0F &%0G0H&%of the file operations)&&&&&&&&0&&&&&&%0I0J&%System0K&%textBackgroundColor0LD > ?0M &0N1 NSTabViewItem0O&%item 10P&%Item 10Q % ? ? C Cm  C Cm&0R &0S% B B CE B  CE B&0T &0U % @ @ CA B  CA B&0V &0W1NSButton% B B$ A A  A A&0X &%0Y0Z&%Switch &&&&&&&&&&&&&&%0[&0\&$&&&0]% A A C- A  C- A&0^ &%0_0`&%Show status window)&&&&&&&&0&&&&&&%0a0b&%System0c&%textBackgroundColor0dD > ?0e0f& % Status Window)f&&&&&&&&0&&&&&&%60g0h&%System0i& % textColor %%0j% A B C A  C A&0k &%0l0m&)%)Check this option to show a status window)&&&&&&&&0&&&&&&%0n0o&%System0p&%textBackgroundColor0qD > ?0r% A B\ C A  C A&0s &%0t0u&%during the file operations)u&&&&&&&&0&&&&&&%0v0w&%System0x&%textBackgroundColor0yD > ?% 0z0{&%item 20|&%Item 2 % %%0}0~&%Box&&&&&&&&0&&&&&&%600&%System0& % textColor %%60&%Window0&%Operation Preferences C @@ F@ F@%00&%NSApplicationIcon&   D D0 &0 &01NSMutableDictionary1 NSDictionary&0&%Box10&%NSOwner0&%OperationPrefs0& % TextField1j0&%Box20& % TextField2r0& % TextField]0& % TextField3<0& % GormNSWindow0&%TabView 0& % TextField4E0&%ButtonW0&%BoxS0&%Matrix0&%MenuItem01 NSMenuItem0&%Item 10&&&%00& % common_Nibble%0 &01 NSNibConnector0&%NSOwner0 0 0 0 0 0 0 0 0 0 0 0 01!NSNibOutletConnector0&%prefbox0!0&%tabView0!0& % statusBox0!0&%statChooseButt0!0& % confirmBox0!0& % confMatrix01"NSNibControlConnector0&%setUnsetStatWin:0"0&%setUnsetFileOp:0!0& % labelinfo10!0& % labelinfo20!0& % statuslabel0±!0ñ& % statusinfo10ı!0ű& % statusinfo20Ʊ!0DZ&%win0ȱ&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/PrefWindow.gorm/0000755000175000001440000000000013214346542024707 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/PrefWindow.gorm/data.classes0000644000175000001440000000047713214346542027207 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; PrefController = { Actions = ( "activatePrefView:" ); Outlets = ( win, topBox, popUp, viewsBox ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/PrefWindow.gorm/data.info0000644000175000001440000000027013214346542026474 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/PrefWindow.gorm/objects.gorm0000644000175000001440000000562113214346542027232 0ustar multixusersGNUstep archive00002c24:00000021:00000051:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C DB01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&20 &0 %  C C  C C&0 &0 1NSTextFieldCell1 NSActionCell1NSCell0 &%Box0 1NSFont%0& % Helvetica A@A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor00&%System0& % textColor %%0% C C B8  C B8&0 &0 % @ @ C B(  C B(&0 &01 NSPopUpButton1NSButton1 NSControl% B A@ C A  C A&0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0&%Button &&&&&&&&01NSMenu0&0 &0!1 NSMenuItem0"&%Item 10#&&&%0$1NSImage0%& % common_Nibble%%0&&0'&&&&!%%%%%0(0)&%Box &&&&&&&&0%0*0+&%System0,& % textColor %%0-&%Window0.& % Preferences. C C F@ F@%0/00&%NSApplicationIcon&   D D01 &02 &031NSMutableDictionary1 NSDictionary&04&%NSOwner05&%PrefController06&%Box07&%Box108&%MenuItem090:&%Item 10;&&&%$%0<& % GormNSWindow0=& % MenuItem1!0>&%GormNSPopUpButton0? &  0@1NSNibConnector<0A&%NSOwner0B70C80D60E>0F=0G1 NSNibOutletConnectorA<0H&%win0I A60J&%topBox0K A>0L&%popUp0M A70N&%viewsBox0O1!NSNibControlConnector>A0P&%activatePrefView:0Q&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/RunExternal.gorm/0000755000175000001440000000000013214346542025072 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/RunExternal.gorm/data.classes0000644000175000001440000000124713214346542027366 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CompletionField = { Actions = ( "initForController:" ); Outlets = ( fm, controller ); Super = NSTextView; }; FirstResponder = { Actions = ( "cancelButtAction:", "completionFieldDidEndLine:", "initForController:", "okButtAction:" ); Super = NSObject; }; NSObject = { Actions = ( "completionFieldDidEndLine:" ); }; RunExternalController = { Actions = ( "cancelButtAction:", "okButtAction:" ); Outlets = ( win, titleLabel, secondLabel, cancelButt, okButt, cfield ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/RunExternal.gorm/data.info0000644000175000001440000000027013214346542026657 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/RunExternal.gorm/objects.gorm0000644000175000001440000001076613214346542027423 0ustar multixusersGNUstep archive000f4240:00000022:0000006e:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? A C B&% C D)01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01 NSTextField1 NSControl% A B C A  C A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 &%Run0 1NSFont%0 & % Helvetica AA&&&&&&&& &&&&&&%0 1NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0 % A B C A  C A&0 &%00&%Type command to run0%0& % Helvetica A@A@&&&&&&&& &&&&&&% 01NSButton% C: A Bp A  Bp A&0 &%01 NSButtonCell0&%Cancel0%&&&&&&&&&&&&&&%0&&&& &&0% C{ A Bp A  Bp A&0 &%0!0"&%Ok0#1NSImage0$& %  common_ret&&&&&&&&&&&&&&%0%&% 0&0'& % common_retH&&& &&0(1 NSScrollView% A B< C A  C A&0) &0*1 NSClipView% @ @ C A A B< C A&0+1GSTextViewTemplate0,&%CompletionField1 NSTextView1NSText% A B< C A  C A&*0- &  C A K K C K0. &+ *% A A A A 0/00&% System01&% windowBackgroundColor02&%Window03&%Run3 A F8 F%0405&% NSApplicationIcon&   D D@06 &07 &081NSMutableDictionary1 NSDictionary& 09& % GormNSWindow0:& % ClipView(0)*0;& % ScrollView(0)0<% A  B C  B C&0= &0>% A @ B C A  B C&0?% A  B C  B C&>0@ &  B C K K B K0A &? 0B1 NSScroller% @ @ A C  A C&0C &%0D&&&&&&&&&&&&&&&<2 _doScroll:v12@0:4@8>% A A A A B0E& % ScrollView(1)(0F& % TextField0G&%Button10H&%Button0I&% NSOwner0J&%RunExternalController0K& % TextView(1)+0L& % TextField10M& % TextView(0)?0N &0O1NSNibConnector90P&% NSOwner0QFP0RLP0SHP0TGP0U;0VM;0WE0XK:0Y1 NSNibOutletConnectorKP0Z& % controller0[ KG0\1!NSMutableString& % nextKeyView0]:E0^ PH0_& % cancelButt0` PG0a&%okButt0b PK0c&%cfield0d PF0e& % titleLabel0f PL0g& % secondLabel0h P90i&%win0j1"NSNibControlConnectorGP0k& % okButtAction:0l"HP0m&%cancelButtAction:0n&K,gworkspace-1.1.0/GWorkspace/Resources/English.lproj/SearchResults.gorm/0000755000175000001440000000000013214346542025412 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/SearchResults.gorm/data.classes0000644000175000001440000000072613214346542027707 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "stopSearch:", "restartSearch:" ); Super = NSObject; }; SearchResults = { Actions = ( "stopSearch:", "restartSearch:" ); Outlets = ( win, topBox, progBox, elementsLabel, stopButt, restartButt, dragIconBox, resultsScroll, pathBox ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/SearchResults.gorm/data.info0000644000175000001440000000027013214346542027177 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/SearchResults.gorm/objects.gorm0000644000175000001440000000772513214346542027744 0ustar multixusersGNUstep archive00002c24:00000020:0000006e:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C D@@01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox% C C B  C B& 0 &0 % @ @ C A  C A&0 &0 1NSButton1 NSControl% C @ A A  A A&0 &%0 1 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%&&&&&&&&%0&0&&&&0% C @ A A  A A&0 &%00&%Button&&&&&&&&%0&0&&&&01 NSTextField% A @ B A  B A&0 &%01NSTextFieldCell0&%Text&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor0 0!& % textColor0"% @ @ A A  A A&0# &0$ %  A A  A A&0% &0&0'&%Box&&&&&&&& %%0(% C @ A A  A A&0) &0* %  A A  A A&0+ &0,0-&%Box&&&&&&&& %%0.0/&%Box&&&&&&&& %%00% A A  C B(  C B(&"01 &02 % @ @ C B  C B&03 &0405&%Box&&&&&&&& %%061 GSCustomView1 GSNibItem07& % NSScrollView A Bd C C&0809&%System0:&%windowBackgroundColor0;&%Window0<&%Search Results< C CH F@ F@%0=1NSImage0>&%NSApplicationIcon&   D D0? &0@ &0A1NSMutableDictionary1 NSDictionary& 0B&%NSOwner0C& % SearchResults0D&%GormCustomView60E&%Button10F&%Box0G&%Box1"0H& % TextField0I&%Button 0J&%Box2(0K& % GormNSWindow0L&%Box400M&%View120N &0O1NSNibConnectorF0PI0QH0RG0SJ0T1NSNibOutletConnector0U&%NSOwnerJ0V& % dragIconBox0WUH0X& % elementsLabel0YUG0Z&%progBox0[UI0\& % restartButt0]UE0^&%stopButt0_UF0`&%topBox0aUK0b&%win0c1NSNibControlConnectorIU0d&%restartSearch:0eEU0f& % stopSearch:0gL0hML0iUL0j&%pathBox0kD0lUD0m1 NSMutableString& % resultsScroll0n&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/ShelfPref.gorm/0000755000175000001440000000000013214346542024501 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/ShelfPref.gorm/data.classes0000644000175000001440000000074213214346542026774 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; ArrResizer = { Actions = ( "initForController:" ); Outlets = ( ); Super = NSView; }; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; ShelfPref = { Actions = ( "setDefaultWidth:" ); Outlets = ( win, prefbox, iconbox, imView, leftResBox, rightResBox, nameField, setButt ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/ShelfPref.gorm/objects.gorm0000644000175000001440000001046213214346542027023 0ustar multixusersGNUstep archive00002c24:00000020:0000007c:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C DC01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % B B CE B  CE B&0 &0 % @ @ CA B  CA B&0 &01 NSImageView1 NSControl% B A B@ B@  B@ B@&0 &%01 NSImageCell1NSCell01NSFont%0& % Helvetica A@A@&&&&&&&&%%% ? ?01 NSTextField% B @ B@ A  B@ A&0 &%01NSTextFieldCell1 NSActionCell0&0% A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B @ A A  A A&0 &0! %  A A  A A&0" &0#0$&%Box&&&&&&&&0%0%0&&%System0'&%windowBackgroundColor0(0)&%System0*& % textColor %%0+% Bh @ A A  A A&0, &0- %  A A  A A&0. &0/00&%Box&&&&&&&&0%0102&%System03&%windowBackgroundColor0405&%System06& % textColor %%0708& % Title Width&&&&&&&&0%%090:&%System0;& % textColor %%0<1NSButton% C Bx C A  C A&0= &%0>1 NSButtonCell0?&%Use Default Settings?&&&&&&&&%0@&0A&&&&0B0C&%Box&&&&&&&&0%%0D0E&%System0F& % textColor %%%0G&%Window0H&%Window0I&%Window C C F@ F@%0J1NSImage0K&%NSApplicationIcon&   D D0L &0M &0N1NSMutableDictionary1 NSDictionary& 0O&%NSOwner0P& % ShelfPref0Q& % ImageView0R&%Box 0S&%Box10T& % TextField0U&%Button<0V&%Box20W& % GormNSWindow0X&%Box3+0Y&%MenuItem0Z1 NSMenuItem0[&%Item 10\&&&%0]0^& % common_Nibble%0_ &0`1NSNibConnectorW0a&%NSOwner0bS0cY0dR0eQ0fT0gU0hV0iX0j1NSNibOutletConnectoraW0k&%win0laS0m&%prefbox0naR0o&%iconbox0paQ0q&%imView0raX0s& % leftResBox0taV0u& % rightResBox0vaT0w& % nameField0xaU0y&%setButt0z1 NSNibControlConnectorUa0{&%setDefaultWidth:0|&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/StartAppWin.gorm/0000755000175000001440000000000013214346542025037 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/StartAppWin.gorm/data.classes0000644000175000001440000000045213214346542027330 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; StartAppWin = { Actions = ( ); Outlets = ( win, startLabel, nameField, progInd ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/StartAppWin.gorm/objects.gorm0000644000175000001440000000427313214346542027364 0ustar multixusersGNUstep archive00002c24:0000001a:0000003c:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C Bl&% C݀ D 01 NSView%  C Bl  C Bl&01 NSMutableArray1 NSArray&01NSProgressIndicator% A A0 Cz A  Cz A&0 & ?UUUUUU @I @Y0 1 NSTextField1 NSControl% A B B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 & % starting:0 1NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B B C/ A  C/ A&0 &%00& % fswatcher &&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor00&%System0&%windowBackgroundColor0 &%Window0!&%Window0"&%Window ? B F@ F@%0#1NSImage0$&%NSApplicationIcon&   D D0% &0& &0'1NSMutableDictionary1 NSDictionary&0(&%NSOwner0)& % StartAppWin0*&%ProgressIndicator0+& % TextField 0,& % TextField10-& % GormNSWindow0. &0/1NSNibConnector-00&%NSOwner01*02+03,0041NSNibOutletConnector0-05&%win060+07& % startLabel080,09& % nameField0:0*0;&%progInd0<&gworkspace-1.1.0/GWorkspace/Resources/English.lproj/XTermPref.gorm/0000755000175000001440000000000013214346542024477 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/English.lproj/XTermPref.gorm/data.classes0000644000175000001440000000071213214346542026767 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "setUseService:" ); Super = NSObject; }; XTermPref = { Actions = ( "setXTerm:", "setUseService:" ); Outlets = ( win, prefbox, fieldsBox, xtermLabel, argsLabel, setButt, serviceBox, serviceCheck, xtermField, argsField ); Super = NSObject; }; }gworkspace-1.1.0/GWorkspace/Resources/English.lproj/XTermPref.gorm/data.info0000644000175000001440000000027013214346542026264 0ustar multixusersGNUstep archive00002e7f:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/GWorkspace/Resources/English.lproj/XTermPref.gorm/objects.gorm0000644000175000001440000001271013214346542027017 0ustar multixusersGNUstep archive00002e7f:0000001f:00000095:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C C&% C DE01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 % B C4 C BT  C BT&0 &0 % @ @ C} B  C} B&0 &01NSButton1 NSControl% BX A  C A  C A&0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Use Terminal service01NSImage01NSMutableString&%common_SwitchOff01NSFont%0& % Helvetica A@A@&&&&&&&&&&&&&&%0&0&00&%common_SwitchOn&&& &&00& % Terminal.app0%&&&&&&&&&&&&&& %%0% B A C C"  C C"&0 &0 % @ @ Cs C  Cs C&0! &0"% Bx  B A  B A&0# &%0$0%&%Set&&&&&&&&&&&&&&%0&&0'&&&& &&0(1 NSTextField% @ B Ci A  Ci A&0) &%0*1NSTextFieldCell0+&%xterm0,% A@+&&&&&&&& &&&&&&%0-1NSColor0.&%NSNamedColorSpace0/&%System00&%textBackgroundColor01./02& % textColor03% B B B A  B A&04 &%0506&,6&&&&&&&& &&&&&&%-107% B Ci A  Ci A&08 &%090:& % arguments,:&&&&&&&& &&&&&&%-10;% @ B, Ci A  Ci A&0< &%0=0>&,&&&&&&&& &&&&&&%-10?0@& % XTerminal@&&&&&&&&&&&&&& @ @%%0A0B&%Box&&&&&&&& &&&&&&%0C.0D&%System0E&%windowBackgroundColor1 %%C0F&%Window0G&%Window0H&%Window C C F@ F@%0I0J&%NSApplicationIcon&   D D0K &0L &0M1NSMutableDictionary1 NSDictionary&0N&%Box10O&%NSOwner0P& % XTermPref0Q& % TextField130R&%View(1)0S % @ @ C} B  C} B&0T &0U&%Box2 0V&%View(3) 0W&%Box(0)0X& % TextField270Y& % TextField(0Z& % TextField3;0[& % GormNSWindow0\&%Button"0]&%View(0) 0^&%Box0_% B B8 C C  C C&0` &S0a0b& % XTerminal&&&&&&&& &&&&&&%C1 %%0c&%View(2) 0d&%MenuItem0e1 NSMenuItem0f&%Item 10g&&&%0h0i& % common_Nibble%0j&%Button10k &0l1NSNibConnector[0m&%NSOwner0nN0od0p^]0qYW0rQW0sXW0tZW0u\W0v1NSNibOutletConnectorm[0w&%win0xmN0y&%prefbox0zm^0{& % fieldsBox0|m\0}&%setButt0~1NSNibControlConnector\m0& % setXTerm:0U]0jc0mj0& % serviceCheck0mU0& % serviceBox0jm0&%setUseService:0mY0& % xtermLabel0mX0& % argsLabel0mZ0& % argsField0mQ0& % xtermField0]N0R^0cU0W]0VW0&gworkspace-1.1.0/GWorkspace/Resources/Esperanto.lproj/0000755000175000001440000000000014654675302022237 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Esperanto.lproj/Localizable.strings0000644000175000001440000003415214654675302026100 0ustar multixusers/* Attempt of a GWorkspace translation to Esperanto ** ingolf jandt, jan 2006 */ /* ----------------------- menu strings --------------------------- *\ /* up-to-date version according to interface/source files */ "Info" = "Info"; "Info Panel..." = "Informpanelo..."; "Preferences..." = "Agordaĝoj..."; "Help..." = "Helpo..."; "Activate context help" = "Aktivigu kunteksthelpon"; "File" = "Dosiero"; "Open" = "Malfermu"; "Open With..." = "Malfermu per..."; "Open as Folder" = "Malfermu kiel dosierujo"; "Edit File" = "Redaktu dosieron"; "New Folder" = "Nova dosierujo"; "New File" = "Nova dosiero"; "Duplicate" = "Duobligu"; "Destroy" = "Detruu"; "Move to Recycler" = "Ĵetu en rubujon"; "Empty Recycler" = "Malplenigu rubujon"; "Edit" = "Redaktu"; "Cut" = "Eltondu"; "Copy" = "Kopiu"; "Paste" = "Enmetu"; /* "Delete" = "Forviŝu" */ "Select All" = "Elektu ĉion"; "View" = "Rigardo"; "Browser" = "Krozilo"; "Icon" = "Piktogramoj"; "List" = "Listo"; "Show" = "Montru"; "Name only" = "Nur nomon"; "Type" = "Tipo"; /*"Kind" = "Tipon";*/ "Size" = "Grandecon"; "Modification date" = "Ŝanĝan daton"; "Owner" = "Posedanton"; "Role" = "Rolon"; "Icon Size" = "Piktograma grandeco"; "Icon Position" = "Piktograma posicio"; "Up" = "Supre"; "Left" = "Maldekstre"; "Label Size" = "Surskriba grandeco"; "Viewer" = "Montrilo"; "Tools" = "Iloj"; "Inspectors" = "Inspektanoj..."; "Show Inspectors" = "Montru inspektantojn"; "Attributes" = "Propecoj"; "Contents" = "Enhavo"; "Tools" = "Iloj"; "Permissions" = "Permesoj"; "Annotations" = "Notoj"; "Finder" = "Trovilo"; "Fiend" = "Fantomo"; "Show Fiend" = "Montru fantomon"; "Hide Fiend" = "Kaŝu fantomon"; "Add Layer..." = "Nova tabulo..."; "Remove Current Layer" = "Forigu aktualan tabulon"; "Rename Current Layer" = "Alinomu aktualan tabulon"; "Layers" = "Tabuloj"; "Tabbed Shelf" = "Taba breto"; "Show Tabbed Shelf" = "Montru taban breton"; "Hide Tabbed Shelf" = "Kaŝu taban breton"; "Remove Current Tab" = "Forigu aktualan tabon"; "Rename Current Tab" = "Alinomu aktualan tabon"; "Add Tab..." = "Nova tabo..."; "Terminal" = "Terminalo"; "Run..." = "Rulu..."; "History" = "Historio"; "Show History" = "Montru historion"; "Go backward" = "Reen"; "Go forward" = "Antaŭen"; "Show Desktop" = "Montru tablon"; "Hide Desktop" = "Kaŝu tablon"; "Show Recycler" = "Montru rubujon"; "Hide Recycler" = "Kaŝu rubujon"; "Check for disks" = "Ekzamenu je disketoj"; /* depre... */ "Processes..." = "Procezoj..."; "Applications..." = "Aplikoj..."; "DeskTop Shelf" = "Tabula breto"; "XTerm" = "XTerm"; /* ...cated */ "Windows" = "Fenestroj"; "Arrange in Front" = "Aranĝu antaŭen"; "File Viewer" = "Dosiermontrilo"; "Miniaturize Window" = "Miniaturiĝu fenestron"; "Close Window" = "Fermu fenestron"; "Window" = "Fenestro"; "Services" = "Servoj"; "Print..." = "Printu..."; "Show All" = "Montru ĉiujn"; "Hide" = "Kaŝu"; "Hide Others" = "Kaŝu aliajn"; "Quit" = "Finu"; "Logout" = "Adiaŭu"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "Author: Enrico Sersale " = " Aŭtoro: Enrico SERSALE "; "See http://www.gnustep.it/enrico/gworkspace" = "Vide http://www.gnustep.it/enrico/gworkspace"; "Released under the GNU General Public License 2.0" = "Publicita laŭ la GNU General Public License 2.0"; "Quit!" = "Finu!"; "Do you really want to quit?" = "Ĉu vi vere volas fini?"; "No" = "Ne"; "Yes" = "Jes"; "Are you sure you want to quit\nall applications and log out now?" = "Ĉu vi certas ke vi volas\nfinigi ĉiujn aplikojn kaj adiaŭi?"; "If you do nothing, the system will log out\nautomatically in " = "Se vi faros nenion sistemo\naŭtomate finos post "; "seconds." = "sekundoj."; "Error" = "Eraro"; "You have not write permission\nfor" = "Vi ne havas skribpermeson\nje"; "Continue" = "Daŭrigu"; ": no such file or directory!" = ": neniu tiel dosiero aŭ dosierujo."; "unable to contact fswatcher\nfswatcher notifications disabled!" = "Ne povas konatiĝi fswatcher\nfswacher-notifikoj malŝaltiĝas."; "The fswatcher connection died.\nDo you want to restart it?" = "La konekto al fswatcher mortis.\nĈu vi volas relanĉi tiun?"; "fswatcher notifications disabled!" = "fswatcher-notifikoj malŝaltigis."; "unable to contact Recycler!" = "Ne povas konatiĝi rubujon."; "The Recycler connection died.\nDo you want to restart it?" = "La konekto al rubujon mortis.\nĈu vi volas relanĉi tiun?"; "unable to contact Operation!" = "Ne povas konatiĝi Operation."; "The Operation connection died. File operations disabled!" = "La konekto al Operation mortis.\nDosiera operacioj malŝaltas."; "unable to contact ddbd." = "Ne povas konatiĝi ddbd."; "ddbd connection died." = "La konekto al ddbd mortis."; /* Inspector/Attributes.m */ "Link to:" = "Ligo al:"; "Size:" = "Grandeco:"; "Calculate" = "Kalkulu"; "Owner:" = "Posedanto:"; "Group:" = "Grupo:"; "Changed" = "Ŝanĝita:"; "Permissions" = "Permesoj"; "Read" = "Legi"; "Write" = "Skribi"; "Execute" = "Ruli"; "Owner" = "Posedanto"; "Group" = "Grupo"; "Others" = "Alioj"; "also apply to files inside selection" = "Apliku ankaŭ en elektitaj dosieroj"; "Revert" = "Remetu"; "OK" = "Konfirmu"; "Attributes" = "Propecoj"; "Attributes Inspector" = "Propeca inspektanto"; "Path:" = "Dosierindiko:"; "items" = "anoj"; /* Operation/Operation.m */ "Wait the operations to terminate!" = "Bonvolu atendi ĝis la operacioj finiĝis."; ": no such file or directory!" = ": neniu tiel dosiero aŭ dosierujo."; /* GWRemote/gwsd/FileOp.m */ "File operation error:" = "Eraro dum dosiera operacio:"; "with file:" = "apud dosiero:"; /* from here on still based on the outdated English Localizable.strings ** file of release 0.7.2 */ "OK" = "Konfirmu"; "Cancel" = "Rezignu"; "Move" = "Ŝovu"; "Move from: " = "Ŝovu el: "; "\nto: " = "\nal: "; "Copy" = "Kopiu"; "Copy from: " = "Kopiu el: "; "Link" = "Ligiĝu"; "Link " = "Ligiĝu "; "Delete" = "Forviŝu"; "Delete the selected objects?" = "Ĉu forviŝu la elektitajn objektojn?"; "Duplicate" = "Duplikatu"; "Duplicate the selected objects?" = "Ĉu duplikatu la elektitajn objektojn?"; "From:" = "El:"; "To:" = "Al:"; "In:" = "En:"; "Stop" = "Haltu"; "Pause" = "Paŭsu"; "Moving" = "Ŝovante"; "Copying" = "Kopiante"; "Linking" = "Ligiĝante"; "Duplicating" = "Duplikante"; "Destroying" = "Detruante"; "File Operation Completed" = "Dosiera operacio plenumiĝis."; "Backgrounder connection died!" = "Fona konekto mortis."; "Some items have the same name;\ndo you want to sobstitute them?" = "Kelkaj anoj havas la saman nomon;\nĉu vi volas substitui ilin?"; "Error" = "Eraro"; "File Operation Error!" = "Eraro apud dosiera operacio."; /* ColumnIcon.m */ "You have not write permission\nfor " = "Vi ne havas skribpermeson\nje "; "The name " = "La nomo "; " is already in use!" = " jam usiĝas."; "Cannot rename " = "Ne povas alinomi "; "Invalid char in name" = "Malvalida signo en nomo"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Anoj"; /* InspectorsWin.m */ "Attributes" = "Propecoj"; "Contents" = "Enhavo"; "Tools" = "Iloj"; "Annotations" = "Notoj"; /* ContentsPanel.m */ "Contents" = "Enhavo"; "Contents Inspector" = "Enhava inspektanto"; "No Contents Inspector" = "Neniu enhava inspektanto"; "No Contents Inspector\nFor Multiple Selection" = "Neniu enhava inspektanto\nper plurobla selekto."; "error" = "eraro"; "No Contents Inspectors found!" = "Neniu enhava inspektanto troviĝis."; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "La ordiga metodo usiĝos\nen la selekta dosierujo,\nNE en ĝia supera dosierujo."; "Sort by" = "Ordigu laŭ:"; "Name" = "Nomo"; "Kind" = "Tipo"; "Date" = "Dato"; "Size" = "Grandeco"; "Owner" = "Posedanto"; "Folder Inspector" = "Dosieruja inspektanto"; /* ImageViewer.m */ "Image Inspector" = "Bilda inspektanto"; "Width:" = "Larĝo:"; "Height:" = "Alto:"; /* AppViewer.m */ "Open these kinds of documents:" = "Malfermu ĉi tiujn dosiertipojn:"; "Invalid Contents" = "Malvalida enhavo"; "Application Inspector" = "Aplika inspektanto"; /* PermissionsPanel.m */ "UNIX Permissions" = "UNIX-permesoj"; "Access Control" = "Alira kontrolo"; "also apply to files inside selection" = "Apliku ankaŭ en elektitaj dosieroj"; /* ToolsPanel.m */ "Tools" = "Iloj"; "Tools Inspector" = "Ila inspektanto"; "No Tools Inspector" = "Neniu ila inspektanto"; "Set Default" = "Igu aprioraĵon"; /* AppsView.m */ "Double-click to open selected document(s)" = "Klaku duoble per malfermi la elektitajn dosierojn"; "Default:" = "Aprioraĵo:"; "Path:" = "Dosierindiko:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Klak ‹Igu aprioraĵon› per difini aprioran aplikon\nje ĉiuj dosieroj kun ĉi tiu finaĵo"; /* PermsBox.m */ "Permissions" = "Permesoj"; "Read" = "Legi"; "Write" = "Skribi"; "Execute" = "Ruli"; "Owner" = "Posedanto"; "Group" = "Grupo"; "Others" = "Alioj"; /* Annotations */ "Annotations Inspector" = "Nota inspektanto"; /* ----------------------- Processes strings --------------------------- *\ /* Processes.m */ "Processes" = "Procezoj"; "No Background Process" = "Neniuj fona procezo"; "Kill" = "Interrompi"; "Path: " = "Dosierindiko: "; "Status: " = "Stato: "; /* ProcsView.m */ "Applications" = "Aplikaĵoj"; "Background" = "Fono"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Trovilo"; "Find items with names that match" = "Serĉu anoj kun egalaj nomo"; "Find items with contents that match" = "Serĉu anoj kun egalaj enhavoj"; "No selection!" = "Neniu selekto."; "No arguments!" = "Neniuj operandoj."; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Nova tabulo"; "A layer with this name is already present!" = "Tabulo kun ĉi tiu nomo jam ekzistas."; "You can't remove the last layer!" = "Vi ne povas forigi la lastan tabulon."; "Remove layer" = "Forigu tabulon"; "Are you sure that you want to remove this layer?" = "Ĉu vi estas certa ke vi volas forigi tiun tabulon?"; "Rename Layer" = "Alinomu tabulon"; "You can't dock multiple paths!" = "Vi ne povas doki pluroblajn dosierindikojn"; "This object is already present in this layer!" = "Ĉi tiu objekto jam ekzistas sur tiu tabulo."; /* ----------------------- Preferences strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace-agordoj"; /* BackWinPreferences.m */ "Desktop Shelf" = "Tabula faco"; "Desktop Color" = "Fona farbo"; "red" = "ruĝa"; "green" = "verda"; "blue" = "blua"; "Set Color" = "Difinu farbon"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Klak la butonon «Difinu bildon»\nper difini la fonan bildon de la tabulo.\nLa bildo devas havi la saman\ngrandecon kiel via elkrano."; "Set Image" = "Difinu bildon"; "Unset Image" = "Maldifinu bildon"; /* DefaultXTerm.m */ "Terminal.app" = "Terminal.app"; "Use Terminal service" = "Uzu terminal-servon"; "Set" = "Difinu"; "xterm" = "xterm-komando"; "arguments" = "argumentoj"; /* BrowserViewsPreferences.m */ "Columns Width" = "Kolonlarĝo"; "Use Default Settings" = "Uzu la aprioraĝojn"; "Browser" = "Krozilo"; /* FileWatchingPreferences.m */ "File System Watching" = "Dosierobservado"; "timeout" = "Templimigo"; "frequency" = "Frekvenco"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "Valoroj aplikigos je\nnovaj observadaĵoj ekde nun,\nje nunaj post la unua templimigo."; /* ShelfPreferences.m */ "Shelf" = "Surfaco"; /* DefaultEditor.m */ "Default Editor" = "Apriora redaktilo"; "Editor" = "Tekstredaktilo"; "No Default Editor" = "Neniu apriora redaktilo"; "Choose" = "Elektu"; /* IconViewsPreferences.m */ "Icons" = "Piktogramoj"; "Thumbnails" = "Antaŭrigardoj"; "use thumbnails" = "montru antaŭrigardojn"; "Title Width" = "Titollarĝo"; "Icon View" = "Piktograma rigardo"; /* Hidden Files */ "Hidden Files" = "Kaŝitaj dosieroj"; "Files" = "Dosieroj"; "Folders" = "Dosierujoj"; "Hidden files" = "Kaŝitaj dosieroj"; "Shown files" = "Montrataj dosieroj"; "Load" = "Ŝarĝu"; "Select and move the files to hide or to show" = "Elektu kaj movu dosierojn pro kaŝi aŭ montri"; "Hidden directories" = "Kaŝitaj dosierujoj"; "add" = "aldonu"; "remove" = "forigu"; "Activate changes" = "Aktivigu ŝanĝojn"; /* Desktop */ "Desktop" = "Tablo"; "General" = "Generaloj"; "Omnipresent" = "Ĉie ekzistanta"; "Show Dock" = "Montru dokon"; "Dock position:" = "Doka posicio:"; "Right" = "Dektstre"; "Autohide Tabbed Shelf" = "Aŭtomate kaŝu taban breton"; "Back Image" = "Funda bildo"; "center" = "centrigu"; "fit" = "adaptigu"; "tile" = "kahelu"; "Use image" = "Uzu bildon"; "Back Color" = "Funda farbo"; "Current color" = "Aktuala farbo"; /* Sorting order */ "Sorting Order" = "Ordo"; "Sort by " = "Ordigu laŭ"; "The method will apply to all the folders" = "La ordiga metodo aplikiĝos je ĉiuj dosierujoj"; "that have no order specified" = "kiuj ne havas propran ordon enigitan."; /* File Operations */ "File Operations" = "Dosieroperacioj"; "Status Window" = "Statusfenestro"; "Confirmation" = "Konfirmaĵo"; "Uncheck the buttons to allow automatic confirmation" = "Malŝaltu opciojn por konfirmi"; "of file operations" = "dosieroperaciojn aŭtomate"; "Show status window" = "Montru statusfenestron"; "Check this option to show a status window" = "Ŝaltu opcion por montri"; "during the file operations" = "statusfenestron dum dosieroperacioj"; /* History */ "Number of saved paths" = "Nombro de konservitaj indikoj"; /* Recycler strings */ "Recycle: " = "Alrubujiĝu: "; "Recycler: " = "Rubujo: "; "Recycler" = "Rubujo"; "the Recycler" = "la rubujo"; "\nto the Recycler" = "\nrubujon"; "Move from the Recycler " = "Movigu el rubujo "; "In" = "Al"; "Empty Recycler" = "Malplenigu rubujon"; "Empty the Recycler?" = "Ĉu malplenigu la rubujon?"; "Put Away" = "Restaŭrigu"; gworkspace-1.1.0/GWorkspace/Resources/French.lproj/0000755000175000001440000000000014654675515021512 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/French.lproj/Localizable.strings0000644000175000001440000003326214654675515025354 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* Traduction réalisée par Stéphane PERON * et Xavier BARRIER * Mise à jour 2016 par Riccardo Mottola et Bertrand Dekoninck */ /* main.m */ "Info" = "Informations"; "Info Panel..." = "À propos..."; "Preferences..." = "Préférences..."; "Help..." = "Aide..."; "Activate context help" = "Activer l'aide contextuelle"; "File" = "Fichier"; "Open" = "Ouvrir"; "Open With..." = "Ouvrir avec ..."; "Open as Folder" = "Ouvrir le dossier"; "Edit File" = "Éditer le fichier"; "New Folder" = "Nouveau dossier"; "New File" = "Nouveau fichier"; "Duplicate" = "Dupliquer"; "Destroy" = "Supprimer"; "Move to Recycler" = "Envoyer à la corbeille"; "Empty Recycler" = "Vider la corbeille"; "Edit" = "Édition"; "Cut" = "Couper"; "Copy" = "Copier"; "Paste" = "Coller"; "Select All" = "Tout sélectionner"; "View" = "Affichage"; "Browser" = "Navigateur"; "Icon" = "Icône"; "List" = "Liste"; "Show" = "Afficher"; "Name only" = "Nom seulement"; "Type" = "Type"; "Size" = "Taille"; "Modification date" = "Date de modification"; "Owner" = "Propriétaire"; "Icon Size" = "Taille des icônes"; "Icon Position" = "Position des icônes"; "Up" = "Haut"; "Left" = "Gauche"; "Label Size" = "Taille du texte"; "Make thumbnail(s)" = "Créer les vignettes"; "Remove thumbnail(s)" = "Retirer les vignettes"; "Viewer" = "Visualisateur"; "Tools" = "Outils"; "Inspectors" = "Inspecteurs"; "Show Inspectors" = "Afficher les inspecteurs"; "Attributes" = "Attributs"; "Contents" = "Contenus"; "Annotations" = "Annotations"; "Finder" = "Chercher un fichier"; "Fiend" = "Fiend"; "Show Fiend" = "Montrer le Fiend"; "Hide Fiend" = "Masquer le Fiend"; "Add Layer..." = "Ajouter un espace de travail..."; "Remove Current Layer" = "Supprimer l'espace de travail courant"; "Rename Current Layer" = "Renommer l'espace de travail courant"; "Layers" = "Espaces de travail"; "Tabbed Shelf" = "Étagères"; "Show Tabbed Shelf" = "Montrer les étagères"; "Hide Tabbed Shelf" = "Masquer les étagères"; "Remove Current Tab" = "Supprimer l'étagère"; "Rename Current Tab" = "Renommer l'étagère"; "Add Tab..." = "Ajouter une étagère..."; "Terminal" = "Terminal"; "Run..." = "Exécuter..."; "History" = "Historique"; "Show History" = "Voir l'historique"; "Go backward" = "Revenir en arrière"; "Go forward" = "Avancer"; "Show Desktop" = "Montrer le bureau"; "Hide Desktop" = "Masquer le bureau"; "Show Recycler" = "Montrer la corbeille"; "Hide Recycler" = "Masquer la corbeille"; "Check for disks" = "Vérifier les lecteurs"; "Windows" = "Fenêtre"; "Arrange in Front" = "Mettre au premier plan"; "Miniaturize Window" = "Réduire la fenêtre"; "Close Window" = "Fermer la fenêtre"; "Window" = "Fenêtre"; "Services" = "Services"; "Hide" = "Masquer"; "Hide Others" = "Masquer les autres"; "Show All" = "Montrer tout"; "Print..." = "Imprimer..."; "Quit" = "Quitter"; "Logout" = "Déconnexion"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Gestionnaire de bureau de GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "http://www.gnustep.it/enrico/gworkspace"; "Released under the GNU General Public License 2.0" = "Mise à disposition sous licence : GNU General Public License 2.0"; "Error" = "Erreur"; "You have not write permission\nfor" = "Vous n'avez pas les droits d'écrire\npour"; "Continue" = "Continuer"; "File Viewer" = "Visualisateur de Fichier"; "Quit!" = "Quitter"; "Do you really want to quit?" = "Voulez-vous réellement quitter ?"; "Yes" = "Oui"; "No" = "Non"; "Log out" = "Déconnexion"; "Are you sure you want to quit\nall applications and log out now?" = "Etes-vous sûr de vouloir quitter toutes\nles applications et vous déconnecter immédiatement ?"; "If you do nothing, the system will log out\nautomatically in " = "Sans action de votre part, le système se déconnectera\nautomatiquement dans "; "seconds." = "secondes."; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Annuler"; "Move" = "Déplacer"; "Move from: " = "Déplacer depuis : "; "\nto: " = "\nvers : "; "Copy from: " = "Copie depuis : "; "Link" = "Lier"; "Link " = "Lier "; "Delete" = "Supprimer"; "Delete the selected objects?" = "Supprimer les objets sélectionnés ?"; "Duplicate" = "Dupliquer"; "Duplicate the selected objects?" = "Dupliquer les objets sélectionnés ?"; "From:" = "De :"; "To:" = "À:"; "In:" = "Dans :"; "Stop" = "Stop"; "Pause" = "Pause"; "Moving" = "Déplacement en cours"; "Copying" = "Copie en cours"; "Linking" = "Liaison en cours"; "Duplicating" = "Duplication en cours"; "Destroying" = "Suppression en cours"; "File Operation Completed" = "Opération sur fichier terminée"; "Backgrounder connection died!" = "Interruption de la connexion !"; "Some items have the same name;\ndo you want to sobstitute them?" = "Des éléments ont le même nom ;\nvoulez-vous en remplacer le nom ?"; "File Operation Error!" = "Erreur de manipulation de fichier !"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Vous n'avez pas les droits d'écriture\n "; "The name " = "Le nom "; " is already in use!" = " est déja utilisé!"; "Cannot rename " = "Impossible de renommer "; "Invalid char in name" = "Le nom contient un caractère invalide"; /* -------------------------Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "de libre"; /* GWViewersManager.m */ "Are you sure you want to open" = "Voulez-vous vraiment ouvrir"; "items?" = "éléments ?"; "error" = "erreur"; "Can't open " = "Impossible d'ouvrir "; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Éléments"; /* Attributes.m */ "Attributes Inspector" = "Inspecteur d'attributs"; "Path:" = "Nom complet:"; "Link to:" = "Lié à:"; "Size:" = "Taille:"; "Calculate" = "Calculer"; "Owner:" = "Propr.:"; "Group:" = "Groupe:"; "Changed" = "Modifié"; "Revert" = "Revenir"; "also apply to files inside selection" = "Appliquer aux sous-dossiers"; "Permissions" = "Droits"; "Read" = "Lire"; "Write" = "Ecrire"; "Execute" = "Exécuter"; "Owner_short" = "Propr."; "Group" = "Groupe"; "Other" = "Autre"; /* ContentsPanel.m */ "Contents Inspector" = "Inspecteur de contenus"; "No Contents Inspector" = "Pas d'inspecteur de contenus"; "No Contents Inspector\nFor Multiple Selection" = "Pas d'inspecteur de contenus\npour des sélections multiples"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "La méthode de tri s'applique aux\ncontenus des dossiers sélectionnés,\nPAS aux dossiers parents"; "Sort by" = "Trier par"; "Name" = "Nom"; "Date" = "Date"; "Folder Inspector" = "Inspecteur de dossiers"; /* Ajouts 25052003 */ "unknown volume size" = "Taille du lecteur inconnue";// Fixme BD : string to be added to other english string file /* Fin ajouts */ /* ImageViewer.m */ "Image Inspector" = "Inspecteur d'images"; /* AppViewer.m */ "Open these kinds of documents:" = "Ouvrir ce type de document :"; "Invalid Contents" = "Contenu invalide"; "App Inspector" = "Inspecteur d'application"; /* Tools.m */ "Tools Inspector" = "Inspecteur d'outils"; "No Tools Inspector" = "Pas d'inspecteur d'outils"; "Set Default" = "Définir par défaut"; /* AppsView.m */ "Double-click to open selected document(s)" = "Double-cliquez pour ouvrir le ou les document(s) sélectionné(s)"; "Default:" = "Défaut :"; "Path:" = "Nom complet :"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Cliquez sur 'Définir par défaut' pour définir l'application \nqui sera associée à tous les documents ayant cette extension"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Rechercher"; "No selection!" = "Pas de sélection!"; "No arguments!" = "Pas d'argument!"; "Search in:" = "Dans :"; "Current selection" = "Selection courante"; "Add" = "Ajouter"; "Remove" = "Retirer"; "Search for items whose:"="Recherche de fichiers à partir des critères ci-dessous :"; "Specific places" = "Choix de l'utilisateur"; "Recursive" = "Recursivement"; "Search" = "Chercher"; /* names */ "contains" = "contient"; "is" = "est"; "contains not" = "ne contient pas"; "starts with" = "commence par "; "ends with" = "finit par"; "name" = "Le nom"; /* size */ "size"="Taille"; "greater than"="supérieure à"; "less than"="inférieure à"; /* annotations */ "annotations"="Les annotations"; "contains one of"="contiennent l'un de"; "contains all of"="contiennent tout"; "with exactly"="sont exactement"; "without one of"="n'ont pas l'un de"; /* owner */ "owner"="Le propriétaire"; /* date */ "date created"="Crée"; "date modified"="Modifié"; "is today" = "aujourd'hui"; "is within" = "depuis"; "is before" = "avant le"; "is after" = "après le"; "is exactly" = "exactement le"; "the last day" = "hier"; "the last 2 days" = "2 jours"; "the last 3 days" = "3 jours"; "the last week" = "1 semaine"; "the last 2 weeks" = "2 semaines"; "the last 3 weeks" = "3 semaines"; "the last month" = "1 mois"; "the last 2 months" = "2 mois"; "the last 3 months" = "3 mois"; "the last 6 months" = "6 mois"; /* type */ "type"="Le type"; "is not" = "n'est pas"; "plain file" = "Fichier standart"; "folder" = "Dossier"; "tool" = "Outil"; "symbolic link" = "Lien symbolique"; "application" = "Application"; /* contents */ "contents"="Le contenu"; "includes"="est"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Nouvel espace de travail"; "A layer with this name is already present!" = "Un espace de travail possède déja ce nom !"; "You can't remove the last layer!" = "Vous ne pouvez supprimer le dernier espace de travail !"; "Remove layer" = "Supprimer cet espace de travail"; "Are you sure that you want to remove this layer?" = "Êtes-vous sûr de vouloir supprimer cet espace de travail ?"; "Rename Layer" = "Renommer cet espace de travail"; "You can't dock multiple paths!" = "Vous ne pouvez pas stocker plusieurs chemins d'accès !"; "This object is already present in this layer!" = "Cet objet est déja présent dans cet espace de travail !"; /* ----------------------- Preferences strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "Préférences de GWorkspace"; /* XTermPref.m */ "Terminal" = "Terminal"; "Set" = "Appliquer"; "Use Terminal service" = "Utiliser le service Terminal"; "arguments" = "arguments"; /* BrowserViewerPref.m */ "Columns Width" = "Largeur des colonnes"; "Use Default Settings" = "Param. par défaut"; /* DefaultEditor.m */ "Editor" = "Éditeur"; "Default Editor" = "Éditeur par défaut"; "No Default Editor" = "Pas d'éditeur par défaut"; "Choose" = "Sélectionner"; /* DefSortOrderPref.m */ "Sorting Order" = "Ordre de tri"; "The method will apply to all the folders" = "Cette méthode s'appliquera à tous les dossiers"; "that have no order specified" = "qui n'ont pas d'ordre de tri spécifié"; /* HiddenFilesPref.m */ "Hidden Files" = "Fichiers cachés"; "Files" = "Fichiers"; "Folders" = "Dossiers"; "Activate changes" = "Appliquer"; "Load" = "Load"; "Hidden files" = "Fichiers cachés"; "Hidden directories" = "Dossiers cachés"; "Shown files" = "Fichiers visibles"; "Select and move the files to hide or to show" = "Selectionnez et déplacez les fichiers à cacher ou afficher"; /* IconsPrefs.m */ "Icons" = "Icônes"; "Thumbnails" = "Vignettes"; "use thumbnails" = "utiliser les vignettes"; "Title Width" = "Largeur du titre"; /* DesktopPref.m */ "Desktop" = "Bureau"; "Background"="Fond d'écran"; "General"="Général"; "Color:" = "Couleur:"; "center" = "Centrer"; "fit" = "Fit"; "tile" = "Répéter"; "scale" = "Scale"; "Use image"="Image"; "Choose"="Choisir"; "Dock" = "Dock"; "Show Dock"="Montrer le Dock"; "Position:"="Position :"; "Style:"="Style :"; "Left"="Gauche"; "Right"="Droite"; "Classic"="Classique"; "Modern"="Moderne"; "Omnipresent"="Omniprésent"; "Autohide Tabbed Shelf"="Cacher automatiquement les étagères"; "Single Click Launch"="Lancement par un clic simple"; /* OperationPrefs.m */ "File Operations" = "Opérations sur fichiers"; "Operation Preferences"="Préférences des opérations"; "Status Window"="Fenêtre de progression"; "Confirmation"="Confirmation"; "Show status window"="Montrer la progression"; "Check this option to show a status window"="Cocher cette option pour voir une fenêtre de progression"; "during the file operations"="lors des opérations sur fichier"; "Uncheck the buttons to allow automatic confirmation"="Décocher les boutons pour permettre une confirmation"; "of file operations"="automatique des opérations sur fichier"; "failed to load %@!" = "Impossible de charger %@ !"; // Fixme BD : string only present in NSLogs, not translated outside of french stringfile. /* HistoryPref.m */ "Number of saved paths" = "Nombre de chemins sauvegardés"; /* -------- */ /* OpenWithController */ "Open With" = "Ouvrir avec"; "Type the name or the path of the application" = "Tapez le nom ou le chemin de l'application"; "to use to open the current selection" = "à utiliser pour ouvrir la sélection en cours"; /* RunExternalController.m */ "Run" = "Exécuter"; "Type the command to execute:"="Entrer la commande à exécuter :"; /* Recycler strings */ "Recycle: " = "Envoyer dans la Corbeille: "; "Recycler: " = "Corbeille: "; "Recycler" = "Corbeille"; "the Recycler" = "la Corbeille"; "\nto the Recycler" = "\nvers la Corbeille"; "Move from the Recycler " = "Déplacer depuis la Corbeille "; "In" = "Dedans"; "Empty Recycler" = "Vider la Corbeille"; "Empty the Recycler?" = "Vider la Corbeille ?"; "Put Away" = "Jeter"; gworkspace-1.1.0/GWorkspace/Resources/German.lproj/0000755000175000001440000000000014753220702021476 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/German.lproj/Localizable.strings0000644000175000001440000003031114753220702025330 0ustar multixusers/* GWorkspace German strings, updated by Ingolf Jandt 2006 */ /* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Info Panel..."; "Preferences..." = "Einstellungen..."; "Help..." = "Hilfe..."; "Activate context help" = "Kontexthilfe aktivieren"; "File" = "Datei"; "Open" = "Öffnen"; "Open With..." = "Öffnen mit"; "Open as Folder" = "Als Ordner öffnen"; "New Folder" = "Neuer Ordner"; "New File" = "Neue Datei"; "Duplicate" = "Duplizieren"; "Destroy" = "Vernichten"; "Move to Recycler" = "In den Papierkorb"; "Empty Recycler" = "Papierkorb leeren"; "Put Away" = "Wiederherstellen"; "Print..." = "Drucken..."; "Open With..." = "Öffnen mit..."; "Run..." = "Ausführen..."; "Edit" = "Bearbeiten"; "Cut" = "Ausschneiden"; "Copy" = "Kopieren"; "Paste" = "Einfügen"; /* "Delete" = "Löschen" */ "Select All" = "Alles auswählen"; "View" = "Ansicht"; "Browser" = "Browser"; "Icon" = "Symbole"; "List" = "Liste"; "Show" = "Zeige"; "Name only" = "Nur Namen"; "Type" = "Type"; "Size" = "Größe"; "Modification date" = "Änderungsdatum"; "Role" = "Funktion"; "Icon Size" = "Symbolgröße"; "Icon Position" = "Symbolposition"; "Up" = "Oben"; "Left" = "Links"; "Label Size" = "Schriftgröße"; "Viewer" = "Betrachter"; "Tools" = "Werkzeuge"; "Inspectors" = "Inspektoren"; "Show Inspectors" = "Inspektoren anzeigen"; "Attributes" = "Attribute"; "Contents" = "Inhalt"; "Annotations" = "Notizen"; "History" = "Verlauf"; "Show History" = "Verlauf anzeigen"; "Go backward" = "Zurück"; "Go forward" = "Vorwärts"; "Finder" = "Dateisuche"; "Applications..." = "Anwendungen..."; "File Operations..." = "Dateioperationen..."; "Fiend" = "Fiend"; "Show Fiend" = "Fiend anzeigen"; "Hide Fiend" = "Fiend ausblenden"; "Add Layer..." = "Schicht hinzufügen..."; "Remove Current Layer" = "Aktuelle Schicht entfernen"; "Rename Current Layer" = "Aktuelle Schicht umbenennen"; "Layers" = "Schichten"; "Tabbed Shelf" = "Fach"; "Show Tabbed Shelf" = "Fach anzeigen"; "Hide Tabbed Shelf" = "Fach ausblenden"; "Remove Current Tab" = "Aktuelle Lasche entfernen"; "Rename Current Tab" = "Aktuelle Lascheumbenennen"; "Add Tab..." = "Lasche hinzufügen..."; "Terminal" = "Terminal"; "Show Desktop" = "Arbeitsfläche anzeigen"; "Hide Desktop" = "Arbeitsfläche ausblenden"; "Show Recycler" = "Papierkorb anzeigen"; "Hide Recycler" = "Papierkorb ausblenden"; "Check for disks" = "Nach Medien prüfen"; "Windows" = "Fenster"; "Arrange in Front" = "Im Vordergrund anordnen"; "Miniaturize Window" = "Fenster miniaturisieren"; "Close Window" = "Fenster schließen"; "Services" = "Dienste"; "Hide" = "Ausblenden"; "Hide Others" = "Andere ausblenden"; "Show All" = "Alle anzeigen"; "Quit" = "Beenden"; "Logout" = "Ausloggen"; /* ----------------------- File Operations strings --------------------------- *\ /* GWorkspace.m */ "Author" = "Autor"; "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "Siehe https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Veröffentlicht unter der GNU General Public License 2.0"; "Error" = "Fehler"; "You have not write permission\nfor" = "Sie haben keine Schreibrechte\nfür"; "Continue" = "Fortfahren"; "File Viewer" = "Dateibetrachter"; "Quit!" = "Beenden"; "Do you really want to quit?" = "Wollen Sie GWorkspace wirklich beenden?"; "Yes" = "Ja"; "No" = "Nein"; "Log out" = "Ausloggen"; "Are you sure you want to quit\nall applications and log out now?" = "Sind sie sicher, dass Sie alle\nAnwendungen beenden und ausloggen wollen?"; "If you do nothing, the system will log out\nautomatically in " = "Falls Sie nichts tun, wird das System\nautomatisch nach "; "seconds." = "Sekunden ausloggen."; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Abbrechen"; "Move" = "Verschieben"; "Move from: " = "Verschieben von: "; "\nto: " = "\nnach: "; "Copy from: " = "Kopieren von: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Löschen"; "Delete the selected objects?" = "Die ausgewählten Objekte löschen?"; "Duplicate" = "Duplizieren"; "Duplicate the selected objects?" = "Die ausgewählten Objekte duplizieren?"; "From:" = "Von:"; "To:" = "Nach:"; "In:" = "In:"; "Stop" = "Stopp"; "Pause" = "Pause"; "Moving" = "Verschiebe"; "Copying" = "Kopiere"; "Linking" = "Linke"; "Duplicating" = "Dupliziere"; "Destroying" = "Vernichte"; "File Operation Completed" = "Dateioperation vollständig"; "Backgrounder connection died!" = "Backgrounder-Verbindung gestorben!"; "Some items have the same name;\ndo you want to sobstitute them?" = "Einige Elemente haben den selben Namen;\nwollen Sie diese ersetzen?"; "File Operation Error!" = "Fehler bei Dateioperation!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Sie haben keine Schreibrechte\nfür "; "The name " = "Der Name "; " is already in use!" = " wird bereits verwendet!"; "Cannot rename " = "Kann folgende Datei nicht umbenennen: "; /* much better: "Kann "; " nicht umbennen "; which ends in "kann nicht umbenennen" */ "Invalid char in name" = "Ungültiges Zeichen im Namen"; /* ----------------------------- Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "frei"; /* GWViewersManager.m */ "Are you sure you want to open" = "Wirklich "; "items?" = "Elemente öffnen?"; "error" = "Fehler"; "Can't open " = "Unmöglich zu öffnen "; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Elemente"; /* Attributes.m */ "Attributes Inspector" = "Attribut-Inspektor"; "Path:" = "Pfad:"; "Link to:" = "Verweis zu:"; "Size:" = "Größe:"; "Calculate" = "Berechnen"; "Owner:" = "Besitzer:"; "Group:" = "Gruppe:"; "Changed" = "Geändert"; "Revert" = "Zurücksetzen"; "also apply to files inside selection" = "Auch in Unterordner setzen"; "Permissions" = "Zugriffsrechte"; "Read" = "Lesen"; "Write" = "Schreiben"; "Execute" = "Ausführen"; "Owner_short" = "Besitzer"; "Group" = "Gruppe"; "Others" = "Andere"; /* ContentsPanel.m */ "Contents Inspector" = "Inhalts-Inspektor"; "No Contents Inspector" = "Kein Inhalts-Inspektor"; "No Contents Inspector\nFor Multiple Selection" = "Kein Inhalts-Inspektor\nfür mehrfache Auswahl"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Sortier-Methode trifft auf die\nInhalte des ausgewählten Ordners zu,\nNICHT auf dessen übergerordneten Ordner"; "Sort by" = "Sortieren nach:"; "Name" = "Name"; "Date" = "Datum"; "Owner" = "Besitzer"; "Folder Inspector" = "Verzeichnis-Inspektor"; /* ImageViewer.m */ "Image Inspector" = "Bild-Inspektor"; /* AppViewer.m */ "Open these kinds of documents:" = "Öffne diese Dokumenttypen:"; "Invalid Contents" = "Ungültiger Inhalt"; "App Inspector" = "Applikations-Inspektor"; /* ToolsPanel.m */ "Tools Inspector" = "Werkzeug-Inspektor"; "No Tools Inspector" = "Kein Werkzeug-Inspektor"; "Set Default" = "Standard setzen"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Dateisuche"; "No selection!" = "Keine Auswahl!"; "No arguments!" = "Keine Argumente!"; "Search in:" = "Suche in:"; "Current selection" = "Aktuelle Auswahl"; "Add" = "Hinzufügen "; "Remove" = "Entfernen"; "Search for items whose:" = "Suche für Elemente welche:"; "Specific places" = "Bestimmte Orte"; "Recursive" = "Rekursiv"; "Search" = "Suche"; /* names */ "contains" = "enthält"; "is" = "ist"; "contains not" = "enthält nicht"; "starts with" = "beginnt mit"; "ends with" = "endet mit"; "name" = "Name"; /* size */ "size"="Größe"; "greater than"="größer als"; "less than"="kleiner als"; /* annotations */ "annotations"="Anmerkungen"; "contains one of"="enthält eins von"; "contains all of"="enthält alle"; "with exactly"="mit genau"; "without one of"="ohne eins von"; /* owner */ "owner"="Besitzer"; /* date */ "date created"="Erstellungsdatum"; "date modified"="Änderungsdatum"; "is today" = "it heute"; "is within" = "ist zwischen"; "is before" = "ist vor"; "is after" = "ist nach"; "is exactly" = "ist genau"; "the last day" = "der letzte Tag"; "the last 2 days" = "die letzten 2 Tage"; "the last 3 days" = "die letzten 3 Tage"; "the last week" = "die letzte Woche"; "the last 2 weeks" = "die letzten 2 Wochen"; "the last 3 weeks" = "die letzten 3 Wochen"; "the last month" = "der letzte Monat"; "the last 2 months" = "die letzten 2 Monaten"; "the last 3 months" = "die letzten 3 Monaten"; "the last 6 months" = "die letzten 6 Monaten"; /* type */ "type"="Typ"; "is not" = "ist nicht"; "plain file" = "Datei"; "folder" = "Order"; "tool" = "Werkzeug"; "symbolic link" = "Symb. Verweis"; "application" = "Anwendung"; /* contents */ "contents"="Inhalt"; "includes"="enthält"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Neue Schicht"; "A layer with this name is already present!" = "Eine Schicht mit diesem Namen existiert bereits!"; "You can't remove the last layer!" = "Sie können die letzte Schicht nicht entfernen!"; "Remove layer" = "Schicht entfernen"; "Are you sure that you want to remove this layer?" = "Sie sind sicher, dass Sie diese Schicht entfernen wollen?"; "Rename Layer" = "Schicht umbenennen"; "You can't dock multiple paths!" = "Sie können keine mehrfachen Pfade andocken!"; "This object is already present in this layer!" = "Dieses Objekt existiert bereits in dieser Schicht!"; /* ----------------------- Preferences strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace Grundeinstellungen"; /* DefaultXTerm.m */ "Use Terminal service" = "Terminal-Service verwenden"; "Set" = "Setzen"; "xterm" = "Programm"; "arguments" = "Argumente"; /* BrowserViewerPref.m */ "Column Width" = "Spaltenbreite"; "Use Default Settings" = "Standards benutzen"; /* DefaultEditor.m */ "Editor" = "Editor"; "Default Editor" = "Standard-Editor"; "No Default Editor" = "Kein Standard-Editor"; "Choose" = "Auswählen"; /* Sorting order */ "Sorting Order" = "Sortierreihenfolge"; "Sort by" = "Sortieren nach"; "The method will apply to all the folders" = "Diese Methode gilt für alle Ordner, für die"; "that have no order specified" = "keine Reihenfolge festgelegt ist"; /* HiddenFilesPref.m */ "Files" = "Dateien"; "Folders" = "Ordner"; "Activate changes" = "Aktivieren"; "Hidden Files" = "Versteckte Dateien"; "Hidden directories" = "Versteckte Ordner"; "Load" = "Laden"; "Hidden files" = "Versteckte Dateien"; "Shown files" = "Sichtbare Dateien"; "Select and move the files to hide or to show" = "Dateien zum Zeigen/Verstecken auswählen und verschieben"; /* IconsPrefs.m */ "Icons" = "Symbole"; "Thumbnails" = "Thumbnails"; "use thumbnails" = "Thumbnails verwenden"; "Title Width" = "Titelbreite"; /* DesktopPref.m */ "Desktop" = "Schreibtisch"; "Background"="Hintergrund"; "General"="Generell"; "Color:" = "Farbe:"; "center" = "Zentriert"; "fit" = "Skaliert"; "tile" = "Gekachelt"; "Use image" = "Bild verwenden"; "Dock" = "Dock"; "General" = "Allgemein"; "Show Dock" = "Dock anzeigen"; "Position" = "Position"; "Style:"="Stil:"; "Left" = "Links"; "Right" = "Rechts"; "Omnipresent" = "Omnipräsent"; "Autohide Tabbed Shelf" = "Fach selbstätig einfahren"; "Single Click Launch"="Einzelklickstart"; /* OperationPrefs.m */ "File Operations" = "Dateioperationen"; "Operation Preferences"="Operationeinstellungen"; "Status Window" = "Statusfenster"; "Confirmation" = "Bestätigung"; "Show status window" = "Statusfenster zeigen"; "Check this option to show a status window" = "Setze diese Option, um ein Statusfenster"; "during the file operations" = "während Dateioperationen zu zeigen"; "Uncheck the buttons to allow automatic confirmation" = "Deaktivieren Sie Optionen, um automatische"; "of file operations" = "Bestätigung von Dateioperationen zu erlauben"; /* History */ "Number of saved paths" = "Anzahl der gespeicherten Pfade"; /* -------- */ /* OpenWithController */ "Open With" = "Öffnen mit"; "Type the name or the path of the application" = "Geben Sie den Namen oder den Pfad der Anwendung ein,"; "to use to open the current selection" = ""; /* RunExternalController.m */ "Run" = "Ausführen"; "Type the command to execute:"="Befehl eingeben:"; gworkspace-1.1.0/GWorkspace/Resources/Hungarian.lproj/0000755000175000001440000000000014753220702022201 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Hungarian.lproj/Localizable.strings0000644000175000001440000002326014753220702026040 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* Magyar szöveg: REUSS András */ /* main.m */ "Info" = "Adatok"; "Info Panel..." = "Névjegy..."; "Preferences..." = "Beállítások..."; "Help..." = "Segítség..."; "File" = "Fájl"; "Open" = "Megnyitás"; "Open as Folder" = "Megnyitás új ablakban"; "Edit File" = "Fájl szerkesztése"; "New Folder" = "Új könyvtár"; "New File" = "Új fájl"; "Duplicate" = "Duplikálás"; "Destroy" = "Törlés"; "Empty Recycler" = "Szemetes ürítése"; "Edit" = "Szerkesztés"; "Cut" = "Kivágás"; "Copy" = "Másolás"; "Paste" = "Beillesztés"; "Select All" = "Mindent kijelöl"; "View" = "Megjelenítés"; "Browser" = "Fájlnézet"; "Icon" = "Ikonnézet"; "Tools" = "Eszközök"; "Viewer" = "Böngész?"; "Inspectors" = "Beállítópanelek"; "Show Inspectors" = "Beállítópanelek megjelenítése"; "Attributes" = "Tulajdonságok"; "Contents" = "Tartalom"; "Tools" = "Eszközök"; "Permissions" = "Hozzáférés"; "Finder" = "Fájl keresése"; "Processes..." = "Folyamatok..."; "Fiend" = "Pult"; "Show Fiend" = "Pult megmutatása"; "Hide Fiend" = "Pult elrejtése"; "Add Layer..." = "Munkaasztal hozzáadása..."; "Remove Current Layer" = "Jelenlegi munkaasztal megszüntetése"; "Rename Current Layer" = "Jelenlegi munkaasztal átnevezése"; "Layers" = "Munkaasztalok"; "DeskTop Shelf" = "Asztali polc"; "XTerm" = "XTerm"; "Windows" = "Ablakok"; "Arrange in Front" = "El?térbe hozás"; "Miniaturize Window" = "Ablak kicsinyítése"; "Close Window" = "Ablak bezárása"; "Services" = "Szolgáltatások"; "Hide" = "Elrejtés"; "Quit" = "Kilépés"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep fájlkezel?"; "See http://www.gnustep.it/enrico/gworkspace" = "https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Terjesztési jog: GNU General Public License 2.0"; "Error" = "Hiba"; "You have not write permission\nfor" = "Nincs írási jogosultsága \na következ?höz:"; "Continue" = "Tovább"; /* FileOperation.m */ "OK" = "Ok"; "Cancel" = "Mégsem"; "Move" = "Áthelyezés"; "Move from: " = "Áthelyezés a következ?b?l: "; "\nto: " = "\nide: "; "Copy" = "Másolás"; "Copy from: " = "Másolás a következ?b?l: "; "Link" = "Lánc létrehozása"; "Link " = "Lánc létrehozása"; "Delete" = "Törlés"; "Delete the selected objects?" = "Törli a kijelölt elemeket?"; "Duplicate" = "Duplikálás"; "Duplicate the selected objects?" = "Duplikálja a kijelölt elemeket?"; "From:" = "Innen:"; "To:" = "Ide:"; "In:" = "Ebbe:"; "Stop" = "Leállítás"; "Pause" = "Felfüggesztés"; "Moving" = "Áthelyezés folyamatban"; "Copying" = "Másolás folyamatban"; "Linking" = "Láncolás folyamatban"; "Duplicating" = "Duplikálás folyamatban"; "Destroying" = "Törlés folyamatban"; "File Operation Completed" = "A fájlm?velet befejez?dött"; "Backgrounder connection died!" = "A kapcsolat a háttérfolyamattal megszakadt!"; "Some items have the same name;\ndo you want to sobstitute them?" = "Egyes elemeknek azonos a nevük;\nmeg akarja változtatni?"; "Error" = "Hiba"; "File Operation Error!" = "Hiba a fájlm?velet során!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Nincs írási jogosultsága\n "; "The name " = "A következõ név "; " is already in use!" = "már foglalt!"; "Cannot rename " = "Nem lehet átnevezni"; "Invalid char in name" = "A név nem elfogadható írásjelet tartalmaz"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Elemek"; /* InspectorsWin.m */ "Attributes" = "Tulajdonságok"; "Contents" = "Tartalom"; "Tools" = "Eszközök"; "Access Control" = "Hozzáférés szabályozása"; /* AttributesPanel.m */ "Attributes" = "Tulajdonságok"; "Attributes Inspector" = "Tulajdonság-panel"; "Path:" = "Teljes elérési út:"; "Link To:" = "Láncolva a következõhöz:"; "Size:" = "Méret:"; "Owner:" = "Tulajdonos:"; "Group:" = "Csoport:"; "Changed" = "Módosítva"; "Revert" = "Visszaállítás"; "OK" = "Ok"; /* ContentsPanel.m */ "Contents" = "Tartalom"; "Contents Inspector" = "Tartalom-panel"; "No Contents Inspector" = "Nincs tartalom-panel"; "No Contents Inspector\nFor Multiple Selection" = "Nincs tartalom-panel\ntöbbszörös kijelöléshez"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "A sorbarendezés a\nkijelölt könyvtárak tartalmát érinti,\nNEM pedig magukat a könyvtárakat"; "Sort by" = "Rendezés a következõk alapján"; "Name" = "Név"; "Type" = "Típus"; "Date" = "Dátum"; "Size" = "Méret"; "Owner" = "Tulajdonos"; "Folder Inspector" = "Könyvtár-panel"; /* ImageViewer.m */ "Image Inspector" = "Kép-panel"; /* AppViewer.m */ "Open these kinds of documents:" = "A következõ típusú dokumentum megnyitása:"; "Invalid Contents" = "Érvénytelen tartalom"; "App Inspector" = "Alkalmazás-panel"; /* PermissionsPanel.m */ "UNIX Permissions" = "UNIX jogosultságok"; "Access Control" = "Hozzáférés szabályozása"; "Also apply to files inside selection" = "A kiválasztott fájlokon kerül alkalmazásra"; /* ToolsPanel.m */ "Tools" = "Eszközök"; "Tools Inspector" = "Eszköz-panel"; "No Tools Inspector" = "Nincs eszköz-panel"; "Set Default" = "Alapbeállításként elment"; /* AppsView.m */ "Double-click to open selected document(s)" = "Dupla kattintás a kijelölt dokumentum(ok) megnyitásához"; "Default:" = "Alapbeállítás:"; "Path:" = "Teljes elérési út:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Kattintson az "Alapbeállításként elment" gombra, hogy minden ilyen kiterjesztésû\ndokumentumhoz ezt az alkalmazást rendelje"; /* PermsBox.m */ "Permissions" = "Hozzáférés"; "Read" = "Olvasás"; "Write" = "Írás"; "Execute" = "Végrehajtás"; "Owner" = "Tulajdonos"; "Group" = "Csoport"; "Other" = "Egyéb"; /* ----------------------- Processes strings --------------------------- */ /* Processes.m */ "Processes" = "Folyamatok"; "No Background Process" = "Nincs háttérfolyamat"; "Kill" = "Leállít"; "Path: " = "Teljes elérési út: "; "Status: " = "Állapot: "; /* ProcsView.m */ "Applications" = "Alkalmazások"; "Background" = "Háttér"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Keresés"; "Find items with names that match" = "Keresés névegyezés alapján"; "Find items with contents that match" = "Keresés tartalom alapján "; "No selection!" = "Nincs kijelölés!"; "No arguments!" = "Nincs semmi megadva!"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Új munkaasztal"; "A layer with this name is already present!" = "Már van ilyen nevû munkaasztal!"; "You can't remove the last layer!" = "Az utolsó munkaasztalt nem lehet megszüntetni!"; "Remove layer" = "Munkaasztal megszüntetése"; "Are you sure that you want to remove this layer?" = "Biztos, hogy meg akarja szüntetni ezt a munkaasztalt?"; "Rename Layer" = "Munkaasztal átnevezése"; "You can't dock multiple paths!" = "Nem lehet többféle elérési utat megadni!"; "This object is already present in this layer!" = "Ez az elem már szerepel ezen a munkaasztalon!"; /* ----------------------- Preferences strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace beállítása"; /* BackWinPreferences.m */ "DeskTop Shelf" = "Asztali polc"; "DeskTop Color" = "Asztal színe"; "red" = "piros"; "green" = "zöld"; "blue" = "kék"; "Set Color" = "Szín alkalmazása"; 193: "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Nyomja meg a\"Kép alkalmazása\" gombot\naz írasztal háttérképének beállításához.\nA kép méretének meg kell egyeznie a\nképernyõ méretével." = "Set Image" = "Kép alkalmazása"; "Unset Image" = "Kép visszavonása"; /* DefaultXTerm.m */ "Set" = "Beállítás"; /* BrowserViewsPreferences.m */ "Column Width" = "Oszlopszélesség"; "Use Default Settings" = "Alapbeállítások alkalmazása"; "Browser" = "Böngészõ"; /* FileWatchingPreferences.m */ "File System Watching" = "Fájlrendszer megtekintése"; "timeout" = "idõtúllépés"; "frequency" = "gyakoriság"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "A továbbiakban az új elemekre már az új beállítások\nkerülnek alkalmazásra"; /* ShelfPreferences.m */ "Shelf" = "Polc"; /* DefaultEditor.m */ "Default Editor" = "Alapértelmezett szerkesztõprogram"; "No Default Editor" = "Nincs alapértelmezett szerkesztõprogram"; "Choose..." = "Kijelölés..."; /* IconViewsPreferences.m */ "Title Width" = "Címszélesség"; "Icon View" = "Ikonnézet"; /* OpenWithController */ "Open With" = "Open With"; "Type the name or the path of the application" = "Írja be az aktuális kijelölés megnyitásához"; "to use to open the current selection" = "használandó alkalmazás nevét vagy elérési útját"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Írja be a végrehajtandó parancsot"; /* Recycler strings */ "Recycle: " = "Áthelyezés a szemetesbe: "; "Recycler: " = "Szemetes: "; "Recycler" = "Szemetes"; "the Recycler" = "a szemetes"; "\nto the Recycler" = "\nva szemetesbe"; "Move from the Recycler " = "Kivétel a szemetesbõl"; "In" = "Benne"; "Empty Recycler" = "Szemetes ürítése"; "Empty the Recycler?" = "Kiürítsük a szemetest?"; "Put Away" = "kidobás"; gworkspace-1.1.0/GWorkspace/Resources/Icons/0000755000175000001440000000000013214346545020220 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Icons/CellHighlight.tiff0000644000175000001440000000065013214346542023577 0ustar multixusersII* P8$BaPd6DbQ8V-FcQH4v=dR9$M'Ec L]/LfQhm7NgQ$}?PhT:%GRiTe6OTjU:VWVkUv_XlV;%gZmVeo\nW;w^oW`pX<& bqXf7drY@P(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/GWorkspace/Resources/Icons/CellHighlight_osx.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/ComputeSize.tiff0000644000175000001440000003514613214346542023347 0ustar multixusersII*8nnnXX^666?dla..6"")nnn65?*)2?666?nnnlku:9D"!($666?LKY0/9= d++ nnnDBO%$+'E d+d+d+JnnnIIL666?nnn{y86A&%-2M!d+d+d+d+a(G666?hhp..6?54??nnnQO^;:EE X&d+d+d+a(`(`(_'4 nnn,*3! ' ?54??ljnnnWVf+*32M!d+d+d+`'_']&^&]&]&VJws`_gH46N'H" 54??[Yi666?FDQ*= d+d+d+d+^&]&\&組>**N'7"y4 Y$ ljhftNMTywGGHhey1/92E d+d+d+`(^&\&^([%[%tSS2cBB組絕ƄcBB9#7"z4 n/S" hftNMTwu31;= X&d+d+d+_']&[%[%]'Z%{SH組組SS2z4 z4 z4 s1> ywhftmk~NM[+*2](Y&](d+^'[%Z%Z%Z%\'{97B組絕Ƅ絕組cBBz4 s1m-i+<65=wucbsEDP+*2#H!V%V%V%^'Z%Z%Y%Y$zSGyonx=;G2i0!ccB2SB2cBBSB2SB2j,i+i+g+: 666?nnn:9AJIVYWg=;F6E V%V%V%W%Z%Y$Y$X$yCAN*)1N'9#6!|5 Ƅ絕組絕ƄcBBi+g+g*\&) nnn<:E4V%V%V%V%W%Z&Z&X$mHE{GES2i0!8"6!z4 z4 {4 組組SS2i,f*e)L nnncat=;G4U.#R#R#T$X$V#U#V#V#V#yz~109N'e.7!~6 {4 {4 {4 s/p.ƕtSS2cBBƄ絕組cBBg+e)f+I~97BD&!V%R#R#R#R#U#U#U#U#U#{PN]2N'9#|5 |5 |5 |5 z4u1p.o.n-組組SB2c(c(a(GZXhELE GR#R#R#R#S"S"T"vQFSQaN'i0!7!7!~6 |5 x3v2s1p.p.n-m-l,Ƅ絕組絕ƄcBBb(a(`'(7 Q!Q!R!R!R!x[XiS?CN'8"7!|5 |5 |5 z4t1t1q.p.o-n-m-k,j,tcB2SS2組SS2`'a)^&% 6 P R#P!z\Yk2i0!8"~6 |5 |5 |5 |5 v2s1p.p.q0n-m-l,k,j+i+組絕Ƅ絕組cBB^'_(\% 6rOE:8DN'8"8"|5 |5 x2v1v1t0q/p.p.o.n-m-l,k,j+i+g*g*組組SB2\&\%[% nnndat)2N!A(|5 |5 z4v1s/r/q/p.o.n-n-m-l,k,j+i+h+g*f*e)tSS2cBB組絕ƄcBB[%Z$7 97B6R!KJL <%|5 t0r/q/q/p.o.o-m-m-l,k,j,j+h+g*f*g+f+c)組組SS2Y$X$4 ? |3IIHJ5d*r/r/q/p.o.n-n-m-l,k,j,i+i+g*f*g,f+c)b(a(組絕Ƅ絕組cBBW#V#1 v1GGGH~4h+q/p.o.n-m-m-l,k,j+i+h+g*f*f)e)c)b(a(`'_'ccB2SB2cBBSB2SB2U#T" ?r/EEGF7"l,o.n-m-m-l,k,j,i+h+g*f*e)e)c)b(a(`'_'^&]&Ƅ絕組絕ƄcBBU$R!m-CCCB:$n.m-m-l,k,j,i+j-j,f*g+f+e+b(b(`'_'^']&\%[%組組SS2Q!Q!h*AA@@8!m-l,k,l-k-h+g*h,e*d)c)b(a(c)`'^&^&\%[%Z$Y$ƕtSS2cBBƄ絕組cBBW$S#b(???Y$t1k,j,i+i+g*f*h,g+f+e*c*`'_'^'`(^'[%Z$Y$X#W#組組SB2E(\&===p.e*i+h+h*g*f*e)d)e*d*b)_'^'`(^(]'Z%Y$Z&W#V#W$Ƅ絕組絕ƄcBBL, V#< ; ; n.d)i,g*f*e)d)c(b(a'`'_'`(\&]'[%Z$Y$W#V#U"V$Y$tcB2SS2組SS2  O : : ;t1c)f*e)d)c(b(a'`'_'^&_(\%[%Z$Y$X$W#U"T"_'X$G組絕Ƅ絕組cBBVI8 8 7 z4 c)f+e+b(a(`'_'^&_(\%[%Z$[&Z&W#X%U"_'S#?DO 組組SB2bC$ E6 6 6 w2c)b(a(`'_'^&]&_([%Z%Y$Z&Y%V#\'Z&S#AJO O>tSS2cBB組絕ƄcBB ||||||>5 5 \%k-d*a'`'_'^&]&^'[%Y$X$Y%X%a)X$GEQ!P O @! 組組SS2ccccccccc|||||||||||||||9 3 3 X#b*`'_'^&_(\%]'Z$Y$X#W#`'S#?GQ!P O 1  組絕Ƅ絕組cBBBBBBBBBBBccccccccc|||||||||||||||5 2 1 T"_'^&_(^([%\'Y$X$\&Y$S#?LQ!P @/ ~[;ccB2SB2cBBSB2SB2BBB222222BBBBBBBBBcccccc|||||||||||||||1 0 2 s/`)\%[%Z%Y$X$a(Y$GFS"R!Q!@" eD, Ƅ絕組絕ƄcBB222222222222BBBBBBcccccc|||||||||. / 1 g*]&Z%Z$X$a(S#BFS"R!Q!2  `<組組SS2222222222BBBBBBcccccc|||+ . >g+]'_([&S#@NT"U#R!0 z[: ƕtSS2cBBƄ絕組cBB222222BBBBBBccc( &Eh,[&GGW$T"S"A" rK. 組組SB2222222BBB!  ;V$IU"T"V$1 " sN,Ƅ絕組絕ƄcBB222  P"]&T"V$3 iI+組cB2SS2cB2cB2cB2SS2 S"B" qU;%:) a=&  QmJM: 4F9 n90:F:'N:V:^:(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/ComputeSize.tiffCreated with The GIMP0HHgworkspace-1.1.0/GWorkspace/Resources/Icons/ComputeSize_dimm.tiff0000644000175000001440000003515413214346542024354 0ustar multixusersII*8[[[mmo---?yy|ZZ][[[{{~wwzUUV?---?[[[}}uuwvpp---?zy}tqq~trxrxom[[[vvxwqptqxrxrxrsn[[[NNO---?[[[}|vvy{squpxrxrxrxrvqto---?__b !?,,/?[[[~}tqqtqvqxrxrxrvqvqvqvq{ol[[[xx{utw ?,,/?ZY`<<>[[[xx{{squpxrxrxrvqvqvpvpvpvp{|wtur?87,,/?---?xsr~trxrxrxrxrvpvpvpº´ººº´xxwt|u{tup?86ZY`zy}{sqtqxrxrxrvqvpvpwrupup{}u|u{tysto?86ppp{z~~trvqxrxrxrvqvpupupwrupº¨¨¨{{t{t{tzt~qm777xx{popwrvqwrxrvqupupupupwq}|º{tztxrwq}qm||~xx{uqpuqvqvqvqvqupupupup~~{tszu{{{¨{xqwqwqwq}qm---?[[[}}~~rrs|sptpvqvqvqvqupupupupwwzwt}u|u|tºwqwqwqvq]SQ[[[~}rrsrrs{spvqvqvqvqvqvqvqup{tszu}u|u{t{t{tº¨¨¨{xswqwqsn=76[[[~~{sryuupupvpupuououououozz}wtyt|u|t{t{t{tyrxr{xrwqxrsn<76}|VYSvuvqupupupupuououououo{tswt}u|t|t|t|t{tzrxrxrxrº¨¨¨{vqvqvqrn;75888toupupupuptototowtzu|u|u|t|t{t{tzsxrxrxrxrxrºvqvqvqvmk|ttototototowt}u|u|t|t|t{tztzsxrxrxrxrxrxrxr{{¨¨{vqwrvpvnl{ttoupto{tszu}u|t|t|t|t|t{tzsxrxrzsxrxrxrxrwqwqºvpwruptnl{s}|wt}u}u|t|tzszszsyryrxrxrxrxrxrxrxrwqwqwqwqº¨¨¨{vpupuprlj[[[wsr{squpw|t|t{tzsyryryrxrxrxrxrxrxrxrwqwqwqwqwqwq{upup|pm855}|{rqtosnsntp~v|tyryryryrxrxrxrxrxrxrxrxrwqwqwqwqxrxrwqº¨¨¨{upup{ol754?778zssnsnsntp{swqyryryrxrxrxrxrxrxrxrxqwqwqwqwqxrxrwqvqvqºuouozol654zrsnrnrnto{swqyrxrxrxrxrxrxrxrwqwqwqwqwqwqwqwqvqvqvqvp{{{¨{uotoslj?yrrnrntoso|uxrxrxrxrxrxrxrxqwqwqwqwqwqwqwqvqvqvqvpvpvpºvptokiixrrnrnrnrn}vxrxrxrxrxrxqwqysxswqxrxrxrvqvqvqvpvpvpupupº¨¨¨{totokiiwqrnrnrnrn|txrxrxrysyswqwqxswqwqwqvqvqwrvqvpvpupupupup{upupljjvq~qm~qm~qmupztxrxqwqwqwqwqxrxrxrxrxrvqvpvpwrwrupupupuouoº¨¨¨{sovnk444vp~qm~qm~qmxrwqwqwqwqwqwqwqwqxrxrwrvqvpwrwrwrupupvquouovqºsnxom444uo}qm}qm}qmyswqxswqwqwqwqvqvqvqvqvpwrvpwrupupupuouotovqup{{¨¨{smkolk<;: to}qm}qm~rnztwqwqwqwqvqvqvqvqvpvpwrupupupupupuototovquptoºKKJ666###V sn|pm|pm|pm{twqxrxrvqvqvqvpvpwrupupupvqvquovqtovqup~qmrntoº¨¨¨{(((bC$ so{pm{pm{pm{twqvqvqvqvpvpvpwrupupupvqvquowqvqupsosntoso~qm{ ~qm{pm{pmupysxrvqvqvpvpvpwrupupupvqvqwruptorntototosounlb_^º¨¨¨{|pmzolzolupxrvqvpvpwrupwqupupuouovqup~qmtotototozpmolkb_^IHG666º{plzolzoltovqvpwrwrupwqupupvpupup~qmsntotoqmyololkUSS999333~%%%[;{{{¨{{{{{{{zolyol{pmyrwrupupupupupvquptorntototoqmunlb_^USS888)))eD,  º{{{{{{{{{{{{xolyolzpmwqvqupupupvqupsorntototo{pnolkb_^IHG555'''`< º¨¨¨{ooo{{{{{{{{{wnlxol~qmxswqwrvquprmsotouptoyololkUSS999222z%%%[:  {oooooo{{{{{{womvnksoxsvqtosnvqtotornunlolkUSS:::...rK.  º¨¨¨{oooooo{{{{{{unlrmk~rnvqtototovpzolunlb_^IHG888///s N,ºoooooo{{{smkrmkupvqtovp{pnolkUSSIIH666+++iI+{{{{{{oooVQPrmkuprnunlolkWUT999...q###U;%:YTSjb`b_^IHG555'''a=&   +++Q666mJM: iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii4F9 s96:L:'T:\:d:(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/ComputeSize_dimm.tiffCreated with The GIMP0HHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date-0.tiff0000644000175000001440000000073413214346542022105 0ustar multixusersII* (! p`ZUb*bdT$bR (j4 :~I#M%Tܙ̔7_qK ?BBJ-T>lŢ$+NٓPAFRdW%P2VoR,J"Y  |  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-0.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date-1.tiff0000644000175000001440000000070613214346542022105 0ustar multixusersII*| hA 8DAaE !x(cF7acN,~iK8\ؙM;m\͔?NlsP2KR d(4Q jDYs&$   f  2ns(=R/home/bjoern/Source/NSTimeDate/Images/Date-1.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date-2.tiff0000644000175000001440000000073013214346542022103 0ustar multixusersII* hC&8UP.p`c;HQ5PC @XiK4HL9bJ,{Yd˘?XTGL5] +_.YJAF ֫U,T)BTȟ6   x  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-2.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date-3.tiff0000644000175000001440000000073413214346542022110 0ustar multixusersII* (! @U8T#?ȁBG NUHQb$vQ:-j†H@AӪN1y|$K8UB!s-xƍ\PŬVBɲTϕZxYj]e h]?GH  |  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-3.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date-4.tiff0000644000175000001440000000073013214346542022105 0ustar multixusersII* h! "pp!C ZA2#,vň@ &VlG˨*/̑&EŊϫLiCL=2/X5F QAlըE4͚gR1   x  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-4.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date-5.tiff0000644000175000001440000000072213214346542022107 0ustar multixusersII* (! &X` Z11cL1ЉH2UP3nѨe "ed3ʔ%b)VtC(=R/home/bjoern/Source/NSTimeDate/Images/Date-Colon.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Date.tiff0000644000175000001440000001222013214346542021741 0ustar multixusersII*TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU_ 2  0:jL(R/home/bjoern/Source/NSTimeDate/Images/Date.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Dimple.tiff0000644000175000001440000000071613214346542022305 0ustar multixusersII*U +UJj _ J+jj 5r@(R/Local/Libraries/Resources/Images/common_Dimple.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/DragableDocument.tiff0000644000175000001440000000302013214346542024262 0ustar multixusersII*!$Q"dp(zAIJ_$v.5pMtt񡞢äǯ代ŧ´ȹ׿ӻ2,5_4pMaėZ˥ʞj͉E9ijսӺϵǮͰʩ۽۽𱤺C>EeEuoֶڦre徊t^UA]}HwsyÚިwwšฎǨwáZU]zו[[Դکv[PJRvQUiͩš͝d’{]Uc}Rgbihl}ӴʨӪxʠꪍrkxiŤMMM Y@(/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/DragableDocument.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/GWorkspace/Resources/Icons/FFArrow.tiff0000644000175000001440000000122013214346542022370 0ustar multixusersII*L///p/ppp//ppppp///pppppppppppppppp   D&jD(R/home/enrico/Grivei/sviluppo/FileManager/Xws/Xws/Icons/FFArrow.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/FFArrow_disabled.tiff0000644000175000001440000000126413214346542024227 0ustar multixusersII*L///w/www//wwwww///wwwwwwwwwwwwwwww  * \2@D(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/GWorkspace/Resources/Icons/FFArrow_disabled.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/FileIcon_WebLink.tiff0000644000175000001440000003560413214346542024202 0ustar multixusersII*00*&.6(1>2\=RpI i+\` , + O ' 'Adobe Photoshop Elements 2.02010:10:14 00:28:03 Adobe Photoshop Elements for Windows, version 2.0 adobe:docid:photoshop:166b63a0-d717-11df-92a1-ca5a7d5e189e 8BIM%8BIMHH8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM_00FileIcon_WebLink.tiff00nullboundsObjcRct1Top longLeftlongBtomlong0Rghtlong0slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong0Rghtlong0urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM8BIM 00uJFIFHH Adobe_CMAdobed            00"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?q/.Ս2击n=nWcaؼJs/ k*Ys% h[E7Vvܭ'Q Xdd[̙ Nuil9so\<cu6 K}7nR8fb}5ƴC>&WB6ҾtLlK>{rUs]NiMkb]DuF_axw%V~ 04#j̿+3F;?E!W\¸9\j}Kwr7m}-"w|&΋hX:kHkþgX8=ilH?K-ۻ^_vef;Y{}v abUmomuGcͭvxw{?F]#*cqݑ洼\q+ݕoNjȰ[nՆSeUlh6l[ןx*_yS˫jt:Y Z_YnMa m_=&zYY?agp3ʛ_X]S luu͞}}ߡHٴ8BIM!yAdobe Photoshop ElementsAdobe Photoshop Elements 2.0 P8$ BaPd6DbQ8qV,a\jGn;&$ 3B +(˭x.1y|,TPО1wAѴ4(hR%yg$GP9m+t>{4'#pĞGljZ%[ `z`n^Y`0mXG./s ,S$:ಟMTjؙ&扤 !X {,iw=%]e'B{sXؒP:H.X5, bv쬧>՟la^^s}Lnt $/;\|] ݩu}( E͈$k,Č#q(XB7bx%; 0IFQm؇0}t'~@gIps jPC8'h=AGӌ pdz2`1jQ[1X^  phX8 q@kogHnLjyuy8؟'ӿ bР btB -r U:J4> u@7h< 7i 0GAApF0s3#8l<aȏ Q 55`( L$1>aN(L1|%@.@# H@QG` #4J:GbX A4@G xPq e.&ɰ/(SAMJ&=```N a?#D(` @`J(B-0hD>f8T207j#hX7cq:!}Bp@=ML@4ຣ"ںvS:5 l`X C~?80Gx yQ78iYzVC, N) \* 5 %MזP z:V1p73v<':`? ' AZZj0}a5`~f?>[`h ^@,(r|::ŠqRՏ$< #) bSƐ  aаBED!6i,cb EϨU(k9S,G xPr#`/*Jy//Fx{(P94Ƞ0dpR G}@UBZ]$밴.!< <}a @Hh 6B9GYd3y=x g^7!FrHV4JJkچ MNqt8\#@%wLq9pȡ`nPH$Z 8όN7f-\qՠar;xPp\:ǩk?0 `d͘ I|ILK ;!7lf 6.OBF,]@HٱAٵϻN0aiW"r*loEAz]]M NLHȗ SJ|"HZS}=)AeA(^ =zO:o>-@i=AE n ثB*/d @D>!@ pU` ~je^ (OP.t0Ȧb(0ls `h&`p,N=/!D# ! "F`Ul@0 R% ! @q ƈ! ~P'Q1PDUa qp" !deu,O ! p@V"q[b"  &*1h ʐN!bq?0|-o_/1Q-16 P8$PXd6DbQ8V-@54 idR9$M'H@!2Q/LfRdm7NgS}?PhT8$00Adobe Photoshop Document Data BlockMIB8nrTMMIB8ryaL-/5,O(MIB8mron((Layer 0MIB8inulLayer 0MIB8rsnlryalMIB8diylMIB8lblcMIB8xfniMIB8oknkMIB8fpslMIB8rlclMIB8prxfLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLצLL !!!!""""! !UUUUU UUˤUɭ|nUῠ`o#aUкlN'*"_U܋lܔ;1))Ubafv|KE., FU8DqiE8Uu)8VczI* qUc! 7HVg_}A eUa%3EF\GL- XUo76R}}Pp:oU؉) /2U䱕Α[SZ@CtUfXTMEwDݰttkhWI`UݿynklzDU UUDUUU ǝ㖲D U DzU ǫՖU 񖹫ΖΖDUՖUUDUMIB8ksML2MIB8ttaPgworkspace-1.1.0/GWorkspace/Resources/Icons/FileManager.tiff0000644000175000001440000002244413214346542023247 0ustar multixusersII*$qQuyy}yy}yy}qQuaIeaAeaAeqQuy]my]myy}qQuqQuIiqQuIiaAeIiaAeaIeyy}yy}aIeqQuaIeqQuaIeaAeaAeaAeAiaAeaAeaAeaAiqQuyy}yy}qQuqQuqQuaIeqQuIiqQueaAeeeeeAieeaAeaIeyy}yy}qQuqQuqQuaIeqQuaAeqQuaAeaAeeaAeAieAieAiiiiAiiaAeyqqyy}qQuaIeqQuqQuqQuaIeqQuaIeqQuIiqQueaAeAieAieAieAqiaiAqeAiea,yqqaIeaAeaIeaAeaAeaAeaAeaAeeeAieAieAiiiiaqaqaq aIeqQuIiqQueaAeeaAeAieAieAieAqiaiaia(qQuaIeaAeeeAieiiiiiiaqaq  aIeaAeeeAiiAqiaiaia( yqq    aAeAieAiiaiaqyqqii m        eeAiiayqqiii    ,     ,i(yqqii  ii ((yqqyqq          qAii ,ii yqqIi  ,       ((yqqii  ii ((aayqq      yqqii ,im (yqqIi       , ii (aayqq     qAqAiyqqIiqA,   yqq((,i(qAqA( yqqmqA,aAi(qAyqqmqA  AiqQuqA yqqmqA  (yqq,(    Ii           a      (a(      (aaa          (aa       aaaaaaeqQu       aaaayy}i    aaaaaaaqqyy}        ( aaaaaaaaay]m       (,aaaaaaqaqqaayy}     Aq maaaaaaqaqa(yy}   (( aaaqaqaqaiai(yy}       aaaqaqaqaqa(y]m    (aa qaqaiaeae(yy}  qAaa  qaqaiiei(yy}    aaIi  aaeaeAqeyy}  ,,aaIi  aeiei(y]m , qAaaIi, eeeyy}  aaIiyqq  ee(yy} (aaaa  yy} aaaAi,( (aaaayqq  aaaaqQu00$  V$%*%R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace/Icons/FileManager.tiffgworkspace-1.1.0/GWorkspace/Resources/Icons/Kill.tiff0000644000175000001440000002254413214346542021771 0ustar multixusersII*$SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS00$ K$.%D%*L%T%\%(R/home/enrico/Grivei/sviluppo/FileManager/Xws/Xws/Processes/Icons/Kill.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-0.tiff0000644000175000001440000000073213214346542021632 0ustar multixusersII*P hAmh"lP$Q"HPa"D "Fm@Nq$J,~Ԅ2 4v22cb'Uq^T e F@'Z|0rf7G.Y6_@&eǫ^ʀ  z  1(=R/home/bjoern/Source/NSTimeDate/Images/LED-0.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-1.tiff0000644000175000001440000000075213214346542021635 0ustar multixusersII*t O B`ͅ`($!8TV- D"P!D-l5)L%QX>#Gp9UU!f(W#Cjt^7fzd  R iZk(=R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Images/LED-1.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-2.tiff0000644000175000001440000000067213214346542021637 0ustar multixusersII*pP hAmh"lP$Q"H1 %Zl@N $yԔSG7x #)WI9_ Hi% e?O蔕  Z  1bg(=R/home/bjoern/Source/NSTimeDate/Images/LED-2.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-3.tiff0000644000175000001440000000067213214346542021640 0ustar multixusersII*pP hAmh"lP$Q"H1 %Zl@N $yԔSG7zCd"S\)$J,r3dOiK.V>\s&  Z  1bh(=R/home/bjoern/Source/NSTimeDate/Images/LED-3.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-4.tiff0000644000175000001440000000071613214346542021640 0ustar multixusersII*P h6$ E" #bC @NаH4YBeidI-c8q URD(Z`%3&i +UQ<7lk.=b13  n  1v{(=R/home/bjoern/Source/NSTimeDate/Images/LED-4.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-5.tiff0000644000175000001440000000067613214346542021646 0ustar multixusersII*tP h!n#d@( :, (") a =f`q"G $d :iƐΞ-gXYcd ?K3W4hX6D I˝1[  ^  1fl(=R/home/bjoern/Source/NSTimeDate/Images/LED-5.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-6.tiff0000644000175000001440000000071213214346542021636 0ustar multixusersII*P h!n#d@( :, (") a =f`q"G $d :iƐ;FQrg˞5_ gʗ*ARي6SXY)ZE3$)f  j  1rx(=R/home/bjoern/Source/NSTimeDate/Images/LED-6.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/LED-7.tiff0000644000175000001440000000067213214346542021644 0ustar multixusersII*pP hAmh"lP$Q"H1 %Zl@N $yԔSG7CL# Ǣ+Ҋ@]"Vxp\nwwX,ke^.iD"(V(C4ڇ,>Hx(M?X'W1,?Gb_>D1 imoDoĚkjQ052'?@# T`Z X  "˜n(ߣ B\AbHdl%-X'd#WQ+p8l!"-֊Ej8-` 'pǃEt!A!HLGS;bT-ŹiBdO^q"$劤񣯨9;Ilx]"WX3bI& QD&DzHhZc VQA|'={IFZGH?G|CaQTn-uYb,e P_ouK؁0l`a9x$ ^,lsLQtk+NZ[Lia*>[/iߨ1ӎu2sinYEFpWG)f%eq2R8G%C 0.h0:Sj3-Ø"`3Vn]\pP,,,FOFHJBS(σ&Tz` /4T32z?v —zߨtp3!O&ɇ/Nլw4Ɯ|wO $I@ A}mJ@mg5/٪?qB@t dPFCNng8&V"Pttlњ12 +P@7!>rP}JzLXmLMXl]Pp1t00aH  L  k`!"#P ~\˩ܭN 4TZƩQMeŕ q0  R)&i$*R P:/FRi|{+P` ԫJU2Z `źXYRjoj p#@([(.z; #Y* *bNi(32&9%Dk$P-ςeo'O/'O2AO 'oHS"p  `H8Ľ3)$v#L-,pՓO&E-.660)6 , 0N/  *!j a ` `,H .ztz`qA~2CJJnX=jp34 &tѐ 8C:`'8S ӈPP:4i@ BbD)")P>\/S uF0 P̢@2$B " "q!uBhOY HiCK5?&tC5C=d/$9 1U:bOV*!]H b !"O gY0O0t.EM4MT*GM91UZ320O!Ot A ` `P Q'0cce]E*.=N ,8N]dUv ` ` `X `5Xef`3&{5%h5vf]o^ a ` `x `?_u_HYTQꊨfZT8tk>S'lVAjH `eWkBY tP)ĘtKmSL'r֏l]8 ` ` `\ `7ttOy ۭPZa #EOr$Cp3ww{n A ` `jw Vy! 7zkLQl׽ n[dW~ `V `+~ Q",ID֘@a vJ @ `eB_B~_%"tՖa(6 A ` `z `MABbX#+  =6` ` `t6V @8͌э" 00VRgworkspace-1.1.0/GWorkspace/Resources/Icons/Magnify.tiff0000644000175000001440000002242413214346542022465 0ustar multixusersII*$LLLLLLBBBLLBLBBLLLLLLBLBBLBLLL..!>11>1>!.!.!.BBL1>1}LLLLBBBBL???????????????LLL???????????????LLLLLL???????????????LLLLLLLLLLLL1>>LLLBBB1???kkkkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???kkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLBBB.!.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLB111LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkkkkLLLLLLLLLLLBBBLLLLLLLLLkkk?????????LLLLLLLLLL>>>BLBLLLLLLLLLkkk????????????LLLLLLLLLLLLLLLLLLLLL??????????????????LLLLBBBLLLLLLLLL??????????????????LLLLBLBLLL??????????????????LLLBLLLLLLLLLLL????????????LLBBLLLLLLLLLLLL??????LLLLLBLLLLLLLLLLLLLBLBBBLLLLLLLLLLLLLLLBBBBBBLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL!!!LLLLLLLLLLLLLLLLLLBBLLLLBLBLLLLLLLLLBBBLBBBBBLBBBBBLBBBBB???c!LLLLLLLLLL...LLL???c!LLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLL...LLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL???c!L...LLLLLLLLLLLL...LLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???LLLLLLLLLLLL???LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL00$  F$%* %R/home/enrico/Grivei/sviluppo/FileManager/GFindFile/Icons/Magnify.tiffgworkspace-1.1.0/GWorkspace/Resources/Icons/MagnifyGlas.tiff0000644000175000001440000002261613214346542023277 0ustar multixusersII*$YWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYYWYwwwYWYYWYYWYYWYwww___UUUUUUUUU___|||YWYaeaH@H888333333333333333333MMMuuuYWYH@H(((333DDDUUUffquuuffqaeaDDD333(((UUUYWY((("""KKKaea|||wwwDDD"""888YWY((("""gcouuuaea"""333YWYDDD"""pp___888YWYuuu"""DDDffqUUU"""UUUYWYMMM"""ffq{wwwuuuuuuuuuuuuuuuwww"""333|||YWY333DDDffquuuffqffqffqffqffqffqffq333"""gcoYWYuuu(((UUUuuuffquuuuuuuuuuuuwwwwwwwww|||UUU"""MMMYWYaea"""UUUpp{uuuwwwuuu"""H@HYWYffq"""UUUuuuuuu"""888YWYffq"""MMMffquuuuuu"""DDDwwwYWYwww(((DDDaeaffqDDD(((DDDYWY|||DDD"""aeaffq"""(((RZZ|||YWYaea"""H@Huuupp"""333UUUYWY|||((("""uuu{333"""DDDffqYWYaea"""888MMMDDDUUUppYWYMMM"""aeaUUU"""UUUUUUYWYDDD"""DDDuuu333"""333ppffq|||YWY{DDD""""""333___wwwuuuMMM333"""(((DDDDDD"""ffqYWYwww{ffqUUU333"""333333KKKUUURZZYWYDDDffqKKK{YWY||||||wwwuuuaeaUUURZZH@HMMMUUUffqffqffqppffq___H@HsRYWYwww|||||||||||||||wwwuuu|||wwwffqYWY"""333sRuuuYWY||||||{||||||uuuuuuKKK"""H@HsRsRYWY||||||{wwwwwwDDD(((H@HsRYWYuuuDDD(((H@HsRsRYWY{KKK"""333sRsRYWYwwwMMM"""H@HsRsRYWY{{YWY333sRsR333aeaYWYuuu___888""""""aeaYWY|||___"""888YWY|||KKK___uuuYWY|||YWYYWYYWYYWYYWYYWYYWY00$ z$h%@$~%%(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/GWorkspace/Resources/Icons/MagnifyGlas.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Magnify_16.tiff0000644000175000001440000000261613214346542022774 0ustar multixusersII* U**(hgh||~IIGU *+*xxxU Y[[\^\.-.--+MIK*(*=;=RTRXXX:<:(((+++CCC&)&1115858:89535 ";;;yyy"""[][DDD &&$(&(UUUUUU774$$$XXX((( U555UXX`ddqomQQQVKIqU,,,KKKQQQ---...&$&|daqU U9 U&$&|daq U&$&qZU U""" Uq yh@~(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/GWorkspace/Resources/Icons/Magnify_16.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Magnify_24.tiff0000644000175000001440000000521613214346542022772 0ustar multixusersII* @ @@26:LLLLLL:>>&*& @@!!666www@!!DHH%%% @...~rrr~~yHHHiii***************888y~tPKP UZUiii************************$$$@"""LLLimi888******:::******222:::***ccc@@@:6:LLL::6222@ZZZUUZ***>>>KKK6:6{{{666222KKK{{{:::rrrQQQ!!!**&  (((((( 666{{{!!!222QQQ>BB>BB@E@\WW~~GGG"""Y4#***rrrwww666***&"&pUQY4#!!!666************222///***&"&pUQY4#////// @***&"&pUQY4# @***&"&pUQ¨WMH @***&"&VRV @***/// @****** @  y h @ ~  (R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/GWorkspace/Resources/Icons/Magnify_24.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Magnify_32.tiff0000644000175000001440000001061613214346542022771 0ustar multixusersII* UUUUUU q!!(//////!(((,( q9///DFcccxxgpg777********* EEE!!!UU///```HHHRRRfff*** *.*UU(((@@@***RRR*** "&"BBBU@@@***RRR &*&JJJU888***VVVwwwJJJ595BBB1*1555$!"999***9```8887311>1>!.!.!.BBL1>1}LLLLBBBBL???????????????LLL???????????????LLLLLL???????????????LLLLLLLLLLLL1>>LLLBBB1???kkkkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???kkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLBBB.!.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLB111LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkkkkLLLLLLLLLLLBBBLLLLLLLLLkkk?????????LLLLLLLLLL>>>BLBLLLLLLLLLkkk????????????LLLLLLLLLLLLLLLLLLLLL??????????????????LLLLBBBLLLLLLLLL??????????????????LLLLBLBLLL??????????????????LLLBLLLLLLLLLLL????????????LLBBLLLLLLLLLLLL??????LLLLLBLLLLLLLLLLLLLBLBBBLLLLLLLLLLLLLLLBBBBBBLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL!!!LLLLLLLLLLLLLLLLLLBBLLLLBLBLLLLLLLLLBBBLBBBBBLBBBBBLBBBBB???c!LLLLLLLLLL...LLL???c!LLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLL...LLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL???c!L...LLLLLLLLLLLL...LLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???LLLLLLLLLLLL???LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL00$  F$%* %R/home/enrico/Grivei/sviluppo/FileManager/GFindFile/Icons/Magnify.tiffgworkspace-1.1.0/GWorkspace/Resources/Icons/Mask.tiff0000644000175000001440000003113413214346542021764 0ustar multixusersII*1((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM(((MMMMMMMMMMMM(((MMMMMMMMMMMM((((((MMMMMMMMMMMM(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM791 G1&2<2%D2L2T2(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Images/Mask.tiffCreated with The GIMP0HHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-1.tiff0000644000175000001440000000075013214346542022314 0ustar multixusersII* h!B &l!`4D#Pq#K3xS&aICT:mx3g.{ T@h$J$"J(X(*,A^&54 ڢN %;)L@x  A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-1.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-10.tiff0000644000175000001440000000073213214346542022374 0ustar multixusersII* h!B &l! 0ja@c<~(b$ eWȹC V :-j ^C$TnGK)r 4ARU(R0_W v+WkX#h@f  An]t(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-4.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-5.tiff0000644000175000001440000000074013214346545022322 0ustar multixusersII* h!B &l! 0*(fcʼn%~HU@-m0'(sȬqs$ "X"UҤ @EK#)W!_Ū.[*.v&MX+|@p  Ax]}(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-5.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-6.tiff0000644000175000001440000000077013214346545022326 0ustar multixusersII* h!B &l!`4CD#P PK7rI#)|ՉLZϒ8[M6\ U%P- xTɔ+y,TH9E^qe[R*bEߢh5Bg7   A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-6.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-7.tiff0000644000175000001440000000075613214346545022333 0ustar multixusersII* h!B &l!`4CD#P PK7rI @ՉLZ)bϒ8[TiRPU -N5]¼ٓG/X挗#zZTS?Vdil'xkc~  A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-7.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-8.tiff0000644000175000001440000000076013214346545022327 0ustar multixusersII* h!B &l! 0*a(%$ꄉ)|,2@ԒH:X¥ ?HQ3ʜ5{1%>MPV-x𒙲P-T ^VqgKuh"  A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-8.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month-9.tiff0000644000175000001440000000074013214346545022326 0ustar multixusersII* h!B &l!W'BXSEu)J"RK5Q@&#Sك;[Ԫ;n|e3P8GjT\4oa -Q*eըAp  Ax]~(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-9.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Month.tiff0000644000175000001440000000223413214346545022160 0ustar multixusersII*J h!B &l!`4D#Pq#K3xS&aICT:mx3g.{ T@h$J$"J(X(*,A^&54 ڢN %;)L(=zݼI#z>(8%,ݮWô-R?n' :=bڧ>ck/4DZOUؚ;v>X-s=? @7C c=!X%B ُ΋3uu/x"jUQޔP+cUd#6?c?(=:Xclo:4N1ڀ,K/HYw?D>0r-_H *T/H$Xm%S$2*7`/RD.P*ΡuNy)BRάҬasKm*;Ǖwv́n̖!VhH4  9<v]B(=R/home/bjoern/Source/NSTimeDate/Images/English/Month.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Pboard.tiff0000644000175000001440000002247613214346545022314 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/Base.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/REWArrow.tiff0000644000175000001440000000122213214346545022537 0ustar multixusersII*L////p//ppp///ppppppppppppppppppppp   E&lD(R/home/enrico/Grivei/sviluppo/FileManager/Xws/Xws/Icons/REWArrow.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/REWArrow_disabled.tiff0000644000175000001440000000126613214346545024376 0ustar multixusersII*L////w//www///wwwwwwwwwwwwwwwwwwwww  * ]2@D(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/GWorkspace/Resources/Icons/REWArrow_disabled.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/RightArr.tiff0000644000175000001440000000242013214346545022612 0ustar multixusersII*ssssss[G[ss s/ sss6sGsssssSU  RR/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace/Icons/RightArr.tifgworkspace-1.1.0/GWorkspace/Resources/Icons/SlideMask.tiff0000644000175000001440000002255013214346545022752 0ustar multixusersII*$00$ T$B%@$X%`%(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace/Icons/SlideMask.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/SmallCellHighlight.tiff0000644000175000001440000000716213214346545024600 0ustar multixusersII*    ] L@ bj(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace/Icons/SmallCellHighlight.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/SmallCellHighlightSmall.tiff0000644000175000001440000000654213214346545025572 0ustar multixusersII*    < @ R Z (R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/GWorkspace/Resources/Icons/SmallCellHighlightSmall.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/TileHighlight.tiff0000644000175000001440000000410413214346545023616 0ustar multixusersII*?@$ BaPd6DbQ8Es?ⱸv=H`k`g)ʢsj4͡I"q(3X\ ̙ LJ˒(yq2OsGqo0p2Fte(FQx% -EtQQ$%MRɿMSOO gIO15oU:<8s?h^;_mΒi#g媻z^3aVGQ]hNɩ'Z_'kY۫wGoyplDј:6JdR`'u|Yw11r<u'bg m!ݯOG۝o~d9_Ҏ)$2war^p~5yIñ\'rO rO嵗_//fb r7怈;U/WPe,6Un;8px7}^\i5@wnxvM>w,优qn98䇑I/0(@°PMQBU~<P&ظ[˄KtB?@#B_d C1T.DR'"Qz!@Tv, JerxT7>Iey9(2ɜ%yP)3TA( rwci{<0fnIeJkU-m(T lH]cVV%;_+Dޱņih3tu:ڕfA|ض2-kk-'h&SX`v-̯p-\VEMi;2z|7=,~^׽zQ 3߷uیsoM p*B.sh<,A 7PbeΤ<,K48Cp?A KF1d:ȣLu4JDDNκdQKgKuIdM,Q[K1KIȉ4ǃ/t > 982ԇ/\2N+>в3?Ks-BPoR uq;'*MQ3ұ1NR&G]Q52D7TK/҃VHF\TeҕiŵV"c_3m}]P%pYw&boގ/\^`H{,m܁85< @@ J$*,4<(=/home/enrico/Grivei/sviluppo/FileManager/Xws/Xws/Icons/TileHighlight.tiffCreated with The GIMPbZHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Weekday-0.tiff0000644000175000001440000000071413214346545022622 0ustar multixusersII*p h!B &l%<(Z8A(nĤM/jGN,S̨e+Is'(#bӄOS*sYe\\eC Z  Cbfh(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-7.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Weekday-1.tiff0000644000175000001440000000072213214346545022622 0ustar multixusersII*v h!B &l p #| F (vĸ*JpI>hΞ'W 䍙Hٓ,YX ,Lj*Z\`  Chfn(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-1.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Weekday-2.tiff0000644000175000001440000000070613214346545022625 0ustar multixusersII*j h!B &l>D`>f@1D =bxqBH7JAM*]R͐0V\ȓ<[pydTD T@@T  C\fb(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-2.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Weekday-3.tiff0000644000175000001440000000071613214346545022627 0ustar multixusersII*r h!B &l pxF #J`bFD`:f@1D 'I񒧈*x郄?A,q%Κ0V<#挕6Xi2THdS+xy \  Cdfi(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-4.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Weekday-5.tiff0000644000175000001440000000067613214346545022636 0ustar multixusersII*b h!B &l>D`F =xG7A@Q *L(@0iC=|Pp(y H%AL  CTfZ(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-5.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/Weekday-6.tiff0000644000175000001440000000070413214346545022627 0ustar multixusersII*h h!B &l%hΞ'W 䍙Hٓ,YX ,Lj*Z\5jܤiƏWijTmW;l+ե~mTиf3fN9~뎞|ܰ֝ʶ:)Yr_g%jm\ҢyOm][sֹwn8y[}ߺsMz}GTys T q|O7kT'a˟ Bu` +t5hOPygC6ȁ#w27B5d_C۰5IȄ7\ ?R܍h 8HG0/V?\NʎK5Ф +}P^S;20*  ;f (=R/home/bjoern/Source/NSTimeDate/Images/English/Weekday.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/add.tiff0000644000175000001440000000200413214346545021616 0ustar multixusersII*   L@(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/add.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-0.tiff0000644000175000001440000000151613214346545023114 0ustar multixusersII*   (1:R../Resources/anim-logo-1.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-1.tiff0000644000175000001440000000151613214346545023115 0ustar multixusersII*x@E8t@L#k@O   (1:R../Resources/anim-logo-2.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-2.tiff0000644000175000001440000000151613214346545023116 0ustar multixusersII*   (1:R../Resources/anim-logo-3.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-3.tiff0000644000175000001440000000151613214346545023117 0ustar multixusersII*8#ktx@@@OEL   (1:R../Resources/anim-logo-4.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-4.tiff0000644000175000001440000000151613214346545023120 0ustar multixusersII*   (1:R../Resources/anim-logo-5.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-5.tiff0000644000175000001440000000151613214346545023121 0ustar multixusersII*O@k#L@t8E@x   (1:R../Resources/anim-logo-6.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-6.tiff0000644000175000001440000000151613214346545023122 0ustar multixusersII*   (1:R../Resources/anim-logo-7.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/anim-logo-7.tiff0000644000175000001440000000151613214346545023123 0ustar multixusersII*LEO@@@xtk#8   (1:R../Resources/anim-logo-8.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/GWorkspace/Resources/Icons/colorPboard.tiff0000644000175000001440000002250013214346545023337 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSS777kSSS[[[___OOOKKKkSSSVVVTTTKKKkSS2}}}@@@jjjwwwkSSS999ecc^^^kSSSqqqaaad[[ƸWWWkSSScccRRR滼ڷSSSkSS2uuu>>>odb亻kSSS555eeeۿοkkkaaa|||kSSS\\\[[[ncVĸizl[[[Ƕ^^^mmmnnnuuukSSSHHEYXVxͯ־ttt___r b YDqOlll}}}kSS2BB4tpUҾ׹ؾgggTTT i ZChKWWWkSSSutgqϩLLLmr|||KKK kSSSկ߻ӹMMMnpGI]^WWW+++kSSSfbf[[[/1 "&(nnnkSS2oooXRWzzz@AVVsAE7;|}kSSSbbbø^^^ފ8nr  7:%%%kSSSlllQQQJ~~z־PT:=tt%%%UUUkSSS]]]jjjVVVɥK\ɻtN݆l888@@@kSS2wwwTTTzNb;n_0::zQQQkSSSmmmDDDZZZ̖oEE}K'tFL#]]]+++kSSStttHHHԹQ*EuXCřĵյźkSSS~~~KKKvvvMMMkSS2NNNxxxusqq[HTZfJ4 !>++kSSS  !E@@nDFkCDstkSSSTTTpppjjj\\\|||)v~nC}}}}ukk"8..kSSS000222o«KKK kSS2ddd $$$uuu~dddkSSSkkk/// dddu|||kSSSGGGKKKkSSSqqqlll444___kSS2~~~{{{kSSSkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ ,$%@$0%8%(R/opt/Surse/gnustep/CVS/usr-apps/colors.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/common_ArrowLeftH.tiff0000644000175000001440000000105413214346545024457 0ustar multixusersII*   9@$(R/Local/Libraries/Resources/Images/common_ArrowLeftH.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/common_ArrowRightH.tiff0000644000175000001440000000105213214346545024640 0ustar multixusersII*   :@"(R/Local/Libraries/Resources/Images/common_ArrowRightH.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/filecontsPboard.tiff0000644000175000001440000002250413214346545024213 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSlllkSS2zzzkSSSkSSSkSSSkSS2kSSSkSSS|||kSSSkSS2kSSSkSSSkSSSkSS2{{{kSSS{{{kSSS{{{jhf_^]kSSSjjikSS2tttkSSSkSSSĿkSSSkSS2{{{kSSSmmm~{xwukSSS^^^~}zþkSSS^^^sropomkSS2^^^kSSShhhwvs~kSSS}}}ľkSSShhh½onlkSS2hhhtsprrrkSSSrrr{yw~kSSSgggkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ /$%@$4%<%(R/opt/Surse/gnustep/CVS/usr-apps/fileconts.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/gormPboard.tiff0000644000175000001440000002247613214346545023201 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSkSS2kSSSkSSSR9k-kSSSmVj-EXGAkSS2įO5h,<>0-kSSS_Hg,E;-)kSSSįV0-kSSSįeNg+E7)&kSS2ƳM&67)&kSSS8.2xlhkSSSLKUkSSSPM\kSS2=;FkSSS=;FkSSSpppsss=;FkSSSh_rl{{{hhhgggxxxCANkSS2zTOv0$}}}qqrggjnoqrq98CkSSSzUOe&p@8w8.}~basUSdML[DCKkSSS[Ue$g%i'l){C:sq^]mWVfRP`DBP8()xu̿kSSSjdf$i%xA8l5,q(ytomvSR^:7B;E]*"RJ}kSS2{UOh%j&zB9r:1t)~jggC$LZ^!] PU,%{c_kSSS{UOi%k&n(t-"SJ}}}LLMDDH1..4FVQMIFU50kSSS|VOj&m'p(~9-ƲwwwKKK%#%;:B87C,6 DPNJFBS40kSSS|VOl&o'r)FJ/ ":>KLHE@=W95kSSSg$y+>>>FESEDR88C0;DNKFB?;O2.kSSSͿy||})(,GFT=

HLHC@<9W:6kSSS|||WWWDDGZZZvvv&&++!%05;>=CKJE@=:7 L0+kSS2TTTEEELLM98>:297#$mllEBAEILNLKFB>:7 5 O3.kSSS:::336-,2}}}<44G'&Z"n)pooH!BIUWVSNJD@;85 4 O2.kSSSYWdJHVRP]ZX_:.,Z&u*3&k/%X$MV\ YTPKGB>:6 4 3 J/+kSSSjgwHGP}}SSSwu@57'6&u*RZ Z WRNID@<96 3 2 T84kSS2wq=+1"Z ZSNJGC?;975 M1-N2.bKHkSSSw3'CADiJE|c_nUQjgkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/gorm.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/littleArrowDown.tiff0000644000175000001440000000064613214346545024240 0ustar multixusersII*L(h!`8!#%H0aGBտ 0Dx "H<ꤑRO2RL"6  B>$C(=R/usr/home/michael/Sandbox/core/gui/Images/common_3DArrowDown.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/littleArrowRight.tiff0000644000175000001440000000065213214346545024403 0ustar multixusersII*NO5(! &lX!tա… fq '^pSIF(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/magnify_small.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/GWorkspace/Resources/Icons/page.tiff0000644000175000001440000000335013214346545022007 0ustar multixusersII*ҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴ 3@(R/home/enrico/Grivei/sviluppo/GSPdf/Icons/page.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/pause.tiff0000644000175000001440000000223013214346545022204 0ustar multixusersII* tr@(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/pause.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/play.tiff0000644000175000001440000000214013214346545022034 0ustar multixusersII*A A6 IEJaJEI6 AA   s:@PX(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/play.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/remove.tiff0000644000175000001440000000201013214346545022360 0ustar multixusersII*   O@(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/remove.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/GWorkspace/Resources/Icons/rtfPboard.tiff0000644000175000001440000002247613214346545023030 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSKKK@@@NNNGGGDDDkkkNNNUUU@@@IIINNNvvvkkkUUU@@@IIINNNGGGkSSS@@@KKK@@@kSSSBBBkkkIIIkSS2777GGGUUU@@@NNNUUUkSSSvvvUUUDDDkSSS999UUUkSSSUUUUUUUUUkSS2GGG@@@NNNkSSSkSSSkSSSkSS2kSSSkSSSkSSSfUf3D3ffffff"3"kSS2UDUwwfwfffwDDDkSSSffw̻wwwfUfDDDUUU"3"kSSSwfffffD3D333"""3D3DDD3D3kSSSffwDDD3333DDfUfUffDDUDUDkSS2UUUwwwwfUfDUD33333"wyyy"3"""UUDD3DkSSS3"3fffUUfDUUDDD3DD"3"""""fUf3D3kSSSD33DDDD3D"3"DDD"333UUD333kSSSfff"3"333DUDUDUfwf"""3"33DDUDUDkSS2̻"""""D33UUUwww"""3kSSS""DDDwww33"3wfkSSSwwwfffffpcp""""88j"wkSSSUUUNZs3wPPu?LkSS2\\>>kSSSDDDDwwffkSSSPP""3U3"DfkSSSLXEE3?LLkSS2ffWcEQOOcckSSS"wwkSSS"333UUUUU""kSSSffUU33kSS2wwkSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ )$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/rtf.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/rtfdPboard.tiff0000644000175000001440000002247613214346545023174 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSNNNBBBGGGUUUGGG~~~@@@NNNGGGDDDNNN~~~kkkNNNUUU@@@IIINNNkkkUUU@@@IIIhhhkSSSRRRKKK@@@@@@kSSSBBBvvvDDDIIIVVVzzzkSS2222GGGDDDUUU@@@IIIUUU@@@kSSSvvv@@@UUUUUU@@@kSSS111KKKUUUkkkkSSSUUUUUUUUUUUU999kSS2BBBGGGGGGNNN@@@kSSSkSSSkSSSkSS2kSSSkSSSkSSSfUf3D3ffffff"3"kSS2UDUwwfwfffwDDDkSSSffw̻wwwfUfDDDUUU"3"kSSSwfffffD3D333"""3D3DDD3D3kSSSffwDDD3333DDfUfUffDDUDUDkSS2UUUwwwwfUfDUD33333"wyyy"3"""UUDD3DkSSS3"3fffUUfDUUDDD3DD"3"""""fUf3D3kSSSD33DDDD3D"3"DDD"333UUD333kSSSfff"3"333DUDUDUfwf"""3"33DDUDUDkSS2̻"""""D33UUUwww"""3kSSS""DDDwww33"3wfkSSSwwwfffffpcp""""88j"wkSSSUUUNZs3wPPu?LkSS2\\>>kSSSDDDDwwffkSSSPP""3U3"DfkSSSLXEE3?LLkSS2ffWcEQOOcckSSS"wwkSSS"333UUUUU""kSSSffUU33kSS2wwkSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/rtfd.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stop.tiff0000644000175000001440000000223013214346545022054 0ustar multixusersII* sr@(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/stop.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stop_16.tiff0000644000175000001440000000261213214346545022366 0ustar multixusersII*)"UzR;9% 9=.'X:tRAj<"|Y<.(|G-3("U[;)kI&bA+"UqK/G1$q#!!9f:$xY%#"9gAwYD UvC,dF4 UT3pI1H0$kKUj>'ːfB=7{H-{^7*$S3W@2(!UD(]MBH/!ܝgtcUc8$kQ6)d@=.#qN/ Y5!9[8ϛgoC{L|D*f?qQ@~B*@2-4*#q}J1YB69K.،UхRuGV5{LpDjD/ 0*'qpB(сNnPB~R=jB{KoCV5b=ܑYyR6Uj>)֒]hH6zB(юVʌZsHT3u?&f?dB-UN0Ӗ`҃Pԝf֦m֎Yi?J1iAtI.2$ƸuHosޮo֡fqFV7uHfD09;&f?ߗaoۡguG[8jBU9(U'`7!c>pD\9P0I-C4+ 9C2(2% , @4- vd@z(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/GWorkspace/Resources/Icons/stop_16.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stop_24.tiff0000644000175000001440000000521213214346545022364 0ustar multixusersII* Q9,^K=OJJc7$zX(%$@ZF5\ODB5,SHBJ<2=!eB(&&@cM?mFdjB*łVMFBMA;,ayF*;2*@<;b9#zKg>|eZ2,%Q2vIՋZ͂QqDlD[:hBчTӋV^;$!!@bRE^7!ӉVvIu_U;62~D,b@pFwIwI\62g;#͍ZćTM0kBѐZמeצl˄TrKZ7K.P2pFjI_<˘hфTْ\ΜjΜjתoӔ_ӅTd>M5V:pIlF$!!@5~Qaxso׫oӡj͈TiBV8`>~OiK*"W2!wKܗcvxްoۨlՒ_lB[:[:ǀO[@$!!@$[7#hBӌXcqܥlՍZlB\:\:lFYA@:mA(c@{OˀTyK[:Y8W:W5{aR$!!@ D&g;$rC(Q2g9$X2Z2Q2#G@;,*%)";4,& =97;84  v d @ z  (R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/GWorkspace/Resources/Icons/stop_24.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stop_32.tiff0000644000175000001440000001043213214346545022363 0ustar multixusersII*9>)U;2-U%##9bQHkGn1+)UUB;W=tX3,(Uzf–m9\H;kZR%##9/(#UO;.rF0hHFBBqk]VƇQ7Ɇ\~bUV;Y3*&UQ<1[8&jGbWRx\K^:%vP]C US3$zTiNFBBq/,,UN>7Z7(eEfL;WD6Y7%{Um[ U:&^CtTdQF97*'p?,gIfH2%##9K/!tJ3vPyeU>.!P8zWH<0 g=(kIgP9d^^M.!fErNzIFFqkdb%##9)'&U70*yO5ɍbm/+(U [7'bDs\*$ UQH>d:(rLsQ. U f?/Ê`^MApD/ϋdc6,"U2* O2%eFpT'U6'tD.{RrU3( UXMHa?*gEuc)J-#zSӖnr# 9@;0P1#wRcLB:/,*UUD@tG/nLu[2//U9A1$X3#sV=kc]B@;) ^Bٕk^UPNTOLG-#kGДm}UM9+P6aBpL8#!!9aOGD(X=*g_T1/.U+ nA/ףnϞro]NYRPD)V<Εfy7-)T3!`BqLdH6:/'W=+jC+U5$WSR_UMH,dž`ܘk744UM:*M5Ȏ_pb\\6$iMlH\L@2*#qb>.[4$c?)\G4%##9UA*!U9yQϕewT7jHzQ‹cqN6`;&W<]<}xfI:R8kA-C-ZRO ,tB-sL˖e͠mlj]ɀUwOuL^@M3pK\cN=~N4TkHDžXyQzQwL1m^T9J>5lC,}TʁUxQs_Xve\U:oIzRˇ\ǁUtKoIeE`AcExQ΍_גaZ2$U_ZVG3#]:&~Uю_lLyg_o\MN6aEmKrMvMyPmKV;W;]AdCʃXזeZ2$U9H:5U3!kIҌbǒg.#Uh\V^9$]@ÄZǎa]rOqLsObCnE.lC,|I0aAɂVoO*U9J>7lB,Ί^˒dyV`>+c9&\>ÀUΘfʟoɒe}VrOkJX9zL2zI2S9rOhM% U90*#jE-\˗gώ`nHɆX͚jʔfϝmϤqˈ]̄YtN^>}M4T:eDuNyS2$U 9<%eFēiȐẽXӓeƘm͚jěqϦq̖gΊ`{PeCT>U@dDwRqM. ULB@H,~Uҕdޜmy۩tۢpѥqϦq͠mƍ_{QiF]?[?lJÂVlN, UU5*$xL3|SܘkwyyݪuԩqҦq˙jłXlJ^A`AjHńXjP("U8.,7!lH0mK„Zۙluvתqӡm˙hɀWqIaA_AiF|U\A U9;500!|K4jFLJ\Љ]ٞlܩu؞o͖f|TmIaAaAeEmL]E($U983. L,tK3^BySVȃ\UsM`A^?`A[@^>x[J*)(U9E?< 9!S4!{M4[?c@gDaAR7~N4~P6vG/oC-ZI=9$'#&9#E*O0 X7$\6%;#/6 >(_TIIFFq! U Ulb^HB94*   1.%B@;NHE-*)U   (@ (R/tmp/GNUstep/GNUMail/Icons/stop_32.tiffHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stop_48.tiff0000644000175000001440000002240613214346545022376 0ustar multixusersII*$uiuQNJYI, U8}Q}i8$ Q8uQ}i}iqq}i0a8(qQaAmQaAǎaϢqqmimQ}iui0Q0 iIiIQ4 Q8ςYyQmQaM8iI}Qq}i0A$iAqQ}iQ0 iA(yQiIyQ8(Y8yQ}Yui(8$ Q8iA}iqaQ8$ iA(YiIqaQ8$ Q0 uQYyQ80I, Q8qQmQaM88$ iA(YmQuiQ4 0UAuQmQ}i(a8(Q8qQmQQ4 I, yQ8YiA}iIE80qI0}Y}Yuia0 Q8uQiA8$ a8(aA}YQ8aYI0a8(qQ}YaM8(Q0 Y8uQqQA$qI0YYY8qmiQ4 Yǎa}iI, Q8qQqQuiuiI, Q8}Q}YY8UAǎaqa8(YߚqǎaqaQQ4 I, qI0aA}iqaQaYIa0 U8ϊa}YmQaYIqI0}Q}YI, aAߚqϊaqIE88$ qI0}Y}YyQ8I, a<(aANJYiI}iA$iA(aAQ8}i8$ 8$ Q8ךiߚqqaYIA$yQ8ϊaךiqaQ8$ a<(aA}YiAIE8A$a8(Y8aM8IE8(a<(Yߚq}YY8aYI8$ iA(גaߚqmQqaQ8$ a<(U8iIiAui0A$iA(aM8qmiqmiA$qQߚqגaqqmi8$ a<(yQߚqqIE8Q4 Q8aAaAQ8I, Q0 A$aM8IE80UAתqתqqqaQ8$ a8(iIגaq0a<(U8uQqImQqaQQ4 iA(a<(I, qmiIE80yQ8ϊayߚqq0a8(]AǎaתquiA$iA(UAuQiImQqaQI, Q4 qI0qI0Q4 Q0 qQߚqגaϢqIE8iA(Q8yQתqqmiQ0 a8(mQqQiAuiqaQa8(a0 a8(a<(Q4 aYI8$ A$yQ8qIςYגaqQ4 yQ8iIqIǎaqaM8Q0 a<(Q8aAY8Q0 Q8yQ8a8(Q4 8$ qmi0a<(aA}QϒYϦqǎaY}Q}QyQyQ}QuQiA(iA(Q8iIY8qmiQ4 qI0U8Q8a<(0IE80a0 ]A}QǎaϢqϦqǎaϊa}QyQqIqIaAQ8U8qIגaqaM8a<(aAUAQ8iA(8$ aYIQ0 U8qIςYגaϚiǎaςYqIyQςYqIiIU8Q8aAǎaךi}QaAaAY8qI0I, qmiaM8Y8U8Q8mQQ0 Q8uQςYϒYϒYϚiϊaqIqIςYqIaAU8U8iI}QϊayQuQaAQ8iA(IE8qmiqI0]AqIqIaAY8aM8Q8aAyQςYϊaǎaǎaqIqIyQyQiIaA]AaAyQNJY}QuQNJYY8Q4 0a<(yQגa}QqIuQqmiqI0aAqIqIςYϊaǎa}QqIqIqIiIaAaA]AuQςYǎaגaגaǎamQaYI0iA(uQגaגayQaAa<(UAiIqIyQ}Q}Q}Q}QqIiIaAaA]A]AaAqIςYגaגaNJYmQaM8Q0 aAךiגaqIaAaYIqI0Q8UAiIiIiIuQqIyQyQiIQ8Q8U8]A]AaAyQגaךiǎamQui(Q0 ]AςYϊa}QqQ4 qI0iIYǎaYYuQiIqIqIuQiIqI0a<(qI0qI0U8aA}Qגa}YY8qmiiA(aAߚqךiϚimQqaQQ4 a0 iA(iIyQגaϦqqǎauQqQuQqQqI]AqI0a<(a0 a<(qI0UA}QqQqaQqmi(qI0}QǎaǎaϚiQ8Q0 Q0 Q8aAyQNJYϚiϦqϢqϚiYYiIqQaAY8Y8Q8Q8Q8aA}YiIqaQqmia<(YǎaϚiϒYϊaaA}QNJYϚiϚiǎaךiϦqϢqϊa}QςYuQiIY8qI0Q8U8aAqIyQ}QmQIE8iAǎaqϚiϊaqI}QϊaϚiqϚiqϢqϦqǎaNJYϊa}QqIU8Q8Q8UAaAiIuQYmQ8$ A$qQǎaqǎaςYךiךiqϚiϚiqϦqϦqϢqϊaϊa}QyQaAUAUAUAaAiIYuQY8(iA(}QϦqגaגayyתqϦqךiϢqϦqϦqϦqǎaNJYyQqIaAaAU8]AiIqINJYqQY8(8$ UAYגaߚqyyyyyתqϦqϦqתqqǎaNJYuQiIaAUAaAiIuQϊaqQuiqmiQ4 Y8YגaߚqyyyyyתqתqתqϢqϚiϊaqIiI]AaAaAaAyQNJYiIqaQ8$ 8$ a8(Y8qQ}QǎaߚqyyyתqתqךiϦqǎaϊaqIqIaAaA]AaAyQYiIaM80aM8Q8qQYNJYגaߚqyתqתqϦqϦqϚiςYqIqIaAaAaAaAuQuQQ8aYIqmi0a<(Q8iAYϊa}QגaϦqyߚqךiǎaςYqIiIaAaAaAaAiIiIY8uiqmiI, a8(yQ8]AqQYςYNJYϊaϊa}QςYaAaAaAaAaA]AaAaAyQ8qmiqmiA$Q4 a<(qI0aAqQuQuQyQyQqIaA]AU8aA]AUAU8Y8iA((0Q4 a<(qI0Q8Y8Y8aAaAQ8qI0qI0qI0qI0iA(a<(a8(qaQqmi0I, Q4 a8(a<(a<(qI0Q8a8(Q0 A$Q0 Q0 Q0 Q0 IE8qmiIE8(00(IE8IE8IE88$ IE8IE8qmi00$ $@$$$(R/tmp/icons/stop.tifHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stop_small.tiff0000644000175000001440000000411413214346545023247 0ustar multixusersII* .:(6f^A;fX.Qo@Uy|'  ):| P HyOz 4wܛd  nP0~*UD @}.U)\x c 1x+ i˝9e O|8}:sO jܦTK_ *~ =Z@}-S;lN2x+Oba !!`  O|3>vO T }fץ30p5?kNsXNx[ &;XԬ 0)}c؜ Hv>i+x*i>  S&@<D(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Finder/Resources/Images/stop_small.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/stringPboard.tiff0000644000175000001440000002247613214346545023543 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSUUU///UUUkSSSUUUeeerrrvvvKKKUUUkSSS999999kSS2NNNrrr___@@@kSSSNNNKKK444GGGkSSSNNNKKKkSSSNNNYYY+++@@@kSS2NNNNNNkSSSNNN999UUUkSSSPPP~~~___UUUkSSSUUUUUUkSS2NNN@@@vvv///@@@kSSSNNN222444GGGkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ )$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/txt.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/switchMultiple.tiff0000644000175000001440000000256013214346545024112 0ustar multixusersII* gJ`h(R/home/enrico/Grivei/sviluppo/FileManager/Xws/Xws/Inspectors/AttributesPanel/Images/switchMultiple.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/switchOff.tiff0000644000175000001440000000256413214346545023035 0ustar multixusersII*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS lNdl(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/switchOff.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/switchOn.tiff0000644000175000001440000000256413214346545022677 0ustar multixusersII*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSS kNdl(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/switchOn.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabSelectedLeft.tiff0000644000175000001440000000341413214346545024126 0ustar multixusersII*TTT} 0 IQGR[O+++++^c\ĸ  GCG] Ĺ|{|(&(5*+(5ssss^ f@x(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabSelectedLeft.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabSelectedRight.tiff0000644000175000001440000000341613214346545024313 0ustar multixusersII*(  (;MBdnh&1*-;2(4-2'2Uc[=/=z| #%/(###5E;{{{FFF$$===702aXNXohgv}r !EUG,,,ZO]U  mmmfff 444999:24f{}{pbd(aaa% !n`c===~LLLsssss^ f@x(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabSelectedRight.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabSelectedToUnSelectedJunction.tiff0000644000175000001440000000352413214346545027306 0ustar multixusersII*  >E3^kdzzzaaaCCC---%%%rehiii=== .@DL(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabSelectedToUnSelectedJunction.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabUnSelectToSelectedJunction.tiff0000644000175000001440000000352213214346545026773 0ustar multixusersII*<82fFB>>\\\GG;ttty{mǻȿ¸ ,@BJ(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabUnSelectToSelectedJunction.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabUnSelectedJunction.tiff0000644000175000001440000000342213214346545025327 0ustar multixusersII*  &--j&&&j;A8j_llWWW  ĺ|~PPP?@@cm_XXXGSN492^lll-D9 }ƿ{{{999QQQ-2,R=;=EEE "s}p^U^###///{k{ZZZKKK55,'''ll_XYXG9Jmlv[[[DC/tiaZTd]O]xpx888PIP^ f@x (R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabUnSelectedJunction.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabUnSelectedLeft.tiff0000644000175000001440000000325213214346545024431 0ustar multixusersII* ;A8j  ĺcm_492^}ƿ-2,Rs}p-q{mHHHe *.(Lzǿ&+%F ytFND  @(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabUnSelectedLeft.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tabUnSelectedRight.tiff0000644000175000001440000000325413214346545024616 0ustar multixusersII* &--j_ll |~111KLKUUUS]Xlll/F< {{{DDD[[[=;=III"^U^###999{k{iiiOOO55,'''444xll_bbbccc999+++eG9J\\\mlvkkk OOO LDC/ ```tiadddEEEF]O]XXX xpx888888777  @(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gworkspace/TabbedShelf/Resources/Images/tabUnSelectedRight.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/tiffPboard.tiff0000644000175000001440000002247613214346545023165 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSٻ¤{ƦȨȩҳäϰίѳʭ̯շͮӴָĦԶٻ̭۾Ũ˭ոkSSS|ԶҴ|ַͮ£ŧغɪƨ££׹ܾǪŧǨݿæŨkSS2̭ϰҳϰغ׸ʫعɪŦгȪmrɭ£ʬ۽¤ˬԶ̭ն׹ԶkSSSնԵعҳŧ̮̮ä¤ڻ̯˭wtoo^{kZsazf{e۽ħշڼԵ׸ܾå̯αkSSSܾݿ۽ͯʭ̯в۾Ũ˭uquvpueo^|m^p_zgsɬ۾¥ڻ۽۽ѴӶӶkSSS׹¥¤Ũ¦ܾŨǬqwzq~no~npst礥۽ݿ¥ũŨkSS2¤ƧػŨǪƩͰȯ۾}h}ϵԼ׽flZzhWp_rrn[}ɬ˯ټ¦ƩȫɬkSSSбƧгֹȫ׺ټҶչ{ջųҽҴqxfteVvfsmZuټӶ˭ǬɬԷ۾kSSS¥αҴ۾ͰĪİĩuʭʶŲؽ{k{iX}m~ozhW}kϴѳƨũɬ׺kSSSββڽˮȫ̰ϴ{xͰ¯ųŲȶպ¤uis`}m|nqdUreUlxȩԶ¤ȫȫkSS2Ҵʹ©ϵϷ̳βo\}չůٽոɫzduapreUpan|ƨ̭ҳkSSSͭӵéêҹ~r_xαϳѸֿɰոĦ~ur]yerwfVvgu{ŧs|kSSS~ӵ׾ͯsrvqx¦Ǭ~izfnmrro^zjqxzvurkSSSy}ո§ҳڻs|ǫ§Ȭ˲շѵ̰Ե{rro}nqzz|}|kSS2v`u`wtev`h|e|l~پеϴеĥɯԻβiuumZ~kY}jXt_p~}dza{akSSSpr_yd~ks^nmp]sazֻªʲƭêʶָt^lvq\yf}jmioy}kSSSvvbvcn~lZziwhp^uerϱ׽Ȯ˲xپپҷƧtq\run[ls}iq]{~dtkSSSr^r^plo\ziXteV}lZ~k~o}ȫƪvxcؼֻofs`qun[n[mZn[zgut^t^u_kSS2noulxhWrrueziXrp~չƨĥƨã}s`zeuu_yf~kmwwt^ovkSSSttt{i|kYtar`~lZp]riݿԵææȪrin[zfun[~kuuwxv_|fgkSSSttwovc{fyducntwgqնѱu~gzfxgrrvcnrswwiihkSSSrtuuvxzrstqrȭڼ˭}ywrqrrutrrwxzzykSS2}kYq]to}dojq^prr`ocUocUq]{fuzfq]lZlZucrsn[~kY{iX{iXmvr^xau_kSSSo}dp}p|xbo_so_viZse}qbr]lsaq_~l~iq]~kpyhWsbyh}n^n[wq]kokSSS}kr~y{c{hro_ui\ozklzjydqr}crq{iXxhpueo[w}dkqkSSSwawaykhgwb|js}n^ocUmaUufVḽzkjluzr}kYxgW|jYreUsbtq\r\w`kSS2nsoyio[rpweseVpzm]xjZ}kvǫշäҳշuumZ{glyhp~nlY}ktkSSSywo|qeteVr`|m^yiYm[qr`{fغ˱ɯϱɫѴѴŧ{t^rtrrqlY{ejkSSSzx~opznrqqprzѳʰиһԼεԾδũΰ|||sqrppt{kSSSzas_n|i{iXn[mZ~lZpuyͰһðDzԼԽԽϲԵ|{ct^lYm[}jqteVmZr^kSS2rybwdnmZ~kxhm[ze{ɫֽӿϺªʸ̵ʳɬ~{b}h|jubu_un[tb~kkSSSzfq}jXvfxhm\r¤ջʶվվʷʸ̵Ȳɬȫ~yap{rf|t^ucwgkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/tiff.tiffCreated with The GIMPHHgworkspace-1.1.0/GWorkspace/Resources/Icons/watch.tiff0000644000175000001440000000255213214346545022204 0ustar multixusersII* VD@Zb(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/TESTCVS/watch.tiffCreated with The GIMPgworkspace-1.1.0/GWorkspace/Resources/Italian.lproj/0000755000175000001440000000000014753220702021646 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Italian.lproj/Localizable.strings0000644000175000001440000003033014753220702025501 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Pannello Informazioni..."; "Preferences..." = "Preferenze..."; "Help..." = "Aiuto..."; "Activate context help" = "Attiva guida contestuale"; "File" = "Archivio"; "Open" = "Apri"; "Open With..." = "Apri con..."; "Open as Folder" = "Apri come Cartella"; "Edit File" = "Modifica File"; "New Folder" = "Nuova Cartella"; "New File" = "Nuovo File"; "Duplicate" = "Duplica"; "Destroy" = "Distruggi"; "Move to Recycler" = "Sposta nel Cestino"; "Empty Recycler" = "Vuota il Cestino"; "Edit" = "Modifica"; "Cut" = "Taglia"; "Copy" = "Copia"; "Paste" = "Incolla"; "Select All" = "Seleziona tutto"; "View" = "Vista"; "Browser" = "Browser"; "Icon" = "Icone"; "List" = "Lista"; "Show" = "Mostra"; "Name only" = "Nome soltanto"; "Type" = "Tipo"; "Size" = "Dimensione"; "Modification date" = "Data modifica"; "Owner" = "Proprietario"; "Icon Size" = "Dimensione Icone"; "Icon Position" = "Posizione Icone"; "Up" = "Alto"; "Left" = "Sinistra"; "Label Size" = "Dimensione Etichette"; "Make thumbnail(s)" = "Crea miniature"; "Remove thumbnail(s)" = "Rimuovi miniature"; "Tools" = "Strumenti"; "Viewer" = "Vista"; "Inspectors" = "Ispettori"; "Show Inspectors" = "Mostra gli Ispettori"; "Attributes" = "Attributi"; "Contents" = "Contenuto"; "Annotations" = "Annotazioni"; "Finder" = "Finder"; "Fiend" = "Folletto"; "Show Fiend" = "Mostra il Folletto"; "Hide Fiend" = "Nascondi il Folletto"; "Add Layer..." = "Aggiungi un Livello..."; "Remove Current Layer" = "Rimuovi il Livello corrente"; "Rename Current Layer" = "Rinomina il Livello corrente"; "Layers" = "Livelli"; "Tabbed Shelf" = "Scaffalatura"; "Show Tabbed Shelf" = "Mostra Scaffalatura"; "Hide Tabbed Shelf" = "Nascondi Scaffalatura"; "Remove Current Tab" = "Rimuovi Scaffale Corrente"; "Rename Current Tab" = "Rinomina Scaffale Corrente"; "Add Tab..." = "Aggiungi Scaffale..."; "Terminal" = "Terminale"; "Run..." = "Esegui..."; "History" = "Cronologia"; "Show History" = "Mostra Cronologia"; "Go backward" = "Indietro"; "Go forward" = "Avanti"; "Show Desktop" = "Mostra Scrivania"; "Hide Desktop" = "Nascondi Scrivania"; "Show Recycler" = "Mostra Cestino"; "Hide Recycler" = "Nascondi Cestino"; "Check for disks" = "Verifica dischi"; "Windows" = "Finestre"; "Arrange in Front" = "Porta davanti"; "Miniaturize Window" = "Miniaturizza la Finestra"; "Close Window" = "Chiudi Finestra"; "Services" = "Servizi"; "Hide" = "Nascondi"; "Hide Others" = "Nascondi Altri"; "Show All" = "Mostra Tutti"; "Print..." = "Stampa..."; "Quit" = "Esci"; "Logout" = "Termina Sessione"; /* ----------------------- File Operations strings --------------------------- *\ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Workspace Manager per GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "Vai a https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Rilasciato sotto la GNU General Public License 2.0"; "Error" = "Errore"; "You have not write permission\nfor" = "Non hai permesso di scrittura\nper"; "Continue" = "Continua"; "File Viewer" = "File Viewer"; "Quit!" = "Termina!"; "Do you really want to quit?" = "Terminare veramente?"; "Yes" = "Sì"; "No" = "No"; "Log out" = "Log out"; "Are you sure you want to quit\nall applications and log out now?" = "Terminare tutte le applicazioni ed\nall eseguire log out ora?"; "If you do nothing, the system will log out\nautomatically in " = "Se non si esegue nulla, il sistema terminerà\nautomaticamente in "; "seconds." = "secondi."; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Annulla"; "Move" = "Muovi"; "Move from: " = "Spostare da: "; "\nto: " = "\na: "; "Copy" = "Copia"; "Copy from: " = "Copiare da: "; "Link" = "Collega"; "Link " = "Collega "; "Delete" = "Cancella"; "Delete the selected objects?" = "Cancellare gli oggetti selezionati?"; "Duplicate" = "Duplica"; "Duplicate the selected objects?" = "Duplicare gli oggetti selezionati?"; "From:" = "Da:"; "To:" = "A:"; "In:" = "In:"; "Stop" = "Stop"; "Pause" = "Pausa"; "Moving" = "Sposta"; "Linking" = "Collega"; "Duplicating" = "Duplica"; "Destroying" = "Cancellazione"; "File Operation Completed" = "Operazione Terminata"; "Backgrounder connection died!" = "La connessione con Backgrounder è terminata!"; "Some items have the same name;\ndo you want to sobstitute them?" = "Alcuni elementi hanno lo stesso nome;\nSostituirli?"; "File Operation Error!" = "Errore nell'operazione sui files!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Non hai permesso di scrittura\nper "; "The name " = "Il nome "; " is already in use!" = " e già in uso!"; "Cannot rename " = "Non posso rinominare "; "Invalid char in name" = "Carattere non valido nel nome"; /* ----------------------------- Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "liberi"; /* GWViewersManager.m */ "Are you sure you want to open" = "Sicuri di aprire"; "items?" = "elementi?"; "error" = "errore"; "Can't open " = "Impossibile aprire "; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Elementi"; /* Attributes.m */ "Attributes Inspector" = "Ispettore Attributi"; "Path:" = "Path:"; "Link to:" = "Coll. a:"; "Size:" = "Dimens.:"; "Calculate" = "Calcola"; "Owner:" = "Propr.:"; "Group:" = "Gruppo:"; "Changed" = "Modificato"; "Revert" = "Annulla"; "also apply to files inside selection" = "Applica a sottocartelle"; "Permissions" = "Permessi"; "Read" = "Lettura"; "Write" = "Scrittura"; "Execute" = "Esec."; "Owner_short" = "Propr."; "Group" = "Gruppo"; "Other" = "Altri"; /* ContentsPanel.m */ "Contents Inspector" = "Ispettore Contenuti"; "No Contents Inspector" = "Nessun Ispettore Contenuti"; "No Contents Inspector\nFor Multiple Selection" = "Nessun Ispettore\nper selezione multipla"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "L'ordinamento si applica al\ncontenuto della cartella selezionata,\nNON alla directory che la contiene"; "Sort by" = "Ordinamento"; "Name" = "Nome"; "Date" = "Data"; "Folder Inspector" = "Ispettore Cartelle"; /* ImageViewer.m */ "Image Inspector" = "Ispettore Immagini"; /* AppViewer.m */ "Open these kinds of documents:" = "Apre questo tipo di documenti:"; "Invalid Contents" = "Contenuto non valido"; "App Inspector" = "Ispettore App"; /* ToolsPanel.m */ "Tools Inspector" = "Ispettore Strumenti"; "No Tools Inspector" = "Nessun Ispettore Strumenti"; "Set Default" = "Imp. Predefinito"; /* ----------------------- Finder strings --------------------------- *\ /* Finder.m */ "Finder" = "Ricerca"; "No selection!" = "Nessuna selezione!"; "No arguments!" = "Nessun argomento!"; "Search in:" = "Cerca in:"; "Current selection" = "Selezione corrente"; "Add" = "Aggiungi"; "Remove" = "Rimuovi"; "Search for items whose:" = "Cerca per elementi che:"; "Specific places" = "Posti specifici"; "Recursive" = "Ricorsivamente"; "Search" = "Cerca"; /* names */ "contains" = "contiene"; "is" = "è"; "contains not" = "non contiene"; "starts with" = "inizia con"; "ends with" = "termina con"; "name" = "Nome"; /* size */ "size"="Dimensione"; "greater than"="maggiore di"; "less than"="minore di"; /* annotations */ "annotations"="Annotazioni"; "contains one of"="contiene uno di"; "contains all of"="contiene tutti"; "with exactly"="con esattamente"; "without one of"="escludendo"; /* owner */ "owner"="Proprietario"; /* date */ "date created"="Data creazione"; "date modified"="Data modifica"; "is today" = "è oggi"; "is within" = "è"; "is before" = "è prima"; "is after" = "è dopo"; "is exactly" = "è esattamente"; "the last day" = "Ieri"; "the last 2 days" = "Ultimi 2 giorni"; "the last 3 days" = "Ultimi 3 giorni"; "the last week" = "Ultima settimana"; "the last 2 weeks" = "Ultime 2 settimane"; "the last 3 weeks" = "Ultime 3 settimane"; "the last month" = "Ultimo mese"; "the last 2 months" = "Ultimi 2 mesi"; "the last 3 months" = "Ultimi 3 mesi"; "the last 6 months" = "Ultimi 6 mesi"; /* type */ "type"="Tipo"; "is not" = "non è"; "plain file" = "Archivio"; "folder" = "Cartella"; "tool" = "Strumento"; "symbolic link" = "Collegamento simbolico"; "application" = "Applicazione"; /* contents */ "contents"="Contenuto"; "includes"="contiene"; /* ----------------------- Fiend strings --------------------------- *\ /* Fiend.m */ "New Layer" = "Nuovo Livello"; "A layer with this name is already present!" = "E' già presente un livello vcon lo stesso nome!"; "You can't remove the last layer!" = "Non si può eliminare l'ultimo livello!"; "Remove layer" = "Rimuovi livello"; "Are you sure that you want to remove this layer?" = "Sei sicuro di voler rimuovere questo livello?"; "Rename Layer" = "Rinomina Livello"; "You can't dock multiple paths!" = "Non puoi aggiungere percorsi multipli!"; "This object is already present in this layer!" = "Questo oggetto e già presente in questo layer!"; /* ----------------------- Preferences strings --------------------------- *\ /* PreferencesWin.m */ "GWorkspace Preferences" = "Preferenze di GWorkspace"; /* DefaultXTerm.m */ "Terminal" = "Terminale"; "Set" = "Scegli"; "Use Terminal service" = "Utilizza il servizio Terminale"; "arguments" = "argomenti"; /* BrowserViewerPref.m */ "Column Width" = "Larg. Colonne"; "Use Default Settings" = "Usa i valori default"; /* DefaultEditor.m */ "Editor" = "Editore"; "Default Editor" = "Editore Default"; "No Default Editor" = "Nessun Editore Default"; "Choose" = "Scegli"; /* DefSortOrderPref.m */ "Sorting Order" = "Ordinamento"; "The method will apply to all the folders" = "Il metodo scelto si applicherà a tutte le cartelle"; "that have no order specified" = "che non ne hanno uno specificato."; /* HiddenFilesPref.m */ "Hidden Files" = "Archivi Nascosti"; "Files" = "Archivi"; "Folders" = "Cartelle"; "Activate changes" = "Attiva modifiche"; "Load" = "Carica"; "Hidden files" = "File nascosti"; "Shown files" = "File visualizzati"; "Select and move the files to hide or to show" = "Seleziona e sposta gli archivi da mostrare o nascondere"; "Hidden directories" = "Cartelle nascoste"; /* IconsPrefs.m */ "Icons" = "Icone"; "Thumbnails" = "Miniature"; "use thumbnails" = "Usa miniature"; "Title Width" = "Larg. Titolo"; /* DesktopPref.m */ "Desktop" = "Scrivania"; "Background"="Sfondo"; "General"="Generale"; "Color:" = "Colore:"; "center" = "Centra"; "fit" = "Adatta"; "tile" = "Piastrella"; "scale" = "Scala"; "Use image"="Usa Immagine"; "Choose"="Scegli"; "Dock" = "Molo"; "Show Dock"="Mostra Molo"; "Position:"="Posizione:"; "Style:"="Stile:"; "Left"="Sinistra"; "Right"="Destra"; "Classic"="Classico"; "Modern"="Moderno"; "Omnipresent"="Onnipresente"; "Autohide Tabbed Shelf"="Nascondi Scaffale Automaticamente"; "Single Click Launch"="Avvio con click singolo"; /* OperationPrefs.m */ "File Operations" = "Operazioni Archivi"; "Operation Preferences"="Preferenze Operazioni"; "Status Window"="Finestra di Stato"; "Confirmation"="Conferma"; "Show status window"="Mostra finestra di stato"; "Check this option to show a status window"="Spunta per mostrare una finestra di stato"; "during the file operations"="durante le operazioni sugli archivi"; "Uncheck the buttons to allow automatic confirmation"="Togliere la spunta per conferma automatica"; "of file operations"="delle operazioni"; /* HistoryPref.m */ "Number of saved paths"="Numero di percorsi salvati"; /* -------- */ /* OpenWithController */ "Open With" = "Apri Con"; "Type the name or the path of the application" = "Digitare il comando o il percorso dell'applicazione"; "to use to open the current selection" = "da usare per aprire la selezione corrente"; /* RunExternalController.m */ "Run" = "Esegui"; "Type the command to execute:"="Digitare il comando da esegure"; /* Recycler strings */ "Recycle: " = "Cestinare: "; "Recycler: " = "Cestino: "; "Recycler" = "Cestino"; "the Recycler" = "il Cestino"; "\nto the Recycler" = "\nnel Cestino"; "Move from the Recycler " = "Sposta dal Cestino "; "In" = "In"; "Empty Recycler" = "Svuotare il Cestino"; "Empty the Recycler?" = "Svuotare il Cestino?"; "Put Away" = "Ripristina"; gworkspace-1.1.0/GWorkspace/Resources/Japanese.lproj/0000755000175000001440000000000014753220702022013 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Japanese.lproj/Localizable.strings0000644000175000001440000003036714753220702025660 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Info Panel..."; "Preferences..." = "設定..."; "Help..." = "ヘルプ..."; "Activate context help" = "Activate context help"; "File" = "File"; "Open" = "開く"; "Open With..." = "アプリケーションを指定して開く..."; "Open as Folder" = "フォルダを開く"; "Edit File" = "編集"; "New Folder" = "新規フォルダ"; "New File" = "新規ファイル"; "Duplicate" = "複製"; "Destroy" = "削除"; "Move to Recycler" = "ごみ箱に捨てる"; "Empty Recycler" = "こみ箱を空に"; "Edit" = "編集"; "Cut" = "切り取り"; "Copy" = "コピー"; "Paste" = "貼り付け"; "Select All" = "すべて選択"; "View" = "表示"; "Browser" = "ブラウザ"; "Icon" = "アイコン"; "List" = "リスト"; "Show" = "表示"; "Name only" = "名前のみ"; "Type" = "種類"; "Size" = "サイズ"; "Modification date" = "更新日"; "Owner" = "所有者"; "Icon Size" = "アイコンサイズ"; "Icon Position" = "アイコン位置"; "Up" = "上"; "Left" = "左"; "Label Size" = "ラベルサイズ"; "Make thumbnail(s)" = "サムネイルの作成"; "Remove thumbnail(s)" = "サムネイルの削除"; "Viewer" = "ビューワ"; "Tools" = "ツール"; "Inspectors" = "インスペクタ"; "Show Inspectors" = "インスペクタの表示"; "Attributes" = "属性"; "Contents" = "コンテンツ"; "Annotations" = "Annotations"; "Finder" = "Finder"; "Fiend" = "Fiend"; "Show Fiend" = "Fiendを表示"; "Hide Fiend" = "Fiendを隠す"; "Add Layer..." = "Add Layer..."; "Remove Current Layer" = "現レイヤの削除"; "Rename Current Layer" = "現レイヤの名前変更"; "Layers" = "Layers"; "Tabbed Shelf" = "Tabbed Shelf"; "Show Tabbed Shelf" = "Show Tabbed Shelf"; "Hide Tabbed Shelf" = "Hide Tabbed Shelf"; "Remove Current Tab" = "Remove Current Tab"; "Rename Current Tab" = "タブの名前変更"; "Add Tab..." = "Add Tab..."; "Terminal" = "ターミナル"; "Run..." = "実行..."; "History" = "ヒストリ"; "Show History" = "ヒストリの表示"; "Go backward" = "Go backward"; "Go forward" = "Go forward"; "Show Desktop" = "デスクトップの表示"; "Hide Desktop" = "デスクトップの非表示"; "Show Recycler" = "リサイクラの表示"; "Hide Recycler" = "リサイクラの非表示"; "Check for disks" = "Check for disks"; "Windows" = "ウィンドウ"; "Arrange in Front" = "全面に表示"; "Miniaturize Window" = "最小化"; "Close Window" = "閉じる"; "Services" = "サービス"; "Hide" = "隠す"; "Hide Others" = "他を隠す"; "Show All" = "全て表示"; "Print..." = "印刷..."; "Quit" = "終了"; "Logout" = "ログアウト"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "See https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Released under the GNU General Public License 2.0"; "Error" = "Error"; "You have not write permission\nfor" = "You do not have write permission\nfor"; "Continue" = "Continue"; "File Viewer" = "ファイルビューワ"; "Quit!" = "終了"; "Do you really want to quit?" = "終了しますか?"; "Yes" = "はい"; "No" = "いいえ"; "Log out" = "ログアウト"; "Are you sure you want to quit\nall applications and log out now?" = "Are you sure you want to quit\nall applications and log out now?"; "If you do nothing, the system will log out\nautomatically in " = "If you do nothing, the system will log out\nautomatically in "; "seconds." = "seconds."; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Cancel"; "Move" = "移動"; "Move from: " = "移動 from: "; "\nto: " = "\nto: "; "Copy from: " = "コピー from: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "削除"; "Delete the selected objects?" = "選択したオブジェクトを削除しますか?"; "Duplicate" = "複製"; "Duplicate the selected objects?" = "選択したオブジェクトを複製しますか?"; "From:" = "From:"; "To:" = "To:"; "In:" = "In:"; "Stop" = "Stop"; "Pause" = "Pause"; "Moving" = "Moving"; "Copying" = "Copying"; "Linking" = "Linking"; "Duplicating" = "複製中"; "Destroying" = "削除中"; "File Operation Completed" = "File Operation Completed"; "Backgrounder connection died!" = "Background connection died!"; "Some items have the same name;\ndo you want to substitute them?" = "Some items have the same name;\ndo you want to substitute them?"; "File Operation Error!" = "File Operation Error!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "You do not have write permission\nfor "; "The name " = "The name "; " is already in use!" = "は使用中です!"; "Cannot rename " = "Cannot rename "; "Invalid char in name" = "名前に使用できない文字が含まれています"; /* ----------------------------- Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "フリー"; /* GWViewersManager.m */ "Are you sure you want to open" = "本当に開きますか"; "items?" = "箇条?"; "error" = "エラー"; "Can't open " = "開けません "; /* ---------------------------- Inspectors strings --------------------------- */ "Items" = "箇条"; /* Attributes.m */ "Attributes Inspector" = "アトリビュートインスペクタ"; "Path:" = "Path:"; "Link to:" = "Link To:"; "Size:" = "Size:"; "Calculate" = "Calculate"; "Owner:" = "Owner:"; "Group:" = "Group:"; "Changed" = "Changed"; "Revert" = "Revert"; "also apply to files inside selection" = "Apply to subfolders"; "Permissions" = "Permissions"; "Read" = "Read"; "Write" = "Write"; "Execute" = "Execute"; "Owner_short" = "Owner"; "Group" = "Group"; "Other" = "Other"; /* ContentsPanel.m */ "Contents Inspector" = "コンテンツインスペクタ"; "No Contents Inspector" = "No Contents Inspector"; "No Contents Inspector\nFor Multiple Selection" = "No Contents Inspector\nfor Multiple Selection"; "No Contents Inspectors found!" = "No Contents Inspectors found!"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder"; "Sort by" = "Sort by"; "Name" = "名前"; "Date" = "日付"; "Folder Inspector" = "フォルダインスペクタ"; /* ImageViewer.m */ "Image Inspector" = "イメージインスペクタ"; /* AppViewer.m */ "Open these kinds of documents:" = "Open these kinds of documents:"; "Invalid Contents" = "Invalid Contents"; "App Inspector" = "アプリインスペクタ"; /* Tools.m */ "Tools Inspector" = "ツールインスペクタ"; "No Tools Inspector" = "No Tools Inspector"; "Set Default" = "Set Default"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "ファインダ"; "No selection!" = "No selection!"; "No arguments!" = "No arguments!"; "Search in:" = "Search in:"; "Current selection" = "Current selection"; "Add" = "Add"; "Remove" = "Remove"; "Search for items whose:" = "Search for items whose:"; "Specific places" = "Specific places"; "Recursive" = "Recursive"; "Search" = "Search"; /* names */ "contains" = "含む"; "is" = "is"; "contains not" = "contains not"; "starts with" = "starts with"; "ends with" = "ends with"; "name" = "Name"; /* size */ "size"="サイズ"; "greater than"="greater than"; "less than"="less than"; /* annotations */ "annotations"="Annotations"; "contains one of"="contains one of"; "contains all of"="contains all of"; "with exactly"="with exactly"; "without one of"="without one of"; /* owner */ "owner"="所有者"; /* date */ "date created"="作成日"; "date modified"="更新日"; "is today" = "is today"; "is within" = "is within"; "is before" = "is before"; "is after" = "is after"; "is exactly" = "is exactly"; "the last day" = "the last day"; "the last 2 days" = "the last 2 days"; "the last 3 days" = "the last 3 days"; "the last week" = "the last week"; "the last 2 weeks" = "the last 2 weeks"; "the last 3 weeks" = "the last 3 weeks"; "the last month" = "the last month"; "the last 2 months" = "the last 2 months"; "the last 3 months" = "the last 3 months"; "the last 6 months" = "the last 6 months"; /* type */ "type"="Type"; "is not" = "is not"; "plain file" = "Plain file"; "folder" = "フォルダ"; "tool" = "Tool"; "symbolic link" = "シンボリックリンク"; "application" = "アプリケーション"; /* contents */ "contents"="コンテンツ"; "includes"="includes"; /* ----------------------- Fiend strings --------------------------- *\ /* Fiend.m */ "New Layer" = "新規レイヤ"; "A layer with this name is already present!" = "A layer with this name is already present!"; "You can't remove the last layer!" = "You can't remove the last layer!"; "Remove layer" = "Remove layer"; "Are you sure that you want to remove this layer?" = "Are you sure you want to remove this layer?"; "Rename Layer" = "Rename Layer"; "You can't dock multiple paths!" = "You can't dock multiple paths!"; "This object is already present in this layer!" = "This object is already present in this layer!"; /* ----------------------- Preference strings --------------------------- *\ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspaceの設定"; /* XTermPref.m */ "Terminal" = "ターミナル"; "Set" = "Set"; "Use Terminal service" = "Use Terminal service"; "arguments" = "引数"; /* BrowserViewerPref.m */ "Column Width" = "カラム幅"; "Use Default Settings" = "デフォルト値を使用"; /* DefaultEditor.m */ "Editor" = "エディタ"; "Default Editor" = "デフォルトエディタ"; "No Default Editor" = "デフォルトエディタ無し"; "Choose" = "選択"; /* DefSortOrderPref.m */ "Sorting Order" = "Sorting Order"; "The method will apply to all the folders" = "The method will apply to all the folders"; "that have no order specified" = "that have no order specified"; /* HiddenFilesPref.m */ "Hidden Files" = "Hidden Files"; "Files" = "Files"; "Folders" = "Folders"; "Activate changes" = "Activate changes"; "Load" = "Load"; "Hidden files" = "Hidden files"; "Shown files" = "Shown files"; "Select and move the files to hide or to show" = "Select and move the files to hide or to show"; "Hidden directories" = "Hidden directories"; /* IconsPrefs.m */ "Icons" = "Icons"; "Thumbnails" = "Thumbnails"; "use thumbnails" = "Use thumbnails"; "Title Width" = "Title Width"; /* DesktopPref.m */ "Desktop" = "Desktop"; "Background"="Background"; "General"="General"; "Color:" = "Color:"; "center" = "Center"; "fit" = "Fit"; "tile" = "Tile"; "scale" = "Scale"; "Use image"="Use image"; "Choose"="Choose"; "Dock" = "Dock"; "Show Dock"="Show Dock"; "Position:"="Position:"; "Style:"="Style:"; "Left"="左"; "Right"="右"; "Classic"="Classic"; "Modern"="Modern"; "Omnipresent"="Omnipresent"; "Autohide Tabbed Shelf"="Autohide Tabbed Shelf"; /* OperationPrefs.m */ "File Operations" = "File Operations"; "Operation Preferences"="Operation Preferences"; "Status Window"="Status Window"; "Confirmation"="Confirmation"; "Show status window"="Show status window"; "Check this option to show a status window"="Check this option to show a status window"; "during the file operations"="during the file operations"; "Uncheck the buttons to allow automatic confirmation"="Uncheck the buttons to allow automatic confirmation"; "of file operations"="of file operations"; /* HistoryPref.m */ "Number of saved paths"="Number of saved paths"; /* -------- */ /* OpenWithController */ "Open With" = "Open With"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; /* Recycler strings */ "Recycle: " = "Recycle: "; "Recycler: " = "Recycler: "; "Recycler" = "Recycler"; "the Recycler" = "the Recycler"; "\nto the Recycler" = "\nto the Recycler"; "Move from the Recycler " = "Move from the Recycler "; "In" = "In"; "Empty Recycler" = "Empty Recycler"; "Empty the Recycler?" = "Empty the Recycler?"; "Put Away" = "Put Away"; gworkspace-1.1.0/GWorkspace/Resources/Norvegian.lproj/0000755000175000001440000000000014753220702022215 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Norvegian.lproj/Localizable.strings0000644000175000001440000002626214753220702026061 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Infopanel..."; "Preferences..." = "Innstillinger..."; "Help..." = "Hjelp..."; "File" = "Fil"; "Open" = "Åpne"; "Open as Folder" = "Åpne som mappe"; "Edit File" = "Rediger fil"; "New Folder" = "Ny mappe"; "New File" = "Ny fil"; "Duplicate" = "Fordoble"; "Destroy" = "Ødelegg" "Empty Recycler" = "Tøm papirkurven"; /* "Put Away" = "Gjenopprett"; "Print..." = "Skriv ut..."; "Open With..." = "Åpne med..."; "Run..." = "Kjør..."; */ "Edit" = "Rediger"; "Cut" = "Klipp ut"; "Copy" = "Kopier"; "Paste" = "Lim inn"; /* "Delete" = "Slett" */ "Select All" = "Merk alt"; "View" = "Vis"; "Browser" = "Browser"; "Icon" = "Ikoner"; /* "Small Icon" = "SmÃ¥ ikoner"; */ "Tools" = "Verktøy"; "Viewer" = "Visning"; "Inspectors" = "Inspektører..."; "Show Inspectors" = "Vis inspektørene"; "Attributes" = "Egenskaper"; "Contents" = "Innhold"; "Tools" = "Verktøy"; "Permissions" = "Rettigheter"; /* "History" = "Historie"; "Show History" = "Vis historie"; "Go backward" = "Tilbake"; "Go forward" = "Fram"; */ "Finder" = "Finn"; "Processes..." = "Prosesser..."; "Applications..." = "Applikasjoner..."; /* "File Operations..." = "Filoperasjoner..."; */ "Fiend" = "Fiend"; "Show Fiend" = "Vis fiend"; "Hide Fiend" = "Skjul fiend"; "Add Layer..." = "Nytt skrivebord..."; "Remove Current Layer" = "Slett aktuelt skrivebord"; "Rename Current Layer" = "Gi skrivebordet nytt navn"; "Layers" = "Skriveborder"; /* "Tabbed Shelf" = "Tabbed Shelf"; "Show Tabbed Shelf" = "Vis Tabbed Shelf"; "Hide Tabbed Shelf" = "Skjul Tabbed Shelf"; "Remove Current Tab" = "Slett aktuelt faneblad"; "Rename Current Tab" = "Gi fanebladet nytt navn"; "Add Tab..." = "Nytt faneblad..."; */ "DeskTop Shelf" = "Desktop Shelf"; "XTerm" = "XTerm"; "Windows" = "Vindu"; "Arrange in Front" = "Ordne til forgrunnen"; "Miniaturize Window" = "Minimer vinduet"; "Close Window" = "Lukk vinduet"; "Services" = "Tjenester"; "Hide" = "Skjul"; "Quit" = "Avslutt"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ /*"Author" = "Forfatter";*/ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "Se hhttps://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Publisert under GNU General Public License 2.0"; "Error" = "Feil"; "You have not write permission\nfor" = "Du har ingen skrive-rettigheter\ntil"; "Continue" = "Fortsette"; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Avbryt"; "Move" = "Flytt"; "Move from: " = "Flytt fra: "; "\nto: " = "\ntil: "; "Copy" = "Kopier"; "Copy from: " = "Kopier fra: "; "Link" = "Lenke"; "Link " = "Lenke "; "Delete" = "Slett"; "Delete the selected objects?" = "Slette de utvalgte objektene?"; "Duplicate" = "Fordoble"; "Duplicate the selected objects?" = "Fordoble de utvalgte objektene?"; "From:" = "Fra:"; "To:" = "Til:"; "In:" = "I:"; "Stop" = "Stopp"; "Pause" = "Pause"; "Moving" = "Flytter"; "Copying" = "Kopierer"; "Linking" = "Lenker"; "Duplicating" = "Fordobler"; "Destroying" = "Ødelegger"; "File Operation Completed" = "Filoperasjon komplett utført"; "Backgrounder connection died!" = "Bakgrunn-forbindelse drept."; "Some items have the same name;\ndo you want to sobstitute them?" = "Noe gjenstand har det samme navnet;\nskal de erstattes?"; "Error" = "Feil"; "File Operation Error!" = "Feil ved filoperasjon."; /* ColumnIcon.m */ "You have not write permission\nfor " = "Du har ingen skrive-rettigheter\ntil "; "The name " = "Navnet "; " is already in use!" = " brukes alerede!"; "Cannot rename " = "Kan ikke gi nytt navn til "; "Invalid char in name" = "Ugyldig tegn i navnet"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Elementer"; /* InspectorsWin.m */ "Attributes" = "Egenskaper"; "Contents" = "Innholder"; "Tools" = "Verktøy"; "Access Control" = "Tilgangkontroll"; /* AttributesPanel.m */ "Attributes" = "Egenskaper"; "Attributes Inspector" = "Egenskap-inspektør"; "Path:" = "Adresse:"; "Link To:" = "Lenke til:"; "Size:" = "Størrelse:"; "Owner:" = "Eier:"; "Group:" = "Gruppe:"; "Changed" = "Endret"; "Revert" = "Tilbakestill"; "OK" = "OK"; /* ContentsPanel.m */ "Contents" = "Innhold"; "Contents Inspector" = "Innhold-inspektør"; "No Contents Inspector" = "Ingen innhold-inspektør"; "No Contents Inspector\nFor Multiple Selection" = "Ingen innhold-inspektør\ntil mangfoldig utvalg."; "error" = "Feil"; "No Contents Inspectors found!" = "Ingen innhold-inspektør funnet."; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder"r = "Sorter-metoden brukes\ni den utvalgte mappen,\nIKKE i den overordnet mappen."; "Sort by" = "Sorter etter:"; "Name" = "Navn"; "Kind" = "Type"; "Date" = "Dato"; "Size" = "Størrelse"; "Owner" = "Eier"; "Folder Inspector" = "Mappe-inspektør"; /* ImageViewer.m */ "Image Inspector" = "Bilde-inspektør"; /* AppViewer.m */ "Open these kinds of documents:" = "Åpne disse filtypene:"; "Invalid Contents" = "Ugyldig innhold"; "App Inspector" = "Applikasjon-inspektør"; /* PermissionsPanel.m */ "UNIX Permissions" = "UNIX-filrettigheter"; "Access Control" = "Tilgangkontroll"; /* "Also apply to files inside selection" = "Anvende ogsÃ¥ til utvalgte filer" */ "Also apply to files inside selection" = "Anvende ogsÃ¥ til utvalgte filer"; /* ToolsPanel.m */ "Tools" = "Verktøy"; "Tools Inspector" = "Verktøy-inspektør"; "No Tools Inspector" = "Ingen verktøy-inspektør"; "Set Default" = "Sett standard"; /* AppsView.m */ "Double-click to open selected document(s)" = "Klikk dobbelt til Ã¥ Ã¥pne dokumenter"; "Default:" = "Standard:"; "Path:" = "Adresse:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Klikk pÃ¥ ‹Sett standard› til Ã¥ sette standardapplikasjonen\ntil alle dokumenter med denne ending"; /* PermsBox.m */ "Permissions" = "Rettigheter"; "Read" = "Lese"; "Write" = "Skrive"; "Execute" = "Kjøre"; "Owner" = "Eier"; "Group" = "Gruppe"; "Other" = "Andre"; /* ----------------------- Processes strings --------------------------- */ /* Processes.m */ "Processes" = "Prosesser"; "No Background Process" = "Ingen bakgrunnprosess"; "Kill" = "Avbryt"; "Path: " = "Adresse: "; "Status: " = "Status: "; /* ProcsView.m */ "Applications" = "Applikasjoner"; "Background" = "Bakgrunn"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Finn filer"; "Find items with names that match" = "Søk etter samsvarendene navner"; "Find items with contents that match" = "Søk etter samsvarende innhold"; "No selection!" = "Ingen utvalg."; "No arguments!" = "Inge argumenter."; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Nytt skrivebord"; "A layer with this name is already present!" = "Et skrivebord med dette navnet eksisterer alerede."; "You can't remove the last layer!" = "Du kan ikke fjerne det siste skrivebordet."; "Remove layer" = "Fjerne skrivebordet?"; "Are you sure that you want to remove this layer?" = "Er du sikker at skrivebordet skal fjernes?"; "Rename Layer" = "Gi skrivebordet nytt navn"; "You can't dock multiple paths!" = "Du kan ikke dokke mangfoldige adresser" "This object is already present in this layer!" = "Dette objektet eksisterer allerede i dette skrivebordet."; /* ----------------------- Preferences strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace instillinger"; /* BackWinPreferences.m */ "Desktop Shelf" = "Desktop Shelf"; "Desktop Color" = "Skrivebordfarge"; "red" = "rød"; "green" = "grønn"; "blue" = "blÃ¥"; "Set Color" = "Sett fargen"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Klikk pÃ¥ knappen «Sett bilde»\ntil Ã¥ sette skrivebordets bakgrunnbildet.\nBildet mÃ¥ ha den samme\nstørrelsen like skjermen."; "Set Image" = "Sett bilde" "Unset Image" = "Usett bilde"; /*"Activate desktop" = "Aktiver skrivebord";*/ /* DefaultXTerm.m */ "Set" = "Sett"; /*"xterm" = "xterm"; "arguments" = "Argumenter"; */ /* BrowserViewsPreferences.m */ "Column Width" = "Kolonnbredde"; "Use Default Settings" = "Bruk standardinstilling"; "Browser" = "Browser"; /* FileWatchingPreferences.m */ "File System Watching" = "Fil-overvÃ¥kning"; "timeout" = "Tidbegrensning"; "frequency" = "Frekvens"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "Verder brukes straks til\n nye overvÃ¥kninger, \ntil eksisterende etter den først tidbegrensning"; /* ShelfPreferences.m */ "Shelf" = "Shelf"; /*"Default" = "Standard";*/ /* DefaultEditor.m */ "Default Editor" = "Standard-editor"; "No Default Editor" = "Ingen standard-editor"; "Choose..." = "Velg..."; /*"Choose" = "Velg";*/ /* IconViewsPreferences.m */ "Title Width" = "Tittelbredde"; "Icon View" = "Ikonvisning"; /* Sorting order */ "Sorting Order" = "Sorterrekkefølge"; "Sort by" = "Sorter etter"; "This sort method will apply to all the folders\nthat have no sorting order specified" = "Denne sortermetoden gjelder til\nalle mapper uten egen definert rekkefølge."; /* File Operations */ /* "File Operations" = "Filoperasjoner"; "Status Window" = "Statusvindu"; "Confirmation" = "Bekreftelse"; "Show status window" = "Vis statusvindu"; "Check this option to show a status window\nduring the file operations" = "Sett denne opsjonen til Ã¥ vise et statusvindu\nmens filoperasjoner."; */ /* Icons */ /* "Icons" = "Ikoner"; "Thumbnails" = "Forhandsvisning"; "use thumbnails" = "Bruk forhandsvisning"; "Animate icons" = "Animer ikoner"; "when changing a path" = "ved veksling av adressen"; "when opening a file" = "ved Ã¥pning av en fil"; "sliding back after file operation" = "skli bak etter filoperasjonen"; "Activate changes" = "Aktiver endringene"; */ /* Hidden Files */ /* "Hidden Files" = "Skjulte filer"; "Hidden files" = "Skjulte filer"; "Shown files" = "Synlige filer"; "Load" = "Last"; "Select and move the files to hide or to show" = "Velg og skift filene til skjulle eller vise"; */ /* Browser */ /*"Aspect" = "Aspekt"; "Icons in Browser Cells" = "Vis ikoner i browser-celler"; "Uses Shelf" = "Bruk Shelf"; "Columns Width" = "Kolonnbredde"; */ /* OpenWithController */ /* "Open With" = "Open With"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; */ /* Recycler strings */ "Recycle: " = "Søppel: "; "Recycler: " = "Papirkurv: "; "Recycler" = "Papirkurv"; "the Recycler" = "Papirkurven"; "\nto the Recycler" = "\ni papirkurven"; "Move from the Recycler " = "Flytt fra papirkurven "; "In" = "I"; "Empty Recycler" = "Tøm papirkurven"; "Empty the Recycler?" = "Tøm papirkurven?"; "Put Away" = "Gjenopprett"; gworkspace-1.1.0/GWorkspace/Resources/Polish.lproj/0000755000175000001440000000000014753220702021523 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Polish.lproj/Localizable.strings0000644000175000001440000003074514753220702025370 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Informacje"; "Info Panel..." = "Panel informacyjny..."; "Preferences..." = "Preferencje..."; "Help..." = "Pomoc..."; "Activate context help" = "Włącz pomoc kontekstową"; "File" = "Plik"; "Open" = "Otówrz"; "Open With..." = "Otwórz z..."; "Open as Folder" = "Otwórz jako folder"; "Edit File" = "Edytuj plik"; "New Folder" = "Nowy folder"; "New File" = "Nowy plik"; "Duplicate" = "Duplikuj"; "Destroy" = "Zniszcz"; "Move to Recycler" = "Przenieś do kosza"; "Empty Recycler" = "Opróżnij kosz"; "Edit" = "Edycja"; "Cut" = "Wytnij"; "Copy" = "Kopiuj"; "Paste" = "Wklej"; "Select All" = "Zaznacz wszystko"; "View" = "Widok"; "Browser" = "Przeglądarka"; /* TODO: "browser" and "viewer" means the same in Polish */ "Icon" = "Ikona"; "List" = "Lista"; "Show" = "Pokaż"; "Name only" = "Tylko nazwa"; "Type" = "Typ"; "Size" = "Rozmiar"; "Modification date" = "Data modyfikacji"; "Owner" = "Właściciel"; "Icon Size" = "Rozmiar ikony"; "Icon Position" = "Pozycja ikony"; "Up" = "Góra"; "Left" = "Lewo"; "Label Size" = "Rozmiar etykiety"; "Make thumbnail(s)" = "Utwórz miniaturkę/i"; "Remove thumbnail(s)" = "Usuń miniaturkę/i"; "Viewer" = "Przeglądarka"; /* TODO: "browser" and "viewer" means the same in Polish */ "Tools" = "Narzędzia"; "Inspectors" = "Inspektorzy"; "Show Inspectors" = "Pokaż inspektorów"; "Attributes" = "Atrybuty"; "Contents" = "Zawartość"; "Annotations" = "Adnotacje"; "Finder" = "Finder"; "Fiend" = "Fiend"; /* TODO: ? */ "Show Fiend" = "Show Fiend"; /* TODO: ? */ "Hide Fiend" = "Hide Fiend"; /* TODO: ? */ "Add Layer..." = "Dodaj warstwę..."; "Remove Current Layer" = "Usuń obecną warstwę"; "Rename Current Layer" = "Zmień nazwę obecnej warstwy"; "Layers" = "Warstwy"; "Tabbed Shelf" = "Zakładki"; "Show Tabbed Shelf" = "Pokaż zakładki"; "Hide Tabbed Shelf" = "Ukryj zakładki"; "Remove Current Tab" = "Usuń obecną zakładkę"; "Rename Current Tab" = "Zmień nazwę obecnej zakładki"; "Add Tab..." = "Dodaj zakładkę..."; "Terminal" = "Terminal"; "Run..." = "Uruchom..."; "History" = "Historia"; "Show History" = "Pokaż historię"; "Go backward" = "Przejdź wstecz"; "Go forward" = "Przejdź dalej"; "Show Desktop" = "Pokaż pulpit"; "Hide Desktop" = "Ukryj pulpit"; "Show Recycler" = "Pokaż kosz"; "Hide Recycler" = "Ukryj kosz"; "Check for disks" = "Sprawdź dyski"; "Windows" = "Okna"; "Arrange in Front" = "Pokaż z przodu"; "Miniaturize Window" = "Zminiaturyzuj okno"; "Close Window" = "Zamknij okno"; "Services" = "Usługi"; "Hide" = "Ukryj"; "Hide Others" = "Ukryj inne"; "Show All" = "Pokaż wszystko"; "Print..." = "Drukuj..."; "Quit" = "Wyjdź"; "Logout" = "Wyloguj"; /* ----------------------- File Operations strings --------------------------- *\ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Menedżer przestrzeni roboczej GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "Zobacz https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Wydano na licencji GNU General Public License 2.0"; "Error" = "Błąd"; "You have not write permission\nfor" = "Nie masz uprawnień do zapisu"; "Continue" = "Kontynuuj"; "File Viewer" = "Przeglądarka plików"; "Quit!" = "Wyjdź"; "Do you really want to quit?" = "Czy na pewno chcesz wyjść?"; "Yes" = "Tak"; "No" = "Nie"; "Log out" = "Wyloguj"; "Are you sure you want to quit\nall applications and log out now?" = "Jesteś pewien, że chcesz zamknąć\nwszystkie programy i wylogować się teraz?"; "If you do nothing, the system will log out\nautomatically in " = "W wypadku braku reakcji, system wyloguje Cię\nautomatycznie w ciągu "; "seconds." = "sekund."; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Anuluj"; "Move" = "Przenieś"; "Move from: " = "Przenieś z: "; "\nto: " = "\ndo: "; "Copy from: " = "Kopiuj z: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Usuń"; "Delete the selected objects?" = "Usunąć zaznaczone obiekty?"; "Duplicate" = "Duplikuj"; "Duplicate the selected objects?" = "Zduplikować zaznaczone obiekty?"; "From:" = "Z:"; "To:" = "Do:"; "In:" = "W:"; "Stop" = "Stop"; "Pause" = "Pauza"; "Moving" = "Przenoszenie"; "Copying" = "Kopiowanie"; "Linking" = "Linkowanie"; "Duplicating" = "Duplikowanie"; "Destroying" = "Usuwanie"; "File Operation Completed" = "Operacja na pliku zakończona"; "Backgrounder connection died!" = "Połącznie z Backgrounderem zostało niespodziewanie zakończone!"; "Some items have the same name;\ndo you want to substitute them?" = "Niektóre elementy mają taką samą nazwę;\nczy chcesz je zastąpić?"; "File Operation Error!" = "Wystąpił błąd operacji na pliku!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Nie masz uprawnień do zapisu\nw "; "The name " = "Nazwa "; " is already in use!" = " jest już w użyciu!"; "Cannot rename " = "Nie można zmienić nazwy "; "Invalid char in name" = "Niedozwolony znak w nazwie"; /* ----------------------------- Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "wolne"; /* GWViewersManager.m */ "Are you sure you want to open" = "Czy chcesz otworzyć"; "items?" = "przedmioty/ów?"; "error" = "błąd"; "Can't open " = "Nie można otworzyć "; /* ---------------------------- Inspectors strings --------------------------- */ "Items" = "Elementy"; /* Attributes.m */ "Attributes Inspector" = "Inspektor atrybutów"; "Path:" = "Ścieżka:"; "Link to:" = "Odnośnik do:"; "Size:" = "Rozmiar:"; "Calculate" = "Oblicz"; "Owner:" = "Właściciel:"; "Group:" = "Grupa:"; "Changed" = "Zmieniono"; "Revert" = "Cofnij"; "also apply to files inside selection" = "Zastosuj do subfolderów"; "Permissions" = "Uprawnienia"; "Read" = "Odczyt"; "Write" = "Zapis"; "Execute" = "Wykonywanie"; "Owner_short" = "Właściciel"; "Group" = "Grupa"; "Other" = "Inni"; /* ContentsPanel.m */ "Contents Inspector" = "Inspektor zawartości"; "No Contents Inspector" = "Brak inspektorów zawartości"; "No Contents Inspector\nFor Multiple Selection" = "Brak inspektorów zawartości\ndla wielokrotnego wyboru"; "No Contents Inspectors found!" = "Nie znaleziono inspektorów zawartości!"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Metoda sortowania będzie zastosowana\ndo zawartości zaznaczonego folderu,\nNIE do folderu nadrzędnego"; "Sort by" = "Sortuj według"; "Name" = "Nazwy"; "Date" = "Daty"; "Folder Inspector" = "Inspektor folderu"; /* ImageViewer.m */ "Image Inspector" = "Inspektor obrazu"; /* AppViewer.m */ "Open these kinds of documents:" = "Otwórz te rodzaje dokumentów:"; "Invalid Contents" = "Nieprawidłowa zawartość"; "App Inspector" = "Inspektor aplikacji"; /* Tools.m */ "Tools Inspector" = "Inspektor narzędzi"; "No Tools Inspector" = "Brak inspektorów narzędzi"; "Set Default" = "Ustaw jako domyslne"; /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "Finder" = "Finder"; "No selection!" = "Brak zaznaczenia!"; "No arguments!" = "Brak argumentów!"; "Search in:" = "Szukaj w:"; "Current selection" = "Obecne zaznaczenie"; "Add" = "Dodaj"; "Remove" = "Usuń"; "Search for items whose:" = "Szukaj przedmiotów, które:"; "Specific places" = "Specyficzne miejsca"; "Recursive" = "Rekursywnie"; "Search" = "Szukaj"; /* names */ "contains" = "zawiera"; "is" = "jest"; "contains not" = "nie zawiera"; "starts with" = "zaczyna się od"; "ends with" = "kończy na"; "name" = "Nazwa"; /* size */ "size"="Rozmiar"; "greater than"="większy niż"; "less than"="mniejszy niż"; /* annotations */ "annotations"="Adnotacje"; "contains one of"="zawiera jedno z"; "contains all of"="zawiera wszystkie z"; "with exactly"="dokładnie z"; "without one of"="bez jednego z"; /* owner */ "owner"="Właściciel"; /* date */ "date created"="Data utworzenia"; "date modified"="Data modyfikacji"; "is today" = "jest dzisiaj"; "is within" = "jest w zakresie"; "is before" = "jest sprzed"; "is after" = "jest po"; "is exactly" = "jest dokładnie"; "the last day" = "ostatniego dnia"; "the last 2 days" = "ostatnich 2 dni"; "the last 3 days" = "ostatnich 3 dni"; "the last week" = "ostatniego tygodnia"; "the last 2 weeks" = "ostatnich 2 tygodni"; "the last 3 weeks" = "ostatnich 3 tygodni"; "the last month" = "ostatniego miesiąca"; "the last 2 months" = "ostatnich 2 miesięcy"; "the last 3 months" = "ostatnich 3 miesięcy"; "the last 6 months" = "ostatnich 6 miesięcy"; /* type */ "type"="Typ"; "is not" = "nie jest"; "plain file" = "Plik"; "folder" = "Folder"; "tool" = "Narzędzie"; "symbolic link" = "Dowiązanie symboliczne"; "application" = "Aplikacja"; /* contents */ "contents"="Zawartość"; "includes"="zawiera"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Nowa warstwa"; "A layer with this name is already present!" = "Warstwa z tą nazwa już istnieje!"; "You can't remove the last layer!" = "Nie możesz usunąć ostatniej warstwy!"; "Remove layer" = "Usuń warstwę"; "Are you sure that you want to remove this layer?" = "Jesteś pewien, że chcesz usunąć tę warstwę?"; "Rename Layer" = "Zmień nazwę warstwy"; "You can't dock multiple paths!" = "Nie możesz zadokować wielu ścieżek!"; "This object is already present in this layer!" = "Ten obiekt już jest w tej warstwie!"; /* ----------------------- Preference strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "Preferencje GWorkspace"; /* XTermPref.m */ "Terminal" = "Terminal"; "Set" = "Ustaw"; "Use Terminal service" = "Użyj usługi Terminala"; "arguments" = "argumenty"; /* BrowserViewerPref.m */ "Column Width" = "Szerokość kolumn"; "Use Default Settings" = "Użyj domyślnych ustawień"; /* DefaultEditor.m */ "Editor" = "Edytor"; "Default Editor" = "Domyślny edytor"; "No Default Editor" = "Brak domyślnego edytora"; "Choose" = "Wybierz"; /* DefSortOrderPref.m */ "Sorting Order" = "Kolejność sortowania"; "The method will apply to all the folders" = "Ta metoda zostanie zastosowana do wszystkich folderów"; "that have no order specified" = "które nie mają określonej kolejności"; /* HiddenFilesPref.m */ "Hidden Files" = "Ukryte pliki"; "Files" = "Pliki"; "Folders" = "Foldery"; "Activate changes" = "Aktywuj zmiany"; "Load" = "Ładuj"; "Hidden files" = "Ukryte pliki"; "Shown files" = "Pokazane pliki"; "Select and move the files to hide or to show" = "Zaznacz i przenieś pliki do ukrycia lub pokazania"; "Hidden directories" = "Ukryte katalogi"; /* IconsPrefs.m */ "Icons" = "Ikony"; "Thumbnails" = "Miniaturki"; "use thumbnails" = "Użyj miniaturek"; "Title Width" = "Szerokość tytułu"; /* DesktopPref.m */ "Desktop" = "Pulpit"; "Background"="Tło"; "General"="Ogólne"; "Color:" = "Kolor:"; "center" = "Wyśrodkuj"; "fit" = "Dopasuj"; "tile" = "Kafelkuj"; "scale" = "Przeskaluj"; "Use image"="Użyj obrazu"; "Choose"="Wybierz"; "Dock" = "Dock"; "Show Dock"="Pokaż docka"; "Position:"="Pozycja:"; "Style:"="Styl:"; "Left"="Lewo"; "Right"="Prawo"; "Classic"="Klasyczny"; "Modern"="Nowoczesny"; "Omnipresent"="Wszechobecny"; "Autohide Tabbed Shelf"="Automatycznie ukrywaj zakładki"; /* OperationPrefs.m */ "File Operations" = "Operacje na plikach"; "Operation Preferences"="Ustawienia operacji"; "Status Window"="Okno statusu"; "Confirmation"="Potwierdzenie"; "Show status window"="Pokaż okno statusu"; "Check this option to show a status window"="Zaznacz tę opcję by pokazać okno statusu"; "during the file operations"="podczas operacji na plikach"; "Uncheck the buttons to allow automatic confirmation"="Odznacz przyciski by zezwolić na automatyczne potwierdzanie"; "of file operations"="operacji na plikach"; /* HistoryPref.m */ "Number of saved paths"="Liczba zapisanych ścieżek"; /* -------- */ /* OpenWithController */ "Open With" = "Otwórz z"; "Type the name or the path of the application" = "Wpisz nazwę lub ścieżkę aplikacji, której"; "to use to open the current selection" = "chcesz użyć do otwarcia bieżącego zaznaczenia"; /* RunExternalController.m */ "Run" = "Uruchom"; "Type the command to execute:"="Wpisz polecenie do wykonania:"; /* Recycler strings */ "Recycle: " = "Usuń: "; "Recycler: " = "Kosz: "; "Recycler" = "Kosz"; "the Recycler" = "kosz"; "\nto the Recycler" = "\ndo kosza"; "Move from the Recycler " = "Przywróć z kosza "; "In" = "w"; "Empty Recycler" = "Opróżnij kosz"; "Empty the Recycler?" = "Opróżnić kosz?"; "Put Away" = "Odłóż"; gworkspace-1.1.0/GWorkspace/Resources/Portuguese.lproj/0000755000175000001440000000000014753220702022427 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Portuguese.lproj/Localizable.strings0000644000175000001440000002154614753220702026273 0ustar multixusers/* Traduzido a partir do Español, espero que esteja bom */ /* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Informações"; "Info Panel..." = "Painel de Informações..."; "Preferences..." = "Preferências..."; "Help..." = "Ajuda..."; "File" = "Arquivo"; "Open" = "Abrir"; "Open as Folder" = "Abrir Pasta"; "Edit File" = "Editar Arquivo"; "New Folder" = "Nova Pasta"; "New File" = "Novo Arquivo"; "Duplicate" = "Duplicar"; "Destroy" = "Destruir"; "Empty Recycler" = "Esvaziar Lixeira"; "Edit" = "Editar"; "Cut" = "Cortar"; "Copy" = "Copiar"; "Paste" = "Colar"; "Select All" = "Selecionar todo"; "View" = "Visualizar"; "Browser" = "Navegador"; "Icon" = "Ícones"; "Tools" = "Ferramentas"; "Viewer" = "Visualizador"; "Inspectors" = "Inspetores"; "Show Inspectors" = "Mostrar Inspetores"; "Attributes" = "Atributos"; "Contents" = "Conteúdo"; "Tools" = "Ferramentas"; "Permissions" = "Permissões"; "Finder" = "Localizador"; "Processes..." = "Processos..."; "Fiend" = "Fiend"; "Show Fiend" = "Mostrar Fiend"; /* R// O que é Fiend? */ "Hide Fiend" = "Ocultar Fiend"; "Add Layer..." = "Adicionar Camada..." "Remove Current Layer" = "Apagar Camada Atual"; "Rename Current Layer" = "Renomear Camada Atual"; "Layers" = "Camadas"; "DeskTop Shelf" = "DeskTop Shelf"; "XTerm" = "XTerm"; "Windows" = "Janelas"; "Arrange in Front" = "Organizar na Frente"; "Miniaturize Window" = "Miniaturizar Janela"; "Close Window" = "Fechar Janela"; "Services" = "Serviços"; "Hide" = "Ocultar"; "Quit" = "Sair"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Gerenciador de Workspace GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "Veja em https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Publicado sob a Licença Pública GNU 2.0"; "Error" = "Error"; "You have not write permission\nfor" = "Você não possui permissão de escrita\npara"; "Continue" = "Continuar"; /* FileOperation.m */ "OK" = "Aceitar"; "Cancel" = "Cancelar"; "Move" = "Mover"; "Move from: " = "Mover de: "; "\nto: " = "\npara: "; "Copy" = "Copiar"; "Copy from: " = "Copiar de: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Apagar"; "Delete the selected objects?" = "Apagar os objetos selecionados?"; "Duplicate" = "Duplicar"; "Duplicate the selected objects?" = "Duplicar os objetos selecionados?"; "From:" = "De:"; "To:" = "Para:"; "In:" = "Em:"; "Stop" = "Parar"; "Pause" = "Pausar"; "Moving" = "Movendo"; "Copying" = "Copiando"; "Linking" = "Linkando"; "Duplicating" = "Duplicando"; "Destroying" = "Destruindo"; "File Operation Completed" = "Operação com Arquivo Finalizada"; "Backgrounder connection died!" = "Conexão em segundo plano morreu!"; /* R// */ "Some items have the same name;\ndo you want to substitute them?" = "Alguns itens possuem o mesmo \nnome; você deseja substituí-los?"; "Error" = "Erro"; "File Operation Error!" = "Erro na Operação com Arquivos!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Você não tem permissão de escrita\npara "; "The name " = "O nome "; " is already in use!" = " ja está sendo utilizado!"; "Cannot rename " = "Não é possível renomear "; "Invalid char in name" = "Caractere não válido no nome"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Itens"; /* InspectorsWin.m */ "Attributes" = "Atributos"; "Contents" = "Conteúdo"; "Tools" = "Ferramentas"; "Access Control" = "Controle de Acessos"; /* AttributesPanel.m */ "Attributes" = "Atributos"; "Attributes Inspector" = "Inspetor de atributos"; "Path:" = "Caminho:"; "Link To:" = "Linkar a:"; "Size:" = "Tamanho:"; "Owner:" = "Dono:"; "Group:" = "Grupo:"; "Changed" = "Alterado"; "Revert" = "Reverter"; "OK" = "Aceitar"; /* ContentsPanel.m */ "Contents" = "Conteúdo"; "Contents Inspector" = "Inspetor de Conteúdos"; "No Contents Inspector" = "Sem Inspetor de Conteúdos"; "No Contents Inspector\nFor Multiple Selection" = "Não há Inspector de\nConteúdos para\nseleções múltiplas"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "O método de ordenação se\naplica ao contúdo da pasta\nselecionada, NÃO a a sua pasta pai"; "Sort by" = "Ordenar por"; "Name" = "Nome"; "Type" = "Classe"; "Date" = "Data"; "Size" = "Tamanho"; "Owner" = "Dono"; "Folder Inspector" = "Inspetor de Pastas"; /* ImageViewer.m */ "Image Inspector" = "Inspetor de Imagens"; /* AppViewer.m */ "Open these kinds of documents:" = "Abrir este tipo de documento:"; "Invalid Contents" = "Conteúdo inválido"; "App Inspector" = "Inspetor de Aplicações"; /* PermissionsPanel.m */ "UNIX Permissions" = "Permissões UNIX"; "Access Control" = "Controle de acesso"; "Also apply to files inside selection" = "Aplicar aos arquivos da seleção"; /* ToolsPanel.m */ "Tools" = "Ferramentas"; "Tools Inspector" = "Inspetor de Ferramentas"; "No Tools Inspector" = "Sem Inspetor de Ferramentas"; "Set Default" = "Aceitar como Padrão"; /* AppsView.m */ "Double-click to open selected document(s)" = "Duplo clique para abrir os documentos selecionados"; "Default:" = "Padrão:"; "Path:" = "Caminho:"; "Click 'Set Default' to set default application\nfor all documents with this extension" ="Clique em 'Aceitar como Padrão' para selecionar\na aplicação para abrir todos os arquivos\ncom esta extensão"; /* PermsBox.m */ "Permissions" = "Permissões"; "Read" = "Leitura"; "Write" = "Escrita"; "Execute" = "Execução"; "Owner" = "Dono"; "Group" = "Grupo"; "Other" = "Outros"; /* ----------------------- Processes strings --------------------------- *\ /* Processes.m */ "Processes" = "Processos"; "No Background Process" = "Sem processos em segundo plano"; "Kill" = "Matar"; "Path: " = "Caminho: "; "Status: " = "Estado: "; /* ProcsView.m */ "Applications" = "Aplicações"; "Background" = "Segundo Plano"; /* ----------------------- Finder strings --------------------------- *\ /* Finder.m */ "Finder" = "Localizador"; "Find items with names that match" = "Localizar items com o nome contendo"; "Find items with contents that match" = "Localizar item contendo a string"; "No selection!" = "Sem seleção!"; "No arguments!" = "Sem argumentos!"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m - Como traduzir Fiend? */ "New Layer" = "Nova Camada"; "A layer with this name is already present!" = "Já existe uma camada com este nome!"; "You can't remove the last layer!" = "Não é possível remover a última camada!"; "Remove layer" = "Remover camada"; "Are you sure that you want to remove this layer?" = "Tem certeza de que deseja remover esta camada?"; "Rename Layer" = "Renomear camada"; "You can't dock multiple paths!" = "Você não pode anexar múltiplos caminhos!"; "This object is already present in this layer!" = "Este objeto já está nesta camada!" /* ----------------------- Preference strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "Preferências do GWorkspace"; /* BackWinPreferences.m */ /* R// Traduzir shelf */ "DeskTop Shelf" = "DeskTop Shelf"; "DeskTop Color" = "Cor do Desktop"; "red" = "vermelho"; "green" = "verde"; "blue" = "azul"; "Set Color" = "Selecionar cor"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Clique no botão \"Selecionar Imagem\" para \nselecionar seu papel de parede. A imagem de fundo\ndeve ter o mesmo tamanho da tela."; "Set Image" = "Selecionar Imagem"; "Unset Image" = "Remover Imagem"; /* DefaultXTerm.m */ "Set" = "Selecionar"; /* BrowserViewsPreferences.m */ "Column Width" = "Largura das Colunas"; "Use Default Settings" = "Usar o padrão"; "Browser" = "Navegador"; /* FileWatchingPreferences.m */ /* timeout */ "File System Watching" = "Visualizador do Sistema de Arquivos"; "timeout" = "timeout"; "frequency" = "frequência"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "Os valores se aplicam aos\nnovos visualizadores, \npara os já existentes, serão\naplicados após o primeiro timeout" /* ShelfPreferences.m */ "Shelf" = "Shelf"; /* DefaultEditor.m */ "Default Editor" = "Editor Padrão"; "No Default Editor" = "Sem Editor Padrão"; "Choose..." = "Escolha..."; /* IconViewsPreferences.m */ "Title Width" = "Tamano do Título"; "Icon View" = "Visualização dos Ícones"; /* OpenWithController */ "Open With" = "Open With"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; gworkspace-1.1.0/GWorkspace/Resources/Romanian.lproj/0000755000175000001440000000000014753220702022031 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Romanian.lproj/Localizable.strings0000644000175000001440000001400314753220702025663 0ustar multixusers/* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Info"; "Info Panel..." = "Panou Informaþii..."; "Preferences..." = "Preferințe..."; "Help..." = "Ajutor..."; "File" = "Fiºier"; "Open" = "Deschide"; "Open as Folder" = "Deschide ca Dosar"; "Edit File" = "Editeazã Fiºier"; "New Folder" = "Nou Dosar"; "New File" = "Nou Fiºier"; "Duplicate" = "Duplicheazã"; "Destroy" = "Distruge"; "Empty Recycler" = "Goleºte Coºul"; "Edit" = "Editare"; "Cut" = "Taie"; "Copy" = "Copiazã"; "Paste" = "Lipeºte"; "Select All" = "Selecteazã tot"; "View" = "Vezi ca"; "Browser" = "Browser"; "Icon" = "Icoane"; "Tools" = "Instrumente"; "Viewer" = "Viewer"; "Inspectors" = "Inspectoare"; "Show Inspectors" = "Aratã Inspectoarele"; "Attributes" = "Atribuþii"; "Contents" = "Conþinut"; "Tools" = "Instrumente"; "Permissions" = "Permisii"; "Finder" = "Finder"; "Processes..." = "Procese..."; "Fiend" = "Fiend"; "Show Fiend" = "Aratã Fiend-ul"; "Hide Fiend" = "Ascunde Fiend-ul"; "Add Layer..." = "Adaugã un Layer..."; "Remove Current Layer" = "Scoate Layer-ul Curent"; "Rename Current Layer" = "Redenumeºte Layer-ul Curent"; "Layers" = "Layers"; "DeskTop Shelf" = "DeskTop Shelf"; "XTerm" = "XTerm"; "Windows" = "Ferestre"; "Arrange in Front" = "Adu în faþã"; "Miniaturize Window" = "Micºoreazã Fereastra"; "Close Window" = "Închide Fereastra"; "Services" = "Servicii"; "Hide" = "Ascunde"; "Quit" = "Ieºi"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Workspace Manager-ul pentru GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "Vezi https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Publicat sub GNU General Public License 2.0"; "Error" = "Eroare"; "You have not write permission\nfor" = "Nu ai permisie de scriere\npentru"; "Continue" = "Continuã"; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Anuleazã"; "Move" = "Miºca"; "Move from: " = "Miºc de la: "; "\nto: " = "\nla: "; "Copy" = "Copiazã"; "Copy from: " = "Copiez de la: "; "Link" = "Leagã"; "Delete" = "ªterge"; "Delete the selected objects?" = "ªterg obiectele selectate?"; "Duplicate" = "Duplica"; "Duplicate the selected objects?" = "Duplichez obiectele selectate?"; "From:" = "De la:"; "To:" = "La:"; "In:" = "În:"; "Stop" = "Stop"; "Pause" = "Pauzã"; "Moving" = "Miºc"; "Copying" = "Copiez"; "Linking" = "Leg"; "Duplicating" = "Duplichez"; "Destroying" = "ªterg"; "File Operation Completed" = "Operazie Terminatã"; "Backgrounder connection died!" = "Conexiunea cu Backgrounder-ul a cãzut!"; "Some items have the same name;\ndo you want to sobstitute them?" = "Anumite elemente au acelaºi nume;\nvrei sã le înlocuieºti?"; "Error" = "Eroare"; "File Operation Error!" = "Eroare în operaþia pe fiºiere!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "Nu ai permisie de scriere\npentru "; "The name " = "numele "; " is already in use!" = " e deja în uz!"; "Cannot rename " = "Nu pot renumi "; "Invalid char in name" = "Caracter invalid în nume"; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Elemente"; /* InspectorsWin.m */ "Attributes" = "Atribuþii"; "Contents" = "Conþinuturi"; "Tools" = "Instrumente"; "Access Control" = "Control Acces"; /* AttributesPanel.m */ "Attributes" = "Atribuþii"; "Attributes Inspector" = "Inspector Atribuþii"; "Path:" = "Path:"; "Link To:" = "Link la:"; "Size:" = "Dimensiuni:"; "Owner:" = "Proprietar:"; "Group:" = "Grup:"; "Changed" = "Modificat"; "Revert" = "Anuleazã"; "OK" = "OK"; /* ContentsPanel.m */ "Contents" = "Contenuti"; "Contents Inspector" = "Inspector Conþinut"; "No Contents Inspector" = "Nici un inspector"; "No Contents Inspector\nFor Multiple Selection" = "Nici un inspector\npentru o selectare multiplã"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Ordonarea se aplică\nconþinutului dosarului selectat,\nNU directorului care îl conþine"; "Sort by" = "Ordonare"; "Name" = "Nume"; "Type" = "Tip"; "Date" = "Data"; "Size" = "Dimensiuni"; "Owner" = "Propr."; "Folder Inspector" = "Inspector Dosare"; /* ImageViewer.m */ "Image Inspector" = "Inspector Imagini"; /* AppViewer.m */ "Open these kinds of documents:" = "Deschide acest tip de documente:"; "Invalid Contents" = "Conþinut invalid"; "App Inspector" = "Inspector App"; /* PermissionsPanel.m */ "UNIX Permissions" = "Permisii UNIX"; "Access Control" = "Control Acces"; "Also apply to files inside selection" = "Aplică și fișierelor dinãuntrul selectării"; /* ToolsPanel.m */ "Tools" = "Instrumente"; "Tools Inspector" = "Inspector Instrumente"; "No Tools Inspector" = "Nici un inspector"; "Set Default" = "Set Default"; /* AppsView.m */ "Double-click to open selected document(s)" = "Douã-click pentru a deschide documentele selectate"; "Default:" = "Default:"; "Path:" = "Path:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "'Set Default' pentru a seta app-ul default\npentru toate documentele cu aceastã extensie"; /* PermsBox.m */ "Permissions" = "Permisii"; "Read" = "Citeºte"; "Write" = "Scrie"; "Execute" = "Executã"; "Owner" = "Propr."; "Group" = "Grup"; "Other" = "Alþii"; /* OpenWithController */ "Open With" = "Deschis cu" "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Run"; "Type the command to execute:"="Type the command to execute:"; /* Recycler strings */ "Recycle: " = "Coș: "; "Recycler: " = "Coș: "; "Recycler" = "Coș"; "the Recycler" = "Coșul"; "\nto the Recycler" = "\nîn coș"; "Move from the Recycler " = "Mut din coș "; "In" = "În"; "Empty Recycler" = "Golește Coșul"; "Empty the Recycler?" = "Golesc Coșul?"; "Put Away" = "Pune la loc"; gworkspace-1.1.0/GWorkspace/Resources/Spanish.lproj/0000755000175000001440000000000014753220702021672 5ustar multixusersgworkspace-1.1.0/GWorkspace/Resources/Spanish.lproj/Localizable.strings0000644000175000001440000003224314753220702025532 0ustar multixusers/* translations enhanced by: Eduardo Osorio Armenta Andres Morales */ /* ----------------------- menu strings --------------------------- */ /* main.m */ "Info" = "Información"; "Info Panel..." = "Panel de información..."; "Preferences..." = "Preferencias..."; "Help..." = "Ayuda..."; "Activate context help" = "Activar ayuda de contexto"; "File" = "Fichero"; "Open" = "Abrir"; "Open With..." = "Abrir con..."; "Open as Folder" = "Abrir como Carpeta"; "Edit File" = "Editar Fichero"; "New Folder" = "Nueva Carpeta"; "New File" = "Nuevo Fichero"; "Duplicate" = "Duplicar"; "Destroy" = "Destruir"; "Move to Recycler" = "Mover a la Papelera"; "Empty Recycler" = "Vaciar Papelera"; "Edit" = "Editar"; "Cut" = "Cortar"; "Copy" = "Copiar"; "Paste" = "Pegar"; "Select All" = "Seleccionar todo"; "View" = "Ver"; "Browser" = "Navegador"; "Icon" = "Iconos"; "List" = "Lista"; "Show" = "Mostrar"; "Name only" = "Solo nombre"; "Type" = "Tipo"; "Size" = "Tamaño"; "Modification date" = "Fecha de modificación"; "Owner" = "Proprietario"; "Icon Size" = "Tamaño de icono"; "Icon Position" = "Posición del icono"; "Up" = "Arriba"; "Left" = "Izquierda"; "Label Size" = "Tamaño de etiqueta"; "Make thumbnail(s)" = "Crear icono(s)"; "Remove thumbnail(s)" = "Retirar icono(s)"; "Viewer" = "Visor"; "Tools" = "Herramientas"; "Inspectors" = "Inspectores"; "Show Inspectors" = "Mostrar inspectores"; "Attributes" = "Atributos"; "Contents" = "Contenidos"; "Tools" = "Herramientas"; "Annotations" = "Anotaciones"; "Finder" = "Buscador"; "Fiend" = "Duente"; "Show Fiend" = "Mostrar el Duende"; "Hide Fiend" = "Ocultar el Duende"; "Add Layer..." = "Añadir capa..."; "Remove Current Layer" = "Quitar la capa actual"; "Rename Current Layer" = "Renombrar la capa actual"; "Layers" = "Capas"; "Tabbed Shelf" = "Barra de pestañas"; "Show Tabbed Shelf" = "Mostrar Barra de Pestañas"; "Hide Tabbed Shelf" = "Ocultar Barra de Pestañas"; "Remove Current Tab" = "Remover pestaña actual"; "Rename Current Tab" = "Renombrar pestaña actual"; "Add Tab..." = "Añadir pestaña"; "Terminal" = "Terminal"; "Run..." = "Ejecutar..."; "History" = "Historial"; "Show History" = "Mostrar Historial"; "Go backward" = "Ir atrar"; "Go forward" = "Ir adelante"; "Show Desktop" = "Mostrar Escritorio"; "Hide Desktop" = "Ocultar Escritorio"; "Show Recycler" = "Mostrar Papelera"; "Hide Recycler" = "Ocultar Papelera"; "Check for disks" = "Verificar discos"; "Windows" = "Ventanas"; "Arrange in Front" = "Traer al frente"; "Miniaturize Window" = "Miniaturizar Ventana"; "Close Window" = "Cerrar Ventana"; "Services" = "Servicios"; "Hide" = "Ocultar"; "Hide Others" = "Ocultar Otros"; "Show All" = "Mostrar Todo"; "Print..." = "Impresión"; "Quit" = "Salir"; "Logout" = "Cerrar sesión"; /* ----------------------- File Operations strings --------------------------- */ /* GWorkspace.m */ "GNUstep Workspace Manager" = "Gestor de Escritorio de GNUstep"; "See http://www.gnustep.it/enrico/gworkspace" = "Vea https://www.gnustep.org/experience/Gworkspace.html"; "Released under the GNU General Public License 2.0" = "Publicado bajo la Licencia Pública General GNU 2.0"; "Error" = "Error"; "You have not write permission\nfor" = "No tiene permisos de escritura\npara"; "Continue" = "Continuar"; "File Viewer" = "Visor de Ficheros"; "Quit!" = "Salir!"; "Do you really want to quit?" = "¿Realmente desea salir?"; "Yes" = "Si"; "No" = "No"; "Log out" = "Cerrar sesión"; "Are you sure you want to quit\nall applications and log out now?" = "¿Seguro que quieres salir de las \naplicaciones y cerrar la sesión ahora?"; "If you do nothing, the system will log out\nautomatically in " = "Si no hace nada, el sistema cerrara la sesión\nautomáticamente en "; "seconds." = "segundos."; /* FileOperation.m */ "OK" = "Aceptar"; "Cancel" = "Cancelar"; "Move" = "Mover"; "Move from: " = "Mover de: "; "\nto: " = "\na: "; "Copy from: " = "Copiar de: "; "Link" = "Enlazar"; "Link " = "Enlazar "; "Delete" = "Borrar"; "Delete the selected objects?" = "¿Borrar los objetos seleccionados?"; "Duplicate" = "Duplicar"; "Duplicate the selected objects?" = "¿Duplicar los objetos seleccionados?"; "From:" = "De:"; "To:" = "A:"; "In:" = "En:"; "Stop" = "Parar"; "Pause" = "Pausar"; "Moving" = "Moviendo"; "Copying" = "Copiando"; "Linking" = "Enlazando"; "Duplicating" = "Duplicando"; "Destroying" = "Destruyendo"; "File Operation Completed" = "Operación de fichero completada"; "Backgrounder connection died!" = "La conexión con Backgrounder se ha perdido"; "Some items have the same name;\ndo you want to substitute them?" = "Algunos elementos tienen el mismo nombre;\n¿Quiere sustituirlos?"; "File Operation Error!" = "¡Error en la operación de ficheros!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "No tiene permisos de escritura\npara "; "The name " = "¡El nombre "; " is already in use!" = " ya está en uso!"; "Cannot rename " = "No se puede renombrar "; "Invalid char in name" = "Carácter no válido en el nombre"; /* ----------------------------- Viewers Strings ----------------------------- */ /* GWViewer.m */ "free" = "libre"; /* GWViewersManager.m */ "Are you sure you want to open" = "¿Seguro que desea abrir"; "items?" = "elementos?"; "error" = "error"; "Can't open " = "No se puede abrir "; /* ----------------------- Inspectors strings --------------------------- */ "Items" = "Elementos"; /* Attributes.m */ "Attributes Inspector" = "Inspector de Atributos"; "Path:" = "Ruta:"; "Link To:" = "Enlazar a:"; "Size:" = "Tamaño:"; "Calculate" = "Calcular"; "Owner:" = "Propietario:"; "Group:" = "Grupo:"; "Changed" = "Cambiado"; "Revert" = "Revertir"; "also apply to files inside selection" = "Aplicar a las subcarpetas"; "Permissions" = "Permisos"; "Read" = "Leer"; "Write" = "Escribir"; "Execute" = "Ejecutar"; "Owner_short" = "Propietario"; "Group" = "Grupo"; "Other" = "Otro"; /* ContentsPanel.m */ "Contents Inspector" = "Inspector de contenidos"; "No Contents Inspector" = "Sin inspector de contenidos"; "No Contents Inspector\nFor Multiple Selection" = "No hay Inspector de\ncontenidos para\nSelección Múltiple"; "No Contents Inspectors found!" = "Sin inspector de contenidos encontrados!"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "El método de ordenación se\naplica al contenido de la\ncarpeta seleccionada, NO\na la carpeta superior"; "Sort by" = "Ordenar por"; "Name" = "Nombre"; "Date" = "Fecha"; "Folder Inspector" = "Inspector de Carpetas"; /* ImageViewer.m */ "Image Inspector" = "Inspector de imágenes"; /* AppViewer.m */ "Open these kinds of documents:" = "Abrir este tipo de documentos:"; "Invalid Contents" = "Contenido no válido"; "App Inspector" = "Inspector de aplicaciones"; /* Tools.m */ "Tools Inspector" = "Inspector de herramientas"; "No Tools Inspector" = "Sin Inspector de herramientas"; "Set Default" = "Definir por defecto"; /* Me gusta mas que Poner por omision */ /* ----------------------- Finder strings --------------------------- */ /* Finder.m */ "No selection!" = "¡Ninguna selección!"; "Search in:" = "Buscar en:"; "Current selection" = "Selección actual"; "Add" = "Añadir"; "Remove" = "Eliminar"; "Search for items whose:" = "Buscar items con:"; "Specific places" = "Lugares específicos"; "Recursive" = "Recursivo"; "Search" = "Buscar"; /* names */ "contains" = "contiene"; "is" = "es"; "contains not" = "no contiene"; "starts with" = "comienza con"; "ends with" = "termina con"; "name" = "nombre"; /* size */ "size" = "Tamaño"; "greater than" = "mayor que"; "less than" = "menos que"; /* annotations */ "annotations" = "anotaciones"; "contains one of" = "contiene uno de"; "contains all of" = "contiene todos de"; "with exactly" = "con exactamente"; "without one of" = "sin uno de"; /* owner */ "owner" = "Propierario"; /* date */ "date created" = "fecha de creación"; "date modified" = "fecha de modificación"; "is today" = "es hoy"; "is within" = "está dentro"; "is before" = "está antes"; "is after" = "está después"; "is exactly" = "es exactamente"; "the last day" = "el útlimo día"; "the last 2 days" = "los últimos 2 días"; "the last 3 days" = "los últimos 3 días"; "the last week" = "la última semana"; "the last 2 weeks" = "las últimas 2 semanas"; "the last 3 weeks" = "las últimas 3 semanas"; "the last month" = "el último mes"; "the last 2 months" = "los últimos 2 meses"; "the last 3 months" = "los últimos 3 meses"; "the last 6 months" = "los últimos 6 meses"; /* type */ "type" = "tipo"; "is not" = "no es"; "plain file" = "archivo plano"; "folder" = "carpeta"; "tool" = "herramienta"; "symbolic link" = "enlace simbólico"; "application" = "aplicación"; /* contents */ "contents" = "contenido"; "includes" = "que incluya"; /* ----------------------- Fiend strings --------------------------- */ /* Fiend.m */ "New Layer" = "Nueva Capa"; "A layer with this name is already present!" = "¡Ya hay una capa con ese nombre!"; "You can't remove the last layer!" = "¡No puede borrar la última capa!"; "Remove layer" = "Quitar capa"; "Are you sure that you want to remove this layer?" = "¿Estás seguro de querer quitar esta capa?"; "Rename Layer" = "Renombrar capa"; "You can't dock multiple paths!" = "¡No puede aparcar rutas múltiples!"; "This object is already present in this layer!" = "¡Este objeto ya está en esta capa!"; /* ----------------------- Preference strings --------------------------- */ /* PreferencesWin.m */ "GWorkspace Preferences" = "Preferencias de GWorkspace"; /* XTermPref.m */ "Terminal" = "Terminal"; "Set" = "Aplicar"; "Use Terminal service" = "Usar Terminal de servicios"; "arguments" = "argumentos"; /* BrowserViewerPref.m */ "Column Width" = "Anchura de columnas"; "Use Default Settings" = "Usar ajustes predeterminados"; /* DefaultEditor.m */ "Editor" = "Editor"; "Default Editor" = "Editor predeterminado"; "No Default Editor" = "No Default Editor"; "Choose" = "Elija"; /* DefSortOrderPref.m */ "Sorting Order" = "Orden de clasificación"; "The method will apply to all the folders" = "El método se aplicará a todas las carpetas"; "that have no order specified" = "no tiene orden específico"; /* HiddenFilesPref.m */ "Hidden Files" = "Archivos ocultos"; "Files" = "Archivos"; "Folders" = "Carpetas"; "Activate changes" = "Activar cambios"; "Load" = "Cargar"; "Hidden files" = "Archivos ocultos"; "Shown files" = "Archivos visibles"; "Select and move the files to hide or to show" = "Seleccionar y mover los archivos para ocultar o mostrar"; "Hidden directories" = "Directorios ocultos"; /* IconsPrefs.m */ "Icons" = "Iconos"; "Thumbnails" = "Miniaturas"; "use thumbnails" = "Usar miniaturas"; "Title Width" = "Anchura del título"; /* DesktopPref.m */ "Desktop" = "Escritorio"; "Background"="Fondo"; "General"="General"; "Color:" = "Color:"; "center" = "Centrar"; "fit" = "ajuste"; "tile" = "teja"; "scale" = "escala"; "Use image"="Usar imagen"; "Dock" = "Dock"; "Show Dock"="Mostrar el Dock"; "Position:"="Posición:"; "Style:"="Estilo:"; "Left"="Izquierda"; "Right"="Derecha"; "Classic"="Clásico"; "Modern"="Moderno"; "Omnipresent"="Omnipresente"; "Autohide Tabbed Shelf"="Auto-esconder Pestañas"; /* OperationPrefs.m */ "File Operations" = "Operaciones de fichero"; "Operation Preferences" = "Preferencias de operaciones"; "Status Window" = "Ventana de estatus"; "Confirmation" = "Confirmación"; "Show status window" = "Mostrar ventana de estatus"; "Check this option to show a status window"="Marcar esta opción para mostra la ventana de estatus"; "during the file operations" = "durante la operación de archivos"; "Uncheck the buttons to allow automatic confirmation"="Desmarcar los botones para permitir confirmación automática"; "of file operations" = "the operaciones de archivo"; /* HistoryPref.m */ "Number of saved paths" = "Número de rutas guardadas"; /* -------- */ /* OpenWithController */ "Open With" = "Abrir con"; "Type the name or the path of the application" = "Type the name or the path of the application"; "to use to open the current selection" = "to use to open the current selection"; /* RunExternalController.m */ "Run" = "Ejecutar"; "Type the command to execute:" = "Escribe el comando a ejecutar"; /* Recycler strings */ "Recycle: " = "Enviar a la papelera: "; "Recycler: " = "Papelera: "; "Recycler" = "Papelera"; "the Recycler" = "la Papelera"; "\nto the Recycler" = "\na la Papelera"; "Move from the Recycler " = "Mover de la Papelera "; "In" = "En"; "Empty Recycler" = "Vaciar papelera"; "Empty the Recycler?" = "¿Vaciar la Papelera?"; "Put Away" = "Tirar"; gworkspace-1.1.0/GWorkspace/TShelf/0000755000175000001440000000000014751214620016353 5ustar multixusersgworkspace-1.1.0/GWorkspace/TShelf/TShelfFileIcon.h0000644000175000001440000000332514751213523021326 0ustar multixusers/* TShelfIcon.h * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: November 2021 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TSHELF_FILEICON_H #define TSHELF_FILEICON_H #import "TShelfIcon.h" @class FSNode; @class FSNodeRep; @class GWorkspace; @interface TShelfFileIcon : TShelfIcon { NSMutableArray *paths; NSString *hostname; FSNode *node; BOOL singlepath; BOOL isRootIcon; FSNodeRep *fsnodeRep; NSFileManager *fm; GWorkspace *gw; BOOL forceCopy; } - (id)initForPaths:(NSArray *)fpaths inIconsView:(TShelfIconsView *)aview; - (id)initForPaths:(NSArray *)fpaths atPosition:(NSPoint)pos inIconsView:(TShelfIconsView *)aview; - (id)initForPaths:(NSArray *)fpaths gridIndex:(NSUInteger)index inIconsView:(TShelfIconsView *)aview; - (void)setPaths:(NSArray *)fpaths; - (NSArray *)paths; - (BOOL)isSinglePath; @end #endif // TSHELF_FILEICON_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfFileIcon.m0000644000175000001440000004037414751213523021340 0ustar multixusers/* TShelfFileIcon.m * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: November 2021 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNFunctions.h" #import "GWFunctions.h" #import "FSNodeRep.h" #import "TShelfFileIcon.h" #import "TShelfIconsView.h" #import "GWorkspace.h" @implementation TShelfFileIcon - (void)dealloc { RELEASE (paths); RELEASE (hostname); RELEASE (node); [super dealloc]; } - (id)initForPaths:(NSArray *)fpaths inIconsView:(TShelfIconsView *)aview { self = [super init]; if (self) { NSFont *font; NSRect hlightRect; NSUInteger count; fsnodeRep = [FSNodeRep sharedInstance]; fm = [NSFileManager defaultManager]; gw = [GWorkspace gworkspace]; paths = [NSMutableArray new]; [paths addObjectsFromArray: fpaths]; tview = aview; labelWidth = [tview cellsWidth] - 4; font = [NSFont systemFontOfSize: 12]; count = [paths count]; if (count == 1) { singlepath = YES; ASSIGN (node, [FSNode nodeWithPath: [paths objectAtIndex: 0]]); if ([[node path] isEqual: path_separator()]) { ASSIGN (name, [node path]); isRootIcon = YES; } else { ASSIGN (name, [node name]); isRootIcon = NO; } } else { node = nil; singlepath = NO; isRootIcon = NO; name = [[NSString alloc] initWithFormat: @"%lu items", (unsigned long)count]; } if (singlepath) ASSIGN (icon, [fsnodeRep iconOfSize: ICON_SIZE forNode: node]); else ASSIGN (icon, [fsnodeRep multipleSelectionIconOfSize: ICON_SIZE]); hlightRect = NSZeroRect; hlightRect.size.width = (float)ICON_SIZE / 3 * 4; hlightRect.size.height = hlightRect.size.width * [fsnodeRep highlightHeightFactor]; if ((hlightRect.size.height - ICON_SIZE) < 4) { hlightRect.size.height = ICON_SIZE + 4; } hlightRect = NSIntegralRect(hlightRect); ASSIGN (highlightPath, [fsnodeRep highlightPathOfSize: hlightRect.size]); if (isRootIcon) { NSHost *host = [NSHost currentHost]; NSString *hname = [host name]; NSRange range = [hname rangeOfString: @"."]; if (range.length != 0) { hname = [hname substringToIndex: range.location]; } ASSIGN (hostname, hname); } else { hostname = nil; } namelabel = [NSTextField new]; [namelabel setFont: font]; [namelabel setBezeled: NO]; [namelabel setEditable: NO]; [namelabel setSelectable: NO]; [namelabel setAlignment: NSCenterTextAlignment]; [namelabel setDrawsBackground: NO]; [namelabel setTextColor: [NSColor controlTextColor]]; [self setLabelWidth]; [self setFrame: NSMakeRect(0, 0, 64, 52)]; [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, @"GWLSFolderPboardType", @"GWRemoteFilenamesPboardType", nil]]; gridIndex = NSNotFound; isDragTarget = NO; onSelf = NO; trectTag = -1; minimumLaunchClicks = 2; } return self; } - (id)initForPaths:(NSArray *)fpaths atPosition:(NSPoint)pos inIconsView:(TShelfIconsView *)aview { self = [self initForPaths: fpaths inIconsView: aview]; if (self) { position = NSMakePoint(pos.x, pos.y); } return self; } - (id)initForPaths:(NSArray *)fpaths gridIndex:(NSUInteger)index inIconsView:(TShelfIconsView *)aview { self = [self initForPaths: fpaths inIconsView: aview]; if (self) { gridIndex = index; } return self; } - (void)setPaths:(NSArray *)fpaths { NSUInteger count; RELEASE (paths); RELEASE (node); paths = [[NSMutableArray alloc] initWithCapacity: 1]; [paths addObjectsFromArray: fpaths]; count = [paths count]; if (count == 1) { singlepath = YES; ASSIGN (node, [FSNode nodeWithPath: [paths objectAtIndex: 0]]); if ([[node path] isEqual: path_separator()]) { ASSIGN (name, [node path]); isRootIcon = YES; } else { ASSIGN (name, [node name]); isRootIcon = NO; } } else { node = nil; singlepath = NO; isRootIcon = NO; name = [[NSString alloc] initWithFormat: @"%lu items", (unsigned long)count]; } if (singlepath) { ASSIGN (icon, [fsnodeRep iconOfSize: ICON_SIZE forNode: node]); } else { ASSIGN (icon, [fsnodeRep multipleSelectionIconOfSize: ICON_SIZE]); } if (isRootIcon) { NSHost *host = [NSHost currentHost]; NSString *hname = [host name]; NSRange range = [hname rangeOfString: @"."]; if (range.length != 0) hname = [hname substringToIndex: range.location]; ASSIGN (hostname, hname); } else { RELEASE (hostname); hostname = nil; } [self setLabelWidth]; [tview setLabelRectOfIcon: self]; } - (NSString *)shownName { return (isRootIcon ? hostname : name); } - (NSArray *)paths { return paths; } - (BOOL)isSinglePath { return singlepath; } - (void)renewIcon { if (singlepath) ASSIGN (icon, [fsnodeRep iconOfSize: ICON_SIZE forNode: node]); else ASSIGN (icon, [fsnodeRep multipleSelectionIconOfSize: ICON_SIZE]); [self setNeedsDisplay: YES]; } // maybe this can improved with shared super-class code - (void)setLabelWidth { NSFont *font = [NSFont systemFontOfSize: 12]; NSRect rect = [namelabel frame]; NSString *nstr = isRootIcon ? hostname : name; labelWidth = [tview cellsWidth] - 8; if (isSelected) { [namelabel setFrame: NSMakeRect(0, 0, [font widthOfString: nstr] + 8, 14)]; [namelabel setStringValue: nstr]; } else { int width = (int)[[namelabel font] widthOfString: nstr] + 8; if (width > labelWidth) { width = labelWidth; } [namelabel setFrame: NSMakeRect(0, 0, width, 14)]; [namelabel setStringValue: cutFileLabelText(nstr, namelabel, width - 8)]; } [(NSView *)tview setNeedsDisplayInRect: rect]; } - (void)mouseUp:(NSEvent *)theEvent { if ([theEvent clickCount] >= minimumLaunchClicks) { if (locked == NO) [tview openCurrentSelection: paths]; [self unselect]; } } - (void)mouseDown:(NSEvent *)theEvent { unsigned eventmask = NSAlternateKeyMask | NSCommandKeyMask | NSControlKeyMask; CHECK_LOCK; if ([theEvent clickCount] == 1) { NSEvent *nextEvent; NSPoint location; NSSize offset; BOOL startdnd = NO; if (isSelected == NO) { [self select]; } location = [theEvent locationInWindow]; while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { if ([theEvent modifierFlags] & eventmask) { [tview setCurrentSelection: paths]; } // post again, or mouse-up gets eaten [[self window] postEvent: nextEvent atStart: YES]; [self unselect]; break; } else if ([nextEvent type] == NSLeftMouseDragged) { if (dragDelay < 5) { dragDelay++; } else { NSPoint p = [nextEvent locationInWindow]; offset = NSMakeSize(p.x - location.x, p.y - location.y); startdnd = YES; break; } } } if (startdnd) { [tview setFocusedIcon: nil]; [self startExternalDragOnEvent: theEvent withMouseOffset: offset]; } } } @end @implementation TShelfFileIcon (DraggingSource) - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb { NSArray *dndtypes = [NSArray arrayWithObject: NSFilenamesPboardType]; [pb declareTypes: dndtypes owner: nil]; [pb setPropertyList: paths forType: NSFilenamesPboardType]; } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } @end @implementation TShelfFileIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *fromPath; NSString *buff; unsigned i, count; CHECK_LOCK_RET (NSDragOperationNone); isDragTarget = NO; pb = [sender draggingPasteboard]; sourcePaths = nil; if ([[pb types] containsObject: NSFilenamesPboardType]) { sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; } else if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { if ([node isApplication] == NO) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { if ([node isApplication] == NO) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; NSDictionary *pbDict = [NSUnarchiver unarchiveObjectWithData: pbData]; sourcePaths = [pbDict objectForKey: @"paths"]; } } if (sourcePaths == nil) return NSDragOperationNone; if ([paths isEqualToArray: sourcePaths]) { onSelf = YES; isDragTarget = YES; return NSDragOperationEvery; } if (node == nil) return NSDragOperationNone; if ((([node isDirectory] == NO) && ([node isMountPoint] == NO)) || ([node isPackage] && ([node isApplication] == NO))) { return NSDragOperationNone; } count = [sourcePaths count]; fromPath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if (count == 0) return NSDragOperationNone; if (([node isWritable] == NO) && ([node isApplication] == NO)) return NSDragOperationNone; if ([[node path] isEqual: fromPath]) return NSDragOperationNone; if ([sourcePaths containsObject: [node path]]) return NSDragOperationNone; buff = [NSString stringWithString: [node path]]; while (![buff isEqual: path_separator()]) { for (i = 0; i < count; i++) { if ([buff isEqual: [sourcePaths objectAtIndex: i]]) return NSDragOperationNone; } buff = [buff stringByDeletingLastPathComponent]; } if ([node isDirectory] && [node isParentOfPath: fromPath]) { NSArray *subNodes = [node subNodes]; for (i = 0; i < [subNodes count]; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isDirectory]) { int j; for (j = 0; j < count; j++) { NSString *fname = [[sourcePaths objectAtIndex: j] lastPathComponent]; if ([[nd name] isEqual: fname]) { return NSDragOperationNone; } } } } } if ([node isApplication]) { for (i = 0; i < count; i++) { CREATE_AUTORELEASE_POOL(arp); FSNode *nd = [FSNode nodeWithPath: [sourcePaths objectAtIndex: i]]; if (([nd isPlain] == NO) && ([nd isPackage] == NO)) { RELEASE (arp); return NSDragOperationNone; } RELEASE (arp); } } isDragTarget = YES; forceCopy = NO; ASSIGN (icon, [fsnodeRep openFolderIconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask == NSDragOperationCopy) { return ([node isApplication] ? NSDragOperationMove : NSDragOperationCopy); } else if (sourceDragMask == NSDragOperationLink) { return ([node isApplication] ? NSDragOperationMove : NSDragOperationLink); } else { if ([[NSFileManager defaultManager] isWritableFileAtPath: fromPath] || [node isApplication]) { return NSDragOperationEvery; } else if ([node isApplication] == NO) { forceCopy = YES; return NSDragOperationCopy; } } return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask; if (node == nil) return NSDragOperationNone; if ((isDragTarget == NO) || locked || ([node isPackage] && ([node isApplication] == NO))) { return NSDragOperationNone; } sourceDragMask = [sender draggingSourceOperationMask]; if (sourceDragMask == NSDragOperationCopy) { return ([node isApplication] ? NSDragOperationMove : NSDragOperationCopy); } else if (sourceDragMask == NSDragOperationLink) { return ([node isApplication] ? NSDragOperationMove : NSDragOperationLink); } else { return forceCopy ? NSDragOperationCopy : NSDragOperationEvery; } return NSDragOperationNone; } - (void)draggingExited:(id )sender { if (isDragTarget) { isDragTarget = NO; if (onSelf == NO) { if (node) { ASSIGN (icon, [fsnodeRep iconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; } } onSelf = NO; } } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb; NSDragOperation sourceDragMask; NSArray *sourcePaths; NSString *operation, *source; NSMutableArray *files; NSMutableDictionary *opDict; NSUInteger i; isDragTarget = NO; if (onSelf) { onSelf = NO; return; } if (node) { ASSIGN (icon, [fsnodeRep iconOfSize: ICON_SIZE forNode: node]); [self setNeedsDisplay: YES]; } sourceDragMask = [sender draggingSourceOperationMask]; pb = [sender draggingPasteboard]; if ([node isApplication] == NO) { if ([[pb types] containsObject: @"GWRemoteFilenamesPboardType"]) { NSData *pbData = [pb dataForType: @"GWRemoteFilenamesPboardType"]; [gw concludeRemoteFilesDragOperation: pbData atLocalPath: [node path]]; return; } else if ([[pb types] containsObject: @"GWLSFolderPboardType"]) { NSData *pbData = [pb dataForType: @"GWLSFolderPboardType"]; [gw lsfolderDragOperation: pbData concludedAtPath: [node path]]; return; } } sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([node isApplication] == NO) { source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([source isEqual: [gw trashPath]]) { operation = @"GWorkspaceRecycleOutOperation"; } else { if (sourceDragMask == NSDragOperationCopy) { operation = NSWorkspaceCopyOperation; } else if (sourceDragMask == NSDragOperationLink) { operation = NSWorkspaceLinkOperation; } else { if ([fm isWritableFileAtPath: source]) { operation = NSWorkspaceMoveOperation; } else { operation = NSWorkspaceCopyOperation; } } } files = [NSMutableArray arrayWithCapacity: 1]; for (i = 0; i < [sourcePaths count]; i++) [files addObject: [[sourcePaths objectAtIndex: i] lastPathComponent]]; opDict = [NSMutableDictionary dictionaryWithCapacity: 4]; [opDict setObject: operation forKey: @"operation"]; [opDict setObject: source forKey: @"source"]; [opDict setObject: [node path] forKey: @"destination"]; [opDict setObject: files forKey: @"files"]; [gw performFileOperation: opDict]; } else { for (i = 0; i < [sourcePaths count]; i++) { NSString *path = [sourcePaths objectAtIndex: i]; NS_DURING { [[NSWorkspace sharedWorkspace] openFile: path withApplication: [node name]]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [node name]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } } @end gworkspace-1.1.0/GWorkspace/TShelf/TShelfIcon.h0000644000175000001440000000617614751213523020535 0ustar multixusers/* TShelfIcon.h * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TSHELF_ICON_H #define TSHELF_ICON_H #import #import #import #define ICON_SIZE 48 #define CHECK_LOCK if (locked) return #define CHECK_LOCK_RET(x) if (locked) return x #define ONICON(p, s1, s2) ([self mouse: (p) \ inRect: NSMakeRect(((int)(s1).width - (int)(s2).width) >> 1,\ ((int)(s1).height - (int)(s2).height) >> 1, 48, 48)]) @class NSEvent; @class NSPasteboard; @class NSTextField; @class NSImage; @class NSBezierPath; @class TShelfIconsView; @interface TShelfIcon : NSView { NSString *name; BOOL isSelected; BOOL locked; NSImage *icon; NSTextField *namelabel; NSBezierPath *highlightPath; NSPoint position; NSUInteger gridIndex; int labelWidth; NSTrackingRectTag trectTag; TShelfIconsView *tview; int dragDelay; BOOL isDragTarget; BOOL onSelf; int minimumLaunchClicks; } - (void)select; - (void)unselect; - (NSImage *)icon; - (void)renewIcon; - (void)setLabelWidth; - (void)setPosition:(NSPoint)pos; - (void)setPosition:(NSPoint)pos gridIndex:(NSUInteger)index; - (NSPoint)position; - (void)setGridIndex:(NSUInteger)index; - (NSUInteger)gridIndex; - (NSTextField *)myLabel; - (NSString *)shownName; - (BOOL)isSelected; - (void)setLocked:(BOOL)value; - (BOOL)isLocked; - (NSComparisonResult)iconCompare:(id)other; - (void)setSingleClickLaunch:(BOOL)value; @end @interface TShelfIcon (DraggingSource) - (void)startExternalDragOnEvent:(NSEvent *)event withMouseOffset:(NSSize)offset; - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag; @end @interface TShelfIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // TSHELF_ICON_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfIcon.m0000644000175000001440000002012414751213523020527 0ustar multixusers/* TShelfIcon.m * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNFunctions.h" #import "GWFunctions.h" #import "TShelfIcon.h" #import "TShelfIconsView.h" @implementation TShelfIcon - (void)dealloc { if (trectTag != -1) { [self removeTrackingRect: trectTag]; } RELEASE (name); RELEASE (namelabel); RELEASE (icon); RELEASE (highlightPath); [super dealloc]; } - (id)init { self = [super init]; if (self) { isSelected = NO; locked = NO; position = NSMakePoint(0, 0); gridIndex = NSNotFound; dragDelay = 0; isDragTarget = NO; onSelf = NO; trectTag = -1; minimumLaunchClicks = 2; } return self; } - (void)setPosition:(NSPoint)pos { position = NSMakePoint(pos.x, pos.y); } - (void)setPosition:(NSPoint)pos gridIndex:(NSUInteger)index { position = NSMakePoint(pos.x, pos.y); gridIndex = index; } - (NSPoint)position { return position; } - (void)setGridIndex:(NSUInteger)index { gridIndex = index; } - (NSUInteger)gridIndex { return gridIndex; } - (void)select { isSelected = YES; if (locked == NO) { [namelabel setTextColor: [NSColor controlTextColor]]; } [self setNeedsDisplay: YES]; } - (void)unselect { isSelected = NO; if (locked == NO) { [namelabel setTextColor: [NSColor controlTextColor]]; } [self setNeedsDisplay: YES]; } - (NSImage *)icon { return icon; } - (void)renewIcon { // } - (void)setLabelWidth { NSFont *font = [NSFont systemFontOfSize: 12]; NSRect rect = [namelabel frame]; NSString *nstr = name; labelWidth = [tview cellsWidth] - 8; if (isSelected) { [namelabel setFrame: NSMakeRect(0, 0, [font widthOfString: nstr] + 8, 14)]; [namelabel setStringValue: nstr]; } else { int width = (int)[[namelabel font] widthOfString: nstr] + 8; if (width > labelWidth) { width = labelWidth; } [namelabel setFrame: NSMakeRect(0, 0, width, 14)]; [namelabel setStringValue: cutFileLabelText(nstr, namelabel, width - 8)]; } [(NSView *)tview setNeedsDisplayInRect: rect]; } - (NSTextField *)myLabel { return namelabel; } - (NSString *)shownName { return name; } - (BOOL)isSelected { return isSelected; } - (void)setLocked:(BOOL)value { if (locked == value) { return; } locked = value; [namelabel setTextColor: (locked ? [NSColor disabledControlTextColor] : [NSColor controlTextColor])]; [self setNeedsDisplay: YES]; [namelabel setNeedsDisplay: YES]; } - (BOOL)isLocked { return locked; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (void)mouseUp:(NSEvent *)theEvent { // } - (void)mouseDown:(NSEvent *)theEvent { CHECK_LOCK; if ([theEvent clickCount] == 1) { NSEvent *nextEvent; NSPoint location; NSSize offset; BOOL startdnd = NO; if (isSelected == NO) { [self select]; } location = [theEvent locationInWindow]; while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { // post again, or mouse-up gets eaten [[self window] postEvent: nextEvent atStart: YES]; [self unselect]; break; } else if ([nextEvent type] == NSLeftMouseDragged) { if (dragDelay < 5) { dragDelay++; } else { NSPoint p = [nextEvent locationInWindow]; offset = NSMakeSize(p.x - location.x, p.y - location.y); startdnd = YES; break; } } } if (startdnd) { [tview setFocusedIcon: nil]; [self startExternalDragOnEvent: theEvent withMouseOffset: offset]; } } } - (void)mouseEntered:(NSEvent *)theEvent { [tview setFocusedIcon: self]; } - (void)mouseExited:(NSEvent *)theEvent { [tview setFocusedIcon: nil]; } - (void)setFrame:(NSRect)rect { NSSize s = [icon size]; NSPoint ip = NSMakePoint((rect.size.width - s.width) / 2, (rect.size.height - s.height) / 2); NSRect ir = NSMakeRect(ip.x, ip.y, s.width, s.height); [super setFrame: rect]; if (trectTag != -1) { [self removeTrackingRect: trectTag]; } trectTag = [self addTrackingRect: ir owner: self userData: nil assumeInside: NO]; } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { return [super menuForEvent: theEvent]; } - (void)drawRect:(NSRect)rect { NSPoint p; NSSize s; NSSize boundsSize; if(isSelected) { [[NSColor selectedControlColor] set]; [highlightPath fill]; } s = [icon size]; boundsSize = [self bounds].size; p = NSMakePoint((boundsSize.width - s.width) / 2, (boundsSize.height - s.height) / 2); p = [self centerScanRect: NSMakeRect(p.x, p.y, 0, 0)].origin; if (locked == NO) { [icon compositeToPoint: p operation: NSCompositeSourceOver]; } else { [icon dissolveToPoint: p fraction: 0.3]; } } - (NSComparisonResult)iconCompare:(id)other { if ([other gridIndex] == [self gridIndex]) return NSOrderedSame; if ([other gridIndex] == NSNotFound) return NSOrderedAscending; if ([self gridIndex] == NSNotFound) return NSOrderedDescending; if ([other gridIndex] > [self gridIndex]) return NSOrderedAscending; return NSOrderedDescending; } - (void)setSingleClickLaunch:(BOOL)value { minimumLaunchClicks = (value == YES) ? 1 : 2; } @end @implementation TShelfIcon (DraggingSource) - (void)startExternalDragOnEvent:(NSEvent *)event withMouseOffset:(NSSize)offset { NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard]; NSPoint dragPoint; [self declareAndSetShapeOnPasteboard: pb]; ICONCENTER (self, icon, dragPoint); [self dragImage: icon at: dragPoint offset: offset event: event pasteboard: pb source: self slideBack: NO]; } - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb { } - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint deposited:(BOOL)flag { if (flag == NO) { NSRect r1 = [self frame]; NSRect r2 = [namelabel frame]; r1.origin.x = r1.origin.y = r2.origin.x = r2.origin.y = 0; aPoint = [[self window] convertScreenToBase: aPoint]; aPoint = [self convertPoint: aPoint fromView: nil]; if (NSPointInRect(aPoint, r1) || NSPointInRect(aPoint, r2)) { dragDelay = 0; onSelf = NO; [self unselect]; return; } [tview removeIcon: self]; } else { dragDelay = 0; onSelf = NO; [self unselect]; } } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } @end @implementation TShelfIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { return NSDragOperationNone; } - (void)draggingExited:(id )sender { // } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { } @end gworkspace-1.1.0/GWorkspace/TShelf/TShelfIconsView.h0000644000175000001440000001027014751213523021541 0ustar multixusers/* TShelfIconsView.h * * Copyright (C) 2003-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TSHELF_ICONS_VIEW_H #define TSHELF_ICONS_VIEW_H #import #define MAXSHELFHEIGHT 100 #ifndef max #define max(a,b) ((a) > (b) ? (a):(b)) #endif #ifndef min #define min(a,b) ((a) < (b) ? (a):(b)) #endif #ifndef FILES_TAB #define FILES_TAB 0 #define DATA_TAB 1 #endif typedef struct { float x; float y; NSUInteger index; int used; } gridpoint; typedef gridpoint *(*GridPointIMP)(id, SEL, NSPoint); @class NSString; @class NSArray; @class NSMutableArray; @class NSNotification; @class NSImage; @class NSTextField; @class NSMenu; @class TShelfIcon; @class TShelfPBIcon; @class NSFileManager; @class GWorkspace; @interface TShelfIconsView : NSView { BOOL isLastView; NSMutableArray *icons; int iconsType; NSCountedSet *watchedPaths; int cellsWidth; gridpoint *gpoints; NSUInteger pcount; id focusedIcon; NSTextField *focusedIconLabel; BOOL isDragTarget; NSImage *dragImage; NSPoint dragPoint; NSRect dragRect; SEL makePosSel; IMP makePos; SEL gridPointSel; GridPointIMP gridPoint; NSFileManager *fm; GWorkspace *gw; } - (id)initWithIconsDescription:(NSArray *)idescr iconsType:(int)itype lastView:(BOOL)last; - (NSArray *)iconsDescription; - (void)addIconWithPaths:(NSArray *)iconpaths withGridIndex:(NSUInteger)index; - (TShelfPBIcon *)addPBIconForDataAtPath:(NSString *)dpath dataType:(NSString *)dtype withGridIndex:(NSUInteger)index; - (void)removeIcon:(id)anIcon; - (void)removePBIconsWithData:(NSData *)data ofType:(NSString *)type; - (void)setLabelRectOfIcon:(id)anIcon; - (BOOL)hasSelectedIcon; - (void)unselectOtherIcons:(id)anIcon; - (void)setFocusedIcon:(id)anIcon; - (void)updateFocusedIconLabel; - (void)sortIcons; - (NSArray *)icons; - (int)iconsType; - (void)updateIcons; - (id)selectedIcon; - (void)setCurrentSelection:(NSArray *)paths; - (void)openCurrentSelection:(NSArray *)paths; - (void)checkIconsAfterDotsFilesChange; - (void)checkIconsAfterHidingOfPaths:(NSArray *)hpaths; - (void)fileSystemWillChange:(NSNotification *)notification; - (void)fileSystemDidChange:(NSNotification *)notification; - (void)watcherNotification:(NSNotification *)notification; - (void)setWatchers; - (void)setWatcherForPath:(NSString *)path; - (void)unsetWatchers; - (void)unsetWatcherForPath:(NSString *)path; - (void)makePositions; - (gridpoint *)gridPointNearestToPoint:(NSPoint)p; - (BOOL)isFreePosition:(NSPoint)pos; - (int)cellsWidth; - (void)setSingleClickLaunch:(BOOL)value; @end @interface TShelfIconsView(PBoardOperations) - (void)setCurrentPBIcon:(id)anIcon; - (void)doCut; - (void)doCopy; - (void)doPaste; - (NSData *)readSelectionFromPasteboard:(NSPasteboard *)pboard ofType:(NSString **)pbtype; @end @interface TShelfIconsView(DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end #endif // TSHELF_ICONS_VIEW_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfIconsView.m0000644000175000001440000010031414751213523021545 0ustar multixusers/* TShelfIconsView.m * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "FSNodeRep.h" #import "FSNFunctions.h" #import "TShelfIcon.h" #import "TShelfFileIcon.h" #import "TShelfPBIcon.h" #import "TShelfIconsView.h" #import "GWorkspace.h" #import "TShelfWin.h" #define CELLS_WIDTH (80) #define EDIT_MARGIN (4) @implementation TShelfIconsView - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; [self unsetWatchers]; if (gpoints != NULL) { NSZoneFree (NSDefaultMallocZone(), gpoints); } RELEASE (icons); RELEASE (watchedPaths); RELEASE (dragImage); RELEASE (focusedIconLabel); [super dealloc]; } - (id)initWithIconsDescription:(NSArray *)idescr iconsType:(int)itype lastView:(BOOL)last { self = [super init]; if (self) { NSArray *hiddenPaths = [[FSNodeRep sharedInstance] hiddenPaths]; NSUInteger i, j; fm = [NSFileManager defaultManager]; gw = [GWorkspace gworkspace]; makePosSel = @selector(makePositions); makePos = (IMP)[self methodForSelector: makePosSel]; gridPointSel = @selector(gridPointNearestToPoint:); gridPoint = (GridPointIMP)[self methodForSelector: gridPointSel]; cellsWidth = CELLS_WIDTH; watchedPaths = [[NSCountedSet alloc] initWithCapacity: 1]; focusedIconLabel = [NSTextField new]; [focusedIconLabel setFont: [NSFont systemFontOfSize: 12]]; [focusedIconLabel setBezeled: NO]; [focusedIconLabel setAlignment: NSCenterTextAlignment]; [focusedIconLabel setEditable: NO]; [focusedIconLabel setSelectable: NO]; [focusedIconLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [focusedIconLabel setTextColor: [NSColor controlTextColor]]; [focusedIconLabel setFrame: NSMakeRect(0, 0, 0, 14)]; focusedIcon = nil; icons = [[NSMutableArray alloc] initWithCapacity: 1]; iconsType = itype; isLastView = last; if (idescr && [idescr count]) { for (i = 0; i < [idescr count]; i++) { NSDictionary *iconDict = [idescr objectAtIndex: i]; NSUInteger index = [[iconDict objectForKey: @"index"] unsignedIntValue]; if (iconsType == FILES_TAB) { NSArray *iconpaths = [iconDict objectForKey: @"paths"]; BOOL canadd = YES; for (j = 0; j < [iconpaths count]; j++) { NSString *p = [iconpaths objectAtIndex: j]; if (([fm fileExistsAtPath: p] == NO) || [hiddenPaths containsObject: p]) { canadd = NO; break; } } if (canadd == YES) { [self addIconWithPaths: iconpaths withGridIndex: index]; } } else { NSString *dataPath = [iconDict objectForKey: @"datapath"]; NSString *dataType = [iconDict objectForKey: @"datatype"]; if ([fm fileExistsAtPath: dataPath]) { [self addPBIconForDataAtPath: dataPath dataType: dataType withGridIndex: index]; } } } } gpoints = NULL; pcount = 0; isDragTarget = NO; dragImage = nil; if (isLastView == NO) { if (iconsType == FILES_TAB) { [self registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(fileSystemWillChange:) name: @"GWFileSystemWillChangeNotification" object: nil]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; } else { NSArray *types = [NSArray arrayWithObjects: NSStringPboardType, NSRTFPboardType, NSRTFDPboardType, NSTIFFPboardType, NSFileContentsPboardType, NSColorPboardType, @"IBViewPboardType", nil]; [self registerForDraggedTypes: types]; [self setWatcherForPath: [gw tshelfPBDir]]; } [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(watcherNotification:) name: @"GWFileWatcherFileDidChangeNotification" object: nil]; } } return self; } - (NSArray *)iconsDescription { NSMutableArray *arr = [NSMutableArray arrayWithCapacity: 1]; NSUInteger i; for (i = 0; i < [icons count]; i++) { NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity: 1]; id icon; NSUInteger index; icon = [icons objectAtIndex: i]; index = [icon gridIndex]; [dict setObject: [NSNumber numberWithInt: index] forKey: @"index"]; if (iconsType == FILES_TAB) { [dict setObject: [(TShelfFileIcon *)icon paths] forKey: @"paths"]; } else { [dict setObject: [icon dataPath] forKey: @"datapath"]; [dict setObject: [icon dataType] forKey: @"datatype"]; } [arr addObject: dict]; } return arr; } - (void)addIconWithPaths:(NSArray *)iconpaths withGridIndex:(NSUInteger)index { TShelfFileIcon *icon = [[TShelfFileIcon alloc] initForPaths: iconpaths gridIndex: index inIconsView: self]; NSString *watched = [[iconpaths objectAtIndex: 0] stringByDeletingLastPathComponent]; [icon setSingleClickLaunch:[(TShelfWin *)[gw tabbedShelf] singleClickLaunch]]; if (gpoints != NULL) { if (index < pcount) { gpoints[index].used = 1; } } [icons addObject: icon]; [self addSubview: icon]; [self addSubview: [icon myLabel]]; RELEASE (icon); [self sortIcons]; [self resizeWithOldSuperviewSize: [self frame].size]; if ([watchedPaths containsObject: watched] == NO) [self setWatcherForPath: watched]; [watchedPaths addObject: watched]; } - (TShelfPBIcon *)addPBIconForDataAtPath:(NSString *)dpath dataType:(NSString *)dtype withGridIndex:(NSUInteger)index { TShelfPBIcon *icon = [[TShelfPBIcon alloc] initForPBDataAtPath: dpath ofType: dtype gridIndex: index inIconsView: self]; if (gpoints != NULL) { if (index < pcount) { gpoints[index].used = 1; } } [icons addObject: icon]; [self addSubview: icon]; RELEASE (icon); [self sortIcons]; [self resizeWithOldSuperviewSize: [self frame].size]; return icon; } - (void)removeIcon:(id)anIcon { if (anIcon) { id label = [anIcon myLabel]; NSUInteger index = [anIcon gridIndex]; if (iconsType == FILES_TAB) { NSString *watched = [[[anIcon paths] objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([watchedPaths containsObject: watched]) { [watchedPaths removeObject: watched]; if ([watchedPaths containsObject: watched] == NO) { [self unsetWatcherForPath: watched]; } } if (label && [[self subviews] containsObject: label]) { [label removeFromSuperview]; } } if (focusedIcon == anIcon) { focusedIcon = nil; [self updateFocusedIconLabel]; } if ([[self subviews] containsObject: anIcon]) { [anIcon removeFromSuperview]; } [icons removeObject: anIcon]; gpoints[index].used = 0; [self resizeWithOldSuperviewSize: [self frame].size]; } } - (void)removePBIconsWithData:(NSData *)data ofType:(NSString *)type { NSUInteger count = [icons count]; NSUInteger i; for (i = 0; i < count; i++) { TShelfPBIcon *icon = [icons objectAtIndex: count-i-1]; if ([[icon dataType] isEqual: type]) { if ([[icon data] isEqual: data]) { NSString *dataPath = [icon dataPath]; RETAIN (dataPath); [self removeIcon: icon]; [fm removeFileAtPath: dataPath handler: nil]; RELEASE (dataPath); } } } } - (void)setLabelRectOfIcon:(id)anIcon { TShelfIcon *icon; NSTextField *label; float iconwidth, labwidth, labxpos; NSRect labelRect; icon = (TShelfIcon *)anIcon; label = [icon myLabel]; iconwidth = [icon frame].size.width; labwidth = [label frame].size.width; if (iconwidth > labwidth) { labxpos = [icon frame].origin.x + ((iconwidth - labwidth) / 2); } else { labxpos = [icon frame].origin.x - ((labwidth - iconwidth) / 2); } labelRect = NSMakeRect(labxpos, [icon frame].origin.y - 14, labwidth, 14); [label setFrame: labelRect]; } - (BOOL)hasSelectedIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { TShelfIcon *icon = [icons objectAtIndex: i]; if ([icon isSelected]) { return YES; } } return NO; } - (void)unselectOtherIcons:(id)anIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { TShelfIcon *icon = [icons objectAtIndex: i]; if (icon != anIcon) { [icon unselect]; } } } - (void)setFocusedIcon:(id)anIcon { if (anIcon == nil) { if (focusedIcon) { [self addSubview: [focusedIcon myLabel]]; [self setLabelRectOfIcon: focusedIcon]; } } focusedIcon = anIcon; [self updateFocusedIconLabel]; } - (void)updateFocusedIconLabel { if ([[self subviews] containsObject: focusedIconLabel]) { NSRect rect = [focusedIconLabel frame]; [focusedIconLabel removeFromSuperview]; [self setNeedsDisplayInRect: rect]; } if (focusedIcon) { NSRect iconrect = [focusedIcon frame]; float centerx = iconrect.origin.x + (iconrect.size.width / 2); NSTextField *label = [focusedIcon myLabel]; NSRect labelrect = [label frame]; NSString *name = [focusedIcon shownName]; float fwidth = [[label font] widthOfString: name]; float boundswidth = [self bounds].size.width - EDIT_MARGIN; int margin = 8; fwidth += margin; if ((centerx + (fwidth / 2)) >= boundswidth) { centerx -= (centerx + (fwidth / 2) - boundswidth); } else if ((centerx - (fwidth / 2)) < margin) { centerx += fabs(centerx - (fwidth / 2)) + margin; } labelrect.origin.x = centerx - (fwidth / 2); labelrect.size.width = fwidth; labelrect = NSIntegralRect(labelrect); [label removeFromSuperview]; [focusedIconLabel setFrame: labelrect]; [focusedIconLabel setStringValue: name]; [self addSubview: focusedIconLabel]; [self setNeedsDisplayInRect: labelrect]; } } - (void)sortIcons { SEL sel = @selector(iconCompare:); [icons sortUsingSelector: sel]; } - (NSArray *)icons { return icons; } - (int)iconsType { return iconsType; } - (void)updateIcons { NSUInteger i; for (i = 0; i < [icons count]; i++) { id icon = [icons objectAtIndex: i]; if ([icon respondsToSelector: @selector(renewIcon)]) { [icon renewIcon]; } } } - (id)selectedIcon { NSUInteger i; for (i = 0; i < [icons count]; i++) { id icon = [icons objectAtIndex: i]; if ([icon isSelected]) { return icon; } } return nil; } - (void)setCurrentSelection:(NSArray *)paths { [gw rootViewerSelectFiles: paths]; } - (void)openCurrentSelection:(NSArray *)paths { [gw openSelectedPaths: paths newViewer: YES]; } - (void)checkIconsAfterDotsFilesChange { if (iconsType == FILES_TAB) { NSUInteger count = [icons count]; NSUInteger i; for (i = 0; i < count; i++) { TShelfFileIcon *icon = [icons objectAtIndex: i]; NSArray *iconpaths = [icon paths]; NSUInteger j; for (j = 0; j < [iconpaths count]; j++) { NSString *op = [iconpaths objectAtIndex: j]; if ([op rangeOfString: @"."].location != NSNotFound) { [self removeIcon: icon]; count--; i--; break; } } } } } - (void)checkIconsAfterHidingOfPaths:(NSArray *)hpaths { if (iconsType == FILES_TAB) { NSUInteger count = [icons count]; NSUInteger i; for (i = 0; i < count; i++) { BOOL deleted = NO; TShelfFileIcon *icon = [icons objectAtIndex: i]; NSArray *iconpaths = [icon paths]; NSUInteger j; for (j = 0; j < [iconpaths count]; j++) { NSString *op = [iconpaths objectAtIndex: j]; NSUInteger m; for (m = 0; m < [hpaths count]; m++) { NSString *fp = [hpaths objectAtIndex: m]; if (isSubpathOfPath(fp, op) || [fp isEqual: op]) { [self removeIcon: icon]; count--; i--; deleted = YES; break; } if (deleted) { break; } } if (deleted) { break; } } } } } - (void)fileSystemWillChange:(NSNotification *)notification { CREATE_AUTORELEASE_POOL(arp); NSDictionary *dict = [notification object]; NSString *operation = [dict objectForKey: @"operation"]; NSString *source = [dict objectForKey: @"source"]; NSArray *files = [dict objectForKey: @"files"]; if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { NSMutableArray *paths = [NSMutableArray array]; NSArray *iconpaths; NSUInteger i, j, m; for (i = 0; i < [files count]; i++) { NSString *s = [source stringByAppendingPathComponent: [files objectAtIndex: i]]; [paths addObject: s]; } for (i = 0; i < [icons count]; i++) { TShelfIcon *icon = [icons objectAtIndex: i]; if ([icon isKindOfClass:[TShelfFileIcon class]]) { iconpaths = [(TShelfFileIcon *)icon paths]; for (j = 0; j < [iconpaths count]; j++) { NSString *op = [iconpaths objectAtIndex: j]; for (m = 0; m < [paths count]; m++) { NSString *fp = [paths objectAtIndex: m]; if ([op hasPrefix: fp]) { [icon setLocked: YES]; break; } } } } // if TShelfFileIcon } } RELEASE (arp); } - (void)fileSystemDidChange:(NSNotification *)notification { CREATE_AUTORELEASE_POOL(arp); NSDictionary *dict = [notification object]; NSString *operation = [dict objectForKey: @"operation"]; NSString *source = [dict objectForKey: @"source"]; NSArray *files = [dict objectForKey: @"files"]; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { files = [NSArray arrayWithObject: [source lastPathComponent]]; source = [source stringByDeletingLastPathComponent]; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { NSMutableArray *paths = [NSMutableArray arrayWithCapacity: 1]; TShelfIcon *icon; NSArray *iconpaths; NSUInteger count; NSUInteger i, j, m; for (i = 0; i < [files count]; i++) { NSString *s = [source stringByAppendingPathComponent: [files objectAtIndex: i]]; [paths addObject: s]; } count = [icons count]; for (i = 0; i < count; i++) { BOOL deleted = NO; icon = [icons objectAtIndex: i]; if ([icon isKindOfClass:[TShelfFileIcon class]]) { iconpaths = [(TShelfFileIcon *)icon paths]; for (j = 0; j < [iconpaths count]; j++) { NSString *op = [iconpaths objectAtIndex: j]; for (m = 0; m < [paths count]; m++) { NSString *fp = [paths objectAtIndex: m]; if ([op hasPrefix: fp]) { [self removeIcon: icon]; count--; i--; deleted = YES; break; } if (deleted) break; } if (deleted) break; } } // if TShelfFileIcon } } RELEASE (arp); } - (void)watcherNotification:(NSNotification *)notification { CREATE_AUTORELEASE_POOL(arp); NSDictionary *notifdict = (NSDictionary *)[notification object]; NSString *path = [notifdict objectForKey: @"path"]; NSString *event = [notifdict objectForKey: @"event"]; NSEnumerator *enumerator; NSString *wpath; BOOL contained = NO; NSUInteger i; if (iconsType == DATA_TAB) { NSUInteger count = [icons count]; if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { NSArray *files = [notifdict objectForKey: @"files"]; for (i = 0; i < count; i++) { TShelfPBIcon *icon = [icons objectAtIndex: i]; NSString *dataPath = [icon dataPath]; NSUInteger j; for (j = 0; j < [files count]; j++) { NSString *fname = [files objectAtIndex: j]; NSString *fullPath = [path stringByAppendingPathComponent: fname]; if ([fullPath isEqual: dataPath]) { [self removeIcon: icon]; count--; i--; } } } } } else { if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { RELEASE (arp); return; } enumerator = [watchedPaths objectEnumerator]; while ((wpath = [enumerator nextObject])) { if (([wpath isEqual: path]) || (isSubpathOfPath(path, wpath))) { contained = YES; break; } } if (contained) { id icon; NSArray *ipaths; NSString *ipath; NSUInteger count = [icons count]; if ([event isEqual: @"GWWatchedPathDeleted"]) { for (i = 0; i < count; i++) { icon = [icons objectAtIndex: i]; ipaths = [icon paths]; ipath = [ipaths objectAtIndex: 0]; if (isSubpathOfPath(path, ipath)) { [self removeIcon: icon]; count--; i--; } } RELEASE (arp); return; } if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { NSArray *files = [notifdict objectForKey: @"files"]; for (i = 0; i < count; i++) { NSUInteger j; icon = [icons objectAtIndex: i]; ipaths = [icon paths]; if ([ipaths count] == 1) { ipath = [ipaths objectAtIndex: 0]; for (j = 0; j < [files count]; j++) { NSString *fname = [files objectAtIndex: j]; NSString *fullPath = [path stringByAppendingPathComponent: fname]; if ((isSubpathOfPath(fullPath, ipath)) || ([ipath isEqual: fullPath])) { [self removeIcon: icon]; count--; i--; break; } } } else { for (j = 0; j < [files count]; j++) { NSString *fname = [files objectAtIndex: j]; NSString *fullPath = [path stringByAppendingPathComponent: fname]; BOOL deleted = NO; NSUInteger m; if (deleted) { break; } ipath = [ipaths objectAtIndex: 0]; if (isSubpathOfPath(fullPath, ipath)) { [self removeIcon: icon]; count--; i--; break; } for (m = 0; m < [ipaths count]; m++) { ipath = [ipaths objectAtIndex: m]; if ([ipath isEqual: fullPath]) { NSMutableArray *newpaths; if ([ipaths count] == 1) { [self removeIcon: icon]; count--; i--; deleted = YES; break; } newpaths = [ipaths mutableCopy]; [newpaths removeObject: ipath]; [icon setPaths: newpaths]; ipaths = [icon paths]; RELEASE (newpaths); } } } } } } } } RELEASE (arp); } - (void)setWatchers { NSEnumerator *enumerator = [watchedPaths objectEnumerator]; NSString *wpath; while ((wpath = [enumerator nextObject])) { [self setWatcherForPath: wpath]; } } - (void)setWatcherForPath:(NSString *)path { [gw addWatcherForPath: path]; } - (void)unsetWatchers { NSEnumerator *enumerator = [watchedPaths objectEnumerator]; NSString *wpath; while ((wpath = [enumerator nextObject])) { [self unsetWatcherForPath: wpath]; } } - (void)unsetWatcherForPath:(NSString *)path { [gw removeWatcherForPath: path]; } - (void)makePositions { CGFloat wdt, hgt, x, y; NSUInteger i; wdt = [self bounds].size.width; hgt = [self bounds].size.height; pcount = (NSUInteger)((wdt - 16) / cellsWidth); if (gpoints != NULL) { NSZoneFree (NSDefaultMallocZone(), gpoints); } gpoints = NSZoneMalloc (NSDefaultMallocZone(), sizeof(gridpoint) * pcount); x = 16; y = hgt - 59; for (i = 0; i < pcount; i++) { if (i > 0) { x += cellsWidth; } gpoints[i].x = x; gpoints[i].y = y; gpoints[i].index = i; if (x < (wdt - cellsWidth)) { gpoints[i].used = 0; } else { gpoints[i].used = 1; } } } - (gridpoint *)gridPointNearestToPoint:(NSPoint)p { NSRect r = [self bounds]; CGFloat maxx = r.size.width; CGFloat maxy = r.size.height; float px = p.x; float py = p.y; float minx = maxx; float miny = maxy; int pos = -1; NSUInteger i; for (i = 0; i < pcount; i++) { if (gpoints[i].y > 0) { float dx = max(px, gpoints[i].x) - min(px, gpoints[i].x); float dy = max(py, gpoints[i].y) - min(py, gpoints[i].y); if ((dx <= minx) && (dy <= miny)) { minx = dx; miny = dy; pos = i; } } } return &gpoints[pos]; } - (BOOL)isFreePosition:(NSPoint)pos { NSUInteger i; for (i = 0; i < [icons count]; i++) { NSPoint p = [[icons objectAtIndex: i] position]; if (NSEqualPoints(pos, p)) { return NO; } } return YES; } - (int)cellsWidth { return cellsWidth; } - (void)setFrame:(NSRect)frameRect { [super setFrame: frameRect]; makePos(self, makePosSel); } - (void)resizeWithOldSuperviewSize:(NSSize)oldFrameSize { NSUInteger i; if (gpoints == NULL) { [super resizeWithOldSuperviewSize: oldFrameSize]; return; } for (i = 0; i < pcount; i++) { gpoints[i].used = 0; } for (i = 0; i < [icons count]; i++) { id icon = [icons objectAtIndex: i]; NSUInteger index = [icon gridIndex]; gridpoint gpoint = gpoints[index]; NSPoint p = NSMakePoint(gpoint.x, gpoint.y); NSRect r = NSMakeRect(p.x, p.y, 64, 52); [icon setPosition: p]; [icon setFrame: NSIntegralRect(r)]; gpoints[index].used = 1; if (iconsType == FILES_TAB) { [self setLabelRectOfIcon: icon]; } } [self sortIcons]; [self setNeedsDisplay: YES]; } - (void)mouseDown:(NSEvent *)theEvent { [self unselectOtherIcons: nil]; if (iconsType == DATA_TAB) { [self setCurrentPBIcon: nil]; } } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (dragImage != nil) { gridpoint *gpoint = [self gridPointNearestToPoint: dragPoint]; if (gpoint->used == 0) { NSPoint p = NSMakePoint(dragPoint.x + 8, dragPoint.y); [dragImage dissolveToPoint: p fraction: 0.3]; } } } - (BOOL)acceptsFirstResponder { return YES; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (void)setSingleClickLaunch:(BOOL)value { NSUInteger i; for (i = 0; i < [icons count]; i++) { TShelfIcon *icon; icon = [icons objectAtIndex: i]; [icon setSingleClickLaunch: value]; } } @end @implementation TShelfIconsView(PBoardOperations) - (void)setCurrentPBIcon:(id)anIcon { if (anIcon) { NSString *dataPath = [anIcon dataPath]; NSString *dataType = [anIcon dataType]; NSImage *icn = [anIcon icon]; NSData *data = [NSData dataWithContentsOfFile: dataPath]; if (data) { [gw showPasteboardData: data ofType: dataType typeIcon: icn]; } } else { [gw resetSelectedPaths]; } } - (void)doCut { TShelfPBIcon *icon = [self selectedIcon]; if (icon) { NSString *dataPath = [icon dataPath]; RETAIN (dataPath); [self doCopy]; [self removeIcon: icon]; [fm removeFileAtPath: dataPath handler: nil]; RELEASE (dataPath); [gw resetSelectedPaths]; } } - (void)doCopy { TShelfPBIcon *icon = [self selectedIcon]; if (icon) { NSString *dataPath = [icon dataPath]; NSString *dataType = [icon dataType]; NSData *data = [NSData dataWithContentsOfFile: dataPath]; if (data) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; [pb declareTypes: [NSArray arrayWithObject: dataType] owner: self]; [pb setData: data forType: dataType]; } } } - (void)doPaste { NSData *data; NSString *type; data = [self readSelectionFromPasteboard: [NSPasteboard generalPasteboard] ofType: &type]; if (data && [[TShelfPBIcon dataTypes] containsObject: type]) { NSString *dpath = [gw tshelfPBFilePath]; NSUInteger index = NSNotFound; NSUInteger i; for (i = 0; i < pcount; i++) { if (gpoints[i].used == 0) { index = i; break; } } if (index == NSNotFound) { NSRunAlertPanel(NSLocalizedString(@"Error!", @""), NSLocalizedString(@"No space left on this tab", @""), NSLocalizedString(@"Ok", @""), nil, nil); return; } if ([data writeToFile: dpath atomically: YES]) { [self addPBIconForDataAtPath: dpath dataType: type withGridIndex: index]; } } } - (NSData *)readSelectionFromPasteboard:(NSPasteboard *)pboard ofType:(NSString **)pbtype { NSArray *types = [pboard types]; NSData *data; NSString *type; NSUInteger i; if ((types == nil) || ([types count] == 0)) { return nil; } for (i = 0; i < [types count]; i++) { type = [types objectAtIndex: 0]; data = [pboard dataForType: type]; if (data) { *pbtype = type; return data; } } return nil; } @end @implementation TShelfIconsView(DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; BOOL found = YES; gridpoint *gpoint; DESTROY (dragImage); if (iconsType == FILES_TAB) { if ((sourceDragMask == NSDragOperationCopy) || (sourceDragMask == NSDragOperationLink)) { return NSDragOperationNone; } } if (iconsType == FILES_TAB) { if ([[pb types] indexOfObject: NSFilenamesPboardType] != NSNotFound) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if ([sourcePaths count]) { NSString *basePath = [sourcePaths objectAtIndex: 0]; basePath = [basePath stringByDeletingLastPathComponent]; if ([basePath isEqual: [gw trashPath]]) { found = NO; } } else { found = NO; } } else { found = NO; } } else { NSArray *types = [pb types]; if (([types indexOfObject: NSStringPboardType] == NSNotFound) && ([types indexOfObject: NSRTFPboardType] == NSNotFound) && ([types indexOfObject: NSRTFDPboardType] == NSNotFound) && ([types indexOfObject: NSTIFFPboardType] == NSNotFound) && ([types indexOfObject: NSFileContentsPboardType] == NSNotFound) && ([types indexOfObject: NSColorPboardType] == NSNotFound) && ([types indexOfObject: @"IBViewPboardType"] == NSNotFound)) { found = NO; } } if (found) { isDragTarget = YES; DESTROY (dragImage); dragPoint = [sender draggedImageLocation]; dragPoint = [self convertPoint: dragPoint fromView: [[self window] contentView]]; gpoint = [self gridPointNearestToPoint: dragPoint]; dragPoint = NSMakePoint(gpoint->x, gpoint->y); ASSIGN (dragImage, [sender draggedImage]); dragRect = NSMakeRect(dragPoint.x + 8, dragPoint.y, [dragImage size].width, [dragImage size].height); [self setNeedsDisplay: YES]; return NSDragOperationEvery; } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSDragOperation sourceDragMask = [sender draggingSourceOperationMask]; NSPoint p = [sender draggedImageLocation]; p = [self convertPoint: p fromView: [[self window] contentView]]; if (isDragTarget == NO) { return NSDragOperationNone; } if (iconsType == FILES_TAB) { if ((sourceDragMask == NSDragOperationCopy) || (sourceDragMask == NSDragOperationLink)) { if (dragImage) { DESTROY (dragImage); [self setNeedsDisplayInRect: dragRect]; } return NSDragOperationNone; } } if (NSEqualPoints(dragPoint, p) == NO) { gridpoint *gpoint; if ([self isFreePosition: dragPoint]) { [self setNeedsDisplayInRect: dragRect]; } gpoint = gridPoint(self, gridPointSel, p); dragPoint = NSMakePoint(gpoint->x, gpoint->y); if (gpoint->used == 0) { dragRect = NSMakeRect(dragPoint.x + 8, dragPoint.y, [dragImage size].width, [dragImage size].height); if (dragImage == nil) { ASSIGN (dragImage, [sender draggedImage]); } [self setNeedsDisplayInRect: dragRect]; } else { DESTROY (dragImage); return NSDragOperationNone; } } return NSDragOperationEvery; } - (void)draggingExited:(id )sender { if (dragImage != nil) { DESTROY (dragImage); [self setNeedsDisplay: YES]; } isDragTarget = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSPoint p = [sender draggedImageLocation]; gridpoint *gpoint; NSUInteger index; NSUInteger i; isDragTarget = NO; if (dragImage != nil) { DESTROY (dragImage); [self setNeedsDisplay: YES]; } p = [self convertPoint: p fromView: [[self window] contentView]]; gpoint = [self gridPointNearestToPoint: p]; index = gpoint->index; if (gpoint->used == 0) { if (iconsType == FILES_TAB) { NSArray *sourcePaths; sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; if (sourcePaths) { for (i = 0; i < [icons count]; i++) { TShelfFileIcon *icon = [icons objectAtIndex: i]; if ([[icon paths] isEqualToArray: sourcePaths]) { gpoints[[icon gridIndex]].used = 0; gpoint->used = 1; [icon setGridIndex: index]; [self resizeWithOldSuperviewSize: [self frame].size]; return; } } [self addIconWithPaths: sourcePaths withGridIndex: index]; } } else { NSData *data; NSString *type; data = [self readSelectionFromPasteboard: pb ofType: &type]; if (data) { NSString *dpath = [gw tshelfPBFilePath]; if ([data writeToFile: dpath atomically: YES]) { TShelfPBIcon *icon; [self removePBIconsWithData: data ofType: type]; icon = [self addPBIconForDataAtPath: dpath dataType: type withGridIndex: index]; [icon select]; } } } } } @end gworkspace-1.1.0/GWorkspace/TShelf/TShelfPBIcon.h0000644000175000001440000000325014751213523020745 0ustar multixusers/* TShelfPBIcon.h * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TSHELF_PB_ICON_H #define TSHELF_PB_ICON_H #import #import "TShelfIcon.h" @class NSImage; @class NSBezierPath; @class TShelfIconsView; @interface TShelfPBIcon : TShelfIcon { NSString *dataPath; NSString *dataType; } + (NSArray *)dataTypes; - (id)initForPBDataAtPath:(NSString *)dpath ofType:(NSString *)type gridIndex:(NSUInteger)index inIconsView:(TShelfIconsView *)aview; - (NSString *)dataPath; - (NSString *)dataType; - (NSData *)data; @end @interface TShelfPBIcon (DraggingSource) - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag; @end #endif // TSHELF_PB_ICON_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfPBIcon.m0000644000175000001440000001314214751213523020753 0ustar multixusers/* TShelfPBIcon.m * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FSNodeRep.h" #import "GWFunctions.h" #import "TShelfPBIcon.h" #import "TShelfIconsView.h" #import "GWorkspace.h" @implementation TShelfPBIcon + (NSArray *)dataTypes { return [NSArray arrayWithObjects: NSStringPboardType, NSRTFPboardType, NSRTFDPboardType, NSTIFFPboardType, NSFileContentsPboardType, NSColorPboardType, @"IBViewPboardType", nil]; } - (void)dealloc { RELEASE (dataPath); RELEASE (dataType); [super dealloc]; } - (id)initForPBDataAtPath:(NSString *)dpath ofType:(NSString *)type gridIndex:(NSUInteger)index inIconsView:(TShelfIconsView *)aview { self = [super init]; if (self) { NSRect hlightRect; [self setFrame: NSMakeRect(0, 0, 64, 52)]; ASSIGN (dataPath, dpath); ASSIGN (dataType, type); hlightRect = NSZeroRect; hlightRect.size.width = (float)ICON_SIZE / 3 * 4; hlightRect.size.height = hlightRect.size.width * [[FSNodeRep sharedInstance] highlightHeightFactor]; if ((hlightRect.size.height - ICON_SIZE) < 4) { hlightRect.size.height = ICON_SIZE + 4; } hlightRect = NSIntegralRect(hlightRect); ASSIGN (highlightPath, [[FSNodeRep sharedInstance] highlightPathOfSize: hlightRect.size]); if ([dataType isEqual: NSStringPboardType]) { ASSIGN (icon, [NSImage imageNamed: @"stringPboard.tiff"]); } else if ([dataType isEqual: NSRTFPboardType]) { ASSIGN (icon, [NSImage imageNamed: @"rtfPboard.tiff"]); } else if ([dataType isEqual: NSRTFDPboardType]) { ASSIGN (icon, [NSImage imageNamed: @"rtfdPboard.tiff"]); } else if ([dataType isEqual: NSTIFFPboardType]) { ASSIGN (icon, [NSImage imageNamed: @"tiffPboard.tiff"]); } else if ([dataType isEqual: NSFileContentsPboardType]) { ASSIGN (icon, [NSImage imageNamed: @"filecontsPboard.tiff"]); } else if ([dataType isEqual: NSColorPboardType]) { ASSIGN (icon, [NSImage imageNamed: @"colorPboard.tiff"]); } else if ([dataType isEqual: @"IBViewPboardType"]) { ASSIGN (icon, [NSImage imageNamed: @"gormPboard.tiff"]); } else { ASSIGN (icon, [NSImage imageNamed: @"Pboard.tiff"]); } gridIndex = index; tview = aview; } return self; } - (NSString *)dataPath { return dataPath; } - (NSString *)dataType { return dataType; } - (NSData *)data { return [NSData dataWithContentsOfFile: dataPath]; } - (void)select { [tview unselectOtherIcons: self]; [tview setCurrentPBIcon: self]; isSelected = YES; [self setNeedsDisplay: YES]; } - (void)unselect { isSelected = NO; [self setNeedsDisplay: YES]; } - (NSTextField *)myLabel { return nil; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } - (void)mouseDown:(NSEvent *)theEvent { CHECK_LOCK; if ([theEvent clickCount] == 1) { NSEvent *nextEvent; NSPoint location; NSSize offset; BOOL startdnd = NO; if (isSelected == NO) { [self select]; } location = [theEvent locationInWindow]; while (1) { nextEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask | NSLeftMouseDraggedMask]; if ([nextEvent type] == NSLeftMouseUp) { // post again, or mouse-up gets eaten [[self window] postEvent: nextEvent atStart: NO]; [self unselect]; break; } else if ([nextEvent type] == NSLeftMouseDragged) { if(dragDelay < 5) { dragDelay++; } else { NSPoint p = [nextEvent locationInWindow]; offset = NSMakeSize(p.x - location.x, p.y - location.y); startdnd = YES; break; } } } if (startdnd == YES) { [self startExternalDragOnEvent: theEvent withMouseOffset: offset]; } } } @end @implementation TShelfPBIcon (DraggingSource) - (void)declareAndSetShapeOnPasteboard:(NSPasteboard *)pb { NSData *data = [NSData dataWithContentsOfFile: dataPath]; if (data) { [pb declareTypes: [NSArray arrayWithObject: dataType] owner: nil]; [pb setData: data forType: dataType]; } } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { return NSDragOperationEvery; } @end gworkspace-1.1.0/GWorkspace/TShelf/TShelfView.h0000644000175000001440000000403314751213523020545 0ustar multixusers/* TShelfView.h * * Copyright (C) 2003-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TABBED_SHELF_VIEW_H #define TABBED_SHELF_VIEW_H #import @class NSFont; @class NSImage; @class TShelfViewItem; @class NSButton; @interface TShelfView : NSView { NSMutableArray *items; TShelfViewItem *lastItem; NSFont *font; NSFont *italicFont; TShelfViewItem *selected; NSUInteger selectedItem; NSButton *ffButt, *rewButt; } - (void)addTabItem:(TShelfViewItem *)item; - (BOOL)insertTabItem:(TShelfViewItem *)item atIndex:(NSUInteger)index; - (void)setLastTabItem:(TShelfViewItem *)item; - (BOOL)removeTabItem:(TShelfViewItem *)item; - (NSUInteger)indexOfItem:(TShelfViewItem *)item; - (void)selectTabItem:(TShelfViewItem *)item; - (void)selectTabItemAtIndex:(NSUInteger)index; - (void)selectLastItem; - (TShelfViewItem *)selectedTabItem; - (TShelfViewItem *)tabItemAtPoint:(NSPoint)point; - (TShelfViewItem *)lastTabItem; - (NSArray *)items; - (void)buttonsAction:(id)sender; - (void)setButtonsEnabled:(BOOL)enabled; - (NSFont *)font; - (NSFont *)italicFont; - (NSRect)contentRect; - (void)setSingleClickLaunch:(BOOL)value; @end #endif // TABBED_SHELF_VIEW_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfView.m0000644000175000001440000003103714751213523020556 0ustar multixusers/* TShelfView.m * * Copyright (C) 2003-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "TShelfView.h" #import "TShelfViewItem.h" #import "TShelfIconsView.h" #import "GWorkspace.h" #define SPECIAL_TAB_W 54 #define BUTTORX 25 #define BUTTSZ 9 #define BUTTSPACE 12 #define TAB_H 24 #define LAB_MARGIN 13 #define BEZ_TAB_W 14 @implementation TShelfView - (id)initWithFrame:(NSRect)rect { self = [super initWithFrame: rect]; if (self) { NSRect r = NSZeroRect; ASSIGN (items, [NSMutableArray array]); font = [NSFont fontWithName: @"Helvetica-Bold" size: 12]; if (font == nil) { font = [NSFont boldSystemFontOfSize: 0]; } RETAIN (font); italicFont = [NSFont fontWithName: @"Helvetica-BoldOblique" size: 12]; if (italicFont == nil) { italicFont = [NSFont boldSystemFontOfSize: 0]; } RETAIN (italicFont); r.size = NSMakeSize(BUTTSZ, BUTTSZ); r.origin.y = rect.size.height - TAB_H + (int)((TAB_H - BUTTSZ) / 2); r.origin.x = rect.size.width - (BUTTSZ * 2 + BUTTSPACE); rewButt = [[NSButton alloc] initWithFrame: r]; [rewButt setButtonType: NSMomentaryLight]; [rewButt setBordered: NO]; [rewButt setTarget: self]; [rewButt setAction: @selector (buttonsAction:)]; [self addSubview: rewButt]; RELEASE (rewButt); r.origin.x += BUTTSPACE; ffButt = [[NSButton alloc] initWithFrame: r]; [ffButt setButtonType: NSMomentaryLight]; [ffButt setBordered: NO]; [ffButt setTarget: self]; [ffButt setAction: @selector (buttonsAction:)]; [self addSubview: ffButt]; RELEASE (ffButt); [self setButtonsEnabled: NO]; lastItem = nil; selected = nil; } return self; } - (void)dealloc { RELEASE (items); RELEASE (font); RELEASE (italicFont); [super dealloc]; } - (void)addTabItem:(TShelfViewItem *)item { [self insertTabItem: item atIndex: [items count]]; } - (BOOL)insertTabItem:(TShelfViewItem *)item atIndex:(NSUInteger)index { if (lastItem) { if (index == [items count]) { index--; } RETAIN (lastItem); [items removeObject: lastItem]; } [item setTShelfView: self]; [items insertObject: item atIndex: index]; if (lastItem) { [items insertObject: lastItem atIndex: [items count]]; RELEASE (lastItem); } return YES; } - (void)setLastTabItem:(TShelfViewItem *)item { lastItem = item; [item setTShelfView: self]; [items insertObject: item atIndex: [items count]]; } - (BOOL)removeTabItem:(TShelfViewItem *)item { NSUInteger i = [items indexOfObject: item]; if ((i == NSNotFound) || (item == lastItem)) { return NO; } if (item == selected) { [[selected view] removeFromSuperview]; selected = nil; } [items removeObjectAtIndex: i]; return YES; } - (NSUInteger)indexOfItem:(TShelfViewItem *)item { return [items indexOfObject: item]; } - (TShelfViewItem *)selectedTabItem { if ((selectedItem == NSNotFound) || ([items count] == 0)) { return nil; } return [items objectAtIndex: selectedItem]; } - (void)selectTabItem:(TShelfViewItem *)item { TShelfIconsView *selectedView; if (item == nil) return; if (selected != nil) { [selected setTabState: NSBackgroundTab]; selectedView = (TShelfIconsView *)[selected view]; if ([selectedView iconsType] == DATA_TAB) { [selectedView setCurrentPBIcon: nil]; } [[selected view] removeFromSuperview]; } selected = item; selectedItem = [items indexOfObject: selected]; [selected setTabState: NSSelectedTab]; selectedView = (TShelfIconsView *)[selected view]; if (selectedView != nil) { [self addSubview: selectedView]; [selectedView setFrame: [self contentRect]]; [selectedView resizeWithOldSuperviewSize: [selectedView frame].size]; [selectedView unselectOtherIcons: nil]; if ([selectedView iconsType] == DATA_TAB) { [selectedView setCurrentPBIcon: nil]; } [[self window] makeFirstResponder: [selected initialFirstResponder]]; } [self setButtonsEnabled: (lastItem && (lastItem == selected))]; [self setNeedsDisplay: YES]; } - (void)selectTabItemAtIndex:(NSUInteger)index { [self selectTabItem: [items objectAtIndex: index]]; } - (void)selectLastItem { if (lastItem) { [self selectTabItem: lastItem]; } } - (NSFont *)font { return font; } - (NSFont *)italicFont { return italicFont; } - (NSRect)contentRect { NSRect cRect = [self bounds]; cRect.origin.y += 1; cRect.size.height -= 26.5; return cRect; } void drawLeftTabBezier(NSPoint origin, float tabh, NSColor *sc, NSColor *fc, BOOL seltab) { NSBezierPath *path = [NSBezierPath bezierPath]; NSPoint endp = NSMakePoint(origin.x + BEZ_TAB_W, origin.y + tabh); NSPoint cp1 = NSMakePoint(origin.x + (BEZ_TAB_W / 2), origin.y); NSPoint cp2 = NSMakePoint(origin.x + BEZ_TAB_W - (BEZ_TAB_W / 2), origin.y + tabh); [path moveToPoint: origin]; [path curveToPoint: endp controlPoint1: cp1 controlPoint2: cp2]; [sc set]; [path stroke]; [path lineToPoint: NSMakePoint(origin.x + BEZ_TAB_W, origin.y)]; [path closePath]; [fc set]; [path fill]; if (seltab) { path = [NSBezierPath bezierPath]; [path moveToPoint: origin]; [path lineToPoint: NSMakePoint(origin.x + BEZ_TAB_W, origin.y)]; [path stroke]; } } void drawRightTabBezier(NSPoint origin, float tabh, NSColor *sc, NSColor *fc, BOOL seltab) { NSBezierPath *path = [NSBezierPath bezierPath]; NSPoint endp = NSMakePoint(origin.x - BEZ_TAB_W, origin.y + tabh); NSPoint cp1 = NSMakePoint(origin.x - (BEZ_TAB_W / 2), origin.y); NSPoint cp2 = NSMakePoint(origin.x - BEZ_TAB_W + (BEZ_TAB_W / 2), origin.y + tabh); [path moveToPoint: origin]; [path curveToPoint: endp controlPoint1: cp1 controlPoint2: cp2]; [sc set]; [path stroke]; [path lineToPoint: NSMakePoint(origin.x - BEZ_TAB_W, origin.y)]; [path closePath]; [fc set]; [path fill]; if (seltab) { path = [NSBezierPath bezierPath]; [path moveToPoint: origin]; [path lineToPoint: NSMakePoint(origin.x - BEZ_TAB_W, origin.y)]; [path stroke]; } } - (void)drawRect:(NSRect)rect { NSRect aRect = [self bounds]; NSPoint p = aRect.origin; NSSize s = aRect.size; NSUInteger count; int itemxspace; NSImage *backImage; NSColor *scolor; NSColor *fcolor; NSPoint selp[2]; NSBezierPath *bpath; NSUInteger i; NSPoint ipoint; backImage = [[GWorkspace gworkspace] tshelfBackground]; if (backImage) [backImage compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; count = [items count]; itemxspace = (int)((aRect.size.width - SPECIAL_TAB_W) / (count - 1)); [[NSColor controlColor] set]; NSRectFill(NSMakeRect(p.x, p.y, s.width, s.height - TAB_H)); if (selected == nil) { [self selectTabItemAtIndex: 0]; } selp[0] = NSZeroPoint; selp[1] = NSZeroPoint; aRect.size.height -= TAB_H; ipoint = NSMakePoint (0,0); for (i = count; i > 0; i--) { TShelfViewItem *anItem = [items objectAtIndex: i-1]; NSRect r; if (i == count) { ipoint.x = (int)(aRect.size.width - SPECIAL_TAB_W); ipoint.y = aRect.size.height; if ([anItem tabState] == NSSelectedTab) { selp[0] = ipoint; fcolor = [NSColor controlColor]; } else { fcolor = [NSColor controlBackgroundColor]; } scolor = [NSColor whiteColor]; drawLeftTabBezier(ipoint, TAB_H, scolor, fcolor, NO); r.origin.x = ipoint.x + LAB_MARGIN; r.origin.y = aRect.size.height; r.size.width = SPECIAL_TAB_W - LAB_MARGIN; r.size.height = TAB_H -1; bpath = [NSBezierPath bezierPath]; [bpath setLineWidth: 1]; [bpath moveToPoint: NSMakePoint(r.origin.x, r.origin.y + TAB_H)]; [bpath relativeLineToPoint: NSMakePoint(r.size.width, 0)]; [scolor set]; [bpath stroke]; [anItem drawImage: nil inRect: r]; } else { ipoint.y = aRect.size.height; if ([anItem tabState] == NSSelectedTab) { selp[1] = NSMakePoint(ipoint.x + BEZ_TAB_W, ipoint.y); fcolor = [NSColor controlColor]; } else { fcolor = [NSColor controlBackgroundColor]; } scolor = [NSColor blackColor]; drawRightTabBezier(NSMakePoint(ipoint.x + BEZ_TAB_W, ipoint.y), TAB_H, scolor, fcolor, NO); ipoint.x -= itemxspace; if (i != 0) { if ([anItem tabState] == NSSelectedTab) { selp[0] = ipoint; } scolor = [NSColor whiteColor]; drawLeftTabBezier(ipoint, TAB_H, scolor, fcolor, NO); r.origin.x = ipoint.x + LAB_MARGIN; r.origin.y = aRect.size.height; r.size.width = itemxspace - LAB_MARGIN; r.size.height = TAB_H -1; } else { r.origin.x = ipoint.x; r.origin.y = aRect.size.height; r.size.width = itemxspace; r.size.height = TAB_H -1; } scolor = [NSColor whiteColor]; bpath = [NSBezierPath bezierPath]; [bpath setLineWidth: 1]; [bpath moveToPoint: NSMakePoint(r.origin.x, r.origin.y + TAB_H)]; [bpath relativeLineToPoint: NSMakePoint(r.size.width, 0)]; [scolor set]; [bpath stroke]; [anItem drawLabelInRect: r]; } } fcolor = [NSColor controlColor]; if (NSEqualPoints(selp[0], NSZeroPoint) == NO) { scolor = [NSColor whiteColor]; drawLeftTabBezier(selp[0], TAB_H, scolor, fcolor, YES); bpath = [NSBezierPath bezierPath]; [bpath setLineWidth: 1]; [bpath moveToPoint: NSMakePoint(p.x - 2, aRect.size.height)]; [bpath lineToPoint: selp[0]]; [scolor set]; [bpath stroke]; } if (NSEqualPoints(selp[1], NSZeroPoint) == NO) { scolor = [NSColor blackColor]; drawRightTabBezier(selp[1], TAB_H, scolor, fcolor, YES); scolor = [NSColor whiteColor]; bpath = [NSBezierPath bezierPath]; [bpath setLineWidth: 1]; [bpath moveToPoint: selp[1]]; [bpath lineToPoint: NSMakePoint(s.width, aRect.size.height)]; [scolor set]; [bpath stroke]; } } - (BOOL)isOpaque { return YES; } - (TShelfViewItem *)tabItemAtPoint:(NSPoint)point { NSUInteger count = [items count]; NSUInteger i; point = [self convertPoint: point fromView: nil]; for (i = 0; i < count; i++) { TShelfViewItem *anItem = [items objectAtIndex: i]; if (NSPointInRect(point, [anItem tabRect])) { return anItem; } } return nil; } - (TShelfViewItem *)lastTabItem { return lastItem; } - (NSArray *)items { return items; } - (void)buttonsAction:(id)sender { } - (void)setButtonsEnabled:(BOOL)enabled { [rewButt setEnabled: enabled]; [ffButt setEnabled: enabled]; if (enabled) { [rewButt setImage: [NSImage imageNamed: @"REWArrow.tiff"]]; [ffButt setImage: [NSImage imageNamed: @"FFArrow.tiff"]]; } else { [rewButt setImage: [NSImage imageNamed: @"REWArrow_disabled.tiff"]]; [ffButt setImage: [NSImage imageNamed: @"FFArrow_disabled.tiff"]]; } } - (void)mouseDown:(NSEvent *)theEvent { NSPoint location = [theEvent locationInWindow]; TShelfViewItem *anItem = [self tabItemAtPoint: location]; if (anItem && (anItem != selected)) { [self selectTabItem: anItem]; } } - (BOOL)acceptsFirstResponder { return YES; } - (BOOL)acceptsFirstMouse:(NSEvent*)theEvent { return YES; } - (void)setSingleClickLaunch:(BOOL)value { NSUInteger i; for (i = 0; i < [items count]; i++) { TShelfViewItem *tViewItem; TShelfIconsView *iView; tViewItem = [items objectAtIndex: i]; iView = (TShelfIconsView *)[tViewItem view]; [iView setSingleClickLaunch: value]; } } @end gworkspace-1.1.0/GWorkspace/TShelf/TShelfViewItem.h0000644000175000001440000000401014751213523021357 0ustar multixusers /* TShelfViewItem.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TSHELF_VIEW_ITEM_H #define TSHELF_VIEW_ITEM_H #ifndef FILES_TAB #define FILES_TAB 0 #define DATA_TAB 1 #endif #include @class NSString; @class NSView; @class NSColor; @class NSFont; @class NSImage; @class TShelfView; @interface TShelfViewItem : NSObject { id ident; int tabtype; NSString *label; NSFont *labfont; NSView *view; NSColor *color; NSTabState state; NSView *firstResponder; TShelfView *tview; NSRect rect; } - (id)initWithTabType:(int)type; - (void)setLabel:(NSString *)labstr; - (NSString *)label; - (NSSize)sizeOfLabel:(NSString *)str; - (void)setView:(NSView *)v; - (NSView *)view; - (void)setColor:(NSColor *)clr; - (NSColor *)color; - (NSTabState)tabState; - (TShelfView *)tView; - (void)setTabState:(NSTabState)tabState; - (void)setTShelfView:(TShelfView *)tView; - (NSRect)tabRect; - (NSString *)truncatedLabelAtLenght:(float)lenght; - (void)setInitialFirstResponder:(NSView *)v; - (id)initialFirstResponder; - (void)drawLabelInRect:(NSRect)tabRect; - (void)drawImage:(NSImage *)image inRect:(NSRect)tabRect; @end #endif // TSHELF_VIEW_ITEM_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfViewItem.m0000644000175000001440000001155714751213523021402 0ustar multixusers/* TShelfViewItem.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "TShelfViewItem.h" #import "TShelfView.h" @implementation TShelfViewItem - (id)initWithTabType:(int)type { self = [super init]; if (self) { state = NSBackgroundTab; tabtype = type; } return self; } - (void)dealloc { RELEASE (label); RELEASE (view); RELEASE (color); RELEASE (labfont); [super dealloc]; } - (void)setLabel:(NSString *)labstr { ASSIGN (label, labstr); } - (NSString *)label { return label; } - (NSSize)sizeOfLabel:(NSString *)str { NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys: labfont, NSFontAttributeName, nil]; return [str sizeWithAttributes: attr]; } - (void)setView:(NSView *)v { ASSIGN (view, v); } - (NSView *)view { return view; } - (void)setColor:(NSColor *)clr { ASSIGN (color, clr); } - (NSColor *)color { return color; } - (NSTabState)tabState { return state; } - (TShelfView *)tView { return tview; } - (NSRect)tabRect { return rect; } - (void)setTabState:(NSTabState)tabState { state = tabState; } - (void)setTShelfView:(TShelfView *)tView { tview = tView; if (tabtype == FILES_TAB) { ASSIGN (labfont, [tview font]); } else { ASSIGN (labfont, [tview italicFont]); } } - (NSString *)truncatedLabelAtLenght:(float)lenght { NSString *cutname = nil; NSString *reststr = nil; NSString *dots; NSDictionary *attr; float w, cw, dotslenght; int i; cw = 0; attr = [NSDictionary dictionaryWithObjectsAndKeys: labfont, NSFontAttributeName, nil]; dots = @"..."; dotslenght = [dots sizeWithAttributes: attr].width; w = [label sizeWithAttributes: attr].width; if (w > lenght) { i = 0; while (cw <= (lenght - dotslenght)) { if (i == [label length]) { break; } cutname = [label substringToIndex: i]; reststr = [label substringFromIndex: i]; cw = [cutname sizeWithAttributes: attr].width; i++; } if ([cutname isEqual: label] == NO) { if ([reststr length] <= 3) { return label; } else { cutname = [cutname stringByAppendingString: dots]; } } else { return label; } } else { return label; } return cutname; } - (void)setInitialFirstResponder:(NSView *)v { firstResponder = v; } - (id)initialFirstResponder { return firstResponder; } - (void)drawLabelInRect:(NSRect)tabRect { NSRect lRect; NSRect fRect; NSDictionary *attr; NSString *string; float labw = [self sizeOfLabel: label].width; float maxw = tabRect.size.width; rect = tabRect; fRect = tabRect; lRect = tabRect; if (labw > (maxw - 10)) { string = [self truncatedLabelAtLenght: (maxw - 10)]; } else { string = label; } labw = [self sizeOfLabel: string].width; lRect.origin.x += (maxw - labw) / 2; lRect.size.width = labw; if (state == NSSelectedTab) { fRect.origin.y -= 1; fRect.size.height += 1; [[NSColor controlColor] set]; NSRectFill(fRect); } else if (state == NSBackgroundTab) { [[NSColor controlBackgroundColor] set]; NSRectFill(fRect); } else { [[NSColor controlBackgroundColor] set]; } attr = [NSDictionary dictionaryWithObjectsAndKeys: labfont, NSFontAttributeName, [NSColor blackColor], NSForegroundColorAttributeName, nil]; [string drawInRect: lRect withAttributes: attr]; } - (void)drawImage:(NSImage *)image inRect:(NSRect)tabRect { NSRect fRect; NSPoint p; rect = tabRect; fRect = tabRect; p = fRect.origin; p.x += 2; p.y += 4; if (state == NSSelectedTab) { fRect.origin.y -= 1; fRect.size.height += 1; [[NSColor controlColor] set]; NSRectFill(fRect); } else if (state == NSBackgroundTab) { [[NSColor controlBackgroundColor] set]; NSRectFill(fRect); } else { [[NSColor controlBackgroundColor] set]; } if (image) { [image compositeToPoint: p operation: NSCompositeSourceOver]; } } @end gworkspace-1.1.0/GWorkspace/TShelf/TShelfWin.h0000644000175000001440000000333414751213523020373 0ustar multixusers/* TShelfWin.h * * Copyright (C) 2003-2021 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TSHELF_WIN_H #define TSHELF_WIN_H #include #include #ifndef FILES_TAB #define FILES_TAB 0 #define DATA_TAB 1 #endif @class TShelfView; @interface TShelfWin : NSWindow { TShelfView *tView; BOOL autohide; BOOL autohidden; BOOL singleClickLaunch; } - (TShelfView *)shelfView; - (void)activate; - (void)deactivate; - (void)animateShowing; - (void)animateHiding; - (void)setAutohide:(BOOL)value; - (BOOL)autohide; - (BOOL)singleClickLaunch; - (void)setSingleClickLaunch:(BOOL)value; - (void)addTab; - (void)removeTab; - (void)renameTab; - (void)updateIcons; - (void)checkIconsAfterDotsFilesChange; - (void)checkIconsAfterHidingOfPaths:(NSArray *)hpaths; - (void)saveDefaults; @end #endif // TABBED_SHELF_WIN_H gworkspace-1.1.0/GWorkspace/TShelf/TShelfWin.m0000644000175000001440000003341014751214620020375 0ustar multixusers/* TShelfWin.m * * Copyright (C) 2003-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "TShelfWin.h" #import "TShelfView.h" #import "TShelfViewItem.h" #import "TShelfIconsView.h" #import "Dialogs/Dialogs.h" #define SHELF_HEIGHT 106 @implementation TShelfWin - (void)dealloc { RELEASE (tView); [super dealloc]; } - (id)init { float sizew = [[NSScreen mainScreen] frame].size.width; self = [super initWithContentRect: NSMakeRect(0, 0, sizew, SHELF_HEIGHT) styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO]; if (self) { NSUserDefaults *defaults; NSDictionary *tshelfDict; id entry; NSArray *tabsArr; TShelfViewItem *item; TShelfIconsView *view; NSUInteger i; [self setReleasedWhenClosed: NO]; [self setExcludedFromWindowsMenu: YES]; tView = [[TShelfView alloc] initWithFrame: [[self contentView] bounds]]; [self setContentView: tView]; defaults = [NSUserDefaults standardUserDefaults]; singleClickLaunch = [defaults boolForKey: @"singleclicklaunch"]; tshelfDict = [defaults objectForKey: @"tabshelf"]; if (tshelfDict == nil) { tshelfDict = [NSDictionary dictionary]; } entry = [tshelfDict objectForKey: @"auto_hide"]; autohide = (entry && [entry boolValue]); tabsArr = [tshelfDict objectForKey: @"tabs"]; if (tabsArr) { for (i = 0; i < [tabsArr count]; i++) { NSDictionary *dict = [tabsArr objectAtIndex: i]; NSString *label = [[dict allKeys] objectAtIndex: 0]; NSDictionary *tabDict = [dict objectForKey: label]; NSArray *iconsArr = [tabDict objectForKey: @"icons"]; NSNumber *iconsType = [tabDict objectForKey: @"iconstype"]; int itype; if (iconsType) { itype = [iconsType intValue]; } else { itype = FILES_TAB; } item = [[TShelfViewItem alloc] initWithTabType: itype]; [item setLabel: label]; view = [[TShelfIconsView alloc] initWithIconsDescription: iconsArr iconsType: itype lastView: ([label isEqual: @"last"] ? YES : NO)]; [view setFrame: NSMakeRect(0, 0, sizew, 80)]; [item setView: view]; [view setSingleClickLaunch: singleClickLaunch]; RELEASE (view); if ([label isEqual: @"last"]) { [tView setLastTabItem: item]; } else { [tView addTabItem: item]; } RELEASE (item); } } else { item = [[TShelfViewItem alloc] initWithTabType: FILES_TAB]; [item setLabel: @"last"]; view = [[TShelfIconsView alloc] initWithIconsDescription: nil iconsType: FILES_TAB lastView: YES]; [view setFrame: NSMakeRect(0, 0, sizew, 80)]; [item setView: view]; RELEASE (view); [tView setLastTabItem: item]; RELEASE (item); item = [[TShelfViewItem alloc] initWithTabType: FILES_TAB]; [item setLabel: @"Tab1"]; view = [[TShelfIconsView alloc] initWithIconsDescription: nil iconsType: FILES_TAB lastView: NO]; [view setFrame: NSMakeRect(0, 0, sizew, 80)]; [item setView: view]; RELEASE (view); [tView addTabItem: item]; RELEASE (item); item = [[TShelfViewItem alloc] initWithTabType: DATA_TAB]; [item setLabel: @"Pasteboard"]; view = [[TShelfIconsView alloc] initWithIconsDescription: nil iconsType: DATA_TAB lastView: NO]; [view setFrame: NSMakeRect(0, 0, sizew, 80)]; [item setView: view]; RELEASE (view); [tView addTabItem: item]; RELEASE (item); [self saveDefaults]; } } return self; } - (TShelfView *)shelfView { return tView; } - (void)activate { [self makeKeyAndOrderFront: nil]; } - (void)deactivate { [self orderOut: nil]; } - (void)animateShowing { if (([self isVisible] == NO) || (autohide == NO)) { return; } if (autohidden) { CREATE_AUTORELEASE_POOL(arp); int p = (int)(SHELF_HEIGHT / 10); int h = -SHELF_HEIGHT; [self disableFlushWindow]; while (1) { NSDate *date; h += p; [self setFrameOrigin: NSMakePoint(0, h)]; if (h >= 0) { break; } date = [NSDate dateWithTimeIntervalSinceNow: 0.01]; [[NSRunLoop currentRunLoop] runUntilDate: date]; } [self setFrameOrigin: NSMakePoint(0, 0)]; [self enableFlushWindow]; [self flushWindowIfNeeded]; RELEASE (arp); } autohidden = NO; } - (void)animateHiding { if (([self isVisible] == NO) || (autohide == NO)) { return; } if (autohidden == NO) { CREATE_AUTORELEASE_POOL(arp); int p = (int)(SHELF_HEIGHT / 10); int h = 0; [self disableFlushWindow]; while (1) { NSDate *date; h -= p; [self setFrameOrigin: NSMakePoint(0, h)]; if (h <= -SHELF_HEIGHT) { break; } date = [NSDate dateWithTimeIntervalSinceNow: 0.01]; [[NSRunLoop currentRunLoop] runUntilDate: date]; } [self setFrameOrigin: NSMakePoint(0, -SHELF_HEIGHT)]; [self enableFlushWindow]; [self flushWindowIfNeeded]; RELEASE (arp); } autohidden = YES; } - (void)setAutohide:(BOOL)value { autohide = value; if (autohide == NO) { [self setFrameOrigin: NSMakePoint(0, 0)]; autohidden = NO; } } - (BOOL)autohide { return autohide; } - (BOOL)singleClickLaunch { NSLog(@"TShelfWin - singleClickLaunch"); return singleClickLaunch; } - (void)setSingleClickLaunch:(BOOL)value { singleClickLaunch = value; [tView setSingleClickLaunch: singleClickLaunch]; } - (void)addTab { GWDialog *dialog; NSString *tabName; int itype; NSArray *items; TShelfViewItem *item; TShelfIconsView *view; BOOL duplicate; int result; int index; int i; if ([self isVisible] == NO) { return; } dialog = [[GWDialog alloc] initWithTitle: NSLocalizedString(@"Add Tab", @"") editText: @"" switchTitle: NSLocalizedString(@"pasteboard tab", @"")]; [dialog center]; [dialog makeKeyWindow]; [dialog orderFrontRegardless]; result = [dialog runModal]; [dialog release]; if (result != NSAlertDefaultReturn) { return; } tabName = [dialog getEditFieldText]; if ([tabName length] == 0) { NSString *msg = NSLocalizedString(@"No name supplied!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } items = [tView items]; duplicate = NO; for (i = 0; i < [items count]; i++) { item = [items objectAtIndex: i]; if ([[item label] isEqual: tabName]) { duplicate = YES; break; } } if (duplicate) { NSString *msg = NSLocalizedString(@"Duplicate tab name!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } itype = ([dialog switchButtonState] == NSOnState) ? DATA_TAB : FILES_TAB; item = [tView selectedTabItem]; index = [tView indexOfItem: item]; item = [[TShelfViewItem alloc] initWithTabType: itype]; [item setLabel: tabName]; view = [[TShelfIconsView alloc] initWithIconsDescription: nil iconsType: itype lastView: NO]; [view setFrame: NSMakeRect(0, 0, [[NSScreen mainScreen] frame].size.width, 80)]; [item setView: view]; RELEASE (view); [tView insertTabItem: item atIndex: (index + 1)]; [tView selectTabItem: item]; RELEASE (item); [self saveDefaults]; } - (void)removeTab { NSArray *items; TShelfViewItem *item; NSString *title, *msg, *buttstr; int result; if ([self isVisible] == NO) { return; } items = [tView items]; item = [tView selectedTabItem]; if (([items count] == 1) || (item == [tView lastTabItem])) { msg = NSLocalizedString(@"You can't remove the last tab!", @""); buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } title = NSLocalizedString(@"Remove Tab", @""); msg = NSLocalizedString(@"Are you sure that you want to remove the selected tab?", @""); buttstr = NSLocalizedString(@"Cancel", @""); result = NSRunAlertPanel(title, msg, NSLocalizedString(@"OK", @""), buttstr, NULL); if(result != NSAlertDefaultReturn) { return; } if ([tView removeTabItem: item] == NO) { msg = NSLocalizedString(@"You can't remove this tab!", @""); buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } [tView selectTabItem: [tView lastTabItem]]; [self saveDefaults]; } - (void)renameTab { GWDialog *dialog; NSString *oldName; NSString *tabName; NSArray *items; TShelfViewItem *item; BOOL duplicate; int result; int index; int i; if ([self isVisible] == NO) { return; } items = [tView items]; item = [tView selectedTabItem]; oldName = [item label]; index = [tView indexOfItem: item]; if (item == [tView lastTabItem]) { NSString *msg = NSLocalizedString(@"You can't rename this tab!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } dialog = [[GWDialog alloc] initWithTitle: NSLocalizedString(@"Rename Tab", @"") editText: oldName switchTitle: nil]; [dialog center]; [dialog makeKeyWindow]; [dialog orderFrontRegardless]; result = [dialog runModal]; [dialog release]; if(result != NSAlertDefaultReturn) { return; } tabName = [dialog getEditFieldText]; if ([tabName length] == 0) { NSString *msg = NSLocalizedString(@"No name supplied!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } duplicate = NO; for (i = 0; i < [items count]; i++) { TShelfViewItem *itm = [items objectAtIndex: i]; if ([[itm label] isEqual: tabName]) { duplicate = YES; break; } } if (duplicate) { NSString *msg = NSLocalizedString(@"Duplicate tab name!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(nil, msg, buttstr, nil, nil); return; } [item setLabel: tabName]; [tView selectTabItemAtIndex: index]; [self saveDefaults]; } - (void)updateIcons { NSArray *items = [tView items]; int i; for (i = 0; i < [items count]; i++) { [(TShelfIconsView *)[[items objectAtIndex: i] view] updateIcons]; } } - (void)checkIconsAfterDotsFilesChange { NSArray *items = [tView items]; int i; for (i = 0; i < [items count]; i++) { TShelfViewItem *item = [items objectAtIndex: i]; TShelfIconsView *iview = (TShelfIconsView *)[item view]; [iview checkIconsAfterDotsFilesChange]; } } - (void)checkIconsAfterHidingOfPaths:(NSArray *)hpaths { NSArray *items = [tView items]; int i; for (i = 0; i < [items count]; i++) { TShelfViewItem *item = [items objectAtIndex: i]; TShelfIconsView *iview = (TShelfIconsView *)[item view]; [iview checkIconsAfterHidingOfPaths: hpaths]; } } - (void)saveDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *tshelfDict = [NSMutableDictionary dictionary]; NSArray *items = [tView items]; NSMutableArray *tabsArr = [NSMutableArray array]; int i; for (i = 0; i < [items count]; i++) { TShelfViewItem *item = [items objectAtIndex: i]; NSString *label = [item label]; TShelfIconsView *iview = (TShelfIconsView *)[item view]; NSArray *iconsArr = [iview iconsDescription]; NSNumber *iconsType = [NSNumber numberWithInt: [iview iconsType]]; NSMutableDictionary *tdict = [NSMutableDictionary dictionary]; [tdict setObject: iconsArr forKey: @"icons"]; [tdict setObject: iconsType forKey: @"iconstype"]; [tabsArr addObject: [NSDictionary dictionaryWithObject: tdict forKey: label]]; } [tshelfDict setObject: tabsArr forKey: @"tabs"]; [tshelfDict setObject: [NSNumber numberWithBool: autohide] forKey: @"auto_hide"]; [defaults setObject: tshelfDict forKey: @"tabshelf"]; [defaults setBool: singleClickLaunch forKey: @"singleclicklaunch"]; } - (BOOL)canBecomeKeyWindow { return YES; } - (BOOL)canBecomeMainWindow { return YES; } @end gworkspace-1.1.0/GWorkspace/Thumbnailer/0000755000175000001440000000000014753472316017452 5ustar multixusersgworkspace-1.1.0/GWorkspace/Thumbnailer/GNUmakefile0000644000175000001440000000056613231754602021522 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # # subprojects # SUBPROJECTS = ImageThumbnailer -include GNUmakefile.preamble -include GNUmakefile.local -include $(GNUSTEP_MAKEFILES)/tool.make -include $(GNUSTEP_MAKEFILES)/service.make -include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.local.service -include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Thumbnailer/GNUmakefile.preamble0000644000175000001440000000072113251572120023274 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search #ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += thumbnailer_TOOL_LIBS += $(GUI_LIBS) $(SYSTEM_LIBS) gworkspace-1.1.0/GWorkspace/Thumbnailer/GWThumbnailer.h0000644000175000001440000000414614751213523022327 0ustar multixusers/* GWThumbnailer.h * * Copyright (C) 2003-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #define TMBMAX (64.0) #define RESZLIM 4 @protocol TMBProtocol - (BOOL)canProvideThumbnailForPath:(NSString *)path; - (NSData *)makeThumbnailForPath:(NSString *)path; - (NSString *)fileNameExtension; - (NSString *)description; @end @interface Thumbnailer: NSObject { NSMutableArray *thumbnailers; NSMutableDictionary *extProviders; id current; NSString *thumbnailDir; NSString *dictPath; NSMutableDictionary *thumbsDict; long thumbref; NSTimer *timer; NSConnection *conn; NSFileManager *fm; NSLock *dictLock; NSMutableArray *pathsInProcessing; } + (Thumbnailer *)sharedThumbnailer; - (void)writeDictToFile; - (void)loadThumbnailers; - (BOOL)addThumbnailer:(id)tmb; - (id)thumbnailerForPath:(NSString *)path; - (NSString *)nextThumbName; - (void)checkThumbnails:(id)sender; - (BOOL)registerThumbnailData:(NSData *)data forPath:(NSString *)path nameExtension:(NSString *)ext; - (BOOL)removeThumbnailForPath:(NSString *)path; - (void)makeThumbnails:(NSString*)path; - (void)removeThumbnails:(NSString*)path; - (NSArray *)bundlesWithExtension:(NSString *)extension inDirectory:(NSString *)dirpath; @end gworkspace-1.1.0/GWorkspace/Thumbnailer/GWThumbnailer.m0000644000175000001440000003243614751213523022337 0ustar multixusers/* GWThumbnailer.m * * Copyright (C) 2003-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #import #import #import "GWThumbnailer.h" static Thumbnailer *sharedThumbnailerInstance = nil; static NSInteger countInstances = 0; static NSString *GWThumbnailsDidChangeNotification = @"GWThumbnailsDidChangeNotification"; @implementation Thumbnailer /* A singleton that can be released. However, once one existance exists, all instances will be the same object. This way we can insure that only one Thumbnail dictionary exists in memory */ + (Thumbnailer *)sharedThumbnailer { if (nil == sharedThumbnailerInstance) { sharedThumbnailerInstance = [[Thumbnailer allocWithZone:NULL] init]; countInstances = 1; } else { countInstances++; } return sharedThumbnailerInstance; } - (void)dealloc { countInstances--; if (countInstances < 0) NSLog(@"Something went wrong!"); if (countInstances == 0) { NSLog(@"Last thumbnailer instance, dealloc'ing"); [[NSNotificationCenter defaultCenter] removeObserver: self]; if (timer && [timer isValid]) [timer invalidate]; RELEASE (thumbnailers); RELEASE (extProviders); RELEASE (thumbnailDir); RELEASE (dictPath); RELEASE (thumbsDict); DESTROY (conn); DESTROY (dictLock); RELEASE (pathsInProcessing); sharedThumbnailerInstance = nil; [super dealloc]; } } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; BOOL isdir; if (!dictLock) dictLock = [[NSLock alloc] init]; pathsInProcessing = [[NSMutableArray alloc] init]; fm = [NSFileManager defaultManager]; extProviders = [NSMutableDictionary new]; [self loadThumbnailers]; entry = [defaults objectForKey: @"thumbref"]; if (entry) { thumbref = [(NSNumber *)entry longValue]; } else { thumbref = 0; } thumbnailDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; thumbnailDir = [thumbnailDir stringByAppendingPathComponent: @"Thumbnails"]; RETAIN (thumbnailDir); if (([fm fileExistsAtPath: thumbnailDir isDirectory: &isdir] && isdir) == NO) { if ([fm createDirectoryAtPath: thumbnailDir attributes: nil] == NO) { NSLog(@"no thumbnails directory"); return nil; } } ASSIGN (dictPath, [thumbnailDir stringByAppendingPathComponent: @"thumbnails.plist"]); if ([fm fileExistsAtPath: dictPath]) { NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; if (dict) { thumbsDict = [dict mutableCopy]; } else { thumbsDict = [NSMutableDictionary new]; } } else { thumbsDict = [NSMutableDictionary new]; } [self writeDictToFile]; /* FIXME: this could be a problem with different instances for View timer = [NSTimer scheduledTimerWithTimeInterval: 10.0 target: self selector: @selector(checkThumbnails:) userInfo: nil repeats: YES]; */ } return self; } - (void)writeDictToFile { [dictLock lock]; NSLog(@"(%d) writing to: %@", (int)countInstances, dictPath); [thumbsDict writeToFile: dictPath atomically: YES]; [dictLock unlock]; } - (void)loadThumbnailers { NSString *bundlesDir; NSEnumerator *enumerator; NSMutableArray *bundlesPaths; NSArray *bPaths; NSUInteger i; RELEASE (thumbnailers); thumbnailers = [NSMutableArray new]; bundlesPaths = [NSMutableArray array]; bPaths = [self bundlesWithExtension: @"thumb" inDirectory: [[NSBundle mainBundle] resourcePath]]; [bundlesPaths addObjectsFromArray: bPaths]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; [bundlesPaths addObjectsFromArray: [self bundlesWithExtension: @"thumb" inDirectory: bundlesDir]]; } for (i = 0; i < [bundlesPaths count]; i++) { NSString *bpath = [bundlesPaths objectAtIndex: i]; NSBundle *bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; if (principalClass) { if ([principalClass conformsToProtocol: @protocol(TMBProtocol)]) { id tmb = [[principalClass alloc] init]; [self addThumbnailer: tmb]; RELEASE ((id)tmb); } } } } } - (BOOL)addThumbnailer:(id)tmb { NSString *description = [tmb description]; BOOL found = NO; NSUInteger i = 0; if ([tmb conformsToProtocol: @protocol(TMBProtocol)]) { for (i = 0; i < [thumbnailers count]; i++) { id thumb = [thumbnailers objectAtIndex: i]; if ([[thumb description] isEqual: description]) { found = YES; break; } } if (found == NO) { [thumbnailers addObject: tmb]; return YES; } } return NO; } - (id)thumbnailerForPath:(NSString *)path { NSUInteger i; for (i = 0; i < [thumbnailers count]; i++) { id thumb = [thumbnailers objectAtIndex: i]; if ([thumb canProvideThumbnailForPath: path]) { return thumb; } } return nil; } - (void)checkThumbnails:(id)sender { if (thumbsDict && [thumbsDict count]) { NSArray *paths = RETAIN ([thumbsDict allKeys]); NSMutableArray *deleted = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; NSString *tname = [thumbsDict objectForKey: path]; if ([fm fileExistsAtPath: path] == NO) { NSString *tpath = [thumbnailDir stringByAppendingPathComponent: tname]; if ([fm fileExistsAtPath: tpath]) { [fm removeFileAtPath: tpath handler: nil]; } [deleted addObject: path]; [thumbsDict removeObjectForKey: path]; } } RELEASE (paths); if ([deleted count]) { NSMutableDictionary *info = [NSMutableDictionary dictionary]; [info setObject: deleted forKey: @"deleted"]; [info setObject: [NSArray array] forKey: @"created"]; [self writeDictToFile]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: GWThumbnailsDidChangeNotification object: nil userInfo: info]; } } } - (NSString *)nextThumbName { thumbref++; if (thumbref >= (LONG_MAX - 1)) { thumbref = 0; } return [NSString stringWithFormat: @"%lx", thumbref]; } - (void)_makeThumbnails:(NSString *)path { NSData *data; NSMutableArray *added; BOOL isdir; NSUInteger i; NSAutoreleasePool *arp; arp = [NSAutoreleasePool new]; NSLog(@"_makeThumbnails (%u): %@", (int)countInstances, path); added = [NSMutableArray array]; if ([fm fileExistsAtPath: path isDirectory: &isdir] && isdir) { NSArray *contents = [fm directoryContentsAtPath: path]; for (i = 0; i < [contents count]; i++) { NSString *fname = [contents objectAtIndex: i]; NSString *fullPath = [path stringByAppendingPathComponent: fname]; id tmb = [self thumbnailerForPath: fullPath]; if (tmb) { data = [tmb makeThumbnailForPath: fullPath]; if (data && [self registerThumbnailData: data forPath: fullPath nameExtension: [tmb fileNameExtension]]) { [added addObject: fullPath]; } } } } if ([added count]) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *info = [NSMutableDictionary dictionary]; [defaults setObject: [NSNumber numberWithLong: thumbref] forKey: @"thumbref"]; [defaults synchronize]; [info setObject: added forKey: @"created"]; [self writeDictToFile]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: GWThumbnailsDidChangeNotification object: nil userInfo: info]; } [pathsInProcessing removeObject:path]; [arp drain]; } - (void)makeThumbnails:(NSString *)path { if ([pathsInProcessing containsObject:path]) return; [pathsInProcessing addObject:path]; [NSThread detachNewThreadSelector:@selector(_makeThumbnails:) toTarget:self withObject:path]; } - (void)_removeThumbnails:(NSString *)path { NSMutableArray *deleted; BOOL isdir; NSUInteger i; NSAutoreleasePool *arp; arp = [NSAutoreleasePool new]; if ((thumbsDict == nil) || ([thumbsDict count] == 0)) { return; } deleted = [NSMutableArray array]; if ([fm fileExistsAtPath: path isDirectory: &isdir]) { if (isdir) { NSArray *contents = [fm directoryContentsAtPath: path]; for (i = 0; i < [contents count]; i++) { NSString *fname = [contents objectAtIndex: i]; NSString *fullPath = [path stringByAppendingPathComponent: fname]; if ([self removeThumbnailForPath: fullPath]) { [deleted addObject: fullPath]; } } } else { if ([self removeThumbnailForPath: path]) { [deleted addObject: path]; } } } if ([deleted count]) { NSMutableDictionary *info = [NSMutableDictionary dictionary]; [info setObject: deleted forKey: @"deleted"]; [self writeDictToFile]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: GWThumbnailsDidChangeNotification object: nil userInfo: info]; } [pathsInProcessing removeObject:path]; [arp drain]; } - (void)removeThumbnails:(NSString *)path { if ([pathsInProcessing containsObject:path]) return; [pathsInProcessing addObject:path]; [NSThread detachNewThreadSelector:@selector(_removeThumbnails:) toTarget:self withObject:path]; } - (BOOL)registerThumbnailData:(NSData *)data forPath:(NSString *)path nameExtension:(NSString *)ext { if (data && [data length]) { NSString *tname; NSString *tpath; tname = [self nextThumbName]; tname = [tname stringByAppendingPathExtension: ext]; tpath = [thumbnailDir stringByAppendingPathComponent: tname]; if ([data writeToFile: tpath atomically: YES]) { if ([[thumbsDict allKeys] containsObject: path]) { NSString *oldtname = [thumbsDict objectForKey: path]; NSString *oldtpath = [thumbnailDir stringByAppendingPathComponent: oldtname]; if ([fm fileExistsAtPath: oldtpath]) { [fm removeFileAtPath: oldtpath handler: nil]; } } [thumbsDict setObject: tname forKey: path]; return YES; } else { return NO; } } return NO; } - (BOOL)removeThumbnailForPath:(NSString *)path { NSArray *keys = RETAIN ([thumbsDict allKeys]); if ([keys containsObject: path]) { NSString *tname = [thumbsDict objectForKey: path]; NSString *tpath = [thumbnailDir stringByAppendingPathComponent: tname]; if ([fm fileExistsAtPath: tpath]) { [fm removeFileAtPath: tpath handler: nil]; } [thumbsDict removeObjectForKey: path]; RELEASE (keys); return YES; } RELEASE (keys); return NO; } - (NSArray *)bundlesWithExtension:(NSString *)extension inDirectory:(NSString *)dirpath { NSMutableArray *bundleList = [NSMutableArray array]; NSEnumerator *enumerator; NSString *dir; BOOL isDir; if ((([fm fileExistsAtPath: dirpath isDirectory: &isDir]) && isDir) == NO) { return nil; } enumerator = [[fm directoryContentsAtPath: dirpath] objectEnumerator]; while ((dir = [enumerator nextObject])) { if ([[dir pathExtension] isEqualToString: extension]) { [bundleList addObject: [dirpath stringByAppendingPathComponent: dir]]; } } return bundleList; } @end gworkspace-1.1.0/GWorkspace/Thumbnailer/ImageThumbnailer/0000755000175000001440000000000014753472316022667 5ustar multixusersgworkspace-1.1.0/GWorkspace/Thumbnailer/ImageThumbnailer/GNUmakefile0000644000175000001440000000060213231754602024726 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = ImageThumbnailer BUNDLE_EXTENSION = .thumb OBJCFLAGS += -Wall # # We are creating a bundle # ImageThumbnailer_OBJC_FILES = ImageThumbnailer.m ImageThumbnailer_PRINCIPAL_CLASS = ImageThumbnailer -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/GWorkspace/Thumbnailer/ImageThumbnailer/GNUmakefile.preamble0000644000175000001440000000075613251572120026521 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += LIBRARIES_DEPEND_UPON += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) gworkspace-1.1.0/GWorkspace/Thumbnailer/ImageThumbnailer/ImageThumbnailer.h0000644000175000001440000000210514751213523026242 0ustar multixusers/* ImageThumbnailer.h * * Copyright (C) 2003-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "GWThumbnailer.h" @interface ImageThumbnailer: NSObject { } @end gworkspace-1.1.0/GWorkspace/Thumbnailer/ImageThumbnailer/ImageThumbnailer.m0000644000175000001440000001415114751213523026253 0ustar multixusers/* ImageThumbnailer.m * * Copyright (C) 2003-2020 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #include #import "ImageThumbnailer.h" #define MIX_LIM 16 @implementation ImageThumbnailer - (void)dealloc { [super dealloc]; } - (BOOL)canProvideThumbnailForPath:(NSString *)path { NSString *ext = [[path pathExtension] lowercaseString]; return (ext && [[NSImage imageFileTypes] containsObject: ext]); } - (NSData *)makeThumbnailForPath:(NSString *)path { CREATE_AUTORELEASE_POOL(arp); NSImage *image = [[NSImage alloc] initWithContentsOfFile: path]; if (image && [image isValid]) { NSData *tiffData; NSEnumerator *repEnum; NSBitmapImageRep *srcRep; NSInteger srcSpp; NSImageRep *imgRep; repEnum = [[image representations] objectEnumerator]; srcRep = nil; imgRep = nil; while (srcRep == nil && (imgRep = [repEnum nextObject])) { if ([imgRep isKindOfClass:[NSBitmapImageRep class]]) srcRep = (NSBitmapImageRep *)imgRep; } if (nil == srcRep) return nil; srcSpp = [srcRep samplesPerPixel]; if (([srcRep pixelsWide] <= TMBMAX) && ([srcRep pixelsHigh]<= TMBMAX) && ([srcRep pixelsWide] >= (TMBMAX - RESZLIM)) && ([srcRep pixelsHigh] >= (TMBMAX - RESZLIM))) { tiffData = [srcRep TIFFRepresentation]; RETAIN (tiffData); RELEASE (image); RELEASE (arp); return AUTORELEASE (tiffData); } else { NSInteger dstSizeW, dstSizeH; float fact = ([srcRep pixelsWide] >= [srcRep pixelsHigh]) ? ([srcRep pixelsWide] / TMBMAX) : ([srcRep pixelsHigh] / TMBMAX); float xRatio; float yRatio; NSBitmapImageRep *dstRep; unsigned x, y; NSInteger i; NSData *tiffData; NSInteger srcSizeW; NSInteger srcSizeH; srcSizeW = [srcRep pixelsWide]; srcSizeH = [srcRep pixelsHigh]; dstSizeW = (NSInteger)floor([srcRep pixelsWide] / fact + 0.5); dstSizeH = (NSInteger)floor([srcRep pixelsHigh] / fact + 0.5); xRatio = (float)[srcRep pixelsWide] / (float)dstSizeW; yRatio = (float)[srcRep pixelsHigh] / (float)dstSizeH; dstRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:dstSizeW pixelsHigh:dstSizeH bitsPerSample:[srcRep bitsPerSample] samplesPerPixel:[srcRep samplesPerPixel] hasAlpha:[srcRep hasAlpha] isPlanar:[srcRep isPlanar] colorSpaceName:[srcRep colorSpaceName] bytesPerRow:0 bitsPerPixel:0]; for (y = 0; y < dstSizeH; y++) { for (x = 0; x < dstSizeW; x++) { register NSInteger x0, y0; register float xDiff, yDiff; float xFloat, yFloat; NSInteger x1, y1; int xStep, yStep; NSUInteger srcPixel1[5]; NSUInteger srcPixel2[5]; NSUInteger srcPixel3[5]; NSUInteger srcPixel4[5]; NSUInteger destPixel[5]; // we use integer part of the ratio, so that we can set the next pixel to at least one apart xStep = floorf(xRatio); yStep = floorf(yRatio); if (xStep == 0) xStep = 1; if (yStep == 0) yStep = 1; xFloat = (float)x * xRatio; yFloat = (float)y * yRatio; x0 = (NSInteger)floorf(xFloat); y0 = (NSInteger)floorf(yFloat); x1 = x0 + xStep; y1 = y0 + yStep; // these are the weight w and h, normalized to the distance 1 : x1-x0 xDiff = (xFloat - (float)x0)/(float)xStep; yDiff = (yFloat - (float)y0)/(float)yStep; if (x1 >= srcSizeW ) { x1 = srcSizeW-1; xDiff = 0; } if (y1 >= srcSizeH ) { y1 = srcSizeH-1; yDiff = 0; } [srcRep getPixel: srcPixel1 atX:x0 y:y0]; [srcRep getPixel: srcPixel2 atX:x1 y:y0]; [srcRep getPixel: srcPixel3 atX:x0 y:y1]; [srcRep getPixel: srcPixel4 atX:x1 y:y1]; destPixel[0] = 0; destPixel[1] = 0; destPixel[2] = 0; destPixel[3] = 0; destPixel[4] = 0; for (i = 0; i < srcSpp; i++) { destPixel[i] = \ (NSUInteger)(srcPixel1[i]*(1-xDiff)*(1-yDiff) + \ srcPixel2[i]*xDiff*(1-yDiff) + \ srcPixel3[i]*yDiff*(1-xDiff) + \ srcPixel4[i]*xDiff*yDiff); } [dstRep setPixel: destPixel atX: x y:y]; } } tiffData = [dstRep TIFFRepresentation]; RETAIN (tiffData); RELEASE (image); RELEASE (dstRep); RELEASE (arp); return AUTORELEASE (tiffData); } } else { NSLog(@"Invalid image: %@", path); } RELEASE (image); RELEASE (arp); return nil; } - (NSString *)fileNameExtension { return @"tiff"; } - (NSString *)description { return @"Images Thumbnailer"; } @end gworkspace-1.1.0/GWorkspace/Thumbnailer/thumbnailerInfo.plist0000644000175000001440000000160613214346546023654 0ustar multixusers NSServices = ( { NSPortName = Thumbnailer; NSMessage = makeThumbnail; NSSendTypes=(NSFilenamesPboardType); NSMenuItem = { default = "Thumbnails/Make thumbnail(s)"; English = "Thumbnails/Make thumbnail(s)"; Italian = "Thumbnails/Crea thumbnail"; German = "Thumbnails/Thumbnail(s) anlegen"; }; }, { NSPortName = Thumbnailer; NSMessage = removeThumbnail; NSSendTypes=(NSFilenamesPboardType); NSMenuItem = { default = "Thumbnails/Remove thumbnail(s)"; English = "Thumbnails/Remove thumbnail(s)"; Italian = "Thumbnails/Rimuovi thumbnail"; German = "Thumbnails/Thumbnail(s) entfernen"; }; }, { NSPortName = Thumbnailer; NSFilter = thumbnailData; NSSendTypes=(NSFilenamesPboardType); NSReturnTypes=(NSTIFFPboardType); } ); gworkspace-1.1.0/GWorkspace/WorkspaceApplication.m0000644000175000001440000010543614751213523021500 0ustar multixusers/* WorkspaceApplication.m * * Copyright (C) 2006-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2006 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "GWorkspace.h" #import "GWFunctions.h" #import "FSNodeRep.h" #import "FSNFunctions.h" #import "GWorkspace.h" #import "GWDesktopManager.h" #import "Dock.h" #import "GWViewersManager.h" #import "Operation.h" #import "StartAppWin.h" @implementation GWorkspace (WorkspaceApplication) - (BOOL)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files tag:(NSInteger *)tag { if (loggingout == NO) { NSMutableDictionary *opdict = [NSMutableDictionary dictionary]; if (operation != nil) [opdict setObject: operation forKey: @"operation"]; else NSLog(@"performFileOperation: operation can't be nil"); if (operation != nil) [opdict setObject: source forKey: @"source"]; else NSLog(@"performFileOperation: source is nil"); if (destination == nil && [operation isEqualToString:NSWorkspaceRecycleOperation]) destination = [self trashPath]; if (destination != nil) [opdict setObject: destination forKey: @"destination"]; if (files != nil) [opdict setObject: files forKey: @"files"]; [fileOpsManager performOperation: opdict]; *tag = 0; return YES; } else { NSRunAlertPanel(nil, NSLocalizedString(@"GWorkspace is logging out!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } return NO; } - (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath { FSNode *node = [FSNode nodeWithPath: fullPath]; if (node && [node isValid]) { FSNode *base; if ((rootFullpath == nil) || ([rootFullpath length] == 0)) { base = [FSNode nodeWithPath: path_separator()]; } else { base = [FSNode nodeWithPath: rootFullpath]; } if (base && [base isValid]) { if (([base isDirectory] == NO) || [base isPackage]) { return NO; } [vwrsManager selectRepOfNode: node inViewerWithBaseNode: base]; return YES; } } return NO; } - (int)extendPowerOffBy:(int)requested { int req = (int)(requested / 1000); int ret; if (req > 0) { ret = (req < maxLogoutDelay) ? req : maxLogoutDelay; } else { ret = 0; } logoutDelay += ret; if (logoutTimer && [logoutTimer isValid]) { NSTimeInterval fireInterval = ([[logoutTimer fireDate] timeIntervalSinceNow] + ret); [logoutTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: fireInterval]]; } return (ret * 1000); } - (NSArray *)launchedApplications { NSMutableArray *launched = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [launchedApps count]; i++) { [launched addObject: [[launchedApps objectAtIndex: i] appInfo]]; } return [launched makeImmutableCopyOnFail: NO]; } - (NSDictionary *)activeApplication { if (activeApplication != nil) { return [activeApplication appInfo]; } return nil; } - (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appname andDeactivate:(BOOL)flag { NSString *appPath, *appName; GWLaunchedApp *app; id application; if (loggingout) { NSRunAlertPanel(nil, NSLocalizedString(@"GWorkspace is logging out!", @""), NSLocalizedString(@"Ok", @""), nil, nil); return NO; } if (appname == nil) { NSString *ext = [[fullPath pathExtension] lowercaseString]; appname = [ws getBestAppInRole: nil forExtension: ext]; if (appname == nil) { appname = defEditor; } } [self applicationName: &appName andPath: &appPath forName: appname]; app = [self launchedAppWithPath: appPath andName: appName]; if (app == nil) { NSArray *args = [NSArray arrayWithObjects: @"-GSFilePath", fullPath, nil]; return [self launchApplication: appname arguments: args]; } else { NSDate *delay = [NSDate dateWithTimeIntervalSinceNow: 0.1]; /* * If we are opening many files together and our app is a wrapper, * we must wait a little for the last launched task to terminate. * Else we'd end waiting two seconds in -connectApplication. */ [[NSRunLoop currentRunLoop] runUntilDate: delay]; application = [app application]; if (application == nil) { NSArray *args = [NSArray arrayWithObjects: @"-GSFilePath", fullPath, nil]; [self applicationTerminated: app]; return [self launchApplication: appname arguments: args]; } else { NS_DURING { if (flag == NO) { [application application: NSApp openFileWithoutUI: fullPath]; } else { [application application: NSApp openFile: fullPath]; } } NS_HANDLER { [self applicationTerminated: app]; NSWarnLog(@"Failed to contact '%@' to open file", appName); return NO; } NS_ENDHANDLER } } if (flag) { [NSApp deactivate]; } return YES; } - (BOOL)launchApplication:(NSString *)appname showIcon:(BOOL)showIcon autolaunch:(BOOL)autolaunch { NSString *appPath, *appName; GWLaunchedApp *app; id application; NSArray *args = nil; if (loggingout) { NSRunAlertPanel(nil, NSLocalizedString(@"GWorkspace is logging out!", @""), NSLocalizedString(@"Ok", @""), nil, nil); return NO; } [self applicationName: &appName andPath: &appPath forName: appname]; app = [self launchedAppWithPath: appPath andName: appName]; if (app == nil) { if (autolaunch) { args = [NSArray arrayWithObjects: @"-autolaunch", @"YES", nil]; } return [self launchApplication: appname arguments: args]; } else { application = [app application]; if (application == nil) { [self applicationTerminated: app]; if (autolaunch) { args = [NSArray arrayWithObjects: @"-autolaunch", @"YES", nil]; } return [self launchApplication: appname arguments: args]; } else { [application activateIgnoringOtherApps: YES]; } } return YES; } - (BOOL)openTempFile:(NSString *)fullPath { NSString *ext = [[fullPath pathExtension] lowercaseString]; NSString *name = [ws getBestAppInRole: nil forExtension: ext]; NSString *appPath, *appName; GWLaunchedApp *app; id application; if (loggingout) { NSRunAlertPanel(nil, NSLocalizedString(@"GWorkspace is logging out!", @""), NSLocalizedString(@"Ok", @""), nil, nil); return NO; } if (name == nil) { NSWarnLog(@"No known applications for file extension '%@'", ext); return NO; } [self applicationName: &appName andPath: &appPath forName: name]; app = [self launchedAppWithPath: appPath andName: appName]; if (app == nil) { NSArray *args = [NSArray arrayWithObjects: @"-GSTempPath", fullPath, nil]; return [self launchApplication: name arguments: args]; } else { application = [app application]; if (application == nil) { NSArray *args = [NSArray arrayWithObjects: @"-GSTempPath", fullPath, nil]; [self applicationTerminated: app]; return [self launchApplication: name arguments: args]; } else { NS_DURING { [application application: NSApp openTempFile: fullPath]; } NS_HANDLER { [self applicationTerminated: app]; NSWarnLog(@"Failed to contact '%@' to open temp file", appName); return NO; } NS_ENDHANDLER } } [NSApp deactivate]; return YES; } @end @implementation GWorkspace (Applications) - (void)initializeWorkspace { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; autoLogoutDelay = [defaults integerForKey: @"GSAutoLogoutDelay"]; if (autoLogoutDelay == 0) { autoLogoutDelay = 120; } maxLogoutDelay = [defaults integerForKey: @"GSMaxLogoutDelay"]; if (autoLogoutDelay == 0) { maxLogoutDelay = 30; } wsnc = [ws notificationCenter]; [wsnc addObserver: self selector: @selector(appWillLaunch:) name: NSWorkspaceWillLaunchApplicationNotification object: nil]; [wsnc addObserver: self selector: @selector(appDidLaunch:) name: NSWorkspaceDidLaunchApplicationNotification object: nil]; [wsnc addObserver: self selector: @selector(appDidTerminate:) name: NSWorkspaceDidTerminateApplicationNotification object: nil]; [wsnc addObserver: self selector: @selector(appDidBecomeActive:) name: NSApplicationDidBecomeActiveNotification object: nil]; [wsnc addObserver: self selector: @selector(appDidResignActive:) name: NSApplicationDidResignActiveNotification object: nil]; [wsnc addObserver: self selector: @selector(appDidHide:) name: NSApplicationDidHideNotification object: nil]; [wsnc addObserver: self selector: @selector(appDidUnhide:) name: NSApplicationDidUnhideNotification object: nil]; [self checkLastRunningApps]; logoutTimer = nil; logoutDelay = 0; loggingout = NO; } - (void)applicationName:(NSString **)appName andPath:(NSString **)appPath forName:(NSString *)name { *appName = [[name lastPathComponent] stringByDeletingPathExtension]; *appPath = [ws fullPathForApplication: *appName]; } - (BOOL)launchApplication:(NSString *)appname arguments:(NSArray *)args { NSString *appPath, *appName; NSTask *task; GWLaunchedApp *app; NSString *path; NSDictionary *userinfo; NSString *host; path = [ws locateApplicationBinary: appname]; if (path == nil) { return NO; } /* * Try to ensure that apps we launch display in this workspace * ie they have the same -NSHost specification. */ host = [[NSUserDefaults standardUserDefaults] stringForKey: @"NSHost"]; if (host != nil) { NSHost *h = [NSHost hostWithName: host]; if ([h isEqual: [NSHost currentHost]] == NO) { if ([args containsObject: @"-NSHost"] == NO) { NSMutableArray *a; if (args == nil) { a = [NSMutableArray arrayWithCapacity: 2]; } else { a = AUTORELEASE ([args mutableCopy]); } [a insertObject: @"-NSHost" atIndex: 0]; [a insertObject: host atIndex: 1]; args = a; } } } [self applicationName: &appName andPath: &appPath forName: appname]; if (appPath == nil) { [ws findApplications]; [self applicationName: &appName andPath: &appPath forName: appname]; } if (appPath == nil && [appname isAbsolutePath] == YES) { appPath = appname; } userinfo = [NSDictionary dictionaryWithObjectsAndKeys: appName, @"NSApplicationName", appPath, @"NSApplicationPath", nil]; [wsnc postNotificationName: NSWorkspaceWillLaunchApplicationNotification object: ws userInfo: userinfo]; task = [NSTask launchedTaskWithLaunchPath: path arguments: args]; if (task == nil) { return NO; } app = [GWLaunchedApp appWithApplicationPath: appPath applicationName: appName launchedTask: task]; if (app) { [launchedApps addObject: app]; return YES; } return NO; } - (void)appWillLaunch:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *path = [info objectForKey: @"NSApplicationPath"]; NSString *name = [info objectForKey: @"NSApplicationName"]; if (path && name) { [[dtopManager dock] appWillLaunch: path appName: name]; GWDebugLog(@"appWillLaunch: \"%@\" %@", name, path); } else { GWDebugLog(@"appWillLaunch: unknown application!"); } } - (void)appDidLaunch:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *name = [info objectForKey: @"NSApplicationName"]; NSString *path = [info objectForKey: @"NSApplicationPath"]; NSNumber *ident = [info objectForKey: @"NSApplicationProcessIdentifier"]; GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; if (app) { [app setIdentifier: ident]; } else { /* * if launched by an other process */ app = [GWLaunchedApp appWithApplicationPath: path applicationName: name processIdentifier: ident checkRunning: NO]; if (app && [app application]) { [launchedApps addObject: app]; } } if (app && [app application]) { [[dtopManager dock] appDidLaunch: path appName: name]; GWDebugLog(@"\"%@\" appDidLaunch (%@)", name, path); } } - (void)appDidTerminate:(NSNotification *)notif { /* * we do nothing here because we will know that the app has terminated * from the connection. */ } - (void)appDidBecomeActive:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *name = [info objectForKey: @"NSApplicationName"]; NSString *path = [info objectForKey: @"NSApplicationPath"]; GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; if (app) { NSUInteger i; for (i = 0; i < [launchedApps count]; i++) { GWLaunchedApp *a = [launchedApps objectAtIndex: i]; [a setActive: (a == app)]; } activeApplication = app; GWDebugLog(@"\"%@\" appDidBecomeActive", name); } else { activeApplication = nil; GWDebugLog(@"appDidBecomeActive: \"%@\" unknown running application.", name); } } - (void)appDidResignActive:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *name = [info objectForKey: @"NSApplicationName"]; NSString *path = [info objectForKey: @"NSApplicationPath"]; GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; if (app) { [app setActive: NO]; if (app == activeApplication) { activeApplication = nil; } } else { GWDebugLog(@"appDidResignActive: \"%@\" unknown running application.", name); } } - (void)activateAppWithPath:(NSString *)path andName:(NSString *)name { GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; // if (app && ([app isActive] == NO)) { if (app) { [app activateApplication]; } } - (void)appDidHide:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *name = [info objectForKey: @"NSApplicationName"]; NSString *path = [info objectForKey: @"NSApplicationPath"]; GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; GWDebugLog(@"appDidHide: %@", name); if (app) { [app setHidden: YES]; [[dtopManager dock] appDidHide: name]; } else { GWDebugLog(@"appDidHide: \"%@\" unknown running application.", name); } } - (void)appDidUnhide:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSString *name = [info objectForKey: @"NSApplicationName"]; NSString *path = [info objectForKey: @"NSApplicationPath"]; GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; if (app) { [app setHidden: NO]; [[dtopManager dock] appDidUnhide: name]; GWDebugLog(@"\"%@\" appDidUnhide", name); } else { GWDebugLog(@"appDidUnhide: \"%@\" unknown running application.", name); } } - (void)unhideAppWithPath:(NSString *)path andName:(NSString *)name { GWLaunchedApp *app = [self launchedAppWithPath: path andName: name]; if (app && [app isHidden]) { [app unhideApplication]; } } - (void)applicationTerminated:(GWLaunchedApp *)app { NSLog(@"WorkspaceApplication applicationTerminated: %@", app); if (app == activeApplication) { activeApplication = nil; } [[dtopManager dock] appTerminated: [app name]]; GWDebugLog(@"\"%@\" applicationTerminated", [app name]); [launchedApps removeObject: app]; if (loggingout && ([launchedApps count] == 1)) { GWLaunchedApp *app = [launchedApps objectAtIndex: 0]; if ([[app name] isEqual: gwProcessName]) { [NSApp terminate: self]; } } } - (GWLaunchedApp *)launchedAppWithPath:(NSString *)path andName:(NSString *)name { if ((path != nil) && (name != nil)) { NSUInteger i; for (i = 0; i < [launchedApps count]; i++) { GWLaunchedApp *app = [launchedApps objectAtIndex: i]; if (([[app path] isEqual: path]) && ([[app name] isEqual: name])) { return app; } } } return nil; } - (NSArray *)storedAppInfo { NSDictionary *runningInfo = nil; NSDictionary *apps = nil; if ([storedAppinfoLock tryLock] == NO) { unsigned sleeps = 0; if ([[storedAppinfoLock lockDate] timeIntervalSinceNow] < -20.0) { NS_DURING { [storedAppinfoLock breakLock]; } NS_HANDLER { NSLog(@"Unable to break lock %@ ... %@", storedAppinfoLock, localException); } NS_ENDHANDLER } for (sleeps = 0; sleeps < 10; sleeps++) { if ([storedAppinfoLock tryLock] == YES) { break; } sleeps++; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; } if (sleeps >= 10) { NSLog(@"Unable to obtain lock %@", storedAppinfoLock); return nil; } } if ([fm isReadableFileAtPath: storedAppinfoPath]) { runningInfo = [NSDictionary dictionaryWithContentsOfFile: storedAppinfoPath]; } [storedAppinfoLock unlock]; if (runningInfo == nil) { return nil; } apps = [runningInfo objectForKey: @"GSLaunched"]; if (apps != nil) { return [apps allValues]; } return nil; } - (void)updateStoredAppInfoWithLaunchedApps:(NSArray *)apps { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *runningInfo = nil; NSDictionary *oldapps = nil; NSMutableDictionary *newapps = nil; BOOL modified = NO; NSUInteger i; if ([storedAppinfoLock tryLock] == NO) { unsigned sleeps = 0; if ([[storedAppinfoLock lockDate] timeIntervalSinceNow] < -20.0) { NS_DURING { [storedAppinfoLock breakLock]; } NS_HANDLER { NSLog(@"Unable to break lock %@ ... %@", storedAppinfoLock, localException); } NS_ENDHANDLER } for (sleeps = 0; sleeps < 10; sleeps++) { if ([storedAppinfoLock tryLock] == YES) { break; } sleeps++; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; } if (sleeps >= 10) { NSLog(@"Unable to obtain lock %@", storedAppinfoLock); return; } } if ([fm isReadableFileAtPath: storedAppinfoPath]) { runningInfo = [NSMutableDictionary dictionaryWithContentsOfFile: storedAppinfoPath]; } if (runningInfo == nil) { runningInfo = [NSMutableDictionary dictionary]; modified = YES; } oldapps = [runningInfo objectForKey: @"GSLaunched"]; if (oldapps == nil) { newapps = [NSMutableDictionary new]; modified = YES; } else { newapps = [oldapps mutableCopy]; } for (i = 0; i < [apps count]; i++) { GWLaunchedApp *app = [apps objectAtIndex: i]; NSString *appname = [app name]; NSDictionary *oldInfo = [newapps objectForKey: appname]; if ([app isRunning] == NO) { if (oldInfo != nil) { [newapps removeObjectForKey: appname]; modified = YES; } } else { NSDictionary *info = [app appInfo]; if ([info isEqual: oldInfo] == NO) { [newapps setObject: info forKey: appname]; modified = YES; } } } if (modified) { [runningInfo setObject: newapps forKey: @"GSLaunched"]; [runningInfo writeToFile: storedAppinfoPath atomically: YES]; } RELEASE (newapps); [storedAppinfoLock unlock]; RELEASE (arp); } - (void)checkLastRunningApps { NSArray *oldrunning = [self storedAppInfo]; if (oldrunning && [oldrunning count]) { NSMutableArray *toremove = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [oldrunning count]; i++) { NSDictionary *dict = [oldrunning objectAtIndex: i]; NSString *name = [dict objectForKey: @"NSApplicationName"]; NSString *path = [dict objectForKey: @"NSApplicationPath"]; NSNumber *ident = [dict objectForKey: @"NSApplicationProcessIdentifier"]; if (name && path && ident) { GWLaunchedApp *app = [GWLaunchedApp appWithApplicationPath: path applicationName: name processIdentifier: ident checkRunning: YES]; if ((app != nil) && [app isRunning]) { BOOL hidden = [app isApplicationHidden]; [launchedApps addObject: app]; [app setHidden: hidden]; [[dtopManager dock] appDidLaunch: path appName: name]; if (hidden) { [[dtopManager dock] appDidHide: name]; } } else if (app != nil) { [toremove addObject: app]; } } } if ([toremove count]) { [self updateStoredAppInfoWithLaunchedApps: toremove]; } } } - (void)startLogout { NSString *msg = [NSString stringWithFormat: @"%@\n%@%i %@", NSLocalizedString(@"Are you sure you want to quit\nall applications and log out now?", @""), NSLocalizedString(@"If you do nothing, the system will log out\nautomatically in ", @""), autoLogoutDelay, NSLocalizedString(@"seconds.", @"")]; loggingout = YES; logoutDelay = 30; if (logoutTimer && [logoutTimer isValid]) [logoutTimer invalidate]; ASSIGN (logoutTimer, [NSTimer scheduledTimerWithTimeInterval: autoLogoutDelay target: self selector: @selector(doLogout:) userInfo: nil repeats: NO]); /* we will display a modal panel, so we add the timer to the modal runloop */ [[NSRunLoop currentRunLoop] addTimer: logoutTimer forMode: NSModalPanelRunLoopMode]; if (NSRunAlertPanel(NSLocalizedString(@"Logout", @""), msg, NSLocalizedString(@"Log out", @""), NSLocalizedString(@"Cancel", @""), nil)) { [logoutTimer invalidate]; [self doLogout: nil]; } else { [logoutTimer invalidate]; DESTROY (logoutTimer); loggingout = NO; } } - (void)doLogout:(id)sender { NSMutableArray *launched = [NSMutableArray array]; GWLaunchedApp *gwapp = [self launchedAppWithPath: gwBundlePath andName: gwProcessName]; NSUInteger i; [launched addObjectsFromArray: launchedApps]; [launched removeObject: gwapp]; for (i = 0; i < [launched count]; i++) [[launched objectAtIndex: i] terminateApplication]; [launched removeAllObjects]; [launched addObjectsFromArray: launchedApps]; [launched removeObject: gwapp]; if ([launched count]) { ASSIGN (logoutTimer, [NSTimer scheduledTimerWithTimeInterval: logoutDelay target: self selector: @selector(terminateTasks:) userInfo: nil repeats: NO]); } else { [NSApp terminate: self]; } } - (void)terminateTasks:(id)sender { BOOL canterminate = YES; if ([launchedApps count] > 1) { NSMutableArray *launched = [NSMutableArray array]; GWLaunchedApp *gwapp = [self launchedAppWithPath: gwBundlePath andName: gwProcessName]; NSMutableString *appNames = [NSMutableString string]; NSString *msg = nil; NSUInteger count; NSUInteger i; [launched addObjectsFromArray: launchedApps]; [launched removeObject: gwapp]; count = [launched count]; for (i = 0; i < count; i++) { GWLaunchedApp *app = [launched objectAtIndex: i]; [appNames appendString: [app name]]; if (i < (count - 1)) [appNames appendString: @", "]; } msg = [NSString stringWithFormat: @"%@\n%@\n%@", NSLocalizedString(@"The following applications:", @""), appNames, NSLocalizedString(@"refuse to terminate.", @"")]; if (NSRunAlertPanel(NSLocalizedString(@"Logout", @""), msg, NSLocalizedString(@"Kill applications", @""), NSLocalizedString(@"Cancel logout", @""), nil)) { for (i = 0; i < [launched count]; i++) { [[launched objectAtIndex: i] terminateTask]; } } else { canterminate = NO; } } if (canterminate) [NSApp terminate: self]; else loggingout = NO; } @end @implementation GWLaunchedApp + (id)appWithApplicationPath:(NSString *)apath applicationName:(NSString *)aname launchedTask:(NSTask *)atask { GWLaunchedApp *app = [GWLaunchedApp new]; [app setPath: apath]; [app setName: aname]; [app setTask: atask]; if (([app name] == nil) || ([app path] == nil)) { DESTROY (app); } return AUTORELEASE (app); } + (id)appWithApplicationPath:(NSString *)apath applicationName:(NSString *)aname processIdentifier:(NSNumber *)ident checkRunning:(BOOL)check { GWLaunchedApp *app = [GWLaunchedApp new]; [app setPath: apath]; [app setName: aname]; [app setIdentifier: ident]; if (([app name] == nil) || ([app path] == nil) || ([app identifier] == nil)) { DESTROY (app); } else if (check) { [app connectApplication: YES]; } return AUTORELEASE (app); } - (void)dealloc { [nc removeObserver: self]; if (conn && [conn isValid]) { DESTROY (application); RELEASE (conn); } RELEASE (name); RELEASE (path); RELEASE (identifier); RELEASE (task); [super dealloc]; } - (id)init { self = [super init]; if (self) { task = nil; name = nil; path = nil; identifier = nil; conn = nil; application = nil; active = NO; hidden = NO; gw = [GWorkspace gworkspace]; nc = [NSNotificationCenter defaultCenter]; } return self; } - (NSUInteger)hash { return ([name hash] | [path hash]); } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [GWLaunchedApp class]]) { return ([[(GWLaunchedApp *)other name] isEqual: name] && [[(GWLaunchedApp *)other path] isEqual: path]); } return NO; } - (NSDictionary *)appInfo { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: name forKey: @"NSApplicationName"]; [dict setObject: path forKey: @"NSApplicationPath"]; if (identifier != nil) { [dict setObject: identifier forKey: @"NSApplicationProcessIdentifier"]; } return [dict makeImmutableCopyOnFail: NO]; } - (void)setTask:(NSTask *)atask { ASSIGN (task, atask); } - (NSTask *)task { return task; } - (void)setPath:(NSString *)apath { ASSIGN (path, apath); } - (NSString *)path { return path; } - (void)setName:(NSString *)aname { ASSIGN (name, aname); } - (NSString *)name { return name; } - (void)setIdentifier:(NSNumber *)ident { ASSIGN (identifier, ident); } - (NSNumber *)identifier { return identifier; } - (id)application { [self connectApplication: NO]; return application; } - (void)setActive:(BOOL)value { active = value; } - (BOOL)isActive { return active; } - (void)activateApplication { NS_DURING { [application activateIgnoringOtherApps: YES]; } NS_HANDLER { NSLog(@"Unable to activate %@", name); NSLog(@"GWorkspace caught exception %@: %@", [localException name], [localException reason]); } NS_ENDHANDLER } - (void)setHidden:(BOOL)value { hidden = value; } - (BOOL)isHidden { return hidden; } - (void)hideApplication { NS_DURING { [application hide: nil]; } NS_HANDLER { NSLog(@"Unable to hide %@", name); NSLog(@"GWorkspace caught exception %@: %@", [localException name], [localException reason]); } NS_ENDHANDLER } - (void)unhideApplication { NS_DURING { [application unhideWithoutActivation]; } NS_HANDLER { NSLog(@"Unable to unhide %@", name); NSLog(@"GWorkspace caught exception %@: %@", [localException name], [localException reason]); } NS_ENDHANDLER } - (BOOL)isApplicationHidden { BOOL apphidden = NO; if (application != nil) { NS_DURING { apphidden = [application isHidden]; } NS_HANDLER { NSLog(@"GWorkspace caught exception %@: %@", [localException name], [localException reason]); } NS_ENDHANDLER } return apphidden; } - (BOOL)gwlaunched { return (task != nil); } - (BOOL)isRunning { return (application != nil); } - (void)terminateApplication { if (application) { NS_DURING { [application terminate: nil]; } NS_HANDLER { GWDebugLog(@"GWorkspace caught exception %@: %@", [localException name], [localException reason]); } NS_ENDHANDLER } else { /* if the app is a wrapper */ [gw applicationTerminated: self]; } } - (void)terminateTask { if (task && [task isRunning]) { NS_DURING { [task terminate]; } NS_HANDLER { GWDebugLog(@"GWorkspace caught exception %@: %@", [localException name], [localException reason]); } NS_ENDHANDLER } } - (void)connectApplication:(BOOL)showProgress { if (application == nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *host = [defaults stringForKey: @"NSHost"]; id app = nil; if (host == nil) { host = @""; } else { NSHost *h = [NSHost hostWithName: host]; if ([h isEqual: [NSHost currentHost]]) { host = @""; } } app = [NSConnection rootProxyForConnectionWithRegisteredName: name host: host]; if (app) { NSConnection *c = [app connectionForProxy]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: c]; application = app; RETAIN (application); ASSIGN (conn, c); } else { StartAppWin *startAppWin = nil; int i; if ((task == nil || [task isRunning] == NO) && (showProgress == NO)) { DESTROY (task); return; } if (showProgress) { startAppWin = [gw startAppWin]; [startAppWin showWindowWithTitle: @"GWorkspace" appName: name operation: NSLocalizedString(@"contacting:", @"") maxProgValue: 20.0]; } for (i = 0; i < 20; i++) { if (showProgress) { [startAppWin updateProgressBy: 1.0]; } [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; app = [NSConnection rootProxyForConnectionWithRegisteredName: name host: host]; if (app) { NSConnection *c = [app connectionForProxy]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: c]; application = app; RETAIN (application); ASSIGN (conn, c); break; } } if (showProgress) { [[startAppWin win] close]; } if (application == nil) { if (task && [task isRunning]) { [task terminate]; } DESTROY (task); if (showProgress == NO) { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@", name, NSLocalizedString(@"seems to have hung", @"")], NSLocalizedString(@"OK", @""), nil, nil); } } } } } - (void)connectionDidDie:(NSNotification *)notif { if (conn == (NSConnection *)[notif object]) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; DESTROY (application); DESTROY (conn); GWDebugLog(@"\"%@\" application connection did die", name); [gw applicationTerminated: self]; } } @end @implementation NSWorkspace (WorkspaceApplication) - (id)_workspaceApplication { return [GWorkspace gworkspace]; } @end gworkspace-1.1.0/GWorkspace/config.h.in0000644000175000001440000000352314623464036017222 0ustar multixusers/* GWorkspace/config.h.in. Generated from configure.ac by autoheader. */ /* debug logging */ #undef GW_DEBUG_LOG /* Define to 1 if you have the header file. */ #undef HAVE_DIR_H /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getlogin' function. */ #undef HAVE_GETLOGIN /* Define to 1 if you have the `getpwnam' function. */ #undef HAVE_GETPWNAM /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS gworkspace-1.1.0/GWorkspace/main.m0000644000175000001440000000241614751213523016274 0ustar multixusers/* main.m * * Copyright (C) 2003-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2001 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #include "GWorkspace.h" int main(int argc, char **argv, char **env) { CREATE_AUTORELEASE_POOL (pool); GWorkspace *gw = [GWorkspace gworkspace]; NSApplication *app = [NSApplication sharedApplication]; [app setDelegate: gw]; [app run]; RELEASE (pool); return 0; } gworkspace-1.1.0/INSTALL0000644000175000001440000000160013214346546014155 0ustar multixusersInstalling GWorkspace ========================= GWorkspace requires GNUstep to be installed. Make sure that you have an up to date version installed on your system! ./configure make install If you are on Linux and want to use the new inotify-based fswatcher, you can pass --with-inotify to configure. To enable the new metadata indexing and searching system, cd into the GWMetadata directory and: ./configure make make install To enable all the GWorkspace features you need also: * The PDFKit framework (version >= 0.9) downloadable from the GWorkspace home page. PDFKit is needed to build the pdf contents inspector and to extract metadata from pdf files. * System Preferences available from the GNUstep SVN repository. svn co http://svn.gna.org/svn/gnustep/apps/systempreferences/trunk If you install the GWMetadata system, SystemPreferences is needed to configure it. gworkspace-1.1.0/Inspector/0000755000175000001440000000000014753500006015065 5ustar multixusersgworkspace-1.1.0/Inspector/Annotations.h0000644000175000001440000000307514751213523017543 0ustar multixusers/* Annotations.h * * Copyright (C) 2005-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * * Date: February 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class NSWindow; @class FSNode; @class NSView; @class IconView; @class NSTextView; @interface Annotations: NSObject { IBOutlet NSWindow *win; IBOutlet NSBox *mainBox; IBOutlet NSBox *topBox; IBOutlet IconView *iconView; IBOutlet NSTextField *titleField; IBOutlet NSBox *toolsBox; IBOutlet NSTextView *textView; IBOutlet NSButton *okButt; NSString *currentPath; NSView *noContsView; id inspector; id desktopApp; } - (instancetype)initForInspector:(id)insp; - (NSView *)inspView; - (NSString *)winname; - (void)activateForPaths:(NSArray *)paths; - (IBAction)setAnnotations:(id)sender; @end gworkspace-1.1.0/Inspector/Annotations.m0000644000175000001440000001206514751213523017547 0ustar multixusers/* Annotations.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "config.h" #import #import #import "Annotations.h" #import "Inspector.h" #import "IconView.h" #import "Functions.h" #import "FSNodeRep.h" #define ICNSIZE 48 static NSString *nibName = @"Annotations"; @implementation Annotations - (void)dealloc { RELEASE (currentPath); RELEASE (noContsView); RELEASE (mainBox); RELEASE (toolsBox); [super dealloc]; } - (instancetype)initForInspector:(id)insp { self = [super init]; if (self) { id label; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY(self); return nil; } RETAIN (mainBox); RETAIN (toolsBox); RELEASE (win); inspector = insp; [iconView setInspector: inspector]; desktopApp = [inspector desktopApp]; currentPath = nil; noContsView = [[NSView alloc] initWithFrame: [[toolsBox contentView] bounds]]; MAKE_LABEL (label, NSMakeRect(2, 125, 254, 65), _(@"No Annotations Inspector"), 'c', YES, noContsView); [label setFont: [NSFont systemFontOfSize: 18]]; [label setTextColor: [NSColor grayColor]]; } return self; } - (NSView *)inspView { return mainBox; } - (NSString *)winname { return NSLocalizedString(@"Annotations Inspector", @""); } - (void)activateForPaths:(NSArray *)paths { if ([paths count] == 1) { FSNode *node = [FSNode nodeWithPath: [paths objectAtIndex: 0]]; NSImage *icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; if (currentPath) { [inspector removeWatcherForPath: currentPath]; } ASSIGN (currentPath, [node path]); [inspector addWatcherForPath: currentPath]; [iconView setImage: icon]; [titleField setStringValue: [node name]]; if ([[[mainBox contentView] subviews] containsObject: noContsView]) { [noContsView removeFromSuperview]; [[mainBox contentView] addSubview: toolsBox]; } [textView setString: @""]; if (([desktopApp ddbdactive] == NO) && ([desktopApp terminating] == NO)) { [desktopApp connectDDBd]; } if ([desktopApp ddbdactive]) { NSString *contents = [desktopApp ddbdGetAnnotationsForPath: currentPath]; if (contents) { [textView setString: contents]; } [okButt setEnabled: YES]; } else { [okButt setEnabled: NO]; } } else { NSImage *icon = [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: ICNSIZE]; NSString *items; items = [NSString stringWithFormat: @"%lu %@", (unsigned long)[paths count], NSLocalizedString(@"Items", @"")]; [titleField setStringValue: items]; [iconView setImage: icon]; if ([[[mainBox contentView] subviews] containsObject: toolsBox]) { [toolsBox removeFromSuperview]; [[mainBox contentView] addSubview: noContsView]; } if (currentPath) { [inspector removeWatcherForPath: currentPath]; DESTROY (currentPath); } } } - (IBAction)setAnnotations:(id)sender { NSString *contents = [textView string]; if ([contents length]) { [desktopApp ddbdSetAnnotations: contents forPath: currentPath]; } } - (void)watchedPathDidChange:(NSDictionary *)info { NSString *path = [info objectForKey: @"path"]; if (currentPath && [currentPath isEqual: path]) { if ([[info objectForKey: @"event"] isEqual: @"GWWatchedPathDeleted"]) { [iconView setImage: nil]; [titleField setStringValue: @""]; if ([[[mainBox contentView] subviews] containsObject: toolsBox]) { [toolsBox removeFromSuperview]; [[mainBox contentView] addSubview: noContsView]; } [inspector removeWatcherForPath: currentPath]; DESTROY (currentPath); } } } @end gworkspace-1.1.0/Inspector/Attributes.h0000644000175000001440000000743114751213523017374 0ustar multixusers/* Attributes.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class NSWindow; @class NSImage; @class NSTextField; @class NSButton; @class Sizer; @class IconView; @class TimeDateView; @protocol SizerProtocol - (oneway void)computeSizeOfPaths:(NSArray *)paths; - (oneway void)stopComputeSize; @end @protocol AttributesSizeProtocol - (oneway void)setSizer:(id)anObject; - (oneway void)sizeReady:(NSString *)sizeStr; @end @interface Attributes : NSObject { IBOutlet NSWindow *win; IBOutlet NSBox *mainBox; IBOutlet NSBox *topBox; IBOutlet IconView *iconView; IBOutlet NSTextField *titleField; IBOutlet NSTextField *linkToLabel; IBOutlet NSTextField *linkToField; IBOutlet NSTextField *sizeLabel; IBOutlet NSTextField *sizeField; IBOutlet NSButton *calculateButt; IBOutlet NSTextField *ownerLabel; IBOutlet NSTextField *ownerField; IBOutlet NSTextField *groupLabel; IBOutlet NSTextField *groupField; IBOutlet NSBox *changedDateBox; IBOutlet TimeDateView *timeDateView; IBOutlet NSBox *permsBox; IBOutlet NSTextField *readLabel; IBOutlet NSTextField *writeLabel; IBOutlet NSTextField *executeLabel; IBOutlet NSTextField *uLabel; IBOutlet NSTextField *gLabel; IBOutlet NSTextField *oLabel; IBOutlet NSButton *ureadbutt; IBOutlet NSButton *uwritebutt; IBOutlet NSButton *uexebutt; IBOutlet NSButton *greadbutt; IBOutlet NSButton *gwritebutt; IBOutlet NSButton *gexebutt; IBOutlet NSButton *oreadbutt; IBOutlet NSButton *owritebutt; IBOutlet NSButton *oexebutt; IBOutlet NSButton *insideButt; IBOutlet NSButton *revertButt; IBOutlet NSButton *okButt; NSArray *insppaths; NSDictionary *attributes; BOOL iamRoot, isMyFile; NSImage *onImage, *offImage, *multipleImage; BOOL multiplePaths; NSString *currentPath; NSConnection *sizerConn; id sizer; BOOL autocalculate; id inspector; NSFileManager *fm; NSNotificationCenter *nc; } - (id)initForInspector:(id)insp; - (NSView *)inspView; - (NSString *)winname; - (void)activateForPaths:(NSArray *)paths; - (IBAction)permsButtonsAction:(id)sender; - (IBAction)insideButtonAction:(id)sender; - (IBAction)changePermissions:(id)sender; - (IBAction)revertToOldPermissions:(id)sender; - (void)setPermissions:(unsigned long)perms isActive:(BOOL)active; - (unsigned long)getPermissions:(unsigned long)oldperms; - (void)watchedPathDidChange:(NSDictionary *)info; - (void)setCalculateSizes:(BOOL)value; - (IBAction)calculateSizes:(id)sender; - (void)startSizer; - (void)sizerConnDidDie:(NSNotification *)notification; - (void)setSizer:(id)anObject; - (void)sizeReady:(NSString *)sizeStr; - (void)updateDefaults; @end @interface Sizer : NSObject { id attributes; NSFileManager *fm; } + (void)createSizerWithPorts:(NSArray *)portArray; - (id)initWithAttributesConnection:(NSConnection *)conn; - (void)computeSizeOfPaths:(NSArray *)paths; @end gworkspace-1.1.0/Inspector/Attributes.m0000644000175000001440000006267714751213523017416 0ustar multixusers/* Attributes.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include #include #import #import #import "FSNFunctions.h" #import "Attributes.h" #import "Inspector.h" #import "IconView.h" #import "TimeDateView.h" #import "Functions.h" #import "FSNodeRep.h" #define SINGLE 0 #define MULTIPLE 1 #ifdef __WIN32__ #define S_IRUSR _S_IRUSR #define S_IWUSR _S_IWUSR #define S_IXUSR _S_IXUSR #endif #define ICNSIZE 48 static NSString *nibName = @"Attributes"; static BOOL sizeStop = NO; @implementation Attributes - (void)dealloc { [nc removeObserver: self]; DESTROY (sizerConn); DESTROY (sizer); RELEASE (mainBox); RELEASE (calculateButt); RELEASE (insppaths); RELEASE (attributes); RELEASE (currentPath); RELEASE (onImage); RELEASE (offImage); RELEASE (multipleImage); [super dealloc]; } - (id)initForInspector:(id)insp { self = [super init]; if (self) { NSBundle *bundle = [NSBundle bundleForClass: [insp class]]; NSString *imagepath; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (mainBox); RELEASE (win); inspector = insp; [iconView setInspector: inspector]; insppaths = nil; attributes = nil; currentPath = nil; sizer = nil; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; autocalculate = [[NSUserDefaults standardUserDefaults] boolForKey: @"auto_calculate_sizes"]; RETAIN (calculateButt); if (autocalculate) { [calculateButt removeFromSuperview]; } imagepath = [bundle pathForResource: @"switchOn" ofType: @"tiff"]; onImage = [[NSImage alloc] initWithContentsOfFile: imagepath]; imagepath = [bundle pathForResource: @"switchOff" ofType: @"tiff"]; offImage = [[NSImage alloc] initWithContentsOfFile: imagepath]; imagepath = [bundle pathForResource: @"switchMultiple" ofType: @"tiff"]; multipleImage = [[NSImage alloc] initWithContentsOfFile: imagepath]; [ureadbutt setImage: offImage]; [ureadbutt setAlternateImage: onImage]; [ureadbutt setTag: SINGLE]; [greadbutt setImage: offImage]; [greadbutt setAlternateImage: onImage]; [greadbutt setTag: SINGLE]; [oreadbutt setImage: offImage]; [oreadbutt setAlternateImage: onImage]; [oreadbutt setTag: SINGLE]; [uwritebutt setImage: offImage]; [uwritebutt setAlternateImage: onImage]; [uwritebutt setTag: SINGLE]; [gwritebutt setImage: offImage]; [gwritebutt setAlternateImage: onImage]; [gwritebutt setTag: SINGLE]; [owritebutt setImage: offImage]; [owritebutt setAlternateImage: onImage]; [owritebutt setTag: SINGLE]; [uexebutt setImage: offImage]; [uexebutt setAlternateImage: onImage]; [uexebutt setTag: SINGLE]; [gexebutt setImage: offImage]; [gexebutt setAlternateImage: onImage]; [gexebutt setTag: SINGLE]; [oexebutt setImage: offImage]; [oexebutt setAlternateImage: onImage]; [oexebutt setTag: SINGLE]; [revertButt setEnabled: NO]; [okButt setEnabled: NO]; /* Internationalization */ [linkToLabel setStringValue: NSLocalizedString(@"Link to:", @"")]; [sizeLabel setStringValue: NSLocalizedString(@"Size:", @"")]; [calculateButt setTitle: NSLocalizedString(@"Calculate", @"")]; [ownerLabel setStringValue: NSLocalizedString(@"Owner:", @"")]; [groupLabel setStringValue: NSLocalizedString(@"Group:", @"")]; [changedDateBox setTitle: NSLocalizedString(@"Changed", @"")]; [permsBox setTitle: NSLocalizedString(@"Permissions", @"")]; [readLabel setStringValue: NSLocalizedString(@"Read", @"")]; [writeLabel setStringValue: NSLocalizedString(@"Write", @"")]; [executeLabel setStringValue: NSLocalizedString(@"Execute", @"")]; [uLabel setStringValue: NSLocalizedString(@"Owner_short", @"")]; [gLabel setStringValue: NSLocalizedString(@"Group", @"")]; [oLabel setStringValue: NSLocalizedString(@"Other", @"")]; [insideButt setTitle: NSLocalizedString(@"also apply to files inside selection", @"")]; [revertButt setTitle: NSLocalizedString(@"Revert", @"")]; [okButt setTitle: NSLocalizedString(@"OK", @"")]; } return self; } - (NSView *)inspView { return mainBox; } - (NSString *)winname { return NSLocalizedString(@"Attributes Inspector", @""); } - (void)activateForPaths:(NSArray *)paths { NSString *fpath; NSString *ftype; NSString *usr, *grp, *tmpusr, *tmpgrp; NSDate *date; NSCalendarDate *cdate; NSDictionary *attrs; unsigned long perms; BOOL sameOwner, sameGroup; NSUInteger i; sizeStop = YES; if (paths == nil) { DESTROY (insppaths); return; } attrs = [fm fileAttributesAtPath: [paths objectAtIndex: 0] traverseLink: NO]; ASSIGN (insppaths, paths); ASSIGN (currentPath, [paths objectAtIndex: 0]); ASSIGN (attributes, attrs); [revertButt setEnabled: NO]; [okButt setEnabled: NO]; if ([insppaths count] == 1) { /* Single Selection */ FSNode *node = [FSNode nodeWithPath: currentPath]; NSImage *icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; [iconView setImage: icon]; [titleField setStringValue: [node name]]; usr = [attributes objectForKey: NSFileOwnerAccountName]; grp = [attributes objectForKey: NSFileGroupOwnerAccountName]; date = [attributes objectForKey: NSFileModificationDate]; perms = [[attributes objectForKey: NSFilePosixPermissions] unsignedLongValue]; #ifdef __WIN32__ iamRoot = YES; #else iamRoot = (geteuid() == 0); #endif isMyFile = ([NSUserName() isEqual: usr]); [insideButt setState: NSOffState]; ftype = [attributes objectForKey: NSFileType]; if ([ftype isEqual: NSFileTypeDirectory] == NO) { NSString *fsize = sizeDescription([[attributes objectForKey: NSFileSize] unsignedLongLongValue]); [sizeField setStringValue: fsize]; [calculateButt setEnabled: NO]; [insideButt setEnabled: NO]; } else { [sizeField setStringValue: @"--"]; if (autocalculate) { if (sizer == nil) [self startSizer]; else [sizer computeSizeOfPaths: insppaths]; } else { [calculateButt setEnabled: YES]; } [insideButt setEnabled: YES]; } if ([ftype isEqual: NSFileTypeSymbolicLink]) { NSString *s; s = [fm pathContentOfSymbolicLinkAtPath: currentPath]; s = relativePathFit(linkToField, s); [linkToField setStringValue: s]; [linkToLabel setTextColor: [NSColor blackColor]]; [linkToField setTextColor: [NSColor blackColor]]; } else { [linkToField setStringValue: @""]; [linkToLabel setTextColor: [NSColor darkGrayColor]]; [linkToField setTextColor: [NSColor darkGrayColor]]; } [ownerField setStringValue: usr]; [groupField setStringValue: grp]; [self setPermissions: perms isActive: (iamRoot || isMyFile)]; cdate = [date dateWithCalendarFormat: nil timeZone: nil]; [timeDateView setDate: cdate]; } else { /* Multiple Selection */ NSImage *icon = [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: ICNSIZE]; NSString *items; items = [NSString stringWithFormat: @"%lu %@", (unsigned long)[paths count], NSLocalizedString(@"Items", @"")]; [titleField setStringValue: items]; [iconView setImage: icon]; [attributes objectForKey: NSFileType]; [sizeField setStringValue: @"--"]; if (autocalculate) { if (sizer == nil) [self startSizer]; else [sizer computeSizeOfPaths: insppaths]; } else { [calculateButt setEnabled: YES]; } usr = [attributes objectForKey: NSFileOwnerAccountName]; grp = [attributes objectForKey: NSFileGroupOwnerAccountName]; date = [attributes objectForKey: NSFileModificationDate]; sameOwner = YES; sameGroup = YES; for (i = 0; i < [insppaths count]; i++) { fpath = [insppaths objectAtIndex: i]; attrs = [fm fileAttributesAtPath: fpath traverseLink: NO]; tmpusr = [attrs objectForKey: NSFileOwnerAccountName]; if ([tmpusr isEqualToString: usr] == NO) sameOwner = NO; tmpgrp = [attrs objectForKey: NSFileGroupOwnerAccountName]; if ([tmpgrp isEqualToString: grp] == NO) sameGroup = NO; } if(sameOwner == NO) usr = @"-"; if(sameGroup == NO) grp = @"-"; #ifdef __WIN32__ iamRoot = YES; #else iamRoot = (geteuid() == 0); #endif isMyFile = ([NSUserName() isEqualToString: usr]); [linkToLabel setTextColor: [NSColor darkGrayColor]]; [linkToField setStringValue: @""]; [ownerField setStringValue: usr]; [groupField setStringValue: grp]; [insideButt setEnabled: YES]; [self setPermissions: 0 isActive: (iamRoot || isMyFile)]; cdate = [date dateWithCalendarFormat: nil timeZone: nil]; [timeDateView setDate: cdate]; } [mainBox setNeedsDisplay: YES]; } - (IBAction)permsButtonsAction:(id)sender { if (multiplePaths == YES) { if ([sender state] == NSOffState) { if ([sender tag] == MULTIPLE) { [sender setImage: offImage]; [sender setTag: SINGLE]; } } else { if ([sender tag] == SINGLE) { [sender setImage: multipleImage]; [sender setTag: MULTIPLE]; } } } if ((iamRoot || isMyFile) == NO) { return; } [revertButt setEnabled: YES]; [okButt setEnabled: YES]; } - (IBAction)insideButtonAction:(id)sender { [okButt setEnabled: YES]; } - (IBAction)changePermissions:(id)sender { NSMutableDictionary *attrs; NSDirectoryEnumerator *enumerator; NSString *path, *fpath; unsigned long oldperms, newperms; NSUInteger i; BOOL isdir; BOOL recursive; recursive = ([insideButt isEnabled] && ([insideButt state] == NSOnState)); if ([insppaths count] == 1) { oldperms = [[attributes objectForKey: NSFilePosixPermissions] unsignedLongValue]; newperms = [self getPermissions: oldperms]; attrs = [attributes mutableCopy]; [attrs setObject: [NSNumber numberWithInt: newperms] forKey: NSFilePosixPermissions]; [fm changeFileAttributes: attrs atPath: currentPath]; RELEASE (attrs); [fm fileExistsAtPath: currentPath isDirectory: &isdir]; if (isdir && recursive) { enumerator = [fm enumeratorAtPath: currentPath]; while ((fpath = [enumerator nextObject])) { CREATE_AUTORELEASE_POOL(arp); fpath = [currentPath stringByAppendingPathComponent: fpath]; attrs = [[fm fileAttributesAtPath: fpath traverseLink: NO] mutableCopy]; oldperms = [[attrs objectForKey: NSFilePosixPermissions] unsignedLongValue]; newperms = [self getPermissions: oldperms]; [attrs setObject: [NSNumber numberWithInt: newperms] forKey: NSFilePosixPermissions]; [fm changeFileAttributes: attrs atPath: fpath]; RELEASE (attrs); RELEASE (arp); } ASSIGN (attributes, [fm fileAttributesAtPath: currentPath traverseLink: NO]); [self setPermissions: 0 isActive: YES]; } else { ASSIGN (attributes, [fm fileAttributesAtPath: currentPath traverseLink: NO]); newperms = [[attributes objectForKey: NSFilePosixPermissions] unsignedLongValue]; [self setPermissions: newperms isActive: YES]; } } else { for (i = 0; i < [insppaths count]; i++) { path = [insppaths objectAtIndex: i]; attrs = [[fm fileAttributesAtPath: path traverseLink: NO] mutableCopy]; oldperms = [[attrs objectForKey: NSFilePosixPermissions] unsignedLongValue]; newperms = [self getPermissions: oldperms]; [attrs setObject: [NSNumber numberWithInt: newperms] forKey: NSFilePosixPermissions]; [fm changeFileAttributes: attrs atPath: path]; RELEASE (attrs); [fm fileExistsAtPath: path isDirectory: &isdir]; if (isdir && recursive) { enumerator = [fm enumeratorAtPath: path]; while ((fpath = [enumerator nextObject])) { CREATE_AUTORELEASE_POOL(arp); fpath = [path stringByAppendingPathComponent: fpath]; attrs = [[fm fileAttributesAtPath: fpath traverseLink: NO] mutableCopy]; oldperms = [[attrs objectForKey: NSFilePosixPermissions] unsignedLongValue]; newperms = [self getPermissions: oldperms]; [attrs setObject: [NSNumber numberWithInt: newperms] forKey: NSFilePosixPermissions]; [fm changeFileAttributes: attrs atPath: fpath]; RELEASE (attrs); RELEASE (arp); } } } ASSIGN (attributes, [fm fileAttributesAtPath: currentPath traverseLink: NO]); [self setPermissions: 0 isActive: YES]; } [okButt setEnabled: NO]; [revertButt setEnabled: NO]; } - (IBAction)revertToOldPermissions:(id)sender { if([insppaths count] == 1) { unsigned long perms = [[attributes objectForKey: NSFilePosixPermissions] unsignedLongValue]; [self setPermissions: perms isActive: YES]; } else { [self setPermissions: 0 isActive: YES]; } [revertButt setEnabled: NO]; [okButt setEnabled: NO]; } - (void)setPermissions:(unsigned long)perms isActive:(BOOL)active { if (active == NO) { [ureadbutt setEnabled: NO]; [uwritebutt setEnabled: NO]; [uexebutt setEnabled: NO]; #ifndef __WIN32__ [greadbutt setEnabled: NO]; [gwritebutt setEnabled: NO]; [gexebutt setEnabled: NO]; [oreadbutt setEnabled: NO]; [owritebutt setEnabled: NO]; [oexebutt setEnabled: NO]; #endif } else { [ureadbutt setEnabled: YES]; [uwritebutt setEnabled: YES]; [uexebutt setEnabled: YES]; #ifndef __WIN32__ [greadbutt setEnabled: YES]; [gwritebutt setEnabled: YES]; [gexebutt setEnabled: YES]; [oreadbutt setEnabled: YES]; [owritebutt setEnabled: YES]; [oexebutt setEnabled: YES]; #endif } if (perms == 0) { multiplePaths = YES; [ureadbutt setImage: multipleImage]; [ureadbutt setState: NSOffState]; [ureadbutt setTag: MULTIPLE]; [uwritebutt setImage: multipleImage]; [uwritebutt setState: NSOffState]; [uwritebutt setTag: MULTIPLE]; [uexebutt setImage: multipleImage]; [uexebutt setState: NSOffState]; [uexebutt setTag: MULTIPLE]; #ifndef __WIN32__ [greadbutt setImage: multipleImage]; [greadbutt setState: NSOffState]; [greadbutt setTag: MULTIPLE]; [gwritebutt setImage: multipleImage]; [gwritebutt setState: NSOffState]; [gwritebutt setTag: MULTIPLE]; [gexebutt setImage: multipleImage]; [gexebutt setState: NSOffState]; [gexebutt setTag: MULTIPLE]; [oreadbutt setImage: multipleImage]; [oreadbutt setState: NSOffState]; [oreadbutt setTag: MULTIPLE]; [owritebutt setImage: multipleImage]; [owritebutt setState: NSOffState]; [owritebutt setTag: MULTIPLE]; [oexebutt setImage: multipleImage]; [oexebutt setState: NSOffState]; [oexebutt setTag: MULTIPLE]; #endif return; } else { multiplePaths = NO; [ureadbutt setImage: offImage]; [ureadbutt setTag: SINGLE]; [uwritebutt setImage: offImage]; [uwritebutt setTag: SINGLE]; [uexebutt setImage: offImage]; [uexebutt setTag: SINGLE]; #ifndef __WIN32__ [greadbutt setImage: offImage]; [greadbutt setTag: SINGLE]; [gwritebutt setImage: offImage]; [gwritebutt setTag: SINGLE]; [gexebutt setImage: offImage]; [gexebutt setTag: SINGLE]; [oreadbutt setImage: offImage]; [oreadbutt setTag: SINGLE]; [owritebutt setImage: offImage]; [owritebutt setTag: SINGLE]; [oexebutt setImage: offImage]; [oexebutt setTag: SINGLE]; #endif } #define SET_BUTTON_STATE(b, v) \ { \ if ((perms & v) == v) [b setState: NSOnState]; \ else [b setState: NSOffState]; \ } SET_BUTTON_STATE (ureadbutt, S_IRUSR); SET_BUTTON_STATE (uwritebutt, S_IWUSR); SET_BUTTON_STATE (uexebutt, S_IXUSR); #ifndef __WIN32__ SET_BUTTON_STATE (greadbutt, S_IRGRP); SET_BUTTON_STATE (gwritebutt, S_IWGRP); SET_BUTTON_STATE (gexebutt, S_IXGRP); SET_BUTTON_STATE (oreadbutt, S_IROTH); SET_BUTTON_STATE (owritebutt, S_IWOTH); SET_BUTTON_STATE (oexebutt, S_IXOTH); #endif } - (unsigned long)getPermissions:(unsigned long)oldperms { unsigned long perms = 0; #define GET_BUTTON_STATE(b, v) \ { \ if ([b state] == NSOnState) \ { \ perms |= v; \ } \ else \ { \ if ((oldperms & v) == v) \ { \ if ([b tag] == MULTIPLE) perms |= v; \ } \ } \ } GET_BUTTON_STATE (ureadbutt, S_IRUSR); GET_BUTTON_STATE (uwritebutt, S_IWUSR); GET_BUTTON_STATE (uexebutt, S_IXUSR); #ifndef __WIN32__ if ((oldperms & S_ISUID) == S_ISUID) perms |= S_ISUID; GET_BUTTON_STATE (greadbutt, S_IRGRP); GET_BUTTON_STATE (gwritebutt, S_IWGRP); GET_BUTTON_STATE (gexebutt, S_IXGRP); if ((oldperms & S_ISGID) == S_ISGID) perms |= S_ISGID; GET_BUTTON_STATE (oreadbutt, S_IROTH); GET_BUTTON_STATE (owritebutt, S_IWOTH); GET_BUTTON_STATE (oexebutt, S_IXOTH); if ((oldperms & S_ISVTX) == S_ISVTX) perms |= S_ISVTX; #endif return perms; } - (void)watchedPathDidChange:(NSDictionary *)info { } - (void)setCalculateSizes:(BOOL)value { autocalculate = value; if (autocalculate) { if ([calculateButt superview]) { [calculateButt removeFromSuperview]; } } else { if ([calculateButt superview] == nil) { [mainBox addSubview: calculateButt]; } } } - (IBAction)calculateSizes:(id)sender { if (sizer == nil) { [self startSizer]; } else { [sizeField setStringValue: @"--"]; [sizer computeSizeOfPaths: insppaths]; } [calculateButt setEnabled: NO]; } - (void)startSizer { NSPort *port[2]; NSArray *portArray; port[0] = (NSPort *)[NSPort port]; port[1] = (NSPort *)[NSPort port]; portArray = [NSArray arrayWithObjects: port[1], port[0], nil]; sizerConn = [[NSConnection alloc] initWithReceivePort: (NSPort *)port[0] sendPort: (NSPort *)port[1]]; [sizerConn setRootObject: self]; [sizerConn setDelegate: self]; [sizerConn enableMultipleThreads]; [nc addObserver: self selector: @selector(sizerConnDidDie:) name: NSConnectionDidDieNotification object: sizerConn]; NS_DURING { [NSThread detachNewThreadSelector: @selector(createSizerWithPorts:) toTarget: [Sizer class] withObject: portArray]; } NS_HANDLER { NSLog(@"Error! A fatal error occurred while detaching the thread."); } NS_ENDHANDLER } - (void)sizerConnDidDie:(NSNotification *)notification { id diedconn = [notification object]; if (diedconn == sizerConn) { [nc removeObserver: self name: NSConnectionDidDieNotification object: sizerConn]; DESTROY (sizer); DESTROY (sizerConn); NSLog(@"sizer connection died"); } } - (void)setSizer:(id)anObject { if (sizer == nil) { [anObject setProtocolForProxy: @protocol(SizerProtocol)]; sizer = (id )anObject; RETAIN (sizer); if (insppaths) { sizeStop = YES; [sizeField setStringValue: @"--"]; [sizer computeSizeOfPaths: insppaths]; } } } - (void)sizeReady:(NSString *)sizeStr { [sizeField setStringValue: sizeStr]; } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool: autocalculate forKey: @"auto_calculate_sizes"]; } @end @implementation Sizer - (void)dealloc { [super dealloc]; } + (void)createSizerWithPorts:(NSArray *)portArray { NSAutoreleasePool *pool; id attrs; NSConnection *conn; NSPort *port[2]; Sizer *sizer; pool = [[NSAutoreleasePool alloc] init]; port[0] = [portArray objectAtIndex: 0]; port[1] = [portArray objectAtIndex: 1]; conn = [NSConnection connectionWithReceivePort: port[0] sendPort: port[1]]; attrs = (id)[conn rootProxy]; sizer = [[Sizer alloc] initWithAttributesConnection: conn]; [attrs setSizer: sizer]; RELEASE (sizer); [[NSRunLoop currentRunLoop] run]; [pool release]; } - (id)initWithAttributesConnection:(NSConnection *)conn { self = [super init]; if (self) { id attrs = (id)[conn rootProxy]; [attrs setProtocolForProxy: @protocol(AttributesSizeProtocol)]; attributes = (id )attrs; fm = [NSFileManager defaultManager]; } return self; } - (void)computeSizeOfPaths:(NSArray *)paths { unsigned long long dirsize = 0; unsigned long long fsize = 0; NSUInteger i; sizeStop = NO; for (i = 0; i < [paths count]; i++) { CREATE_AUTORELEASE_POOL (arp1); NSString *path, *filePath; NSDictionary *fileAttrs; BOOL isdir; if (sizeStop) { RELEASE (arp1); return; } path = [paths objectAtIndex: i]; fileAttrs = [fm fileAttributesAtPath: path traverseLink: NO]; if (fileAttrs) { fsize = [[fileAttrs objectForKey: NSFileSize] unsignedLongLongValue]; dirsize += fsize; } [fm fileExistsAtPath: path isDirectory: &isdir]; if (isdir) { NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath: path]; while (1) { CREATE_AUTORELEASE_POOL (arp2); filePath = [enumerator nextObject]; if (filePath) { if (sizeStop) { RELEASE (arp2); RELEASE (arp1); return; } filePath = [path stringByAppendingPathComponent: filePath]; fileAttrs = [fm fileAttributesAtPath: filePath traverseLink: NO]; if (fileAttrs) { fsize = [[fileAttrs objectForKey: NSFileSize] unsignedLongLongValue]; dirsize += fsize; } } else { RELEASE (arp2); break; } RELEASE (arp2); } } RELEASE (arp1); } if (sizeStop == NO) { [attributes sizeReady: sizeDescription(dirsize)]; } } @end gworkspace-1.1.0/Inspector/ContentViewers/0000755000175000001440000000000014753500006020044 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/AppViewer/0000755000175000001440000000000014753472316021762 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/AppViewer/AppViewer.h0000644000175000001440000000277414751213523024036 0ustar multixusers/* AppViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef APPVIEWER_H #define APPVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSMatrix; @class NSScrollView; @class NSTextField; @class NSWorkspace; @protocol ContentInspectorProtocol - (void)contentsReadyAt:(NSString *)path; @end @interface AppViewer : NSView { NSString *currentPath; BOOL valid; NSMatrix *matrix; NSScrollView *scroll; NSTextField *errLabel; NSTextField *explField; id inspector; NSWorkspace *ws; } - (void)setContextHelp; @end #endif // APPVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/AppViewer/AppViewer.m0000644000175000001440000001765514751213523024047 0ustar multixusers/* AppViewer.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "AppViewer.h" @implementation AppViewer - (void)dealloc { RELEASE (scroll); RELEASE (explField); RELEASE (errLabel); TEST_RELEASE (currentPath); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if (self) { NSRect r, vr; CGFloat x, y, w, h; NSButtonCell *cell; r = [self bounds]; x = 5; y = r.origin.y + 182; w = r.size.width - 10; h = 20; vr = NSMakeRect(x, y, w, h); explField = [[NSTextField alloc] init]; [explField setFrame: vr]; [explField setAlignment: NSCenterTextAlignment]; [explField setFont: [NSFont systemFontOfSize: 12]]; [explField setBackgroundColor: [NSColor windowBackgroundColor]]; [explField setTextColor: [NSColor darkGrayColor]]; [explField setBezeled: NO]; [explField setEditable: NO]; [explField setSelectable: NO]; [explField setStringValue: NSLocalizedString(@"Open these kinds of documents:", @"")]; [self addSubview: explField]; w = 196; h = 94; x = (r.size.width - w) / 2; y = r.origin.y + 85; vr = NSMakeRect(x, y, w, h); scroll = [[NSScrollView alloc] initWithFrame: vr]; [scroll setBorderType: NSBezelBorder]; [scroll setHasHorizontalScroller: YES]; [scroll setHasVerticalScroller: NO]; [self addSubview: scroll]; cell = [NSButtonCell new]; [cell setButtonType: NSPushOnPushOffButton]; [cell setImagePosition: NSImageAbove]; matrix = [[NSMatrix alloc] initWithFrame: NSZeroRect mode: NSRadioModeMatrix prototype: cell numberOfRows: 0 numberOfColumns: 0]; RELEASE (cell); [matrix setIntercellSpacing: NSZeroSize]; h = [[scroll contentView] bounds].size.height; [matrix setCellSize: NSMakeSize(64, h)]; [matrix setAllowsEmptySelection: YES]; [scroll setDocumentView: matrix]; RELEASE (matrix); x = 5; y = r.origin.y + 162; w = r.size.width - 10; h = 25; vr = NSMakeRect(x, y, w, h); errLabel = [[NSTextField alloc] init]; [errLabel setFrame: vr]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; currentPath = nil; inspector = insp; ws = [NSWorkspace sharedWorkspace]; valid = YES; [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { NSBundle *bundle; NSDictionary *info; BOOL infoIsOk; ASSIGN (currentPath, path); if ([self superview]) [inspector contentsReadyAt: currentPath]; infoIsOk = NO; bundle = [NSBundle bundleWithPath: currentPath]; info = [bundle infoDictionary]; if (info) { NSFileManager *fm = [NSFileManager defaultManager]; id typesAndIcons = [info objectForKey: @"NSTypes"]; if (typesAndIcons && [typesAndIcons isKindOfClass: [NSArray class]]) { NSMutableArray *extensions = [NSMutableArray array]; NSMutableDictionary *iconsdict = [NSMutableDictionary dictionary]; NSString *iname; NSCell *cell; NSUInteger i, j, count; for (i = 0; i < [typesAndIcons count]; i++) { id typesarr; id entry = [typesAndIcons objectAtIndex: i]; if ([entry isKindOfClass: [NSDictionary class]] == NO) continue; typesarr = [(NSDictionary *)entry objectForKey: @"NSUnixExtensions"]; if ([typesarr isKindOfClass: [NSArray class]] == NO) continue; iname = [(NSDictionary *)entry objectForKey: @"NSIcon"]; for (j = 0; j < [typesarr count]; j++) { NSString *ext = [[typesarr objectAtIndex: j] lowercaseString]; if ([extensions indexOfObject:ext] == NSNotFound) { [extensions addObject: ext]; if (iname != nil) { [iconsdict setObject: iname forKey: ext]; } } } } count = [extensions count]; [matrix renewRows: 1 columns: count]; [matrix sizeToCells]; for (i = 0; i < count; i++) { NSString *ext = [extensions objectAtIndex: i]; NSString *icnname; NSString *iconPath; cell = [matrix cellAtRow: 0 column: i]; [cell setTitle: ext]; icnname = [iconsdict objectForKey: ext]; if ([icnname length] > 0) { iconPath = [bundle pathForImageResource: icnname]; if (iconPath && [fm fileExistsAtPath: iconPath]) { NSImage *image = [[NSImage alloc] initWithContentsOfFile: iconPath]; [cell setImage: image]; RELEASE (image); } } else { [cell setImage: nil]; // reset icon } } [matrix sizeToCells]; if (valid == NO) { [errLabel removeFromSuperview]; [self addSubview: explField]; [self addSubview: scroll]; valid = YES; } infoIsOk = YES; } } if (infoIsOk == NO && valid == YES) { [explField removeFromSuperview]; [scroll removeFromSuperview]; [self addSubview: errLabel]; valid = NO; } } - (void)displayData:(NSData *)data ofType:(NSString *)type { } - (NSString *)path { return currentPath; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { NSString *defApp = nil, *fileType = nil; [ws getInfoForFile: path application: &defApp type: &fileType]; return (fileType && [fileType isEqual: NSApplicationFileType]); } - (BOOL)canDisplayDataOfType:(NSString *)type { return NO; } - (NSString *)winname { return NSLocalizedString(@"Application Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"Displays info about an application bundle", @""); } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/AppViewer/GNUmakefile0000644000175000001440000000072213251572120024017 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = AppViewer BUNDLE_EXTENSION=.inspector OBJCFLAGS += -Wall AppViewer_HAS_RESOURCE_BUNDLE = yes # # We are creating a bundle # AppViewer_OBJC_FILES = AppViewer.m AppViewer_PRINCIPAL_CLASS = AppViewer AppViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/AppViewer/GNUmakefile.preamble0000644000175000001440000000076413214346546025625 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/AppViewer/InspectorInfo.plist0000644000175000001440000000014513214346546025615 0ustar multixusers{ Name = "Application Inspector"; Description = "Displays info about an application bundle"; } gworkspace-1.1.0/Inspector/ContentViewers/AppViewer/Resources/0000755000175000001440000000000013214346546023730 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/AppViewer/Resources/English.lproj/0000755000175000001440000000000013214346546026446 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/AppViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030274 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/AppViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113713214346546031472 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Application Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/AppViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032301 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/0000755000175000001440000000000014753472316022455 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/FolderViewer.h0000644000175000001440000000312114751213523025207 0ustar multixusers/* FolderViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FOLDERVIEWER_H #define FOLDERVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSMatrix; @class NSBox; @class NSTextField; @class NSButton; @protocol ContentInspectorProtocol - (void)contentsReadyAt:(NSString *)path; @end @interface FolderViewer : NSView { NSString *currentPath; BOOL valid; int sortType; NSBox *sortBox; NSMatrix *matrix; NSButton *okButt; id inspector; NSFileManager *fm; NSWorkspace *ws; } - (int)sortTypeForPath:(NSString *)path; - (void)setNewSortType:(id)sender; - (void)setContextHelp; @end #endif // FOLDERVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/FolderViewer.m0000644000175000001440000001625614751213736025237 0ustar multixusers/* FolderViewer.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FolderViewer.h" #define byname 0 #define bykind 1 #define bydate 2 #define bysize 3 #define byowner 4 #define STYPES 5 @implementation FolderViewer - (void)dealloc { TEST_RELEASE (currentPath); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if (self) { id cell; id label; sortBox = [[NSBox alloc] initWithFrame: NSMakeRect(57, 125, 137, 135)]; [sortBox setBorderType: NSGrooveBorder]; [sortBox setTitle: NSLocalizedString(@"Sort by", @"")]; [sortBox setTitlePosition: NSAtTop]; [sortBox setContentViewMargins: NSMakeSize(2, 2)]; [self addSubview: sortBox]; RELEASE (sortBox); cell = [NSButtonCell new]; [cell setButtonType: NSRadioButton]; [cell setBordered: NO]; [cell setImagePosition: NSImageLeft]; matrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(40, 12, 80, 95) mode: NSRadioModeMatrix prototype: cell numberOfRows: 5 numberOfColumns: 1]; RELEASE (cell); [matrix setCellSize: NSMakeSize(80, 16)]; [matrix setIntercellSpacing: NSMakeSize(1, 2)]; [sortBox setContentView: matrix]; [matrix setFrame: NSMakeRect(40, 12, 80, 95)]; RELEASE (matrix); cell = [matrix cellAtRow: byname column: 0]; [cell setTitle: NSLocalizedString(@"Name", @"")]; [cell setTag: byname]; cell = [matrix cellAtRow: bykind column: 0]; [cell setTitle: NSLocalizedString(@"Type", @"")]; [cell setTag: bykind]; cell = [matrix cellAtRow: bydate column: 0]; [cell setTitle: NSLocalizedString(@"Date", @"")]; [cell setTag: bydate]; cell = [matrix cellAtRow: bysize column: 0]; [cell setTitle: NSLocalizedString(@"Size", @"")]; [cell setTag: bysize]; cell = [matrix cellAtRow: byowner column: 0]; [cell setTitle: NSLocalizedString(@"Owner", @"")]; [cell setTag: byowner]; [matrix sizeToCells]; [matrix setTarget: self]; [matrix setAction: @selector(setNewSortType:)]; label = [[NSTextField alloc] initWithFrame: NSMakeRect(8, 55, 240, 60)]; [label setFont: [NSFont systemFontOfSize: 12]]; [label setAlignment: NSCenterTextAlignment]; [label setBackgroundColor: [NSColor windowBackgroundColor]]; [label setTextColor: [NSColor darkGrayColor]]; [label setBezeled: NO]; [label setEditable: NO]; [label setSelectable: NO]; [label setStringValue: NSLocalizedString(@"Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder", @"")]; [self addSubview: label]; RELEASE (label); okButt = [[NSButton alloc] initWithFrame: NSMakeRect(141, 10, 115, 25)]; [okButt setButtonType: NSMomentaryLight]; [okButt setImage: [NSImage imageNamed: @"common_ret.tiff"]]; [okButt setImagePosition: NSImageRight]; [okButt setTitle: NSLocalizedString(@"Ok", @"")]; [okButt setEnabled: NO]; [self addSubview: okButt]; RELEASE (okButt); currentPath = nil; inspector = insp; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; valid = YES; [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { BOOL writable; int i; if ([self superview]) { [inspector contentsReadyAt: path]; } ASSIGN (currentPath, path); writable = [fm isWritableFileAtPath: currentPath]; for (i = 0; i < STYPES; i++) { [[matrix cellAtRow: i column: 0] setEnabled: writable]; } [matrix selectCellAtRow: [self sortTypeForPath: path] column: 0]; } - (void)displayData:(NSData *)data ofType:(NSString *)type { } - (NSString *)path { return currentPath; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { NSString *defApp, *fileType; [ws getInfoForFile: path application: &defApp type: &fileType]; return ([fileType isEqual: NSFilesystemFileType] || [fileType isEqual: NSDirectoryFileType]); } - (BOOL)canDisplayDataOfType:(NSString *)type { return NO; } - (NSString *)winname { return NSLocalizedString(@"Folder Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you to sort the contents of a Folder", @""); } - (int)sortTypeForPath:(NSString *)path { if ([fm isWritableFileAtPath: path]) { NSString *dictPath = [path stringByAppendingPathComponent: @".gwsort"]; if ([fm fileExistsAtPath: dictPath]) { NSDictionary *sortDict = [NSDictionary dictionaryWithContentsOfFile: dictPath]; if (sortDict) { return [[sortDict objectForKey: @"sort"] intValue]; } } } return byname; } - (void)setNewSortType:(id)sender { sortType = [[sender selectedCell] tag]; if ([fm isWritableFileAtPath: currentPath]) { NSString *sortstr = [NSString stringWithFormat: @"%i", sortType]; NSDictionary *dict = [NSDictionary dictionaryWithObject: sortstr forKey: @"sort"]; [dict writeToFile: [currentPath stringByAppendingPathComponent: @".gwsort"] atomically: YES]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWSortTypeDidChangeNotification" object: currentPath userInfo: dict]; } } - (void)setContextHelp { NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/GNUmakefile0000644000175000001440000000071213251572120024511 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = FolderViewer BUNDLE_EXTENSION = .inspector FolderViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall FolderViewer_OBJC_FILES = FolderViewer.m FolderViewer_PRINCIPAL_CLASS = FolderViewer FolderViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/GNUmakefile.preamble0000644000175000001440000000106113214346546026307 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/InspectorInfo.plist0000644000175000001440000000016113214346546026306 0ustar multixusers{ Name = "Folder Inspector"; Description = "This Inspector allow you to sort the contents of a Folder"; } gworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/Resources/0000755000175000001440000000000013214346546024423 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/Resources/English.lproj/0000755000175000001440000000000013214346546027141 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030767 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113113214346546032157 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Folder Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/FolderViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032774 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/GNUmakefile.in0000644000175000001440000000117013231754602022525 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make PDFKIT=@have_pdfkit@ SH_PATH=@SH_PATH@ FILE_PATH=@FILE_PATH@ ifneq ($(PDFKIT),no) SUBPROJECTS = \ FolderViewer \ ImageViewer \ SoundViewer \ AppViewer \ RtfViewer \ PdfViewer \ NSTIFFViewer \ NSRTFViewer \ NSColorViewer \ IBViewViewer else SUBPROJECTS = \ FolderViewer \ ImageViewer \ SoundViewer \ AppViewer \ RtfViewer \ NSTIFFViewer \ NSRTFViewer \ NSColorViewer \ IBViewViewer endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/GNUmakefile.postamble0000644000175000001440000000131613251572120024102 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # rm -f TAGS # rm -f config.status config.log config.cache # rm -rf autom4te*.cache rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Inspector/ContentViewers/GNUmakefile.preamble0000644000175000001440000000106013214346546023711 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/0000755000175000001440000000000014753472316022367 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/GNUmakefile0000644000175000001440000000075013251572120024425 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = IBViewViewer BUNDLE_EXTENSION = .inspector IBViewViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # IBViewViewer_OBJC_FILES = IBViewViewer.m IBViewViewer_PRINCIPAL_CLASS = IBViewViewer IBViewViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/GNUmakefile.preamble0000644000175000001440000000120513214346546026221 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/IBViewViewer.h0000644000175000001440000000364114751213523025042 0ustar multixusers/* IBViewViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef IBVIEWVIEWER_H #define IBVIEWVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSImage; @class NSTextField; @class NSScrollView; @protocol ContentInspectorProtocol - (void)dataContentsReadyForType:(NSString *)typeDescr useIcon:(NSImage *)icon; @end @interface CustomView : NSTextField { } - (void)setClassName:(NSString *)aName; - (NSString *)className; @end @interface GormNSBrowser : NSBrowser @end @interface GormNSTableView : NSTableView @end @interface GormNSOutlineView : NSOutlineView @end @interface GormNSMenu : NSMenu @end @interface GormNSPopUpButtonCell : NSPopUpButtonCell @end @interface GormNSPopUpButton : NSPopUpButton @end @interface IBViewViewer : NSView { BOOL valid; NSString *typeDescriprion; NSImage *icon; NSScrollView *scrollView; NSTextField *errLabel; id inspector; } - (void)setContextHelp; @end #endif // IBVIEWVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/IBViewViewer.m0000644000175000001440000001540414751213736025055 0ustar multixusers/* IBViewViewer.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "IBViewViewer.h" @implementation CustomView - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if (self) { [self setBackgroundColor: [NSColor darkGrayColor]]; [self setTextColor: [NSColor whiteColor]]; [self setDrawsBackground: YES]; [self setAlignment: NSCenterTextAlignment]; [self setFont: [NSFont boldSystemFontOfSize: 12]]; [self setEditable: NO]; [self setClassName: @"CustomView"]; } return self; } - (void)setClassName:(NSString *)aName { [self setStringValue: aName]; } - (NSString *)className { return [self stringValue]; } @end @implementation GormNSBrowser @end @implementation GormNSTableView @end @implementation GormNSOutlineView @end @implementation GormNSMenu @end @implementation GormNSPopUpButtonCell @end @implementation GormNSPopUpButton @end @implementation IBViewViewer - (void)dealloc { RELEASE (typeDescriprion); RELEASE (icon); RELEASE (scrollView); RELEASE (errLabel); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSRect r = [self bounds]; r.origin.y += 10; r.size.height -= 10; scrollView = [[NSScrollView alloc] initWithFrame: r]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasHorizontalScroller: YES]; [scrollView setHasVerticalScroller: YES]; [scrollView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [self addSubview: scrollView]; r.origin.x = 2; r.origin.y = 170; r.size.width = [self bounds].size.width - 4; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; inspector = insp; valid = YES; ASSIGN (typeDescriprion, NSLocalizedString(@"IBView data", @"")); ASSIGN (icon, [NSImage imageNamed: @"gormPboard"]); [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { } - (void)displayData:(NSData *)data ofType:(NSString *)type { NSArray *objects = [NSUnarchiver unarchiveObjectWithData: data]; #define MARGIN 10 if ([self superview]) { [inspector dataContentsReadyForType: typeDescriprion useIcon: icon]; } if (objects) { NSMutableArray *checkedObjects = [NSMutableArray array]; NSPoint orp = NSMakePoint(10000, 10000); NSPoint szp = NSMakePoint(0, 0); id obj; int i; if (valid == NO) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: scrollView]; } for (i = 0; i < [objects count]; i++) { obj = [objects objectAtIndex: i]; if ([obj respondsToSelector: @selector(frame)]) { NSRect objr = [obj frame]; orp.x = (objr.origin.x < orp.x) ? objr.origin.x : orp.x; orp.y = (objr.origin.y < orp.y) ? objr.origin.y : orp.y; szp.x = ((objr.origin.x + objr.size.width) > szp.x) ? (objr.origin.x + objr.size.width) : szp.x; szp.y = ((objr.origin.y + objr.size.height) > szp.y) ? (objr.origin.y + objr.size.height) : szp.y; [checkedObjects addObject: obj]; } } if ([checkedObjects count]) { NSView *objsView; NSRect objsrect; objsrect = NSMakeRect(0, 0, szp.x - orp.x + MARGIN * 2, szp.y - orp.y + MARGIN * 2); objsView = [[NSView alloc] initWithFrame: objsrect]; [objsView setAutoresizesSubviews: YES]; for (i = 0; i < [checkedObjects count]; i++) { NSRect objr; obj = [checkedObjects objectAtIndex: i]; objr = [obj frame]; objr.origin.x = objr.origin.x - orp.x + MARGIN; objr.origin.y = objr.origin.y - orp.y + MARGIN; [obj setFrame: objr]; [objsView addSubview: obj]; } [scrollView setDocumentView: objsView]; RELEASE (objsView); } } else { if (valid == YES) { valid = NO; [scrollView removeFromSuperview]; [self addSubview: errLabel]; } } } - (NSString *)path { return nil; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return ([type isEqual: @"IBViewPboardType"]); } - (NSString *)winname { return NSLocalizedString(@"IBView Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you view IBView pasteboard data", @""); } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/InspectorInfo.plist0000644000175000001440000000015413214346546026222 0ustar multixusers{ Name = "IBView Inspector"; Description = "This Inspector allow you view IBView pasteboard data"; } gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/Resources/0000755000175000001440000000000013214346546024335 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/Resources/English.lproj/0000755000175000001440000000000013214346546027053 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030701 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/Resources/English.lproj/Help.rtfd/.gwdir0000644000175000001440000000054713214346546032024 0ustar multixusers{ fsn_info_type = <*I0>; geometry = "115 618 450 350 0 0 1600 1176 "; lastselection = ( "/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/Inspector/ContentViewers/IBViewViewer/Resources/English.lproj/Help.rtfd" ); shelfdicts = ( ); shelfheight = <*R77>; singlenode = <*BN>; spatial = <*BN>; viewtype = Browser; }gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113213214346546032072 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 IBView Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/IBViewViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032706 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/0000755000175000001440000000000014753472316022264 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/GNUmakefile0000644000175000001440000000103313251572120024315 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = ImageViewer BUNDLE_EXTENSION = .inspector ImageViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # ImageViewer_OBJC_FILES = ImageViewer.m \ Resizer.m ImageViewer_PRINCIPAL_CLASS = ImageViewer ImageViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/GNUmakefile.preamble0000644000175000001440000000120513214346546026116 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/ImageViewer.h0000644000175000001440000000461414751214566024645 0ustar multixusers/* ImageViewer.h * * Copyright (C) 2004-2020 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef IMAGEVIEWER_H #define IMAGEVIEWER_H #import #import #import "ContentViewersProtocol.h" @class NSImage; @class NSImageView; @class NSTextField; @class NSButton; @class NSWorkspace; @class ProgressView; @class ImageResizer; @protocol ContentInspectorProtocol - (void)contentsReadyAt:(NSString *)path; @end @protocol ImageResizerProtocol - (oneway void)readImageAtPath:(NSString *)path setSize:(NSSize)imsize; - (oneway void)terminate; @end @interface ImageViewer : NSView { NSArray *extsarr; BOOL valid; NSImageView *imview; NSImage *image; NSTextField *errLabel; NSTextField *widthLabel; NSTextField *heightLabel; ProgressView *progView; NSButton *editButt; NSString *imagePath; NSString *editPath; NSConnection *conn; ImageResizer *resizer; id inspector; NSWorkspace *ws; } - (oneway void)setResizer:(id)anObject; - (oneway void)imageReady:(NSDictionary *)imginfo; - (void)editFile:(id)sender; - (void)setContextHelp; @end @interface ProgressView : NSView { NSMutableArray *images; NSUInteger index; NSTimeInterval rfsh; NSTimer *progTimer; BOOL animating; } - (id)initWithFrame:(NSRect)frameRect refreshInterval:(NSTimeInterval)refresh; - (void)start; - (void)stop; - (void)animate:(id)sender; - (BOOL)animating; @end #endif // IMAGEVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/ImageViewer.m0000644000175000001440000002654514751250144024651 0ustar multixusers/* ImageViewer.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "ImageViewer.h" #include #import "Resizer.h" @implementation ImageViewer - (void)dealloc { DESTROY (resizer); RELEASE (imagePath); RELEASE (image); RELEASE (editPath); RELEASE (imview); RELEASE (errLabel); RELEASE (progView); DESTROY (conn); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSRect r = [self bounds]; r.origin.y += 60; r.size.height -= 60; imview = [[NSImageView alloc] initWithFrame: r]; [imview setEditable: NO]; [imview setImageFrameStyle: NSImageFrameGrayBezel]; [imview setImageAlignment: NSImageAlignCenter]; [imview setImageScaling: NSScaleNone]; [self addSubview: imview]; r.origin.x = 10; r.origin.y -= 20; r.size.width = 90; r.size.height = 20; widthLabel = [[NSTextField alloc] initWithFrame: r]; [widthLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [widthLabel setBezeled: NO]; [widthLabel setEditable: NO]; [widthLabel setSelectable: NO]; [widthLabel setStringValue: @""]; [self addSubview: widthLabel]; RELEASE (widthLabel); r.origin.x = 160; heightLabel = [[NSTextField alloc] initWithFrame: r]; [heightLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [heightLabel setBezeled: NO]; [heightLabel setEditable: NO]; [heightLabel setSelectable: NO]; [heightLabel setAlignment: NSRightTextAlignment]; [heightLabel setStringValue: @""]; [self addSubview: heightLabel]; RELEASE (heightLabel); r.origin.x = 2; r.origin.y = 170; r.size.width = [self bounds].size.width - 4; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; r.origin.x = 6; r.origin.y = 16; r.size.width = 16; r.size.height = 16; progView = [[ProgressView alloc] initWithFrame: r refreshInterval: 0.05]; r.origin.x = 141; r.origin.y = 10; r.size.width = 115; r.size.height = 25; editButt = [[NSButton alloc] initWithFrame: r]; [editButt setButtonType: NSMomentaryLight]; [editButt setImage: [NSImage imageNamed: @"common_ret.tiff"]]; [editButt setImagePosition: NSImageRight]; [editButt setTitle: NSLocalizedString(@"Edit", @"")]; [editButt setTarget: self]; [editButt setAction: @selector(editFile:)]; [editButt setEnabled: NO]; [self addSubview: editButt]; RELEASE (editButt); inspector = insp; ws = [NSWorkspace sharedWorkspace]; valid = YES; resizer = nil; imagePath = nil; editPath = nil; image = nil; [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { DESTROY (editPath); [editButt setEnabled: NO]; [widthLabel setStringValue: @""]; [heightLabel setStringValue: @""]; ASSIGN (imagePath, path); if (conn == nil) { NSPort *p1; NSPort *p2; p1 = [NSPort port]; p2 = [NSPort port]; conn = [[NSConnection alloc] initWithReceivePort: p1 sendPort: p2]; [conn setRootObject:self]; [NSThread detachNewThreadSelector: @selector(connectWithPorts:) toTarget: [ImageResizer class] withObject: [NSArray arrayWithObjects: p2, p1, nil]]; } if (!(resizer == nil)) { NSSize imsize = [imview bounds].size; imsize.width -= 4; imsize.height -= 4; [self addSubview: progView]; [progView start]; [resizer readImageAtPath: imagePath setSize: imsize]; } } - (oneway void)setResizer:(id)anObject { NSSize imsize = [imview bounds].size; imsize.width -= 4; imsize.height -= 4; [anObject setProtocolForProxy: @protocol(ImageResizerProtocol)]; resizer = (ImageResizer *)anObject; RETAIN (resizer); [resizer setProxy: self]; [self addSubview: progView]; [progView start]; [resizer readImageAtPath: imagePath setSize: imsize]; } - (oneway void)imageReady:(NSDictionary *)imginfo { NSData *imgdata; BOOL imgok; imgok = NO; imgdata = nil; // whether we have or not read an image, we declare the content is ready // at most we won't display it, otherwise other data does not update if ([self superview]) [inspector contentsReadyAt: imagePath]; if (nil != imginfo) { imgdata = [imginfo objectForKey:@"imgdata"]; // since resizing is async, we check if we still need the generated image if ([imagePath isEqualToString:[imginfo objectForKey: @"imgpath"]] == NO) { NSLog(@"ImageViewer: trying to display inconsistent image"); return; } } else { NSLog(@"imageReady without imginfo"); } if (imgdata) { DESTROY (image); image = [[NSImage alloc] initWithData: imgdata]; if (image) { float width = [[imginfo objectForKey: @"width"] floatValue]; float height = [[imginfo objectForKey: @"height"] floatValue]; NSString *str; imgok = YES; if (valid == NO) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: imview]; } [imview setImage: image]; str = NSLocalizedString(@"Width:", @""); str = [NSString stringWithFormat: @"%@ %.0f", str, width]; [widthLabel setStringValue: str]; str = NSLocalizedString(@"Height:", @""); str = [NSString stringWithFormat: @"%@ %.0f", str, height]; [heightLabel setStringValue: str]; ASSIGN (editPath, imagePath); [editButt setEnabled: YES]; [[self window] makeFirstResponder: editButt]; DESTROY (imagePath); } else { NSLog(@"no image returned"); } } if (imgok == NO) { valid = NO; [imview removeFromSuperview]; [self addSubview: errLabel]; [widthLabel setStringValue: @""]; [heightLabel setStringValue: @""]; [editButt setEnabled: NO]; } [progView stop]; [progView removeFromSuperview]; } - (void)displayData:(NSData *)data ofType:(NSString *)type { } - (NSString *)path { return editPath; } - (void)stopTasks { [imview setImage: nil]; } - (BOOL)canDisplayPath:(NSString *)path { NSDictionary *attributes; NSString *defApp, *fileType, *extension; attributes = [[NSFileManager defaultManager] fileAttributesAtPath: path traverseLink: YES]; if ([attributes objectForKey: NSFileType] == NSFileTypeDirectory) { return NO; } [ws getInfoForFile: path application: &defApp type: &fileType]; extension = [path pathExtension]; if ([[NSImage imageFileTypes] containsObject: [extension lowercaseString]]) { return YES; } return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return NO; } - (NSString *)winname { return NSLocalizedString(@"Image Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you view the content of an Image file", @""); } - (void)editFile:(id)sender { NSString *appName; NSString *type; [ws getInfoForFile: editPath application: &appName type: &type]; if (appName) { NS_DURING { [ws openFile: editPath withApplication: appName]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [editPath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } - (void)setContextHelp { NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; NSUInteger i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([[NSFileManager defaultManager] fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end @implementation ProgressView #define IMAGES 8 - (void)dealloc { RELEASE (images); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect refreshInterval:(NSTimeInterval)refresh { self = [super initWithFrame: frameRect]; if (self) { NSUInteger i; images = [NSMutableArray new]; for (i = 0; i < IMAGES; i++) { NSString *imname = [NSString stringWithFormat: @"anim-logo-%lu.tiff", (unsigned long)i]; [images addObject: [NSImage imageNamed: imname]]; } rfsh = refresh; animating = NO; } return self; } - (void)start { index = 0; animating = YES; progTimer = [NSTimer scheduledTimerWithTimeInterval: rfsh target: self selector: @selector(animate:) userInfo: nil repeats: YES]; } - (void)stop { if (animating) { animating = NO; if (progTimer && [progTimer isValid]) { [progTimer invalidate]; } [self setNeedsDisplay: YES]; } } - (void)animate:(id)sender { [self setNeedsDisplay: YES]; index++; if (index == [images count]) { index = 0; } } - (BOOL)animating { return animating; } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; if (animating) { [[images objectAtIndex: index] compositeToPoint: NSMakePoint(0, 0) operation: NSCompositeSourceOver]; } } @end gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/InspectorInfo.plist0000644000175000001440000000016113214346546026115 0ustar multixusers{ Name = "Image Inspector"; Description = "This Inspector allow you view the content of an Image file"; } gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resizer.h0000755000175000001440000000230014751213523024045 0ustar multixusers/* Resizer.m h * * Copyright (C) 2005-2020 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: May 2016 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "ContentViewersProtocol.h" @interface ImageResizer : NSObject { id imageViewerProxy; } - (void)setProxy:(id )ivp; - (void)readImageAtPath:(NSString *)path setSize:(NSSize)imsize; @end gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resizer.m0000644000175000001440000001546214751213523024064 0ustar multixusers/* Resizer.m * * Copyright (C) 2005-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: January 2005 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #include #import "Resizer.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) @implementation ImageResizer + (void)connectWithPorts:(NSArray *)portArray { NSAutoreleasePool *pool; ImageResizer *serverObject; NSConnection *serverConnection; pool = [[NSAutoreleasePool alloc] init]; serverConnection = [NSConnection connectionWithReceivePort: [portArray objectAtIndex:0] sendPort: [portArray objectAtIndex:1]]; serverObject = [[self alloc] init]; if (serverObject) { [(id)[serverConnection rootProxy] setResizer:serverObject]; [serverObject release]; [[NSRunLoop currentRunLoop] run]; } [pool release]; [NSThread exit]; } - (void)dealloc { [super dealloc]; } - (void)setProxy:(id )ivp { imageViewerProxy = ivp; } - (void)readImageAtPath:(NSString *)path setSize:(NSSize)imsize { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *info = nil; NSImage *srcImage; srcImage = [[NSImage alloc] initWithContentsOfFile: path]; if (srcImage && [srcImage isValid]) { NSBitmapImageRep *srcImageRep; NSInteger srcSizeW; NSInteger srcSizeH; NSEnumerator *repEnum; NSImageRep *imgRep; info = [NSMutableDictionary dictionary]; repEnum = [[srcImage representations] objectEnumerator]; srcImageRep = nil; imgRep = nil; while (srcImageRep == nil && (imgRep = [repEnum nextObject])) { if ([imgRep isKindOfClass:[NSBitmapImageRep class]]) srcImageRep = (NSBitmapImageRep *)imgRep; } srcSizeW = [srcImageRep pixelsWide]; srcSizeH = [srcImageRep pixelsHigh]; [info setObject: [NSNumber numberWithFloat: (float)srcSizeW] forKey: @"width"]; [info setObject: [NSNumber numberWithFloat: (float)srcSizeH] forKey: @"height"]; [info setObject: path forKey: @"imgpath"]; if ((imsize.width < srcSizeW) || (imsize.height < srcSizeH)) { NSInteger srcSamplesPerPixel; NSInteger destSamplesPerPixel; NSInteger dstSizeW, dstSizeH; float xRatio, yRatio; NSBitmapImageRep *dstRep; NSData *tiffData; unsigned x, y; unsigned i; if ((imsize.width / srcSizeW) <= (imsize.height / srcSizeH)) { dstSizeW = floor(imsize.width + 0.5); dstSizeH = floor(dstSizeW * srcSizeH / srcSizeW + 0.5); } else { dstSizeH = floor(imsize.height + 0.5); dstSizeW= floor(dstSizeH * srcSizeW / srcSizeH + 0.5); } xRatio = (float)srcSizeW / (float)dstSizeW; yRatio = (float)srcSizeH / (float)dstSizeH; srcSamplesPerPixel = [srcImageRep samplesPerPixel]; destSamplesPerPixel = [srcImageRep samplesPerPixel]; dstRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:dstSizeW pixelsHigh:dstSizeH bitsPerSample:[srcImageRep bitsPerSample] samplesPerPixel:destSamplesPerPixel hasAlpha:[srcImageRep hasAlpha] isPlanar:[srcImageRep isPlanar] colorSpaceName:[srcImageRep colorSpaceName] bytesPerRow:0 bitsPerPixel:0]; for (y = 0; y < dstSizeH; y++) { for (x = 0; x < dstSizeW; x++) { register NSInteger x0, y0; register float xDiff, yDiff; float xFloat, yFloat; NSInteger x1, y1; int xStep, yStep; NSUInteger srcPixel1[5]; NSUInteger srcPixel2[5]; NSUInteger srcPixel3[5]; NSUInteger srcPixel4[5]; NSUInteger destPixel[5]; // we use integer part of the ratio, so that we can set the next pixel to at least one apart xStep = floorf(xRatio); yStep = floorf(yRatio); if (xStep == 0) xStep = 1; if (yStep == 0) yStep = 1; xFloat = (float)x * xRatio; yFloat = (float)y * yRatio; x0 = (NSInteger)floorf(xFloat); y0 = (NSInteger)floorf(yFloat); x1 = x0 + xStep; y1 = y0 + yStep; // these are the weight w and h, normalized to the distance 1 : x1-x0 xDiff = (xFloat - (float)x0)/(float)xStep; yDiff = (yFloat - (float)y0)/(float)yStep; if (x1 >= srcSizeW ) { x1 = srcSizeW-1; xDiff = 0; } if (y1 >= srcSizeH ) { y1 = srcSizeH-1; yDiff = 0; } [srcImageRep getPixel: srcPixel1 atX:x0 y:y0]; [srcImageRep getPixel: srcPixel2 atX:x1 y:y0]; [srcImageRep getPixel: srcPixel3 atX:x0 y:y1]; [srcImageRep getPixel: srcPixel4 atX:x1 y:y1]; for (i = 0; i < srcSamplesPerPixel; i++) { destPixel[i] = \ (NSUInteger)(srcPixel1[i]*(1-xDiff)*(1-yDiff) + \ srcPixel2[i]*xDiff*(1-yDiff) + \ srcPixel3[i]*yDiff*(1-xDiff) + \ srcPixel4[i]*xDiff*yDiff); } [dstRep setPixel: destPixel atX: x y:y]; } } NS_DURING { tiffData = [dstRep TIFFRepresentation]; } NS_HANDLER { tiffData = nil; } NS_ENDHANDLER if (tiffData) { [info setObject: tiffData forKey:@"imgdata"]; } RELEASE (dstRep); } else { if (srcImageRep) { [info setObject: [srcImageRep TIFFRepresentation] forKey:@"imgdata"]; } else { NSLog(@"(not resized) no valid image representation for %@", path); } } RELEASE (srcImage); } else { NSLog(@"No image or not valid for %@", path); } [imageViewerProxy imageReady: info]; RELEASE (arp); } @end gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resources/0000755000175000001440000000000013214346546024232 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resources/English.lproj/0000755000175000001440000000000013214346546026750 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030576 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resources/English.lproj/Help.rtfd/.gwdir0000644000175000001440000000054613214346546031720 0ustar multixusers{ fsn_info_type = <*I0>; geometry = "115 618 450 350 0 0 1600 1176 "; lastselection = ( "/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/Inspector/ContentViewers/ImageViewer/Resources/English.lproj/Help.rtfd" ); shelfdicts = ( ); shelfheight = <*R77>; singlenode = <*BN>; spatial = <*BN>; viewtype = Browser; }gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113113214346546031766 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Image Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/ImageViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032603 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/0000755000175000001440000000000014753472316022561 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/GNUmakefile0000644000175000001440000000075713251572120024626 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = NSColorViewer BUNDLE_EXTENSION = .inspector NSColorViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # NSColorViewer_OBJC_FILES = NSColorViewer.m NSColorViewer_PRINCIPAL_CLASS = NSColorViewer NSColorViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/GNUmakefile.preamble0000644000175000001440000000120513214346546026413 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/InspectorInfo.plist0000644000175000001440000000015613214346546026416 0ustar multixusers{ Name = "NSColor Inspector"; Description = "This Inspector allow you view NSColor pasteboard data"; } gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/NSColorViewer.h0000644000175000001440000000345514751213523025431 0ustar multixusers/* NSColorViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef NSCOLORVIEWER_H #define NSCOLORVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSImage; @class NSTextField; @class ColorsView; @protocol ContentInspectorProtocol - (void)dataContentsReadyForType:(NSString *)typeDescr useIcon:(NSImage *)icon; @end @interface NSColorViewer : NSView { BOOL valid; NSString *typeDescriprion; NSImage *icon; ColorsView *colorsView; NSTextField *redField; NSTextField *greenField; NSTextField *blueField; NSTextField *alphaField; NSTextField *errLabel; id inspector; } - (void)setContextHelp; @end @interface ColorsView : NSView { float hue; float saturation; float brightness; BOOL isColor; } - (void)setHue:(float)h saturation:(float)s brightness:(float)b; @end #endif // NSCOLORVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/NSColorViewer.m0000644000175000001440000002061314751213736025437 0ustar multixusers/* NSColorViewer.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include #include "NSColorViewer.h" #ifndef PI #define PI 3.141592653589793 #endif @implementation NSColorViewer - (void)dealloc { RELEASE (typeDescriprion); RELEASE (icon); RELEASE (colorsView); RELEASE (errLabel); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSRect r = [self bounds]; r.origin.y += 30; r.size.height -= 30; colorsView = [[ColorsView alloc] initWithFrame: r]; [self addSubview: colorsView]; r.origin.y -= 20; r.size.width = 62; r.size.height = 20; r.origin.x = 5; redField = [[NSTextField alloc] initWithFrame: r]; [redField setBackgroundColor: [NSColor windowBackgroundColor]]; [redField setBezeled: NO]; [redField setEditable: NO]; [redField setSelectable: NO]; [redField setStringValue: @""]; [self addSubview: redField]; RELEASE (redField); r.origin.x += 62; greenField = [[NSTextField alloc] initWithFrame: r]; [greenField setBackgroundColor: [NSColor windowBackgroundColor]]; [greenField setBezeled: NO]; [greenField setEditable: NO]; [greenField setSelectable: NO]; [greenField setStringValue: @""]; [self addSubview: greenField]; RELEASE (greenField); r.origin.x += 62; blueField = [[NSTextField alloc] initWithFrame: r]; [blueField setBackgroundColor: [NSColor windowBackgroundColor]]; [blueField setBezeled: NO]; [blueField setEditable: NO]; [blueField setSelectable: NO]; [blueField setStringValue: @""]; [self addSubview: blueField]; RELEASE (blueField); r.origin.x += 62; alphaField = [[NSTextField alloc] initWithFrame: r]; [alphaField setBackgroundColor: [NSColor windowBackgroundColor]]; [alphaField setBezeled: NO]; [alphaField setEditable: NO]; [alphaField setSelectable: NO]; [alphaField setStringValue: @""]; [self addSubview: alphaField]; RELEASE (alphaField); r.origin.x = 2; r.origin.y = 170; r.size.width = [self bounds].size.width - 4; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; inspector = insp; valid = YES; ASSIGN (typeDescriprion, NSLocalizedString(@"NSColor data", @"")); ASSIGN (icon, [NSImage imageNamed: @"colorPboard"]); [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { } - (void)displayData:(NSData *)data ofType:(NSString *)type { id c = [NSUnarchiver unarchiveObjectWithData: data]; if ([self superview]) { [inspector dataContentsReadyForType: typeDescriprion useIcon: icon]; } if (c && [c isKindOfClass: [NSColor class]]) { NSColor *color = [c colorUsingColorSpaceName: NSDeviceRGBColorSpace]; CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; CGFloat hue = 0.0, saturation = 0.0, brightness = 0.0; if (valid == NO) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: colorsView]; } [color getHue: &hue saturation: &saturation brightness: &brightness alpha: &alpha]; [colorsView setHue: hue saturation: saturation brightness: brightness]; [color getRed: &red green: &green blue: &blue alpha: &alpha]; [redField setStringValue: [NSString stringWithFormat: @"R: %.2f", red]]; [greenField setStringValue: [NSString stringWithFormat: @"G: %.2f", green]]; [blueField setStringValue: [NSString stringWithFormat: @"B: %.2f", blue]]; [alphaField setStringValue: [NSString stringWithFormat: @"alpha: %.2f", alpha]]; } else { if (valid == YES) { valid = NO; [colorsView removeFromSuperview]; [self addSubview: errLabel]; [redField setStringValue: @""]; [greenField setStringValue: @""]; [blueField setStringValue: @""]; [alphaField setStringValue: @""]; } } } - (NSString *)path { return nil; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return ([type isEqual: NSColorPboardType]); } - (NSString *)winname { return NSLocalizedString(@"NSColor Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you view NSColor pasteboard data", @""); } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end @implementation ColorsView - (void)dealloc { [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if(self) { isColor = NO; } return self; } - (void)setHue:(float)h saturation:(float)s brightness:(float)b { hue = h; saturation = s; brightness = b; isColor = YES; [self setNeedsDisplay: YES]; } - (void)drawRect:(NSRect)rect { NSRect frame = [self bounds]; NSRect r = NSIntersectionRect(frame, rect); [[[self window] backgroundColor] set]; NSRectFill(r); NSDrawGrayBezel(frame, rect); if (isColor) { float cx, cy, cr; float x, y; float r, a; float dx, dy; cx = (frame.origin.x + frame.size.width) / 2; cy = (frame.origin.y + frame.size.height) / 2; frame.origin.x += 20; frame.origin.y += 20; frame.size.width -= 40; frame.size.height -= 40; cr = frame.size.width; if (cr > frame.size.height) { cr = frame.size.height; } cr = cr / 2 - 2; frame.origin.x = floor(frame.origin.x); frame.origin.y = floor(frame.origin.y); frame.size.width = ceil(frame.size.width) + 1; frame.size.height = ceil(frame.size.height) + 1; for (y = frame.origin.y; y < frame.origin.y + frame.size.height; y++) { for (x = frame.origin.x; x < frame.origin.x + frame.size.width; x++) { dx = x - cx; dy = y - cy; r = dx * dx + dy * dy; r = sqrt(r); r /= cr; if (r > 1) { continue; } a = atan2(dy, dx); a = a / 2.0 / PI; if (a < 0) { a += 1; } PSsethsbcolor(a, r, brightness); PSrectfill(x,y,1,1); } } a = hue * 2 * PI; r = saturation * cr; x = cos(a) * r + cx; y = sin(a) * r + cy; PSsetgray(0); PSrectstroke(x - 4, y - 4, 8, 8); } } @end gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/Resources/0000755000175000001440000000000013214346546024527 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/Resources/English.lproj/0000755000175000001440000000000013214346546027245 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546031073 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/Resources/English.lproj/Help.rtfd/.gwdir0000644000175000001440000000055013214346546032210 0ustar multixusers{ fsn_info_type = <*I0>; geometry = "116 617 450 350 0 0 1600 1176 "; lastselection = ( "/opt/Surse/gnustep/SVN/devmodules/usr-apps/gworkspace/Inspector/ContentViewers/NSColorViewer/Resources/English.lproj/Help.rtfd" ); shelfdicts = ( ); shelfheight = <*R77>; singlenode = <*BN>; spatial = <*BN>; viewtype = Browser; }gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113413214346546032266 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 NSColor Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/NSColorViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546033100 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/0000755000175000001440000000000014753472316022136 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/GNUmakefile0000644000175000001440000000074113251572120024174 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = NSRTFViewer BUNDLE_EXTENSION = .inspector NSRTFViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # NSRTFViewer_OBJC_FILES = NSRTFViewer.m NSRTFViewer_PRINCIPAL_CLASS = NSRTFViewer NSRTFViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/GNUmakefile.preamble0000644000175000001440000000120513214346546025770 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/InspectorInfo.plist0000644000175000001440000000015013214346546025765 0ustar multixusers{ Name = "Rtf Inspector"; Description = "This Inspector allow you view NSRTF pasteboard data"; } gworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/NSRTFViewer.h0000644000175000001440000000311314751213523024352 0ustar multixusers/* NSRTFViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef NSRTFVIEWER_H #define NSRTFVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSImage; @class NSImageView; @class NSTextField; @class NSTextView; @class NSScrollView; @protocol ContentInspectorProtocol - (void)dataContentsReadyForType:(NSString *)typeDescr useIcon:(NSImage *)icon; @end @interface NSRTFViewer : NSView { BOOL valid; NSArray *typesDescriprion; NSArray *typeIcons; NSScrollView *scrollView; NSTextView *textView; NSTextField *errLabel; id inspector; } - (void)setContextHelp; @end #endif // NSRTFVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/NSRTFViewer.m0000644000175000001440000001566714751213736024406 0ustar multixusers/* NSRTFViewer.m * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "NSRTFViewer.h" #define STR 0 #define RTF 1 #define RTFD 2 @implementation NSRTFViewer - (void)dealloc { RELEASE (typesDescriprion); RELEASE (typeIcons); RELEASE (scrollView); RELEASE (textView); RELEASE (errLabel); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSRect r = [self bounds]; r.origin.y += 10; r.size.height -= 10; scrollView = [[NSScrollView alloc] initWithFrame: r]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasHorizontalScroller: NO]; [scrollView setHasVerticalScroller: YES]; [scrollView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizesSubviews:YES]; [self addSubview: scrollView]; r = [[scrollView contentView] bounds]; textView = [[NSTextView alloc] initWithFrame: r]; [textView setBackgroundColor: [NSColor whiteColor]]; [textView setRichText: YES]; [textView setEditable: NO]; [textView setSelectable: NO]; [textView setHorizontallyResizable: NO]; [textView setVerticallyResizable: YES]; [textView setMinSize: NSMakeSize (0, 0)]; [textView setMaxSize: NSMakeSize (1E7, 1E7)]; [textView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[textView textContainer] setContainerSize: NSMakeSize (r.size.width, 1e7)]; [[textView textContainer] setWidthTracksTextView: YES]; [textView setUsesRuler: NO]; [scrollView setDocumentView: textView]; r.origin.x = 2; r.origin.y = 170; r.size.width -= 4; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; inspector = insp; valid = YES; ASSIGN (typesDescriprion, ([NSArray arrayWithObjects: NSLocalizedString(@"NSString data", @""), NSLocalizedString(@"NSRTF data", @""), NSLocalizedString(@"NSRTFD data", @""), nil])); ASSIGN (typeIcons, ([NSArray arrayWithObjects: [NSImage imageNamed: @"stringPboard"], [NSImage imageNamed: @"rtfPboard"], [NSImage imageNamed: @"rtfPboard"], nil])); [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { } - (void)displayData:(NSData *)data ofType:(NSString *)type { NSAttributedString *attrstr = nil; int index = 0; index = -1; if ([type isEqual: NSStringPboardType]) { NSString *str = [[NSString alloc] initWithData: data encoding: [NSString defaultCStringEncoding]]; if (str) { attrstr = [[NSAttributedString alloc] initWithString: str]; RELEASE (str); } index = STR; } else if ([type isEqual: NSRTFPboardType]) { attrstr = [[NSAttributedString alloc] initWithRTF: data documentAttributes: NULL]; index = RTF; } else if ([type isEqual: NSRTFDPboardType]) { attrstr = [[NSAttributedString alloc] initWithRTFD: data documentAttributes: NULL]; index = RTFD; } if ([self superview]) { [inspector dataContentsReadyForType: [typesDescriprion objectAtIndex: index] useIcon: [typeIcons objectAtIndex: index]]; } if (attrstr) { if (valid == NO) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: scrollView]; } [[textView textStorage] setAttributedString: attrstr]; if ([type isEqual: NSStringPboardType]) { [[textView textStorage] addAttribute: NSFontAttributeName value: [NSFont systemFontOfSize: 8.0] range: NSMakeRange(0, [attrstr length])]; } RELEASE (attrstr); } else { if (valid == YES) { valid = NO; [scrollView removeFromSuperview]; [self addSubview: errLabel]; } } } - (NSString *)path { return nil; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return ([type isEqual: NSStringPboardType] || [type isEqual: NSRTFPboardType] || [type isEqual: NSRTFDPboardType]); } - (NSString *)winname { return NSLocalizedString(@"Rtf Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you view NSRTF pasteboard data", @""); } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/Resources/0000755000175000001440000000000013214346546024104 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/Resources/English.lproj/0000755000175000001440000000000013214346546026622 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030450 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113113214346546031640 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 NSRTF Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/NSRTFViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032455 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/0000755000175000001440000000000014753472316022233 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/GNUmakefile0000644000175000001440000000075013251572120024271 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = NSTIFFViewer BUNDLE_EXTENSION = .inspector NSTIFFViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # NSTIFFViewer_OBJC_FILES = NSTIFFViewer.m NSTIFFViewer_PRINCIPAL_CLASS = NSTIFFViewer NSTIFFViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/GNUmakefile.preamble0000644000175000001440000000120513214346546026065 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search #ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/InspectorInfo.plist0000644000175000001440000000015413214346546026066 0ustar multixusers{ Name = "NSTIFF Inspector"; Description = "This Inspector allow you view NSTIFF pasteboard data"; } gworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/NSTIFFViewer.h0000644000175000001440000000315214751213523024547 0ustar multixusers/* NSTIFFViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef NSTIFFVIEWER_H #define NSTIFFVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSImage; @class NSImageView; @class NSTextField; @class NSTextView; @class NSScrollView; @protocol ContentInspectorProtocol - (void)dataContentsReadyForType:(NSString *)typeDescr useIcon:(NSImage *)icon; @end @interface NSTIFFViewer : NSView { BOOL valid; NSString *typeDescriprion; NSImage *icon; NSImageView *imview; NSTextField *errLabel; NSTextField *widthLabel; NSTextField *heightLabel; id inspector; } - (void)setContextHelp; @end #endif // NSTIFFVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/NSTIFFViewer.m0000644000175000001440000001345514751213523024563 0ustar multixusers/* NSTIFFViewer.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "NSTIFFViewer.h" @implementation NSTIFFViewer - (void)dealloc { RELEASE (typeDescriprion); RELEASE (icon); RELEASE (imview); RELEASE (errLabel); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSRect r = [self bounds]; r.origin.y += 30; r.size.height -= 30; imview = [[NSImageView alloc] initWithFrame: r]; [imview setEditable: NO]; [imview setImageFrameStyle: NSImageFrameGrayBezel]; [imview setImageAlignment: NSImageAlignCenter]; [self addSubview: imview]; r.origin.x = 10; r.origin.y -= 20; r.size.width = 90; r.size.height = 20; widthLabel = [[NSTextField alloc] initWithFrame: r]; [widthLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [widthLabel setBezeled: NO]; [widthLabel setEditable: NO]; [widthLabel setSelectable: NO]; [widthLabel setStringValue: @""]; [self addSubview: widthLabel]; RELEASE (widthLabel); r.origin.x = 160; heightLabel = [[NSTextField alloc] initWithFrame: r]; [heightLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [heightLabel setBezeled: NO]; [heightLabel setEditable: NO]; [heightLabel setSelectable: NO]; [heightLabel setAlignment: NSRightTextAlignment]; [heightLabel setStringValue: @""]; [self addSubview: heightLabel]; RELEASE (heightLabel); r.origin.x = 2; r.origin.y = 170; r.size.width = [self bounds].size.width - 4; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; inspector = insp; valid = YES; ASSIGN (typeDescriprion, NSLocalizedString(@"Image data", @"")); ASSIGN (icon, [NSImage imageNamed: @"tiffPboard"]); [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { } - (void)displayData:(NSData *)data ofType:(NSString *)type { NSImage *image = [[NSImage alloc] initWithData: data]; if ([self superview]) { [inspector dataContentsReadyForType: typeDescriprion useIcon: icon]; } if (image) { NSSize is = [image size]; float width = is.width; float height = is.height; NSSize rs = [imview bounds].size; NSString *str; if (valid == NO) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: imview]; } if ((width <= rs.width) && (height <= rs.height)) { [imview setImageScaling: NSScaleNone]; } else { [imview setImageScaling: NSScaleProportionally]; } [imview setImage: image]; RELEASE (image); str = NSLocalizedString(@"Width:", @""); str = [NSString stringWithFormat: @"%@ %.0f", str, width]; [widthLabel setStringValue: str]; str = NSLocalizedString(@"Height:", @""); str = [NSString stringWithFormat: @"%@ %.0f", str, height]; [heightLabel setStringValue: str]; } else { if (valid == YES) { valid = NO; [imview removeFromSuperview]; [self addSubview: errLabel]; [widthLabel setStringValue: @""]; [heightLabel setStringValue: @""]; } } } - (NSString *)path { return nil; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return ([type isEqual: NSTIFFPboardType]); } - (NSString *)winname { return NSLocalizedString(@"NSTIFF Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you view NSTIFF pasteboard data", @""); } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/Resources/0000755000175000001440000000000013214346546024201 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/Resources/English.lproj/0000755000175000001440000000000013214346546026717 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030545 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113213214346546031736 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 NSTIFF Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/NSTIFFViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032552 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/0000755000175000001440000000000014753472316021753 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/GNUmakefile0000644000175000001440000000116113251572120024006 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = PdfViewer BUNDLE_EXTENSION = .inspector PdfViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall PdfViewer_GUI_LIBS += -lPDFKit PdfViewer_OBJC_FILES = PdfViewer.m PdfViewer_PRINCIPAL_CLASS = PdfViewer #PdfViewer_LANGUAGES = English PdfViewer_RESOURCE_FILES = Images/* \ InspectorInfo.plist \ Resources/English.lproj #PdfViewer_LOCALIZED_RESOURCE_FILES = Localizable.strings -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/GNUmakefile.postamble0000644000175000001440000000117313214346546026010 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -f config.h TAGS # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/GNUmakefile.preamble0000644000175000001440000000106013214346546025604 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/0000755000175000001440000000000013214346546023154 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/left.tiff0000644000175000001440000000361013214346546024760 0ustar multixusersII*H[m~nn{jjn{jnv{{m{jjy{{v{{n{jTsij{[m~jWjRllSWjH[[WBWH[[vyv{{m{{{m{jjnn{ij{[nn[[{[[[[[jH[[HH[{{{{v{jn{jnij{[m~jW{[nnSWjH[[WBWH[[m{{{{{{{{{{{m{jjnjjnn{ij{[nn[[j[[n[[jH[[HH[{jn{jn{jn{jnjj[m~ij{[m~jWj[nnSWjH[[WBWH[[jjnm{m{jjnjjnn{jj[nnjW{[[n[[j[[[[[jH[[HH[ij{Tsjjnij{[m~ij{[m~jW{[nnSWjSWjWBjH[[WBWH[[ij{nn{ij{nn{ij{[nnij{[nn[[{[[[[[j[[[[HjF[HHH[jW{[nnjW{[nn{{{[[{[nn[[jSWjSWj[[j{{{& 3.b@@x(R/home/enrico/Grivei/sviluppo/GSPdf/Icons/down.tiffCreated with The GIMPppgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/page.tiff0000644000175000001440000000335013214346546024743 0ustar multixusersII*ҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴҴ 3@(R/home/enrico/Grivei/sviluppo/GSPdf/Icons/page.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/pause.tiff0000644000175000001440000000223013214346546025140 0ustar multixusersII* tr@(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/pause.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/play.tiff0000644000175000001440000000214013214346546024770 0ustar multixusersII*A A6 IEJaJEI6 AA   s:@PX(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/play.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/right.tiff0000644000175000001440000000360613214346546025150 0ustar multixusersII*H{{{[nnij{[[n[m~jW{[nn{{{ij{[nn[[j[[nvy{{n{jnjj[m~jW{[nnSWj[[n{{vv{{{{{m{jjnn{jjnn{[[{[[n[[j[[[n{{{{{{n{jnjj[m~ij{[m~jWj[[nSWjH[[{{{{{{{{{{{{{{m{jjnn{jj[nn[m~[[n[[j[[[[[jHH[n{jn{jn{jn{jnij{[m~jW{[nnSWj[[nWBjH[[WBWjjnn{jjm{jjnjjnn{jjnn{ij{[nn[[{[[[[[j[[[HHj[m~ij{[m~jjnjj[m~ij{[m~jW{[m~jW{[nnSWjH[[WBj[m~[nnij{[m~ij{nn{ij{[nnij{[nn[[{[nn[[j[[[[[j[nnSWjSWjWBj[[j[[[[[jH[[WBWHH[& 1.`@@v~(R/home/enrico/Grivei/sviluppo/GSPdf/Icons/up.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Images/stop.tiff0000644000175000001440000000223013214346546025010 0ustar multixusersII* sr@(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/stop.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/InspectorInfo.plist0000644000175000001440000000015413214346546025606 0ustar multixusers{ Name = "Pdf Inspector"; Description = "This Inspector allow you View the content of a PDF file"; } gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/PdfViewer.h0000644000175000001440000000357614751213523024021 0ustar multixusers/* PdfViewer.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "ContentViewersProtocol.h" @class NSImageView; @class NSTextField; @class NSButton; @class NSWorkspace; @protocol ContentInspectorProtocol - (void)contentsReadyAt:(NSString *)path; @end @class NSScrollView; @class NSMatrix; @class NSImageView; @class NSTextField; @class NSWorkspace; @class NSButton; @class PDFDocument; @class PDFImageRep; @class NSImage; @interface PdfViewer : NSView { BOOL valid; NSButton *backButt, *nextButt; NSScrollView *scroll; NSMatrix *matrix; NSImageView *imageView; NSTextField *errLabel; NSButton *editButt; NSString *pdfPath; PDFDocument *pdfDoc; PDFImageRep *imageRep; id inspector; NSFileManager *fm; NSNotificationCenter *nc; NSWorkspace *ws; } - (void)goToPage:(id)sender; - (void)nextPage:(id)sender; - (void)previousPage:(id)sender; - (void)editFile:(id)sender; - (void)setContextHelp; @end gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/PdfViewer.m0000644000175000001440000003026414751250144024020 0ustar multixusers/* PdfViewer.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "PdfViewer.h" #define MAXPAGES 9999 const double PDFResolution = 72.0; @implementation PdfViewer - (void)dealloc { TEST_RELEASE (pdfPath); TEST_RELEASE (pdfDoc); TEST_RELEASE (imageRep); RELEASE (backButt); RELEASE (nextButt); RELEASE (scroll); RELEASE (matrix); RELEASE (imageView); RELEASE (errLabel); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSRect r = [self bounds]; NSRect vr; id cell; #define MARGIN 3 vr = NSMakeRect(0, r.size.height - 25 - MARGIN, 25, 25); nextButt = [[NSButton alloc] initWithFrame: vr]; [nextButt setButtonType: NSMomentaryLight]; [nextButt setImagePosition: NSImageOnly]; [nextButt setImage: [NSImage imageNamed: @"common_ArrowUp.tiff"]]; [nextButt setTarget: self]; [nextButt setAction: @selector(nextPage:)]; [self addSubview: nextButt]; vr.origin.y -= 25; backButt = [[NSButton alloc] initWithFrame: vr]; [backButt setButtonType: NSMomentaryLight]; [backButt setImagePosition: NSImageOnly]; [backButt setImage: [NSImage imageNamed: @"common_ArrowDown.tiff"]]; [backButt setTarget: self]; [backButt setAction: @selector(previousPage:)]; [self addSubview: backButt]; vr.origin.x = 25 + MARGIN; vr.size.width = r.size.width - vr.origin.x; vr.size.height = 50; scroll = [[NSScrollView alloc] initWithFrame: vr]; [scroll setBorderType: NSBezelBorder]; [scroll setHasHorizontalScroller: YES]; [scroll setHasVerticalScroller: NO]; [scroll setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [self addSubview: scroll]; cell = AUTORELEASE ([NSButtonCell new]); [cell setButtonType: NSPushOnPushOffButton]; [cell setImagePosition: NSImageOverlaps]; matrix = [[NSMatrix alloc] initWithFrame: NSZeroRect mode: NSRadioModeMatrix prototype: cell numberOfRows: 0 numberOfColumns: 0]; [matrix setIntercellSpacing: NSZeroSize]; [matrix setCellSize: NSMakeSize(26, [[scroll contentView] bounds].size.height)]; [matrix setAllowsEmptySelection: YES]; [matrix setTarget: self]; [matrix setAction: @selector(goToPage:)]; [scroll setDocumentView: matrix]; vr.size.height = vr.origin.y - 42 - MARGIN; vr.origin.x = 0; vr.origin.y = 42; vr.size.width = r.size.width; imageView = [[NSImageView alloc] initWithFrame: vr]; [imageView setImageFrameStyle: NSImageFrameGrayBezel]; // [imageView setImageScaling: NSScaleNone]; [imageView setImageAlignment: NSImageAlignCenter]; [imageView setEditable: NO]; [self addSubview: imageView]; vr.origin.x = 2; vr.origin.y = 170; vr.size.width = r.size.width - 4; vr.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: vr]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; vr.origin.x = 141; vr.origin.y = 10; vr.size.width = 115; vr.size.height = 25; editButt = [[NSButton alloc] initWithFrame: vr]; [editButt setButtonType: NSMomentaryLight]; [editButt setImage: [NSImage imageNamed: @"common_ret.tiff"]]; [editButt setImagePosition: NSImageRight]; [editButt setTitle: NSLocalizedString(@"Edit", @"")]; [editButt setTarget: self]; [editButt setAction: @selector(editFile:)]; [editButt setEnabled: NO]; [self addSubview: editButt]; RELEASE (editButt); inspector = insp; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; valid = YES; pdfPath = nil; [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { PDFDocument *doc; ASSIGN (pdfPath, path); if ([self superview]) { [inspector contentsReadyAt: pdfPath]; } [editButt setEnabled: NO]; doc = [PDFDocument documentFromFile: pdfPath]; if ([doc isOk] && ([doc errorCode] == 0)) { int npages; NSSize imageSize; NSBundle *bundle; NSString *imagePath; NSImage *miniPage; id cell; int i; if (!valid) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: backButt]; [self addSubview: nextButt]; [self addSubview: scroll]; [self addSubview: imageView]; } [imageView setImage: nil]; [editButt setEnabled: YES]; [[self window] makeFirstResponder: editButt]; if (matrix) { [matrix removeFromSuperview]; [scroll setDocumentView: nil]; DESTROY (matrix); } cell = AUTORELEASE ([NSButtonCell new]); [cell setButtonType: NSPushOnPushOffButton]; [cell setImagePosition: NSImageOverlaps]; matrix = [[NSMatrix alloc] initWithFrame: NSZeroRect mode: NSRadioModeMatrix prototype: cell numberOfRows: 0 numberOfColumns: 0]; [matrix setIntercellSpacing: NSZeroSize]; [matrix setCellSize: NSMakeSize(26, [[scroll contentView] bounds].size.height)]; [matrix setAllowsEmptySelection: YES]; [matrix setTarget: self]; [matrix setAction: @selector(goToPage:)]; [scroll setDocumentView: matrix]; bundle = [NSBundle bundleForClass: [self class]]; imagePath = [bundle pathForResource: @"page" ofType: @"tiff" inDirectory: nil]; miniPage = [[NSImage alloc] initWithContentsOfFile: imagePath]; npages = [doc countPages]; for (i = 0; i < npages; i++) { [matrix addColumn]; cell = [matrix cellAtRow: 0 column: i]; if (i < 100) { [cell setFont: [NSFont systemFontOfSize: 10]]; } else { [cell setFont: [NSFont systemFontOfSize: 8]]; } [cell setImage: miniPage]; [cell setTitle: [NSString stringWithFormat: @"%i", i+1]]; } [matrix sizeToCells]; RELEASE (miniPage); DESTROY (imageRep); ASSIGN (pdfDoc, doc); imageSize = NSMakeSize([pdfDoc pageWidth: 1], [pdfDoc pageHeight: 1]); imageRep = [[PDFImageRep alloc] initWithDocument: pdfDoc]; [imageRep setSize: imageSize]; } else { if (valid) { valid = NO; [backButt removeFromSuperview]; [nextButt removeFromSuperview]; [scroll removeFromSuperview]; [imageView removeFromSuperview]; [self addSubview: errLabel]; [editButt setEnabled: NO]; } } if (valid) { [matrix selectCellAtRow: 0 column: 0]; [matrix sendAction]; } } - (void)goToPage:(id)sender { NSImage *image = nil; NSInteger index; NSSize imsize; NSSize unscaledSize; index = [matrix selectedColumn] + 1; if (index <= 0) return; imsize = [imageView bounds].size; unscaledSize = NSMakeSize([pdfDoc pageWidth: index], [pdfDoc pageHeight: index]); if ((imsize.width < unscaledSize.width) || (imsize.height < unscaledSize.height)) { float rw, rh; NSSize scaledSize; float xfactor, yfactor; rw = imsize.width / unscaledSize.width; rh = imsize.height / unscaledSize.height; if (rw <= rh) { scaledSize.width = unscaledSize.width * rw; scaledSize.height = floor(imsize.width * unscaledSize.height / unscaledSize.width + 0.5); } else { scaledSize.height = unscaledSize.height * rh; scaledSize.width = floor(imsize.height * unscaledSize.width / unscaledSize.height + 0.5); } xfactor = scaledSize.width / unscaledSize.width * PDFResolution; yfactor = scaledSize.height / unscaledSize.height * PDFResolution; [imageRep setResolution: (xfactor < yfactor ? xfactor : yfactor)]; } [imageRep setPageNum: index]; image = [[NSImage alloc] initWithSize: [imageRep size]]; [image setBackgroundColor: [NSColor whiteColor]]; [image setScalesWhenResized: YES]; [image addRepresentation: imageRep]; [imageView setImage: image]; RELEASE (image); } - (void)displayData:(NSData *)data ofType:(NSString *)type { } - (NSString *)path { return pdfPath; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { NSDictionary *attributes; NSString *defApp, *fileType; attributes = [[NSFileManager defaultManager] fileAttributesAtPath: path traverseLink: YES]; if ([attributes objectForKey: NSFileType] == NSFileTypeDirectory) { return NO; } [ws getInfoForFile: path application: &defApp type: &fileType]; if ([[[path pathExtension] lowercaseString] isEqual: @"pdf"]) { return YES; } return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return NO; } - (NSString *)winname { return NSLocalizedString(@"Pdf Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you View the content of a PDF file", @""); } - (void)nextPage:(id)sender { int index; index = [matrix selectedColumn] + 1; if (index <= 0) return; if (index < [pdfDoc countPages]) index++; else index = [pdfDoc countPages]; [matrix selectCellAtRow:0 column:index-1]; [matrix sendAction]; } - (void)previousPage:(id)sender { int index; index = [matrix selectedColumn] + 1; if (index <= 0) return; if (index > 1) index--; else index = 1; [matrix selectCellAtRow:0 column:index-1]; [matrix sendAction]; } - (void)editFile:(id)sender { NSString *appName; NSString *type; [ws getInfoForFile: pdfPath application: &appName type: &type]; if (appName) { NS_DURING { [ws openFile: pdfPath withApplication: appName]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [pdfPath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } - (void)setContextHelp { NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Resources/0000755000175000001440000000000013214346546023721 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Resources/English.lproj/0000755000175000001440000000000013214346546026437 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030265 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113013214346546031454 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Pdf Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/PdfViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032272 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/0000755000175000001440000000000014753472316021775 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/GNUmakefile0000644000175000001440000000072413251572120024034 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = RtfViewer BUNDLE_EXTENSION = .inspector RtfViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall # # We are creating a bundle # RtfViewer_OBJC_FILES = RtfViewer.m RtfViewer_PRINCIPAL_CLASS = RtfViewer RtfViewer_RESOURCE_FILES = Resources/English.lproj \ InspectorInfo.plist -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/GNUmakefile.preamble0000644000175000001440000000076413214346546025640 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/InspectorInfo.plist0000644000175000001440000000017013214346546025626 0ustar multixusers{ Name = "Rtf-Txt Inspector"; Description = "This Inspector allow you view the content of an Rtf ot txt file"; } gworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/Resources/0000755000175000001440000000000013214346546023743 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/Resources/English.lproj/0000755000175000001440000000000013214346546026461 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030307 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000112713214346546031504 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Rtf Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032314 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/RtfViewer.h0000644000175000001440000000300614751213523024051 0ustar multixusers/* RtfViewer.h * * Copyright (C) 2004-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "ContentViewersProtocol.h" @class NSTextView; @class NSScrollView; @class NSTextField; @class NSButton; @class NSWorkspace; @protocol ContentInspectorProtocol - (void)contentsReadyAt:(NSString *)path; @end @interface RtfViewer: NSView { NSString *editPath; BOOL valid; NSArray *extsarr; NSScrollView *scrollView; NSTextView *textView; NSTextField *errLabel; NSButton *editButt; id inspector; NSWorkspace *ws; } - (void)editFile:(id)sender; - (void)setContextHelp; @end gworkspace-1.1.0/Inspector/ContentViewers/RtfViewer/RtfViewer.m0000644000175000001440000002155514751250144024067 0ustar multixusers/* RtfViewer.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "RtfViewer.h" #define MAXDATA 1000 @implementation RtfViewer - (void)dealloc { RELEASE (extsarr); RELEASE (scrollView); RELEASE (errLabel); TEST_RELEASE (editPath); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if (self) { NSRect r = [self bounds]; extsarr = [[NSArray alloc] initWithObjects: @"rtf", @"rtfd", @"txt", @"text", @"html", @"htm", @"css", @"csv", @"pl", @"sh", @"rb", @"el", @"scm", @"c", @"cc", @"C", @"cpp", @"m", @"h", @"java", @"class", @"in", @"log", @"ac", @"diff", @"postamble", @"preamble", nil]; r.origin.y += 45; r.size.height -= 45; scrollView = [[NSScrollView alloc] initWithFrame: r]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasHorizontalScroller: NO]; [scrollView setHasVerticalScroller: YES]; [scrollView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizesSubviews: YES]; [self addSubview: scrollView]; r = [[scrollView contentView] bounds]; textView = [[NSTextView alloc] initWithFrame: r]; [textView setBackgroundColor: [NSColor whiteColor]]; [textView setRichText: YES]; [textView setEditable: NO]; [textView setSelectable: NO]; [textView setHorizontallyResizable: NO]; [textView setVerticallyResizable: YES]; [textView setMinSize: NSMakeSize (0, 0)]; [textView setMaxSize: NSMakeSize (1E7, 1E7)]; [textView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[textView textContainer] setContainerSize: NSMakeSize(r.size.width, 1e7)]; [[textView textContainer] setWidthTracksTextView: YES]; [textView setUsesRuler: NO]; [scrollView setDocumentView: textView]; RELEASE (textView); r.origin.x = 2; r.origin.y = 170; r.size.width = [self bounds].size.width - 4; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; r.origin.x = 141; r.origin.y = 10; r.size.width = 115; r.size.height = 25; editButt = [[NSButton alloc] initWithFrame: r]; [editButt setButtonType: NSMomentaryLight]; [editButt setImage: [NSImage imageNamed: @"common_ret.tiff"]]; [editButt setImagePosition: NSImageRight]; [editButt setTitle: NSLocalizedString(@"Edit", @"")]; [editButt setTarget: self]; [editButt setAction: @selector(editFile:)]; [editButt setEnabled: NO]; [self addSubview: editButt]; RELEASE (editButt); editPath = nil; inspector = insp; ws = [NSWorkspace sharedWorkspace]; valid = YES; [self setContextHelp]; } return self; } - (void)displayPath:(NSString *)path { CREATE_AUTORELEASE_POOL (pool); NSString *ext = [[path pathExtension] lowercaseString]; NSData *data = nil; NSString *s = nil; NSAttributedString *attrstr = nil; NSFont *font = nil; if ([self superview]) { [inspector contentsReadyAt: path]; } if (([ext isEqual: @"rtf"] == NO) && ([ext isEqual: @"rtfd"] == NO)) { NSDictionary *dict = [[NSFileManager defaultManager] fileAttributesAtPath: path traverseLink: YES]; int nbytes = [[dict objectForKey: NSFileSize] intValue]; NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath: path]; int maxbytes = 0; data = [NSMutableData new]; do { maxbytes += MAXDATA; [(NSMutableData *)data appendData: [handle readDataOfLength: ((nbytes >= MAXDATA) ? MAXDATA : nbytes)]]; s = [[NSString alloc] initWithData: data encoding: [NSString defaultCStringEncoding]]; } while ((s == nil) && (maxbytes < nbytes)); [handle closeFile]; RELEASE (data); attrstr = [[NSAttributedString alloc] initWithString: s]; RELEASE (s); AUTORELEASE (attrstr); font = [NSFont systemFontOfSize: 8.0]; } else if ([ext isEqual: @"rtf"] || [ext isEqual: @"rtfd"]) { attrstr = [[NSAttributedString alloc] initWithPath: path documentAttributes: NULL]; TEST_AUTORELEASE (attrstr); } if (attrstr) { ASSIGN (editPath, path); if (valid == NO) { valid = YES; [errLabel removeFromSuperview]; [self addSubview: scrollView]; } [[textView textStorage] setAttributedString: attrstr]; if (font) { [[textView textStorage] addAttribute: NSFontAttributeName value: font range: NSMakeRange(0, [attrstr length])]; } [editButt setEnabled: YES]; [[self window] makeFirstResponder: editButt]; } else { if (valid == YES) { valid = NO; [scrollView removeFromSuperview]; [self addSubview: errLabel]; [editButt setEnabled: NO]; } } RELEASE (pool); } - (void)displayData:(NSData *)data ofType:(NSString *)type { } - (NSString *)path { return editPath; } - (void)stopTasks { } - (BOOL)canDisplayPath:(NSString *)path { NSDictionary *attributes; NSString *defApp, *fileType, *extension; attributes = [[NSFileManager defaultManager] fileAttributesAtPath: path traverseLink: YES]; extension = [[path pathExtension] lowercaseString]; if ([attributes objectForKey: NSFileType] == NSFileTypeDirectory) { return [extension isEqual: @"rtfd"]; } [ws getInfoForFile: path application: &defApp type: &fileType]; if ([extsarr containsObject: extension]) { return YES; } return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return NO; } - (NSString *)winname { return NSLocalizedString(@"Rtf-Txt Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you view the content of an Rtf ot txt file", @""); } - (void)editFile:(id)sender { NSString *appName; NSString *type; [ws getInfoForFile: editPath application: &appName type: &type]; if (appName != nil) { NS_DURING { [ws openFile: editPath withApplication: appName]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [editPath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } @end gworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/0000755000175000001440000000000014753472316022332 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/GNUmakefile0000644000175000001440000000101113251572120024357 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = SoundViewer BUNDLE_EXTENSION = .inspector SoundViewer_HAS_RESOURCE_BUNDLE = yes OBJCFLAGS += -Wall SoundViewer_OBJC_FILES = SoundViewer.m SoundViewer_PRINCIPAL_CLASS = SoundViewer SoundViewer_RESOURCE_FILES = Images/* \ InspectorInfo.plist \ Resources/English.lproj \ -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/GNUmakefile.preamble0000644000175000001440000000106013214346546026163 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Images/0000755000175000001440000000000013214346546023533 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Images/pause.tiff0000644000175000001440000000223013214346546025517 0ustar multixusersII* tr@(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/pause.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Images/play.tiff0000644000175000001440000000214013214346546025347 0ustar multixusersII*A A6 IEJaJEI6 AA   s:@PX(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/play.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Images/progind.tiff0000644000175000001440000003153013214346546026051 0ustar multixusersII*1)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{sss{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)1J)9J)9J)9J)1J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{sss{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)1J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)1J19J1BRBJZ{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{s{{{{{{{{{{{s{{{{{{{{{{{{{{{{{{{{{{{{{{νƵνƵνƵνƵνƵνƵֽƵνƵƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭεƭεƭεƭεƭεƭεƭεƭεƭνƵνƵνƵνƵνƵνƵνƵνƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{s{{{s{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{s{{{sksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵΥ{{ֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƔ޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭Υ޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ 2 q223@1H3P3(/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gwremote/GWRemote/Resources/progindindet.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Images/progind10.tiff0000644000175000001440000001177613214346546026224 0ustar multixusersII*x}zfmzT`oMYiHXhHXfHXfHXfKXhUapcl{y}y~flzS`oMYiHXgHXfHXfHXfKYhUapdm{y}y}elzS_nLYiHXgHXfHXfHXfLYhUbpdm|z}x}elyR_nLYiFXgGXfHXfHXfLYiUbpen|{~w|dlyR_nLYiHXgHUfHXfFVfLXiVbpfn|{~v{dkyR^nKYiHXgHXfHXfHXfLYiVbqfo}|u{ckxR^mKYiHXgHUfHXfHXfMYiVcqgo}}uzbjxR^mKYiHXgHXfHXfHVfMYjWcqʺêʺéʹéʹ¨ɹ¨ɸ§˹çɷйǪиǪϸƩϷƩϷƩ϶ũεŨεĨͽƮͽƮͼŭͼŭͻĭͺĬͺì͹ìfwiysũwh{fwfwfwfwizsŨwg{fwfwfwfwjztĨvg{fwfwfwfwjzuħvfzfwfwfwfwjzv˿ævezfwfwewgwj{v˿æufzfwfwfwgwj{w˾¥ufzfwfwfwgwj{x˽¤tezfwfwqqtҷƚwqqqquҶŚwqqqquҵęvqqqqvҴĘvqqqqvѳ×vqqqqvѲ–uqqqqwѱuqqqqwѰ”uq׮ǜ֭ǜ֭ƛ֬ƚիƚիřӪřԪŕΩΩΩΪѳԬϩΩΩΩΪѳԬϩΩΩΩΫѳԬϩΩΩΩΫѳ߳ԬΩΩΩΩΫҴ߳ԬΩΩΩΩΫҴ޲ԬΩΩΩΩάҵ޲ԬΩΩΩΩάҶݲ߻ܸܸܸܻܺ߻ܸܸܸܻܺ߻ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ | U@(/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Inspector/Resources/Images/progind10.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Images/stop.tiff0000644000175000001440000000223013214346546025367 0ustar multixusersII* sr@(R/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace-0.4/Inspectors/Viewers/SoundViewer/Images/stop.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/InspectorInfo.plist0000644000175000001440000000014413214346546026164 0ustar multixusers{ Name = "Sound Inspector"; Description = "This Inspector allow you to play a sound file"; } gworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Resources/0000755000175000001440000000000013214346546024300 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Resources/English.lproj/0000755000175000001440000000000013214346546027016 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Resources/English.lproj/Help.rtfd/0000755000175000001440000000000013214346546030644 5ustar multixusersgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Resources/English.lproj/Help.rtfd/TXT.rtf0000644000175000001440000000113113214346546032034 0ustar multixusers{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \cf1\pard\tx0\li100\ql\f0\fs36 \uc0 \par Under construction\par \pard\ql\fs16\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li360\ql \uc0 \par \pard\ql\fs24\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\li300\ql \uc0 Sound Viewer help.\par \par \cf0\pard\ql\pard\tx0\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\ql \uc0 \par \cf0{{\NeXTGraphic dummy.tiff \width480 \height480} \uc0 \u-4 }\uc0 \par }gworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/Resources/English.lproj/Help.rtfd/dummy.tiff0000644000175000001440000000503213214346546032651 0ustar multixusersII* c򵵵򵵵c++N͵͵Nr򵵵򵵵rr򵵵򵵵rN͵͵N++d򵵵򵵵d  ' @   (R/root/Desktop/Template.rtfd/dummy.tiffHHgworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/SoundViewer.h0000644000175000001440000000324714751213523024752 0ustar multixusers/* SoundViewer.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef SOUNDVIEWER_H #define SOUNDVIEWER_H #include #include #include "ContentViewersProtocol.h" @class NSBox; @class NSTextField; @class NSButton; @class NSProgressIndicator; @class NSWorkspace; @class NSSound; @protocol ContentInspectorProtocol - (void)contentsReadyAt:(NSString *)path; @end @interface SoundViewer : NSView { NSString *soundPath; NSSound *sound; BOOL valid; NSBox *playBox; NSTextField *errLabel; NSButton *playButt, *pauseButt, *stopButt; NSProgressIndicator *indicator; NSButton *editButt; id inspector; NSWorkspace *ws; } - (void)buttonsAction:(id)sender; - (void)editFile:(id)sender; - (void)setContextHelp; @end #endif // SOUNDVIEWER_H gworkspace-1.1.0/Inspector/ContentViewers/SoundViewer/SoundViewer.m0000644000175000001440000002207214751250144024754 0ustar multixusers/* SoundViewer.m * * Copyright (C) 2004-2025 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "SoundViewer.h" @implementation SoundViewer - (void)dealloc { TEST_RELEASE (soundPath); TEST_RELEASE (sound); RELEASE (playBox); RELEASE (errLabel); RELEASE (indicator); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp { self = [super initWithFrame: frameRect]; if(self) { NSBundle *bundle; NSString *imagePath; NSImage *image; playBox = [[NSBox alloc] initWithFrame: NSMakeRect(30, 125, 197, 80)]; [playBox setBorderType: NSGrooveBorder]; [playBox setTitle: NSLocalizedString(@"Player", @"")]; [playBox setTitlePosition: NSAtTop]; [playBox setContentViewMargins: NSMakeSize(0, 0)]; [self addSubview: playBox]; bundle = [NSBundle bundleForClass: [self class]]; stopButt = [[NSButton alloc] initWithFrame: NSMakeRect(56, 30, 24, 24)]; [stopButt setButtonType: NSMomentaryLight]; [stopButt setImagePosition: NSImageOnly]; imagePath = [bundle pathForResource: @"stop" ofType: @"tiff" inDirectory: nil]; image = [[NSImage alloc] initWithContentsOfFile: imagePath]; [stopButt setImage: image]; RELEASE (image); [stopButt setTarget:self]; [stopButt setAction:@selector(buttonsAction:)]; [playBox addSubview: stopButt]; RELEASE (pauseButt); pauseButt = [[NSButton alloc] initWithFrame: NSMakeRect(86, 30, 24, 24)]; [pauseButt setButtonType: NSMomentaryLight]; [pauseButt setImagePosition: NSImageOnly]; imagePath = [bundle pathForResource: @"pause" ofType: @"tiff" inDirectory: nil]; image = [[NSImage alloc] initWithContentsOfFile: imagePath]; [pauseButt setImage: image]; RELEASE (image); [pauseButt setTarget:self]; [pauseButt setAction:@selector(buttonsAction:)]; [playBox addSubview: pauseButt]; RELEASE (pauseButt); playButt = [[NSButton alloc] initWithFrame: NSMakeRect(116, 30, 24, 24)]; [playButt setButtonType: NSMomentaryLight]; [playButt setImagePosition: NSImageOnly]; imagePath = [bundle pathForResource: @"play" ofType: @"tiff" inDirectory: nil]; image = [[NSImage alloc] initWithContentsOfFile: imagePath]; [playButt setImage: image]; RELEASE (image); [playButt setTarget:self]; [playButt setAction:@selector(buttonsAction:)]; [playBox addSubview: playButt]; RELEASE (playButt); indicator = [[NSProgressIndicator alloc] initWithFrame: NSMakeRect(10, 6, 172, 16)]; [indicator setIndeterminate: YES]; [playBox addSubview: indicator]; editButt = [[NSButton alloc] initWithFrame: NSMakeRect(141, 10, 115, 25)]; [editButt setButtonType: NSMomentaryLight]; [editButt setImage: [NSImage imageNamed: @"common_ret.tiff"]]; [editButt setImagePosition: NSImageRight]; [editButt setTitle: NSLocalizedString(@"Edit", @"")]; [editButt setTarget: self]; [editButt setAction: @selector(editFile:)]; [editButt setEnabled: NO]; [self addSubview: editButt]; RELEASE (editButt); errLabel = [[NSTextField alloc] init]; [errLabel setFrame: NSMakeRect(5, 162, [self bounds].size.width - 10, 25)]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"Invalid Contents", @"")]; soundPath = nil; sound = nil; inspector = insp; ws = [NSWorkspace sharedWorkspace]; valid = YES; [self setContextHelp]; } return self; } - (void)buttonsAction:(id)sender { if (sender == playButt) { if (sound) { if ([sound resume] == NO) { if ([sound isPlaying] == NO) { [indicator startAnimation: self]; [sound play]; } } } } else if (sender == pauseButt) { if (sound && [sound isPlaying]) { [indicator stopAnimation: self]; [sound pause]; } } else if (sender == stopButt) { if (sound && [sound isPlaying]) { [indicator stopAnimation: self]; [sound stop]; [editButt setEnabled: YES]; [[self window] makeFirstResponder: editButt]; } } } - (void)editFile:(id)sender { NSString *appName = nil, *type = nil; [ws getInfoForFile: soundPath application: &appName type: &type]; if (appName != nil) { NS_DURING { [ws openFile: soundPath withApplication: appName]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [soundPath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } - (void)displayPath:(NSString *)path { NSSound *snd; if (sound) { if ([sound isPlaying]) { [sound stop]; [indicator stopAnimation: self]; } DESTROY (sound); } ASSIGN (soundPath, path); if ([self superview]) { [inspector contentsReadyAt: soundPath]; } snd = [[NSSound alloc] initWithContentsOfFile: soundPath byReference: NO]; if (snd) { ASSIGN (sound, snd); [sound setDelegate: self]; if (valid == NO) { [errLabel removeFromSuperview]; [self addSubview: playBox]; valid = YES; } [editButt setEnabled: YES]; [[self window] makeFirstResponder: editButt]; } else { if (valid == YES) { DESTROY (sound); [playBox removeFromSuperview]; [self addSubview: errLabel]; [editButt setEnabled: NO]; valid = NO; } } DESTROY (snd); } - (void)displayData:(NSData *)data ofType:(NSString *)type { } - (NSString *)path { return soundPath; } - (void)stopTasks { if (sound) { if ([sound isPlaying]) { [sound stop]; [indicator stopAnimation: self]; } DESTROY (sound); } } - (BOOL)canDisplayPath:(NSString *)path { NSDictionary *attributes; NSString *defApp, *fileType, *extension; NSArray *types; attributes = [[NSFileManager defaultManager] fileAttributesAtPath: path traverseLink: YES]; if ([attributes objectForKey: NSFileType] == NSFileTypeDirectory) { return NO; } [ws getInfoForFile: path application: &defApp type: &fileType]; extension = [path pathExtension]; types = [NSArray arrayWithObjects: @"aiff", @"wav", @"snd", @"au", nil]; if ([types containsObject: [extension lowercaseString]]) { return YES; } if ([[NSSound soundUnfilteredFileTypes] containsObject: extension]) { return YES; } return NO; } - (BOOL)canDisplayDataOfType:(NSString *)type { return NO; } - (NSString *)winname { return NSLocalizedString(@"Sound Inspector", @""); } - (NSString *)description { return NSLocalizedString(@"This Inspector allow you to play a sound file", @""); } - (void)setContextHelp { NSFileManager *fm = [NSFileManager defaultManager]; NSString *bpath = [[NSBundle bundleForClass: [self class]] bundlePath]; NSString *resPath = [bpath stringByAppendingPathComponent: @"Resources"]; NSArray *languages = [NSUserDefaults userLanguages]; unsigned i; for (i = 0; i < [languages count]; i++) { NSString *language = [languages objectAtIndex: i]; NSString *langDir = [NSString stringWithFormat: @"%@.lproj", language]; NSString *helpPath = [langDir stringByAppendingPathComponent: @"Help.rtfd"]; helpPath = [resPath stringByAppendingPathComponent: helpPath]; if ([fm fileExistsAtPath: helpPath]) { NSAttributedString *help = [[NSAttributedString alloc] initWithPath: helpPath documentAttributes: NULL]; if (help) { [[NSHelpManager sharedHelpManager] setContextHelp: help forObject: self]; RELEASE (help); } } } } - (void) sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool { [indicator stopAnimation: self]; } @end gworkspace-1.1.0/Inspector/ContentViewersProtocol.h0000644000175000001440000000300514751213523021740 0ustar multixusers/* ContentViewersProtocol.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ @protocol ContentViewersProtocol - (id)initWithFrame:(NSRect)frameRect inspector:(id)insp; - (void)displayPath:(NSString *)path; - (void)displayData:(NSData *)data ofType:(NSString *)type; - (NSString *)path; - (void)stopTasks; - (BOOL)canDisplayPath:(NSString *)path; - (BOOL)canDisplayDataOfType:(NSString *)type; - (NSString *)winname; - (NSString *)description; @end /* Proxy for DO connection */ @protocol ImageViewerProtocol - (oneway void)setResizer:(id)anObject; - (oneway void)imageReady:(NSDictionary *)dict; @end gworkspace-1.1.0/Inspector/Contents.h0000644000175000001440000000555414751213523017047 0ustar multixusers/* Contents.h * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class NSWorkspace; @class NSImage; @class NSView; @class TextViewer; @class GenericView; @class NSTextView; @class NSScrollView; @class NSTextField; @class NSButton; @interface Contents : NSObject { IBOutlet id win; IBOutlet NSBox *mainBox; IBOutlet NSBox *topBox; IBOutlet id iconView; IBOutlet id titleField; IBOutlet NSBox *viewersBox; NSView *noContsView; GenericView *genericView; NSMutableArray *viewers; id currentViewer; TextViewer *textViewer; NSString *currentPath; NSImage *pboardImage; NSFileManager *fm; NSWorkspace *ws; id inspector; } - (id)initForInspector:(id)insp; - (NSView *)inspView; - (NSString *)winname; - (void)activateForPaths:(NSArray *)paths; - (id)viewerForPath:(NSString *)path; - (id)viewerForDataOfType:(NSString *)type; - (void)showContentsAt:(NSString *)path; - (void)contentsReadyAt:(NSString *)path; - (BOOL)canDisplayDataOfType:(NSString *)type; - (void)showData:(NSData *)data ofType:(NSString *)type; - (BOOL)isShowingData; - (void)dataContentsReadyForType:(NSString *)typeDescr useIcon:(NSImage *)icon; - (void)watchedPathDidChange:(NSDictionary *)info; - (id)inspector; @end @interface TextViewer : NSView { NSScrollView *scrollView; NSTextView *textView; NSTextField *errLabel; NSButton *editButt; NSString *editPath; NSWorkspace *ws; id contsinsp; } - (id)initWithFrame:(NSRect)frameRect forInspector:(id)insp; - (BOOL)tryToDisplayPath:(NSString *)path; - (NSData *)textContentsAtPath:(NSString *)path withAttributes:(NSDictionary *)attributes; - (void)editFile:(id)sender; @end @interface GenericView : NSView { NSString *shComm; NSString *fileComm; NSTask *task; NSPipe *pipe; NSTextView *textview; NSNotificationCenter *nc; } - (void)showInfoOfPath:(NSString *)path; - (void)dataFromTask:(NSNotification *)notif; - (void)showString:(NSString *)str; @end gworkspace-1.1.0/Inspector/Contents.m0000644000175000001440000004511714751214566017063 0ustar multixusers/* Contents.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Author: Enrico Sersale * Author: Riccardo Mottola * * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "config.h" #import #import #import "Contents.h" #import "ContentViewersProtocol.h" #import "Inspector.h" #import "IconView.h" #import "Functions.h" #import "FSNodeRep.h" #define ICNSIZE 48 #define MAXDATA 1000 #if defined(__MINGW__) #define SHPATH "/bin/sh" #define FILEPATH "/bin/file" #endif static NSString *nibName = @"Contents"; @implementation Contents - (void)dealloc { RELEASE (viewers); RELEASE (currentPath); RELEASE (genericView); RELEASE (noContsView); RELEASE (textViewer); RELEASE (mainBox); RELEASE (pboardImage); [super dealloc]; } - (id)initForInspector:(id)insp { self = [super init]; if (self) { NSBundle *bundle; NSEnumerator *enumerator; NSString *imagepath; NSString *bundlesDir; NSArray *bnames; id label; unsigned i; NSRect r; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); [NSApp terminate: self]; } RETAIN (mainBox); RELEASE (win); inspector = insp; [iconView setInspector: inspector]; viewers = [NSMutableArray new]; currentPath = nil; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; bundle = [NSBundle bundleForClass: [inspector class]]; imagepath = [bundle pathForResource: @"Pboard" ofType: @"tiff"]; pboardImage = [[NSImage alloc] initWithContentsOfFile: imagepath]; r = [[viewersBox contentView] bounds]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; bnames = [fm directoryContentsAtPath: bundlesDir]; for (i = 0; i < [bnames count]; i++) { NSString *bname = [bnames objectAtIndex: i]; if ([[bname pathExtension] isEqual: @"inspector"]) { NSString *bpath = [bundlesDir stringByAppendingPathComponent: bname]; bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; if ([principalClass conformsToProtocol: @protocol(ContentViewersProtocol)]) { CREATE_AUTORELEASE_POOL (pool); id vwr = [[principalClass alloc] initWithFrame: r inspector: self]; [viewers addObject: vwr]; [vwr release]; RELEASE (pool); } } } } } // We reorter viewers and put the ImageViewer at the end, so that specialized viewers, // e.g. PDF Viewer, can take precedence // String comparison, so no class import is needed for (i = 0; i < [viewers count]; i++) { id vwr = [viewers objectAtIndex: i]; if ([NSStringFromClass([vwr class]) isEqualToString:@"ImageViewer"]) { [viewers removeObjectAtIndex: i]; [viewers addObject: vwr]; break; } } textViewer = [[TextViewer alloc] initWithFrame: r forInspector: self]; genericView = [[GenericView alloc] initWithFrame: r]; noContsView = [[NSView alloc] initWithFrame: r]; MAKE_LABEL (label, NSMakeRect(2, 125, 254, 65), _(@"No Contents Inspector"), 'c', YES, noContsView); [label setFont: [NSFont systemFontOfSize: 18]]; [label setTextColor: [NSColor grayColor]]; currentViewer = nil; } return self; } - (NSView *)inspView { return mainBox; } - (NSString *)winname { return NSLocalizedString(@"Contents Inspector", @""); } - (void)activateForPaths:(NSArray *)paths { if ([paths count] == 1) { [self showContentsAt: [paths objectAtIndex: 0]]; } else { NSImage *icon = [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: ICNSIZE]; NSString *items; items = [NSString stringWithFormat: @"%lu %@", (unsigned long)[paths count], NSLocalizedString(@"Items", @"")]; [titleField setStringValue: items]; [iconView setImage: icon]; [viewersBox setContentView: noContsView]; currentViewer = noContsView; if (currentPath) { [inspector removeWatcherForPath: currentPath]; DESTROY (currentPath); } [[inspector win] setTitle: [self winname]]; } } - (id)viewerForPath:(NSString *)path { NSInteger i; if ((path == nil) || ([fm fileExistsAtPath: path] == NO)) { return nil; } for (i = 0; i < [viewers count]; i++) { id vwr = [viewers objectAtIndex: i]; if ([vwr canDisplayPath: path]) { return vwr; } } return nil; } - (id)viewerForDataOfType:(NSString *)type { NSUInteger i; for (i = 0; i < [viewers count]; i++) { id vwr = [viewers objectAtIndex: i]; if ([vwr respondsToSelector: @selector(canDisplayDataOfType:)]) { if ([vwr canDisplayDataOfType: type]) { return vwr; } } } return nil; } - (void)showContentsAt:(NSString *)path { NSString *winName; // No change in selection? leave current path if (currentPath && [currentPath isEqual:path]) { NSLog(@"trying to redisplay %@", path); return; } // we change content to new path or to nil // stop current work (e.g. resizing) if (currentViewer && [currentViewer respondsToSelector: @selector(stopTasks)]) { [currentViewer stopTasks]; } // stop watching the displayed content, since we change it [inspector removeWatcherForPath: currentPath]; DESTROY (currentPath); // Are we going to display the new path? if (path && [fm fileExistsAtPath: path]) { id viewer; viewer = [self viewerForPath: path]; if (viewer) { currentViewer = viewer; winName = [viewer winname]; [viewersBox setContentView: viewer]; [viewer displayPath: path]; } else { FSNode *node = [FSNode nodeWithPath: path]; NSImage *icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; [iconView setImage: icon]; [titleField setStringValue: [node name]]; if ([textViewer tryToDisplayPath: path]) { [viewersBox setContentView: textViewer]; currentViewer = textViewer; winName = NSLocalizedString(@"Text Inspector", @""); if (currentPath == nil) { ASSIGN (currentPath, path); [inspector addWatcherForPath: currentPath]; } } else { [viewersBox setContentView: genericView]; currentViewer = genericView; [genericView showInfoOfPath: path]; winName = NSLocalizedString(@"Contents Inspector", @""); } } } else { [iconView setImage: nil]; [titleField setStringValue: @""]; [viewersBox setContentView: noContsView]; currentViewer = noContsView; winName = NSLocalizedString(@"Contents Inspector", @""); if (currentPath) { [inspector removeWatcherForPath: currentPath]; DESTROY (currentPath); } } [[inspector win] setTitle: winName]; } - (void)contentsReadyAt:(NSString *)path { FSNode *node; NSImage *icon; node = [FSNode nodeWithPath: path]; [titleField setStringValue: [node name]]; icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; [iconView setImage: icon]; if (currentPath == nil) { ASSIGN (currentPath, path); [inspector addWatcherForPath: currentPath]; } } - (BOOL)canDisplayDataOfType:(NSString *)type { return ([self viewerForDataOfType: type] != nil); } - (void)showData:(NSData *)data ofType:(NSString *)type { NSString *winName; id viewer; if (currentViewer) { if ([currentViewer respondsToSelector: @selector(stopTasks)]) { [currentViewer stopTasks]; } } if (currentPath) { [inspector removeWatcherForPath: currentPath]; DESTROY (currentPath); } viewer = [self viewerForDataOfType: type]; if (viewer) { currentViewer = viewer; winName = [viewer winname]; [viewersBox setContentView: viewer]; [viewer displayData: data ofType: type]; } else { [iconView setImage: pboardImage]; [titleField setStringValue: @""]; [viewersBox setContentView: noContsView]; currentViewer = noContsView; winName = NSLocalizedString(@"Data Inspector", @""); } [[inspector win] setTitle: winName]; [viewersBox setNeedsDisplay: YES]; } - (BOOL)isShowingData { return (currentPath == nil); } - (void)dataContentsReadyForType:(NSString *)typeDescr useIcon:(NSImage *)icon { [iconView setImage: icon]; [titleField setStringValue: typeDescr]; } - (void)watchedPathDidChange:(NSDictionary *)info { NSString *path = [info objectForKey: @"path"]; NSString *event = [info objectForKey: @"event"]; if (currentPath && [currentPath isEqual: path]) { if ([event isEqual: @"GWWatchedPathDeleted"]) { [self showContentsAt: nil]; } else if ([event isEqual: @"GWWatchedFileModified"]) { if (currentViewer) { if ([currentViewer respondsToSelector: @selector(displayPath:)]) { [currentViewer displayPath: currentPath]; } else if (currentViewer == textViewer) { [currentViewer tryToDisplayPath: currentPath]; } } } } } - (id)inspector { return inspector; } @end @implementation TextViewer - (void)dealloc { RELEASE (editPath); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect forInspector:(id)insp { self = [super initWithFrame: frameRect]; if (self) { NSRect r = [self bounds]; r.origin.y += 45; r.size.height -= 45; scrollView = [[NSScrollView alloc] initWithFrame: r]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasHorizontalScroller: NO]; [scrollView setHasVerticalScroller: YES]; [scrollView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[scrollView contentView] setAutoresizesSubviews: YES]; [self addSubview: scrollView]; RELEASE (scrollView); r = [[scrollView contentView] bounds]; textView = [[NSTextView alloc] initWithFrame: r]; [textView setBackgroundColor: [NSColor whiteColor]]; [textView setRichText: YES]; [textView setEditable: NO]; [textView setSelectable: NO]; [textView setHorizontallyResizable: NO]; [textView setVerticallyResizable: YES]; [textView setMinSize: NSMakeSize (0, 0)]; [textView setMaxSize: NSMakeSize (1E7, 1E7)]; [textView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[textView textContainer] setContainerSize: NSMakeSize(r.size.width, 1e7)]; [[textView textContainer] setWidthTracksTextView: YES]; [textView setUsesRuler: NO]; [scrollView setDocumentView: textView]; RELEASE (textView); r.origin.x = 141; r.origin.y = 10; r.size.width = 115; r.size.height = 25; editButt = [[NSButton alloc] initWithFrame: r]; [editButt setButtonType: NSMomentaryLight]; [editButt setImage: [NSImage imageNamed: @"common_ret.tiff"]]; [editButt setImagePosition: NSImageRight]; [editButt setTitle: NSLocalizedString(@"Edit", @"")]; [editButt setTarget: self]; [editButt setAction: @selector(editFile:)]; [editButt setEnabled: NO]; [self addSubview: editButt]; RELEASE (editButt); contsinsp = insp; editPath = nil; ws = [NSWorkspace sharedWorkspace]; } return self; } - (BOOL)tryToDisplayPath:(NSString *)path { NSFileManager *fm = [NSFileManager defaultManager]; NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: YES]; DESTROY (editPath); [editButt setEnabled: NO]; if (attributes && ([attributes fileType] != NSFileTypeDirectory)) { NSString *app = nil, *type = nil; [ws getInfoForFile: path application: &app type: &type]; if (type && ((type == NSPlainFileType) || (type == NSShellCommandFileType))) { NSData *data = [self textContentsAtPath: path withAttributes: attributes]; if (data) { CREATE_AUTORELEASE_POOL (pool); NSString *str = [[NSString alloc] initWithData: data encoding: [NSString defaultCStringEncoding]]; NSAttributedString *attrstr = [[NSAttributedString alloc] initWithString: str]; [[textView textStorage] setAttributedString: attrstr]; [[textView textStorage] addAttribute: NSFontAttributeName value: [NSFont systemFontOfSize: 8.0] range: NSMakeRange(0, [attrstr length])]; RELEASE (str); RELEASE (attrstr); [editButt setEnabled: YES]; ASSIGN (editPath, path); RELEASE (pool); return YES; } } } return NO; } - (NSData *)textContentsAtPath:(NSString *)path withAttributes:(NSDictionary *)attributes { unsigned long long nbytes = [attributes fileSize]; NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath: path]; NSData *data; nbytes = ((nbytes > MAXDATA) ? MAXDATA : nbytes); NS_DURING { data = [handle readDataOfLength: nbytes]; } NS_HANDLER { [handle closeFile]; return nil; } NS_ENDHANDLER [handle closeFile]; if (data) { const char *bytes = [data bytes]; int i; for (i = 0; i < nbytes; i++) { if (!isascii(bytes[i])) { return nil; } } return data; } return nil; } - (void)editFile:(id)sender { if (editPath) { [[[contsinsp inspector] desktopApp] openFile: editPath]; } } @end @implementation GenericView - (void)dealloc { [nc removeObserver: self]; if (task && [task isRunning]) { [task terminate]; } RELEASE (task); RELEASE (pipe); RELEASE (shComm); RELEASE (fileComm); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if (self) { NSString *comm; NSRect r; shComm = nil; fileComm = nil; comm = [NSString stringWithCString: SHPATH]; if ([comm isEqual: @"none"] == NO) { ASSIGN (shComm, comm); } comm = [NSString stringWithCString: FILEPATH]; if ([comm isEqual: @"none"] == NO) { ASSIGN (fileComm, comm); } nc = [NSNotificationCenter defaultCenter]; r = NSMakeRect(0, 60, frameRect.size.width, 140); textview = [[NSTextView alloc] initWithFrame: r]; [[textview textContainer] setContainerSize: [textview bounds].size]; [textview setDrawsBackground: NO]; [textview setRichText: NO]; [textview setSelectable: NO]; [textview setVerticallyResizable: NO]; [textview setHorizontallyResizable: NO]; [self addSubview: textview]; RELEASE (textview); } return self; } - (void)showInfoOfPath:(NSString *)path { [self showString: @""]; if (shComm && fileComm) { CREATE_AUTORELEASE_POOL (pool); NSString *str; NSFileHandle *handle; [nc removeObserver: self]; if (task && [task isRunning]) { [task terminate]; } DESTROY (task); task = [NSTask new]; [task setLaunchPath: shComm]; str = [NSString stringWithFormat: @"%@ -b \"%@\"", fileComm, path]; [task setArguments: [NSArray arrayWithObjects: @"-c", str, nil]]; ASSIGN (pipe, [NSPipe pipe]); [task setStandardOutput: pipe]; handle = [pipe fileHandleForReading]; [nc addObserver: self selector: @selector(dataFromTask:) name: NSFileHandleReadToEndOfFileCompletionNotification object: handle]; [handle readToEndOfFileInBackgroundAndNotify]; [task launch]; RELEASE (pool); } else { [self showString: NSLocalizedString(@"No Contents Inspector", @"")]; } } - (void)dataFromTask:(NSNotification *)notif { CREATE_AUTORELEASE_POOL (pool); NSDictionary *userInfo = [notif userInfo]; NSData *data = [userInfo objectForKey: NSFileHandleNotificationDataItem]; NSString *str; if (data && [data length]) { str = [[NSString alloc] initWithData: data encoding: [NSString defaultCStringEncoding]]; } else { str = [[NSString alloc] initWithString: NSLocalizedString(@"No Contents Inspector", @"")]; } [self showString: str]; RELEASE (str); RELEASE (pool); } - (void)showString:(NSString *)str { CREATE_AUTORELEASE_POOL (pool); NSAttributedString *attrstr = [[NSAttributedString alloc] initWithString: str]; NSRange range = NSMakeRange(0, [attrstr length]); NSTextStorage *storage = [textview textStorage]; NSMutableParagraphStyle *style = [NSMutableParagraphStyle new]; [storage setAttributedString: attrstr]; [style setParagraphStyle: [NSParagraphStyle defaultParagraphStyle]]; [style setAlignment: NSCenterTextAlignment]; [storage addAttribute: NSParagraphStyleAttributeName value: style range: range]; [storage addAttribute: NSFontAttributeName value: [NSFont systemFontOfSize: 18] range: range]; [storage addAttribute: NSForegroundColorAttributeName value: [NSColor darkGrayColor] range: range]; RELEASE (attrstr); RELEASE (style); RELEASE (pool); } @end gworkspace-1.1.0/Inspector/Functions.h0000644000175000001440000000372414751213523017217 0ustar multixusers/* Functions.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "config.h" @class NSString; @class NSMenuItem; #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) #ifndef MAKE_LABEL #define MAKE_LABEL(label, rect, str, align, release, view) { \ label = [[NSTextField alloc] initWithFrame: rect]; \ [label setFont: [NSFont systemFontOfSize: 12]]; \ if (align == 'c') [label setAlignment: NSCenterTextAlignment]; \ else if (align == 'r') [label setAlignment: NSRightTextAlignment]; \ else [label setAlignment: NSLeftTextAlignment]; \ [label setBackgroundColor: [NSColor windowBackgroundColor]]; \ [label setBezeled: NO]; \ [label setEditable: NO]; \ [label setSelectable: NO]; \ if (str) [label setStringValue: str]; \ [view addSubview: label]; \ if (release) RELEASE (label); \ } #endif #ifndef STROKE_LINE #define STROKE_LINE(c, x1, y1, x2, y2) { \ [[NSColor c] set]; \ [NSBezierPath strokeLineFromPoint: NSMakePoint(x1, y1) \ toPoint: NSMakePoint(x2, y2)]; \ } #endif NSString *fixpath(NSString *s, const char *c); NSString *relativePathFit(id container, NSString *fullPath); gworkspace-1.1.0/Inspector/Functions.m0000644000175000001440000000466714751213523017233 0ustar multixusers/* Functions.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep Inspector application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "Functions.h" static NSString *fix_path(NSString *s, const char *c) { static NSFileManager *mgr = nil; const char *ptr = c; unsigned len; if (mgr == nil) { mgr = [NSFileManager defaultManager]; RETAIN (mgr); } if (ptr == 0) { if (s == nil) { return nil; } ptr = [s cString]; } len = strlen(ptr); return [mgr stringWithFileSystemRepresentation: ptr length: len]; } NSString *fixpath(NSString *s, const char *c) { return fix_path(s, c); } NSString *relativePathFit(id container, NSString *fullPath) { NSArray *pathcomps; float cntwidth; NSFont *font; NSString *path; NSString *relpath = nil; NSUInteger i; NSString *prefix; cntwidth = [container bounds].size.width; font = [container font]; prefix = @"/(..)"; if (![fullPath isAbsolutePath]) prefix = @".."; if([font widthOfString: fullPath] < cntwidth) return fullPath; cntwidth = cntwidth - [font widthOfString: prefix]; pathcomps = [fullPath pathComponents]; i = [pathcomps count] - 1; path = [NSString stringWithString: [pathcomps objectAtIndex: i]]; relpath = path; while(i > 0) { i--; if([font widthOfString: path] < cntwidth) relpath = [NSString stringWithString: path]; else break; path = [[pathcomps objectAtIndex: i] stringByAppendingPathComponent:path];; } relpath = [prefix stringByAppendingPathComponent:relpath]; return relpath; } gworkspace-1.1.0/Inspector/GNUmakefile.in0000644000175000001440000000246614623464062017563 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make PDFKIT=@have_pdfkit@ SH_PATH=@SH_PATH@ FILE_PATH=@FILE_PATH@ SUBPROJECTS = ContentViewers FRAMEWORK_NAME = Inspector include Version Inspector_PRINCIPAL_CLASS = Inspector Inspector_HAS_RESOURCE_BUNDLE = yes ifneq ($(PDFKIT),no) Inspector_GUI_LIBS += -lPDFKit ADDITIONAL_LDFLAGS = -lPDFKit endif Inspector_RESOURCE_FILES = \ Resources/Images/* \ Resources/English.lproj Inspector_LANGUAGES = Resources/English # The Objective-C source files to be compiled Inspector_OBJC_FILES = \ Inspector.m \ Attributes.m \ Contents.m \ Tools.m \ Annotations.m \ IconView.m \ TimeDateView.m \ Functions.m Inspector_HEADER_FILES = \ Inspector.h \ ContentViewersProtocol.h LIBRARIES_DEPEND_UPON += -lFSNode LIBRARIES_DEPEND_UPON += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ifeq ($(OBJC_RUNTIME_LIB), gnu) SHARED_LD_POSTFLAGS += -lgnustep-base -lgnustep-gui -lFSNode endif endif include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/framework.make include $(GNUSTEP_MAKEFILES)/aggregate.make include GNUmakefile.postamble gworkspace-1.1.0/Inspector/GNUmakefile.postamble0000644000175000001440000000145613231754602021135 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing #before-install:: #before-all:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -rf autom4te*.cache rm -f config.status config.log config.cache TAGS rm -f config.status config.log config.cache config.h GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Inspector/GNUmakefile.preamble0000644000175000001440000000126413214346546020740 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../FSNode # Additional LDFLAGS to pass to the linker ADDITIONAL_OBJC_LIBS += -lFSNode # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += -L../FSNode/FSNode.framework ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Inspector/IconView.h0000644000175000001440000000312214751213523016762 0ustar multixusers/* IconView.m * * Copyright (C) 2005-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import @interface IconView : NSImageView { id inspector; BOOL dndTarget; } - (void)setInspector:(id)insp; - (void)setDndTarget:(BOOL)value; @end @interface IconView (NSDraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal; @end gworkspace-1.1.0/Inspector/IconView.m0000644000175000001440000000374314751213523017000 0ustar multixusers/* IconView.m * * Copyright (C) 2005-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: August 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "IconView.h" #import "Inspector.h" @implementation IconView - (void)setInspector:(id)insp { inspector = insp; [self registerForDraggedTypes: [NSImage imagePasteboardTypes]]; } - (void)setDndTarget:(BOOL)value { dndTarget = value; } @end @implementation IconView (NSDraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { return [inspector draggingEntered: sender inIconView: self]; } - (NSDragOperation)draggingUpdated:(id )sender { return dndTarget; } - (void)draggingExited:(id )sender { [inspector draggingExited: sender inIconView: self]; } - (BOOL)prepareForDragOperation:(id )sender { return dndTarget; } - (BOOL)performDragOperation:(id )sender { return dndTarget; } - (void)concludeDragOperation:(id )sender { [inspector concludeDragOperation: sender inIconView: self]; } - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal { return NSDragOperationEvery; } @end gworkspace-1.1.0/Inspector/Inspector.h0000644000175000001440000000460314751213523017212 0ustar multixusers/* Inspector.h * * Copyright (C) 2004-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef INSPECTOR_H #define INSPECTOR_H #import #import "FSNodeRep.h" @class Attributes; @class Contents; @class Tools; @class IconView; @class NSPopUpButton; @class NSWindow; @interface Inspector : NSObject { IBOutlet NSWindow *win; IBOutlet NSPopUpButton *popUp; IBOutlet NSBox *inspBox; NSMutableArray *inspectors; id currentInspector; NSArray *currentPaths; NSString *watchedPath; NSNotificationCenter *nc; id desktopApp; } - (void)activate; - (void)setCurrentSelection:(NSArray *)selection; - (BOOL)canDisplayDataOfType:(NSString *)type; - (void)showData:(NSData *)data ofType:(NSString *)type; - (IBAction)activateInspector:(id)sender; - (void)showAttributes; - (id)attributes; - (void)showContents; - (id)contents; - (void)showTools; - (id)tools; - (void)showAnnotations; - (id)annotations; - (NSWindow *)win; - (void)updateDefaults; - (void)addWatcherForPath:(NSString *)path; - (void)removeWatcherForPath:(NSString *)path; - (void)watcherNotification:(NSNotification *)notif; - (id)desktopApp; @end @interface Inspector (CustomDirectoryIcons) - (NSDragOperation)draggingEntered:(id )sender inIconView:(IconView *)iview; - (void)draggingExited: (id )sender inIconView:(IconView *)iview; - (void)concludeDragOperation:(id )sender inIconView:(IconView *)iview; @end #endif // INSPECTOR_H gworkspace-1.1.0/Inspector/Inspector.m0000644000175000001440000002463014751213523017221 0ustar multixusers/* Inspector.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "Inspector.h" #import "ContentViewersProtocol.h" #import "Contents.h" #import "Attributes.h" #import "Tools.h" #import "Annotations.h" #import "IconView.h" #import "Functions.h" #define ATTRIBUTES 0 #define CONTENTS 1 #define TOOLS 2 #define ANNOTATIONS 3 static NSString *nibName = @"InspectorWin"; @implementation Inspector - (void)dealloc { [nc removeObserver: self]; RELEASE (watchedPath); RELEASE (currentPaths); RELEASE (inspectors); RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selName = [defaults stringForKey: @"DesktopApplicationSelName"]; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } if (appName && selName) { Class desktopAppClass = [[NSBundle mainBundle] classNamed: appName]; SEL sel = NSSelectorFromString(selName); desktopApp = [desktopAppClass performSelector: sel]; } [win setFrameUsingName: @"inspector"]; [win setDelegate: self]; inspectors = [NSMutableArray new]; watchedPath = nil; currentPaths = nil; nc = [NSNotificationCenter defaultCenter]; while ([[popUp itemArray] count] > 0) { [popUp removeItemAtIndex: 0]; } currentInspector = [[Attributes alloc] initForInspector: self]; [inspectors insertObject: currentInspector atIndex: ATTRIBUTES]; [popUp insertItemWithTitle: NSLocalizedString(@"Attributes", @"") atIndex: ATTRIBUTES]; [[popUp itemAtIndex: ATTRIBUTES] setKeyEquivalent: @"1"]; DESTROY (currentInspector); currentInspector = [[Contents alloc] initForInspector: self]; [inspectors insertObject: currentInspector atIndex: CONTENTS]; [popUp insertItemWithTitle: NSLocalizedString(@"Contents", @"") atIndex: CONTENTS]; [[popUp itemAtIndex: CONTENTS] setKeyEquivalent: @"2"]; DESTROY (currentInspector); currentInspector = [[Tools alloc] initForInspector: self]; [inspectors insertObject: currentInspector atIndex: TOOLS]; [popUp insertItemWithTitle: NSLocalizedString(@"Tools", @"") atIndex: TOOLS]; [[popUp itemAtIndex: TOOLS] setKeyEquivalent: @"3"]; DESTROY (currentInspector); currentInspector = [[Annotations alloc] initForInspector: self]; [inspectors insertObject: currentInspector atIndex: ANNOTATIONS]; [popUp insertItemWithTitle: NSLocalizedString(@"Annotations", @"") atIndex: ANNOTATIONS]; [[popUp itemAtIndex: ANNOTATIONS] setKeyEquivalent: @"4"]; DESTROY (currentInspector); [nc addObserver: self selector: @selector(watcherNotification:) name: @"GWFileWatcherFileDidChangeNotification" object: nil]; } return self; } - (void)activate { [win makeKeyAndOrderFront: nil]; if (currentInspector == nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry = [defaults objectForKey: @"last_active_inspector"]; int index = 0; if (entry) { index = [entry intValue]; index = ((index < 0) ? 0 : index); } [popUp selectItemAtIndex: index]; [self activateInspector: popUp]; } } - (void)setCurrentSelection:(NSArray *)selection { if (selection) { ASSIGN (currentPaths, selection); if (currentInspector) { [currentInspector activateForPaths: currentPaths]; } } } - (BOOL)canDisplayDataOfType:(NSString *)type { return [[self contents] canDisplayDataOfType: type]; } - (void)showData:(NSData *)data ofType:(NSString *)type { [[self contents] showData: data ofType: type]; } - (IBAction)activateInspector:(id)sender { id insp = [inspectors objectAtIndex: [sender indexOfSelectedItem]]; if (currentInspector != insp) { currentInspector = insp; [win setTitle: [insp winname]]; [inspBox setContentView: [insp inspView]]; } if (currentPaths) { [insp activateForPaths: currentPaths]; } } - (void)showAttributes { if ([win isVisible] == NO) { [self activate]; } [popUp selectItemAtIndex: ATTRIBUTES]; [self activateInspector: popUp]; } - (id)attributes { return [inspectors objectAtIndex: ATTRIBUTES]; } - (void)showContents { if ([win isVisible] == NO) { [self activate]; } [popUp selectItemAtIndex: CONTENTS]; [self activateInspector: popUp]; } - (id)contents { return [inspectors objectAtIndex: CONTENTS]; } - (void)showTools { if ([win isVisible] == NO) { [self activate]; } [popUp selectItemAtIndex: TOOLS]; [self activateInspector: popUp]; } - (id)tools { return [inspectors objectAtIndex: TOOLS]; } - (void)showAnnotations { if ([win isVisible] == NO) { [self activate]; } [popUp selectItemAtIndex: ANNOTATIONS]; [self activateInspector: popUp]; } - (id)annotations { return [inspectors objectAtIndex: ANNOTATIONS]; } - (NSWindow *)win { return win; } - (void)updateDefaults { NSNumber *index = [NSNumber numberWithInt: [popUp indexOfSelectedItem]]; [[NSUserDefaults standardUserDefaults] setObject: index forKey: @"last_active_inspector"]; [[self attributes] updateDefaults]; [win saveFrameUsingName: @"inspector"]; } - (BOOL)windowShouldClose:(id)sender { [win saveFrameUsingName: @"inspector"]; return YES; } - (void)addWatcherForPath:(NSString *)path { if ((watchedPath == nil) || ([watchedPath isEqual: path] == NO)) { [desktopApp addWatcherForPath: path]; ASSIGN (watchedPath, path); } } - (void)removeWatcherForPath:(NSString *)path { if (watchedPath && [watchedPath isEqual: path]) { [desktopApp removeWatcherForPath: path]; DESTROY (watchedPath); } } - (void)watcherNotification:(NSNotification *)notif { NSDictionary *info = (NSDictionary *)[notif object]; NSString *path = [info objectForKey: @"path"]; if (watchedPath && [watchedPath isEqual: path]) { int i; for (i = 0; i < [inspectors count]; i++) { [[inspectors objectAtIndex: i] watchedPathDidChange: info]; } } } - (id)desktopApp { return desktopApp; } @end @implementation Inspector (CustomDirectoryIcons) - (NSDragOperation)draggingEntered:(id )sender inIconView:(IconView *)iview { FSNode *dstnode; [iview setDndTarget: NO]; if ((currentPaths == nil) || ([currentPaths count] > 1)) { return NSDragOperationNone; } dstnode = [FSNode nodeWithPath: [currentPaths objectAtIndex: 0]]; if ([dstnode isWritable] == NO) { return NSDragOperationNone; } if (([dstnode isDirectory] == NO) || [dstnode isPackage]) { return NSDragOperationNone; } if ([NSImage canInitWithPasteboard: [sender draggingPasteboard]]) { [iview setDndTarget: YES]; return NSDragOperationEvery; } return NSDragOperationNone; } - (void)draggingExited:(id )sender inIconView:(IconView *)iview { [iview setDndTarget: NO]; } #define TMBMAX (48.0) #define RESZLIM 4 - (void)concludeDragOperation:(id )sender inIconView:(IconView *)iview { CREATE_AUTORELEASE_POOL(arp); NSPasteboard *pb = [sender draggingPasteboard]; NSImage *image = [[NSImage alloc] initWithPasteboard: pb]; NSData *data = nil; if (image && [image isValid]) { NSSize size = [image size]; NSImageRep *rep = [image bestRepresentationForDevice: nil]; if ((size.width <= TMBMAX) && (size.height <= TMBMAX) && (size.width >= (TMBMAX - RESZLIM)) && (size.height >= (TMBMAX - RESZLIM))) { if ([rep isKindOfClass: [NSBitmapImageRep class]]) { data = [(NSBitmapImageRep *)rep TIFFRepresentation]; } } if (data == nil) { NSRect srcr = NSMakeRect(0, 0, size.width, size.height); NSRect dstr = NSZeroRect; NSImage *newimage = nil; NSBitmapImageRep *newBitmapImageRep = nil; if (size.width >= size.height) { dstr.size.width = TMBMAX; dstr.size.height = TMBMAX * size.height / size.width; } else { dstr.size.height = TMBMAX; dstr.size.width = TMBMAX * size.width / size.height; } newimage = [[NSImage alloc] initWithSize: dstr.size]; [newimage lockFocus]; [image drawInRect: dstr fromRect: srcr operation: NSCompositeSourceOver fraction: 1.0]; newBitmapImageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: dstr]; [newimage unlockFocus]; data = [newBitmapImageRep TIFFRepresentation]; RELEASE (newimage); RELEASE (newBitmapImageRep); } } [image release]; if (data) { NSString *dirpath = [currentPaths objectAtIndex: 0]; NSString *imgpath = [dirpath stringByAppendingPathComponent: @".dir.tiff"]; if ([data writeToFile: imgpath atomically: YES]) { NSMutableDictionary *info = [NSMutableDictionary dictionary]; [info setObject: dirpath forKey: @"path"]; [info setObject: imgpath forKey: @"icon_path"]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWCustomDirectoryIconDidChangeNotification" object: nil userInfo: info]; } } [iview setDndTarget: NO]; RELEASE (arp); } @end gworkspace-1.1.0/Inspector/Resources/0000755000175000001440000000000013214346546017047 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/0000755000175000001440000000000013214346546021565 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/Annotations.gorm/0000755000175000001440000000000013214346546025025 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/Annotations.gorm/data.classes0000644000175000001440000000111513214346546027313 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Annotations = { Actions = ( "setAnnotations:" ); Outlets = ( win, mainBox, topBox, iconView, titleField, textView, okButt, toolsBox ); Super = NSObject; }; FirstResponder = { Actions = ( "closeMainWin:", "okLoginAction:", "orderFrontFontPanel:", "setAnnotations:", "setDefaultApplication:", "showInfo:" ); Super = NSObject; }; IconView = { Actions = ( ); Outlets = ( inspector ); Super = NSImageView; }; }gworkspace-1.1.0/Inspector/Resources/English.lproj/Annotations.gorm/data.info0000644000175000001440000000027013214346546026612 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/Inspector/Resources/English.lproj/Annotations.gorm/objects.gorm0000644000175000001440000001237013214346546027347 0ustar multixusersGNUstep archive00002c24:00000027:00000097:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C D@01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C& 0 &0 %  C C  C C&0 &0 % C C B  C B&0 &0 % @ @ C B  C B&0 &01GSControlTemplate0&%IconView1 NSImageView1 NSControl% A @ B@ B@  B@ B@&0 &%01 NSImageCell1NSCell0&%title01NSFont%0& % Helvetica A@A@&&&&&&&&%%% 01 NSTextField% B A` CE A  CE A&0 &%01NSTextFieldCell1 NSActionCell0&0%0& % Helvetica AA&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor0 0!& % textColor0"0#&%Box&&&&&&&&0%0$0%&%System0&&%windowBackgroundColor0'0(&%System0)& % textColor %%0*% @  C C  C C& 0+ &0, %  C C  C C&0- &0.1 NSScrollView% B$ C Ci  C Ci& 0/ &001 NSClipView% A @ Cm Ce A @ Cm Ce&01 &021 NSTextView1NSText% A @ Cm   Cm &03 &0405&%System06&%textBackgroundColor  K K07508& % textColor Cm K4091 NSScroller% @ @ A Ce  A Ce&0: &%0;0<&0=%&&&&&&&&&0% A A A A 90>1NSButton% C A B A  B A& 0? &%0@1 NSButtonCell0A&%Set0B1 NSImage0C& % common_ret&&&&&&&&%0D&0E&&&&0F0G&%Box=&&&&&&&& %%0H0I&%Box=&&&&&&&&0%0J0K&%System0L&%windowBackgroundColor0M0N&%System0O& % textColor %%J0P&%Window0Q&%Window0R&%Window C C F@ F@%0S 0T&%NSApplicationIcon&   D D0U &0V &0W1!NSMutableDictionary1" NSDictionary&0X&%Box1*0Y&%NSOwner0Z& % Annotations0[&%Box2 0\& % ScrollView.0]&%ClipView00^& % TextField0_& % GormNSWindow0`&%TextView20a&%View1 0b&%Button>0c& % ImageView0d& % MenuItem10e1# NSMenuItem0f&%Contents0g&&&%%0h&%Box0i& % MenuItem20j#0k&%Toolsg&&%%0l& % MenuItem30m#0n&%Access Control0o&&&%%0p&%MenuItem0q#0r& % Attributesg&&%0s 0t& % common_Nibble%0u&%Scroller90v &0w1$NSNibConnectorp0x$d0y$i0z$l0{$h0|1%NSNibOutletConnector0}&%NSOwnerc0~&%iconView0%}h0&%mainBox0%}^0& % titleField0%}[0&%topBox0%}_0&%win0$X0%}X0&%toolsBox0$\}0$`}0$b}0$]}0$u}01&NSNibControlConnectoru\0& % _doScroll:0%}`01'NSMutableString&%textView0%}b0'&%okButt0&b}0'&%setAnnotations:0!&cgworkspace-1.1.0/Inspector/Resources/English.lproj/Attributes.gorm/0000755000175000001440000000000013214346546024656 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/Attributes.gorm/data.classes0000644000175000001440000000247113214346546027152 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Attributes = { Actions = ( "permsButtonsAction:", "changePermissions:", "revertToOldPermissions:", "calculateSizes:", "insideButtonAction:" ); Outlets = ( win, mainBox, topBox, iconView, titleField, linkToLabel, linkToField, sizeLabel, sizeField, ownerLabel, ownerField, groupLabel, groupField, changedDateBox, permsBox, readLabel, writeLabel, executeLabel, uLabel, gLabel, oLabel, ureadbutt, uwritebutt, uexebutt, greadbutt, gwritebutt, gexebutt, oreadbutt, owritebutt, oexebutt, insideButt, revertButt, okButt, calculateButt, timeDateView ); Super = NSObject; }; FirstResponder = { Actions = ( "calculateSizes:", "changePermissions:", "closeMainWin:", "computeSize:", "insideButtonAction:", "okLoginAction:", "orderFrontFontPanel:", "permsButtonsAction:", "revertToOldPermissions:", "showInfo:" ); Super = NSObject; }; IconView = { Actions = ( ); Outlets = ( inspector ); Super = NSImageView; }; TimeDateView = { Actions = ( ); Outlets = ( ); Super = NSView; }; }gworkspace-1.1.0/Inspector/Resources/English.lproj/Attributes.gorm/data.info0000644000175000001440000000027013214346546026443 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/Inspector/Resources/English.lproj/Attributes.gorm/objects.gorm0000644000175000001440000005143713214346546027207 0ustar multixusersGNUstep archive000f4240:00000023:000001c6:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q@ @wJI @| @01 NSView% ? @" @q@ @w  @q@ @wJ01 NSMutableArray1 NSArray&01 NSBox%  @q@ @u  @q@ @uJ 0 &0 %  @q@ @u  @q@ @uJ0 &0 % @qp @q @Q@  @q @Q@J0 &0 % @ @ @q@ @P@  @q@ @P@J0 &01GSControlTemplate0&%IconView1 NSImageView1 NSControl% @$ @ @H @H  @H @HJ0 &%01 NSImageCell1NSCell0&%title01NSFont%0& % Helvetica A@A@&&&&&&JJ&&&&&&%%% 01 NSTextField% @Q@ @, @h @=  @h @=J0 &%01NSTextFieldCell1 NSActionCell0&0%0& % Helvetica AA&&&&&&JJ &&&&&&I01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor0 0!& % textColor0"0#&%Box&&&&&&JJ &&&&&&I0$0%&% System0&&% windowBackgroundColor  %%0'% @ @p @G @2  @G @2J 0( &%0)0*&%Link To:0+% A@&&&&&&JJ &&&&&&I0,0-&% NSCalibratedWhiteColorSpace > ?0.% @ @m@ @G @2  @G @2J 0/ &%0001&%Size:+&&&&&&JJ &&&&&&I02- ?03% @ @j@ @G @2  @G @2J 04 &%0506&%Owner:+&&&&&&JJ &&&&&&I07- ?08% @ @g@ @G @2  @G @2J 09 &%0:0;&%Group:+&&&&&&JJ &&&&&&I0<- ?0=% @M @g@ @`@ @2  @`@ @2J 0> &%0?&&&&&&JJ &&&&&&I 0@% @M @j@ @`@ @2  @`@ @2J 0A &%0B&&&&&&JJ &&&&&&I 0C% @M @m@ @M @2  @M @2J 0D &%0E&&&&&&JJ &&&&&&I 0F% @M @p @`@ @2  @`@ @2J 0G &%0H+&&&&&&JJ &&&&&&I 0I1NSButton% @2 @  @\ @8  @\ @8J 0J &%0K1 NSButtonCell0L&%Revert+&&&&&&JJ&&&&&&I&&& &&0M% @a @  @\ @8  @\ @8J 0N &%0O0P&%OK+&&&&&&JJ&&&&&&I0Q&%\r&&& &&0R % @h @g @Q @W@  @Q @W@J 0S &0T % @ @ @P @R@  @P @R@J0U &0V1 GSCustomView1 GSNibItem0W& % TimeDateView @  @K @Q&0X0Y&%Changed+&&&&&&JJ &&&&&&I$  %%0Z % @2 @D @m @a  @m @aJ 0[ &0\ % @ @ @m` @^  @m` @^J0] &0^% @T@ @L @0  @L @0J0_ &%0`0a&%Read+&&&&&&JJ &&&&&&I 0b% @M @L @0  @L @0J0c &%0d0e&%Write+&&&&&&JJ &&&&&&I 0f% @A @L @0  @L @0J0g &%0h0i&%Execute+&&&&&&JJ &&&&&&I 0j% @O @Y @J @0  @J @0J0k &%0l0m&%Owner+&&&&&&JJ &&&&&&I 0n% @\ @Y @J @0  @J @0J0o &%0p0q&%Group+&&&&&&JJ &&&&&&I 0r% @d @Y @J @0  @J @0J0s &%0t0u&%Others+&&&&&&JJ &&&&&&I 0v % @d @S@ @J @8  @J @8J0w &0x % ? ? @I @6  @I @6J0y &0z% @1 @ @0 @0  @0 @0J0{ &%0|0}&%Switch0~1NSImage01NSMutableString&%GSSwitch&&&&&&JJ&&&&&&I00&%GSSwitchSelected&&& &&00&%Box&&&&&&JJ &&&&&&I$  %%0% @$ @ @j @0  @j @0J0 &%00&$%$also apply to files inside selection~+&&&&&&JJ&&&&&&I&&& &&0 % @d @K @J @8  @J @8J0 &0 % ? ? @I @6  @I @6J0 &0% @1 @ @0 @0  @0 @0J0 &%00&%Switch~&&&&&&JJ&&&&&&I&&& &&00&%Box&&&&&&JJ &&&&&&I$  %%0 % @d @? @J @8  @J @8J0 &0 % ? ? @I @6  @I @6J0 &0% @1 @ @0 @0  @0 @0J0 &%00&%Switch~&&&&&&JJ&&&&&&I&&& &&00&%Box&&&&&&JJ &&&&&&I$  %%0 % @\ @S@ @J @8  @J @8J0 &0 % ? ? @I @6  @I @6J0 &0% @1 @ @0 @0  @0 @0J0 &%00&%Switch~&&&&&&JJ&&&&&&I&&& &&00&%Box&&&&&&JJ &&&&&&I$  %%0 % @\ @K @J @8  @J @8J0 &0 % ? ? @I @6  @I @6J0 &0% @1 @ @0 @0  @0 @0J0 &%00&%Switch~&&&&&&JJ&&&&&&I&&& &&00&%Box&&&&&&JJ &&&&&&I$  %%0 % @\ @? @J @8  @J @8J0 &0 % ? ? @I @6  @I @6J0 &0% @1 @ @0 @0  @0 @0J0 &%00&%Switch~&&&&&&JJ&&&&&&I&&& &&00&%Box&&&&&&JJ &&&&&&I$  %%0 % @P @S@ @J @8  @J @8J0 &0 % ? ? @I @6  @I @6J0 &0% @1 @ @0 @0  @0 @0J0 &%00&%Switch~&&&&&&JJ&&&&&&I&&& &&0±0ñ&%Box&&&&&&JJ &&&&&&I$  %%0ı % @P @K @J @8  @J @8J0ű &0Ʊ % ? ? @I @6  @I @6J0DZ &0ȱ% @1 @ @0 @0  @0 @0J0ɱ &%0ʱ0˱&%Switch~&&&&&&JJ&&&&&&I&&& &&0̱0ͱ&%Box&&&&&&JJ &&&&&&I$  %%0α % @P @? @J @8  @J @8J0ϱ &0б % ? ? @I @6  @I @6J0ѱ &0ұ% @1 @ @0 @0  @0 @0J0ӱ &%0Ա0ձ&%Switch~&&&&&&JJ&&&&&&I&&& &&0ֱ0ױ&%Box&&&&&&JJ &&&&&&I$  %%0ر0ٱ& % Permissions&&&&&&JJ &&&&&&I$  %%0ڱ% @^@ @m @P @6  @P @6J 0۱ &%0ܱ0ݱ& % calculate+&&&&&&JJ&&&&&&I&&& &&0ޱ0߱&%Box0%&&&&&&JJ &&&&&&I$  %%$0&%Window0& % Attributes @q @v@ @Ç @|I00&% NSApplicationIcon&   @ @ 0 &0 &01NSMutableDictionary1 NSDictionary&=0&%Box50& % TextField13n0&%Box120&%Box0&%Button60&%GormCustomViewV0&%View40&%View110&%View9x0&%Button1I0& % ImageView0& % TextField5=0&%Box2 0&%Box70&%ViewT0& % MenuItem201 NSMenuItem0&%ToolsJJII0& % TextField10b0& % TextField0&%Button110&%View1 0&%Button80&%View6P&%Button3P& % TextField2.P& % TextField7CP&%Box4P&%Box9P& % TextField12jP&%Box11P&%View3P&%View10P &%View8P &%Button5P & % TextField48P & % TextField9^P &%Box1RP&%Box6P& % MenuItem1P P&%ContentsJJIIP& % GormNSWindowP& % TextField14rP&%ButtonP&%MenuItemP P& % AttributesJJIPP& %  common_NibbleIP&%Button10P&%Button7P&%View5P&%Button2MP& % TextField6@P& % TextField1'P &%Box8P!&%Box3ZP"&% NSOwnerP#& % AttributesP$& % MenuItem3P% P&&%Access ControlJJIIP'& % TextField11fP(&%Box10vP)&%Button12P*&%View7P+&%View2\P,&%Button9zP-&%Button4P.& % TextField8FP/& % TextField33P0 &llP11!NSNibConnectorP2&% NSOwnerP3!P4!P5!P6!$P7!됐P8!2P9!2P:!2P;!2P!/2P?! 2P@!2PA!2PB!2PC!.2PD!2PE!2PF! 2PG!2PH!!2PI!+2PJ! 2PK!2PL!'2PM!2PN!2PO!2PP!(2PQ!2PR!,2PS!2PT!2PU!2PV!2PW!2PX! 2PY!2PZ!2P[!2P\!2P]!2P^!2P_!-2P`! 2Pa!*2Pb!2Pc!2Pd!2Pe!2Pf!2Pg!2Ph! 2Pi!2Pj!2Pk!2Pl1"NSNibOutletConnector2Pm&%winPn"2Po&%mainBoxPp"2Pq&%topBoxPr"2Ps&%iconViewPt"2Pu& % titleFieldPv"2Pw& % linkToLabelPx"2.Py& % linkToFieldPz"2P{& % sizeLabelP|"2P}& % sizeFieldP~"2/P& % ownerLabelP"2P& % ownerFieldP"2 P& % groupLabelP"2P& % groupFieldP"2 P&%changedDateBoxP"2!P&%permsBoxP"2 P& % readLabelP"2P& % writeLabelP"2'P& % executeLabelP"2P&%uLabelP"2P&%gLabelP"2P&%oLabelP"2P& % ureadbuttP"2 P& % uwritebuttP"2P&%uexebuttP"2P& % greadbuttP"2-P& % gwritebuttP"2P&%gexebuttP"2,P& % oreadbuttP"2P& % owritebuttP"2P&%oexebuttP"2P& % revertButtP"2P&%okButtP"2P& % insideButtP1#NSNibControlConnector2P&%permsButtonsAction:P# 2P#2P#2P#-2P#2P#,2P#2P#2P#2P&%revertToOldPermissions:P#2P&%changePermissions:P!)P"2)P& % calculateButtP#)2P&%calculateSizes:P!P±"2Pñ& % timeDateViewPı#2Pű&%insideButtonAction:PƱ&gworkspace-1.1.0/Inspector/Resources/English.lproj/Contents.gorm/0000755000175000001440000000000013214346546024325 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/Contents.gorm/data.classes0000644000175000001440000000074213214346546026620 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Contents = { Actions = ( ); Outlets = ( win, topBox, iconView, titleField, viewersBox, mainBox ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "closeMainWin:", "showInfo:", "okLoginAction:" ); Super = NSObject; }; IconView = { Actions = ( ); Outlets = ( inspector ); Super = NSImageView; }; }gworkspace-1.1.0/Inspector/Resources/English.lproj/Contents.gorm/data.info0000644000175000001440000000027013214346546026112 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/Inspector/Resources/English.lproj/Contents.gorm/objects.gorm0000644000175000001440000001005213214346546026642 0ustar multixusersGNUstep archive00002c24:0000001e:0000007b:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C D 01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C& 0 &0 %  C C  C C&0 &0 % @  C C  C C& 0 &0 %  C C  C C&0 &01NSTextFieldCell1 NSActionCell1NSCell0&%Box01NSFont%0& % Helvetica A@A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor00&%System0& % textColor %%0% C C B  C B&0 &0 % @ @ C B  C B&0 &01GSControlTemplate0&%IconView1 NSImageView1 NSControl% A @ B@ B@  B@ B@&0 &%0!1 NSImageCell0"&%title&&&&&&&&%%% 0#1 NSTextField% B A` CE A  CE A&0$ &%0%0&&0'%0(& % Helvetica AA&&&&&&&&0%0)0*&%System0+&%textBackgroundColor0,*0-& % textColor0.0/&%Box&&&&&&&&0%0001&%System02&%windowBackgroundColor0304&%System05& % textColor %%0607&%Box08%&&&&&&&&0%090:&%System0;&%windowBackgroundColor0<0=&%System0>& % textColor %%90?&%Window0@&%Window0A&%Window C C F@ F@%0B1NSImage0C&%NSApplicationIcon&   D D0D &0E &0F1NSMutableDictionary1 NSDictionary& 0G&%Box1 0H&%NSOwner0I&%Contents0J&%Box20K& % TextField#0L& % GormNSWindow0M&%View 0N&%View10O& % ImageView0P& % MenuItem10Q1 NSMenuItem0R&%Contents0S&&&%%0T&%Box0U& % MenuItem20V0W&%ToolsS&&%%0X&%MenuItem0Y0Z& % AttributesS&&%0[0\& % common_Nibble%0]& % MenuItem30^0_&%Access Control0`&&&%%0a &0b1NSNibConnectorL0c&%NSOwner0dX0eP0fU0g]0hT0iGc0jMc0kJc0lNc0mOc0nKc0o1NSNibOutletConnectorcL0p&%win0qcT0r&%mainBox0scJ0t&%topBox0ucO0v&%iconView0wcK0x& % titleField0ycG0z& % viewersBox0{&Ogworkspace-1.1.0/Inspector/Resources/English.lproj/InspectorWin.gorm/0000755000175000001440000000000013214346546025154 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/InspectorWin.gorm/data.classes0000644000175000001440000000060713214346546027447 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "closeMainWin:", "showInfo:", "okLoginAction:", "activateInspector:" ); Super = NSObject; }; Inspector = { Actions = ( "activateInspector:" ); Outlets = ( win, popUp, inspBox ); Super = NSObject; }; }gworkspace-1.1.0/Inspector/Resources/English.lproj/InspectorWin.gorm/data.info0000644000175000001440000000027013214346546026741 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/Inspector/Resources/English.lproj/InspectorWin.gorm/objects.gorm0000644000175000001440000000562413214346546027502 0ustar multixusersGNUstep archive00002c24:00000021:00000058:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C C&% D D201 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01 NSPopUpButton1NSButton1 NSControl% B C B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0 &0 1NSFont%&&&&&&&&0 1NSMenu0 &0 &01 NSMenuItem0&%Item 10&&&%01NSImage0& % common_Nibble%00&%Item 2&&%%00&%Item 3&&%%%0&0&&&& %%%%%01NSBox%  C C  C C& 0 &0 %  C C  C C&0 &01NSTextFieldCell0&%Box &&&&&&&&0%0 1NSColor0!&%NSNamedColorSpace0"&%System0#&%windowBackgroundColor0$!0%&%System0&& % textColor %% 0'&%Window0(&%Window0)&%Window C C C C%0*0+&%NSApplicationIcon&   D D0, &0- &0.1NSMutableDictionary1 NSDictionary& 0/& % MenuItem30001&%Access Control02&&&%%03&%NSOwner04& % Inspector05& % MenuItem406& % MenuItem507& % MenuItem608&%Box09& % GormNSWindow0:&%MenuItem0;0<& % Attributes0=&&&%%0>&%GormNSPopUpButton0?& % MenuItem10@0A&%Contents=&&%%0B& % MenuItem20C0D&%Tools=&&%%0E &0F1NSNibConnector930G:0H?0IB0J/0K>0L80M50N60O70P1 NSNibOutletConnector390Q&%win0R 380S&%inspBox0T 3>0U&%popUp0V1!NSNibControlConnector>30W&%activateInspector:0X&gworkspace-1.1.0/Inspector/Resources/English.lproj/Tools.gorm/0000755000175000001440000000000013214346546023630 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/English.lproj/Tools.gorm/data.classes0000644000175000001440000000126513214346546026124 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "closeMainWin:", "showInfo:", "okLoginAction:", "setDefaultApplication:" ); Super = NSObject; }; IconView = { Actions = ( ); Outlets = ( inspector ); Super = NSImageView; }; Tools = { Actions = ( "setDefaultApplication:" ); Outlets = ( win, mainBox, topBox, iconView, titleField, toolsBox, explLabel1, scrollView, defAppLabel, defAppField, defPathLabel, defPathField, explLabel2, explLabel3, okButt ); Super = NSObject; }; }gworkspace-1.1.0/Inspector/Resources/English.lproj/Tools.gorm/data.info0000644000175000001440000000027013214346546025415 0ustar multixusersGNUstep archive00002c24:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/Inspector/Resources/English.lproj/Tools.gorm/objects.gorm0000644000175000001440000001670013214346546026153 0ustar multixusersGNUstep archive00002c24:00000023:000000e8:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C C&% C D)01 NSView%  C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C& 0 &0 %  C C  C C&0 &0 % @  C C  C C& 0 &0 %  C C  C C&0 &  01 NSTextField1 NSControl% A C Cp A  Cp A&0 &%01NSTextFieldCell1 NSActionCell1NSCell0&)%)Double-click to open selected document(s)01NSFont%0& % Helvetica A@A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00&%NSCalibratedWhiteColorSpace > ?01 GSCustomView1 GSNibItem0& % NSScrollView B C CD B&0% A B B A  B A&0 &%00 & % Application:&&&&&&&&0%0!0"&%System0#&%textBackgroundColor0$"0%& % textColor0&% B B C3 A  C3 A&0' &%0(0)&&&&&&&&&0%0*0+&%System0,&%textBackgroundColor0-+0.& % textColor0/% A B B A  B A&00 &%0102&%Path:&&&&&&&&0%0304&%System05&%textBackgroundColor06407& % textColor08% B< B CU A  CU A&09 &%0:0;&&&&&&&&&0%0<0=&%System0>&%textBackgroundColor0?=0@& % textColor0A% A B Cp A  Cp A& 0B &%0C0D&.%.Click 'Set Default' to set default application&&&&&&&&0%0E0F&%System0G&%textBackgroundColor0H > ?0I% A BL Cp A  Cp A& 0J &%0K0L&%%%for all documents with this extension&&&&&&&&0%0M0N&%System0O&%textBackgroundColor0P > ?0Q1NSButton% C A B A  B A& 0R &%0S1 NSButtonCell0T& % Set Default0U1NSImage0V& % common_ret&&&&&&&&%0W&0X&&&&0Y0Z&%Box&&&&&&&&0%0[0\&%System0]&%windowBackgroundColor0^0_&%System0`& % textColor %%0a% C C B  C B&0b &0c % @ @ C B  C B&0d &0e1GSControlTemplate0f&%IconView1 NSImageView% A @ B@ B@  B@ B@&0g &%0h1 NSImageCell0i&%title&&&&&&&&%%% 0j% B A` CE A  CE A&0k &%0l0m&0n%0o& % Helvetica AA&&&&&&&&0%0p0q&%System0r&%textBackgroundColor0sq0t& % textColor0u0v&%Box&&&&&&&&0%0w0x&%System0y&%windowBackgroundColor0z0{&%System0|& % textColor %%0}0~&%Box0%&&&&&&&&0%00&%System0&%windowBackgroundColor00&%System0& % textColor %%0&%Window0&%Window0&%Window C C F@ F@%00&%NSApplicationIcon&   D D0 &0 &01NSMutableDictionary1 NSDictionary&0& % TextField7I0&%NSOwner0&%Tools0& % MenuItem101 NSMenuItem0&%Contents0&&&%%0& % TextFieldj0& % MenuItem20 0&%Tools&&%%0& % MenuItem30 0&%Access Control0&&&%%0&%GormCustomView0&%MenuItem0 0& % Attributes&&%00& % common_Nibble%0& % GormNSWindow0&%Box0& % TextField10&%View1c0& % TextField20&%Button1Q0& % TextField3&0& % TextField4/0&%Box1 0& % ImageViewe0& % TextField580&%Box2a0&%View 0& % TextField6A0 &%%01!NSNibConnector0&%NSOwner0!0!0!0!0!0!0!0!0!0!0!0!0!0!0±!0ñ!0ı!0ű!0Ʊ!0DZ!01"NSNibOutletConnector0ɱ&%win0ʱ"0˱&%mainBox0̱"0ͱ&%topBox0α"0ϱ&%iconView0б"0ѱ& % titleField0ұ"0ӱ&%toolsBox0Ա"0ձ& % explLabel10ֱ"0ױ& % scrollView0ر"0ٱ& % defAppLabel0ڱ"0۱& % defAppField0ܱ"0ݱ& % defPathLabel0ޱ"0߱& % defPathField0"0& % explLabel20"0& % explLabel301#NSNibControlConnector0&%setDefaultApplication:0"0&%okButt0&fgworkspace-1.1.0/Inspector/Resources/Images/0000755000175000001440000000000013214346550020247 5ustar multixusersgworkspace-1.1.0/Inspector/Resources/Images/Date-0.tiff0000644000175000001440000000073413214346546022144 0ustar multixusersII* (! p`ZUb*bdT$bR (j4 :~I#M%Tܙ̔7_qK ?BBJ-T>lŢ$+NٓPAFRdW%P2VoR,J"Y  |  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-0.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Date-1.tiff0000644000175000001440000000070613214346546022144 0ustar multixusersII*| hA 8DAaE !x(cF7acN,~iK8\ؙM;m\͔?NlsP2KR d(4Q jDYs&$   f  2ns(=R/home/bjoern/Source/NSTimeDate/Images/Date-1.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Date-2.tiff0000644000175000001440000000073013214346546022142 0ustar multixusersII* hC&8UP.p`c;HQ5PC @XiK4HL9bJ,{Yd˘?XTGL5] +_.YJAF ֫U,T)BTȟ6   x  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-2.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Date-3.tiff0000644000175000001440000000073413214346546022147 0ustar multixusersII* (! @U8T#?ȁBG NUHQb$vQ:-j†H@AӪN1y|$K8UB!s-xƍ\PŬVBɲTϕZxYj]e h]?GH  |  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-3.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Date-4.tiff0000644000175000001440000000073013214346546022144 0ustar multixusersII* h! "pp!C ZA2#,vň@ &VlG˨*/̑&EŊϫLiCL=2/X5F QAlըE4͚gR1   x  2(=R/home/bjoern/Source/NSTimeDate/Images/Date-4.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Date-5.tiff0000644000175000001440000000072213214346546022146 0ustar multixusersII* (! &X` Z11cL1ЉH2UP3nѨe "ed3ʔ%b)VtC(=R/home/bjoern/Source/NSTimeDate/Images/Date-Colon.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Date.tiff0000644000175000001440000001222013214346546022000 0ustar multixusersII*TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU_ 2  0:jL(R/home/bjoern/Source/NSTimeDate/Images/Date.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Inspector.tiff0000644000175000001440000002254413214346546023103 0ustar multixusersII*$iuyY]yY]yAIaAIaAIaAIaY]yiqiq00(00 A (Y (Y (Y (Y I I (IIMaIMa00 (Y (Y08q8A8A8A8A8I8I8I8I8I8I8E8E8%@$T%\%(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Inspector/Resources/Images/Info.tiffCreated with The GIMP`X`Xgworkspace-1.1.0/Inspector/Resources/Images/LED-0.tiff0000644000175000001440000000073213214346546021671 0ustar multixusersII*P hAmh"lP$Q"HPa"D "Fm@Nq$J,~Ԅ2 4v22cb'Uq^T e F@'Z|0rf7G.Y6_@&eǫ^ʀ  z  1(=R/home/bjoern/Source/NSTimeDate/Images/LED-0.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-1.tiff0000644000175000001440000000075213214346546021674 0ustar multixusersII*t O B`ͅ`($!8TV- D"P!D-l5)L%QX>#Gp9UU!f(W#Cjt^7fzd  R iZk(=R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Images/LED-1.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-2.tiff0000644000175000001440000000067213214346546021676 0ustar multixusersII*pP hAmh"lP$Q"H1 %Zl@N $yԔSG7x #)WI9_ Hi% e?O蔕  Z  1bg(=R/home/bjoern/Source/NSTimeDate/Images/LED-2.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-3.tiff0000644000175000001440000000067213214346546021677 0ustar multixusersII*pP hAmh"lP$Q"H1 %Zl@N $yԔSG7zCd"S\)$J,r3dOiK.V>\s&  Z  1bh(=R/home/bjoern/Source/NSTimeDate/Images/LED-3.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-4.tiff0000644000175000001440000000071613214346546021677 0ustar multixusersII*P h6$ E" #bC @NаH4YBeidI-c8q URD(Z`%3&i +UQ<7lk.=b13  n  1v{(=R/home/bjoern/Source/NSTimeDate/Images/LED-4.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-5.tiff0000644000175000001440000000067613214346546021705 0ustar multixusersII*tP h!n#d@( :, (") a =f`q"G $d :iƐΞ-gXYcd ?K3W4hX6D I˝1[  ^  1fl(=R/home/bjoern/Source/NSTimeDate/Images/LED-5.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-6.tiff0000644000175000001440000000071213214346546021675 0ustar multixusersII*P h!n#d@( :, (") a =f`q"G $d :iƐ;FQrg˞5_ gʗ*ARي6SXY)ZE3$)f  j  1rx(=R/home/bjoern/Source/NSTimeDate/Images/LED-6.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/LED-7.tiff0000644000175000001440000000067213214346546021703 0ustar multixusersII*pP hAmh"lP$Q"H1 %Zl@N $yԔSG7CL#11>1>!.!.!.BBL1>1}LLLLBBBBL???????????????LLL???????????????LLLLLL???????????????LLLLLLLLLLLL1>>LLLBBB1???kkkkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???kkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLBBB.!.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLB111LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLkkkkkkLLLLLLLLLLLBBBLLLLLLLLLkkk?????????LLLLLLLLLL>>>BLBLLLLLLLLLkkk????????????LLLLLLLLLLLLLLLLLLLLL??????????????????LLLLBBBLLLLLLLLL??????????????????LLLLBLBLLL??????????????????LLLBLLLLLLLLLLL????????????LLBBLLLLLLLLLLLL??????LLLLLBLLLLLLLLLLLLLBLBBBLLLLLLLLLLLLLLLBBBBBBLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL!!!LLLLLLLLLLLLLLLLLLBBLLLLBLBLLLLLLLLLBBBLBBBBBLBBBBBLBBBBB???c!LLLLLLLLLL...LLL???c!LLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLL...LLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL???c!LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLLLLLLLLLL???c!L...LLLLLLLLLLLL...LLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???c!LLLLLLLLLLLLL???LLLLLLLLLLLL???LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL00$  F$%* %R/home/enrico/Grivei/sviluppo/FileManager/GFindFile/Icons/Magnify.tiffgworkspace-1.1.0/Inspector/Resources/Images/Mask.tiff0000644000175000001440000003113413214346546022023 0ustar multixusersII*1((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM(((MMMMMMMMMMMM(((MMMMMMMMMMMM((((((MMMMMMMMMMMM(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM791 G1&2<2%D2L2T2(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Images/Mask.tiffCreated with The GIMP0HHgworkspace-1.1.0/Inspector/Resources/Images/Month-1.tiff0000644000175000001440000000075013214346546022353 0ustar multixusersII* h!B &l!`4D#Pq#K3xS&aICT:mx3g.{ T@h$J$"J(X(*,A^&54 ڢN %;)L@x  A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-1.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month-10.tiff0000644000175000001440000000073213214346546022433 0ustar multixusersII* h!B &l! 0ja@c<~(b$ eWȹC V :-j ^C$TnGK)r 4ARU(R0_W v+WkX#h@f  An]t(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-4.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month-5.tiff0000644000175000001440000000074013214346546022356 0ustar multixusersII* h!B &l! 0*(fcʼn%~HU@-m0'(sȬqs$ "X"UҤ @EK#)W!_Ū.[*.v&MX+|@p  Ax]}(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-5.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month-6.tiff0000644000175000001440000000077013214346546022362 0ustar multixusersII* h!B &l!`4CD#P PK7rI#)|ՉLZϒ8[M6\ U%P- xTɔ+y,TH9E^qe[R*bEߢh5Bg7   A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-6.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month-7.tiff0000644000175000001440000000075613214346546022367 0ustar multixusersII* h!B &l!`4CD#P PK7rI @ՉLZ)bϒ8[TiRPU -N5]¼ٓG/X挗#zZTS?Vdil'xkc~  A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-7.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month-8.tiff0000644000175000001440000000076013214346546022363 0ustar multixusersII* h!B &l! 0*a(%$ꄉ)|,2@ԒH:X¥ ?HQ3ʜ5{1%>MPV-x𒙲P-T ^VqgKuh"  A](=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-8.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month-9.tiff0000644000175000001440000000074013214346546022362 0ustar multixusersII* h!B &l!W'BXSEu)J"RK5Q@&#Sك;[Ԫ;n|e3P8GjT\4oa -Q*eըAp  Ax]~(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Month-9.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Month.tiff0000644000175000001440000000223413214346546022214 0ustar multixusersII*J h!B &l!`4D#Pq#K3xS&aICT:mx3g.{ T@h$J$"J(X(*,A^&54 ڢN %;)L(=zݼI#z>(8%,ݮWô-R?n' :=bڧ>ck/4DZOUؚ;v>X-s=? @7C c=!X%B ُ΋3uu/x"jUQޔP+cUd#6?c?(=:Xclo:4N1ڀ,K/HYw?D>0r-_H *T/H$Xm%S$2*7`/RD.P*ΡuNy)BRάҬasKm*;Ǖwv́n̖!VhH4  9<v]B(=R/home/bjoern/Source/NSTimeDate/Images/English/Month.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Pboard.tiff0000644000175000001440000002247613214346546022350 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/Base.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Weekday-0.tiff0000644000175000001440000000071413214346546022656 0ustar multixusersII*p h!B &l%<(Z8A(nĤM/jGN,S̨e+Is'(#bӄOS*sYe\\eC Z  Cbfh(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-7.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Weekday-1.tiff0000644000175000001440000000072213214346546022656 0ustar multixusersII*v h!B &l p #| F (vĸ*JpI>hΞ'W 䍙Hٓ,YX ,Lj*Z\`  Chfn(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-1.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Weekday-2.tiff0000644000175000001440000000070613214346546022661 0ustar multixusersII*j h!B &l>D`>f@1D =bxqBH7JAM*]R͐0V\ȓ<[pydTD T@@T  C\fb(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-2.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Weekday-3.tiff0000644000175000001440000000071613214346546022663 0ustar multixusersII*r h!B &l pxF #J`bFD`:f@1D 'I񒧈*x郄?A,q%Κ0V<#挕6Xi2THdS+xy \  Cdfi(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-4.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Weekday-5.tiff0000644000175000001440000000067613214346546022672 0ustar multixusersII*b h!B &l>D`F =xG7A@Q *L(@0iC=|Pp(y H%AL  CTfZ(=R/home/bjoern/Source/NSTimeDate/English.lproj/Images/Weekday-5.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/Weekday-6.tiff0000644000175000001440000000070413214346546022663 0ustar multixusersII*h h!B &l%hΞ'W 䍙Hٓ,YX ,Lj*Z\5jܤiƏWijTmW;l+ե~mTиf3fN9~뎞|ܰ֝ʶ:)Yr_g%jm\ҢyOm][sֹwn8y[}ߺsMz}GTys T q|O7kT'a˟ Bu` +t5hOPygC6ȁ#w27B5d_C۰5IȄ7\ ?R܍h 8HG0/V?\NʎK5Ф +}P^S;20*  ;f (=R/home/bjoern/Source/NSTimeDate/Images/English/Weekday.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/anim-logo-0.tiff0000644000175000001440000000151613214346547023151 0ustar multixusersII*   (1:R../Resources/anim-logo-1.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-1.tiff0000644000175000001440000000151613214346547023152 0ustar multixusersII*x@E8t@L#k@O   (1:R../Resources/anim-logo-2.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-2.tiff0000644000175000001440000000151613214346547023153 0ustar multixusersII*   (1:R../Resources/anim-logo-3.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-3.tiff0000644000175000001440000000151613214346547023154 0ustar multixusersII*8#ktx@@@OEL   (1:R../Resources/anim-logo-4.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-4.tiff0000644000175000001440000000151613214346547023155 0ustar multixusersII*   (1:R../Resources/anim-logo-5.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-5.tiff0000644000175000001440000000151613214346547023156 0ustar multixusersII*O@k#L@t8E@x   (1:R../Resources/anim-logo-6.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-6.tiff0000644000175000001440000000151613214346547023157 0ustar multixusersII*   (1:R../Resources/anim-logo-7.tiffLGLGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/anim-logo-7.tiff0000644000175000001440000000151613214346550023152 0ustar multixusersII*LEO@@@xtk#8   (1:R../Resources/anim-logo-8.tiffGGImageMagick 5.5.7 12/23/03 Q16 http://www.imagemagick.orggworkspace-1.1.0/Inspector/Resources/Images/colorPboard.tiff0000644000175000001440000002250013214346550023366 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSS777kSSS[[[___OOOKKKkSSSVVVTTTKKKkSS2}}}@@@jjjwwwkSSS999ecc^^^kSSSqqqaaad[[ƸWWWkSSScccRRR滼ڷSSSkSS2uuu>>>odb亻kSSS555eeeۿοkkkaaa|||kSSS\\\[[[ncVĸizl[[[Ƕ^^^mmmnnnuuukSSSHHEYXVxͯ־ttt___r b YDqOlll}}}kSS2BB4tpUҾ׹ؾgggTTT i ZChKWWWkSSSutgqϩLLLmr|||KKK kSSSկ߻ӹMMMnpGI]^WWW+++kSSSfbf[[[/1 "&(nnnkSS2oooXRWzzz@AVVsAE7;|}kSSSbbbø^^^ފ8nr  7:%%%kSSSlllQQQJ~~z־PT:=tt%%%UUUkSSS]]]jjjVVVɥK\ɻtN݆l888@@@kSS2wwwTTTzNb;n_0::zQQQkSSSmmmDDDZZZ̖oEE}K'tFL#]]]+++kSSStttHHHԹQ*EuXCřĵյźkSSS~~~KKKvvvMMMkSS2NNNxxxusqq[HTZfJ4 !>++kSSS  !E@@nDFkCDstkSSSTTTpppjjj\\\|||)v~nC}}}}ukk"8..kSSS000222o«KKK kSS2ddd $$$uuu~dddkSSSkkk/// dddu|||kSSSGGGKKKkSSSqqqlll444___kSS2~~~{{{kSSSkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ ,$%@$0%8%(R/opt/Surse/gnustep/CVS/usr-apps/colors.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/filecontsPboard.tiff0000644000175000001440000002250413214346550024242 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSlllkSS2zzzkSSSkSSSkSSSkSS2kSSSkSSS|||kSSSkSS2kSSSkSSSkSSSkSS2{{{kSSS{{{kSSS{{{jhf_^]kSSSjjikSS2tttkSSSkSSSĿkSSSkSS2{{{kSSSmmm~{xwukSSS^^^~}zþkSSS^^^sropomkSS2^^^kSSShhhwvs~kSSS}}}ľkSSShhh½onlkSS2hhhtsprrrkSSSrrr{yw~kSSSgggkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ /$%@$4%<%(R/opt/Surse/gnustep/CVS/usr-apps/fileconts.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/gormPboard.tiff0000644000175000001440000002247613214346550023230 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSkSS2kSSSkSSSR9k-kSSSmVj-EXGAkSS2įO5h,<>0-kSSS_Hg,E;-)kSSSįV0-kSSSįeNg+E7)&kSS2ƳM&67)&kSSS8.2xlhkSSSLKUkSSSPM\kSS2=;FkSSS=;FkSSSpppsss=;FkSSSh_rl{{{hhhgggxxxCANkSS2zTOv0$}}}qqrggjnoqrq98CkSSSzUOe&p@8w8.}~basUSdML[DCKkSSS[Ue$g%i'l){C:sq^]mWVfRP`DBP8()xu̿kSSSjdf$i%xA8l5,q(ytomvSR^:7B;E]*"RJ}kSS2{UOh%j&zB9r:1t)~jggC$LZ^!] PU,%{c_kSSS{UOi%k&n(t-"SJ}}}LLMDDH1..4FVQMIFU50kSSS|VOj&m'p(~9-ƲwwwKKK%#%;:B87C,6 DPNJFBS40kSSS|VOl&o'r)FJ/ ":>KLHE@=W95kSSSg$y+>>>FESEDR88C0;DNKFB?;O2.kSSSͿy||})(,GFT=

HLHC@<9W:6kSSS|||WWWDDGZZZvvv&&++!%05;>=CKJE@=:7 L0+kSS2TTTEEELLM98>:297#$mllEBAEILNLKFB>:7 5 O3.kSSS:::336-,2}}}<44G'&Z"n)pooH!BIUWVSNJD@;85 4 O2.kSSSYWdJHVRP]ZX_:.,Z&u*3&k/%X$MV\ YTPKGB>:6 4 3 J/+kSSSjgwHGP}}SSSwu@57'6&u*RZ Z WRNID@<96 3 2 T84kSS2wq=+1"Z ZSNJGC?;975 M1-N2.bKHkSSSw3'CADiJE|c_nUQjgkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/gorm.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/progind.tiff0000644000175000001440000003153013214346550022565 0ustar multixusersII*1)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{sss{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)1J)9J)9J)9J)1J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{sss{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)1J)9J)9J)9J)9J19J1BRBJZJRcZckkkssss{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ssskksZckJRcBJZ1BR19J)9J)9J)9J)9J)9J)9J)9J)1J19J1BRBJZ{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{s{{{{{{{{{{{s{{{{{{{{{{{{{{{{{{{{{{{{{{νƵνƵνƵνƵνƵνƵֽƵνƵƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭƽνƵƭεƭεƭεƭεƭεƭεƭεƭεƭνƵνƵνƵνƵνƵνƵνƵνƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{s{{{s{{ƽƵ{{{{{{{{ƽƵ{{{{{{{{ƽƵ{s{{{sksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{Zk{Zk{Zk{Zk{ZskssƵsksZsZk{Zk{Zk{Zk{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{k{k{k{k{k{s{{νƭ{s{k{k{k{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵƥ{{{{{{{{ֵΥ{{ֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƜƵֵΥƔ޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭ΥΥƥƥƥƥƥƥƥƥέε޵֭Υ޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵ֵֵֵ֭֭֭֭֭֭֭֭޵޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ޽޽ֵֵֵֵֵֵֵֵֵֵֽֽ 2 q223@1H3P3(/home/enrico/Grivei/sviluppo/FileManager/GWorkspace/GWorkspace_CVS/gwremote/GWRemote/Resources/progindindet.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/progind10.tiff0000644000175000001440000001177613214346550022740 0ustar multixusersII*x}zfmzT`oMYiHXhHXfHXfHXfKXhUapcl{y}y~flzS`oMYiHXgHXfHXfHXfKYhUapdm{y}y}elzS_nLYiHXgHXfHXfHXfLYhUbpdm|z}x}elyR_nLYiFXgGXfHXfHXfLYiUbpen|{~w|dlyR_nLYiHXgHUfHXfFVfLXiVbpfn|{~v{dkyR^nKYiHXgHXfHXfHXfLYiVbqfo}|u{ckxR^mKYiHXgHUfHXfHXfMYiVcqgo}}uzbjxR^mKYiHXgHXfHXfHVfMYjWcqʺêʺéʹéʹ¨ɹ¨ɸ§˹çɷйǪиǪϸƩϷƩϷƩ϶ũεŨεĨͽƮͽƮͼŭͼŭͻĭͺĬͺì͹ìfwiysũwh{fwfwfwfwizsŨwg{fwfwfwfwjztĨvg{fwfwfwfwjzuħvfzfwfwfwfwjzv˿ævezfwfwewgwj{v˿æufzfwfwfwgwj{w˾¥ufzfwfwfwgwj{x˽¤tezfwfwqqtҷƚwqqqquҶŚwqqqquҵęvqqqqvҴĘvqqqqvѳ×vqqqqvѲ–uqqqqwѱuqqqqwѰ”uq׮ǜ֭ǜ֭ƛ֬ƚիƚիřӪřԪŕΩΩΩΪѳԬϩΩΩΩΪѳԬϩΩΩΩΫѳԬϩΩΩΩΫѳ߳ԬΩΩΩΩΫҴ߳ԬΩΩΩΩΫҴ޲ԬΩΩΩΩάҵ޲ԬΩΩΩΩάҶݲ߻ܸܸܸܻܺ߻ܸܸܸܻܺ߻ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ޺ܸܸܸܻܺ | U@(/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Inspector/Resources/Images/progind10.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/rtfPboard.tiff0000644000175000001440000002247613214346550023057 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSKKK@@@NNNGGGDDDkkkNNNUUU@@@IIINNNvvvkkkUUU@@@IIINNNGGGkSSS@@@KKK@@@kSSSBBBkkkIIIkSS2777GGGUUU@@@NNNUUUkSSSvvvUUUDDDkSSS999UUUkSSSUUUUUUUUUkSS2GGG@@@NNNkSSSkSSSkSSSkSS2kSSSkSSSkSSSfUf3D3ffffff"3"kSS2UDUwwfwfffwDDDkSSSffw̻wwwfUfDDDUUU"3"kSSSwfffffD3D333"""3D3DDD3D3kSSSffwDDD3333DDfUfUffDDUDUDkSS2UUUwwwwfUfDUD33333"wyyy"3"""UUDD3DkSSS3"3fffUUfDUUDDD3DD"3"""""fUf3D3kSSSD33DDDD3D"3"DDD"333UUD333kSSSfff"3"333DUDUDUfwf"""3"33DDUDUDkSS2̻"""""D33UUUwww"""3kSSS""DDDwww33"3wfkSSSwwwfffffpcp""""88j"wkSSSUUUNZs3wPPu?LkSS2\\>>kSSSDDDDwwffkSSSPP""3U3"DfkSSSLXEE3?LLkSS2ffWcEQOOcckSSS"wwkSSS"333UUUUU""kSSSffUU33kSS2wwkSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ )$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/rtf.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/rtfdPboard.tiff0000644000175000001440000002247613214346550023223 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSNNNBBBGGGUUUGGG~~~@@@NNNGGGDDDNNN~~~kkkNNNUUU@@@IIINNNkkkUUU@@@IIIhhhkSSSRRRKKK@@@@@@kSSSBBBvvvDDDIIIVVVzzzkSS2222GGGDDDUUU@@@IIIUUU@@@kSSSvvv@@@UUUUUU@@@kSSS111KKKUUUkkkkSSSUUUUUUUUUUUU999kSS2BBBGGGGGGNNN@@@kSSSkSSSkSSSkSS2kSSSkSSSkSSSfUf3D3ffffff"3"kSS2UDUwwfwfffwDDDkSSSffw̻wwwfUfDDDUUU"3"kSSSwfffffD3D333"""3D3DDD3D3kSSSffwDDD3333DDfUfUffDDUDUDkSS2UUUwwwwfUfDUD33333"wyyy"3"""UUDD3DkSSS3"3fffUUfDUUDDD3DD"3"""""fUf3D3kSSSD33DDDD3D"3"DDD"333UUD333kSSSfff"3"333DUDUDUfwf"""3"33DDUDUDkSS2̻"""""D33UUUwww"""3kSSS""DDDwww33"3wfkSSSwwwfffffpcp""""88j"wkSSSUUUNZs3wPPu?LkSS2\\>>kSSSDDDDwwffkSSSPP""3U3"DfkSSSLXEE3?LLkSS2ffWcEQOOcckSSS"wwkSSS"333UUUUU""kSSSffUU33kSS2wwkSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/rtfd.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/stringPboard.tiff0000644000175000001440000002247613214346550023572 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSUUU///UUUkSSSUUUeeerrrvvvKKKUUUkSSS999999kSS2NNNrrr___@@@kSSSNNNKKK444GGGkSSSNNNKKKkSSSNNNYYY+++@@@kSS2NNNNNNkSSSNNN999UUUkSSSPPP~~~___UUUkSSSUUUUUUkSS2NNN@@@vvv///@@@kSSSNNN222444GGGkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ )$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/txt.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/switchMultiple.tiff0000644000175000001440000000256013214346550024141 0ustar multixusersII* gJ`h(R/home/enrico/Grivei/sviluppo/FileManager/Xws/Xws/Inspectors/AttributesPanel/Images/switchMultiple.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/switchOff.tiff0000644000175000001440000000256413214346550023064 0ustar multixusersII*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS lNdl(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/switchOff.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/switchOn.tiff0000644000175000001440000000256413214346550022726 0ustar multixusersII*SSSSSSSSSSSSSSSSSSSSSSSSSSSSSS kNdl(R/home/enrico/Grivei/sviluppo/FileManager/WMFinder/Xws/Inspectors/inspectors/Attributes/Icons/switchOn.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/Resources/Images/tiffPboard.tiff0000644000175000001440000002247613214346550023214 0ustar multixusersII*$SSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSBS2SSSSSSSSSSSS2kSSSkSSSٻ¤{ƦȨȩҳäϰίѳʭ̯շͮӴָĦԶٻ̭۾Ũ˭ոkSSS|ԶҴ|ַͮ£ŧغɪƨ££׹ܾǪŧǨݿæŨkSS2̭ϰҳϰغ׸ʫعɪŦгȪmrɭ£ʬ۽¤ˬԶ̭ն׹ԶkSSSնԵعҳŧ̮̮ä¤ڻ̯˭wtoo^{kZsazf{e۽ħշڼԵ׸ܾå̯αkSSSܾݿ۽ͯʭ̯в۾Ũ˭uquvpueo^|m^p_zgsɬ۾¥ڻ۽۽ѴӶӶkSSS׹¥¤Ũ¦ܾŨǬqwzq~no~npst礥۽ݿ¥ũŨkSS2¤ƧػŨǪƩͰȯ۾}h}ϵԼ׽flZzhWp_rrn[}ɬ˯ټ¦ƩȫɬkSSSбƧгֹȫ׺ټҶչ{ջųҽҴqxfteVvfsmZuټӶ˭ǬɬԷ۾kSSS¥αҴ۾ͰĪİĩuʭʶŲؽ{k{iX}m~ozhW}kϴѳƨũɬ׺kSSSββڽˮȫ̰ϴ{xͰ¯ųŲȶպ¤uis`}m|nqdUreUlxȩԶ¤ȫȫkSS2Ҵʹ©ϵϷ̳βo\}չůٽոɫzduapreUpan|ƨ̭ҳkSSSͭӵéêҹ~r_xαϳѸֿɰոĦ~ur]yerwfVvgu{ŧs|kSSS~ӵ׾ͯsrvqx¦Ǭ~izfnmrro^zjqxzvurkSSSy}ո§ҳڻs|ǫ§Ȭ˲շѵ̰Ե{rro}nqzz|}|kSS2v`u`wtev`h|e|l~پеϴеĥɯԻβiuumZ~kY}jXt_p~}dza{akSSSpr_yd~ks^nmp]sazֻªʲƭêʶָt^lvq\yf}jmioy}kSSSvvbvcn~lZziwhp^uerϱ׽Ȯ˲xپپҷƧtq\run[ls}iq]{~dtkSSSr^r^plo\ziXteV}lZ~k~o}ȫƪvxcؼֻofs`qun[n[mZn[zgut^t^u_kSS2noulxhWrrueziXrp~չƨĥƨã}s`zeuu_yf~kmwwt^ovkSSSttt{i|kYtar`~lZp]riݿԵææȪrin[zfun[~kuuwxv_|fgkSSSttwovc{fyducntwgqնѱu~gzfxgrrvcnrswwiihkSSSrtuuvxzrstqrȭڼ˭}ywrqrrutrrwxzzykSS2}kYq]to}dojq^prr`ocUocUq]{fuzfq]lZlZucrsn[~kY{iX{iXmvr^xau_kSSSo}dp}p|xbo_so_viZse}qbr]lsaq_~l~iq]~kpyhWsbyh}n^n[wq]kokSSS}kr~y{c{hro_ui\ozklzjydqr}crq{iXxhpueo[w}dkqkSSSwawaykhgwb|js}n^ocUmaUufVḽzkjluzr}kYxgW|jYreUsbtq\r\w`kSS2nsoyio[rpweseVpzm]xjZ}kvǫշäҳշuumZ{glyhp~nlY}ktkSSSywo|qeteVr`|m^yiYm[qr`{fغ˱ɯϱɫѴѴŧ{t^rtrrqlY{ejkSSSzx~opznrqqprzѳʰиһԼεԾδũΰ|||sqrppt{kSSSzas_n|i{iXn[mZ~lZpuyͰһðDzԼԽԽϲԵ|{ct^lYm[}jqteVmZr^kSS2rybwdnmZ~kxhm[ze{ɫֽӿϺªʸ̵ʳɬ~{b}h|jubu_un[tb~kkSSSzfq}jXvfxhm\r¤ջʶվվʷʸ̵Ȳɬȫ~yap{rf|t^ucwgkSSSkSSSkSS2kSSSkSSSkSSSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk00$ *$%@$.%6%(R/opt/Surse/gnustep/CVS/usr-apps/tiff.tiffCreated with The GIMPHHgworkspace-1.1.0/Inspector/TimeDateView.h0000644000175000001440000000262714751213523017577 0ustar multixusers/* TimeDateView.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TIMEDATEVIEW_H #define TIMEDATEVIEW_H #include #include @class NSCalendarDate; @class NSImage; @class NSTextFieldCell; @interface TimeDateView : NSView { NSImage *maskImage; NSImage *hour1Image, *hour2Image, *hour3Image; NSImage *minute1Image, *minute2Image; NSImage *dayweekImage; NSImage *daymont1Image, *daymont2Image; NSImage *monthImage; NSTextFieldCell *yearlabel; } - (void)setDate:(NSCalendarDate *)adate; @end #endif // TIMEDATEVIEW_H gworkspace-1.1.0/Inspector/TimeDateView.m0000644000175000001440000001450314751213523017600 0ustar multixusers/* TimeDateView.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "TimeDateView.h" #import "Inspector.h" static const int tf_posx[11] = { 5, 14, 24, 28, 37, 40, 17, 17, 22, 27, 15 }; static const int posy[4] = { 1, 13, 29, 38 }; @implementation TimeDateView - (void)dealloc { RELEASE (maskImage); RELEASE (hour1Image); RELEASE (hour2Image); RELEASE (hour3Image); RELEASE (minute1Image); RELEASE (minute2Image); RELEASE (dayweekImage); RELEASE (daymont1Image); RELEASE (daymont2Image); RELEASE (monthImage); [super dealloc]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if (self) { maskImage = nil; yearlabel = [NSTextFieldCell new]; [yearlabel setFont: [NSFont systemFontOfSize: 8]]; [yearlabel setAlignment: NSCenterTextAlignment]; } return self; } - (void)setDate:(NSCalendarDate *)adate { CREATE_AUTORELEASE_POOL (pool); NSBundle *bundle; NSString *imgName; NSString *imagepath; NSImage *image; int n, hour, minute, dayOfWeek, dayOfMonth, month; hour = [adate hourOfDay]; minute = [adate minuteOfHour]; dayOfWeek = [adate dayOfWeek]; dayOfMonth = [adate dayOfMonth]; month = [adate monthOfYear]; bundle = [NSBundle bundleForClass: [Inspector class]]; imagepath = [bundle pathForResource: @"Mask" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (maskImage, image); RELEASE (image); // // hour // n = hour/10; imgName = [NSString stringWithFormat: @"LED-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (hour1Image, image); RELEASE (image); n = hour%10; imgName = [NSString stringWithFormat: @"LED-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (hour2Image, image); RELEASE (image); imagepath = [bundle pathForResource: @"LED-Colon" ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (hour3Image, image); RELEASE (image); // // minute // n = minute/10; imgName = [NSString stringWithFormat: @"LED-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (minute1Image, image); RELEASE (image); n = minute%10; imgName = [NSString stringWithFormat: @"LED-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (minute2Image, image); RELEASE (image); // // dayOfWeek // imgName = [NSString stringWithFormat: @"Weekday-%d", dayOfWeek]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (dayweekImage, image); RELEASE (image); // // dayOfMonth // n = dayOfMonth/10; imgName = [NSString stringWithFormat: @"Date-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (daymont1Image, image); RELEASE (image); n = dayOfMonth%10; imgName = [NSString stringWithFormat: @"Date-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (daymont2Image, image); RELEASE (image); // // month // n = month; imgName = [NSString stringWithFormat: @"Month-%d", n]; imagepath = [bundle pathForResource: imgName ofType: @"tiff"]; image = [[NSImage alloc] initWithContentsOfFile: imagepath]; ASSIGN (monthImage, image); RELEASE (image); [yearlabel setStringValue: [NSString stringWithFormat: @"%li", (long int)[adate yearOfCommonEra]]]; RELEASE (pool); [self setNeedsDisplay: YES]; } - (void)drawRect:(NSRect)rect { NSRect r; NSSize s; NSPoint p; CGFloat h; if (maskImage == nil) { return; } s = [maskImage size]; h = s.height; r = NSInsetRect(rect, (rect.size.width - s.width)/2, (rect.size.height - s.height)/2); p = NSMakePoint(r.origin.x, r.origin.y); [maskImage compositeToPoint: NSMakePoint(0, 13) operation: NSCompositeSourceOver]; // // hour // p.x = tf_posx[0]; p.y = h - posy[0]; [hour1Image compositeToPoint: p operation: NSCompositeSourceOver]; p.x = tf_posx[1]; [hour2Image compositeToPoint: p operation: NSCompositeSourceOver]; p.x = tf_posx[2]; [hour3Image compositeToPoint: p operation: NSCompositeSourceOver]; // // minute // p.x = tf_posx[3]; [minute1Image compositeToPoint: p operation: NSCompositeSourceOver]; p.x = tf_posx[4]; [minute2Image compositeToPoint: p operation: NSCompositeSourceOver]; // // dayOfWeek // p.x = tf_posx[6]; p.y = h - posy[1]; [dayweekImage compositeToPoint: p operation: NSCompositeSourceOver]; // // dayOfMonth // p.x = tf_posx[7]; p.y = h - posy[2]; [daymont1Image compositeToPoint: p operation: NSCompositeSourceOver]; p.x = tf_posx[9]; [daymont2Image compositeToPoint: p operation: NSCompositeSourceOver]; // // month // p.x = tf_posx[10]; p.y = h - posy[3]; [monthImage compositeToPoint: p operation: NSCompositeSourceOver]; [yearlabel drawInteriorWithFrame: NSMakeRect(0, 0, rect.size.width, 12) inView: self]; } @end gworkspace-1.1.0/Inspector/Tools.h0000644000175000001440000000416314751213523016345 0ustar multixusers/* Tools.h * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef TOOLS_H #define TOOLS_H #include @class NSMatrix; @class NSTextField; @class NSButton; @class NSWorkspace; @class IconView; @interface Tools : NSObject { IBOutlet NSWindow *win; IBOutlet NSBox *mainBox; IBOutlet NSBox *topBox; IBOutlet IconView *iconView; IBOutlet NSTextField *titleField; IBOutlet NSBox *toolsBox; NSTextField *errLabel; IBOutlet id explLabel1; IBOutlet NSScrollView *scrollView; NSMatrix *matrix; IBOutlet NSTextField *defAppLabel; IBOutlet NSTextField *defAppField; IBOutlet NSTextField *defPathLabel; IBOutlet NSTextField *defPathField; IBOutlet NSTextField *explLabel2; IBOutlet NSTextField *explLabel3; IBOutlet NSButton *okButt; NSArray *insppaths; NSString *currentApp; NSMutableArray *extensions; NSWorkspace *ws; id inspector; } - (instancetype)initForInspector:(id)insp; - (NSView *)inspView; - (NSString *)winname; - (void)activateForPaths:(NSArray *)paths; - (BOOL)findApplicationsForPaths:(NSArray *)paths; - (IBAction)setDefaultApplication:(id)sender; - (void)setCurrentApplication:(id)sender; - (void)openFile:(id)sender; - (void)watchedPathDidChange:(NSDictionary *)info; @end #endif // TOOLS_H gworkspace-1.1.0/Inspector/Tools.m0000644000175000001440000003106714751213523016355 0ustar multixusers/* Tools.m * * Copyright (C) 2004-2024 Free Software Foundation, Inc. * * Authors: Enrico Sersale * Riccardo Mottola * Date: January 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #include #import "Tools.h" #import "Inspector.h" #import "IconView.h" #import "Functions.h" #import "FSNodeRep.h" #define ICNSIZE 48 static NSString *nibName = @"Tools"; @implementation Tools - (void)dealloc { RELEASE (toolsBox); RELEASE (errLabel); RELEASE (mainBox); RELEASE (insppaths); RELEASE (extensions); RELEASE (currentApp); [super dealloc]; } - (instancetype)initForInspector:(id)insp { self = [super init]; if (self) { NSRect r; id cell; if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } RETAIN (mainBox); RETAIN (toolsBox); RELEASE (win); inspector = insp; [iconView setInspector: inspector]; ws = [NSWorkspace sharedWorkspace]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasHorizontalScroller: YES]; [scrollView setHasVerticalScroller: NO]; cell = [NSButtonCell new]; [cell setButtonType: NSPushOnPushOffButton]; [cell setImagePosition: NSImageOnly]; matrix = [[NSMatrix alloc] initWithFrame: NSZeroRect mode: NSRadioModeMatrix prototype: cell numberOfRows: 0 numberOfColumns: 0]; RELEASE (cell); [matrix setIntercellSpacing: NSZeroSize]; [matrix setCellSize: NSMakeSize(64, [[scrollView contentView] bounds].size.height)]; [matrix setAllowsEmptySelection: YES]; [matrix setTarget: self]; [matrix setAction: @selector(setCurrentApplication:)]; [matrix setDoubleAction: @selector(openFile:)]; [scrollView setDocumentView: matrix]; RELEASE (matrix); r = [toolsBox bounds]; r.origin.y = 165; r.size.height = 25; errLabel = [[NSTextField alloc] initWithFrame: r]; [errLabel setAlignment: NSCenterTextAlignment]; [errLabel setFont: [NSFont systemFontOfSize: 18]]; [errLabel setBackgroundColor: [NSColor windowBackgroundColor]]; [errLabel setTextColor: [NSColor darkGrayColor]]; [errLabel setBezeled: NO]; [errLabel setEditable: NO]; [errLabel setSelectable: NO]; [errLabel setStringValue: NSLocalizedString(@"No Tools Inspector", @"")]; insppaths = nil; currentApp = nil; extensions = nil; [okButt setTitle: NSLocalizedString(@"Set Default", @"")]; [okButt setEnabled: NO]; } return self; } - (NSView *)inspView { return mainBox; } - (NSString *)winname { return NSLocalizedString(@"Tools Inspector", @""); } - (void)activateForPaths:(NSArray *)paths { BOOL toolsOK = YES; NSInteger i; if (paths == nil) { DESTROY (insppaths); return; } [okButt setEnabled: NO]; if ([paths count] == 1) { FSNode *node = [FSNode nodeWithPath: [paths objectAtIndex: 0]]; NSImage *icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; [iconView setImage: icon]; [titleField setStringValue: [node name]]; } else { NSImage *icon = [[FSNodeRep sharedInstance] multipleSelectionIconOfSize: ICNSIZE]; NSString *items; items = [NSString stringWithFormat: @"%lu %@", (long unsigned)[paths count], NSLocalizedString(@"Items", @"")]; [titleField setStringValue: items]; [iconView setImage: icon]; } for (i = 0; i < [paths count]; i++) { FSNode *node = [FSNode nodeWithPath: [paths objectAtIndex: i]]; if (![node isValid]) { toolsOK = NO; break; } } // We have a valid node and found applications to open it if (toolsOK && [self findApplicationsForPaths: paths]) { [errLabel removeFromSuperview]; [mainBox addSubview: toolsBox]; } else { [toolsBox removeFromSuperview]; [mainBox addSubview: errLabel]; } } - (BOOL)findApplicationsForPaths:(NSArray *)paths { NSMutableDictionary *extensionsAndApps; NSMutableArray *commonApps; NSString *s; NSCell *cell; BOOL appsforext; NSInteger i, count; ASSIGN (insppaths, paths); RELEASE (extensions); extensions = [NSMutableArray new]; extensionsAndApps = [NSMutableDictionary dictionary]; DESTROY (currentApp); [defAppField setStringValue: @""]; [defPathField setStringValue: @""]; appsforext = YES; for (i = 0; i < [insppaths count]; i++) { NSString *ext = [[insppaths objectAtIndex: i] pathExtension]; if ([extensions containsObject: ext] == NO) { NSDictionary *extinfo = [ws infoForExtension: ext]; if (extinfo) { NSMutableArray *appsnames = [NSMutableArray arrayWithCapacity: 1]; [appsnames addObjectsFromArray: [extinfo allKeys]]; [extensionsAndApps setObject: appsnames forKey: ext]; [extensions addObject: ext]; } else { appsforext = NO; } } } if (!appsforext) return NO; if ([extensions count] == 1) { NSString *ext = [extensions objectAtIndex: 0]; commonApps = [NSMutableArray arrayWithArray: [extensionsAndApps objectForKey: ext]]; currentApp = [ws getBestAppInRole: nil forExtension: ext]; RETAIN (currentApp); } else { NSInteger j, n; for (i = 0; i < [extensions count]; i++) { NSString *ext1 = [extensions objectAtIndex: i]; NSMutableArray *a1 = [extensionsAndApps objectForKey: ext1]; for (j = 0; j < [extensions count]; j++) { NSString *ext2 = [extensions objectAtIndex: j]; NSMutableArray *a2 = [extensionsAndApps objectForKey: ext2]; count = [a1 count]; for (n = 0; n < count; n++) { NSString *s = [a1 objectAtIndex: n]; if ([a2 containsObject: s] == NO) { [a1 removeObject: s]; count--; n--; } } [extensionsAndApps setObject: a1 forKey: ext1]; } } commonApps = [NSMutableArray array]; for (i = 0; i < [extensions count]; i++) { NSString *ext = [extensions objectAtIndex: i]; NSArray *apps = [extensionsAndApps objectForKey: ext]; for (j = 0; j < [apps count]; j++) { NSString *app = [apps objectAtIndex: j]; if ([commonApps containsObject: app] == NO) { [commonApps addObject: app]; } } } if ([commonApps count] != 0) { BOOL iscommapp = YES; NSString *ext1 = [extensions objectAtIndex: 0]; currentApp = [ws getBestAppInRole: nil forExtension: ext1]; if ([commonApps containsObject: currentApp]) { for (i = 1; i < [extensions count]; i++) { NSString *ext2 = [extensions objectAtIndex: i]; NSString *app = [ws getBestAppInRole: nil forExtension: ext2]; if ([currentApp isEqual: app] == NO) { iscommapp = NO; } } } else { currentApp = nil; } if ((iscommapp == YES) && (currentApp != nil) && appsforext) { RETAIN (currentApp); } else { currentApp = nil; } } } if (currentApp == nil) return NO; if ([commonApps count] == 0) return NO; [okButt setEnabled: YES]; count = [commonApps count]; [matrix renewRows: 1 columns: count]; [matrix sizeToCells]; if (appsforext) { for (i = 0; i < count; i++) { NSString *appName = [commonApps objectAtIndex: i]; FSNode *node = [FSNode nodeWithPath: [ws fullPathForApplication: appName]]; NSImage *icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; cell = [matrix cellAtRow: 0 column: i]; [cell setImage: icon]; [cell setTitle: appName]; } [matrix sizeToCells]; } if (currentApp != nil) { NSArray *cells = [matrix cells]; for(i = 0; i < [cells count]; i++) { cell = [cells objectAtIndex: i]; if(cell && ([[cell title] isEqualToString: currentApp])) { [matrix selectCellAtRow: 0 column: i]; [matrix scrollCellToVisibleAtRow: 0 column: i]; break; } } [defAppField setStringValue: [currentApp stringByDeletingPathExtension]]; s = [ws fullPathForApplication: currentApp]; if (s != nil) s = relativePathFit(defPathField, s); else s = @""; [defPathField setStringValue: s]; } return YES; } - (void)setCurrentApplication:(id)sender { NSString *s; ASSIGN (currentApp, [[sender selectedCell] title]); s = [ws fullPathForApplication: currentApp]; s = relativePathFit(defPathField, s); [defPathField setStringValue: s]; [defAppField setStringValue: [currentApp stringByDeletingPathExtension]]; } - (IBAction)setDefaultApplication:(id)sender { NSString *ext, *app; NSDictionary *changedInfo; NSArray *cells; NSMutableArray *newApps; id cell; FSNode *node; NSImage *icon; NSInteger i, count; for (i = 0; i < [extensions count]; i++) { ext = [extensions objectAtIndex: i]; [ws setBestApp: currentApp inRole: nil forExtension: ext]; } changedInfo = [NSDictionary dictionaryWithObjectsAndKeys: currentApp, @"app", extensions, @"exts", nil]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWAppForExtensionDidChangeNotification" object: nil userInfo: changedInfo]; newApps = [NSMutableArray arrayWithCapacity: 1]; [newApps addObject: currentApp]; cells = [matrix cells]; for(i = 0; i < [cells count]; i++) { app = [[cells objectAtIndex: i] title]; if ([app isEqual: currentApp] == NO) { [newApps insertObject: app atIndex: [newApps count]]; } } count = [newApps count]; [matrix renewRows: 1 columns: count]; for (i = 0; i < count; i++) { cell = [matrix cellAtRow: 0 column: i]; app = [newApps objectAtIndex: i]; [cell setTitle: app]; node = [FSNode nodeWithPath: [ws fullPathForApplication: app]]; icon = [[FSNodeRep sharedInstance] iconOfSize: ICNSIZE forNode: node]; [cell setImage: icon]; } [matrix scrollCellToVisibleAtRow: 0 column: 0]; [matrix selectCellAtRow: 0 column: 0]; } - (void)openFile:(id)sender { NSInteger i; for (i = 0; i < [insppaths count]; i++) { NSString *fpath = [insppaths objectAtIndex: i]; NS_DURING { [ws openFile: fpath withApplication: [[sender selectedCell] title]]; } NS_HANDLER { NSRunAlertPanel(NSLocalizedString(@"error", @""), [NSString stringWithFormat: @"%@ %@!", NSLocalizedString(@"Can't open ", @""), [fpath lastPathComponent]], NSLocalizedString(@"OK", @""), nil, nil); } NS_ENDHANDLER } } - (void)watchedPathDidChange:(NSDictionary *)info { } @end gworkspace-1.1.0/Inspector/Version0000644000175000001440000000016314752465347016456 0ustar multixusers MAJOR_VERSION=1 MINOR_VERSION=1 SUBMINOR_VERSION=0 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} gworkspace-1.1.0/Inspector/aclocal.m40000644000175000001440000000174313214346550016735 0ustar multixusersAC_DEFUN(AC_CHECK_PDFKIT,[ GNUSTEP_SH_EXPORT_ALL_VARIABLES=yes . "$GNUSTEP_MAKEFILES/GNUstep.sh" unset GNUSTEP_SH_EXPORT_ALL_VARIABLES OLD_CFLAGS=$CFLAGS CFLAGS="-xobjective-c `gnustep-config --objc-flags`" OLD_LIBS="$LIBS" LIBS="$LIBS -lPDFKit `gnustep-config --gui-libs`" AC_MSG_CHECKING([for PDFKit]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[[PDFDocument class]];])], $1; have_pdfkit=yes, $2; have_pdfkit=no) LIBS="$OLD_LIBS" CFLAGS="$OLD_CFLAGS" AC_MSG_RESULT($have_pdfkit) ]) AC_DEFUN(AC_CHECK_PDFKIT_DARWIN,[ AC_MSG_CHECKING([for PDFKit]) PDF_H="PDFKit/PDFDocument.h" PDF_H_PATH="$GNUSTEP_SYSTEM_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else PDF_H_PATH="$GNUSTEP_LOCAL_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else have_pdfkit=no fi fi AC_MSG_RESULT($have_pdfkit) ]) gworkspace-1.1.0/Inspector/config.h.in0000644000175000001440000000347414623464050017124 0ustar multixusers/* config.h.in. Generated from configure.ac by autoheader. */ /* Path to file */ #undef FILEPATH /* debug logging */ #undef GW_DEBUG_LOG /* Define to 1 if you have the header file. */ #undef HAVE_DIR_H /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getlogin' function. */ #undef HAVE_GETLOGIN /* Define to 1 if you have the `getpwnam' function. */ #undef HAVE_GETPWNAM /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Path to sh interpreter */ #undef SHPATH /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS gworkspace-1.1.0/Inspector/configure0000755000175000001440000042546614623463757017036 0ustar multixusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS have_pdfkit FILE_PATH SH_PATH EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_debug_log with_sh with_file ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug-log Enable debug logging Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-sh=PROG Use PROG as sh interpreter --with-file=PROG Use PROG as file Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$GNUSTEP_MAKEFILES"; then as_fn_error $? "You must set GNUSTEP_MAKEFILES or run the GNUstep initialization script first!" "$LINENO" 5 fi #-------------------------------------------------------------------- # Find the compiler #-------------------------------------------------------------------- if test "$CC" = ""; then CC=`gnustep-config --variable=CC` fi if test "$CPP" = ""; then CPP=`gnustep-config --variable=CPP` fi if test "$CXX" = ""; then CXX=`gnustep-config --variable=CXX` fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu MAKECC=`gnustep-config --variable=CC` if test "$CC" != "$MAKECC"; then as_fn_error $? "You are running configure with the compiler ($CC) set to a different value from that used by gnustep-make ($MAKECC). Please run configure again with your environment set to match your gnustep-make" "$LINENO" 5 exit 1 fi #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dir.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpwnam getpwuid geteuid getlogin do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_aux_dir= for ac_dir in $GNUSTEP_MAKEFILES "$srcdir"/$GNUSTEP_MAKEFILES; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in $GNUSTEP_MAKEFILES \"$srcdir\"/$GNUSTEP_MAKEFILES" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- # Check whether --enable-debug_log was given. if test "${enable_debug_log+set}" = set; then : enableval=$enable_debug_log; else enable_debug_log=no fi if test "$enable_debug_log" = "no"; then GW_DEBUG_LOG=0 else GW_DEBUG_LOG=1 fi cat >>confdefs.h <<_ACEOF #define GW_DEBUG_LOG $GW_DEBUG_LOG _ACEOF #-------------------------------------------------------------------- # We need sh #-------------------------------------------------------------------- # Check whether --with-sh was given. if test "${with_sh+set}" = set; then : withval=$with_sh; SH_PATH=$withval else SH_PATH=none fi if test "x$SH_PATH" = "xnone"; then for ac_prog in sh bash do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SH_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $SH_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_SH_PATH="$SH_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SH_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SH_PATH=$ac_cv_path_SH_PATH if test -n "$SH_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH_PATH" >&5 $as_echo "$SH_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$SH_PATH" && break done test -n "$SH_PATH" || SH_PATH="none" fi cat >>confdefs.h <<_ACEOF #define SHPATH "$SH_PATH" _ACEOF #-------------------------------------------------------------------- # We need file #-------------------------------------------------------------------- # Check whether --with-file was given. if test "${with_file+set}" = set; then : withval=$with_file; FILE_PATH=$withval else FILE_PATH=none fi if test "x$FILE_PATH" = "xnone"; then for ac_prog in file file do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_FILE_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $FILE_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_FILE_PATH="$FILE_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FILE_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FILE_PATH=$ac_cv_path_FILE_PATH if test -n "$FILE_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE_PATH" >&5 $as_echo "$FILE_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$FILE_PATH" && break done test -n "$FILE_PATH" || FILE_PATH="none" fi cat >>confdefs.h <<_ACEOF #define FILEPATH "$FILE_PATH" _ACEOF #-------------------------------------------------------------------- # We need PDFKit #-------------------------------------------------------------------- case "$target_os" in darwin*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDFKit" >&5 $as_echo_n "checking for PDFKit... " >&6; } PDF_H="PDFKit/PDFDocument.h" PDF_H_PATH="$GNUSTEP_SYSTEM_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else PDF_H_PATH="$GNUSTEP_LOCAL_HEADERS/$PDF_H" if test -e $PDF_H_PATH; then have_pdfkit=yes else have_pdfkit=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pdfkit" >&5 $as_echo "$have_pdfkit" >&6; } ;; *) GNUSTEP_SH_EXPORT_ALL_VARIABLES=yes . "$GNUSTEP_MAKEFILES/GNUstep.sh" unset GNUSTEP_SH_EXPORT_ALL_VARIABLES OLD_CFLAGS=$CFLAGS CFLAGS="-xobjective-c `gnustep-config --objc-flags`" OLD_LIBS="$LIBS" LIBS="$LIBS -lPDFKit `gnustep-config --gui-libs`" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDFKit" >&5 $as_echo_n "checking for PDFKit... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { [PDFDocument class]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_pdfkit=yes; have_pdfkit=yes else have_pdfkit=no; have_pdfkit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$OLD_LIBS" CFLAGS="$OLD_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pdfkit" >&5 $as_echo "$have_pdfkit" >&6; } ;; esac if test "$have_pdfkit" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: The PDFKit framework can't be found." >&5 $as_echo "$as_me: The PDFKit framework can't be found." >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: The pdf viewer will not be built." >&5 $as_echo "$as_me: The pdf viewer will not be built." >&6;} fi ac_config_files="$ac_config_files GNUmakefile ContentViewers/GNUmakefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; "ContentViewers/GNUmakefile") CONFIG_FILES="$CONFIG_FILES ContentViewers/GNUmakefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gworkspace-1.1.0/Inspector/configure.ac0000644000175000001440000000572213251572120017357 0ustar multixusersAC_PREREQ(2.52) AC_INIT if test -z "$GNUSTEP_MAKEFILES"; then AC_MSG_ERROR([You must set GNUSTEP_MAKEFILES or run the GNUstep initialization script first!]) fi #-------------------------------------------------------------------- # Find the compiler #-------------------------------------------------------------------- if test "$CC" = ""; then CC=`gnustep-config --variable=CC` fi if test "$CPP" = ""; then CPP=`gnustep-config --variable=CPP` fi if test "$CXX" = ""; then CXX=`gnustep-config --variable=CXX` fi AC_PROG_CC AC_PROG_CPP MAKECC=`gnustep-config --variable=CC` if test "$CC" != "$MAKECC"; then AC_MSG_ERROR([You are running configure with the compiler ($CC) set to a different value from that used by gnustep-make ($MAKECC). Please run configure again with your environment set to match your gnustep-make]) exit 1 fi #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- AC_CHECK_HEADERS(dir.h unistd.h) AC_CHECK_FUNCS(getpwnam getpwuid geteuid getlogin) AC_CONFIG_AUX_DIR([$GNUSTEP_MAKEFILES]) AC_CONFIG_HEADER([config.h]) #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- AC_ARG_ENABLE(debug_log, [ --enable-debug-log Enable debug logging],, enable_debug_log=no) if test "$enable_debug_log" = "no"; then GW_DEBUG_LOG=0 else GW_DEBUG_LOG=1 fi AC_DEFINE_UNQUOTED([GW_DEBUG_LOG], [$GW_DEBUG_LOG], [debug logging]) #-------------------------------------------------------------------- # We need sh #-------------------------------------------------------------------- AC_ARG_WITH([sh], [ --with-sh=PROG Use PROG as sh interpreter], [SH_PATH=$withval], [SH_PATH=none]) if test "x$SH_PATH" = "xnone"; then AC_PATH_PROGS([SH_PATH], [sh bash], [none]) fi AC_DEFINE_UNQUOTED([SHPATH], ["$SH_PATH"], [Path to sh interpreter]) #-------------------------------------------------------------------- # We need file #-------------------------------------------------------------------- AC_ARG_WITH([file], [ --with-file=PROG Use PROG as file], [FILE_PATH=$withval], [FILE_PATH=none]) if test "x$FILE_PATH" = "xnone"; then AC_PATH_PROGS([FILE_PATH], [file file], [none]) fi AC_DEFINE_UNQUOTED([FILEPATH], ["$FILE_PATH"], [Path to file]) #-------------------------------------------------------------------- # We need PDFKit #-------------------------------------------------------------------- case "$target_os" in darwin*) AC_CHECK_PDFKIT_DARWIN(have_pdfkit=yes, have_pdfkit=no) ;; *) AC_CHECK_PDFKIT(have_pdfkit=yes, have_pdfkit=no) ;; esac if test "$have_pdfkit" = "no"; then AC_MSG_NOTICE([The PDFKit framework can't be found.]) AC_MSG_NOTICE([The pdf viewer will not be built.]) fi AC_SUBST(have_pdfkit) AC_CONFIG_FILES([ GNUmakefile ContentViewers/GNUmakefile ]) AC_OUTPUT gworkspace-1.1.0/Operation/0000755000175000001440000000000014753472316015073 5ustar multixusersgworkspace-1.1.0/Operation/FileOpInfo.h0000644000175000001440000001344614751213523017235 0ustar multixusers/* FileOpInfo.h * * Copyright (C) 2004-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class FileOpExecutor; @class NSWindow; @class NSTextField; @class NSButton; @class NSProgressIndicator; @protocol FileOpInfoProtocol - (void)registerExecutor:(id)anObject; - (NSInteger)requestUserConfirmationWithMessage:(NSString *)message title:(NSString *)title; - (NSInteger)showErrorAlertWithMessage:(NSString *)message; - (void)setNumFiles:(int)n; - (void)setProgIndicatorValue:(int)n; - (void)sendDidChangeNotification; - (void)removeProcessedFiles; - (void)cleanUpExecutor; - (void)endOperation; @end @protocol FileOpExecutorProtocol + (void)setPorts:(NSArray *)thePorts; - (void)setFileop:(NSArray *)thePorts; - (BOOL)setOperation:(NSData *)opinfo; - (BOOL)checkSameName; - (void)setOnlyOlder:(BOOL)flag; - (oneway void)calculateNumFiles:(NSUInteger)continueFrom; - (oneway void)performOperation; - (NSData *)processedFiles; - (oneway void)Pause; - (oneway void)Stop; - (BOOL)isPaused; @end @interface FileOpInfo: NSObject { NSString *type; NSString *source; NSString *destination; NSMutableArray *files; NSMutableArray *dupfiles; NSMutableArray *procFiles; int ref; NSMutableDictionary *operationDict; NSMutableArray *notifNames; BOOL confirm; BOOL showwin; BOOL opdone; BOOL onlyOlder; NSConnection *execconn; id executor; NSNotificationCenter *nc; NSNotificationCenter *dnc; NSFileManager *fm; id controller; IBOutlet NSWindow *win; IBOutlet NSTextField *fromLabel; IBOutlet NSTextField *fromField; IBOutlet NSTextField *toLabel; IBOutlet NSTextField *toField; IBOutlet NSProgressIndicator *progInd; IBOutlet NSButton *pauseButt; IBOutlet NSButton *stopButt; } + (id)operationOfType:(NSString *)tp ref:(int)rf source:(NSString *)src destination:(NSString *)dst files:(NSArray *)fls confirmation:(BOOL)conf usewindow:(BOOL)uwnd winrect:(NSRect)wrect controller:(id)cntrl; - (id)initWithOperationType:(NSString *)tp ref:(int)rf source:(NSString *)src destination:(NSString *)dst files:(NSArray *)fls confirmation:(BOOL)conf usewindow:(BOOL)uwnd winrect:(NSRect)wrect controller:(id)cntrl; - (void)startOperation; - (void)detachOperationThread; - (NSInteger)requestUserConfirmationWithMessage:(NSString *)message title:(NSString *)title; - (NSInteger)showErrorAlertWithMessage:(NSString *)message; - (IBAction)pause:(id)sender; - (IBAction)stop:(id)sender; - (void)showProgressWin; - (void)setNumFiles:(int)n; - (void)setProgIndicatorValue:(int)n; - (void)removeProcessedFiles; - (void)cleanUpExecutor; - (void)endOperation; - (void)sendWillChangeNotification; - (void)sendDidChangeNotification; - (void)registerExecutor:(id)anObject; - (void)connectionDidDie:(NSNotification *)notification; - (NSString *)type; - (NSString *)source; - (NSString *)destination; - (NSArray *)files; - (NSArray *)dupfiles; - (int)ref; - (BOOL)showsWindow; - (NSWindow *)win; - (void)getWinRect: (NSRect*)rptr; @end @interface FileOpExecutor: NSObject { NSString *operation; NSString *source; NSString *destination; NSMutableArray *files; NSMutableArray *procfiles; NSDictionary *fileinfo; NSString *filename; int fcount; float progstep; int stepcount; BOOL canupdate; BOOL samename; BOOL onlyolder; NSFileManager *fm; id fileOp; } + (void)setPorts:(NSArray *)thePorts; - (void)setFileop:(NSArray *)thePorts; - (BOOL)setOperation:(NSData *)opinfo; - (BOOL)checkSameName; - (oneway void)calculateNumFiles:(NSUInteger)continueFrom; - (oneway void)performOperation; - (NSData *)processedFiles; - (void)doMove; - (void)doCopy; - (void)doLink; - (void)doRemove; - (void)doDuplicate; - (void)doRename; - (void)doNewFolder; - (void)doNewFile; - (void)doTrash; - (BOOL)removeExisting:(NSDictionary *)info; - (NSDictionary *)infoForFilename:(NSString *)name; @end @protocol FMProtocol - (BOOL)_copyPath:(NSString *)source toPath:(NSString *)destination handler:(id)handler; - (BOOL)_copyFile:(NSString *)source toFile:(NSString *)destination handler:(id)handler; - (void)_sendToHandler:(id)handler willProcessPath:(NSString *)path; - (BOOL)_proceedAccordingToHandler:(id)handler forError:(NSString *)error inPath:(NSString *)path; - (BOOL)_proceedAccordingToHandler:(id)handler forError:(NSString *)error inPath:(NSString *)path fromPath:(NSString *)fromPath toPath:(NSString *)toPath; @end gworkspace-1.1.0/Operation/FileOpInfo.m0000644000175000001440000011756414751213523017250 0ustar multixusers/* FileOpInfo.m * * Copyright (C) 2004-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "FileOpInfo.h" #import "Operation.h" #import "Functions.h" #define PROGR_STEPS (100.0) static BOOL stopped = NO; static BOOL paused = NO; static NSString *nibName = @"FileOperationWin"; @implementation FileOpInfo - (NSString *)description { return [NSString stringWithFormat: @"%@ from: %@ to: %@", type, source, destination]; } - (void)dealloc { [nc removeObserver: self]; RELEASE (operationDict); RELEASE (type); RELEASE (source); RELEASE (destination); RELEASE (files); RELEASE (procFiles); RELEASE (dupfiles); RELEASE (notifNames); RELEASE (win); DESTROY (executor); DESTROY (execconn); [super dealloc]; } + (id)operationOfType:(NSString *)tp ref:(int)rf source:(NSString *)src destination:(NSString *)dst files:(NSArray *)fls confirmation:(BOOL)conf usewindow:(BOOL)uwnd winrect:(NSRect)wrect controller:(id)cntrl { return AUTORELEASE ([[self alloc] initWithOperationType: tp ref: rf source: src destination: dst files: fls confirmation: conf usewindow: uwnd winrect: wrect controller: cntrl]); } - (id)initWithOperationType:(NSString *)tp ref:(int)rf source:(NSString *)src destination:(NSString *)dst files:(NSArray *)fls confirmation:(BOOL)conf usewindow:(BOOL)uwnd winrect:(NSRect)wrect controller:(id)cntrl { self = [super init]; if (self) { win = nil; showwin = uwnd; if (showwin) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } if (NSEqualRects(wrect, NSZeroRect) == NO) { [win setFrame: wrect display: NO]; } else if ([win setFrameUsingName: @"fopinfo"] == NO) { [win setFrame: NSMakeRect(300, 300, 282, 102) display: NO]; } [fromLabel setStringValue: NSLocalizedString(@"From:", @"")]; [toLabel setStringValue: NSLocalizedString(@"To:", @"")]; [pauseButt setTitle: NSLocalizedString(@"Pause", @"")]; [stopButt setTitle: NSLocalizedString(@"Stop", @"")]; } ref = rf; controller = cntrl; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; dnc = [NSDistributedNotificationCenter defaultCenter]; ASSIGN (type, tp); ASSIGN (source, src); ASSIGN (destination, dst); files = [[NSMutableArray arrayWithArray:fls] retain]; procFiles = [[NSMutableArray alloc] init]; dupfiles = [NSMutableArray new]; if ([type isEqual: NSWorkspaceDuplicateOperation]) { NSString *copystr = NSLocalizedString(@"_copy", @""); unsigned i; for (i = 0; i < [files count]; i++) { NSDictionary *fdict = [files objectAtIndex: i]; NSString *fname = [fdict objectForKey: @"name"]; NSString *newname = [NSString stringWithString: fname]; NSString *ext = [newname pathExtension]; NSString *base = [newname stringByDeletingPathExtension]; NSString *ntmp; NSString *destpath; NSUInteger count = 1; while (1) { if (count == 1) { ntmp = [NSString stringWithFormat: @"%@%@", base, copystr]; if ([ext length]) { ntmp = [ntmp stringByAppendingPathExtension: ext]; } } else { ntmp = [NSString stringWithFormat: @"%@%@%lu", base, copystr, (unsigned long)count]; if ([ext length]) { ntmp = [ntmp stringByAppendingPathExtension: ext]; } } destpath = [destination stringByAppendingPathComponent: ntmp]; if ([fm fileExistsAtPath: destpath] == NO) { newname = ntmp; break; } else { count++; } } [dupfiles addObject: newname]; } } operationDict = [NSMutableDictionary new]; [operationDict setObject: type forKey: @"operation"]; [operationDict setObject: [NSNumber numberWithInt: ref] forKey: @"ref"]; [operationDict setObject: source forKey: @"source"]; if (destination != nil) [operationDict setObject: destination forKey: @"destination"]; [operationDict setObject: files forKey: @"files"]; confirm = conf; executor = nil; opdone = NO; } return self; } - (void)startOperation { if (confirm) { NSString *title = nil; NSString *msg = nil; NSString *msg1 = nil; NSString *msg2 = nil; NSString *items; if ([files count] > 1) { items = [NSString stringWithFormat: @"%lu %@", (unsigned long)[files count], NSLocalizedString(@"items", @"")]; } else { items = NSLocalizedString(@"one item", @""); } if ([type isEqual: NSWorkspaceMoveOperation]) { title = NSLocalizedString(@"Move", @""); msg1 = [NSString stringWithFormat: @"%@ %@ %@: ", NSLocalizedString(@"Move", @""), items, NSLocalizedString(@"from", @"")]; msg2 = NSLocalizedString(@"\nto: ", @""); msg = [NSString stringWithFormat: @"%@%@%@%@?", msg1, source, msg2, destination]; } else if ([type isEqual: NSWorkspaceCopyOperation]) { title = NSLocalizedString(@"Copy", @""); msg1 = [NSString stringWithFormat: @"%@ %@ %@: ", NSLocalizedString(@"Copy", @""), items, NSLocalizedString(@"from", @"")]; msg2 = NSLocalizedString(@"\nto: ", @""); msg = [NSString stringWithFormat: @"%@%@%@%@?", msg1, source, msg2, destination]; } else if ([type isEqual: NSWorkspaceLinkOperation]) { title = NSLocalizedString(@"Link", @""); msg1 = [NSString stringWithFormat: @"%@ %@ %@: ", NSLocalizedString(@"Link", @""), items, NSLocalizedString(@"from", @"")]; msg2 = NSLocalizedString(@"\nto: ", @""); msg = [NSString stringWithFormat: @"%@%@%@%@?", msg1, source, msg2, destination]; } else if ([type isEqual: NSWorkspaceRecycleOperation]) { title = NSLocalizedString(@"Recycler", @""); msg1 = [NSString stringWithFormat: @"%@ %@ %@: ", NSLocalizedString(@"Move", @""), items, NSLocalizedString(@"from", @"")]; msg2 = NSLocalizedString(@"\nto the Recycler", @""); msg = [NSString stringWithFormat: @"%@%@%@?", msg1, source, msg2]; } else if ([type isEqual: @"GWorkspaceRecycleOutOperation"]) { title = NSLocalizedString(@"Recycler", @""); msg1 = [NSString stringWithFormat: @"%@ %@ %@ ", NSLocalizedString(@"Move", @""), items, NSLocalizedString(@"from the Recycler", @"")]; msg2 = NSLocalizedString(@"\nto: ", @""); msg = [NSString stringWithFormat: @"%@%@%@?", msg1, msg2, destination]; } else if ([type isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { title = NSLocalizedString(@"Recycler", @""); msg = NSLocalizedString(@"Empty the Recycler?", @""); } else if ([type isEqual: NSWorkspaceDestroyOperation]) { title = NSLocalizedString(@"Delete", @""); msg = NSLocalizedString(@"Delete the selected objects?", @""); } else if ([type isEqual: NSWorkspaceDuplicateOperation]) { title = NSLocalizedString(@"Duplicate", @""); msg = NSLocalizedString(@"Duplicate the selected objects?", @""); } if (NSRunAlertPanel(title, msg, NSLocalizedString(@"OK", @""), NSLocalizedString(@"Cancel", @""), nil) != NSAlertDefaultReturn) { [self endOperation]; return; } } [self detachOperationThread]; } - (void) threadWillExit: (NSNotification *)notification { [nc removeObserver:self name:NSThreadWillExitNotification object:nil]; [nc removeObserver: self name: NSConnectionDidDieNotification object: execconn]; executor = nil; } -(void)detachOperationThread { NSPort *port[2]; NSArray *ports; port[0] = (NSPort *)[NSPort port]; port[1] = (NSPort *)[NSPort port]; ports = [NSArray arrayWithObjects: port[1], port[0], nil]; execconn = [[NSConnection alloc] initWithReceivePort: port[0] sendPort: port[1]]; [execconn setRootObject: self]; [execconn setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: execconn]; [nc addObserver: self selector: @selector(threadWillExit:) name: NSThreadWillExitNotification object: nil]; NS_DURING { [NSThread detachNewThreadSelector: @selector(setPorts:) toTarget: [FileOpExecutor class] withObject: ports]; } NS_HANDLER { NSRunAlertPanel(nil, NSLocalizedString(@"A fatal error occurred while detaching the thread!", @""), NSLocalizedString(@"Continue", @""), nil, nil); [self endOperation]; } NS_ENDHANDLER } - (NSInteger)requestUserConfirmationWithMessage:(NSString *)message title:(NSString *)title { return NSRunAlertPanel(NSLocalizedString(title, @""), NSLocalizedString(message, @""), NSLocalizedString(@"Ok", @""), NSLocalizedString(@"Cancel", @""), nil); } - (NSInteger)showErrorAlertWithMessage:(NSString *)message { return NSRunAlertPanel(nil, NSLocalizedString(message, @""), NSLocalizedString(@"Ok", @""), nil, nil); } - (IBAction)pause:(id)sender { if (paused == NO) { [pauseButt setTitle: NSLocalizedString(@"Continue", @"")]; paused = YES; } else { [self detachOperationThread]; [pauseButt setTitle: NSLocalizedString(@"Pause", @"")]; paused = NO; } } - (IBAction)stop:(id)sender { if (paused) { [self endOperation]; } stopped = YES; } - (void)removeProcessedFiles { NSData *pFData; NSArray *pFiles; NSUInteger i; pFData = [executor processedFiles]; pFiles = [NSUnarchiver unarchiveObjectWithData: pFData]; for (i = 0; i < [pFiles count]; i++) { NSDictionary *fi; NSUInteger j; BOOL found; j = 0; found = NO; while (j < [files count] && !found) { fi = [files objectAtIndex:j]; if ([[pFiles objectAtIndex:i] isEqualTo:[fi objectForKey:@"name"]]) found = YES; else i++; } if (found) { [procFiles addObject:[files objectAtIndex:j]]; [files removeObjectAtIndex:j]; } } } - (void)showProgressWin { if ([win isVisible] == NO) { if ([type isEqual: NSWorkspaceMoveOperation]) { [win setTitle: NSLocalizedString(@"Move", @"")]; [fromLabel setStringValue: NSLocalizedString(@"From:", @"")]; [fromField setStringValue: relativePathFittingInField(fromField, source)]; [toLabel setStringValue: NSLocalizedString(@"To:", @"")]; [toField setStringValue: relativePathFittingInField(fromField, destination)]; } else if ([type isEqual: NSWorkspaceCopyOperation]) { [win setTitle: NSLocalizedString(@"Copy", @"")]; [fromLabel setStringValue: NSLocalizedString(@"From:", @"")]; [fromField setStringValue: relativePathFittingInField(fromField, source)]; [toLabel setStringValue: NSLocalizedString(@"To:", @"")]; [toField setStringValue: relativePathFittingInField(fromField, destination)]; } else if ([type isEqual: NSWorkspaceLinkOperation]) { [win setTitle: NSLocalizedString(@"Link", @"")]; [fromLabel setStringValue: NSLocalizedString(@"From:", @"")]; [fromField setStringValue: relativePathFittingInField(fromField, source)]; [toLabel setStringValue: NSLocalizedString(@"To:", @"")]; [toField setStringValue: relativePathFittingInField(fromField, destination)]; } else if ([type isEqual: NSWorkspaceDuplicateOperation]) { [win setTitle: NSLocalizedString(@"Duplicate", @"")]; [fromLabel setStringValue: NSLocalizedString(@"In:", @"")]; [fromField setStringValue: relativePathFittingInField(fromField, destination)]; [toLabel setStringValue: @""]; [toField setStringValue: @""]; } else if ([type isEqual: NSWorkspaceDestroyOperation]) { [win setTitle: NSLocalizedString(@"Destroy", @"")]; [fromLabel setStringValue: NSLocalizedString(@"In:", @"")]; [fromField setStringValue: relativePathFittingInField(fromField, destination)]; [toLabel setStringValue: @""]; [toField setStringValue: @""]; } else if ([type isEqual: NSWorkspaceRecycleOperation]) { [win setTitle: NSLocalizedString(@"Move", @"")]; [fromLabel setStringValue: NSLocalizedString(@"From:", @"")]; [fromField setStringValue: relativePathFittingInField(fromField, source)]; [toLabel setStringValue: NSLocalizedString(@"To:", @"")]; [toField setStringValue: NSLocalizedString(@"the Recycler", @"")]; } else if ([type isEqual: @"GWorkspaceRecycleOutOperation"]) { [win setTitle: NSLocalizedString(@"Move", @"")]; [fromLabel setStringValue: NSLocalizedString(@"From:", @"")]; [fromField setStringValue: NSLocalizedString(@"the Recycler", @"")]; [toLabel setStringValue: NSLocalizedString(@"To:", @"")]; [toField setStringValue: relativePathFittingInField(fromField, destination)]; } else if ([type isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { [win setTitle: NSLocalizedString(@"Destroy", @"")]; [fromLabel setStringValue: NSLocalizedString(@"In:", @"")]; [fromField setStringValue: NSLocalizedString(@"the Recycler", @"")]; [toLabel setStringValue: @""]; [toField setStringValue: @""]; } [progInd setIndeterminate: YES]; [progInd startAnimation: self]; } [win orderFront: nil]; showwin = YES; } - (void)setNumFiles:(int)n { [progInd stopAnimation: self]; [progInd setIndeterminate: NO]; [progInd setMinValue: 0.0]; [progInd setMaxValue: n]; [progInd setDoubleValue: 0.0]; } - (void)setProgIndicatorValue:(int)n { [progInd setDoubleValue: n]; } - (void)cleanUpExecutor { if (executor) { [nc removeObserver: self name: NSConnectionDidDieNotification object: execconn]; [execconn setRootObject:nil]; DESTROY (executor); DESTROY (execconn); } } - (void)endOperation { if (showwin) { if ([progInd isIndeterminate]) [progInd stopAnimation:self]; [win saveFrameUsingName: @"fopinfo"]; [win close]; } [controller endOfFileOperation: self]; [execconn setRootObject:nil]; } - (void)sendWillChangeNotification { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSUInteger i; notifNames = [NSMutableArray new]; for (i = 0; i < [files count]; i++) { NSDictionary *fdict = [files objectAtIndex: i]; NSString *name = [fdict objectForKey: @"name"]; [notifNames addObject: name]; } [dict setObject: type forKey: @"operation"]; [dict setObject: source forKey: @"source"]; if (destination != nil) [dict setObject: destination forKey: @"destination"]; [dict setObject: notifNames forKey: @"files"]; [nc postNotificationName: @"GWFileSystemWillChangeNotification" object: dict]; [dnc postNotificationName: @"GWFileSystemWillChangeNotification" object: nil userInfo: dict]; RELEASE (arp); } - (void)sendDidChangeNotification { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *notifObj = [NSMutableDictionary dictionary]; [notifObj setObject: type forKey: @"operation"]; [notifObj setObject: source forKey: @"source"]; if (destination != nil) [notifObj setObject: destination forKey: @"destination"]; if (executor) { NSData *data = [executor processedFiles]; NSArray *processedFiles = [NSUnarchiver unarchiveObjectWithData: data]; [notifObj setObject: processedFiles forKey: @"files"]; [notifObj setObject: notifNames forKey: @"origfiles"]; } else { [notifObj setObject: notifNames forKey: @"files"]; [notifObj setObject: notifNames forKey: @"origfiles"]; } opdone = YES; [nc postNotificationName: @"GWFileSystemDidChangeNotification" object: notifObj]; [dnc postNotificationName: @"GWFileSystemDidChangeNotification" object: nil userInfo: notifObj]; RELEASE (arp); } - (void)registerExecutor:(id)anObject { NSData *opinfo = [NSArchiver archivedDataWithRootObject: operationDict]; BOOL samename; [anObject setProtocolForProxy: @protocol(FileOpExecutorProtocol)]; executor = (id )[anObject retain]; [executor setOperation: opinfo]; if ([procFiles count] == 0) { samename = [executor checkSameName]; if (samename) { NSString *msg = nil; NSString *title = nil; int result; onlyOlder = NO; if ([type isEqual: NSWorkspaceMoveOperation]) { msg = @"Some items have the same name;\ndo you want to replace them?"; title = @"Move"; } else if ([type isEqual: NSWorkspaceCopyOperation]) { msg = @"Some items have the same name;\ndo you want to replace them?"; title = @"Copy"; } else if ([type isEqual: NSWorkspaceLinkOperation]) { msg = @"Some items have the same name;\ndo you want to replace them?"; title = @"Link"; } else if ([type isEqual: NSWorkspaceRecycleOperation]) { msg = @"Some items have the same name;\ndo you want to replace them?"; title = @"Recycle"; } else if ([type isEqual: @"GWorkspaceRecycleOutOperation"]) { msg = @"Some items have the same name;\ndo you want to replace them?"; title = @"Recycle"; } result = NSRunAlertPanel(NSLocalizedString(title, @""), NSLocalizedString(msg, @""), NSLocalizedString(@"OK", @""), NSLocalizedString(@"Cancel", @""), NSLocalizedString(@"Only older", @"")); if (result == NSAlertAlternateReturn) { [controller endOfFileOperation: self]; return; } else if (result == NSAlertOtherReturn) { onlyOlder = YES; } } } [executor setOnlyOlder:onlyOlder]; if (showwin) [self showProgressWin]; [self sendWillChangeNotification]; stopped = NO; paused = NO; [executor calculateNumFiles:[procFiles count]]; } - (BOOL)connection:(NSConnection*)ancestor shouldMakeNewConnection:(NSConnection*)newConn { if (ancestor == execconn) { [newConn setDelegate: self]; [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: newConn]; return YES; } return NO; } - (void)connectionDidDie:(NSNotification *)notification { [nc removeObserver: self name: NSConnectionDidDieNotification object: [notification object]]; if (opdone == NO) { NSRunAlertPanel(nil, NSLocalizedString(@"executor connection died!", @""), NSLocalizedString(@"Continue", @""), nil, nil); [self sendDidChangeNotification]; [self endOperation]; } } - (NSString *)type { return type; } - (NSString *)source { return source; } - (NSString *)destination { return destination; } - (NSArray *)files { return files; } - (NSArray *)dupfiles { return dupfiles; } - (int)ref { return ref; } - (BOOL)showsWindow { return showwin; } - (NSWindow *)win { return win; } - (void) getWinRect: (NSRect*)rptr { *rptr = NSZeroRect; if (win && [win isVisible]) { *rptr = [win frame]; } } @end @implementation FileOpExecutor + (void)setPorts:(NSArray *)thePorts { CREATE_AUTORELEASE_POOL(pool); NSPort *port[2]; NSConnection *conn; FileOpExecutor *executor; port[0] = [thePorts objectAtIndex: 0]; port[1] = [thePorts objectAtIndex: 1]; conn = [NSConnection connectionWithReceivePort: (NSPort *)port[0] sendPort: (NSPort *)port[1]]; executor = [[self alloc] init]; [executor setFileop: thePorts]; [(id)[conn rootProxy] registerExecutor: executor]; RELEASE (executor); RELEASE (pool); } - (void)dealloc { RELEASE (operation); RELEASE (source); RELEASE (destination); RELEASE (files); RELEASE (procfiles); [super dealloc]; } - (id)init { self = [super init]; if (self) { fm = [NSFileManager defaultManager]; samename = NO; onlyolder = NO; } return self; } - (void)setFileop:(NSArray *)thePorts { NSPort *port[2]; NSConnection *conn; id anObject; port[0] = [thePorts objectAtIndex: 0]; port[1] = [thePorts objectAtIndex: 1]; conn = [NSConnection connectionWithReceivePort: (NSPort *)port[0] sendPort: (NSPort *)port[1]]; anObject = (id)[conn rootProxy]; [anObject setProtocolForProxy: @protocol(FileOpInfoProtocol)]; fileOp = (id )anObject; } - (BOOL)setOperation:(NSData *)opinfo { NSDictionary *opDict = [NSUnarchiver unarchiveObjectWithData: opinfo]; id dictEntry; dictEntry = [opDict objectForKey: @"operation"]; if (dictEntry) { ASSIGN (operation, dictEntry); } dictEntry = [opDict objectForKey: @"source"]; if (dictEntry) { ASSIGN (source, dictEntry); } dictEntry = [opDict objectForKey: @"destination"]; if (dictEntry) { ASSIGN (destination, dictEntry); } files = [NSMutableArray new]; dictEntry = [opDict objectForKey: @"files"]; if (dictEntry) { [files addObjectsFromArray: dictEntry]; } procfiles = [NSMutableArray new]; return YES; } - (BOOL)checkSameName { NSArray *dirContents; NSUInteger i; samename = NO; if (([operation isEqual: @"GWorkspaceRenameOperation"]) || ([operation isEqual: @"GWorkspaceCreateDirOperation"]) || ([operation isEqual: @"GWorkspaceCreateFileOperation"])) { /* already checked by GWorkspace */ return NO; } if (destination && [files count]) { dirContents = [fm directoryContentsAtPath: destination]; for (i = 0; i < [files count]; i++) { NSDictionary *dict = [files objectAtIndex: i]; NSString *name = [dict objectForKey: @"name"]; if ([dirContents containsObject: name]) { samename = YES; break; } } } if (samename) { if (([operation isEqual: NSWorkspaceMoveOperation]) || ([operation isEqual: NSWorkspaceCopyOperation]) || ([operation isEqual: NSWorkspaceLinkOperation]) || ([operation isEqual: @"GWorkspaceRecycleOutOperation"])) { return YES; } else if (([operation isEqual: NSWorkspaceDestroyOperation]) || ([operation isEqual: NSWorkspaceDuplicateOperation]) || ([operation isEqual: NSWorkspaceRecycleOperation]) || ([operation isEqual: @"GWorkspaceEmptyRecyclerOperation"])) { return NO; } } return NO; } - (void)setOnlyOlder:(BOOL)flag { onlyolder = flag; } - (oneway void)calculateNumFiles:(NSUInteger)continueFrom { NSUInteger i; NSUInteger fnum = 0; if (continueFrom == 0) { for (i = 0; i < [files count]; i++) { CREATE_AUTORELEASE_POOL (arp); NSDictionary *dict = [files objectAtIndex: i]; NSString *name = [dict objectForKey: @"name"]; NSString *path = [source stringByAppendingPathComponent: name]; BOOL isDir = NO; [fm fileExistsAtPath: path isDirectory: &isDir]; if (isDir) { NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath: path]; while (1) { CREATE_AUTORELEASE_POOL (arp2); NSString *dirEntry = [enumerator nextObject]; if (dirEntry) { if (stopped) { RELEASE (arp2); break; } fnum++; } else { RELEASE (arp2); break; } RELEASE (arp2); } } else { fnum++; } if (stopped) { RELEASE (arp); break; } RELEASE (arp); } if (stopped) { [fileOp endOperation]; [fileOp cleanUpExecutor]; } fcount = 0; stepcount = 0; if (fnum < PROGR_STEPS) { progstep = 1.0; } else { progstep = fnum / PROGR_STEPS; } [fileOp setNumFiles: fnum]; } else { fcount = continueFrom; stepcount = continueFrom; } [self performOperation]; } - (oneway void)performOperation { canupdate = YES; if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { [self doMove]; } else if ([operation isEqual: NSWorkspaceCopyOperation]) { [self doCopy]; } else if ([operation isEqual: NSWorkspaceLinkOperation]) { [self doLink]; } else if ([operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { [self doRemove]; } else if ([operation isEqual: NSWorkspaceDuplicateOperation]) { [self doDuplicate]; } else if ([operation isEqual: NSWorkspaceRecycleOperation]) { [self doTrash]; } else if ([operation isEqual: @"GWorkspaceRenameOperation"]) { [self doRename]; } else if ([operation isEqual: @"GWorkspaceCreateDirOperation"]) { [self doNewFolder]; } else if ([operation isEqual: @"GWorkspaceCreateFileOperation"]) { [self doNewFile]; } } - (NSData *)processedFiles { return [NSArchiver archivedDataWithRootObject: procfiles]; } #define CHECK_DONE \ if (([files count] == 0) || stopped || paused) break #define GET_FILENAME \ fileinfo = [files objectAtIndex: 0]; \ RETAIN (fileinfo); \ filename = [fileinfo objectForKey: @"name"]; - (void)doMove { while (1) { CHECK_DONE; GET_FILENAME; if ((samename == NO) || (samename && [self removeExisting: fileinfo])) { NSString *src = [source stringByAppendingPathComponent: filename]; NSString *dst = [destination stringByAppendingPathComponent: filename]; if ([fm movePath: src toPath: dst handler: self]) { [procfiles addObject: filename]; } else { /* check for broken symlink */ NSDictionary *attributes = [fm fileAttributesAtPath: src traverseLink: NO]; if (attributes && ([attributes fileType] == NSFileTypeSymbolicLink) && ([fm fileExistsAtPath: src] == NO)) { if ([fm copyPath: src toPath: dst handler: self] && [fm removeFileAtPath: src handler: self]) { [procfiles addObject: filename]; } } } } [files removeObject: fileinfo]; RELEASE (fileinfo); } [fileOp sendDidChangeNotification]; if (([files count] == 0) || stopped) { [fileOp endOperation]; } else if (paused) { [fileOp removeProcessedFiles]; } [fileOp cleanUpExecutor]; } - (void)doCopy { while (1) { CHECK_DONE; GET_FILENAME; if ((samename == NO) || (samename && [self removeExisting: fileinfo])) { if ([fm copyPath: [source stringByAppendingPathComponent: filename] toPath: [destination stringByAppendingPathComponent: filename] handler: self]) { [procfiles addObject: filename]; } } [files removeObject: fileinfo]; RELEASE (fileinfo); } [fileOp sendDidChangeNotification]; if (([files count] == 0) || stopped) { [fileOp endOperation]; } else if (paused) { [fileOp removeProcessedFiles]; } [fileOp cleanUpExecutor]; } - (void)doLink { while (1) { CHECK_DONE; GET_FILENAME; if ((samename == NO) || (samename && [self removeExisting: fileinfo])) { NSString *dst = [destination stringByAppendingPathComponent: filename]; NSString *src = [source stringByAppendingPathComponent: filename]; if ([fm createSymbolicLinkAtPath: dst pathContent: src]) { [procfiles addObject: filename]; } } [files removeObject: fileinfo]; RELEASE (fileinfo); } [fileOp sendDidChangeNotification]; if (([files count] == 0) || stopped) { [fileOp endOperation]; } else if (paused) { [fileOp removeProcessedFiles]; } [fileOp cleanUpExecutor]; } - (void)doRemove { while (1) { CHECK_DONE; GET_FILENAME; if ([fm removeFileAtPath: [source stringByAppendingPathComponent: filename] handler: self]) { [procfiles addObject: filename]; } [files removeObject: fileinfo]; RELEASE (fileinfo); } [fileOp sendDidChangeNotification]; if (([files count] == 0) || stopped) { [fileOp endOperation]; } else if (paused) { [fileOp removeProcessedFiles]; } [fileOp cleanUpExecutor]; } - (void)doDuplicate { NSString *copystr = NSLocalizedString(@"_copy", @""); NSString *base; NSString *ext; NSString *destpath; NSString *newname; NSString *ntmp; while (1) { int count = 1; CHECK_DONE; GET_FILENAME; newname = [NSString stringWithString: filename]; ext = [newname pathExtension]; base = [newname stringByDeletingPathExtension]; while (1) { if (count == 1) { ntmp = [NSString stringWithFormat: @"%@%@", base, copystr]; if ([ext length]) { ntmp = [ntmp stringByAppendingPathExtension: ext]; } } else { ntmp = [NSString stringWithFormat: @"%@%@%i", base, copystr, count]; if ([ext length]) { ntmp = [ntmp stringByAppendingPathExtension: ext]; } } destpath = [destination stringByAppendingPathComponent: ntmp]; if ([fm fileExistsAtPath: destpath] == NO) { newname = ntmp; break; } else { count++; } } if ([fm copyPath: [destination stringByAppendingPathComponent: filename] toPath: destpath handler: self]) { [procfiles addObject: newname]; } [files removeObject: fileinfo]; RELEASE (fileinfo); } [fileOp sendDidChangeNotification]; if (([files count] == 0) || stopped) { [fileOp endOperation]; } else if (paused) { [fileOp removeProcessedFiles]; } [fileOp cleanUpExecutor]; } - (void)doRename { GET_FILENAME; if ([fm movePath: source toPath: destination handler: self]) { [procfiles addObject: filename]; } else { /* check for broken symlink */ NSDictionary *attributes = [fm fileAttributesAtPath: source traverseLink: NO]; if (attributes && ([attributes fileType] == NSFileTypeSymbolicLink) && ([fm fileExistsAtPath: source] == NO)) { if ([fm copyPath: source toPath: destination handler: self] && [fm removeFileAtPath: source handler: self]) { [procfiles addObject: filename]; } } } [files removeObject: fileinfo]; RELEASE (fileinfo); [fileOp sendDidChangeNotification]; [fileOp endOperation]; [fileOp cleanUpExecutor]; } - (void)doNewFolder { GET_FILENAME; if ([fm createDirectoryAtPath: [destination stringByAppendingPathComponent: filename] attributes: nil]) { [procfiles addObject: filename]; } [files removeObject: fileinfo]; RELEASE (fileinfo); [fileOp sendDidChangeNotification]; [fileOp endOperation]; [fileOp cleanUpExecutor]; } - (void)doNewFile { GET_FILENAME; if ([fm createFileAtPath: [destination stringByAppendingPathComponent: filename] contents: nil attributes: nil]) { [procfiles addObject: filename]; } [files removeObject: fileinfo]; RELEASE (fileinfo); [fileOp sendDidChangeNotification]; [fileOp endOperation]; [fileOp cleanUpExecutor]; } - (void)doTrash { NSString *copystr = NSLocalizedString(@"_copy", @""); NSString *srcpath; NSString *destpath; NSString *newname; NSString *ntmp; while (1) { CHECK_DONE; GET_FILENAME; newname = [NSString stringWithString: filename]; srcpath = [source stringByAppendingPathComponent: filename]; destpath = [destination stringByAppendingPathComponent: newname]; if ([fm fileExistsAtPath: destpath]) { NSString *ext = [filename pathExtension]; NSString *base = [filename stringByDeletingPathExtension]; NSUInteger count = 1; while (1) { if (count == 1) { ntmp = [NSString stringWithFormat: @"%@%@", base, copystr]; if ([ext length]) { ntmp = [ntmp stringByAppendingPathExtension: ext]; } } else { ntmp = [NSString stringWithFormat: @"%@%@%lu", base, copystr, (unsigned long)count]; if ([ext length]) { ntmp = [ntmp stringByAppendingPathExtension: ext]; } } destpath = [destination stringByAppendingPathComponent: ntmp]; if ([fm fileExistsAtPath: destpath] == NO) { newname = ntmp; break; } else { count++; } } } if ([fm movePath: srcpath toPath: destpath handler: self]) { [procfiles addObject: newname]; } else { /* check for broken symlink */ NSDictionary *attributes = [fm fileAttributesAtPath: srcpath traverseLink: NO]; if (attributes && ([attributes fileType] == NSFileTypeSymbolicLink) && ([fm fileExistsAtPath: srcpath] == NO)) { if ([fm copyPath: srcpath toPath: destpath handler: self] && [fm removeFileAtPath: srcpath handler: self]) { [procfiles addObject: newname]; } } } [files removeObject: fileinfo]; RELEASE (fileinfo); } [fileOp sendDidChangeNotification]; if (([files count] == 0) || stopped) { [fileOp endOperation]; } else if (paused) { [fileOp removeProcessedFiles]; } [fileOp cleanUpExecutor]; } - (BOOL)removeExisting:(NSDictionary *)info { NSString *fname = [info objectForKey: @"name"]; NSString *destpath = [destination stringByAppendingPathComponent: fname]; BOOL isdir; canupdate = NO; if ([fm fileExistsAtPath: destpath isDirectory: &isdir]) { if (onlyolder) { NSDictionary *attributes = [fm fileAttributesAtPath: destpath traverseLink: NO]; NSDate *dstdate = [attributes objectForKey: NSFileModificationDate]; NSDate *srcdate = [info objectForKey: @"date"]; if ([srcdate isEqual: dstdate] == NO) { if ([[srcdate earlierDate: dstdate] isEqual: srcdate]) { canupdate = YES; return NO; } } else { canupdate = YES; return NO; } } [fm removeFileAtPath: destpath handler: self]; } canupdate = YES; return YES; } - (NSDictionary *)infoForFilename:(NSString *)name { int i; for (i = 0; i < [files count]; i++) { NSDictionary *info = [files objectAtIndex: i]; if ([[info objectForKey: @"name"] isEqual: name]) { return info; } } return nil; } - (BOOL)fileManager:(NSFileManager *)manager shouldProceedAfterError:(NSDictionary *)errorDict { NSString *path; NSString *error; NSString *msg; int result; error = [errorDict objectForKey: @"Error"]; if ([error hasPrefix: @"Unable to change NSFileOwnerAccountID to to"] || [error hasPrefix: @"Unable to change NSFileOwnerAccountName to"] || [error hasPrefix: @"Unable to change NSFileGroupOwnerAccountID to"] || [error hasPrefix: @"Unable to change NSFileGroupOwnerAccountName to"] || [error hasPrefix: @"Unable to change NSFilePosixPermissions to"] || [error hasPrefix: @"Unable to change NSFileModificationDate to"]) { return YES; } path = [NSString stringWithString: [errorDict objectForKey: @"NSFilePath"]]; msg = [NSString stringWithFormat: @"%@ %@\n%@ %@\n", NSLocalizedString(@"File operation error:", @""), error, NSLocalizedString(@"with file:", @""), path]; result = [fileOp requestUserConfirmationWithMessage: msg title: @"Error"]; if (result != NSAlertDefaultReturn) { [fileOp endOperation]; [fileOp cleanUpExecutor]; } else { BOOL found = NO; while (1) { NSDictionary *info = [self infoForFilename: [path lastPathComponent]]; if ([path isEqual: source]) break; if (info) { [files removeObject: info]; found = YES; break; } path = [path stringByDeletingLastPathComponent]; } if ([files count]) { if (found) { [self performOperation]; } else { [fileOp showErrorAlertWithMessage: @"File Operation Error!"]; [fileOp endOperation]; [fileOp cleanUpExecutor]; } } else { [fileOp endOperation]; [fileOp cleanUpExecutor]; } } return YES; } - (void)fileManager:(NSFileManager *)manager willProcessPath:(NSString *)path { if (canupdate) { fcount++; stepcount++; if (stepcount >= progstep) { stepcount = 0; [fileOp setProgIndicatorValue: fcount]; } } if (stopped) { [fileOp endOperation]; [fileOp cleanUpExecutor]; } } @end gworkspace-1.1.0/Operation/Functions.h0000644000175000001440000000205514751213523017205 0ustar multixusers/* Functions.h * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import BOOL isSubpath(NSString *p1, NSString *p2); NSString *relativePathFittingInField(id field, NSString *fullPath); gworkspace-1.1.0/Operation/Functions.m0000644000175000001440000000514214751213523017212 0ustar multixusers/* Functions.m * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import "Functions.h" static NSString *fix_path(NSString *s, const char *c) { static NSFileManager *mgr = nil; const char *ptr = c; unsigned len; if (mgr == nil) { mgr = [NSFileManager defaultManager]; RETAIN (mgr); } if (ptr == 0) { if (s == nil) { return nil; } ptr = [s cString]; } len = strlen(ptr); return [mgr stringWithFileSystemRepresentation: ptr length: len]; } BOOL isSubpath(NSString *p1, NSString *p2) { int l1 = [p1 length]; int l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqualToString: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqualToString: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } NSString *relativePathFittingInField(id field, NSString *fullPath) { NSArray *pathcomps; float cntwidth; NSFont *font; NSString *path; NSString *relpath = nil; int i; cntwidth = [field bounds].size.width; font = [field font]; if ([font widthOfString: fullPath] < cntwidth) { return fullPath; } cntwidth = cntwidth - [font widthOfString: fix_path(@"../", 0)]; pathcomps = [fullPath pathComponents]; i = [pathcomps count] - 1; path = [NSString stringWithString: [pathcomps objectAtIndex: i]]; while (i > 0) { i--; if ([font widthOfString: path] < cntwidth) { relpath = [NSString stringWithString: path]; } else { break; } path = [NSString stringWithFormat: @"%@%@%@", [pathcomps objectAtIndex: i], fix_path(@"/", 0), path]; } relpath = [NSString stringWithFormat: @"%@%@", fix_path(@"../", 0), relpath]; return relpath; } gworkspace-1.1.0/Operation/GNUmakefile0000644000175000001440000000161213251572120017127 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make FRAMEWORK_NAME = Operation include Version Operation_PRINCIPAL_CLASS = Operation Operation_HAS_RESOURCE_BUNDLE = yes Operation_RESOURCE_FILES = \ Resources/Images/* \ Resources/English.lproj Operation_LANGUAGES = Resources/English # The Objective-C source files to be compiled Operation_OBJC_FILES = \ Operation.m \ FileOpInfo.m \ Functions.m Operation_HEADER_FILES = \ Operation.h LIBRARIES_DEPEND_UPON += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin) ifeq ($(OBJC_RUNTIME_LIB), gnu) SHARED_LD_POSTFLAGS += -lgnustep-base -lgnustep-gui endif endif -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/framework.make -include GNUmakefile.postamble gworkspace-1.1.0/Operation/GNUmakefile.postamble0000644000175000001440000000143513251572120021117 0ustar multixusers # Things to do before compiling # before-all:: # $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Preferences # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Preferences # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # rm -rf autom4te*.cache # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Operation/GNUmakefile.preamble0000644000175000001440000000110213214346550020714 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search # ADDITIONAL_INCLUDE_DIRS += -I../ -IPreferences # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Operation/Operation.h0000644000175000001440000000372214751213523017177 0ustar multixusers/* Operation.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class FileOpInfo; enum { MOVE, RENAME, DESTROY, COPY, CREATE }; @interface Operation : NSObject { NSMutableArray *fileOperations; NSUInteger fopRef; BOOL filenamesCut; NSFileManager *fm; NSNotificationCenter *nc; } - (void)setFilenamesCut:(BOOL)value; - (BOOL)filenamesWasCut; - (void)performOperation:(NSDictionary *)opdict; - (BOOL)isLockedAction:(int)action onPath:(NSString *)path; - (BOOL)isLockedByOperation:(FileOpInfo *)opinfo action:(int)action onPath:(NSString *)path; - (void)endOfFileOperation:(FileOpInfo *)op; - (NSUInteger)fileOpRef; - (FileOpInfo *)fileOpWithRef:(NSUInteger)ref; - (NSRect)rectForFileOpWindow; - (BOOL)verifyFileAtPath:(NSString *)path forOperation:(NSString *)operation; - (BOOL)ascendentOfPath:(NSString *)path inPaths:(NSArray *)paths; - (BOOL)descendentOfPath:(NSString *)path inPaths:(NSArray *)paths; - (BOOL)operationsPending; @end gworkspace-1.1.0/Operation/Operation.m0000644000175000001440000003710614751213523017207 0ustar multixusers/* Operation.m * * Copyright (C) 2004-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "Operation.h" #import "FileOpInfo.h" #import "Functions.h" @implementation Operation - (void)dealloc { RELEASE (fileOperations); [super dealloc]; } - (id)init { self = [super init]; if (self) { fileOperations = [NSMutableArray new]; fopRef = 0; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; } return self; } - (void)setFilenamesCut:(BOOL)value { filenamesCut = value; } - (BOOL)filenamesWasCut { return filenamesCut; } - (void)performOperation:(NSDictionary *)opdict { NSString *operation = [opdict objectForKey: @"operation"]; NSString *source = [opdict objectForKey: @"source"]; NSString *destination = [opdict objectForKey: @"destination"]; NSArray *files = [opdict objectForKey: @"files"]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *confirmString = [operation stringByAppendingString: @"Confirm"]; BOOL confirm = !([defaults boolForKey: confirmString]); BOOL usewin = ![defaults boolForKey: @"fopstatusnotshown"]; NSString *opbase; NSArray *opfiles; NSMutableArray *oppaths; NSMutableArray *filesInfo; int action; FileOpInfo *info; NSUInteger i; if (files == nil) { files = [NSArray arrayWithObject: @""]; } opfiles = files; if ([operation isEqual: @"GWorkspaceRenameOperation"] || [operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"]) { confirm = NO; usewin = NO; } if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { opbase = source; } else { opbase = destination; } if ([operation isEqual: @"GWorkspaceRenameOperation"]) { opfiles = [NSArray arrayWithObject: [source lastPathComponent]]; opbase = [source stringByDeletingLastPathComponent]; } action = MOVE; if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"]) { action = MOVE; } else if ([operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { action = DESTROY; } else if ([operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceLinkOperation] || [operation isEqual: NSWorkspaceDuplicateOperation]) { action = COPY; } else if ([operation isEqual: @"GWorkspaceRenameOperation"]) { action = RENAME; } else if ([operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"]) { action = CREATE; } if ([self verifyFileAtPath: opbase forOperation: nil] == NO) { return; } oppaths = [NSMutableArray array]; filesInfo = [NSMutableArray array]; for (i = 0; i < [opfiles count]; i++) { NSString *opfile = [opfiles objectAtIndex: i]; NSString *oppath = [opbase stringByAppendingPathComponent: opfile]; if ([self verifyFileAtPath: oppath forOperation: operation]) { NSDictionary *attributes = [fm fileAttributesAtPath: oppath traverseLink: NO]; NSData *date = [attributes objectForKey: NSFileModificationDate]; NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: opfile, @"name", date, @"date", nil]; [oppaths addObject: oppath]; [filesInfo addObject: dict]; } else { return; } } for (i = 0; i < [oppaths count]; i++) { NSString *oppath = [oppaths objectAtIndex: i]; if ([self isLockedAction: action onPath: oppath]) { NSRunAlertPanel(nil, NSLocalizedString(@"Some files are in use by another operation!", @""), NSLocalizedString(@"OK", @""), nil, nil); return; } } info = [FileOpInfo operationOfType: operation ref: [self fileOpRef] source: source destination: destination files: filesInfo confirmation: confirm usewindow: usewin winrect: [self rectForFileOpWindow] controller: self]; [fileOperations insertObject: info atIndex: [fileOperations count]]; [info startOperation]; } - (BOOL)isLockedAction:(int)action onPath:(NSString *)path { NSUInteger i; for (i = 0; i < [fileOperations count]; i++) { FileOpInfo *info = [fileOperations objectAtIndex: i]; if ([self isLockedByOperation: info action: action onPath: path]) { return YES; } } return NO; } - (BOOL)isLockedByOperation:(FileOpInfo *)opinfo action:(int)action onPath:(NSString *)path { NSString *optype = [opinfo type]; NSString *opsrc = [opinfo source]; NSString *opdst = [opinfo destination]; NSArray *opfiles = [opinfo files]; NSMutableArray *opsrcpaths = [NSMutableArray array]; NSMutableArray *opdstpaths = [NSMutableArray array]; NSUInteger i; if ([optype isEqual: NSWorkspaceDuplicateOperation] == NO) { for (i = 0; i < [opfiles count]; i++) { NSDictionary *fdict = [opfiles objectAtIndex: i]; NSString *opfile = [fdict objectForKey: @"name"]; [opsrcpaths addObject: [opsrc stringByAppendingPathComponent: opfile]]; [opdstpaths addObject: [opdst stringByAppendingPathComponent: opfile]]; } } else { NSArray *dupfiles = [opinfo dupfiles]; for (i = 0; i < [opfiles count]; i++) { NSDictionary *fdict = [opfiles objectAtIndex: i]; NSString *opfile = [fdict objectForKey: @"name"]; [opsrcpaths addObject: [opsrc stringByAppendingPathComponent: opfile]]; } for (i = 0; i < [dupfiles count]; i++) { NSString *dupfile = [dupfiles objectAtIndex: i]; [opdstpaths addObject: [opdst stringByAppendingPathComponent: dupfile]]; } } if (action == CREATE) { path = [path stringByDeletingLastPathComponent]; } if ([optype isEqual: NSWorkspaceMoveOperation] || [optype isEqual: NSWorkspaceRecycleOperation] || [optype isEqual: @"GWorkspaceRecycleOutOperation"]) { // // source // if ([opsrcpaths containsObject: path] || [self descendentOfPath: path inPaths: opsrcpaths] || [self ascendentOfPath: path inPaths: opsrcpaths]) { return YES; } // // destination // if ((action == MOVE) || (action == RENAME) || (action == DESTROY) || (action == CREATE)) { if ([self descendentOfPath: path inPaths: opdstpaths]) { return YES; } } if ([opdstpaths containsObject: path]) { return YES; } if ([self ascendentOfPath: path inPaths: opdstpaths]) { return YES; } } if ([optype isEqual: NSWorkspaceCopyOperation] || [optype isEqual: NSWorkspaceLinkOperation] || [optype isEqual: NSWorkspaceDuplicateOperation]) { // // source // if ((action == MOVE) || (action == RENAME) || (action == DESTROY) || (action == CREATE)) { if ([opsrcpaths containsObject: path] || [self descendentOfPath: path inPaths: opsrcpaths] || [self ascendentOfPath: path inPaths: opsrcpaths]) { return YES; } } // // destination // if ((action == MOVE) || (action == RENAME) || (action == DESTROY) || (action == CREATE)) { if ([self descendentOfPath: path inPaths: opdstpaths]) { return YES; } } if ([opdstpaths containsObject: path]) { return YES; } if ([self ascendentOfPath: path inPaths: opdstpaths]) { return YES; } } if ([optype isEqual: NSWorkspaceDestroyOperation] || [optype isEqual: @"GWorkspaceEmptyRecyclerOperation"]) { // // destination // if ([opdstpaths containsObject: path] || [self descendentOfPath: path inPaths: opdstpaths] || [self ascendentOfPath: path inPaths: opdstpaths]) { return YES; } } return NO; } - (void)endOfFileOperation:(FileOpInfo *)op { [fileOperations removeObject: op]; } - (FileOpInfo *)fileOpWithRef:(NSUInteger)ref { NSUInteger i; for (i = 0; i < [fileOperations count]; i++) { FileOpInfo *op = [fileOperations objectAtIndex: i]; if ([op ref] == ref) { return op; } } return nil; } - (NSUInteger)fileOpRef { return fopRef++; } - (NSRect)rectForFileOpWindow { NSRect scr = [[NSScreen mainScreen] visibleFrame]; NSRect wrect = NSZeroRect; NSUInteger i; #define WMARGIN 40 #define WSHIFT 40 if ([fileOperations count] == 0) return wrect; scr.origin.x += WMARGIN; scr.origin.y += WMARGIN; scr.size.width -= (WMARGIN * 2); scr.size.height -= (WMARGIN * 2); i = [fileOperations count]; while (i > 0 && NSEqualRects(wrect, NSZeroRect) == YES) { FileOpInfo *op = [fileOperations objectAtIndex: i-1]; if ([op win]) { NSRect wr; [op getWinRect: &wr]; if (NSEqualRects(wr, NSZeroRect) == NO) { wrect = NSMakeRect(wr.origin.x + WSHIFT, wr.origin.y - wr.size.height - WSHIFT, wr.size.width, wr.size.height); if (NSContainsRect(scr, wrect) == NO) { wrect = NSMakeRect(scr.origin.x, scr.size.height - wr.size.height, wr.size.width, wr.size.height); } } } i--; } return wrect; } - (BOOL)verifyFileAtPath:(NSString *)path forOperation:(NSString *)operation { NSString *chpath = path; BOOL valid; BOOL isDir; if (operation && ([operation isEqual: @"GWorkspaceCreateDirOperation"] || [operation isEqual: @"GWorkspaceCreateFileOperation"])) { chpath = [path stringByDeletingLastPathComponent]; } valid = [fm fileExistsAtPath: chpath isDirectory:&isDir]; if (valid == NO) { /* case of broken symlink */ valid = ([fm fileAttributesAtPath: chpath traverseLink: NO] != nil); } if (valid == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@": no such file or directory!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSMutableDictionary *notifObj = [NSMutableDictionary dictionaryWithCapacity: 1]; NSString *basePath = [chpath stringByDeletingLastPathComponent]; NSRunAlertPanel(err, [NSString stringWithFormat: @"%@%@", chpath, msg], buttstr, nil, nil); [notifObj setObject: NSWorkspaceDestroyOperation forKey: @"operation"]; [notifObj setObject: basePath forKey: @"source"]; [notifObj setObject: basePath forKey: @"destination"]; [notifObj setObject: [NSArray arrayWithObject: [chpath lastPathComponent]] forKey: @"files"]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWFileSystemWillChangeNotification" object: nil userInfo: notifObj]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GWFileSystemDidChangeNotification" object: nil userInfo: notifObj]; return NO; } else { if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceRecycleOperation] || [operation isEqual: NSWorkspaceDestroyOperation] || [operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceRenameOperation"]) { if (isDir) { NSArray *specialPathArray; NSString *fullPath; BOOL protected = NO; NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@": Directory Protected!", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); fullPath = [path stringByExpandingTildeInPath]; specialPathArray = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask, YES); if ([specialPathArray indexOfObject:fullPath] != NSNotFound) protected = YES; if (!protected) { specialPathArray = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSAllDomainsMask, YES); if ([specialPathArray indexOfObject:fullPath] != NSNotFound) protected = YES; } if (!protected) { specialPathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSAllDomainsMask, YES); if ([specialPathArray indexOfObject:fullPath] != NSNotFound) protected = YES; } if (!protected) { specialPathArray = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSAllDomainsMask, YES); if ([specialPathArray indexOfObject:fullPath] != NSNotFound) protected = YES; } if (protected) { NSRunAlertPanel(err, [NSString stringWithFormat: @"%@%@", path, msg], buttstr, nil, nil); return NO; } } } } return YES; } - (BOOL)ascendentOfPath:(NSString *)path inPaths:(NSArray *)paths { NSUInteger i; for (i = 0; i < [paths count]; i++) { if (isSubpath([paths objectAtIndex: i], path)) { return YES; } } return NO; } - (BOOL)descendentOfPath:(NSString *)path inPaths:(NSArray *)paths { NSUInteger i; for (i = 0; i < [paths count]; i++) { if (isSubpath(path, [paths objectAtIndex: i])) { return YES; } } return NO; } - (BOOL)operationsPending { return ([fileOperations count] > 0); } @end gworkspace-1.1.0/Operation/OperationInfo.plist0000644000175000001440000000032114752466700020717 0ustar multixusers{ NSIcon = "Operation.tiff"; NSRole = "NSNone"; ApplicationDescription = "Operation"; ApplicationIcon = "Operation.tiff"; ApplicationName = "Operation"; ApplicationRelease = "1.1.0"; } gworkspace-1.1.0/Operation/Resources/0000755000175000001440000000000013214346550017034 5ustar multixusersgworkspace-1.1.0/Operation/Resources/English.lproj/0000755000175000001440000000000013214346550021552 5ustar multixusersgworkspace-1.1.0/Operation/Resources/English.lproj/FileOperationWin.gorm/0000755000175000001440000000000013214346550025733 5ustar multixusersgworkspace-1.1.0/Operation/Resources/English.lproj/FileOperationWin.gorm/data.classes0000644000175000001440000000110113214346550030214 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FileOpExecutor = { Actions = ( ); Outlets = ( fileOp ); Super = NSObject; }; FileOpInfo = { Actions = ( "pause:", "stop:", "registerExecutor:" ); Outlets = ( executor, controller, win, fromLabel, fromField, toLabel, toField, progInd, pauseButt, stopButt ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "pause:", "registerExecutor:" ); Super = NSObject; }; }gworkspace-1.1.0/Operation/Resources/English.lproj/FileOperationWin.gorm/data.info0000644000175000001440000000027013214346550027520 0ustar multixusersGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamgworkspace-1.1.0/Operation/Resources/English.lproj/FileOperationWin.gorm/objects.gorm0000644000175000001440000000755413214346550030265 0ustar multixusersGNUstep archive000f4240:0000001d:00000064:00000002:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? A C B&% C D01 NSView% ? A C B  C B&01 NSMutableArray1 NSArray&01 NSTextField1 NSControl% B\ B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 &%From:0 1NSFont%0 & % Helvetica A@A@&&&&&&&& &&&&&&%0 1NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0 % B B A  B A&0 &%00&%To: &&&&&&&& &&&&&&% 0 % B( B\ Cf A  Cf A&0 &%00& &&&&&&&& &&&&&&%00&% NSCalibratedWhiteColorSpace ?* ?0 % B( B Cf A  Cf A&0 &%00 & &&&&&&&& &&&&&&%0! ?* ?0"1NSButton% CX A B` A  B` A& 0# &%0$1 NSButtonCell0%&%Stop0&%&&&&&&&&&&&&&&%2 stop:v12@0:4@80'&0(&&&& &&0)% C A B` A  B` A& 0* &%0+0,&%Pause&&&&&&&&&&&&&&&%2 pause:v12@0:4@80-&0.&&&& &&0/1NSProgressIndicator% A A0 C A  C A&00 & ?UUUUUU @I @Y0102&% System03&% windowBackgroundColor04&%Window05&%Window06&% Window @ F8 F%071NSImage08&% NSApplicationIcon&  D D@09 &0: &0;1NSMutableDictionary1 NSDictionary& 0<& % GormNSWindow0=&%Button2"0>& % TextField30?& % TextField0@& % TextField20A&% NSOwner0B& % FileOpInfo0C& % TextField10D&%Button3)0E&%ProgressIndicator(0)/0F &0G1NSNibConnector<0H&% NSOwner0I?0JCH0K@0L>H0M=0ND0O1NSNibOutletConnectorH<0P&%win0QH?0R& % fromLabel0SH@0T& % fromField0UHC0V&%toLabel0WH>0X&%toField0YHD0Z& % pauseButt0[H=0\&%stopButt0]1NSNibControlConnectorDH0^&%pause:0_=H0`&%stop:0aE0bHE0c1NSMutableString&%progInd0d&gworkspace-1.1.0/Operation/Resources/English.lproj/Localizable.strings0000644000175000001440000002053013214346550025406 0ustar multixusers/* ----------------------- menu strings --------------------------- *\ /* main.m */ "Info" = "Info"; "Info Panel..." = "Info Panel..."; "Preferences..." = "Preferences..."; "Help..." = "Help..."; "File" = "File"; "Open" = "Open"; "Open as Folder" = "Open as Folder"; "Edit File" = "Edit File"; "New Folder" = "New Folder"; "New File" = "New File"; "Duplicate" = "Duplicate"; "Destroy" = "Destroy"; "Empty Recycler" = "Empty Recycler"; "Edit" = "Edit"; "Cut" = "Cut"; "Copy" = "Copy"; "Paste" = "Paste"; "Select All" = "Select All"; "View" = "View"; "Browser" = "Browser"; "Icon" = "Icon"; "Tools" = "Tools"; "Viewer" = "Viewer"; "Inspectors" = "Inspectors"; "Show Inspectors" = "Show Inspectors"; "Attributes" = "Attributes"; "Contents" = "Contents"; "Tools" = "Tools"; "Permissions" = "Permissions"; "Finder" = "Finder"; "Processes..." = "Processes..."; "Fiend" = "Fiend"; "Show Fiend" = "Show Fiend"; "Hide Fiend" = "Hide Fiend"; "Add Layer..." = "Add Layer..."; "Remove Current Layer" = "Remove Current Layer"; "Rename Current Layer" = "Rename Current Layer"; "Layers" = "Layers"; "DeskTop Shelf" = "Desktop Shelf"; "XTerm" = "XTerm"; "Windows" = "Windows"; "Arrange in Front" = "Arrange in Front"; "Miniaturize Window" = "Miniaturize Window"; "Close Window" = "Close Window"; "Services" = "Services"; "Hide" = "Hide"; "Quit" = "Quit"; /* ----------------------- File Operations strings --------------------------- *\ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "See http://www.gnustep.it/enrico/gworkspace"; "Released under the GNU General Public License 2.0" = "Released under the GNU General Public License 2.0"; "Error" = "Error"; "You have not write permission\nfor" = "You do not have write permission\nfor"; "Continue" = "Continue"; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Cancel"; "Move" = "Move"; "Move from: " = "Move from: "; "\nto: " = "\nto: "; "Copy" = "Copy"; "Copy from: " = "Copy from: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Delete"; "Delete the selected objects?" = "Delete the selected objects?"; "Duplicate" = "Duplicate"; "Duplicate the selected objects?" = "Duplicate the selected objects?"; "From:" = "From:"; "To:" = "To:"; "In:" = "In:"; "Stop" = "Stop"; "Pause" = "Pause"; "Moving" = "Moving"; "Copying" = "Copying"; "Linking" = "Linking"; "Duplicating" = "Duplicating"; "Destroying" = "Destroying"; "File Operation Completed" = "File Operation Completed"; "Backgrounder connection died!" = "Background connection died!"; "Some items have the same name;\ndo you want to substitute them?" = "Some items have the same name;\ndo you want to substitute them?"; "Error" = "Error"; "File Operation Error!" = "File Operation Error!"; ": no such file or directory!" = ": no such file or directory!"; ": Directory Protected!" = ": Directory Protected!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "You do not have write permission\nfor "; "The name " = "The name "; " is already in use!" = " is already in use!"; "Cannot rename " = "Cannot rename "; "Invalid char in name" = "Invalid character in name"; /* ----------------------- Inspectors strings --------------------------- *\ /* InspectorsWin.m */ "Attributes" = "Attributes"; "Contents" = "Contents"; "Tools" = "Tools"; "Access Control" = "Access Control"; /* AttributesPanel.m */ "Attributes" = "Attributes"; "Attributes Inspector" = "Attributes Inspector"; "Path:" = "Path:"; "Link To:" = "Link To:"; "Size:" = "Size:"; "Owner:" = "Owner:"; "Group:" = "Group:"; "Changed" = "Changed"; "Revert" = "Revert"; "OK" = "OK"; /* ContentsPanel.m */ "Contents" = "Contents"; "Contents Inspector" = "Contents Inspector"; "No Contents Inspector" = "No Contents Inspector"; "No Contents Inspector\nFor Multiple Selection" = "No Contents Inspector\nfor Multiple Selection"; "error" = "error"; "No Contents Inspectors found!" = "No Contents Inspectors found!"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder"; "Sort by" = "Sort by"; "Name" = "Name"; "Type" = "Type"; "Date" = "Date"; "Size" = "Size"; "Owner" = "Owner"; "Folder Inspector" = "Folder Inspector"; /* ImageViewer.m */ "Image Inspector" = "Image Inspector"; /* AppViewer.m */ "Open these kinds of documents:" = "Open these kinds of documents:"; "Invalid Contents" = "Invalid Contents"; "App Inspector" = "App Inspector"; /* PermissionsPanel.m */ "UNIX Permissions" = "UNIX Permissions"; "Access Control" = "Access Control"; "Also apply to files inside selection" = "Also apply to files inside selection"; /* ToolsPanel.m */ "Tools" = "Tools"; "Tools Inspector" = "Tools Inspector"; "No Tools Inspector" = "No Tools Inspector"; "Set Default" = "Set Default"; /* AppsView.m */ "Double-click to open selected document(s)" = "Double-click to open selected document(s)"; "Default:" = "Default:"; "Path:" = "Path:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Click 'Set Default' to set default application\nfor all documents with this extension"; /* PermsBox.m */ "Permissions" = "Permissions"; "Read" = "Read"; "Write" = "Write"; "Execute" = "Execute"; "Owner" = "Owner"; "Group" = "Group"; "Other" = "Other"; /* ----------------------- Processes strings --------------------------- *\ /* Processes.m */ "Processes" = "Processes"; "No Background Process" = "No Background Processes"; "Kill" = "Kill"; "Path: " = "Path: "; "Status: " = "Status: "; /* ProcsView.m */ "Applications" = "Applications"; "Background" = "Background"; /* ----------------------- Finder strings --------------------------- *\ /* Finder.m */ "Finder" = "Finder"; "Find items with names that match" = "Search by name"; "Find items with contents that match" = "Search by contents"; "No selection!" = "No selection!"; "No arguments!" = "No arguments!"; /* ----------------------- Fiend strings --------------------------- *\ /* Fiend.m */ "New Layer" = "New Layer"; "A layer with this name is already present!" = "A layer with this name is already present!"; "You can't remove the last layer!" = "You can't remove the last layer!"; "Remove layer" = "Remove layer"; "Are you sure that you want to remove this layer?" = "Are you sure you want to remove this layer?"; "Rename Layer" = "Rename Layer"; "You can't dock multiple paths!" = "You can't dock multiple paths!"; "This object is already present in this layer!" = "This object is already present in this layer!"; /* ----------------------- Preference strings --------------------------- *\ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace Preferences"; /* BackWinPreferences.m */ "DeskTop Shelf" = "Desktop Shelf"; "DeskTop Color" = "Desktop Color"; "red" = "red"; "green" = "green"; "blue" = "blue"; "Set Color" = "Set Color"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Push the \"Set Image\" button\nto set your Desktop image.\nThe image must have the same\nsize as your screen."; "Set Image" = "Set Image"; "Unset Image" = "Unset Image"; /* DefaultXTerm.m */ "Set" = "Set"; /* BrowserViewsPreferences.m */ "Column Width" = "Column Width"; "Use Default Settings" = "Use Default Settings"; "Browser" = "Browser"; /* FileWatchingPreferences.m */ "File System Watching" = "File System Watching"; "timeout" = "timeout"; "frequency" = "frequency"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "Values will apply to the \nnew watchers from now, \nto the existing ones after the first timeout"; /* ShelfPreferences.m */ "Shelf" = "Shelf"; /* DefaultEditor.m */ "Default Editor" = "Default Editor"; "No Default Editor" = "No Default Editor"; "Choose..." = "Choose..."; /* IconViewsPreferences.m */ "Title Width" = "Title Width"; "Icon View" = "Icon View"; /* Recycler strings */ "Recycle: " = "Recycle: "; "Recycler: " = "Recycler: "; "Recycler" = "Recycler"; "the Recycler" = "the Recycler"; "\nto the Recycler" = "\nto the Recycler"; "Move from the Recycler " = "Move from the Recycler "; "In" = "In"; "Empty Recycler" = "Empty Recycler"; "Empty the Recycler?" = "Empty the Recycler?"; "Put Away" = "Put Away"; gworkspace-1.1.0/Operation/Resources/Images/0000755000175000001440000000000013214346550020241 5ustar multixusersgworkspace-1.1.0/Operation/Resources/Images/Operation.tiff0000644000175000001440000002253613214346550023063 0ustar multixusersII*$.'u'A_(|:\l_?a%4 .&sayzwb'0;jr{(((  ez~!'.#=hxT[dd 39A, +}KNSr+/3 0c_Wc_Sc_Wc_S!@wĬ{XZ\_ 3/+@{kM=4O=4M=4O=4~c_S!@sĬryqm)3/'@nnƲvhLF@HHHTTHƮ|Y44eVM*'!=<>7733@s϶˶ƶ«zfl`<($/&>:6SSSYoo_84/[E<ʶ˾óoaWI>0 8$$XD@00(sg$YE=kSCm\J`N>F:0FDD웛#wn \LDP=0 4$$,l`M80zprUImYuaz]rW 111љ>>>f{  8$$, <($o]VkUIxaQmYqYu]z]\ HHHݥ)E(( 4$$,E0(Q=4]=4]A8|iYxiUm]ua~]P999'''B?:`[Pc_Wc_S!@wĬjZJ80! @QIBU88,8$$ A,$M40M80jI0 8$$XD@00(sg$YE=mUExeQv]i77/@|ecD<4]EA_MNQ44]=8aA=eI=mMAmQEmQEvYI]MaMiQiUmUqYz]wn \LDP=0 4$$,l`M80zprUImYuaz]z]sH88aMIgUNY84]=8aA8eEAeIAiMAqQE]I]IaQeQmUmUmUD0({  8$$, <($o]VkUIxaQmYqYu]z]E80pUQoeWY84]A8]A8]A8iM=mMEYEYI]MaMiUaM@,$E(( 4$$,E0(Q=4]=4]A8|iYxiUm]ua~]E0(ta_s`]M40]=8Y=8eM=mMEvUEvYI]I]M}UI:$ @QIBU88,8$$ A,$M40M80jI * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef START_APP_WIN #define START_APP_WIN #include @interface StartAppWin: NSObject { IBOutlet id win; IBOutlet id startLabel; IBOutlet id nameField; IBOutlet id progInd; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname maxProgValue:(double)maxvalue; - (void)updateProgressBy:(double)incr; - (NSWindow *)win; @end #endif // START_APP_WIN gworkspace-1.1.0/Recycler/Dialogs/StartAppWin.m0000644000175000001440000000500114751213523020642 0ustar multixusers/* StartAppWin.m * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #include "StartAppWin.h" static NSString *nibName = @"StartAppWin"; @implementation StartAppWin - (void)dealloc { RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } else { NSRect wframe = [win frame]; NSRect scrframe = [[NSScreen mainScreen] frame]; NSRect winrect = NSMakeRect((scrframe.size.width - wframe.size.width) / 2, (scrframe.size.height - wframe.size.height) / 2, wframe.size.width, wframe.size.height); [win setFrame: winrect display: NO]; [win setDelegate: self]; /* Internationalization */ [startLabel setStringValue: NSLocalizedString(@"starting:", @"")]; } } return self; } - (void)showWindowWithTitle:(NSString *)title appName:(NSString *)appname maxProgValue:(double)maxvalue { if (win) { [win setTitle: title]; [nameField setStringValue: appname]; [progInd setMinValue: 0.0]; [progInd setMaxValue: maxvalue]; [progInd setDoubleValue: 0.0]; if ([win isVisible] == NO) { [win orderFrontRegardless]; } } } - (void)updateProgressBy:(double)incr { [progInd incrementBy: incr]; } - (NSWindow *)win { return win; } - (BOOL)windowShouldClose:(id)sender { return YES; } @end gworkspace-1.1.0/Recycler/GNUmakefile0000644000175000001440000000153314752467104016755 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make VERSION = 1.1.0 # # MAIN APP # APP_NAME = Recycler Recycler_PRINCIPAL_CLASS = Recycler Recycler_APPLICATION_ICON=Recycler.tiff Recycler_HAS_RESOURCE_BUNDLE = yes Recycler_RESOURCE_FILES = \ Resources/Recycler.tiff \ Resources/English.lproj Recycler_LANGUAGES = Resources/English # The Objective-C source files to be compiled Recycler_OBJC_FILES = main.m \ Recycler.m \ RecyclerView.m \ RecyclerIcon.m \ Preferences/RecyclerPrefs.m \ Dialogs/StartAppWin.m ADDITIONAL_GUI_LIBS += -lFSNode -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble gworkspace-1.1.0/Recycler/GNUmakefile.postamble0000644000175000001440000000154413251572120020730 0ustar multixusers # Things to do before compiling before-all:: $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Preferences $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Dialogs # Things to do after compiling # after-all:: # Things to do before installing before-install:: $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Preferences $(MKDIRS) ./$(GNUSTEP_OBJ_DIR)/Dialogs # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning #after-clean:: # rm -rf GWorkspace/Inspectors/Viewers/Library # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # rm -rf autom4te*.cache # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Recycler/GNUmakefile.preamble0000644000175000001440000000136013214346550020532 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ -I../../ -I../FSNode -IPreferences -IDialogs # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_LIB_DIRS += -L../FSNode/FSNode.framework/Versions/Current/$(GNUSTEP_TARGET_LDIR) ADDITIONAL_LIB_DIRS += -L../FSNode/FSNode.framework ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Recycler/Preferences/0000755000175000001440000000000014751213523017133 5ustar multixusersgworkspace-1.1.0/Recycler/Preferences/RecyclerPrefs.h0000644000175000001440000000241014751213523022051 0ustar multixusers/* RecyclerPrefs.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef RECYCLER_PREFS_H #define RECYCLER_PREFS_H #include @class Recycler; @interface RecyclerPrefs: NSObject { IBOutlet id win; IBOutlet id dockButt; IBOutlet id explLabel; Recycler *recycler; } - (IBAction)setDockable:(id)sender; - (void)activate; - (void)updateDefaults; - (NSWindow *)win; @end #endif // RECYCLER_PREFS_H gworkspace-1.1.0/Recycler/Preferences/RecyclerPrefs.m0000644000175000001440000000436114751213523022065 0ustar multixusers/* RecyclerPrefs.m * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "RecyclerPrefs.h" #import "Recycler.h" static NSString *nibName = @"PreferencesWin"; @implementation RecyclerPrefs - (void)dealloc { RELEASE (win); [super dealloc]; } - (id)init { self = [super init]; if (self) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); DESTROY (self); return self; } else { [win setFrameUsingName: @"recyclerprefs"]; [win setDelegate: self]; recycler = [Recycler recycler]; [dockButt setState: ([recycler isDocked] ? NSOnState: NSOffState)]; /* Internationalization */ [win setTitle: NSLocalizedString(@"Recycler Preferences", @"")]; [dockButt setTitle: NSLocalizedString(@"Dockable", @"")]; [explLabel setStringValue: NSLocalizedString(@"Select to allow docking on the WindowMaker Dock", @"")]; } } return self; } - (IBAction)setDockable:(id)sender { [recycler setDocked: ([sender state] == NSOnState) ? YES : NO]; } - (void)activate { [win orderFrontRegardless]; } - (void)updateDefaults { [win saveFrameUsingName: @"recyclerprefs"]; } - (NSWindow *)win { return win; } - (BOOL)windowShouldClose:(id)sender { [self updateDefaults]; return YES; } @end gworkspace-1.1.0/Recycler/Recycler.h0000644000175000001440000000670514751213523016623 0ustar multixusers/* Recycler.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import @class FSNodeRep; @class FSNode; @class RecyclerView; @class RecyclerPrefs; @class StartAppWin; @protocol workspaceAppProtocol - (void)showRootViewer; - (BOOL)openFile:(NSString *)fullPath; - (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath; @end @protocol FSWClientProtocol - (void)watchedPathDidChange:(NSData *)dirinfo; @end @protocol FSWatcherProtocol - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; @end @protocol OperationProtocol - (oneway void)performOperation:(NSData *)opinfo; - (oneway void)setFilenamesCut:(BOOL)value; - (BOOL)filenamesWasCut; @end @interface Recycler : NSObject { FSNodeRep *fsnodeRep; NSString *trashPath; RecyclerView *recview; BOOL docked; RecyclerPrefs *preferences; StartAppWin *startAppWin; id fswatcher; BOOL fswnotifications; id operationsApp; id workspaceApplication; BOOL terminating; NSFileManager *fm; id ws; NSNotificationCenter *nc; } + (Recycler *)recycler; - (oneway void)emptyTrash; - (void)setDocked:(BOOL)value; - (BOOL)isDocked; - (void)fileSystemDidChange:(NSNotification *)notif; - (void)watchedPathDidChange:(NSData *)dirinfo; - (void)updateDefaults; - (void)contactWorkspaceApp; - (void)workspaceAppConnectionDidDie:(NSNotification *)notif; - (void)connectFSWatcher; - (void)fswatcherConnectionDidDie:(NSNotification *)notif; // // Menu Operations // - (void)emptyTrashFromMenu:(id)sender; - (void)paste:(id)sender; - (void)showPreferences:(id)sender; - (void)showInfo:(id)sender; // // DesktopApplication protocol // - (void)selectionChanged:(NSArray *)newsel; - (void)openSelectionInNewViewer:(BOOL)newv; - (void)openSelectionWithApp:(id)sender; - (void)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files; - (void)concludeRemoteFilesDragOperation:(NSData *)opinfo atLocalPath:(NSString *)localdest; - (void)addWatcherForPath:(NSString *)path; - (void)removeWatcherForPath:(NSString *)path; - (NSString *)trashPath; - (id)workspaceApplication; @end gworkspace-1.1.0/Recycler/Recycler.m0000644000175000001440000003563214751213523016631 0ustar multixusers/* Recycler.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "Recycler.h" #import "RecyclerView.h" #import "Preferences/RecyclerPrefs.h" #import "Dialogs/StartAppWin.h" #import "FSNode.h" #import "FSNodeRep.h" #import "FSNFunctions.h" static Recycler *recycler = nil; @implementation Recycler + (Recycler *)recycler { if (recycler == nil) { recycler = [[Recycler alloc] init]; } return recycler; } + (void)initialize { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: @"Recycler" forKey: @"DesktopApplicationName"]; [defaults setObject: @"recycler" forKey: @"DesktopApplicationSelName"]; [defaults synchronize]; } - (void)dealloc { if (fswatcher && [[(NSDistantObject *)fswatcher connectionForProxy] isValid]) { [fswatcher unregisterClient: (id )self]; DESTROY (fswatcher); } [[NSDistributedNotificationCenter defaultCenter] removeObserver: self]; DESTROY (workspaceApplication); RELEASE (trashPath); RELEASE (recview); RELEASE (preferences); RELEASE (startAppWin); [super dealloc]; } - (void)applicationWillFinishLaunching:(NSNotification *)aNotification { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; fm = [NSFileManager defaultManager]; ws = [NSWorkspace sharedWorkspace]; nc = [NSNotificationCenter defaultCenter]; fsnodeRep = [FSNodeRep sharedInstance]; workspaceApplication = nil; entry = [defaults objectForKey: @"reserved_names"]; if (entry) { [fsnodeRep setReservedNames: entry]; } else { [fsnodeRep setReservedNames: [NSArray arrayWithObjects: @".gwdir", @".gwsort", nil]]; } } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSString *tpath; BOOL isdir; tpath = [NSHomeDirectory() stringByAppendingPathComponent: @".Trash"]; if ([fm fileExistsAtPath: tpath isDirectory: &isdir] == NO) { if ([fm createDirectoryAtPath: tpath attributes: nil] == NO) { NSLog(@"Can't create the Recycler directory! Quitting now."); [NSApp terminate: self]; } } ASSIGN (trashPath, tpath); fswatcher = nil; fswnotifications = YES; [self connectFSWatcher]; docked = [[NSUserDefaults standardUserDefaults] boolForKey: @"docked"]; if (docked) { recview = [[RecyclerView alloc] init]; [[[NSApp iconWindow] contentView] addSubview: recview]; } else { [NSApp setApplicationIconImage: [NSApp applicationIconImage]]; recview = [[RecyclerView alloc] initWithWindow]; [recview activate]; } preferences = [RecyclerPrefs new]; startAppWin = [[StartAppWin alloc] init]; [self addWatcherForPath: trashPath]; [[NSDistributedNotificationCenter defaultCenter] addObserver: self selector: @selector(fileSystemDidChange:) name: @"GWFileSystemDidChangeNotification" object: nil]; terminating = NO; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app { terminating = YES; [self removeWatcherForPath: trashPath]; if (fswatcher) { NSConnection *fswconn = [(NSDistantObject *)fswatcher connectionForProxy]; if ([fswconn isValid]) { [nc removeObserver: self name: NSConnectionDidDieNotification object: fswconn]; [fswatcher unregisterClient: (id )self]; DESTROY (fswatcher); } } [self updateDefaults]; return NSTerminateNow; } - (oneway void)emptyTrash { [self emptyTrashFromMenu: nil]; } - (void)setDocked:(BOOL)value { docked = value; if (docked) { [[recview window] close]; DESTROY (recview); recview = [[RecyclerView alloc] init]; [[[NSApp iconWindow] contentView] addSubview: recview]; } else { [recview removeFromSuperview]; DESTROY (recview); recview = [[RecyclerView alloc] initWithWindow]; [recview activate]; } } - (BOOL)isDocked { return docked; } - (void)fileSystemDidChange:(NSNotification *)notif { NSDictionary *dict = [notif userInfo]; [recview nodeContentsDidChange: dict]; } - (void)watchedPathDidChange:(NSData *)dirinfo { NSDictionary *info = [NSUnarchiver unarchiveObjectWithData: dirinfo]; [recview watchedPathChanged: info]; } - (void)updateDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool: docked forKey: @"docked"]; [defaults synchronize]; [recview updateDefaults]; [preferences updateDefaults]; } - (void)contactWorkspaceApp { if (workspaceApplication == nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appName = [defaults stringForKey: @"GSWorkspaceApplication"]; if (appName == nil) { appName = @"GWorkspace"; } workspaceApplication = [NSConnection rootProxyForConnectionWithRegisteredName: appName host: @""]; if (workspaceApplication == nil) { int i; [ws launchApplication: appName]; for (i = 0; i < 80; i++) { [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; workspaceApplication = [NSConnection rootProxyForConnectionWithRegisteredName: appName host: @""]; if (workspaceApplication) { break; } } } if (workspaceApplication) { [workspaceApplication setProtocolForProxy: @protocol(workspaceAppProtocol)]; RETAIN (workspaceApplication); [nc addObserver: self selector: @selector(workspaceAppConnectionDidDie:) name: NSConnectionDidDieNotification object: [workspaceApplication connectionForProxy]]; } else { NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact the workspace application!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)workspaceAppConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [workspaceApplication connectionForProxy], NSInternalInconsistencyException); DESTROY (workspaceApplication); } - (void)connectFSWatcher { if (fswatcher == nil) { fswatcher = [NSConnection rootProxyForConnectionWithRegisteredName: @"fswatcher" host: @""]; if (fswatcher == nil) { NSString *cmd; int i; cmd = [NSTask launchPathForTool: @"fswatcher"]; [startAppWin showWindowWithTitle: @"Recycler" appName: @"fswatcher" maxProgValue: 40.0]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 1; i <= 40; i++) { [startAppWin updateProgressBy: 1.0]; [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; fswatcher = [NSConnection rootProxyForConnectionWithRegisteredName: @"fswatcher" host: @""]; if (fswatcher) { [startAppWin updateProgressBy: 40.0 - i]; break; } } [[startAppWin win] close]; } if (fswatcher) { RETAIN (fswatcher); [fswatcher setProtocolForProxy: @protocol(FSWatcherProtocol)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(fswatcherConnectionDidDie:) name: NSConnectionDidDieNotification object: [fswatcher connectionForProxy]]; [fswatcher registerClient: (id )self isGlobalWatcher: NO]; } else { fswnotifications = NO; NSRunAlertPanel(nil, NSLocalizedString(@"unable to contact fswatcher\nfswatcher notifications disabled!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } } - (void)fswatcherConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [fswatcher connectionForProxy], NSInternalInconsistencyException); RELEASE (fswatcher); fswatcher = nil; if (NSRunAlertPanel(nil, NSLocalizedString(@"The fswatcher connection died.\nDo you want to restart it?", @""), NSLocalizedString(@"Yes", @""), NSLocalizedString(@"No", @""), nil)) { [self connectFSWatcher]; } else { fswnotifications = NO; NSRunAlertPanel(nil, NSLocalizedString(@"fswatcher notifications disabled!", @""), NSLocalizedString(@"Ok", @""), nil, nil); } } // // NSServicesRequests protocol // - (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType { BOOL sendOK = ((sendType == nil) || ([sendType isEqual: NSFilenamesPboardType])); BOOL returnOK = ((returnType == nil) || [returnType isEqual: NSFilenamesPboardType]); if (sendOK && returnOK) { return self; } return nil; } - (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard { return ([[pboard types] indexOfObject: NSFilenamesPboardType] != NSNotFound); } - (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types { return NO; } // // DesktopApplication protocol // - (void)selectionChanged:(NSArray *)newsel { } - (void)openSelectionInNewViewer:(BOOL)newv { } - (void)openSelectionWithApp:(id)sender { } - (void)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files { NSInteger tag; if ([ws performFileOperation: operation source: source destination: destination files: files tag: &tag] == NO) { NSRunAlertPanel(nil, NSLocalizedString(@"Unable to contact GWorkspace", @""), NSLocalizedString(@"OK", @""), nil, nil); } } - (void)concludeRemoteFilesDragOperation:(NSData *)opinfo atLocalPath:(NSString *)localdest { } - (void)addWatcherForPath:(NSString *)path { if (fswnotifications) { [self connectFSWatcher]; [fswatcher client: self addWatcherForPath: path]; } } - (void)removeWatcherForPath:(NSString *)path { if (fswnotifications) { [self connectFSWatcher]; [fswatcher client: self removeWatcherForPath: path]; } } - (NSString *)trashPath { return trashPath; } - (id)workspaceApplication { if (workspaceApplication == nil) { [self contactWorkspaceApp]; } return workspaceApplication; } - (oneway void)terminateApplication { [NSApp terminate: self]; } - (BOOL)terminating { return terminating; } // // Menu Operations // - (void)emptyTrashFromMenu:(id)sender { CREATE_AUTORELEASE_POOL(arp); FSNode *node = [FSNode nodeWithPath: trashPath]; NSMutableArray *subNodes = [[node subNodes] mutableCopy]; int count = [subNodes count]; int i; for (i = 0; i < count; i++) { FSNode *nd = [subNodes objectAtIndex: i]; if ([nd isReserved]) { [subNodes removeObjectAtIndex: i]; i--; count --; } } if ([subNodes count]) { NSMutableArray *files = [NSMutableArray array]; for (i = 0; i < [subNodes count]; i++) { [files addObject: [(FSNode *)[subNodes objectAtIndex: i] name]]; } [self performFileOperation: @"GWorkspaceEmptyRecyclerOperation" source: trashPath destination: trashPath files: files]; } RELEASE (subNodes); RELEASE (arp); } - (void)paste:(id)sender { NSPasteboard *pb = [NSPasteboard generalPasteboard]; if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; [self contactWorkspaceApp]; if (workspaceApplication) { BOOL cut = [(id )workspaceApplication filenamesWasCut]; if ([recview validatePasteOfFilenames: sourcePaths wasCut: cut]) { NSString *source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; NSString *destination = trashPath; NSMutableArray *files = [NSMutableArray array]; NSString *operation; int i; for (i = 0; i < [sourcePaths count]; i++) { NSString *spath = [sourcePaths objectAtIndex: i]; [files addObject: [spath lastPathComponent]]; } if (cut) { if ([source isEqual: trashPath]) { operation = @"GWorkspaceRecycleOutOperation"; } else { operation = NSWorkspaceMoveOperation; } } else { operation = NSWorkspaceCopyOperation; } [self performFileOperation: operation source: source destination: destination files: files]; } } else { NSRunAlertPanel(nil, NSLocalizedString(@"File operations disabled!", @""), NSLocalizedString(@"OK", @""), nil, nil); return; } } } - (void)showPreferences:(id)sender { [preferences activate]; } - (void)showInfo:(id)sender { [NSApp orderFrontStandardInfoPanel: self]; } @end gworkspace-1.1.0/Recycler/RecyclerIcon.h0000644000175000001440000000313214751213523017423 0ustar multixusers/* RecyclerIcon.h * * Copyright (C) 2004-2010 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "FSNIcon.h" @class NSColor; @class NSImage; @class NSWorkspace; @interface RecyclerIcon : FSNIcon { NSImage *trashFullIcon; BOOL trashFull; NSWorkspace *ws; } - (id)initWithRecyclerNode:(FSNode *)anode; - (void)setTrashFull:(BOOL)value; @end @interface RecyclerIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender; - (NSDragOperation)draggingUpdated:(id )sender; - (void)draggingExited:(id )sender; - (BOOL)prepareForDragOperation:(id )sender; - (BOOL)performDragOperation:(id )sender; - (void)concludeDragOperation:(id )sender; @end gworkspace-1.1.0/Recycler/RecyclerIcon.m0000644000175000001440000001776714751213523017453 0ustar multixusers/* RecyclerIcon.m * * Copyright (C) 2004-2014 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "Recycler.h" #import "RecyclerIcon.h" #define ISIZE 48 static id desktopApp = nil; @implementation RecyclerIcon - (void)dealloc { RELEASE (trashFullIcon); [super dealloc]; } + (void)initialize { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *appname = [defaults stringForKey: @"DesktopApplicationName"]; NSString *selname = [defaults stringForKey: @"DesktopApplicationSelName"]; if (appname && selname) { Class desktopAppClass = [[NSBundle mainBundle] principalClass]; SEL sel = NSSelectorFromString(selname); desktopApp = [desktopAppClass performSelector: sel]; } } - (id)initWithRecyclerNode:(FSNode *)anode { self = [super initForNode: anode nodeInfoType: FSNInfoNameType extendedType: nil iconSize: ISIZE iconPosition: NSImageOnly labelFont: [NSFont systemFontOfSize: 12] textColor: [NSColor controlTextColor] gridIndex: 0 dndSource: NO acceptDnd: YES slideBack: NO]; if (self) { NSArray *subNodes = [node subNodes]; int count = [subNodes count]; int i; ASSIGN (icon, [fsnodeRep trashIconOfSize: icnBounds.size.width]); ASSIGN (trashFullIcon, [fsnodeRep trashFullIconOfSize: icnBounds.size.width]); for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count--; } } trashFull = (count != 0); [self registerForDraggedTypes: [NSArray arrayWithObject: NSFilenamesPboardType]]; ws = [NSWorkspace sharedWorkspace]; } return self; } - (void)setTrashFull:(BOOL)value { trashFull = value; [self setNeedsDisplay: YES]; } - (void)mouseDown:(NSEvent *)theEvent { if ([theEvent clickCount] == 1) { if ([(Recycler *)desktopApp isDocked] == NO) { NSWindow *win = [self window]; NSPoint lastLocation = [theEvent locationInWindow]; NSPoint location; NSDate *theDistantFuture = [NSDate distantFuture]; BOOL done = NO; unsigned eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask | NSPeriodicMask | NSOtherMouseUpMask | NSRightMouseUpMask; [NSEvent startPeriodicEventsAfterDelay: 0.02 withPeriod: 0.02]; while (done == NO) { theEvent = [NSApp nextEventMatchingMask: eventMask untilDate: theDistantFuture inMode: NSEventTrackingRunLoopMode dequeue: YES]; switch ([theEvent type]) { case NSRightMouseUp: case NSOtherMouseUp: case NSLeftMouseUp: done = YES; break; case NSPeriodic: location = [win mouseLocationOutsideOfEventStream]; if (NSEqualPoints(location, lastLocation) == NO) { NSPoint origin = [win frame].origin; origin.x += (location.x - lastLocation.x); origin.y += (location.y - lastLocation.y); [win setFrameOrigin: origin]; } break; default: break; } } [NSEvent stopPeriodicEvents]; } else [[self nextResponder] tryToPerform:_cmd with:theEvent]; } else { id workspaceApp = [desktopApp workspaceApplication]; if (workspaceApp) { NSString *path = [node path]; [workspaceApp selectFile: path inFileViewerRootedAtPath: path]; } } } - (void)drawRect:(NSRect)rect { if (trashFull) { [trashFullIcon compositeToPoint: icnPoint operation: NSCompositeSourceOver]; } else { [icon compositeToPoint: icnPoint operation: NSCompositeSourceOver]; } } @end @implementation RecyclerIcon (DraggingDestination) - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; if ([[pb types] containsObject: NSFilenamesPboardType]) { isDragTarget = YES; return NSDragOperationEvery; } isDragTarget = NO; return NSDragOperationNone; } - (NSDragOperation)draggingUpdated:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; if ([[pb types] containsObject: NSFilenamesPboardType]) { isDragTarget = YES; [self select]; return NSDragOperationEvery; } isDragTarget = NO; return NSDragOperationNone; } - (void)draggingExited:(id )sender { isDragTarget = NO; } - (BOOL)prepareForDragOperation:(id )sender { return isDragTarget; } - (BOOL)performDragOperation:(id )sender { return isDragTarget; } // FIXME: this code is now very similar to what is in DockIcon, it should be generalized - (void)concludeDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; [self unselect]; isDragTarget = NO; if ([[pb types] containsObject: NSFilenamesPboardType]) { NSArray *sourcePaths = [pb propertyListForType: NSFilenamesPboardType]; NSString *source = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; NSArray *vpaths = [ws mountedLocalVolumePaths]; NSMutableArray *files = [NSMutableArray array]; NSMutableArray *umountPaths = [NSMutableArray array]; NSUInteger i; for (i = 0; i < [sourcePaths count]; i++) { NSString *srcpath = [sourcePaths objectAtIndex: i]; if ([vpaths containsObject: srcpath]) { [umountPaths addObject: srcpath]; } else { [files addObject: [srcpath lastPathComponent]]; } } for (i = 0; i < [umountPaths count]; i++) { NSString *umpath = [umountPaths objectAtIndex: i]; if (![ws unmountAndEjectDeviceAtPath: umpath]) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You are not allowed to umount\n", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, umpath], buttstr, nil, nil); } } if ([files count]) { if ([[NSFileManager defaultManager] isWritableFileAtPath: source] == NO) { NSString *err = NSLocalizedString(@"Error", @""); NSString *msg = NSLocalizedString(@"You do not have write permission\nfor", @""); NSString *buttstr = NSLocalizedString(@"Continue", @""); NSRunAlertPanel(err, [NSString stringWithFormat: @"%@ \"%@\"!\n", msg, source], buttstr, nil, nil); return; } [desktopApp performFileOperation: NSWorkspaceRecycleOperation source: source destination: [node path] files: files]; } } } @end gworkspace-1.1.0/Recycler/RecyclerInfo.plist0000644000175000001440000000110614752467267020352 0ustar multixusers{ NSIcon = "Recycler.tiff"; NSRole = "NSNone"; ApplicationDescription = "Recycler"; ApplicationDescription = "Workspace Manager"; ApplicationIcon = "Recycler.tiff"; ApplicationName = "Recycler"; ApplicationRelease = "1.1.0"; NSBuildVersion = "02 2025"; CFBundleIdentifier = "org.gnustep.GWorkspace.Recycler"; Authors = ( "Riccardo Mottola", "Enrico Sersale" ); Copyright = "Copyright (C) 2004-2021 Free Software Foundation, Inc."; CopyrightDescription = "Released under the GNU General Public License 2.0 or later"; } gworkspace-1.1.0/Recycler/RecyclerView.h0000644000175000001440000000337014751213523017451 0ustar multixusers/* RecyclerView.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "Recycler.h" #import "FSNodeRep.h" @class NSImage; @class RecyclerIcon; @interface RecyclerWindow : NSWindow { id icon; } - (void)setRecyclerIcon:(id)icn; @end @interface RecyclerView : NSView { RecyclerWindow *win; RecyclerIcon *icon; NSImage *tile; Recycler *recycler; } - (id)initWithWindow; - (void)activate; - (RecyclerIcon *)trashIcon; - (void)updateDefaults; @end @interface RecyclerView (NodeRepContainer) - (void)nodeContentsDidChange:(NSDictionary *)info; - (void)watchedPathChanged:(NSDictionary *)info; - (FSNSelectionMask)selectionMask; - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut; - (NSColor *)backgroundColor; - (NSColor *)textColor; - (NSColor *)disabledTextColor; - (NSDragOperation)draggingUpdated:(id )sender; @end gworkspace-1.1.0/Recycler/RecyclerView.m0000644000175000001440000001773014751213523017463 0ustar multixusers/* RecyclerView.m * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #import #import #import #import "RecyclerView.h" #import "RecyclerIcon.h" #import "FSNFunctions.h" #define WIN_SIZE 64 #define ICN_SIZE 48 @implementation RecyclerWindow - (void)setRecyclerIcon:(id)icn { icon = icn; [[self contentView] addSubview: [icon superview]]; } - (NSDragOperation)draggingEntered:(id )sender { return [icon draggingEntered: sender]; } - (NSDragOperation)draggingUpdated:(id )sender { return [icon draggingUpdated: sender]; } - (void)draggingExited:(id )sender { [icon draggingExited: sender]; } - (BOOL)prepareForDragOperation:(id )sender { return [icon prepareForDragOperation: sender]; } - (BOOL)performDragOperation:(id )sender { return [icon performDragOperation: sender]; } - (void)concludeDragOperation:(id )sender { [icon concludeDragOperation: sender]; } - (BOOL)canBecomeKeyWindow { return YES; } - (BOOL)canBecomeMainWindow { return YES; } @end @implementation RecyclerView - (void)dealloc { RELEASE (tile); RELEASE (win); [super dealloc]; } - (id)init { self = [super initWithFrame: NSMakeRect(0, 0, 64, 64)]; if (self) { NSString *path; FSNode *node; recycler = [Recycler recycler]; path = [recycler trashPath]; node = [FSNode nodeWithPath: path]; icon = [[RecyclerIcon alloc] initWithRecyclerNode: node]; [icon setFrame: [self bounds]]; [self addSubview: icon]; RELEASE (icon); ASSIGN (tile, [NSImage imageNamed: @"common_Tile.tiff"]); } return self; } - (id)initWithWindow { self = [self init]; if (self) { win = [[RecyclerWindow alloc] initWithContentRect: NSMakeRect(0, 0, WIN_SIZE, WIN_SIZE) styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO]; if ([win setFrameUsingName: @"recycler_win"] == NO) { NSRect r = [[NSScreen mainScreen] frame]; [win setFrame: NSMakeRect(r.size.width - WIN_SIZE, 0, WIN_SIZE, WIN_SIZE) display: NO]; } [win setReleasedWhenClosed: NO]; [win setRecyclerIcon: icon]; [win registerForDraggedTypes: [NSArray arrayWithObject: NSFilenamesPboardType]]; } return self; } - (void)activate { [win setLevel: NSDockWindowLevel]; [win makeKeyAndOrderFront: nil]; [win makeMainWindow]; } - (RecyclerIcon *)trashIcon { return icon; } - (void)updateDefaults { if (win && [win isVisible]) { [win saveFrameUsingName: @"recycler_win"]; } } - (void)drawRect:(NSRect)rect { [tile compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; } @end @implementation RecyclerView (NodeRepContainer) - (void)nodeContentsDidChange:(NSDictionary *)info { NSString *operation = [info objectForKey: @"operation"]; NSString *source = [info objectForKey: @"source"]; NSString *destination = [info objectForKey: @"destination"]; int i; if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceRecycleOperation]) { FSNode *node = [icon node]; NSString *trashPath = [node path]; if ([destination isEqual: trashPath]) { NSArray *subNodes = [node subNodes]; int count = [subNodes count]; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count --; } } [icon setTrashFull: (count > 0)]; } } if ([operation isEqual: @"GWorkspaceRecycleOutOperation"] || [operation isEqual: @"GWorkspaceEmptyRecyclerOperation"] || [operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceDestroyOperation]) { FSNode *node = [icon node]; NSString *trashPath = [node path]; NSString *basePath; if ([operation isEqual: @"GWorkspaceEmptyRecyclerOperation"] || [operation isEqual: NSWorkspaceDestroyOperation]) { basePath = destination; } else { basePath = source; } if ([basePath isEqual: trashPath]) { NSArray *subNodes = [node subNodes]; int count = [subNodes count]; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count --; } } if (count == 0) { [icon setTrashFull: NO]; } } } } - (void)watchedPathChanged:(NSDictionary *)info { NSString *event = [info objectForKey: @"event"]; NSString *path = [info objectForKey: @"path"]; if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { if ([path isEqual: [recycler trashPath]]) { FSNode *node = [icon node]; NSArray *subNodes = [node subNodes]; int count = [subNodes count]; int i; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved]) { count --; } } if (count == 0) { [icon setTrashFull: NO]; } } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { if ([path isEqual: [recycler trashPath]]) { FSNode *node = [icon node]; NSArray *subNodes = [node subNodes]; int i; for (i = 0; i < [subNodes count]; i++) { if ([[subNodes objectAtIndex: i] isReserved] == NO) { [icon setTrashFull: YES]; break; } } } } } - (FSNSelectionMask)selectionMask { return NSSingleSelectionMask; } - (BOOL)validatePasteOfFilenames:(NSArray *)names wasCut:(BOOL)cut { NSMutableArray *sourcePaths = [names mutableCopy]; NSString *basePath; NSString *nodePath = [[icon node] path]; NSString *prePath = [NSString stringWithString: nodePath]; NSUInteger count = [names count]; int i; AUTORELEASE (sourcePaths); if (count == 0) { return NO; } if ([[icon node] isWritable] == NO) { return NO; } basePath = [[sourcePaths objectAtIndex: 0] stringByDeletingLastPathComponent]; if ([basePath isEqual: nodePath]) { return NO; } if ([sourcePaths containsObject: nodePath]) { return NO; } while (1) { if ([sourcePaths containsObject: prePath]) { return NO; } if ([prePath isEqual: path_separator()]) { break; } prePath = [prePath stringByDeletingLastPathComponent]; } for (i = 0; i < count; i++) { NSString *srcpath = [sourcePaths objectAtIndex: i]; FSNode *nd = [FSNode nodeWithPath: srcpath]; if ([nd isMountPoint]) { [sourcePaths removeObject: srcpath]; count--; i--; } } if ([sourcePaths count] == 0) { return NO; } return cut; } - (NSColor *)backgroundColor { return [NSColor windowBackgroundColor]; } - (NSColor *)textColor { return [NSColor controlTextColor]; } - (NSColor *)disabledTextColor { return [NSColor disabledControlTextColor]; } - (NSDragOperation)draggingUpdated:(id )sender { return NSDragOperationNone; } @end gworkspace-1.1.0/Recycler/Resources/0000755000175000001440000000000013214346550016644 5ustar multixusersgworkspace-1.1.0/Recycler/Resources/English.lproj/0000755000175000001440000000000013214346550021362 5ustar multixusersgworkspace-1.1.0/Recycler/Resources/English.lproj/Localizable.strings0000644000175000001440000002034213214346550025217 0ustar multixusers/* ----------------------- menu strings --------------------------- *\ /* main.m */ "Info" = "Info"; "Info Panel..." = "Info Panel..."; "Preferences..." = "Preferences..."; "Help..." = "Help..."; "File" = "File"; "Open" = "Open"; "Open as Folder" = "Open as Folder"; "Edit File" = "Edit File"; "New Folder" = "New Folder"; "New File" = "New File"; "Duplicate" = "Duplicate"; "Destroy" = "Destroy"; "Empty Recycler" = "Empty Recycler"; "Edit" = "Edit"; "Cut" = "Cut"; "Copy" = "Copy"; "Paste" = "Paste"; "Select All" = "Select All"; "View" = "View"; "Browser" = "Browser"; "Icon" = "Icon"; "Tools" = "Tools"; "Viewer" = "Viewer"; "Inspectors" = "Inspectors"; "Show Inspectors" = "Show Inspectors"; "Attributes" = "Attributes"; "Contents" = "Contents"; "Tools" = "Tools"; "Permissions" = "Permissions"; "Finder" = "Finder"; "Processes..." = "Processes..."; "Fiend" = "Fiend"; "Show Fiend" = "Show Fiend"; "Hide Fiend" = "Hide Fiend"; "Add Layer..." = "Add Layer..."; "Remove Current Layer" = "Remove Current Layer"; "Rename Current Layer" = "Rename Current Layer"; "Layers" = "Layers"; "DeskTop Shelf" = "Desktop Shelf"; "XTerm" = "XTerm"; "Windows" = "Windows"; "Arrange in Front" = "Arrange in Front"; "Miniaturize Window" = "Miniaturize Window"; "Close Window" = "Close Window"; "Services" = "Services"; "Hide" = "Hide"; "Quit" = "Quit"; /* ----------------------- File Operations strings --------------------------- *\ /* GWorkspace.m */ "GNUstep Workspace Manager" = "GNUstep Workspace Manager"; "See http://www.gnustep.it/enrico/gworkspace" = "See http://www.gnustep.it/enrico/gworkspace"; "Released under the GNU General Public License 2.0" = "Released under the GNU General Public License 2.0"; "Error" = "Error"; "You have not write permission\nfor" = "You do not have write permission\nfor"; "Continue" = "Continue"; /* FileOperation.m */ "OK" = "OK"; "Cancel" = "Cancel"; "Move" = "Move"; "Move from: " = "Move from: "; "\nto: " = "\nto: "; "Copy" = "Copy"; "Copy from: " = "Copy from: "; "Link" = "Link"; "Link " = "Link "; "Delete" = "Delete"; "Delete the selected objects?" = "Delete the selected objects?"; "Duplicate" = "Duplicate"; "Duplicate the selected objects?" = "Duplicate the selected objects?"; "From:" = "From:"; "To:" = "To:"; "In:" = "In:"; "Stop" = "Stop"; "Pause" = "Pause"; "Moving" = "Moving"; "Copying" = "Copying"; "Linking" = "Linking"; "Duplicating" = "Duplicating"; "Destroying" = "Destroying"; "File Operation Completed" = "File Operation Completed"; "Backgrounder connection died!" = "Background connection died!"; "Some items have the same name;\ndo you want to substitute them?" = "Some items have the same name;\ndo you want to substitute them?"; "Error" = "Error"; "File Operation Error!" = "File Operation Error!"; /* ColumnIcon.m */ "You have not write permission\nfor " = "You do not have write permission\nfor "; "The name " = "The name "; " is already in use!" = " is already in use!"; "Cannot rename " = "Cannot rename "; "Invalid char in name" = "Invalid character in name"; /* ----------------------- Inspectors strings --------------------------- *\ /* InspectorsWin.m */ "Attributes" = "Attributes"; "Contents" = "Contents"; "Tools" = "Tools"; "Access Control" = "Access Control"; /* AttributesPanel.m */ "Attributes" = "Attributes"; "Attributes Inspector" = "Attributes Inspector"; "Path:" = "Path:"; "Link To:" = "Link To:"; "Size:" = "Size:"; "Owner:" = "Owner:"; "Group:" = "Group:"; "Changed" = "Changed"; "Revert" = "Revert"; "OK" = "OK"; /* ContentsPanel.m */ "Contents" = "Contents"; "Contents Inspector" = "Contents Inspector"; "No Contents Inspector" = "No Contents Inspector"; "No Contents Inspector\nFor Multiple Selection" = "No Contents Inspector\nfor Multiple Selection"; "error" = "error"; "No Contents Inspectors found!" = "No Contents Inspectors found!"; /* FolderViewer.m */ "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder" = "Sort method applies to the\ncontents of the selected folder,\nNOT to its parent folder"; "Sort by" = "Sort by"; "Name" = "Name"; "Type" = "Type"; "Date" = "Date"; "Size" = "Size"; "Owner" = "Owner"; "Folder Inspector" = "Folder Inspector"; /* ImageViewer.m */ "Image Inspector" = "Image Inspector"; /* AppViewer.m */ "Open these kinds of documents:" = "Open these kinds of documents:"; "Invalid Contents" = "Invalid Contents"; "App Inspector" = "App Inspector"; /* PermissionsPanel.m */ "UNIX Permissions" = "UNIX Permissions"; "Access Control" = "Access Control"; "Also apply to files inside selection" = "Also apply to files inside selection"; /* ToolsPanel.m */ "Tools" = "Tools"; "Tools Inspector" = "Tools Inspector"; "No Tools Inspector" = "No Tools Inspector"; "Set Default" = "Set Default"; /* AppsView.m */ "Double-click to open selected document(s)" = "Double-click to open selected document(s)"; "Default:" = "Default:"; "Path:" = "Path:"; "Click 'Set Default' to set default application\nfor all documents with this extension" = "Click 'Set Default' to set default application\nfor all documents with this extension"; /* PermsBox.m */ "Permissions" = "Permissions"; "Read" = "Read"; "Write" = "Write"; "Execute" = "Execute"; "Owner" = "Owner"; "Group" = "Group"; "Other" = "Other"; /* ----------------------- Processes strings --------------------------- *\ /* Processes.m */ "Processes" = "Processes"; "No Background Process" = "No Background Processes"; "Kill" = "Kill"; "Path: " = "Path: "; "Status: " = "Status: "; /* ProcsView.m */ "Applications" = "Applications"; "Background" = "Background"; /* ----------------------- Finder strings --------------------------- *\ /* Finder.m */ "Finder" = "Finder"; "Find items with names that match" = "Search by name"; "Find items with contents that match" = "Search by contents"; "No selection!" = "No selection!"; "No arguments!" = "No arguments!"; /* ----------------------- Fiend strings --------------------------- *\ /* Fiend.m */ "New Layer" = "New Layer"; "A layer with this name is already present!" = "A layer with this name is already present!"; "You can't remove the last layer!" = "You can't remove the last layer!"; "Remove layer" = "Remove layer"; "Are you sure that you want to remove this layer?" = "Are you sure you want to remove this layer?"; "Rename Layer" = "Rename Layer"; "You can't dock multiple paths!" = "You can't dock multiple paths!"; "This object is already present in this layer!" = "This object is already present in this layer!"; /* ----------------------- Preference strings --------------------------- *\ /* PreferencesWin.m */ "GWorkspace Preferences" = "GWorkspace Preferences"; /* BackWinPreferences.m */ "DeskTop Shelf" = "Desktop Shelf"; "DeskTop Color" = "Desktop Color"; "red" = "red"; "green" = "green"; "blue" = "blue"; "Set Color" = "Set Color"; "Push the \"Set Image\" button\nto set your DeskTop image.\nThe image must have the same\nsize of your screen." = "Push the \"Set Image\" button\nto set your Desktop image.\nThe image must have the same\nsize as your screen."; "Set Image" = "Set Image"; "Unset Image" = "Unset Image"; /* DefaultXTerm.m */ "Set" = "Set"; /* BrowserViewsPreferences.m */ "Column Width" = "Column Width"; "Use Default Settings" = "Use Default Settings"; "Browser" = "Browser"; /* FileWatchingPreferences.m */ "File System Watching" = "File System Watching"; "timeout" = "timeout"; "frequency" = "frequency"; "Values will apply to the \nnew watchers from now, \nto the existing ones, after the first timeout" = "Values will apply to the \nnew watchers from now, \nto the existing ones after the first timeout"; /* ShelfPreferences.m */ "Shelf" = "Shelf"; /* DefaultEditor.m */ "Default Editor" = "Default Editor"; "No Default Editor" = "No Default Editor"; "Choose..." = "Choose..."; /* IconViewsPreferences.m */ "Title Width" = "Title Width"; "Icon View" = "Icon View"; /* Recycler strings */ "Recycle: " = "Recycle: "; "Recycler: " = "Recycler: "; "Recycler" = "Recycler"; "the Recycler" = "the Recycler"; "\nto the Recycler" = "\nto the Recycler"; "Move from the Recycler " = "Move from the Recycler "; "In" = "In"; "Empty Recycler" = "Empty Recycler"; "Empty the Recycler?" = "Empty the Recycler?"; "Put Away" = "Put Away"; gworkspace-1.1.0/Recycler/Resources/English.lproj/PreferencesWin.gorm/0000755000175000001440000000000013214346550025244 5ustar multixusersgworkspace-1.1.0/Recycler/Resources/English.lproj/PreferencesWin.gorm/data.classes0000644000175000001440000000056613214346550027543 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "buttonAction:", "initForInspector:", "csizesAction:" ); Super = NSObject; }; RecyclerPrefs = { Actions = ( "setDockable:" ); Outlets = ( win, dockButt, explLabel ); Super = NSObject; }; }gworkspace-1.1.0/Recycler/Resources/English.lproj/PreferencesWin.gorm/objects.gorm0000644000175000001440000002436613214346550027576 0ustar multixusersGNUstep archive00002c24:0000002a:00000125:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C Cp&% C D01 NSView%  C Cp  C Cp&01 NSMutableArray1 NSArray&01NSButton1 NSControl% C C B A  B A& 0 &%0 1 NSButtonCell1 NSActionCell1NSCell0 &%Dockable0 1NSImage0 1NSMutableString&%common_SwitchOff0 1NSFont%&&&&&&&&%0&0&00&%common_SwitchOn&&&01 NSTextField% A B C A  C A& 0 &%01NSTextFieldCell0&/%/Select to allow docking on the WindowMaker Dock0% A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00&%NSCalibratedWhiteColorSpace > ?00&%System0&%windowBackgroundColor0 &%Window0!&%Recycler Preferences! C C F@ F@%0"0#&%NSApplicationIcon&  D D0$ &0% &0&1NSMutableDictionary1 NSDictionary&0'&%Button50(&%NSOwner0)& % RecyclerPrefs0*& % MenuItem10+1 NSMenuItem0,&%11 pt0-&&&%% 0.& % TextField0/% B C- C A  C A& 00 &%0102&%Icon size: 48 x 48&&&&&&&&0%0304&%System05&%textBackgroundColor06407& % textColor08& % MenuItem2090:&%12 pt-&&%0;0<& % common_Nibble% 0=& % MenuItem30>0?&%13 pt0@&&&%% 0A&%Button0B% C B Bh A  Bh A& 0C &%0D0E&%Choose &&&&&&&&%0F&0G&&&&0H& % MenuItem40I0J&%14 pt0K&&&%%0L& % MenuItem50M0N&%15 pt0O&&&%%0P& % MenuItem60Q0R&%16 pt0S&&&%%0T&%MenuItem0U0V&%10 pt-&&%% 0W& % GormNSWindow0X&%Box0Y1NSBox% B B B B  B B& 0Z &0[ % @ @ B B  B B&0\ &0]0^& % Current color &&&&&&&& %%0_&%Matrix10`1NSMatrix% B B\ C A  C A& 0a &%0b0c& &&&&&&&&%% B A 0d0e&%System0f&%controlBackgroundColord0g& % NSButtonCell0h0i&%Radio0j0k&%common_RadioOff &&&&&&&&%0l&0m&0n0o&%common_RadioOn&&&%%0p &0q0r&%Bottomj &&&&&&&&%lmn&&&0s0t&%Rightj &&&&&&&&%lmn&&&q0u& % TextField10v% B B BX A  BX A& 0w &%0x0y& % Text size:&&&&&&&&0%0z0{&%System0|&%textBackgroundColor0}{0~& % textColor0&%Matrix0% C B B B  B B& 0 &%00& &&&&&&&&%% B A 00&%System0&%controlBackgroundColor0& % NSButtonCell00&%Radioj &&&&&&&&%0&0&n&&&%%0 &00&%Centerj &&&&&&&&%n&&&00&%Fitj &&&&&&&&%n&&&00&%Tilej &&&&&&&&%n&&&0&%Matrix20% B B B A  B A& 0 &%00& &&&&&&&&%% Bt A 00&%System0&%controlBackgroundColor0& % NSButtonCell00&%Radioj &&&&&&&&%0&0&n&&&%%0 &00&%Leftj &&&&&&&&%n&&&00&%Rightj &&&&&&&&%n&&&0& % TextField20% B B C A  C A& 0 &%00&%Label position:&&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor0& % TextField30% B C  B A  B A& 0 &%00&%Dock position:&&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor0&%Button10% C B Bh A  Bh A& 0 &%00&%Set &&&&&&&&%0&0&&&&0& % TextField40&%Slider01NSSlider% B C C A  C A& 0ñ &%01 NSSliderCell0ű&%0 01 NSNumber1!NSValued &&&&&&&&% A B@ ?%0DZ0ȱ& &&&&&&&&0%0ɱ0ʱ&%System0˱&%textBackgroundColor0̱0ͱ&%controlTextColor0α0ϱ&0б0ѱ&%common_SliderHoriz &&&&&&&&%%0ұ&%Button20ӱ% C BD Bh A  Bh A& 0Ա &%0ձ0ֱ&%Choose &&&&&&&&%0ױ&0ر&&&&0ٱ& % ImageView01" NSImageView% B B C B  C B& 0۱ &%01# NSImageCell &&&&&&&&%%% ? ?0ݱ&%GormNSPopUpButton01$ NSPopUpButton% C' B B A  B A& 0߱ &%01%NSPopUpButtonCell1&NSMenuItemCell0& &&&&&&&&01'NSMenu0&0 &U+9>IMQ%0&0&&&&99%%%%%0&%Button30% C A Bh A  Bh A& 0 &%00&%Set &&&&&&&&%0&0&&&&0&%Button40% C B B A  B A&0 &%00& % Use image &&&&&&&&%0&0&&&&0 &01(NSNibConnectorX0(A0(01)NSNibControlConnector0&%NSOwner0& % setColor:0(Ґ0(琐0(0(ِP)P& % setImage:P(P)P& % setUseImage:P(.P(P(ݐP(_P (P (TP (*P (8P (=P(HP(LP(PP)ݰP& % setTextSize:P)P&%setDockPosition:P('P(P1*NSNibOutletConnectorWP&%winP*'P&%dockButtP*P& % explLabelP)'P& % setDockable:P&gworkspace-1.1.0/Recycler/Resources/English.lproj/StartAppWin.gorm/0000755000175000001440000000000013214346550024541 5ustar multixusersgworkspace-1.1.0/Recycler/Resources/English.lproj/StartAppWin.gorm/data.classes0000644000175000001440000000045213214346550027032 0ustar multixusers{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; StartAppWin = { Actions = ( ); Outlets = ( win, startLabel, nameField, progInd ); Super = NSObject; }; }gworkspace-1.1.0/Recycler/Resources/English.lproj/StartAppWin.gorm/objects.gorm0000644000175000001440000000427313214346550027066 0ustar multixusersGNUstep archive00002c24:0000001a:0000003c:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder%  C Bl&% C D @01 NSView%  C Bl  C Bl&01 NSMutableArray1 NSArray&01NSProgressIndicator% A A0 Cz A  Cz A&0 & ?UUUUUU @I @Y0 1 NSTextField1 NSControl% A B BP A  BP A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 & % starting:0 1NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% Bx B CF A  CF A&0 &%00& % fswatcher &&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor00&%System0&%windowBackgroundColor0 &%Window0!&%Window0"&%Window ? B F@ F@%0#1NSImage0$&%NSApplicationIcon&  D D0% &0& &0'1NSMutableDictionary1 NSDictionary&0(&%NSOwner0)& % StartAppWin0*&%ProgressIndicator0+& % TextField 0,& % TextField10-& % GormNSWindow0. &0/1NSNibConnector-00&%NSOwner01*02+03,0041NSNibOutletConnector0-05&%win060+07& % startLabel080,09& % nameField0:0*0;&%progInd0<&gworkspace-1.1.0/Recycler/Resources/Recycler.tiff0000644000175000001440000002256013214346550021273 0ustar multixusersII*$(9((9((9((9(ƺƺƺƺƺƺƺƺkmdeRiR#*%#*%#*%(9((9(! & ƺƺƺƺƺƺL}PXU#*%#*%#*%(9((9((9((9((9(8E: & ƺƺƺƺ{|XU#*%(9(#*%(9((9((9((9((9(8E:=L@=L@ & ƺƺƺƺkmde#*%#*%#*%(9((9((9((9(=L@=L@=L@=L@RiR & ƺƺ{|kmkmdeRiR#*%#*%(9((9((9(8E:(9(=L@=L@=L@HYKHYKRiR!(9( & (9(=L@ƺƺ{|de{|deTsVTsVHYK(9((9((9((9(=L@=L@=L@HYKHYKHYKRiR:w@ & (9( & & (9({||}{|{|^w\^w\RiRRiR1N4 & /$(9((9(=L@=L@HYK=L@HYKHYKRiRHYKRiRHYK & !RiR(9((9({|dekmdeTsVTsVeneTsVRiR & (9(=L@=L@=L@HYKRiRHYKRiRIfKIfKIfKRiRTsVTsVIfK & (9(kmuvde^w\^w\eneTsVRiRIfKRiRE!(9((9(=L@=L@HYKHYKRiRHYKRiRRiRTsV^w\TsVHYK & (9({||}kmdeTsVTsVRiRTsVIfKTsVIfKIfK>eE & (9(=L@RiRHYKRiRIfKTsV^w\TsVTsVTsV^w\(9((9((9(^w\{|{|de^w\TsVRiRTsVRiRRiRRiRRiRE & (9(=L@HYKRiRHYKRiRRiRTsV^w\kmkmGvG!(9( & =L@^w\TsVRiRTsVIfKIfKIfKIfKIfK[cnHYKRiRIfKTsV^w\TsVdekmkmkm(9( & =L@RiRRiRRiRF]JRiRF]JE & & RiRRiRTsVRiRTsV^w\dekmkm(9((9((9(F]JIfKRiRIfKIfK & >eE(9( & =L@RiRIfKTsV^w\TsV^w\kmkmde=L@ & (9( & =L@RiRRiR & ! & & & ! & & & ! & & & ! & (9((9( & (9( & & [cn(9((9(=L@RiR & uvƺƺƺƺƺƺƺƺ=L@(9((9((9(HYKHYKRiRHYKHYK & & kmƺƺƺƺƺƺuy(9((9(=L@IfKIfKRiRIfKIfKIfK & HYK  ƺ(9((9((9((9(HYKHYKRiRHYKRiRHYKRiRRiRRiR=L@ & 8E:ƺ|}km & (9(=L@RiRIfKIfKIfKRiRIfKIfKRiRIfKRiRTsV & |}|}kmdeene & (9(RiRHYKRiRHYKRiRHYKRiRRiRTsVRiR^w\RiR^w\!=L@|}|}|}kmdeTsVTsV(9((9((9(IfKIfKRiRIfKTsVRiRTsVTsVdeTsVde^w\ & & uyllkmkmdededeTsVTsV^w\TsV^w\HYK(9(IfK^w\RiRTsVTsVdekmdekmkm|}de|}|}{|{|deTsV^w\RiRTsVRiRTsV!TsVRiR(9((9((9(HYKTsV^w\TsVdekm{||}{||}de^w\ & |}|}kmdedeTsVTsV^w\TsV^w\TsV(9( & & =L@(9(TsVTsVdekmkm|}|}kmdeeneQvU & =L@{|\zYdeTsVTsVRiR^w\^w\TsV(9( & (9(=L@{|{|km{|{|kmdeene^w\8E: & (9(TsVdeTsVTsV^w\TsV^w\TsV^w\=L@(9(TsVdekmkmkmdeTsVIfK=L@ & HYKTsV^w\TsVTsVRiRTsVRiR(9((9(HYK^w\TsV^w\^w\RiRIfKHYKHYK!(9(TsVTsVTsV^w\TsV^w\TsV=L@ƺ(9(TsVeneTsVIfKIfKIfK=L@=L@^w\^w\TsVRiR^w\8E:(9(8E:HYKHYKHYK(9(! & ^w\TsV^w\TsV^w\  & &  & EEEEE & (9( & (9((9((9((9((9( & & (9(HYKRiRTsVRiR(9(#*%#*%(9(8E:=L@=L@GZJGZJRiRHYKRiR!ƺƺƺ|}^w\TsVRiRHYK8E:(9((9((9( & TsV^w\TsV#*%(9((9(=L@=L@=L@GZJIfKIfKRiRIfK & =L@ƺƺƺ|}{|TsVIfKRiRHYK=L@(9((9( & uvTsV(9(#*%(9((9((9(=L@GZJ=L@GZJGZJRiRRiR^w\ & (9(ƺƺ|}hk^w\RiRRiRHYKHYK8E:(9((9( & (9(^w\ #*%(9((9(8E:=L@=L@GZJGZJRiRIfKTsVde & ̻ƺ̻ƺ{|deTsVTsVIfK=L@=L@(9((9( & (9(HYK#*%#*%(9(8E:8E:=L@GZJGZJRiRRiRTsV^w\de!(9(ƺƺƺ{|{|^w\TsVRiRHYK=L@(9((9( /$!(9(#*%(9((9(=L@=L@=L@GZJRiRIfKTsVTsVhkhk & ̻ƺuy|}hkTsVIfKRiRHYK=L@(9( /$(9( #*%(9((9(8E:=L@=L@GZJGZJRiRRiRde|}|} & ƺƺhk^w\^w\RiRRiR=L@=L@8E:(9( /$ & #*%(9((9(=L@=L@GZJGZJIfK^w\TsVhkuy |}uv^w\RiRIfKHYKHYK8E:=L@ /$ & (9((9(8E:GZJGZJRiRHYK^w\{||}(9(uv^w\RiRRiRHYKHYK8E:8E: /$ & =L@GZJIfKIfKTsV^w\uy & (9({|TsVTsVTsVHYKHYK=L@E & ! & & & ! & & & ! & & ^w\!(9(^w\TsVuv & & 00$ [$J%@$`%h%(R/opt/Surse/gnustep/CVS/usr-apps/gworkspace/Recycler/Resources/Images/copy_of_Recycler.tiffCreated with The GIMPHHgworkspace-1.1.0/Recycler/main.m0000644000175000001440000000541014751213523015774 0ustar multixusers/* main.m * * Copyright (C) 2004-20104Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2004 * * This file is part of the GNUstep Recycler application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import #import "Recycler.h" void createMenu(); int main(int argc, char **argv, char **env) { CREATE_AUTORELEASE_POOL (pool); Recycler *recycler = [Recycler recycler]; NSApplication *app = [NSApplication sharedApplication]; createMenu(); [app setDelegate: recycler]; [app run]; RELEASE (pool); return 0; } id addMenuItem(NSMenu *menu, NSString *str, NSString *comm, NSString *sel, NSString *key) { iditem = [menu addItemWithTitle: NSLocalizedString(str, comm) action: NSSelectorFromString(sel) keyEquivalent: key]; return item; } void createMenu() { NSMenu *mainMenu; NSMenu *info, *file, *edit; id menuItem; // Main mainMenu = AUTORELEASE ([[NSMenu alloc] initWithTitle: @"Recycler"]); // Info menuItem = addMenuItem(mainMenu, @"Info", @"", nil, @""); info = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: info forItem: menuItem]; addMenuItem(info, @"Info Panel...", @"", @"showInfo:", @""); addMenuItem(info, @"Preferences...", @"", @"showPreferences:", @""); addMenuItem(info, @"Help...", @"", nil, @"?"); // File menuItem = addMenuItem(mainMenu, @"File", @"", nil, @""); file = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: file forItem: menuItem]; addMenuItem(file, @"Empty Recycler", @"", @"emptyTrashFromMenu:", @""); // Edit menuItem = addMenuItem(mainMenu, @"Edit", @"", nil, @""); edit = AUTORELEASE ([NSMenu new]); [mainMenu setSubmenu: edit forItem: menuItem]; addMenuItem(edit, @"Paste", @"", @"paste:", @"v"); // Hide addMenuItem(mainMenu, @"Hide", @"", @"hide:", @"h"); // Quit addMenuItem(mainMenu, @"Quit", @"", @"terminate:", @""); [mainMenu update]; [[NSApplication sharedApplication] setMainMenu: mainMenu]; } gworkspace-1.1.0/TODO0000644000175000001440000000101213214346550013604 0ustar multixusers1- See InspectorViewer.m 2- See ThemeViewer.m 3- Fix scroll/refresh during File Operations 4- Add a cache system for Inspector ? 5- Add nice Icons 6- Rewrite/remove some Prefs 7- fix dameons and recycler under NetBSD 8- on icon click, if no fileviewer exists, a new one should be created like on mac 9- check ddbd connection died messages 10- check for code duplication (isDotFile everywhere) 11- make Dock placeable on all screen borders 12- make "classic" theme for dock draw real icons 13- make dock display real iconsgworkspace-1.1.0/Tools/0000755000175000001440000000000013231754602014222 5ustar multixusersgworkspace-1.1.0/Tools/GNUmakefile0000644000175000001440000000047113231754602016276 0ustar multixusersPACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = \ fswatcher \ searchtool \ lsfupdater \ ddbd \ wopen -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/ddbd/0000755000175000001440000000000014753472315015127 5ustar multixusersgworkspace-1.1.0/Tools/ddbd/DDBDirsManager.h0000644000175000001440000000320314751213523017774 0ustar multixusers/* DDBDirsManager.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DDBD_DIRS_MANAGER_H #define DDBD_DIRS_MANAGER_H #include #include "DBKBTree.h" @interface DDBDirsManager: NSObject { DBKBTree *tree; DBKVarLenRecordsFile *vlfile; NSString *dummyPaths[2]; NSNumber *dummyOffsets[2]; unsigned ulen; unsigned llen; NSFileManager *fm; } - (id)initWithBasePath:(NSString *)bpath; - (void)synchronize; - (void)addDirectory:(NSString *)dir; - (void)removeDirectory:(NSString *)dir; - (void)insertDirsFromPaths:(NSArray *)paths; - (void)removeDirsFromPaths:(NSArray *)paths; - (NSArray *)dirsFromPath:(NSString *)path; @end #endif // DDBD_DIRS_MANAGER_H gworkspace-1.1.0/Tools/ddbd/DDBDirsManager.m0000644000175000001440000001730514751213523020011 0ustar multixusers/* DDBDirsManager.m * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include "DBKBTreeNode.h" #include "DBKVarLenRecordsFile.h" #include "DDBDirsManager.h" #include "ddbd.h" @implementation DDBDirsManager - (void)dealloc { RELEASE (vlfile); RELEASE (tree); RELEASE (dummyPaths[0]); RELEASE (dummyPaths[1]); RELEASE (dummyOffsets[0]); RELEASE (dummyOffsets[1]); [super dealloc]; } - (id)initWithBasePath:(NSString *)bpath { self = [super init]; if (self) { NSString *path; ulen = sizeof(unsigned); llen = sizeof(unsigned long); path = [bpath stringByAppendingPathComponent: @"directories"]; vlfile = [[DBKVarLenRecordsFile alloc] initWithPath: path cacheLength: 10]; path = [bpath stringByAppendingPathComponent: @"directories.index"]; tree = [[DBKBTree alloc] initWithPath: path order: 16 delegate: self]; ASSIGN (dummyOffsets[0], [NSNumber numberWithUnsignedLong: 1L]); ASSIGN (dummyOffsets[1], [NSNumber numberWithUnsignedLong: 2L]); fm = [NSFileManager defaultManager]; [self addDirectory: pathsep()]; [self synchronize]; } return self; } - (void)synchronize { [vlfile flush]; [tree synchronize]; } - (void)addDirectory:(NSString *)dir { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *node; DESTROY (dummyPaths[1]); ASSIGN (dummyPaths[0], dir); [tree begin]; node = [tree insertKey: dummyOffsets[0]]; if (node) { NSData *data = [dir dataUsingEncoding: NSUTF8StringEncoding]; NSNumber *offset = [vlfile writeData: data]; [node replaceKey: dummyOffsets[0] withKey: offset]; } [tree end]; RELEASE (arp); } - (void)removeDirectory:(NSString *)dir { DBKBTreeNode *node; NSUInteger index; BOOL exists; DESTROY (dummyPaths[1]); ASSIGN (dummyPaths[0], dir); [tree begin]; node = [tree nodeOfKey: dummyOffsets[0] getIndex: &index didExist: &exists]; if (exists) { NSNumber *offset = [node keyAtIndex: index]; RETAIN (offset); [tree deleteKey: offset]; [vlfile deleteDataAtOffset: offset]; RELEASE (offset); } [tree end]; } - (void)insertDirsFromPaths:(NSArray *)paths { NSUInteger i; for (i = 0; i < [paths count]; i++) { CREATE_AUTORELEASE_POOL(arp); NSString *base = [paths objectAtIndex: i]; NSDictionary *attributes = [fm fileAttributesAtPath: base traverseLink: NO]; NSString *type = [attributes fileType]; if (type == NSFileTypeDirectory) { NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath: base]; IMP nxtImp = [enumerator methodForSelector: @selector(nextObject)]; while (1) { CREATE_AUTORELEASE_POOL(arp1); NSString *path = (*nxtImp)(enumerator, @selector(nextObject)); if (path) { if ([[enumerator fileAttributes] fileType] == NSFileTypeDirectory) { [self addDirectory: [base stringByAppendingPathComponent: path]]; } } else { RELEASE (arp1); break; } RELEASE (arp1); } [self addDirectory: base]; } DESTROY (arp); } [self synchronize]; } - (void)removeDirsFromPaths:(NSArray *)paths { NSUInteger i, j; for (i = 0; i < [paths count]; i++) { CREATE_AUTORELEASE_POOL(arp); NSString *base = [paths objectAtIndex: i]; NSArray *treepaths = [self dirsFromPath: base]; int count = [treepaths count]; if (count) { for (j = 0; j < [treepaths count]; j++) { [self removeDirectory: [treepaths objectAtIndex: j]]; } } RELEASE (arp); } [self synchronize]; } - (NSArray *)dirsFromPath:(NSString *)path { CREATE_AUTORELEASE_POOL(pool); NSMutableArray *paths = [NSMutableArray array]; NSMutableArray *toremove = [NSMutableArray array]; NSArray *keys = nil; NSUInteger i; [tree begin]; if ([path isEqual: pathsep()] == NO) { ASSIGN (dummyPaths[0], [path stringByAppendingString: pathsep()]); ASSIGN (dummyPaths[1], [path stringByAppendingString: @"0"]); } else { ASSIGN (dummyPaths[0], path); ASSIGN (dummyPaths[1], @"0"); } keys = [tree keysGreaterThenKey: dummyOffsets[0] andLesserThenKey: dummyOffsets[1]]; [tree end]; if (keys) { for (i = 0; i < [keys count]; i++) { CREATE_AUTORELEASE_POOL(arp); NSData *data = [vlfile dataAtOffset: [keys objectAtIndex: i]]; NSString *path = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; BOOL isdir; if ([fm fileExistsAtPath: path isDirectory: &isdir] &&isdir) { [paths addObject: path]; } else { [toremove addObject: path]; } RELEASE (path); RELEASE(arp); } } for (i = 0; i < [toremove count]; i++) { [self removeDirectory: [toremove objectAtIndex: i]]; } RETAIN (paths); RELEASE(pool); return [paths autorelease]; } // // DBKBTreeDelegate methods // - (unsigned long)nodesize { return 512; } - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen { NSMutableArray *keys = [NSMutableArray array]; NSRange range; unsigned kcount; unsigned long key; unsigned i; range = NSMakeRange(0, sizeof(unsigned)); [data getBytes: &kcount range: range]; range.location += sizeof(unsigned); range.length = sizeof(unsigned long); for (i = 0; i < kcount; i++) { [data getBytes: &key range: range]; [keys addObject: [NSNumber numberWithUnsignedLong: key]]; range.location += sizeof(unsigned long); } *dlen = range.location; return keys; } - (NSData *)dataFromKeys:(NSArray *)keys { NSMutableData *data = [NSMutableData dataWithCapacity: 1]; NSUInteger kcount = [keys count]; NSUInteger i; [data appendData: [NSData dataWithBytes: &kcount length: sizeof(unsigned)]]; for (i = 0; i < kcount; i++) { unsigned long kl = [[keys objectAtIndex: i] unsignedLongValue]; [data appendData: [NSData dataWithBytes: &kl length: sizeof(unsigned long)]]; } return data; } - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey { CREATE_AUTORELEASE_POOL(arp); NSString *astr; NSString *bstr; NSComparisonResult result; if ([akey isEqual: dummyOffsets[0]]) { astr = RETAIN (dummyPaths[0]); } else { NSData *data = [vlfile dataAtOffset: (NSNumber *)akey]; astr = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; } if ([bkey isEqual: dummyOffsets[0]]) { bstr = RETAIN (dummyPaths[0]); } else if ([bkey isEqual: dummyOffsets[1]]) { bstr = RETAIN (dummyPaths[1]); } else { NSData *data = [vlfile dataAtOffset: (NSNumber *)bkey]; bstr = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; } result = [astr compare: bstr]; RELEASE (astr); RELEASE (bstr); RELEASE (arp); return result; } @end gworkspace-1.1.0/Tools/ddbd/DDBMDStorage.h0000644000175000001440000000276214751213523017436 0ustar multixusers/* DDBMDStorage.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DDB_MD_STORAGE_H #define DDB_MD_STORAGE_H #include @interface DDBMDStorage: NSObject { NSString *basePath; unsigned depth; unsigned levcount; NSString *countpath; int *pnum; NSString *formstr; NSString *freepath; NSMutableArray *freeEntries; NSFileManager *fm; } - (id)initWithPath:(NSString *)apath levelCount:(unsigned)lcount dirsDepth:(unsigned)ddepth; - (NSString *)nextEntry; - (void)removeEntry:(NSString *)entry; - (void)removePath:(NSString *)path; - (NSString *)basePath; @end #endif // DDB_MD_STORAGE_H gworkspace-1.1.0/Tools/ddbd/DDBMDStorage.m0000644000175000001440000001717214751213523017444 0ustar multixusers/* DDBMDStorage.m * * Copyright (C) 2005-2012 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: June 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include "DDBMDStorage.h" #include "ddbd.h" @implementation DDBMDStorage - (void)dealloc { RELEASE (basePath); RELEASE (countpath); NSZoneFree ([self zone], pnum); RELEASE (formstr); RELEASE (freepath); RELEASE (freeEntries); [super dealloc]; } - (id)initWithPath:(NSString *)apath levelCount:(unsigned)lcount dirsDepth:(unsigned)ddepth { self = [super init]; if (self) { NSString *str; BOOL exists, isdir; unsigned i; ASSIGN (basePath, apath); levcount = lcount; depth = ddepth; ASSIGN (countpath, [basePath stringByAppendingPathComponent: @"count"]); pnum = NSZoneMalloc([self zone], sizeof(int) * depth); str = [[NSNumber numberWithUnsignedInt: (levcount - 1)] stringValue]; ASSIGN (formstr, ([NSString stringWithFormat: @"%%0%lui", (unsigned long)[str length]])); ASSIGN (freepath, [basePath stringByAppendingPathComponent: @"free"]); fm = [NSFileManager defaultManager]; exists = [fm fileExistsAtPath: basePath isDirectory: &isdir]; if (exists == NO) { if ([fm createDirectoryAtPath: basePath attributes: nil] == NO) { [NSException raise: NSInvalidArgumentException format: @"cannot create directory at: %@", basePath]; DESTROY (self); return nil; } isdir = YES; } if (isdir == NO) { [NSException raise: NSInvalidArgumentException format: @"%@ is not a directory!", basePath]; DESTROY (self); return nil; } if ([fm fileExistsAtPath: freepath]) { freeEntries = [NSMutableArray arrayWithContentsOfFile: freepath]; RETAIN (freeEntries); } else { freeEntries = [NSMutableArray new]; [freeEntries writeToFile: freepath atomically: YES]; } if ([fm fileExistsAtPath: countpath]) { NSString *countStr = [NSString stringWithContentsOfFile: countpath]; NSScanner *scanner = [NSScanner scannerWithString: countStr]; int j = 0; while ([scanner isAtEnd] == NO) { [scanner scanInt: &pnum[j]]; j++; } } else { NSMutableString *countStr = [NSMutableString string]; for (i = 0; i < (depth - 1); i++) { pnum[i] = 0; [countStr appendFormat: @"%i ", pnum[i]]; } pnum[depth - 1] = -1; [countStr appendFormat: @"%i ", pnum[depth - 1]]; [countStr writeToFile: countpath atomically: YES]; } } return self; } - (NSString *)nextEntry { CREATE_AUTORELEASE_POOL (arp); NSString *fullpath = [NSString stringWithString: basePath]; NSString *entry = [NSString string]; int count = [freeEntries count]; int i; if (count > 0) { NSArray *components = [freeEntries objectAtIndex: (count - 1)]; for (i = 0; i < depth; i++) { entry = [entry stringByAppendingPathComponent: [components objectAtIndex: i]]; if (i < (depth - 1)) { fullpath = [fullpath stringByAppendingPathComponent: [components objectAtIndex: i]]; if ([fm fileExistsAtPath: fullpath] == NO) { if ([fm createDirectoryAtPath: fullpath attributes: nil] == NO) { [NSException raise: NSInternalInconsistencyException format: @"cannot create %@", entry]; } } } } [freeEntries removeObjectAtIndex: (count - 1)]; [freeEntries writeToFile: freepath atomically: YES]; } else { BOOL full = YES; for (i = 0; i < depth; i++) { if (pnum[i] < (levcount - 1)) { full = NO; break; } } if (full == NO) { NSMutableString *countStr = [NSMutableString string]; int pos = depth - 1; while (pos >= 0) { pnum[pos]++; if (pnum[pos] == levcount) { if (pos == 0) { pnum[pos]--; [NSException raise: NSInternalInconsistencyException format: @"the directory is full!"]; RELEASE (arp); return nil; } else { pnum[pos] = 0; pos--; } } else { break; } } for (i = 0; i < depth; i++) { NSString *str = [NSString stringWithFormat: formstr, pnum[i]]; fullpath = [fullpath stringByAppendingPathComponent: str]; entry = [entry stringByAppendingPathComponent: str]; [countStr appendFormat: @"%i ", pnum[i]]; if (i < (depth - 1)) { if ([fm fileExistsAtPath: fullpath] == NO) { if ([fm createDirectoryAtPath: fullpath attributes: nil] == NO) { [NSException raise: NSInternalInconsistencyException format: @"cannot create %@", entry]; } } } } [countStr writeToFile: countpath atomically: YES]; } else { [NSException raise: NSInternalInconsistencyException format: @"the directory is full!"]; } } RETAIN (entry); RELEASE (arp); return [entry autorelease]; } - (void)removeEntry:(NSString *)entry { CREATE_AUTORELEASE_POOL (arp); NSArray *components = [entry pathComponents]; int count = [components count]; int i; if (count == depth) { NSString *lastdir = [NSString stringWithString: basePath]; NSString *prefix = [components objectAtIndex: (depth - 1)]; NSArray *contents; for (i = 0; i < (depth -1); i++) { lastdir = [lastdir stringByAppendingPathComponent: [components objectAtIndex: i]]; } contents = [fm directoryContentsAtPath: lastdir]; for (i = 0; i < [contents count]; i++) { NSString *fname = [contents objectAtIndex: i]; if ([fname hasPrefix: prefix]) { NSString *rmpath = [lastdir stringByAppendingPathComponent: fname]; if ([fm removeFileAtPath: rmpath handler: nil] == NO) { [NSException raise: NSInternalInconsistencyException format: @"cannot remove %@", rmpath]; } } } [freeEntries addObject: components]; [freeEntries writeToFile: freepath atomically: YES]; } else { [NSException raise: NSInvalidArgumentException format: @"cannot remove %@", entry]; } RELEASE (arp); } - (void)removePath:(NSString *)path { CREATE_AUTORELEASE_POOL (arp); NSString *fullpath = [basePath stringByAppendingPathComponent: path]; BOOL exists, isdir; exists = [fm fileExistsAtPath: fullpath isDirectory: &isdir]; if ((exists && (isdir == NO)) && subpath(basePath, fullpath)) { [fm removeFileAtPath: fullpath handler: nil]; } else { [NSException raise: NSInvalidArgumentException format: @"cannot remove %@", path]; } RELEASE (arp); } - (NSString *)basePath { return basePath; } @end gworkspace-1.1.0/Tools/ddbd/DDBPathsManager.h0000644000175000001440000000541714751213523020163 0ustar multixusers/* DDBPathsManager.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DDBD_PATHS_MANAGER_H #define DDBD_PATHS_MANAGER_H #include #include "DBKBTree.h" @class DDBPath; @class DDBMDStorage; @interface DDBPathsManager: NSObject { DDBMDStorage *mdstorage; DBKBTree *tree; DBKVarLenRecordsFile *vlfile; DDBPath *dummyPaths[2]; NSNumber *dummyOffsets[2]; NSMutableDictionary *mdmodules; unsigned ulen; unsigned llen; NSFileManager *fm; } - (id)initWithBasePath:(NSString *)bpath; - (void)synchronize; - (DDBPath *)ddbpathForPath:(NSString *)path; - (DDBPath *)addPath:(NSString *)path; - (void)removePath:(NSString *)path; - (void)setMetadata:(id)mdata ofType:(NSString *)mdtype forPath:(NSString *)apath; - (id)metadataOfType:(NSString *)mdtype forPath:(NSString *)apath; - (NSArray *)metadataForPath:(NSString *)apath; - (NSTimeInterval)timestampOfPath:(NSString *)path; - (void)metadataDidChangeForPath:(DDBPath *)ddbpath; - (void)duplicateDataOfPath:(NSString *)srcpath forPath:(NSString *)dstpath; - (void)duplicateDataOfPaths:(NSArray *)srcpaths forPaths:(NSArray *)dstpaths; - (NSArray *)subpathsFromPath:(NSString *)path; - (id)mdmoduleForMDType:(NSString *)type; @end @interface DDBPath: NSObject { NSString *path; NSString *mdpath; NSTimeInterval timestamp; } - (id)initForPath:(NSString *)apath; - (id)initWithCoder:(NSCoder *)decoder; - (void)encodeWithCoder:(NSCoder *)encoder; - (void)setPath:(NSString *)apath; - (NSString *)path; - (void)setMDPath:(NSString *)apath; - (NSString *)mdpath; - (void)setTimestamp:(NSTimeInterval)stamp; - (NSTimeInterval)timestamp; - (NSComparisonResult)compare:(DDBPath *)apath; @end #endif // DDBD_PATHS_MANAGER_H gworkspace-1.1.0/Tools/ddbd/DDBPathsManager.m0000644000175000001440000003660114751213523020167 0ustar multixusers/* DDBPathsManager.m * * Copyright (C) 2005-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "DBKBTreeNode.h" #import "DBKVarLenRecordsFile.h" #import "DDBPathsManager.h" #import "DDBMDStorage.h" #import "MDModulesProtocol.h" #import "ddbd.h" @implementation DDBPathsManager - (void)dealloc { RELEASE (mdstorage); RELEASE (vlfile); RELEASE (tree); RELEASE (dummyPaths[0]); RELEASE (dummyPaths[1]); RELEASE (dummyOffsets[0]); RELEASE (dummyOffsets[1]); RELEASE (mdmodules); [super dealloc]; } - (id)initWithBasePath:(NSString *)bpath { self = [super init]; if (self) { NSEnumerator *enumerator; NSString *path; NSBundle *bundle; NSString *bundlesDir; NSArray *bnames; NSUInteger i; ulen = sizeof(unsigned); llen = sizeof(unsigned long); path = [bpath stringByAppendingPathComponent: @"paths"]; vlfile = [[DBKVarLenRecordsFile alloc] initWithPath: path cacheLength: 10]; path = [bpath stringByAppendingPathComponent: @"paths.index"]; tree = [[DBKBTree alloc] initWithPath: path order: 16 delegate: self]; path = [bpath stringByAppendingPathComponent: @"docs"]; mdstorage = [[DDBMDStorage alloc] initWithPath: path levelCount: 100 dirsDepth: 3]; ASSIGN (dummyOffsets[0], [NSNumber numberWithUnsignedLong: 1L]); ASSIGN (dummyOffsets[1], [NSNumber numberWithUnsignedLong: 2L]); fm = [NSFileManager defaultManager]; mdmodules = [NSMutableDictionary new]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; bnames = [fm directoryContentsAtPath: bundlesDir]; for (i = 0; i < [bnames count]; i++) { NSString *bname = [bnames objectAtIndex: i]; if ([[bname pathExtension] isEqual: @"mdm"]) { NSString *bpath; bpath = [bundlesDir stringByAppendingPathComponent: bname]; bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; if ([principalClass conformsToProtocol: @protocol(MDModulesProtocol)]) { CREATE_AUTORELEASE_POOL (pool); id module = [[principalClass alloc] init]; [mdmodules setObject: module forKey: [module mdtype]]; RELEASE ((id)module); RELEASE (pool); } } } } } [self addPath: pathsep()]; [self synchronize]; } return self; } - (void)synchronize { [vlfile flush]; [tree synchronize]; } - (DDBPath *)ddbpathForPath:(NSString *)path { CREATE_AUTORELEASE_POOL(arp); DDBPath *ddbpath = nil; DBKBTreeNode *node; BOOL exists; NSUInteger index; DESTROY (dummyPaths[1]); DESTROY (dummyPaths[0]); dummyPaths[0] = [[DDBPath alloc] initForPath: path]; [tree begin]; node = [tree nodeOfKey: dummyOffsets[0] getIndex: &index didExist: &exists]; if (exists) { NSNumber *offset = [node keyAtIndex: index]; NSData *data = [vlfile dataAtOffset: offset]; ddbpath = [NSUnarchiver unarchiveObjectWithData: data]; } [tree end]; DESTROY (dummyPaths[0]); RETAIN (ddbpath); RELEASE (arp); return AUTORELEASE (ddbpath); } - (DDBPath *)addPath:(NSString *)path { CREATE_AUTORELEASE_POOL(arp); DDBPath *ddbpath = nil; DBKBTreeNode *node; DESTROY (dummyPaths[1]); DESTROY (dummyPaths[0]); dummyPaths[0] = [[DDBPath alloc] initForPath: path]; [tree begin]; node = [tree insertKey: dummyOffsets[0]]; if (node) { NSString *mdpath = [mdstorage nextEntry]; NSTimeInterval stamp = [[NSDate date] timeIntervalSinceReferenceDate]; NSData *data; NSNumber *offset; [dummyPaths[0] setMDPath: mdpath]; [dummyPaths[0] setTimestamp: stamp]; data = [NSArchiver archivedDataWithRootObject: dummyPaths[0]]; offset = [vlfile writeData: data]; [node replaceKey: dummyOffsets[0] withKey: offset]; [self synchronize]; ddbpath = dummyPaths[0]; RETAIN (ddbpath); } [tree end]; DESTROY (dummyPaths[0]); RELEASE (arp); return AUTORELEASE (ddbpath); } - (void)removePath:(NSString *)path { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *node; NSUInteger index; BOOL exists; DESTROY (dummyPaths[1]); DESTROY (dummyPaths[0]); dummyPaths[0] = [[DDBPath alloc] initForPath: path]; [tree begin]; node = [tree nodeOfKey: dummyOffsets[0] getIndex: &index didExist: &exists]; if (exists) { NSNumber *offset = [node keyAtIndex: index]; NSData *data = [vlfile dataAtOffset: offset]; DDBPath *ddbpath = [NSUnarchiver unarchiveObjectWithData: data]; NSString *mdpath = [ddbpath mdpath]; RETAIN (offset); [tree deleteKey: offset]; [vlfile deleteDataAtOffset: offset]; [mdstorage removeEntry: mdpath]; RELEASE (offset); } [tree end]; DESTROY (dummyPaths[0]); RELEASE (arp); [self synchronize]; } - (void)setMetadata:(id)mdata ofType:(NSString *)mdtype forPath:(NSString *)apath { CREATE_AUTORELEASE_POOL(arp); DDBPath *ddbpath = [self ddbpathForPath: apath]; NSString *path = [mdstorage basePath]; id module = [self mdmoduleForMDType: mdtype]; if (ddbpath == nil) { ddbpath = [self addPath: apath]; } path = [path stringByAppendingPathComponent: [ddbpath mdpath]]; [module saveData: mdata withBasePath: path]; [self metadataDidChangeForPath: ddbpath]; if ([apath isEqual: pathsep()] == NO) { NSString *parent = [apath stringByDeletingLastPathComponent]; DDBPath *ppath = [self ddbpathForPath: parent]; if (ppath == nil) { [self addPath: parent]; } else { [self metadataDidChangeForPath: ppath]; } } [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GSMetadataUserAttributeModifiedNotification" object: apath userInfo: nil]; RELEASE (arp); } - (id)metadataOfType:(NSString *)mdtype forPath:(NSString *)apath { DDBPath *ddbpath = [self ddbpathForPath: apath]; id mddata = nil; if (ddbpath) { id module = [self mdmoduleForMDType: mdtype]; NSString *path = [mdstorage basePath]; path = [path stringByAppendingPathComponent: [ddbpath mdpath]]; mddata = [module dataWithBasePath: path]; } return mddata; } - (NSArray *)metadataForPath:(NSString *)apath { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *alldata = [NSMutableArray array]; NSArray *types = [mdmodules allKeys]; NSUInteger i; for (i = 0; i < [types count]; i++) { NSString *type = [types objectAtIndex: i]; id data = [self metadataOfType: type forPath: apath]; if (data) { NSDictionary *dict; dict = [NSDictionary dictionaryWithObjectsAndKeys: type, @"key", data, @"attribute", nil]; [alldata addObject: dict]; } } [alldata retain]; RELEASE (arp); return [alldata autorelease]; } - (NSTimeInterval)timestampOfPath:(NSString *)path { DDBPath *ddbpath = [self ddbpathForPath: path]; if (ddbpath) { return [ddbpath timestamp]; } return 0.0; } - (void)metadataDidChangeForPath:(DDBPath *)ddbpath { CREATE_AUTORELEASE_POOL(arp); DBKBTreeNode *node; NSUInteger index; BOOL exists; DESTROY (dummyPaths[1]); ASSIGN (dummyPaths[0], ddbpath); [tree begin]; node = [tree nodeOfKey: dummyOffsets[0] getIndex: &index didExist: &exists]; if (exists) { NSNumber *offset = [node keyAtIndex: index]; NSTimeInterval stamp = [[NSDate date] timeIntervalSinceReferenceDate]; NSData *data; [ddbpath setTimestamp: stamp]; data = [NSArchiver archivedDataWithRootObject: ddbpath]; [vlfile writeData: data atOffset: offset]; [self synchronize]; } [tree end]; RELEASE (arp); } - (void)duplicateDataOfPath:(NSString *)srcpath forPath:(NSString *)dstpath { NSArray *types = [mdmodules allKeys]; NSUInteger i; for (i = 0; i < [types count]; i++) { NSString *type = [types objectAtIndex: i]; id module = [mdmodules objectForKey: type]; if ([module duplicable]) { id mddata = [self metadataOfType: type forPath: srcpath]; if (mddata) { [self setMetadata: mddata ofType: type forPath: dstpath]; } } } } - (void)duplicateDataOfPaths:(NSArray *)srcpaths forPaths:(NSArray *)dstpaths { NSUInteger i, j; for (i = 0; i < [srcpaths count]; i++) { CREATE_AUTORELEASE_POOL(arp); NSString *srcpath = [srcpaths objectAtIndex: i]; NSString *dstpath = [dstpaths objectAtIndex: i]; NSDictionary *attrs = [fm fileAttributesAtPath: dstpath traverseLink: NO]; DDBPath *ddbpath = [self ddbpathForPath: srcpath]; if (ddbpath) { [self duplicateDataOfPath: srcpath forPath: dstpath]; } if ([attrs fileType] == NSFileTypeDirectory) { NSArray *subpaths = [self subpathsFromPath: srcpath]; for (j = 0; j < [subpaths count]; j++) { NSString *subpath = [[subpaths objectAtIndex: j] path]; NSString *newpath = removePrefix(subpath, srcpath); newpath = [dstpath stringByAppendingPathComponent: newpath]; if ([fm fileExistsAtPath: newpath]) { [self duplicateDataOfPath: subpath forPath: newpath]; } } } RELEASE (arp); } } - (NSArray *)subpathsFromPath:(NSString *)path { CREATE_AUTORELEASE_POOL(pool); NSMutableArray *paths = [NSMutableArray array]; NSMutableArray *toremove = [NSMutableArray array]; NSArray *keys = nil; NSString *dmstr[2]; NSUInteger i; [tree begin]; if ([path isEqual: pathsep()] == NO) { dmstr[0] = [path stringByAppendingString: pathsep()]; dmstr[1] = [path stringByAppendingString: @"0"]; } else { dmstr[0] = path; dmstr[1] = @"0"; } dummyPaths[0] = [[DDBPath alloc] initForPath: dmstr[0]]; dummyPaths[1] = [[DDBPath alloc] initForPath: dmstr[1]]; keys = [tree keysGreaterThenKey: dummyOffsets[0] andLesserThenKey: dummyOffsets[1]]; [tree end]; if (keys) { for (i = 0; i < [keys count]; i++) { CREATE_AUTORELEASE_POOL(arp); NSData *data = [vlfile dataAtOffset: [keys objectAtIndex: i]]; DDBPath *ddbpath = [NSUnarchiver unarchiveObjectWithData: data]; if ([fm fileExistsAtPath: [ddbpath path]]) { [paths addObject: ddbpath]; } else { [toremove addObject: [ddbpath path]]; } RELEASE(arp); } } for (i = 0; i < [toremove count]; i++) { [self removePath: [toremove objectAtIndex: i]]; } RETAIN (paths); RELEASE(pool); return [paths autorelease]; } - (id)mdmoduleForMDType:(NSString *)type { return [mdmodules objectForKey: type]; } // // DBKBTreeDelegate methods // - (unsigned long)nodesize { return 512; } - (NSArray *)keysFromData:(NSData *)data withLength:(unsigned *)dlen { NSMutableArray *keys = [NSMutableArray array]; NSRange range; unsigned kcount; unsigned long key; NSUInteger i; range = NSMakeRange(0, sizeof(unsigned)); [data getBytes: &kcount range: range]; range.location += sizeof(unsigned); range.length = sizeof(unsigned long); for (i = 0; i < kcount; i++) { [data getBytes: &key range: range]; [keys addObject: [NSNumber numberWithUnsignedLong: key]]; range.location += sizeof(unsigned long); } *dlen = range.location; return keys; } - (NSData *)dataFromKeys:(NSArray *)keys { NSMutableData *data = [NSMutableData dataWithCapacity: 1]; unsigned kcount = [keys count]; NSUInteger i; [data appendData: [NSData dataWithBytes: &kcount length: sizeof(unsigned)]]; for (i = 0; i < kcount; i++) { unsigned long kl = [[keys objectAtIndex: i] unsignedLongValue]; [data appendData: [NSData dataWithBytes: &kl length: sizeof(unsigned long)]]; } return data; } - (NSComparisonResult)compareNodeKey:(id)akey withKey:(id)bkey { CREATE_AUTORELEASE_POOL(arp); DDBPath *apath; DDBPath *bpath; NSComparisonResult result; if ([akey isEqual: dummyOffsets[0]]) { apath = RETAIN (dummyPaths[0]); } else { NSData *data = [vlfile dataAtOffset: (NSNumber *)akey]; apath = [NSUnarchiver unarchiveObjectWithData: data]; } if ([bkey isEqual: dummyOffsets[0]]) { bpath = dummyPaths[0]; } else if ([bkey isEqual: dummyOffsets[1]]) { bpath = dummyPaths[1]; } else { NSData *data = [vlfile dataAtOffset: (NSNumber *)bkey]; bpath = [NSUnarchiver unarchiveObjectWithData: data]; } result = [apath compare: bpath]; RELEASE (arp); return result; } @end @implementation DDBPath - (void)dealloc { RELEASE (path); RELEASE (mdpath); [super dealloc]; } - (id)initForPath:(NSString *)apath { self = [super init]; if (self) { ASSIGN (path, apath); mdpath = nil; timestamp = 0.0; } return self; } - (id)initWithCoder:(NSCoder *)decoder { self = [super init]; if (self) { if ([decoder allowsKeyedCoding]) { ASSIGN (path, [decoder decodeObjectForKey: @"path"]); ASSIGN (mdpath, [decoder decodeObjectForKey: @"mdpath"]); timestamp = [decoder decodeDoubleForKey: @"timestamp"]; } else { ASSIGN (path, [decoder decodeObject]); ASSIGN (mdpath, [decoder decodeObject]); [decoder decodeValueOfObjCType: @encode(double) at: ×tamp]; } } return self; } - (void)encodeWithCoder:(NSCoder *)encoder { if ([encoder allowsKeyedCoding]) { [encoder encodeObject: path forKey: @"path"]; [encoder encodeObject: mdpath forKey: @"mdpath"]; [encoder encodeDouble: timestamp forKey: @"timestamp"]; } else { [encoder encodeObject: path]; [encoder encodeObject: mdpath]; [encoder encodeValueOfObjCType: @encode(double) at: ×tamp]; } } - (NSUInteger)hash { return [path hash]; } - (BOOL)isEqual:(id)other { if (other == self) { return YES; } if ([other isKindOfClass: [DDBPath class]]) { return [path isEqual: [other path]]; } return NO; } - (void)setPath:(NSString *)apath { ASSIGN (path, apath); } - (NSString *)path { return path; } - (void)setMDPath:(NSString *)apath { ASSIGN (mdpath, apath); } - (NSString *)mdpath { return mdpath; } - (void)setTimestamp:(NSTimeInterval)stamp { timestamp = stamp; } - (NSTimeInterval)timestamp { return timestamp; } - (NSComparisonResult)compare:(DDBPath *)apath { return [path compare: [apath path]]; } @end gworkspace-1.1.0/Tools/ddbd/GNUmakefile0000644000175000001440000000077513231754602017202 0ustar multixusers PACKAGE_NEEDS_CONFIGURE = YES PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = MDModules # The application to be compiled TOOL_NAME = ddbd ddbd_OBJC_FILES = ddbd.m \ DDBPathsManager.m \ DDBDirsManager.m \ DDBMDStorage.m ddbd_TOOL_LIBS += -lDBKit ddbd_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/ddbd/GNUmakefile.postamble0000644000175000001440000000120013231754602021147 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Tools/ddbd/GNUmakefile.preamble0000644000175000001440000000104213670116055020755 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -IMDModules ADDITIONAL_INCLUDE_DIRS += -I../../DBKit ADDITIONAL_INCLUDE_DIRS += -I../../GWorkspace # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += ADDITIONAL_LIB_DIRS += -L../../DBKit/$(GNUSTEP_OBJ_DIR) gworkspace-1.1.0/Tools/ddbd/MDModules/0000755000175000001440000000000014751213523016750 5ustar multixusersgworkspace-1.1.0/Tools/ddbd/MDModules/GNUmakefile0000644000175000001440000000036713231754602021030 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = \ MDModuleAnnotations -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/ddbd/MDModules/GNUmakefile.postamble0000644000175000001440000000116513214346550023012 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f TAGS # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Tools/ddbd/MDModules/GNUmakefile.preamble0000644000175000001440000000106013214346550022605 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Tools/ddbd/MDModules/MDModuleAnnotations/0000755000175000001440000000000014753472315022644 5ustar multixusersgworkspace-1.1.0/Tools/ddbd/MDModules/MDModuleAnnotations/GNUmakefile0000644000175000001440000000056113231754602024710 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = MDModuleAnnotations BUNDLE_EXTENSION = .mdm OBJCFLAGS += -Wall MDModuleAnnotations_OBJC_FILES = MDModuleAnnotations.m MDModuleAnnotations_PRINCIPAL_CLASS = MDModuleAnnotations -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/ddbd/MDModules/MDModuleAnnotations/GNUmakefile.postamble0000644000175000001440000000117513214346550026677 0ustar multixusers # Things to do before compiling #before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning #after-distclean:: # rm -f config.h TAGS # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Tools/ddbd/MDModules/MDModuleAnnotations/GNUmakefile.preamble0000644000175000001440000000112013214346550026466 0ustar multixusers # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I.. ADDITIONAL_INCLUDE_DIRS += -I../.. # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += gworkspace-1.1.0/Tools/ddbd/MDModules/MDModuleAnnotations/MDModuleAnnotations.m0000644000175000001440000000373114751213523026702 0ustar multixusers/* MDModuleAnnotations.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #include #include "MDModulesProtocol.h" @interface MDModuleAnnotations: NSObject { NSString *mdtype; NSString *extension; NSFileManager *fm; } @end @implementation MDModuleAnnotations - (void)dealloc { RELEASE (mdtype); RELEASE (extension); [super dealloc]; } - (id)init { self = [super init]; if (self) { ASSIGN (mdtype, @"GSMDItemFinderComment"); ASSIGN (extension, @"annotations"); fm = [NSFileManager defaultManager]; } return self; } - (NSString *)mdtype { return mdtype; } - (BOOL)duplicable { return YES; } - (void)saveData:(id)mdata withBasePath:(NSString *)bpath { NSString *path = [bpath stringByAppendingPathExtension: extension]; [(NSString *)mdata writeToFile: path atomically: YES]; } - (id)dataWithBasePath:(NSString *)bpath { NSString *path = [bpath stringByAppendingPathExtension: extension]; if ([fm fileExistsAtPath: path]) { return [NSString stringWithContentsOfFile: path]; } return nil; } @end gworkspace-1.1.0/Tools/ddbd/MDModules/MDModulesProtocol.h0000644000175000001440000000225614751213523022501 0ustar multixusers/* MDModulesProtocol.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: July 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef MD_MODULES_PROTOCOL_H #define MD_MODULES_PROTOCOL_H @protocol MDModulesProtocol - (NSString *)mdtype; - (BOOL)duplicable; - (void)saveData:(id)mdata withBasePath:(NSString *)bpath; - (id)dataWithBasePath:(NSString *)bpath; @end #endif // MD_MODULES_PROTOCOL_H gworkspace-1.1.0/Tools/ddbd/ddbd.h0000644000175000001440000000440114751213523016164 0ustar multixusers/* ddbd.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef DDBD_H #define DDBD_H #import @protocol DDBdProtocol - (BOOL)dbactive; - (oneway void)insertPath:(NSString *)path; - (oneway void)removePath:(NSString *)path; - (void)insertDirectoryTreesFromPaths:(NSData *)info; - (void)removeTreesFromPaths:(NSData *)info; - (NSData *)directoryTreeFromPath:(NSString *)apath; - (NSArray *)userMetadataForPath:(NSString *)apath; - (NSString *)annotationsForPath:(NSString *)path; - (oneway void)setAnnotations:(NSString *)annotations forPath:(NSString *)path; - (NSTimeInterval)timestampOfPath:(NSString *)path; - (oneway void)fileSystemDidChange:(NSData *)info; - (oneway void)synchronize; @end @interface DDBd: NSObject { NSString *dbdir; NSConnection *conn; NSNotificationCenter *nc; } - (void)connectionBecameInvalid:(NSNotification *)notification; - (void)threadWillExit:(NSNotification *)notification; @end @interface DBUpdater: NSObject { NSDictionary *updinfo; } + (void)updaterForTask:(NSDictionary *)info; - (void)setUpdaterTask:(NSDictionary *)info; - (void)insertTrees; - (void)removeTrees; - (void)fileSystemDidChange; @end BOOL subpath(NSString *p1, NSString *p2); NSString *pathsep(void); NSString *removePrefix(NSString *path, NSString *prefix); #endif // DDBD_H gworkspace-1.1.0/Tools/ddbd/ddbd.m0000644000175000001440000003237214751213523016201 0ustar multixusers/* ddbd.m * * Copyright (C) 2004-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Riccardo Mottola * Date: February 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import "DBKBTreeNode.h" #import "DBKVarLenRecordsFile.h" #import "ddbd.h" #import "DDBPathsManager.h" #import "DDBDirsManager.h" #include "config.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) enum { DDBdInsertTreeUpdate, DDBdRemoveTreeUpdate, DDBdFileOperationUpdate }; static DDBPathsManager *pathsManager = nil; static NSRecursiveLock *pathslock = nil; static DDBDirsManager *dirsManager = nil; static NSRecursiveLock *dirslock = nil; static NSFileManager *fm = nil; static BOOL auto_stop = NO; /* Should we shut down when unused? */ @implementation DDBd - (void)dealloc { if (conn) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; } RELEASE (dbdir); [super dealloc]; } - (id)init { self = [super init]; if (self) { NSString *basepath; BOOL isdir; fm = [NSFileManager defaultManager]; basepath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; ASSIGN (dbdir, [basepath stringByAppendingPathComponent: @"ddbd"]); if (([fm fileExistsAtPath: dbdir isDirectory: &isdir] &isdir) == NO) { if ([fm createDirectoryAtPath: dbdir attributes: nil] == NO) { NSLog(@"unable to create: %@", dbdir); DESTROY (self); return self; } } nc = [NSNotificationCenter defaultCenter]; conn = [NSConnection defaultConnection]; [conn setRootObject: self]; [conn setDelegate: self]; if ([conn registerName: @"ddbd"] == NO) { NSLog(@"unable to register with name server - quitting."); DESTROY (self); return self; } [nc addObserver: self selector: @selector(connectionBecameInvalid:) name: NSConnectionDidDieNotification object: conn]; [nc addObserver: self selector: @selector(threadWillExit:) name: NSThreadWillExitNotification object: nil]; pathsManager = [[DDBPathsManager alloc] initWithBasePath: dbdir]; pathslock = [NSRecursiveLock new]; dirsManager = [[DDBDirsManager alloc] initWithBasePath: dbdir]; dirslock = [NSRecursiveLock new]; NSLog(@"ddbd started"); } return self; } - (BOOL)dbactive { return YES; } - (oneway void)insertPath:(NSString *)path { NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: NO]; if (attributes) { [pathslock lock]; [pathsManager addPath: path]; [pathslock unlock]; if ([attributes fileType] == NSFileTypeDirectory) { [dirslock lock]; [dirsManager addDirectory: path]; [dirslock unlock]; } } } - (oneway void)removePath:(NSString *)path { [pathslock lock]; [pathsManager removePath: path]; [pathslock unlock]; [dirslock lock]; [dirsManager removeDirectory: path]; [dirslock unlock]; } - (void)insertDirectoryTreesFromPaths:(NSData *)info { NSArray *paths = [NSUnarchiver unarchiveObjectWithData: info]; NSMutableDictionary *updaterInfo = [NSMutableDictionary dictionary]; NSDictionary *dict = [NSDictionary dictionaryWithObject: paths forKey: @"paths"]; [updaterInfo setObject: [NSNumber numberWithInt: DDBdInsertTreeUpdate] forKey: @"type"]; [updaterInfo setObject: dict forKey: @"taskdict"]; NS_DURING { [NSThread detachNewThreadSelector: @selector(updaterForTask:) toTarget: [DBUpdater class] withObject: updaterInfo]; } NS_HANDLER { NSLog(@"A fatal error occurred while detaching the thread!"); } NS_ENDHANDLER } - (void)removeTreesFromPaths:(NSData *)info { NSArray *paths = [NSUnarchiver unarchiveObjectWithData: info]; NSMutableDictionary *updaterInfo = [NSMutableDictionary dictionary]; NSDictionary *dict = [NSDictionary dictionaryWithObject: paths forKey: @"paths"]; [updaterInfo setObject: [NSNumber numberWithInt: DDBdRemoveTreeUpdate] forKey: @"type"]; [updaterInfo setObject: dict forKey: @"taskdict"]; NS_DURING { [NSThread detachNewThreadSelector: @selector(updaterForTask:) toTarget: [DBUpdater class] withObject: updaterInfo]; } NS_HANDLER { NSLog(@"A fatal error occurred while detaching the thread!"); } NS_ENDHANDLER } - (NSData *)directoryTreeFromPath:(NSString *)apath { NSArray *directories; NSData *data = nil; [dirslock lock]; directories = [dirsManager dirsFromPath: apath]; [dirslock unlock]; if ([directories count]) { data = [NSArchiver archivedDataWithRootObject: directories]; } return data; } - (NSArray *)userMetadataForPath:(NSString *)apath { NSArray *usrdata = nil; [pathslock lock]; usrdata = [pathsManager metadataForPath: apath]; [pathslock unlock]; return usrdata; } - (NSString *)annotationsForPath:(NSString *)path { NSString *annotations = nil; [pathslock lock]; annotations = [pathsManager metadataOfType: @"GSMDItemFinderComment" forPath: path]; [pathslock unlock]; return annotations; } - (oneway void)setAnnotations:(NSString *)annotations forPath:(NSString *)path { [pathslock lock]; [pathsManager setMetadata: annotations ofType: @"GSMDItemFinderComment" forPath: path]; [pathslock unlock]; } - (NSTimeInterval)timestampOfPath:(NSString *)path { NSTimeInterval interval; [pathslock lock]; interval = [pathsManager timestampOfPath: path]; [pathslock unlock]; return interval; } - (oneway void)fileSystemDidChange:(NSData *)info { NSDictionary *dict = [NSUnarchiver unarchiveObjectWithData: info]; NSMutableDictionary *updaterInfo = [NSMutableDictionary dictionary]; [updaterInfo setObject: [NSNumber numberWithInt: DDBdFileOperationUpdate] forKey: @"type"]; [updaterInfo setObject: dict forKey: @"taskdict"]; NS_DURING { [NSThread detachNewThreadSelector: @selector(updaterForTask:) toTarget: [DBUpdater class] withObject: updaterInfo]; } NS_HANDLER { NSLog(@"A fatal error occurred while detaching the thread!"); } NS_ENDHANDLER } - (oneway void)synchronize { [pathslock lock]; [pathsManager synchronize]; [pathslock unlock]; [dirslock lock]; [dirsManager synchronize]; [dirslock unlock]; } - (void)connectionBecameInvalid:(NSNotification *)notification { id connection = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; if (connection == conn) { NSLog(@"argh - ddbd root connection has been destroyed."); exit(EXIT_FAILURE); } else if (auto_stop == YES) { NSLog(@"ddbd: connection became invalid, shutting down"); exit(EXIT_SUCCESS); } } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; { [nc addObserver: self selector: @selector(connectionBecameInvalid:) name: NSConnectionDidDieNotification object: newConn]; [newConn setDelegate: self]; return YES; } - (void)threadWillExit:(NSNotification *)notification { GWDebugLog(@"db update done"); } @end @implementation DBUpdater - (void)dealloc { RELEASE (updinfo); [super dealloc]; } + (void)updaterForTask:(NSDictionary *)info { CREATE_AUTORELEASE_POOL(arp); DBUpdater *updater = [[DBUpdater alloc] init]; [updater setUpdaterTask: info]; RELEASE (updater); RELEASE (arp); } - (void)setUpdaterTask:(NSDictionary *)info { NSDictionary *dict = [info objectForKey: @"taskdict"]; int type = [[info objectForKey: @"type"] intValue]; ASSIGN (updinfo, dict); GWDebugLog(@"starting db update"); switch(type) { case DDBdInsertTreeUpdate: [self insertTrees]; break; case DDBdRemoveTreeUpdate: [self removeTrees]; break; case DDBdFileOperationUpdate: [self fileSystemDidChange]; break; default: break; } } - (void)insertTrees { NSArray *paths = [updinfo objectForKey: @"paths"]; [dirslock lock]; [dirsManager insertDirsFromPaths: paths]; [dirslock unlock]; } - (void)removeTrees { NSArray *paths = [updinfo objectForKey: @"paths"]; [dirslock lock]; [dirsManager removeDirsFromPaths: paths]; [dirslock unlock]; } - (void)fileSystemDidChange { NSString *operation = [updinfo objectForKey: @"operation"]; if ([operation isEqual: NSWorkspaceMoveOperation] || [operation isEqual: NSWorkspaceCopyOperation] || [operation isEqual: NSWorkspaceDuplicateOperation] || [operation isEqual: @"GWorkspaceRenameOperation"]) { CREATE_AUTORELEASE_POOL(arp); NSString *source = [updinfo objectForKey: @"source"]; NSString *destination = [updinfo objectForKey: @"destination"]; NSArray *files = [updinfo objectForKey: @"files"]; NSArray *origfiles = [updinfo objectForKey: @"origfiles"]; NSMutableArray *srcpaths = [NSMutableArray array]; NSMutableArray *dstpaths = [NSMutableArray array]; NSUInteger i; if ([operation isEqual: @"GWorkspaceRenameOperation"]) { srcpaths = [NSMutableArray arrayWithObject: source]; dstpaths = [NSMutableArray arrayWithObject: destination]; } else { if ([operation isEqual: NSWorkspaceDuplicateOperation]) { for (i = 0; i < [files count]; i++) { NSString *fname = [origfiles objectAtIndex: i]; [srcpaths addObject: [source stringByAppendingPathComponent: fname]]; fname = [files objectAtIndex: i]; [dstpaths addObject: [destination stringByAppendingPathComponent: fname]]; } } else { for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; [srcpaths addObject: [source stringByAppendingPathComponent: fname]]; [dstpaths addObject: [destination stringByAppendingPathComponent: fname]]; } } } [pathslock lock]; [pathsManager duplicateDataOfPaths: srcpaths forPaths: dstpaths]; [pathslock unlock]; RELEASE (arp); } } @end BOOL subpath(NSString *p1, NSString *p2) { NSUInteger l1 = [p1 length]; NSUInteger l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqualToString: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqualToString: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } NSString *pathsep(void) { static NSString *separator = nil; if (separator == nil) { #if defined(__MINGW32__) separator = @"\\"; #else separator = @"/"; #endif RETAIN (separator); } return separator; } NSString *removePrefix(NSString *path, NSString *prefix) { if ([path hasPrefix: prefix]) { return [path substringFromIndex: [path rangeOfString: prefix].length + 1]; } return path; } int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL(pool); NSProcessInfo *info = [NSProcessInfo processInfo]; NSMutableArray *args = AUTORELEASE ([[info arguments] mutableCopy]); BOOL subtask = YES; if ([args containsObject: @"--auto"] == YES) { auto_stop = YES; } if ([args containsObject: @"--daemon"]) { subtask = NO; } if (subtask) { NSTask *task = [NSTask new]; NS_DURING { [args removeObjectAtIndex: 0]; [args addObject: @"--daemon"]; [task setLaunchPath: [[NSBundle mainBundle] executablePath]]; [task setArguments: args]; [task setEnvironment: [info environment]]; [task launch]; DESTROY (task); } NS_HANDLER { fprintf (stderr, "unable to launch the ddbd task. exiting.\n"); DESTROY (task); } NS_ENDHANDLER exit(EXIT_FAILURE); } RELEASE(pool); { CREATE_AUTORELEASE_POOL (pool); DDBd *ddbd = [[DDBd alloc] init]; RELEASE (pool); if (ddbd != nil) { CREATE_AUTORELEASE_POOL (pool); [[NSRunLoop currentRunLoop] run]; RELEASE (pool); } } exit(EXIT_SUCCESS); } gworkspace-1.1.0/Tools/fswatcher/0000755000175000001440000000000014753500006016205 5ustar multixusersgworkspace-1.1.0/Tools/fswatcher/GNUmakefile.in0000644000175000001440000000122413214346550020666 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # The application to be compiled TOOL_NAME = fswatcher # The Objective-C source files to be compiled WITH_INOTIFY=@with_inotify@ WITH_FAM=@with_fam@ ifeq ($(WITH_INOTIFY),yes) fswatcher_OBJC_FILES = fswatcher-inotify.m else ifeq ($(WITH_FAM),yes) fswatcher_OBJC_FILES = fswatcher-fam.m else fswatcher_OBJC_FILES = fswatcher.m endif endif fswatcher_TOOL_LIBS += -lDBKit # The Resource files to be copied into the app's resources directory -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/fswatcher/GNUmakefile.postamble0000644000175000001440000000117713231754602022255 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: rm -f GNUmakefile # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Tools/fswatcher/GNUmakefile.preamble0000644000175000001440000000077313670116055022060 0ustar multixusers# Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../DBKit ADDITIONAL_INCLUDE_DIRS += -I../../GWorkspace # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += ADDITIONAL_LIB_DIRS += -L../../DBKit/$(GNUSTEP_OBJ_DIR) gworkspace-1.1.0/Tools/fswatcher/fswatcher-inotify.h0000644000175000001440000001057014751213523022031 0ustar multixusers/* fswatcher-inotify.h * * Copyright (C) 2007-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2007 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSWATCHER_INOTIFY_H #define FSWATCHER_INOTIFY_H #include #include #import #include "DBKPathsTree.h" @class Watcher; @protocol FSWClientProtocol - (oneway void)watchedPathDidChange:(NSData *)dirinfo; - (oneway void)globalWatchedPathDidChange:(NSDictionary *)dirinfo; @end @protocol FSWatcherProtocol - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; - (oneway void)logDataReady:(NSData *)data; @end @interface FSWClientInfo: NSObject { NSConnection *conn; id client; NSCountedSet *wpaths; BOOL global; } - (void)setConnection:(NSConnection *)connection; - (NSConnection *)connection; - (void)setClient:(id )clnt; - (id )client; - (void)addWatchedPath:(NSString *)path; - (void)removeWatchedPath:(NSString *)path; - (BOOL)isWathchingPath:(NSString *)path; - (NSSet *)watchedPaths; - (void)setGlobal:(BOOL)value; - (BOOL)isGlobal; @end @interface FSWatcher: NSObject { NSConnection *conn; NSMutableArray *clientsInfo; NSMapTable *watchers; NSMapTable *watchDescrMap; NSFileHandle *inotifyHandle; uint32_t filemask; uint32_t dirmask; NSString *lastMovedPath; uint32_t moveCookie; pcomp *includePathsTree; pcomp *excludePathsTree; NSMutableSet *excludedSuffixes; NSFileManager *fm; NSNotificationCenter *nc; NSNotificationCenter *dnc; } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; - (void)connectionBecameInvalid:(NSNotification *)notification; - (void)setDefaultGlobalPaths; - (void)globalPathsChanged:(NSNotification *)notification; - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (FSWClientInfo *)clientInfoWithConnection:(NSConnection *)connection; - (FSWClientInfo *)clientInfoWithRemote:(id)remote; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; - (Watcher *)watcherForPath:(NSString *)path; - (Watcher *)watcherWithWatchDescriptor:(int)wd; - (void)removeWatcher:(Watcher *)awatcher; - (void)notifyClients:(NSDictionary *)info; - (void)notifyGlobalWatchingClients:(NSDictionary *)info; - (void)checkLastMovedPath:(id)sender; - (void)inotifyDataReady:(NSNotification *)notif; @end @interface Watcher: NSObject { NSString *watchedPath; int watchDescriptor; BOOL isdir; int listeners; FSWatcher *fswatcher; } - (id)initWithWatchedPath:(NSString *)path watchDescriptor:(int)wdesc fswatcher:(id)fsw; - (void)addListener; - (void)removeListener; - (BOOL)isWathcingPath:(NSString *)apath; - (NSString *)watchedPath; - (int)watchDescriptor; - (BOOL)isDirWatcher; @end #endif // FSWATCHER_INOTIFY_H gworkspace-1.1.0/Tools/fswatcher/fswatcher-inotify.m0000644000175000001440000007527214751213523022050 0ustar multixusers/* fswatcher-inotify.m * * Copyright (C) 2007-2015 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2007 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "fswatcher-inotify.h" #include "config.h" #include #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) static BOOL auto_stop = NO; /* Should we shut down when unused? */ static NSString *GWWatchedPathDeleted = @"GWWatchedPathDeleted"; static NSString *GWFileDeletedInWatchedDirectory = @"GWFileDeletedInWatchedDirectory"; static NSString *GWFileCreatedInWatchedDirectory = @"GWFileCreatedInWatchedDirectory"; static NSString *GWWatchedFileModified = @"GWWatchedFileModified"; static NSString *GWWatchedPathRenamed = @"GWWatchedPathRenamed"; @implementation FSWClientInfo - (void)dealloc { RELEASE (conn); RELEASE (client); RELEASE (wpaths); [super dealloc]; } - (id)init { self = [super init]; if (self) { client = nil; conn = nil; wpaths = [[NSCountedSet alloc] initWithCapacity: 1]; global = NO; } return self; } - (void)setConnection:(NSConnection *)connection { ASSIGN (conn, connection); } - (NSConnection *)connection { return conn; } - (void)setClient:(id )clnt { ASSIGN (client, clnt); } - (id )client { return client; } - (void)addWatchedPath:(NSString *)path { [wpaths addObject: path]; } - (void)removeWatchedPath:(NSString *)path { [wpaths removeObject: path]; } - (BOOL)isWathchingPath:(NSString *)path { return [wpaths containsObject: path]; } - (NSSet *)watchedPaths { return wpaths; } - (void)setGlobal:(BOOL)value { global = value; } - (BOOL)isGlobal { return global; } @end @implementation FSWatcher - (void)dealloc { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { NSConnection *connection = [[clientsInfo objectAtIndex: i] connection]; if (connection) { [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; } } if (conn) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; } [dnc removeObserver: self]; RELEASE (clientsInfo); NSZoneFree (NSDefaultMallocZone(), (void *)watchers); NSZoneFree (NSDefaultMallocZone(), (void *)watchDescrMap); freeTree(includePathsTree); freeTree(excludePathsTree); RELEASE (excludedSuffixes); RELEASE (inotifyHandle); RELEASE (lastMovedPath); [super dealloc]; } - (id)init { self = [super init]; if (self) { int fd; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; dnc = [NSDistributedNotificationCenter defaultCenter]; conn = [NSConnection defaultConnection]; [conn setRootObject: self]; [conn setDelegate: self]; if ([conn registerName: @"fswatcher"] == NO) { NSLog(@"unable to register with name server."); DESTROY (self); return self; } fd = inotify_init(); if (fd == -1) { NSLog(@"inotify_init() failed!"); DESTROY (self); return self; } inotifyHandle = [[NSFileHandle alloc] initWithFileDescriptor: fd closeOnDealloc: YES]; if (inotifyHandle == nil) { NSLog(@"unable to create the inotify handle."); close(fd); DESTROY (self); return self; } dirmask = (IN_CREATE | IN_DELETE | IN_DELETE_SELF | IN_MOVED_FROM | IN_MOVED_TO | IN_MOVE_SELF | IN_MODIFY); filemask = (IN_CLOSE_WRITE | IN_MODIFY | IN_DELETE_SELF | IN_MOVE_SELF); lastMovedPath = nil; moveCookie = 0; clientsInfo = [NSMutableArray new]; watchers = NSCreateMapTable(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 0); watchDescrMap = NSCreateMapTable(NSIntMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, 0); includePathsTree = newTreeWithIdentifier(@"incl_paths"); excludePathsTree = newTreeWithIdentifier(@"excl_paths"); excludedSuffixes = [[NSMutableSet alloc] initWithCapacity: 1]; [self setDefaultGlobalPaths]; [nc addObserver: self selector: @selector(connectionBecameInvalid:) name: NSConnectionDidDieNotification object: conn]; [dnc addObserver: self selector: @selector(globalPathsChanged:) name: @"GSMetadataIndexedDirectoriesChanged" object: nil]; [nc addObserver: self selector: @selector(inotifyDataReady:) name: NSFileHandleReadCompletionNotification object: inotifyHandle]; [inotifyHandle readInBackgroundAndNotify]; } return self; } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; { FSWClientInfo *info = [FSWClientInfo new]; [info setConnection: newConn]; [clientsInfo addObject: info]; RELEASE (info); [nc addObserver: self selector: @selector(connectionBecameInvalid:) name: NSConnectionDidDieNotification object: newConn]; [newConn setDelegate: self]; return YES; } - (void)connectionBecameInvalid:(NSNotification *)notification { id connection = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; if (connection == conn) { NSLog(@"argh - fswatcher server root connection has been destroyed."); exit(EXIT_FAILURE); } else { FSWClientInfo *info = [self clientInfoWithConnection: connection]; if (info) { NSSet *wpaths = [info watchedPaths]; NSEnumerator *enumerator = [wpaths objectEnumerator]; NSString *wpath; while ((wpath = [enumerator nextObject])) { Watcher *watcher = [self watcherForPath: wpath]; if (watcher) [watcher removeListener]; } [clientsInfo removeObject: info]; } if (auto_stop == YES && [clientsInfo count] <= 1) { /* If there is nothing else using this process, and this is not * a daemon, then we can quietly terminate. */ NSLog(@"No more clients, shutting down."); exit(EXIT_SUCCESS); } } } - (void)setDefaultGlobalPaths { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; NSUInteger i; [defaults synchronize]; entry = [defaults arrayForKey: @"GSMetadataIndexablePaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], includePathsTree); } } else { insertComponentsOfPath(NSHomeDirectory(), includePathsTree); entry = NSSearchPathForDirectoriesInDomains(NSAllApplicationsDirectory, NSAllDomainsMask, YES); for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], includePathsTree); } entry = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSAllDomainsMask, YES); for (i = 0; i < [entry count]; i++) { NSString *dir = [entry objectAtIndex: i]; NSString *path = [dir stringByAppendingPathComponent: @"Headers"]; if ([fm fileExistsAtPath: path]) { insertComponentsOfPath(path, includePathsTree); } path = [dir stringByAppendingPathComponent: @"Documentation"]; if ([fm fileExistsAtPath: path]) { insertComponentsOfPath(path, includePathsTree); } } } entry = [defaults arrayForKey: @"GSMetadataExcludedPaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], excludePathsTree); } } entry = [defaults arrayForKey: @"GSMetadataExcludedSuffixes"]; if (entry == nil) { entry = [NSArray arrayWithObjects: @"a", @"d", @"dylib", @"er1", @"err", @"extinfo", @"frag", @"la", @"log", @"o", @"out", @"part", @"sed", @"so", @"status", @"temp", @"tmp", nil]; } [excludedSuffixes addObjectsFromArray: entry]; } - (void)globalPathsChanged:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; NSArray *indexable = [info objectForKey: @"GSMetadataIndexablePaths"]; NSArray *excluded = [info objectForKey: @"GSMetadataExcludedPaths"]; NSArray *suffixes = [info objectForKey: @"GSMetadataExcludedSuffixes"]; NSUInteger i; emptyTreeWithBase(includePathsTree); for (i = 0; i < [indexable count]; i++) { insertComponentsOfPath([indexable objectAtIndex: i], includePathsTree); } emptyTreeWithBase(excludePathsTree); for (i = 0; i < [excluded count]; i++) { insertComponentsOfPath([excluded objectAtIndex: i], excludePathsTree); } [excludedSuffixes removeAllObjects]; [excludedSuffixes addObjectsFromArray: suffixes]; } - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"registration with unknown connection"]; } if ([info client] != nil) { [NSException raise: NSInternalInconsistencyException format: @"registration with registered client"]; } if ([(id)client isProxy] == YES) { [(id)client setProtocolForProxy: @protocol(FSWClientProtocol)]; [info setClient: client]; [info setGlobal: global]; } } - (oneway void)unregisterClient:(id )client { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; NSSet *wpaths; NSEnumerator *enumerator; NSString *wpath; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"unregistration with unknown connection"]; } if ([info client] == nil) { [NSException raise: NSInternalInconsistencyException format: @"unregistration with unregistered client"]; } wpaths = [info watchedPaths]; enumerator = [wpaths objectEnumerator]; while ((wpath = [enumerator nextObject])) { Watcher *watcher = [self watcherForPath: wpath]; if (watcher) { [watcher removeListener]; } } [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; [clientsInfo removeObject: info]; if (auto_stop == YES && [clientsInfo count] <= 1) { /* If there is nothing else using this process, and this is not * a daemon, then we can quietly terminate. */ exit(EXIT_SUCCESS); } } - (FSWClientInfo *)clientInfoWithConnection:(NSConnection *)connection { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *info = [clientsInfo objectAtIndex: i]; if ([info connection] == connection) { return info; } } return nil; } - (FSWClientInfo *)clientInfoWithRemote:(id)remote { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *info = [clientsInfo objectAtIndex: i]; if ([info client] == remote) return info; } return nil; } - (oneway void)client:(id )client addWatcherForPath:(NSString *)path { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; Watcher *watcher = [self watcherForPath: path]; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"adding watcher from unknown connection"]; } if ([info client] == nil) { [NSException raise: NSInternalInconsistencyException format: @"adding watcher for unregistered client"]; } if (watcher) { GWDebugLog(@"watcher found; adding listener for: %@", path); [info addWatchedPath: path]; [watcher addListener]; } else { BOOL isdir; if ([fm fileExistsAtPath: path isDirectory: &isdir]) { uint32_t mask = (isdir ? dirmask : filemask); int wd = inotify_add_watch([inotifyHandle fileDescriptor], [path UTF8String], mask); if (wd != -1) { GWDebugLog(@"add watcher for: %@", path); [info addWatchedPath: path]; watcher = [[Watcher alloc] initWithWatchedPath: path watchDescriptor: wd fswatcher: self]; NSMapInsert (watchers, path, watcher); NSMapInsert (watchDescrMap, (void *)wd, (void *)watcher); RELEASE (watcher); } else { NSLog(@"Invalid watch descriptor returned by inotify_add_watch(). " @"No watcher for: %@", path); } } } GWDebugLog(@"watchers: %i", NSCountMapTable(watchers)); } - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; Watcher *watcher = [self watcherForPath: path]; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"removing watcher from unknown connection"]; } if ([info client] == nil) { [NSException raise: NSInternalInconsistencyException format: @"removing watcher for unregistered client"]; } if (watcher) { GWDebugLog(@"remove listener for: %@", path); [info removeWatchedPath: path]; [watcher removeListener]; } GWDebugLog(@"watchers: %i", NSCountMapTable(watchers)); } - (Watcher *)watcherForPath:(NSString *)path { return (Watcher *)NSMapGet(watchers, path); } - (Watcher *)watcherWithWatchDescriptor:(int)wd { return (Watcher *)NSMapGet(watchDescrMap, (void *)wd); } - (void)removeWatcher:(Watcher *)watcher { NSString *path = [watcher watchedPath]; int wd = [watcher watchDescriptor]; if (wd != -1) { if (inotify_rm_watch([inotifyHandle fileDescriptor], wd) != 0) { NSLog(@"error removing watch descriptor for: %@", path); } NSMapRemove(watchDescrMap, (void *)wd); } GWDebugLog(@"removed watcher for: %@", path); RETAIN (path); NSMapRemove(watchers, path); RELEASE (path); } - (void)notifyClients:(NSDictionary *)info { CREATE_AUTORELEASE_POOL(pool); NSString *path = [info objectForKey: @"path"]; NSData *data = [NSArchiver archivedDataWithRootObject: info]; NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *clinfo = [clientsInfo objectAtIndex: i]; if ([clinfo isWathchingPath: path]) { [[clinfo client] watchedPathDidChange: data]; } } RELEASE (pool); } - (void)notifyGlobalWatchingClients:(NSDictionary *)info { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *clinfo = [clientsInfo objectAtIndex: i]; if ([clinfo isGlobal]) { [[clinfo client] globalWatchedPathDidChange: info]; } } } - (void)checkLastMovedPath:(id)sender { if (lastMovedPath != nil) { NSMutableDictionary *notifdict = [NSMutableDictionary dictionary]; [notifdict setObject: lastMovedPath forKey: @"path"]; [notifdict setObject: GWWatchedPathDeleted forKey: @"event"]; [self notifyGlobalWatchingClients: notifdict]; GWDebugLog(@"%@ MOVED to not indexable path", lastMovedPath); } } static inline uint32_t eventType(uint32_t mask) { uint32_t type = IN_IGNORED; if ((mask & IN_CREATE) == IN_CREATE) { type = IN_CREATE; } else if ((mask & IN_DELETE) == IN_DELETE) { type = IN_DELETE; } else if ((mask & IN_DELETE_SELF) == IN_DELETE_SELF) { type = IN_DELETE_SELF; } else if ((mask & IN_MOVED_FROM) == IN_MOVED_FROM) { type = IN_MOVED_FROM; } else if ((mask & IN_MOVED_TO) == IN_MOVED_TO) { type = IN_MOVED_TO; } else if ((mask & IN_MOVE_SELF) == IN_MOVE_SELF) { type = IN_MOVE_SELF; } else if ((mask & IN_CLOSE_WRITE) == IN_CLOSE_WRITE) { type = IN_CLOSE_WRITE; } else if ((mask & IN_MODIFY) == IN_MODIFY) { type = IN_MODIFY; } return type; } static inline BOOL isDotFile(NSString *path) { int len = ([path length] - 1); static unichar sep = 0; unichar c; int i; if (sep == 0) { #if defined(__MINGW32__) sep = '\\'; #else sep = '/'; #endif } for (i = len; i >= 0; i--) { c = [path characterAtIndex: i]; if (c == '.') { if ((i > 0) && ([path characterAtIndex: (i - 1)] == sep)) { return YES; } } } return NO; } /* #define EV_GRAIN (0.2) #define EV_TIMEOUT (0.5) - (void)queueEvent:(NSString *)event atPath:(NSString *)path forFile:(NSString *)fname { NSMutableDictionary *dict = nil; NSString *fullpath = path; NSDate *now = [NSDate date]; BOOL exists = (event == GWFileCreatedInWatchedDirectory || event == GWWatchedFileModified || event == GWWatchedPathRenamed); if (event == GWFileCreatedInWatchedDirectory || event == GWFileDeletedInWatchedDirectory) { fullpath = [path stringByAppendingPathComponent: fname]; } dict = [eventsQueue objectForKey: fullpath]; if (dict) { NSDate *stamp = [dict objectForKey: @"stamp"]; NSTimeInterval interval = [now timeIntervalSinceDate: stamp]; NSString *lastevent = [dict objectForKey: @"event"]; BOOL didexist = (lastevent == GWFileCreatedInWatchedDirectory || lastevent == GWWatchedFileModified || lastevent == GWWatchedPathRenamed); if (exists == didexist) { [dict setObject: event forKey: @"event"]; } else { if (interval < EV_GRAIN) { [eventsQueue removeObjectForKey: fullpath]; } else { [dict setObject: event forKey: @"event"]; [dict setObject: now forKey: @"stamp"]; } } } else { dict = [NSMutableDictionary dictionary]; [dict setObject: event forKey: @"event"]; [dict setObject: now forKey: @"stamp"]; [eventsQueue setObject: dict forKey: fullpath]; } } - (void)queueGlobalEvent:(NSString *)event forPath:(NSString *)path oldPath:(NSString *)oldpath { NSMutableDictionary *dict = [globalEventsQueue objectForKey: path]; NSDate *now = [NSDate date]; BOOL exists = (event == GWFileCreatedInWatchedDirectory || event == GWWatchedFileModified || event == GWWatchedPathRenamed); if (dict) { NSDate *stamp = [dict objectForKey: @"stamp"]; NSTimeInterval interval = [now timeIntervalSinceDate: stamp]; NSString *lastevent = [dict objectForKey: @"event"]; BOOL didexist = (lastevent == GWFileCreatedInWatchedDirectory || lastevent == GWWatchedFileModified || lastevent == GWWatchedPathRenamed); if (exists == didexist) { [dict setObject: event forKey: @"event"]; } else { if (interval < EV_GRAIN) { [eventsQueue removeObjectForKey: fullpath]; } else { [dict setObject: event forKey: @"event"]; [dict setObject: now forKey: @"stamp"]; } } } else { dict = [NSMutableDictionary dictionary]; [dict setObject: event forKey: @"event"]; [dict setObject: now forKey: @"stamp"]; if (event == GWWatchedPathRenamed) { [dict setObject: oldpath forKey: @"oldpath"]; } [globalEventsQueue setObject: dict forKey: fullpath]; } } - (void)processPendingEvents:(id)sender { NSArray *paths = [eventsQueue allKeys]; NSDate *now = [NSDate date]; int i; RETAIN (paths); for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; NSDictionary *dict = [eventsQueue objectForKey: path]; NSDate *stamp = [dict objectForKey: @"stamp"]; if ([now timeIntervalSinceDate: stamp] >= EV_TIMEOUT) { NSMutableDictionary *notifdict = [NSMutableDictionary dictionary]; NSString *event = [dict objectForKey: @"event"]; NSString *basepath = path; [notifdict setObject: event forKey: @"event"]; if (event == GWFileCreatedInWatchedDirectory || event == GWFileDeletedInWatchedDirectory) { NSString *fname = [path lastPathComponent]; [notifdict setObject: [NSArray arrayWithObject: fname] forKey: @"files"]; basepath = [path stringByDeletingLastPathComponent]; } [notifdict setObject: basepath forKey: @"path"]; [self notifyClients: notifdict]; [eventsQueue removeObjectForKey: path]; } } RELEASE (paths); paths = [globalEventsQueue allKeys]; for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; NSDictionary *dict = [eventsQueue objectForKey: path]; NSDate *stamp = [dict objectForKey: @"stamp"]; if ([now timeIntervalSinceDate: stamp] >= EV_TIMEOUT) { NSMutableDictionary *notifdict = [NSMutableDictionary dictionary]; NSString *event = [dict objectForKey: @"event"]; [notifdict setObject: event forKey: @"event"]; [notifdict setObject: path forKey: @"path"]; if (event == GWWatchedPathRenamed) { [notifdict setObject: [dict objectForKey: @"oldpath"] forKey: @"oldpath"]; } [self notifyGlobalWatchingClients: notifdict]; [globalEventsQueue removeObjectForKey: path]; } } RELEASE (paths); } */ - (void)inotifyDataReady:(NSNotification *)notif { NSDictionary *info = [notif userInfo]; NSData *data = [info objectForKey: NSFileHandleNotificationDataItem]; const void *bytes = [data bytes]; void *limit = ((void *)bytes + [data length]); unsigned evsize = sizeof(struct inotify_event); while (bytes < limit) { struct inotify_event *eventp = (struct inotify_event *)bytes; uint32_t type = eventType(eventp->mask); if (type != IN_IGNORED && eventp->len) { Watcher *watcher = [self watcherWithWatchDescriptor: eventp->wd]; if (watcher) { CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *notifdict = [NSMutableDictionary dictionary]; NSString *basepath = [watcher watchedPath]; NSString *fullpath = basepath; NSString *fname = [NSString stringWithUTF8String: eventp->name]; NSString *ext = [[fname pathExtension] lowercaseString]; BOOL dirwatch = [watcher isDirWatcher]; BOOL notify = YES; [notifdict setObject: basepath forKey: @"path"]; if (dirwatch) { if (type == IN_DELETE_SELF || type == IN_MOVE_SELF) { [notifdict setObject: GWWatchedPathDeleted forKey: @"event"]; } else if (type == IN_DELETE || type == IN_MOVED_FROM) { [notifdict setObject: [NSArray arrayWithObject: fname] forKey: @"files"]; [notifdict setObject: GWFileDeletedInWatchedDirectory forKey: @"event"]; fullpath = [basepath stringByAppendingPathComponent: fname]; } else if (type == IN_CREATE || type == IN_MOVED_TO) { [notifdict setObject: [NSArray arrayWithObject: fname] forKey: @"files"]; [notifdict setObject: GWFileCreatedInWatchedDirectory forKey: @"event"]; fullpath = [basepath stringByAppendingPathComponent: fname]; } else if (type == IN_MODIFY) { [notifdict setObject: GWWatchedFileModified forKey: @"event"]; fullpath = [basepath stringByAppendingPathComponent: fname]; if ([self watcherForPath: fullpath] != nil) { [notifdict setObject: fullpath forKey: @"path"]; } else { fullpath = basepath; notify = NO; } } else { notify = NO; } } else { if (type == IN_MODIFY || type == IN_CLOSE_WRITE) { [notifdict setObject: GWWatchedFileModified forKey: @"event"]; } else if (type == IN_DELETE_SELF || type == IN_MOVE_SELF) { [notifdict setObject: GWWatchedPathDeleted forKey: @"event"]; } else { notify = NO; } } if (notify) { [self notifyClients: notifdict]; } notify = (notify && ([excludedSuffixes containsObject: ext] == NO) && (isDotFile(fullpath) == NO) && inTreeFirstPartOfPath(fullpath, includePathsTree) && (inTreeFirstPartOfPath(fullpath, excludePathsTree) == NO)); if (notify) { [notifdict removeAllObjects]; [notifdict setObject: fullpath forKey: @"path"]; if (type == IN_DELETE || type == IN_DELETE_SELF || type == IN_MOVE_SELF) { [notifdict setObject: GWWatchedPathDeleted forKey: @"event"]; GWDebugLog(@"DELETE %@", fullpath); } else if (type == IN_CREATE) { [notifdict setObject: GWFileCreatedInWatchedDirectory forKey: @"event"]; GWDebugLog(@"CREATED %@", fullpath); } else if (type == IN_MODIFY || ((dirwatch == NO) && type == IN_CLOSE_WRITE)) { [notifdict setObject: GWWatchedFileModified forKey: @"event"]; GWDebugLog(@"MODIFIED %@", fullpath); } else if (type == IN_MOVED_FROM) { ASSIGN (lastMovedPath, fullpath); moveCookie = eventp->cookie; notify = NO; GWDebugLog(@"MOVE from indexable path: %@", fullpath); [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(checkLastMovedPath:) userInfo: nil repeats: NO]; } else if (type == IN_MOVED_TO) { if ((eventp->cookie == moveCookie) && (lastMovedPath != nil)) { [notifdict setObject: lastMovedPath forKey: @"oldpath"]; [notifdict setObject: GWWatchedPathRenamed forKey: @"event"]; GWDebugLog(@"MOVED from: %@ to: %@", lastMovedPath, fullpath); } else { [notifdict setObject: GWFileCreatedInWatchedDirectory forKey: @"event"]; GWDebugLog(@"MOVED from not indexable path: %@", fullpath); } DESTROY (lastMovedPath); moveCookie = 0; } else { notify = NO; } if (notify) { [self notifyGlobalWatchingClients: notifdict]; } } RELEASE (arp); } } bytes += (evsize + eventp->len); } [inotifyHandle readInBackgroundAndNotify]; } @end @implementation Watcher - (void)dealloc { RELEASE (watchedPath); [super dealloc]; } - (id)initWithWatchedPath:(NSString *)path watchDescriptor:(int)wdesc fswatcher:(id)fsw { self = [super init]; if (self) { NSFileManager *fm = [NSFileManager defaultManager]; NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: YES]; ASSIGN (watchedPath, path); watchDescriptor = wdesc; isdir = ([attributes fileType] == NSFileTypeDirectory); listeners = 1; fswatcher = fsw; } return self; } - (void)addListener { listeners++; } - (void)removeListener { listeners--; if (listeners <= 0) { [fswatcher removeWatcher: self]; } } - (BOOL)isWathcingPath:(NSString *)apath { return ([watchedPath isEqual: apath]); } - (NSString *)watchedPath { return watchedPath; } - (int)watchDescriptor { return watchDescriptor; } - (BOOL)isDirWatcher { return isdir; } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL(pool); NSProcessInfo *info = [NSProcessInfo processInfo]; NSMutableArray *args = AUTORELEASE ([[info arguments] mutableCopy]); BOOL subtask = YES; if ([[info arguments] containsObject: @"--auto"] == YES) { auto_stop = YES; } if ([[info arguments] containsObject: @"--daemon"]) { subtask = NO; } if (subtask) { NSTask *task = [NSTask new]; NS_DURING { [args removeObjectAtIndex: 0]; [args addObject: @"--daemon"]; [task setLaunchPath: [[NSBundle mainBundle] executablePath]]; [task setArguments: args]; [task setEnvironment: [info environment]]; [task launch]; DESTROY (task); } NS_HANDLER { fprintf (stderr, "unable to launch the fswatcher task. exiting.\n"); DESTROY (task); } NS_ENDHANDLER exit(EXIT_FAILURE); } RELEASE(pool); { CREATE_AUTORELEASE_POOL (pool); FSWatcher *fsw = [[FSWatcher alloc] init]; RELEASE (pool); if (fsw != nil) { CREATE_AUTORELEASE_POOL (pool); [[NSRunLoop currentRunLoop] run]; RELEASE (pool); } } exit(EXIT_SUCCESS); } gworkspace-1.1.0/Tools/fswatcher/fswatcher.h0000644000175000001440000001006014751213523020344 0ustar multixusers/* fswatcher.h * * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FSWATCHER_H #define FSWATCHER_H #import #import "DBKPathsTree.h" @class Watcher; @protocol FSWClientProtocol - (oneway void)watchedPathDidChange:(NSData *)dirinfo; - (oneway void)globalWatchedPathDidChange:(NSDictionary *)dirinfo; @end @protocol FSWatcherProtocol - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; @end @interface FSWClientInfo: NSObject { NSConnection *conn; id client; NSCountedSet *wpaths; BOOL global; } - (void)setConnection:(NSConnection *)connection; - (NSConnection *)connection; - (void)setClient:(id )clnt; - (id )client; - (void)addWatchedPath:(NSString *)path; - (void)removeWatchedPath:(NSString *)path; - (BOOL)isWatchingPath:(NSString *)path; - (NSSet *)watchedPaths; - (void)setGlobal:(BOOL)value; - (BOOL)isGlobal; @end @interface FSWatcher: NSObject { NSConnection *conn; NSMutableArray *clientsInfo; NSMapTable *watchers; pcomp *includePathsTree; pcomp *excludePathsTree; NSMutableSet *excludedSuffixes; NSFileManager *fm; NSNotificationCenter *nc; NSNotificationCenter *dnc; } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; - (void)connectionBecameInvalid:(NSNotification *)notification; - (void)setDefaultGlobalPaths; - (void)globalPathsChanged:(NSNotification *)notification; - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global; - (oneway void)unregisterClient:(id )client; - (FSWClientInfo *)clientInfoWithConnection:(NSConnection *)connection; - (FSWClientInfo *)clientInfoWithRemote:(id)remote; - (oneway void)client:(id )client addWatcherForPath:(NSString *)path; - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path; - (Watcher *)watcherForPath:(NSString *)path; - (void)watcherTimeOut:(NSTimer *)sender; - (void)removeWatcher:(Watcher *)awatcher; - (pcomp *)includePathsTree; - (pcomp *)excludePathsTree; - (NSSet *)excludedSuffixes; - (BOOL)isGlobalValidPath:(NSString *)path; - (void)notifyClients:(NSDictionary *)info; - (void)notifyGlobalWatchingClients:(NSDictionary *)info; @end @interface Watcher: NSObject { NSString *watchedPath; BOOL isdir; NSArray *pathContents; int listeners; NSDate *date; BOOL isOld; NSFileManager *fm; FSWatcher *fswatcher; NSTimer *timer; } - (id)initWithWatchedPath:(NSString *)path fswatcher:(id)fsw; - (void)watchFile; - (void)addListener; - (void)removeListener; - (BOOL)isWatchingPath:(NSString *)apath; - (NSString *)watchedPath; - (BOOL)isOld; - (NSTimer *)timer; @end #endif // FSWATCHER_H gworkspace-1.1.0/Tools/fswatcher/fswatcher.m0000644000175000001440000005454214751213523020366 0ustar multixusers/* fswatcher.m * * Copyright (C) 2004-2018 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import "fswatcher.h" #include "config.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) static BOOL is_daemon = NO; /* Currently running as daemon. */ static BOOL auto_stop = NO; /* Should we shut down when unused? */ @implementation FSWClientInfo - (void)dealloc { RELEASE (conn); RELEASE (client); RELEASE (wpaths); [super dealloc]; } - (id)init { self = [super init]; if (self) { client = nil; conn = nil; wpaths = [[NSCountedSet alloc] initWithCapacity: 1]; global = NO; } return self; } - (void)setConnection:(NSConnection *)connection { ASSIGN (conn, connection); } - (NSConnection *)connection { return conn; } - (void)setClient:(id )clnt { ASSIGN (client, clnt); } - (id )client { return client; } - (void)addWatchedPath:(NSString *)path { [wpaths addObject: path]; } - (void)removeWatchedPath:(NSString *)path { [wpaths removeObject: path]; } - (BOOL)isWatchingPath:(NSString *)path { return [wpaths containsObject: path]; } - (NSSet *)watchedPaths { return wpaths; } - (void)setGlobal:(BOOL)value { global = value; } - (BOOL)isGlobal { return global; } @end @implementation FSWatcher - (void)dealloc { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { NSConnection *connection = [[clientsInfo objectAtIndex: i] connection]; if (connection) { [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; } } if (conn) { [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; DESTROY (conn); } [dnc removeObserver: self]; RELEASE (clientsInfo); NSZoneFree (NSDefaultMallocZone(), (void *)watchers); freeTree(includePathsTree); freeTree(excludePathsTree); RELEASE (excludedSuffixes); [super dealloc]; } - (id)init { self = [super init]; if (self) { fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; dnc = [NSDistributedNotificationCenter defaultCenter]; conn = [NSConnection defaultConnection]; [conn setRootObject: self]; [conn setDelegate: self]; if ([conn registerName: @"fswatcher"] == NO) { NSLog(@"unable to register with name server - quitting."); DESTROY (self); return self; } clientsInfo = [NSMutableArray new]; watchers = NSCreateMapTable(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 0); includePathsTree = newTreeWithIdentifier(@"incl_paths"); excludePathsTree = newTreeWithIdentifier(@"excl_paths"); excludedSuffixes = [[NSMutableSet alloc] initWithCapacity: 1]; [self setDefaultGlobalPaths]; [nc addObserver: self selector: @selector(connectionBecameInvalid:) name: NSConnectionDidDieNotification object: conn]; [dnc addObserver: self selector: @selector(globalPathsChanged:) name: @"GSMetadataIndexedDirectoriesChanged" object: nil]; } return self; } - (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)newConn; { FSWClientInfo *info = [FSWClientInfo new]; [info setConnection: newConn]; [clientsInfo addObject: info]; RELEASE (info); [nc addObserver: self selector: @selector(connectionBecameInvalid:) name: NSConnectionDidDieNotification object: newConn]; [newConn setDelegate: self]; return YES; } - (void)connectionBecameInvalid:(NSNotification *)notification { id connection = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSLog(@"Connection became invalid"); if (connection == conn) { NSLog(@"argh - fswatcher server root connection has been destroyed."); exit(EXIT_FAILURE); } else { FSWClientInfo *info = [self clientInfoWithConnection: connection]; if (info) { NSSet *wpaths = [info watchedPaths]; NSEnumerator *enumerator = [wpaths objectEnumerator]; NSString *wpath; while ((wpath = [enumerator nextObject])) { Watcher *watcher = [self watcherForPath: wpath]; if (watcher) { [watcher removeListener]; } } [clientsInfo removeObject: info]; } if (auto_stop == YES && [clientsInfo count] <= 1) { /* If there is nothing else using this process, and this is not * a daemon, then we can quietly terminate. */ NSLog(@"No more clients, shutting down."); exit(EXIT_SUCCESS); } } } - (void)setDefaultGlobalPaths { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id entry; NSUInteger i; [defaults synchronize]; entry = [defaults arrayForKey: @"GSMetadataIndexablePaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], includePathsTree); } } else { insertComponentsOfPath(NSHomeDirectory(), includePathsTree); entry = NSSearchPathForDirectoriesInDomains(NSAllApplicationsDirectory, NSAllDomainsMask, YES); for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], includePathsTree); } entry = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSAllDomainsMask, YES); for (i = 0; i < [entry count]; i++) { NSString *dir = [entry objectAtIndex: i]; NSString *path = [dir stringByAppendingPathComponent: @"Headers"]; if ([fm fileExistsAtPath: path]) { insertComponentsOfPath(path, includePathsTree); } path = [dir stringByAppendingPathComponent: @"Documentation"]; if ([fm fileExistsAtPath: path]) { insertComponentsOfPath(path, includePathsTree); } } } entry = [defaults arrayForKey: @"GSMetadataExcludedPaths"]; if (entry) { for (i = 0; i < [entry count]; i++) { insertComponentsOfPath([entry objectAtIndex: i], excludePathsTree); } } entry = [defaults arrayForKey: @"GSMetadataExcludedSuffixes"]; if (entry == nil) { entry = [NSArray arrayWithObjects: @"a", @"d", @"dylib", @"er1", @"err", @"extinfo", @"frag", @"la", @"log", @"o", @"out", @"part", @"sed", @"so", @"status", @"temp", @"tmp", nil]; } [excludedSuffixes addObjectsFromArray: entry]; } - (void)globalPathsChanged:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; NSArray *indexable = [info objectForKey: @"GSMetadataIndexablePaths"]; NSArray *excluded = [info objectForKey: @"GSMetadataExcludedPaths"]; NSArray *suffixes = [info objectForKey: @"GSMetadataExcludedSuffixes"]; NSUInteger i; emptyTreeWithBase(includePathsTree); for (i = 0; i < [indexable count]; i++) { insertComponentsOfPath([indexable objectAtIndex: i], includePathsTree); } emptyTreeWithBase(excludePathsTree); for (i = 0; i < [excluded count]; i++) { insertComponentsOfPath([excluded objectAtIndex: i], excludePathsTree); } [excludedSuffixes removeAllObjects]; [excludedSuffixes addObjectsFromArray: suffixes]; } - (oneway void)registerClient:(id )client isGlobalWatcher:(BOOL)global { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"registration with unknown connection"]; } if ([info client] != nil) { [NSException raise: NSInternalInconsistencyException format: @"registration with registered client"]; } if ([(id)client isProxy] == YES) { [(id)client setProtocolForProxy: @protocol(FSWClientProtocol)]; [info setClient: client]; [info setGlobal: global]; } NSLog(@"register client %lu", (unsigned long)[clientsInfo count]); } - (oneway void)unregisterClient:(id )client { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; NSSet *wpaths; NSEnumerator *enumerator; NSString *wpath; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"unregistration with unknown connection"]; } if ([info client] == nil) { [NSException raise: NSInternalInconsistencyException format: @"unregistration with unregistered client"]; } wpaths = [info watchedPaths]; enumerator = [wpaths objectEnumerator]; while ((wpath = [enumerator nextObject])) { Watcher *watcher = [self watcherForPath: wpath]; if (watcher) { [watcher removeListener]; } } [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; [clientsInfo removeObject: info]; if (auto_stop == YES && [clientsInfo count] <= 1) { /* If there is nothing else using this process, and this is not * a daemon, then we can quietly terminate. */ exit(EXIT_SUCCESS); } } - (FSWClientInfo *)clientInfoWithConnection:(NSConnection *)connection { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *info = [clientsInfo objectAtIndex: i]; if ([info connection] == connection) return info; } return nil; } - (FSWClientInfo *)clientInfoWithRemote:(id)remote { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *info = [clientsInfo objectAtIndex: i]; if ([info client] == remote) return info; } return nil; } - (oneway void)client:(id )client addWatcherForPath:(NSString *)path { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; Watcher *watcher = [self watcherForPath: path]; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"adding watcher from unknown connection"]; } if ([info client] == nil) { [NSException raise: NSInternalInconsistencyException format: @"adding watcher for unregistered client"]; } if (watcher) { GWDebugLog(@"watcher found; adding listener for: %@", path); [info addWatchedPath: path]; [watcher addListener]; } else { if ([fm fileExistsAtPath: path]) { GWDebugLog(@"add watcher for: %@", path); [info addWatchedPath: path]; watcher = [[Watcher alloc] initWithWatchedPath: path fswatcher: self]; NSMapInsert (watchers, path, watcher); RELEASE (watcher); } } } - (oneway void)client:(id )client removeWatcherForPath:(NSString *)path { NSConnection *connection = [(NSDistantObject *)client connectionForProxy]; FSWClientInfo *info = [self clientInfoWithConnection: connection]; Watcher *watcher = [self watcherForPath: path]; if (info == nil) { [NSException raise: NSInternalInconsistencyException format: @"removing watcher from unknown connection"]; } if ([info client] == nil) { [NSException raise: NSInternalInconsistencyException format: @"removing watcher for unregistered client"]; } if (watcher && ([watcher isOld] == NO)) { GWDebugLog(@"remove listener for: %@", path); [info removeWatchedPath: path]; [watcher removeListener]; } } - (Watcher *)watcherForPath:(NSString *)path { return (Watcher *)NSMapGet(watchers, path); } - (void)watcherTimeOut:(NSTimer *)sender { Watcher *watcher = (Watcher *)[sender userInfo]; if ([watcher isOld]) { [self removeWatcher: watcher]; } else { [watcher watchFile]; } } - (void)removeWatcher:(Watcher *)watcher { NSString *path = [watcher watchedPath]; NSTimer *timer = [watcher timer]; if (timer && [timer isValid]) { [timer invalidate]; } GWDebugLog(@"removed watcher for: %@", path); RETAIN (path); NSMapRemove(watchers, path); RELEASE (path); } - (pcomp *)includePathsTree { return includePathsTree; } - (pcomp *)excludePathsTree { return excludePathsTree; } - (NSSet *)excludedSuffixes { return excludedSuffixes; } static inline BOOL isDotFile(NSString *path) { NSArray *components; NSEnumerator *e; NSString *c; BOOL found; if (path == nil) return NO; found = NO; components = [path pathComponents]; e = [components objectEnumerator]; while ((c = [e nextObject]) && !found) { if (([c length] > 0) && ([c characterAtIndex:0] == '.')) found = YES; } return found; } - (BOOL)isGlobalValidPath:(NSString *)path { NSString *ext = [[path pathExtension] lowercaseString]; return (([excludedSuffixes containsObject: ext] == NO) && (isDotFile(path) == NO) && inTreeFirstPartOfPath(path, includePathsTree) && (inTreeFirstPartOfPath(path, excludePathsTree) == NO)); } - (void)notifyClients:(NSDictionary *)info { CREATE_AUTORELEASE_POOL(pool); NSString *path = [info objectForKey: @"path"]; NSString *event = [info objectForKey: @"event"]; NSData *data = [NSArchiver archivedDataWithRootObject: info]; NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *clinfo = [clientsInfo objectAtIndex: i]; if ([clinfo isWatchingPath: path]) { [[clinfo client] watchedPathDidChange: data]; } } if ([event isEqual: @"GWWatchedPathDeleted"] && [self isGlobalValidPath: path]) { GWDebugLog(@"DELETE %@", path); [self notifyGlobalWatchingClients: info]; } else if ([event isEqual: @"GWWatchedFileModified"] && [self isGlobalValidPath: path]) { GWDebugLog(@"MODIFIED %@", path); [self notifyGlobalWatchingClients: info]; } else if ([event isEqual: @"GWFileDeletedInWatchedDirectory"]) { NSArray *files = [info objectForKey: @"files"]; for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fullpath = [path stringByAppendingPathComponent: fname]; if ([self isGlobalValidPath: fullpath]) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: fullpath forKey: @"path"]; [dict setObject: @"GWWatchedPathDeleted" forKey: @"event"]; [self notifyGlobalWatchingClients: dict]; } } } else if ([event isEqual: @"GWFileCreatedInWatchedDirectory"]) { NSArray *files = [info objectForKey: @"files"]; for (i = 0; i < [files count]; i++) { NSString *fname = [files objectAtIndex: i]; NSString *fullpath = [path stringByAppendingPathComponent: fname]; if ([self isGlobalValidPath: fullpath]) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: fullpath forKey: @"path"]; [dict setObject: @"GWFileCreatedInWatchedDirectory" forKey: @"event"]; [self notifyGlobalWatchingClients: dict]; } } } RELEASE (pool); } - (void)notifyGlobalWatchingClients:(NSDictionary *)info { NSUInteger i; for (i = 0; i < [clientsInfo count]; i++) { FSWClientInfo *clinfo = [clientsInfo objectAtIndex: i]; if ([clinfo isGlobal]) [[clinfo client] globalWatchedPathDidChange: info]; } } @end @implementation Watcher - (void)dealloc { if (timer && [timer isValid]) [timer invalidate]; RELEASE (watchedPath); RELEASE (pathContents); RELEASE (date); [super dealloc]; } - (id)initWithWatchedPath:(NSString *)path fswatcher:(id)fsw { self = [super init]; if (self) { NSDictionary *attributes; NSString *type; ASSIGN (watchedPath, path); fm = [NSFileManager defaultManager]; attributes = [fm fileAttributesAtPath: path traverseLink: YES]; type = [attributes fileType]; ASSIGN (date, [attributes fileModificationDate]); if (type == NSFileTypeDirectory) { ASSIGN (pathContents, ([fm directoryContentsAtPath: watchedPath])); isdir = YES; } else { isdir = NO; } fswatcher = fsw; listeners = 1; isOld = NO; timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target: fswatcher selector: @selector(watcherTimeOut:) userInfo: self repeats: YES]; } return self; } - (void)watchFile { CREATE_AUTORELEASE_POOL(pool); NSDictionary *attributes; NSDate *moddate; NSMutableDictionary *notifdict; if (isOld) { RELEASE (pool); return; } attributes = [fm fileAttributesAtPath: watchedPath traverseLink: YES]; if (attributes == nil) { notifdict = [NSMutableDictionary dictionary]; [notifdict setObject: watchedPath forKey: @"path"]; [notifdict setObject: @"GWWatchedPathDeleted" forKey: @"event"]; [fswatcher notifyClients: notifdict]; isOld = YES; RELEASE (pool); return; } moddate = [attributes fileModificationDate]; if ([date isEqualToDate: moddate] == NO) { if (isdir) { NSArray *oldconts = [pathContents copy]; NSArray *newconts = [fm directoryContentsAtPath: watchedPath]; NSMutableArray *diffFiles = [NSMutableArray array]; BOOL contentsChanged = NO; int i; ASSIGN (date, moddate); ASSIGN (pathContents, newconts); notifdict = [NSMutableDictionary dictionary]; [notifdict setObject: watchedPath forKey: @"path"]; /* if there is an error in fileAttributesAtPath */ /* or watchedPath doesn't exist anymore */ if (newconts == nil) { [notifdict setObject: @"GWWatchedPathDeleted" forKey: @"event"]; [fswatcher notifyClients: notifdict]; RELEASE (oldconts); isOld = YES; RELEASE (pool); return; } for (i = 0; i < [oldconts count]; i++) { NSString *fname = [oldconts objectAtIndex: i]; if ([newconts containsObject: fname] == NO) { [diffFiles addObject: fname]; } } if ([diffFiles count] > 0) { contentsChanged = YES; [notifdict setObject: @"GWFileDeletedInWatchedDirectory" forKey: @"event"]; [notifdict setObject: diffFiles forKey: @"files"]; [fswatcher notifyClients: notifdict]; } [diffFiles removeAllObjects]; for (i = 0; i < [newconts count]; i++) { NSString *fname = [newconts objectAtIndex: i]; if ([oldconts containsObject: fname] == NO) { [diffFiles addObject: fname]; } } if ([diffFiles count] > 0) { contentsChanged = YES; [notifdict setObject: watchedPath forKey: @"path"]; [notifdict setObject: @"GWFileCreatedInWatchedDirectory" forKey: @"event"]; [notifdict setObject: diffFiles forKey: @"files"]; [fswatcher notifyClients: notifdict]; } RELEASE (oldconts); if (contentsChanged == NO) { [notifdict setObject: @"GWWatchedFileModified" forKey: @"event"]; [fswatcher notifyClients: notifdict]; } } else { // isdir == NO ASSIGN (date, moddate); notifdict = [NSMutableDictionary dictionary]; [notifdict setObject: watchedPath forKey: @"path"]; [notifdict setObject: @"GWWatchedFileModified" forKey: @"event"]; [fswatcher notifyClients: notifdict]; } } RELEASE (pool); } - (void)addListener { listeners++; } - (void)removeListener { listeners--; if (listeners <= 0) { isOld = YES; } } - (BOOL)isWatchingPath:(NSString *)apath { return ([apath isEqualToString: watchedPath]); } - (NSString *)watchedPath { return watchedPath; } - (BOOL)isOld { return isOld; } - (NSTimer *)timer { return timer; } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL(pool); NSProcessInfo *info = [NSProcessInfo processInfo]; NSMutableArray *args = AUTORELEASE ([[info arguments] mutableCopy]); BOOL subtask = YES; if ([[info arguments] containsObject: @"--auto"] == YES) { auto_stop = YES; } if ([[info arguments] containsObject: @"--daemon"]) { subtask = NO; is_daemon = YES; } if (subtask) { NSTask *task; task = [NSTask new]; NS_DURING { [args removeObjectAtIndex: 0]; [args addObject: @"--daemon"]; [task setLaunchPath: [[NSBundle mainBundle] executablePath]]; [task setArguments: args]; [task setEnvironment: [info environment]]; [task launch]; DESTROY (task); } NS_HANDLER { fprintf (stderr, "unable to launch the fswatcher task. exiting.\n"); DESTROY (task); } NS_ENDHANDLER exit(EXIT_FAILURE); } RELEASE(pool); { CREATE_AUTORELEASE_POOL (pool); FSWatcher *fsw = [[FSWatcher alloc] init]; RELEASE (pool); if (fsw != nil) { CREATE_AUTORELEASE_POOL (pool); [[NSRunLoop currentRunLoop] run]; RELEASE (pool); } } exit(EXIT_SUCCESS); } gworkspace-1.1.0/Tools/lsfupdater/0000755000175000001440000000000014753472315016403 5ustar multixusersgworkspace-1.1.0/Tools/lsfupdater/FinderModulesProtocol.h0000644000175000001440000000322414751213523023027 0ustar multixusers/* FinderModulesProtocol.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FINDER_MODULES_PROTOCOL_H #define FINDER_MODULES_PROTOCOL_H @protocol FinderModulesProtocol - (id)initInterface; - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool; - (void)setControlsState:(NSDictionary *)info; - (id)controls; - (NSString *)moduleName; - (BOOL)used; - (void)setInUse:(BOOL)value; - (int)index; - (void)setIndex:(int)idx; - (NSDictionary *)searchCriteria; - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes; - (int)compareModule:(id )module; - (BOOL)reliesOnModDate; - (BOOL)metadataModule; @end @protocol SearchTool - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; @end #endif // FINDER_MODULES_PROTOCOL_H gworkspace-1.1.0/Tools/lsfupdater/GNUmakefile0000644000175000001440000000072313231754602020447 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # The application to be compiled TOOL_NAME = lsfupdater # The Objective-C source files to be compiled lsfupdater_OBJC_FILES = lsfupdater.m ADDITIONAL_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) # The Resource files to be copied into the app's resources directory -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/lsfupdater/GNUmakefile.postamble0000644000175000001440000000115213231754602022431 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Tools/lsfupdater/GNUmakefile.preamble0000644000175000001440000000025613231754602022236 0ustar multixusers# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../GWorkspace # Additional LDFLAGS to pass to the linker # ADDITIONAL_LDFLAGS += gworkspace-1.1.0/Tools/lsfupdater/lsfupdater.m0000644000175000001440000007714714751214566020752 0ustar multixusers/* lsfupdater.m * * Copyright (C) 2005-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: January 2005 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" #include "config.h" #ifndef GW_DEBUG_LOG #define GW_DEBUG_LOG 0 #endif #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ NSLog(format , ## args); } while (0) BOOL subPathOfPath(NSString *p1, NSString *p2); @protocol LSFolderProtocol - (oneway void)setUpdater:(id)anObject; - (oneway void)updaterDidEndAction; - (oneway void)updaterError:(NSString *)err; - (oneway void)addFoundPath:(NSString *)path; - (oneway void)removeFoundPath:(NSString *)path; - (oneway void)clearFoundPaths; - (NSString *)infoPath; - (NSString *)foundPath; - (BOOL)isOpen; @end @protocol DDBd - (oneway void)insertPath:(NSString *)path; - (oneway void)insertDirectoryTreesFromPaths:(NSData *)info; - (oneway void)removeTreesFromPaths:(NSData *)info; - (NSData *)directoryTreeFromPath:(NSString *)path; - (NSString *)annotationsForPath:(NSString *)path; - (NSTimeInterval)timestampOfPath:(NSString *)path; @end @interface LSFUpdater: NSObject { NSMutableArray *searchPaths; unsigned spathindex; NSMutableArray *directories; unsigned dirindex; unsigned dircounter; unsigned dircount; NSMutableArray *modules; BOOL metadataModule; NSDictionary *searchCriteria; BOOL newcriteria; BOOL norecursion; NSMutableArray *foundPaths; int fpathindex; NSDate *lastUpdate; NSDate *startSearch; unsigned autoupdate; NSTimeInterval updateInterval; NSTimer *autoupdateTmr; id lsfolder; id ddbd; NSFileManager *fm; NSNotificationCenter *nc; } - (id)initWithConnectionName:(NSString *)cname; - (void)connectionDidDie:(NSNotification *)notification; - (void)setFolderInfo:(NSData *)data; - (void)updateSearchCriteria:(NSData *)data; - (void)loadModules; - (NSArray *)bundlesWithExtension:(NSString *)extension inPath:(NSString *)path; - (void)setAutoupdate:(unsigned)value; - (void)resetTimer; - (void)notifyEndAction:(id)sender; - (void)terminate; - (void)fastUpdate; - (void)getFoundPaths; - (void)checkFoundPaths; - (void)updateSearchPath:(NSString *)srcpath; - (BOOL)saveResults; - (NSArray *)fullSearchInDirectory:(NSString *)dirpath; - (BOOL)checkPath:(NSString *)path; - (BOOL)checkPath:(NSString *)path attributes:(NSDictionary *)attrs; - (BOOL)checkPath:(NSString *)path attributes:(NSDictionary *)attrs withModule:(id)module; - (void)insertShorterPath:(NSString *)path inArray:(NSMutableArray *)array; @end @interface LSFUpdater (ddbd) - (void)connectDDBd; - (void)ddbdConnectionDidDie:(NSNotification *)notif; - (void)ddbdInsertTrees; - (void)ddbdInsertDirectoryTreesFromPaths:(NSArray *)paths; - (NSArray *)ddbdGetDirectoryTreeFromPath:(NSString *)path; - (void)ddbdRemoveTreesFromPaths:(NSArray *)paths; - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; - (NSTimeInterval)ddbdGetTimestampOfPath:(NSString *)path; @end @interface LSFUpdater (scheduled) - (void)searchInNextDirectory:(id)sender; - (void)checkNextFoundPath; @end @implementation LSFUpdater - (void)dealloc { [nc removeObserver: self]; if (autoupdateTmr && [autoupdateTmr isValid]) { [autoupdateTmr invalidate]; DESTROY (autoupdateTmr); } DESTROY (lsfolder); DESTROY (ddbd); RELEASE (modules); RELEASE (searchPaths); RELEASE (searchCriteria); RELEASE (lastUpdate); RELEASE (startSearch); RELEASE (foundPaths); RELEASE (directories); [super dealloc]; } - (id)initWithConnectionName:(NSString *)cname { self = [super init]; if (self) { NSConnection *conn; id anObject; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; lsfolder = nil; ddbd = nil; modules = [NSMutableArray new]; searchPaths = nil; searchCriteria = nil; lastUpdate = nil; startSearch = nil; foundPaths = [NSMutableArray new]; directories = nil; autoupdateTmr = nil; autoupdate = 0; updateInterval = 0.0; fpathindex = 0; spathindex = 0; dirindex = 0; dircounter = 0; dircount = 0; conn = [NSConnection connectionWithRegisteredName: cname host: nil]; if (conn == nil) { NSLog(@"failed to contact the lsfolder - bye."); DESTROY (self); return self; } [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: conn]; anObject = [conn rootProxy]; [anObject setProtocolForProxy: @protocol(LSFolderProtocol)]; lsfolder = (id )anObject; RETAIN (lsfolder); [lsfolder setUpdater: self]; } return self; } - (void)connectionDidDie:(NSNotification *)notification { [nc removeObserver: self name: NSConnectionDidDieNotification object: [notification object]]; NSLog(@"the lsfolder connection has been destroyed."); [self terminate]; } - (void)setFolderInfo:(NSData *)data { NSDictionary *lsfinfo = [NSUnarchiver unarchiveObjectWithData: data]; id recursion = [lsfinfo objectForKey: @"recursion"]; norecursion = ((recursion != nil) && ([recursion boolValue] == NO)); searchPaths = [[lsfinfo objectForKey: @"searchpaths"] mutableCopy]; ASSIGN (searchCriteria, [lsfinfo objectForKey: @"criteria"]); ASSIGN (lastUpdate, [NSDate dateWithString: [lsfinfo objectForKey: @"lastupdate"]]); [self loadModules]; } - (void)updateSearchCriteria:(NSData *)data { NSDictionary *lsfinfo = [NSUnarchiver unarchiveObjectWithData: data]; ASSIGN (searchCriteria, [lsfinfo objectForKey: @"criteria"]); norecursion = ([[lsfinfo objectForKey: @"recursion"] boolValue] == NO); [self loadModules]; newcriteria = YES; if (autoupdate != 0) { fpathindex = 0; spathindex = 0; dirindex = 0; dircounter = 0; } } - (void)loadModules { CREATE_AUTORELEASE_POOL(arp); NSEnumerator *enumerator; NSString *bundlesDir; BOOL isdir; NSMutableArray *bundlesPaths; NSArray *classNames; int i; bundlesPaths = [NSMutableArray array]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; [bundlesPaths addObjectsFromArray: [self bundlesWithExtension: @"finder" inPath: bundlesDir]]; } bundlesDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; bundlesDir = [bundlesDir stringByAppendingPathComponent: @"GWorkspace"]; if ([fm fileExistsAtPath: bundlesDir isDirectory: &isdir] && isdir) { [bundlesPaths addObjectsFromArray: [self bundlesWithExtension: @"finder" inPath: bundlesDir]]; } [modules removeAllObjects]; classNames = [searchCriteria allKeys]; metadataModule = NO; for (i = 0; i < [bundlesPaths count]; i++) { NSString *bpath = [bundlesPaths objectAtIndex: i]; NSBundle *bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; NSString *className = NSStringFromClass(principalClass); if ([classNames containsObject: className]) { NSDictionary *moduleCriteria = [searchCriteria objectForKey: className]; id module = [[principalClass alloc] initWithSearchCriteria: moduleCriteria searchTool: self]; if ([module metadataModule]) { metadataModule = YES; } [modules addObject: module]; RELEASE (module); } } } RELEASE (arp); } - (NSArray *)bundlesWithExtension:(NSString *)extension inPath:(NSString *)path { NSMutableArray *bundleList = [NSMutableArray array]; NSEnumerator *enumerator; NSString *dir; BOOL isDir; if ((([fm fileExistsAtPath: path isDirectory: &isDir]) && isDir) == NO) { return nil; } enumerator = [[fm directoryContentsAtPath: path] objectEnumerator]; while ((dir = [enumerator nextObject])) { if ([[dir pathExtension] isEqualToString: extension]) { [bundleList addObject: [path stringByAppendingPathComponent: dir]]; } } return bundleList; } - (void)setAutoupdate:(unsigned)value { NSString *infopath = [lsfolder infoPath]; NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: infopath]; GWDebugLog(@"setAutoupdate %i", value); autoupdate = value; if (autoupdate == 0) { fpathindex = 0; spathindex = 0; dirindex = 0; dircounter = 0; } if (dict) { NSMutableDictionary *updated = [dict mutableCopy]; if (dircount == 0) { id countnmb = [dict objectForKey: @"dircount"]; if (countnmb) { dircount = [countnmb unsignedLongValue]; } } [updated setObject: [NSNumber numberWithLong: autoupdate] forKey: @"autoupdate"]; [updated writeToFile: infopath atomically: YES]; RELEASE (updated); } if (autoupdateTmr && [autoupdateTmr isValid]) { [autoupdateTmr invalidate]; DESTROY (autoupdateTmr); GWDebugLog(@"removing autoupdateTmr"); } if (autoupdate > 0) { NSTimeInterval interval; if ([foundPaths count] == 0) { [self getFoundPaths]; } if (dircount > 0) { unsigned fcount = [foundPaths count]; unsigned count = (fcount > dircount) ? fcount : dircount; count = (count == 0) ? 1 : count; updateInterval = (autoupdate * 1.0) / count; } interval = (updateInterval == 0) ? 0.1 : updateInterval; autoupdateTmr = [NSTimer scheduledTimerWithTimeInterval: interval target: self selector: @selector(searchInNextDirectory:) userInfo: nil repeats: YES]; RETAIN (autoupdateTmr); } } - (void)resetTimer { if (autoupdateTmr && [autoupdateTmr isValid]) { [autoupdateTmr invalidate]; DESTROY (autoupdateTmr); } if (autoupdate > 0) { unsigned fcount = [foundPaths count]; unsigned count = (fcount > dircount) ? fcount : dircount; NSTimeInterval interval; count = (count == 0) ? 1 : count; updateInterval = (autoupdate * 1.0) / count; interval = (updateInterval == 0) ? 0.1 : updateInterval; GWDebugLog(@"\nresetTimer"); GWDebugLog(@"autoupdate %i", autoupdate); GWDebugLog(@"dircount %i", dircount); GWDebugLog(@"updateInterval %.2f", updateInterval); autoupdateTmr = [NSTimer scheduledTimerWithTimeInterval: interval target: self selector: @selector(searchInNextDirectory:) userInfo: nil repeats: YES]; RETAIN (autoupdateTmr); } } - (void)notifyEndAction:(id)sender { if (lsfolder) { [lsfolder updaterDidEndAction]; } } - (void)terminate { if (autoupdateTmr && [autoupdateTmr isValid]) { [autoupdateTmr invalidate]; DESTROY (autoupdateTmr); } [nc removeObserver: self]; DESTROY (ddbd); exit(0); } - (void)fastUpdate { unsigned count = [searchPaths count]; BOOL lsfdone = YES; int i; GWDebugLog(@"starting fast update"); [lsfolder clearFoundPaths]; [self getFoundPaths]; GWDebugLog(@"got %lu found paths. checking...", (unsigned long)[foundPaths count]); [self checkFoundPaths]; for (i = 0; i < count; i++) { NSString *spath = [searchPaths objectAtIndex: i]; BOOL isdir; if ([fm fileExistsAtPath: spath isDirectory: &isdir]) { if (isdir) { [self updateSearchPath: spath]; } else if ([self checkPath: spath] && ([foundPaths containsObject: spath] == NO)) { [foundPaths addObject: spath]; [lsfolder addFoundPath: spath]; } } else { [searchPaths removeObjectAtIndex: i]; count--; i--; } } GWDebugLog(@"fast update done."); if ([searchPaths count]) { ASSIGN (lastUpdate, [NSDate date]); lsfdone = [self saveResults]; } else { lsfdone = NO; } if (lsfdone == NO) { [lsfolder updaterError: NSLocalizedString(@"No search location!", @"")]; } newcriteria = NO; [self notifyEndAction: nil]; } - (void)getFoundPaths { NSString *fpath = [lsfolder foundPath]; [foundPaths removeAllObjects]; if ([fm fileExistsAtPath: fpath]) { NSArray *founds = [NSArray arrayWithContentsOfFile: fpath]; if (founds) { [foundPaths addObjectsFromArray: founds]; } } } - (void)checkFoundPaths { int count = [foundPaths count]; unsigned i, j; for (i = 0; i < count; i++) { NSString *path = [foundPaths objectAtIndex: i]; BOOL remove = NO; if (norecursion) { remove = YES; for (j = 0; j < [searchPaths count]; j++) { NSString *spath = [searchPaths objectAtIndex: j]; if (subPathOfPath(spath, path)) { if ([[path pathComponents] count] == ([[spath pathComponents] count] +1)) { remove = NO; break; } } } } if (remove == NO) { NSDictionary *attrs = [fm fileAttributesAtPath: path traverseLink: NO]; if (attrs) { remove = ([self checkPath: path attributes: attrs] == NO); } else { remove = YES; } } if (remove) { [lsfolder removeFoundPath: path]; [foundPaths removeObjectAtIndex: i]; count--; i--; } else { [lsfolder addFoundPath: path]; } } } - (void)updateSearchPath:(NSString *)srcpath { CREATE_AUTORELEASE_POOL(arp); NSArray *paths; GWDebugLog(@"getting directories from the db..."); if (norecursion) { paths = [NSArray array]; } else { paths = [self ddbdGetDirectoryTreeFromPath: srcpath]; } if (paths) { NSMutableArray *toinsert = [NSMutableArray array]; unsigned count = [paths count]; unsigned i; paths = [paths arrayByAddingObject: srcpath]; GWDebugLog(@"%lu directories", (unsigned long)[paths count]); GWDebugLog(@"updating in %@", srcpath); for (i = 0; i <= count; i++) { CREATE_AUTORELEASE_POOL(arp1); NSString *dbpath = [paths objectAtIndex: i]; NSDictionary *attributes = [fm fileAttributesAtPath: dbpath traverseLink: NO]; NSDate *moddate = [attributes fileModificationDate]; BOOL mustcheck; mustcheck = (([moddate laterDate: lastUpdate] == moddate) || newcriteria); if ((mustcheck == NO) && metadataModule) { NSTimeInterval interval = [lastUpdate timeIntervalSinceReferenceDate]; mustcheck = ([self ddbdGetTimestampOfPath: dbpath] > interval); if (mustcheck) { GWDebugLog(@"metadata modification date changed at %@", dbpath); } } if (mustcheck) { NSArray *contents; unsigned j, m; if ([self checkPath: dbpath attributes: attributes] && ([foundPaths containsObject: dbpath] == NO)) { [foundPaths addObject: dbpath]; [lsfolder addFoundPath: dbpath]; GWDebugLog(@"adding %@", dbpath); } contents = [fm directoryContentsAtPath: dbpath]; for (j = 0; j < [contents count]; j++) { CREATE_AUTORELEASE_POOL(arp2); NSString *fname = [contents objectAtIndex: j]; NSString *fpath = [dbpath stringByAppendingPathComponent: fname]; NSDictionary *attr = [fm fileAttributesAtPath: fpath traverseLink: NO]; if ([self checkPath: fpath attributes: attr] && ([foundPaths containsObject: fpath] == NO)) { [foundPaths addObject: fpath]; [lsfolder addFoundPath: fpath]; GWDebugLog(@"adding %@", fpath); } if (([attr fileType] == NSFileTypeDirectory) && ([paths containsObject: fpath] == NO) && (norecursion == NO)) { NSArray *founds = [self fullSearchInDirectory: fpath]; if (founds && [founds count]) { for (m = 0; m < [founds count]; m++) { NSString *found = [founds objectAtIndex: m]; if ([foundPaths containsObject: found] == NO) { [foundPaths addObject: found]; [lsfolder addFoundPath: found]; GWDebugLog(@"adding %@", found); } } } [self insertShorterPath: fpath inArray: toinsert]; } RELEASE (arp2); } } RELEASE (arp1); } if ([toinsert count] && (norecursion == NO)) { [self ddbdInsertDirectoryTreesFromPaths: toinsert]; } } else { NSArray *founds; int i; NSLog(@"%@ not found in the db", srcpath); NSLog(@"performing full search in %@", srcpath); founds = [self fullSearchInDirectory: srcpath]; for (i = 0; i < [founds count]; i++) { NSString *found = [founds objectAtIndex: i]; if ([foundPaths containsObject: found] == NO) { [foundPaths addObject: found]; [lsfolder addFoundPath: found]; } } if (norecursion == NO) { [self ddbdInsertDirectoryTreesFromPaths: [NSArray arrayWithObject: srcpath]]; } } GWDebugLog(@"searching done."); RELEASE (arp); } - (BOOL)saveResults { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject: searchPaths forKey: @"searchpaths"]; [dict setObject: searchCriteria forKey: @"criteria"]; [dict setObject: [NSNumber numberWithBool: !norecursion] forKey: @"recursion"]; [dict setObject: [lastUpdate description] forKey: @"lastupdate"]; [dict setObject: [NSNumber numberWithLong: autoupdate] forKey: @"autoupdate"]; if (dircount > 0) { [dict setObject: [NSNumber numberWithLong: dircount] forKey: @"dircount"]; } if ([dict writeToFile: [lsfolder infoPath] atomically: YES] == NO) { return NO; } if ([foundPaths writeToFile: [lsfolder foundPath] atomically: YES] == NO) { return NO; } return YES; } - (NSArray *)fullSearchInDirectory:(NSString *)dirpath { CREATE_AUTORELEASE_POOL(arp); NSMutableArray *founds = [NSMutableArray array]; NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath: dirpath]; IMP nxtImp = [enumerator methodForSelector: @selector(nextObject)]; while (1) { CREATE_AUTORELEASE_POOL(arp1); NSString *path = (*nxtImp)(enumerator, @selector(nextObject)); if (path) { NSString *fullPath = [dirpath stringByAppendingPathComponent: path]; NSDictionary *attrs = [enumerator fileAttributes]; if ([self checkPath: fullPath attributes: attrs]) { [founds addObject: fullPath]; } if (([attrs fileType] == NSFileTypeDirectory) && norecursion) { [enumerator skipDescendents]; } } else { RELEASE (arp1); break; } RELEASE (arp1); } RETAIN (founds); RELEASE (arp); return AUTORELEASE (founds); } - (BOOL)checkPath:(NSString *)path { NSDictionary *attrs = [fm fileAttributesAtPath: path traverseLink: NO]; return (attrs && [self checkPath: path attributes: attrs]); } - (BOOL)checkPath:(NSString *)path attributes:(NSDictionary *)attrs { BOOL found = YES; int i; for (i = 0; i < [modules count]; i++) { id module = [modules objectAtIndex: i]; found = [self checkPath: path attributes: attrs withModule: module]; if (found == NO) { break; } } return ([modules count] == 0) ? NO : found; } - (BOOL)checkPath:(NSString *)path attributes:(NSDictionary *)attrs withModule:(id)module { if ([module reliesOnModDate] && (newcriteria == NO)) { NSDate *lastmod = [attrs fileModificationDate]; if ([lastmod laterDate: lastUpdate] == lastmod) { return [module checkPath: path withAttributes: attrs]; } else { return [foundPaths containsObject: path]; } } else { return [module checkPath: path withAttributes: attrs]; } return NO; } - (void)insertShorterPath:(NSString *)path inArray:(NSMutableArray *)array { NSInteger i; i = 0; while (i < [array count]) { NSString *str = [array objectAtIndex: i]; if (subPathOfPath(path, str) || [path isEqual: str]) { [array removeObjectAtIndex: i]; } else { i++; } } [array addObject: path]; } @end @implementation LSFUpdater (ddbd) - (void)connectDDBd { if (ddbd == nil) { ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd == nil) { NSString *cmd; int i; cmd = [NSTask launchPathForTool: @"ddbd"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 0; i < 40; i++) { [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd) { break; } } } if (ddbd) { RETAIN (ddbd); [ddbd setProtocolForProxy: @protocol(DDBd)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(ddbdConnectionDidDie:) name: NSConnectionDidDieNotification object: [ddbd connectionForProxy]]; GWDebugLog(@"ddbd connected!"); } else { NSLog(@"unable to contact ddbd."); [lsfolder updaterError: @"unable to contact ddbd."]; } } } - (void)ddbdConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [ddbd connectionForProxy], NSInternalInconsistencyException); RELEASE (ddbd); ddbd = nil; [lsfolder updaterError: @"ddbd connection died!"]; } - (void)ddbdInsertTrees { [self connectDDBd]; if (ddbd != nil) { NSData *info = [NSArchiver archivedDataWithRootObject: searchPaths]; [NSTimer scheduledTimerWithTimeInterval: 10 target: self selector: @selector(notifyEndAction:) userInfo: nil repeats: NO]; [ddbd insertDirectoryTreesFromPaths: info]; } } - (void)ddbdInsertDirectoryTreesFromPaths:(NSArray *)paths { [self connectDDBd]; if (ddbd != nil) { NSData *info = [NSArchiver archivedDataWithRootObject: paths]; [ddbd insertDirectoryTreesFromPaths: info]; } } - (NSArray *)ddbdGetDirectoryTreeFromPath:(NSString *)path { [self connectDDBd]; if (ddbd != nil) { NSData *data = [ddbd directoryTreeFromPath: path]; if (data) { return [NSUnarchiver unarchiveObjectWithData: data]; } } return nil; } - (void)ddbdRemoveTreesFromPaths:(NSArray *)paths { [self connectDDBd]; if (ddbd != nil) { [ddbd removeTreesFromPaths: [NSArchiver archivedDataWithRootObject: paths]]; } } - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path { [self connectDDBd]; if (ddbd != nil) { return [ddbd annotationsForPath: path]; } return nil; } - (NSTimeInterval)ddbdGetTimestampOfPath:(NSString *)path { [self connectDDBd]; if (ddbd != nil) { return [ddbd timestampOfPath: path]; } return 0.0; } @end @implementation LSFUpdater (scheduled) - (void)searchInNextDirectory:(id)sender { NSString *spath; BOOL isdir; NSArray *paths; BOOL reset = NO; [self checkNextFoundPath]; if (directories == nil) { ASSIGN (startSearch, [NSDate date]); spathindex = 0; dirindex = 0; dircounter = 0; spath = [searchPaths objectAtIndex: spathindex]; if ([fm fileExistsAtPath: spath isDirectory: &isdir]) { if (isdir) { if (norecursion) { paths = [NSArray array]; } else { paths = [self ddbdGetDirectoryTreeFromPath: spath]; } if (paths) { directories = [paths mutableCopy]; [directories addObject: spath]; } } else { if ([self checkPath: spath] && ([foundPaths containsObject: spath] == NO)) { [foundPaths addObject: spath]; [lsfolder addFoundPath: spath]; } return; } } } else if (dirindex >= [directories count]) { dirindex = 0; if ([searchPaths count] > 1) { spathindex++; if (spathindex >= [searchPaths count]) { spathindex = 0; dircount = dircounter; dircounter = 0; reset = YES; if ([startSearch laterDate: lastUpdate] == startSearch) { lastUpdate = [startSearch copy]; } if ([self saveResults] == NO) { [lsfolder updaterError: NSLocalizedString(@"cannot save the folder!", @"")]; } ASSIGN (startSearch, [NSDate date]); } spath = [searchPaths objectAtIndex: spathindex]; if ([fm fileExistsAtPath: spath isDirectory: &isdir]) { if (isdir) { if (norecursion) { paths = [NSArray array]; } else { paths = [self ddbdGetDirectoryTreeFromPath: spath]; } if (paths) { RELEASE (directories); directories = [paths mutableCopy]; [directories addObject: spath]; } } else { if ([self checkPath: spath] && ([foundPaths containsObject: spath] == NO)) { [foundPaths addObject: spath]; [lsfolder addFoundPath: spath]; } return; } } } else { dircount = dircounter; dircounter = 0; reset = YES; if ([startSearch laterDate: lastUpdate] == startSearch) { lastUpdate = [startSearch copy]; } if ([self saveResults] == NO) { [lsfolder updaterError: NSLocalizedString(@"cannot save the folder!", @"")]; } ASSIGN (startSearch, [NSDate date]); } } if (directories) { CREATE_AUTORELEASE_POOL(arp1); NSMutableArray *toinsert = [NSMutableArray array]; NSString *directory = [directories objectAtIndex: dirindex]; NSDictionary *attributes = [fm fileAttributesAtPath: directory traverseLink: NO]; NSDate *moddate = [attributes fileModificationDate]; BOOL mustcheck; mustcheck = (([moddate laterDate: lastUpdate] == moddate) || newcriteria); if ((mustcheck == NO) && metadataModule) { NSTimeInterval interval = [lastUpdate timeIntervalSinceReferenceDate]; mustcheck = ([self ddbdGetTimestampOfPath: directory] > interval); if (mustcheck) { GWDebugLog(@"metadata modification date changed at %@", directory); } } if (mustcheck) { NSArray *contents; int j, m; if ([self checkPath: directory attributes: attributes] && ([foundPaths containsObject: directory] == NO)) { [foundPaths addObject: directory]; [lsfolder addFoundPath: directory]; } contents = [fm directoryContentsAtPath: directory]; if (contents) { for (j = 0; j < [contents count]; j++) { CREATE_AUTORELEASE_POOL(arp2); NSString *fname = [contents objectAtIndex: j]; NSString *fpath = [directory stringByAppendingPathComponent: fname]; NSDictionary *attr = [fm fileAttributesAtPath: fpath traverseLink: NO]; if ([self checkPath: fpath attributes: attr] && ([foundPaths containsObject: fpath] == NO)) { [foundPaths addObject: fpath]; [lsfolder addFoundPath: fpath]; } if (([attr fileType] == NSFileTypeDirectory) && ([directories containsObject: fpath] == NO) && (norecursion == NO)) { NSArray *founds = [self fullSearchInDirectory: fpath]; if (founds && [founds count]) { for (m = 0; m < [founds count]; m++) { NSString *found = [founds objectAtIndex: m]; if ([foundPaths containsObject: found] == NO) { [foundPaths addObject: found]; [lsfolder addFoundPath: found]; } } } [directories addObject: fpath]; [self insertShorterPath: fpath inArray: toinsert]; } RELEASE (arp2); } } } GWDebugLog(@"dirindex %i", dirindex); dirindex++; dircounter++; if ([toinsert count] && (norecursion == NO)) { [self ddbdInsertDirectoryTreesFromPaths: toinsert]; } if (reset) { newcriteria = NO; [self resetTimer]; } RELEASE (arp1); } } - (void)checkNextFoundPath { if ([foundPaths count]) { BOOL remove = NO; NSString *path; if (fpathindex >= [foundPaths count]) { fpathindex = 0; } path = [foundPaths objectAtIndex: fpathindex]; if (norecursion) { unsigned i; remove = YES; for (i = 0; i < [searchPaths count]; i++) { NSString *spath = [searchPaths objectAtIndex: i]; if (subPathOfPath(spath, path)) { if ([[path pathComponents] count] == ([[spath pathComponents] count] +1)) { remove = NO; break; } } } } if (remove == NO) { NSDictionary *attrs = [fm fileAttributesAtPath: path traverseLink: NO]; if (attrs) { remove = ([self checkPath: path attributes: attrs] == NO); } else { remove = YES; } } if (remove) { [lsfolder removeFoundPath: path]; [foundPaths removeObject: path]; } fpathindex++; GWDebugLog(@"checkNextFoundPath %i", fpathindex); } } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL (pool); if (argc > 1) { NSString *conname = [NSString stringWithCString: argv[1]]; LSFUpdater *updater = [[LSFUpdater alloc] initWithConnectionName: conname]; if (updater) { [[NSRunLoop currentRunLoop] run]; } } else { NSLog(@"no connection name."); } RELEASE (pool); exit(0); } BOOL subPathOfPath(NSString *p1, NSString *p2) { int l1 = [p1 length]; int l2 = [p2 length]; if ((l1 > l2) || ([p1 isEqual: p2])) { return NO; } else if ([[p2 substringToIndex: l1] isEqual: p1]) { if ([[p2 pathComponents] containsObject: [p1 lastPathComponent]]) { return YES; } } return NO; } gworkspace-1.1.0/Tools/searchtool/0000755000175000001440000000000014753472315016375 5ustar multixusersgworkspace-1.1.0/Tools/searchtool/FinderModulesProtocol.h0000644000175000001440000000326414751213523023025 0ustar multixusers/* FinderModulesProtocol.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: March 2004-2016 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #ifndef FINDER_MODULES_PROTOCOL_H #define FINDER_MODULES_PROTOCOL_H @protocol FinderModulesProtocol - (id)initInterface; - (id)initWithSearchCriteria:(NSDictionary *)criteria searchTool:(id)tool; - (void)setControlsState:(NSDictionary *)info; - (id)controls; - (NSString *)moduleName; - (BOOL)used; - (void)setInUse:(BOOL)value; - (NSInteger)index; - (void)setIndex:(NSInteger)idx; - (NSDictionary *)searchCriteria; - (BOOL)checkPath:(NSString *)path withAttributes:(NSDictionary *)attributes; - (NSComparisonResult)compareModule:(id )module; - (BOOL)reliesOnModDate; - (BOOL)metadataModule; @end @protocol SearchTool - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; @end #endif // FINDER_MODULES_PROTOCOL_H gworkspace-1.1.0/Tools/searchtool/GNUmakefile0000644000175000001440000000072313231754602020441 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # The application to be compiled TOOL_NAME = searchtool # The Objective-C source files to be compiled searchtool_OBJC_FILES = searchtool.m ADDITIONAL_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS) # The Resource files to be copied into the app's resources directory -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/searchtool/GNUmakefile.postamble0000644000175000001440000000115213231754602022423 0ustar multixusers # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning after-distclean:: # Things to do before checking # before-check:: # Things to do after checking # after-check:: gworkspace-1.1.0/Tools/searchtool/GNUmakefile.preamble0000644000175000001440000000015113231754602022222 0ustar multixusers# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../GWorkspacegworkspace-1.1.0/Tools/searchtool/searchtool.m0000644000175000001440000002352014751213523020710 0ustar multixusers/* searchtool.m * * Copyright (C) 2004-2016 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: February 2004 * * This file is part of the GNUstep GWorkspace application * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import #import "FinderModulesProtocol.h" #import "config.h" @protocol Finder - (oneway void)registerSearchTool:(id)tool; - (oneway void)nextResult:(NSString *)path; - (oneway void)endOfSearch; @end @protocol DDBd - (NSString *)annotationsForPath:(NSString *)path; @end @interface SearchTool: NSObject { BOOL stopped; BOOL done; id finder; id ddbd; NSFileManager *fm; NSNotificationCenter *nc; } - (id)initWithConnectionName:(NSString *)cname; - (void)connectionDidDie:(NSNotification *)notification; - (void)searchWithInfo:(NSData *)srcinfo; - (void)stop; - (void)done; - (void)terminate; - (NSArray *)bundlesWithExtension:(NSString *)extension inPath:(NSString *)path; @end @interface SearchTool (ddbd) - (void)connectDDBd; - (void)ddbdConnectionDidDie:(NSNotification *)notif; - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path; @end @implementation SearchTool - (void)dealloc { [nc removeObserver: self]; DESTROY (finder); DESTROY (ddbd); [super dealloc]; } - (id)initWithConnectionName:(NSString *)cname { self = [super init]; if (self) { NSConnection *conn; id anObject; fm = [NSFileManager defaultManager]; nc = [NSNotificationCenter defaultCenter]; conn = [NSConnection connectionWithRegisteredName: cname host: nil]; if (conn == nil) { NSLog(@"failed to contact Finder - bye."); exit(1); } [nc addObserver: self selector: @selector(connectionDidDie:) name: NSConnectionDidDieNotification object: conn]; anObject = [conn rootProxy]; [anObject setProtocolForProxy: @protocol(Finder)]; finder = (id )anObject; RETAIN (finder); stopped = NO; done = NO; [finder registerSearchTool: self]; } return self; } - (void)connectionDidDie:(NSNotification *)notification { id conn = [notification object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: conn]; if (done == NO) { NSLog(@"finder connection has been destroyed."); exit(0); } } - (void)searchWithInfo:(NSData *)srcinfo { CREATE_AUTORELEASE_POOL(arp); NSDictionary *srcdict = [NSUnarchiver unarchiveObjectWithData: srcinfo]; NSArray *paths = [srcdict objectForKey: @"paths"]; id recursionObj = [srcdict objectForKey: @"recursion"]; BOOL recursion; NSDictionary *criteria = [srcdict objectForKey: @"criteria"]; NSArray *classNames = [criteria allKeys]; NSMutableArray *modules = [NSMutableArray array]; NSString *bundlesDir; BOOL isdir; NSMutableArray *bundlesPaths; NSEnumerator *enumerator; NSUInteger i; recursion = NO; if (recursionObj) recursion = [recursionObj boolValue]; bundlesPaths = [NSMutableArray array]; enumerator = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((bundlesDir = [enumerator nextObject]) != nil) { bundlesDir = [bundlesDir stringByAppendingPathComponent: @"Bundles"]; [bundlesPaths addObjectsFromArray: [self bundlesWithExtension: @"finder" inPath: bundlesDir]]; } bundlesDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; bundlesDir = [bundlesDir stringByAppendingPathComponent: @"GWorkspace"]; if ([fm fileExistsAtPath: bundlesDir isDirectory: &isdir] && isdir) { [bundlesPaths addObjectsFromArray: [self bundlesWithExtension: @"finder" inPath: bundlesDir]]; } for (i = 0; i < [bundlesPaths count]; i++) { NSString *bpath = [bundlesPaths objectAtIndex: i]; NSBundle *bundle = [NSBundle bundleWithPath: bpath]; if (bundle) { Class principalClass = [bundle principalClass]; NSString *className = NSStringFromClass(principalClass); if ([classNames containsObject: className]) { NSDictionary *moduleCriteria = [criteria objectForKey: className]; id module = [[principalClass alloc] initWithSearchCriteria: moduleCriteria searchTool: self]; [modules addObject: module]; RELEASE (module); } } } for (i = 0; i < [paths count]; i++) { NSString *path = [paths objectAtIndex: i]; NSDictionary *attributes = [fm fileAttributesAtPath: path traverseLink: YES]; NSString *type = [attributes fileType]; NSUInteger j; if (type == NSFileTypeDirectory) { CREATE_AUTORELEASE_POOL(arp1); NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath: path]; while (!stopped) { CREATE_AUTORELEASE_POOL(arp2); NSString *currentPath = [enumerator nextObject]; if (currentPath) { NSString *fullPath = [path stringByAppendingPathComponent: currentPath]; NSDictionary *attrs = [enumerator fileAttributes]; BOOL found = YES; for (j = 0; j < [modules count]; j++) { id module = [modules objectAtIndex: j]; found = [module checkPath: fullPath withAttributes: attrs]; if (found == NO) { break; } if (stopped) { break; } } if (found) { [finder nextResult: fullPath]; } if (stopped) { RELEASE (arp2); break; } if (([attrs fileType] == NSFileTypeDirectory) && !recursion) { [enumerator skipDescendents]; } } else { RELEASE (arp2); break; } RELEASE (arp2); } RELEASE (arp1); } else { BOOL found = YES; for (j = 0; j < [modules count]; j++) { id module = [modules objectAtIndex: j]; found = [module checkPath: path withAttributes: attributes]; if (found == NO) { break; } if (stopped) { break; } } if (found) { [finder nextResult: path]; } } if (stopped) { break; } } RELEASE (arp); [self done]; } - (void)stop { stopped = YES; } - (void)done { [finder endOfSearch]; } - (void)terminate { exit(0); } - (NSArray *)bundlesWithExtension:(NSString *)extension inPath:(NSString *)path { NSMutableArray *bundleList = [NSMutableArray array]; NSEnumerator *enumerator; NSString *dir; BOOL isDir; if ((([fm fileExistsAtPath: path isDirectory: &isDir]) && isDir) == NO) { return nil; } enumerator = [[fm directoryContentsAtPath: path] objectEnumerator]; while ((dir = [enumerator nextObject])) { if ([[dir pathExtension] isEqualToString: extension]) { [bundleList addObject: [path stringByAppendingPathComponent: dir]]; } } return bundleList; } @end @implementation SearchTool (ddbd) - (void)connectDDBd { if (ddbd == nil) { ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd == nil) { NSString *cmd; int i; cmd = [NSTask launchPathForTool: @"ddbd"]; [NSTask launchedTaskWithLaunchPath: cmd arguments: nil]; for (i = 0; i < 40; i++) { [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; ddbd = [NSConnection rootProxyForConnectionWithRegisteredName: @"ddbd" host: @""]; if (ddbd) { break; } } } if (ddbd) { RETAIN (ddbd); [ddbd setProtocolForProxy: @protocol(DDBd)]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(ddbdConnectionDidDie:) name: NSConnectionDidDieNotification object: [ddbd connectionForProxy]]; } else { NSLog(@"unable to contact ddbd."); } } } - (void)ddbdConnectionDidDie:(NSNotification *)notif { id connection = [notif object]; [nc removeObserver: self name: NSConnectionDidDieNotification object: connection]; NSAssert(connection == [ddbd connectionForProxy], NSInternalInconsistencyException); RELEASE (ddbd); ddbd = nil; } - (NSString *)ddbdGetAnnotationsForPath:(NSString *)path { [self connectDDBd]; if (ddbd != nil) { return [ddbd annotationsForPath: path]; } return nil; } @end int main(int argc, char** argv) { CREATE_AUTORELEASE_POOL (pool); if (argc > 1) { NSString *conname = [NSString stringWithCString: argv[1]]; SearchTool *srchtool = [[SearchTool alloc] initWithConnectionName: conname]; if (srchtool) { [[NSRunLoop currentRunLoop] run]; } } else { NSLog(@"no connection name."); } RELEASE (pool); exit(0); } gworkspace-1.1.0/Tools/wopen/0000755000175000001440000000000014753472315015362 5ustar multixusersgworkspace-1.1.0/Tools/wopen/GNUmakefile0000644000175000001440000000061513231754602017426 0ustar multixusers PACKAGE_NAME = gworkspace include $(GNUSTEP_MAKEFILES)/common.make # The application to be compiled TOOL_NAME = wopen # The Objective-C source files to be compiled wopen_OBJC_FILES = wopen.m # The Resource files to be copied into the app's resources directory -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble gworkspace-1.1.0/Tools/wopen/GNUmakefile.preamble0000644000175000001440000000074113251572120021207 0ustar multixusers# Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -Wall # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search #ADDITIONAL_INCLUDE_DIRS # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += ADDITIONAL_TOOL_LIBS += wopen_TOOL_LIBS += $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) gworkspace-1.1.0/Tools/wopen/wopen.m0000644000175000001440000000446414751213523016670 0ustar multixusers/* * wopen.m: Implementation of the wopen tool * for the GNUstep GWorkspace application * * Copyright (C) 2002-2011 Free Software Foundation, Inc. * * Author: Enrico Sersale * Date: September 2002 * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA. */ #import #import int main(int argc, char** argv, char **env_c) { NSAutoreleasePool *pool; NSArray *arguments = nil; NSFileManager *fm = nil; NSString *basePath = nil; NSString *fpath = nil; NSString *fullPath = nil; BOOL isDir = NO; id gworkspace = nil; pool = [NSAutoreleasePool new]; fm = [NSFileManager defaultManager]; if (argc < 2) { NSLog(@"no arguments supplied. exiting now."); [pool release]; exit(0); } else { basePath = [fm currentDirectoryPath]; arguments = [[NSProcessInfo processInfo] arguments]; fpath = [arguments objectAtIndex: 1]; if ([fpath isAbsolutePath] && [fm fileExistsAtPath: fpath isDirectory: &isDir]) { fullPath = fpath; } else { fullPath = [basePath stringByAppendingPathComponent: fpath]; if ([fm fileExistsAtPath: fullPath isDirectory: &isDir] == NO) { NSLog(@"%@ doesn't exist. exiting now.", fpath); [pool release]; exit(0); } } gworkspace = [NSConnection rootProxyForConnectionWithRegisteredName: @"GWorkspace" host: @""]; if (gworkspace == nil) { NSLog(@"can't contact GWorkspace via %@. exiting now.", fpath); [pool release]; exit(0); } [gworkspace application: gworkspace openFile: fullPath]; } [pool release]; exit(0); } gworkspace-1.1.0/configure0000755000175000001440000043143114752467221015046 0ustar multixusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for gworkspace 1.1.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gworkspace' PACKAGE_TARNAME='gworkspace' PACKAGE_VERSION='1.1.0' PACKAGE_STRING='gworkspace 1.1.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" enable_option_checking=no ac_subst_vars='LTLIBOBJS LIBOBJS with_inotify BUILD_GWMETADATA subdirs EGREP GREP CXX CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_gwmetadata enable_debug_log with_inotify ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' ac_subdirs_all='FSNode Inspector GWMetadata' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures gworkspace 1.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gworkspace] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gworkspace 1.1.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-gwmetadata Enable GWMetadata --enable-debug-log Enable debug logging Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-inotify Build fswatcher-inotify Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF gworkspace configure 1.1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by gworkspace $as_me 1.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$GNUSTEP_MAKEFILES"; then as_fn_error $? "You must run the GNUstep initialization script first!" "$LINENO" 5 fi #-------------------------------------------------------------------- # Find the compiler #-------------------------------------------------------------------- if test "$CC" = ""; then CC=`gnustep-config --variable=CC` fi if test "$CPP" = ""; then CPP=`gnustep-config --variable=CPP` fi if test "$CXX" = ""; then CXX=`gnustep-config --variable=CXX` fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu MAKECC=`gnustep-config --variable=CC` if test "$CC" != "$MAKECC"; then as_fn_error $? "You are running configure with the compiler ($CC) set to a different value from that used by gnustep-make ($MAKECC). Please run configure again with your environment set to match your gnustep-make" "$LINENO" 5 exit 1 fi export CC export CPP export CXX #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- ac_aux_dir= for ac_dir in $GNUSTEP_MAKEFILES "$srcdir"/$GNUSTEP_MAKEFILES; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in $GNUSTEP_MAKEFILES \"$srcdir\"/$GNUSTEP_MAKEFILES" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dir.h unistd.h sys/resource.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpwnam getpwuid geteuid getlogin do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_aux_dir= for ac_dir in $GNUSTEP_MAKEFILES "$srcdir"/$GNUSTEP_MAKEFILES; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in $GNUSTEP_MAKEFILES \"$srcdir\"/$GNUSTEP_MAKEFILES" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. subdirs="$subdirs FSNode Inspector" # Check whether --enable-gwmetadata was given. if test "${enable_gwmetadata+set}" = set; then : enableval=$enable_gwmetadata; else enable_gwmetadata=no fi if test "x$enable_gwmetadata" = "xyes"; then subdirs="$subdirs GWMetadata" BUILD_GWMETADATA=1 else BUILD_GWMETADATA=0 fi ac_config_headers="$ac_config_headers GWorkspace/config.h" #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- # Check whether --enable-debug_log was given. if test "${enable_debug_log+set}" = set; then : enableval=$enable_debug_log; else enable_debug_log=no fi if test "$enable_debug_log" = "yes"; then GW_DEBUG_LOG=1 else GW_DEBUG_LOG=0 fi cat >>confdefs.h <<_ACEOF #define GW_DEBUG_LOG $GW_DEBUG_LOG _ACEOF #-------------------------------------------------------------------- # fswatcher-inotify #-------------------------------------------------------------------- # Check whether --with-inotify was given. if test "${with_inotify+set}" = set; then : withval=$with_inotify; with_inotify=yes else with_inotify=no fi ac_config_files="$ac_config_files GNUmakefile GWorkspace/GNUmakefile Tools/fswatcher/GNUmakefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by gworkspace $as_me 1.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ gworkspace config.status 1.1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "GWorkspace/config.h") CONFIG_HEADERS="$CONFIG_HEADERS GWorkspace/config.h" ;; "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; "GWorkspace/GNUmakefile") CONFIG_FILES="$CONFIG_FILES GWorkspace/GNUmakefile" ;; "Tools/fswatcher/GNUmakefile") CONFIG_FILES="$CONFIG_FILES Tools/fswatcher/GNUmakefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gworkspace-1.1.0/configure.ac0000644000175000001440000000463314752464422015425 0ustar multixusersAC_PREREQ(2.52) AC_INIT(gworkspace, 1.1.0) if test -z "$GNUSTEP_MAKEFILES"; then AC_MSG_ERROR([You must run the GNUstep initialization script first!]) fi #-------------------------------------------------------------------- # Find the compiler #-------------------------------------------------------------------- if test "$CC" = ""; then CC=`gnustep-config --variable=CC` fi if test "$CPP" = ""; then CPP=`gnustep-config --variable=CPP` fi if test "$CXX" = ""; then CXX=`gnustep-config --variable=CXX` fi AC_PROG_CC AC_PROG_CPP MAKECC=`gnustep-config --variable=CC` if test "$CC" != "$MAKECC"; then AC_MSG_ERROR([You are running configure with the compiler ($CC) set to a different value from that used by gnustep-make ($MAKECC). Please run configure again with your environment set to match your gnustep-make]) exit 1 fi AC_SUBST(CC) AC_SUBST(CPP) AC_SUBST(CXX) export CC export CPP export CXX #-------------------------------------------------------------------- # Use config.guess, config.sub and install-sh provided by gnustep-make #-------------------------------------------------------------------- AC_CONFIG_AUX_DIR([$GNUSTEP_MAKEFILES]) AC_CHECK_HEADERS(dir.h unistd.h sys/resource.h) AC_CHECK_FUNCS(getpwnam getpwuid geteuid getlogin) AC_CONFIG_AUX_DIR([$GNUSTEP_MAKEFILES]) AC_CONFIG_SUBDIRS([FSNode Inspector]) AC_ARG_ENABLE(gwmetadata, [ --enable-gwmetadata Enable GWMetadata], , [enable_gwmetadata=no]) if test "x$enable_gwmetadata" = "xyes"; then AC_CONFIG_SUBDIRS([GWMetadata]) BUILD_GWMETADATA=1 else BUILD_GWMETADATA=0 fi AC_SUBST(BUILD_GWMETADATA) AC_CONFIG_HEADER([GWorkspace/config.h]) #-------------------------------------------------------------------- # Debug logging #-------------------------------------------------------------------- AC_ARG_ENABLE(debug_log, [ --enable-debug-log Enable debug logging],, enable_debug_log=no) if test "$enable_debug_log" = "yes"; then GW_DEBUG_LOG=1 else GW_DEBUG_LOG=0 fi AC_DEFINE_UNQUOTED([GW_DEBUG_LOG], [$GW_DEBUG_LOG], [debug logging]) #-------------------------------------------------------------------- # fswatcher-inotify #-------------------------------------------------------------------- AC_ARG_WITH(inotify, [ --with-inotify Build fswatcher-inotify], with_inotify=yes, with_inotify=no) AC_SUBST(with_inotify) AC_CONFIG_FILES([ GNUmakefile GWorkspace/GNUmakefile Tools/fswatcher/GNUmakefile ]) AC_OUTPUT