gnubiff-2.2.16/0000775000175000017500000000000012474430471010233 500000000000000gnubiff-2.2.16/art/0000775000175000017500000000000012474430471011021 500000000000000gnubiff-2.2.16/art/gnubiff.png0000644000175000017500000000573512474422122013071 00000000000000PNG  IHDR00WbKGD pHYs  tIME 1 %y jIDATxkl\qܻKˈ%.â$ZVn8kTp"-(@)E]*PQ8qS؎Hu^VX,V(J"r.ȖdI& ܝ{f̜|&kQ 1:,50 hl"j'>?cȯ|Zz_ZkPJ͎RߔRJǵjǴmRjL)§JBkmh?87qA~?OE) bu mmmlڴ>L34eŊOHXKZzJz{{4M1MSeǎ8G B("h28^>!BPȟ=sMDPJ]70~y/3ϣj˗>`yS_:k@Ԏy."^9}4Ri|PFGG9)~C$h  D6ֽs@gdLq%Ĉf(Y.ڨ%I;LMNʩ~fRiEKQ(Dtvvr1| XcZeN|&g 6>Rsk `Gdiim#2rnJJLJHRqlۦsr-_F,GRVVOpT]?w<T `YѨM4%NbD,k`*"ɐN$ be\4|x<΅ 8w@ 8}'1ktRh-[(aDZQ8>팍q9ja`6eaZkLDk=WJ%<#ÇVP])Yf.LlXGhH$DcQ {/!mc[3`.#pet;!x b&aJHئI\Eq8ZkDu)fZkReͮ4R8H.Pa@Z5*VZyρ6,hǩ\czs70TuxZOOo&MX6 :xGTDRMMfYGJq*0 HHŢ X%`NIP,w]ry\.&L$PJp]ǩyaP.\ i|{ls֘u 0 kJrbw'_JXgΜހnF,@Qs]* |\} YWA_,)QJ5 W^=T(QힷW~E#[6ڈ&nAXZkJ) @iMyWuf|߳wGv9`_h^ CTkD FP[Ì`6F`JaXj5fjaٶm裏^YOL<}RxndU"mѦD aXIpjLLX$S$M6h_5vomI62kWv///‹db6b$2Fj)OaS8n*1?OrE a7yX02JqXKv*Apo OqE-NJd,Lj,jT&ZSܽn\}`N&XZ\#зN?x8j0B̄ +s*àǡAĀ8=q7>?~-0 /EHICSIs_ ;sV"-HB*frb![$BTYT(WjM@8ZQTyeaiOt;BFƫzRIP[IQ3Ѧ&jj,WsN1/~=nHIENDB`gnubiff-2.2.16/art/Makefile.am0000644000175000017500000000040212474422122012761 00000000000000gnubiffdir = $(pkgdatadir) dist_gnubiff_DATA = \ envelopes.png \ gnubiff.png \ tux-big.png \ tux-awake.png \ tux-jump(64x64).png \ tux-sleep(64x64).png \ tux-sleep.png gnomedir = $(datadir)/pixmaps dist_gnome_DATA = \ gnubiff.png gnubiff-2.2.16/art/tux-sleep(64x64).png0000644000175000017500000001557412474422122014236 00000000000000PNG  IHDR@b bKGDC pHYs  IDATx{x}9s _\0H!fMn`ImR>Y4n)͒m˓II$\1, 62%Yw3# !Y#Y2?>sh~?obF_9((((D:f;((((QYq;.%>PEQEQEQzwWG EQEQEQE9v㺀|㱛NQHQEQE.9ʱZ8f!pJq};,-,EQEi-w|wT~E\?|wX9i^4;"-' o)?*)(G$n_Bcxc_5Ǻ_Q&&\Eeo;%QNs^֦St!9s2߃"M@H s=S|Q#NuCGw׻+ ?rr>y xsHdG8[૧ӓk e0?ι^l)骝K召)'}IxZ&bM@m)CGο%5叜 Xx)[n@#8L#__N`m+')~Fue_\VO ֭ů}mxB[nn Z[1jcL%_ =Ocʟ֨Lv:1sTH?/~|N?r~ŏwLEZ%THsyZ2ǯ=cތ:kďo?2,b |NjG/~4U߷=#_s召 p~͓S$$' ܃ f9{w ~ǎ`I|C&d_ ?n䏂?GKv#6׽v=ھ[5|Ts_?/~|I?tb #ӯ@#_i>I1XT7'rvNJVO}fǾulՋfY㺱0ms12Wh?߶NcC/i |?~ g aG(?mʝo䏤n `PWg6^#_B~i#{[- <<5 vuuqEq饗r's=ˏ 5n⋹8%`oy)M g?d!@L&UH ~ۯMv_ 2~ÿf.古Н4Gp ~+M#??gfk#_x\2G?m6 ZǸݰ172e2}ٳDža&K躻1)ͺnNz~nm3KRaHqK-odvƘ䏴IOwqp!ıfyNhgCYk#$_O䏤&Oo};e?8߸su_EO䏌ZFKZiG?mTZV\)ꫯ:k i 6t~'?[l~L=Ξ)ڀ?wUH0M{?#z 䏤9b-3a~PHϰ}^δc>+d36f}Z3ܖ-[ZO__;5Ns;w[bys6 _~_~g;[h?rkŏ-bm1fϤ!c[G?ȅƘG?Xk~Z뺻K/47O3\ J !ǀ`w' =CNizBRZ?89z{{ټy3[@eWG~_~_~_~?ze|__6lhQg бLce]Ct쿋܋1#( aBG1|< gB////G?Ѓwu;!9p{/uRS45+bq?8~pTJUr̽n?+,///% NcLbݺu@>۶HXFǸqnjJT'Lbͧb97MnFs!p?Oټy3>0Ȗo (>kgbM๗`v, pBuaq zyk"_#%Nyfo>[y//// cyƘh,i~7|3Zc޷;YT{3zYP|7l6͛eZ\[v%ryR]]]s90=Z\l<_~_~_~_~嗿3*Yk?s.m+ QT?bЁ!( EǞ={0:̉~a\WJ~^_H:#-ɐr9zzzd2tdA@Xo%[ GG////򷣿$E\7@2'JёQ %*Jb@X,!z}lK\.G6%͒dHRR)$tNr9Rtтm-p jfW9////m鏵:Ƙsk>?|_9jX :dT:E*&͒$t:M" JrtvvI>|irƠd$SIsRTr޽;v4@~_~_~_~嗿]-2Ƥ1ιz/apku*RjFR&**rB%Dt:M<'#LHRtttJparz1M6qmkv,*st_~_~_~_~.`O\%\l,1xcrT*EaQVfph! PͩM6`!RDA[8SXt)c>?3o_~_~_~_vZ:g\u_KIRcύ989Hg2$ Bb! C ZJ>'ۑ%188DX3VjH2CGVRkcTk5AD"g=~Ο7////[-e838b1FGs1$O.O0<2Jn99GZPÅX9KNRr.////[[-<~ɒCu X/////+B~A`(n®!+}Mc+N?Fbxv(T!aaYo 8 ૧~ /// ?t@! K ? mvqɒA|1*2te̓! @y3YT*+r_~_~_~_~?E; @11H, \`0V'.  <$d.m|d,y//// @)!ϻk%p AڂC˻+re&A|yY8P@,&〲o1e-/Zór_~_~_~_~kMW踥"6! ,@C:ϩ?PA&tU4$@ /Mydncd////m?$ ;K1 C1K@5p<վLWp1:qK5WmEGW+()砕=hSz" 0лF@~ 6~;>KT |ם1ξ%R&ߵp_2ERʛb@g;!eB~}I))~RʽcM~7H)wRQJq;@S!B]z!)Rʗ_B#zOpR~#S!ĠƷ3I4J3z6R~0~_;#[g@\ K)mLĝE[Ş(QE,<x2DiNWJn9t$ <ۘ>e)[AߍT5SK)O^n{ 8gocE/6h~q7tZtNN1ccpɟ~Ep޵QwRjx19tsuSnܙ`~\.| ]pg +v#N-Fĵ WT`wfqԭV;RJPoʯXE`Šb` K)E@҉J-`z{xW 8[)uoc[s~JJN!RYShŢםR~|`p۷/ -- KII ;. 33E(3UWI)FW['L~ǐ!C?S]]?QFQPPa|_4-Q(t> ɓ'2h ijjb|'mg |>VZŗ_~իQJYM;``ˠAˣk;7#Pi:zOM1x.:gW6~܈1PJ݈2Tq~/QʀR {Ptj4+5@J]XL`tsCk6 t`+PlVJ_jRiR;_m&[ RڤR !3Ow9*Bƹ uic<Rm}c/s?;)F6lR;V͚5K=gUw}:3TAAiEEEOT7t=ܣfΜ]Ro,LYYYkQ/VpXYb :#fnWGyzwUkk2 #~n(R?TZZ_K^?DJYg?蠃W_}ѨښS 2x C QsU`PŹHD͛7Oノs Eä O}}~5w\տ-_=o8V~w} "tH)ggg+B-YDB-g}:ꨭ6T|zQa(4i*/V_|qЫzAlkGi3z^P=:SU>}veggc=VyVwy ȑ#^nd'dٝ]Ov Oɚ /oqpH)gK)1(B'6nRo^!|!1<-fw(PF1[m<]=]J4 !o;I)WF ة aI)/)|}m11v5m4u7G}T͝;Ww}SO~ߩ;S=s'T]v;vlMORz,L￿/U$٦3Ϩ-poy{ァ1h)-Gyڰaڑ~mU\\^PPzmΉ5k֨}7qzYR^95n8uezJjΜ9V; 駟.ϪzH]vej 7'Y33qw=mݒd,ݙퟭCſ["!\H)ϖ)_!8}gp_%U^ЈƺcU=6*v'ZZk駟.u)(ݾE_J8pu9稓N:IM0AvT"hzUobz믿Go;J W?x;zG=So?:蠃 R%RJxN@c1cDo}fNWRww3 xUYY^`:cH)ϟOIsu-QFu-rz nլYTCC7p4G}Ԏ;666 . qz%"uNT}Y3f8@575uwy'Q Qllp[P_jkkua :z0^JyR;pT.a=_\&T'tRdiO_փgK)gCz2%&W~yR.~ǣ&N _I)zꩧ}55裏ZQj}Q3fX)~maz{ l6Uss(A)**RovmllTl;$MvOFtk$R;;bJKKSSLQ~:UnnnqWtIOVcǎikרk}U+VخԓO> ^R9.y-YtӧׯZbE7 C}nV@Jp8_bImmdks瞳@/c )woa: !NS}'ݒ?R?!6!Ċ UZZպuTvvB B"??_mڴM6,B!Ļv[_[>Rk,Co: PsNo8I)m6?vkjj<QJ\.{\RO 0@ZK盦׿&BknW ^Pʼn㽁=a hdffvMwܱOTk/u)>Z?^TO1"~4&^΃RǢWWW{MT@@}jڦgƌWP(^zm޼Y=jȐ!A/[Q){UyYYH$xqUW]٥<؍7ӧ'C@"RJuM7udw ui[o7ЃL)RJuv!a??XUcOˆU ^BDB}HtA[K)>z-zs4Me*//W''GzWo?򗿨#8BUFJYdaw8.0 3Ϩ8洴4SOu*^͞=[9\R,T{Gh|iK.D]x@ԤISzfE<^5:L? cO`EK UUU#!8@ކk PzoCw z-6ێdȼyhM=&ͦ/^۰чZQ;zBꫯ6l6&^|+(]fϾ%O !sssw HeeɱZbH](K9{]ozTcNwpI4_.n9kkkĉSz&XX\rz;n0Գ>222VO=TRSS5kV"c.=+3Szq7TO<9sfqV/zC=9x!LRz)W,@n[ܪoKTvv333w߭ZZZiVUU+21W%[{.?R/lI?؏RN>ږB.WN׫"k 1`czzZbEג׫Tk#=>Hކ뮻'vNe}ֆxK=77۹~UZZj9uLҎѨ:{Qז25z(|RT)Pm^N1@v>}uVGbK!XE{;q@FR3FmܸxԄ ԮڭBk֬Xo XOOH)NK, ܴi/,Z*s{{L h)@YJhZY9=\oCK/ԓ9۷[{!i`0hEL2v!|]Ʀ.MMMΫs1=e]1j5y$O׫#s*Nq"7tp{}_og{̙ +.o޼y;nۭsF&P!zݺu<~ӦMj/bMTwqGO+P_;ڵr[lw755C4w6:-X#,}?Ka~Fե^LU\.ՙ<1/w[ >Nᷤ^NߕO)s{Hrb~}'b1@S v6石E=?CQݵdժ*MACY-@I̺u}E[v+Dv$t˕oI&u{  ̐!wZM2;V gy&졯ܶ9w#?=Q G,d{rᇓpL2G!)ӧO'%%at2m4H { :X)u]GAAo;<'`ߟ?O(9t7EQ ٹ 7|@ac+9gΜ9;(8>NO߾}I~E=weF(ζlABp6t@b]tR bǨQ5kVog֬Y=۝]d@^xᅉQ^ͥ^j=rСC0!ٶfe'id~L: a||wfw}1 S!dԨQk$-ڿ_J r '駟r'y|ss3gy& ,>cݦ1`'3ʺuPJF1M04|S8hzWVvLT[G dQߩK1`1LmDNp†S50a<|pO0"1:&4vY 2fx  Ĕ)yN#-:kQ2Zu1l`)c̘1ᯩD "mlĤsމImWgdd_s7s_o-4W~$_`. _!';+DF ?ֹ=i=[,>,D`>ո-9g_?_induRaD"#?DGx83y|_~v|2ɬ :ujib|yH$W_}ŗ_~it2ZE$W}Ȑ!VE)Ÿqׯ?@(bgϞSؿ)))̞=z{JҿPAZ{jIMMr: xvNOȉ'Ir`zs9hTu2MS͚uTBu`0c_^{ !$!:_1լWxJ\"…?tzb7M31xRB[:___ئQ9B5JT@JBZt6lT#G_\\**+z%AKd䀮[N]~kPU(룼QfZQ (?j;wg8$_*4ap8BሊD emh48 2)YBc=zGJyc(e,DURoO稥KR U4UPXC p$FU$I쉜4"0vخ?2j=])JEPD_R_'(}T'?U5e*ڤj?V}>%K1bD׊JyOUʛD)?JUԒQ{S~Ry,ʻdB{gi(3R~JQy(3_2*ՊWTl9C9rdOA)P~ZoڴI]z궛QUWW5-GEC ^Տoܤ~?,u駨m+k G?waD BuP__߮ZѣU0PTos 3U[?>??_yg\tE̚5Kv ׯ/f֬Y,Y3bɬߥo =?6==O=4--^R|g|g[IMOfnB  w=أ4;;1cFOP#!|!ԟˇBSLzZfȖpTg=Ҳc<͛ǥ^ʭ7> 70MtL즷q/Λy|zU򉚊aqPJrJkk^)U\aÆsm߃ -)\u7o3sU1ӈ`z,^tsIRbɒ%J!z# $ n)#akr'v&~/3A@[ 6b dWRJYf %%%8i+BgB?]8 -!}NA=C #3ïvUyҥKyGz_oq߄ht2Es„Χ,].;S̩R*:묶z)!BX7$1'O_'Y=!999#ο'Li lIB0aDA$J@^^~/駟fƌۥB!N`;F8%irN -` ƁPyʼH:G6lseȐ!L8EaltzwVI1xw#F53j<RҒaRU(:5nl(H)!%޸ĜRT2ռa2j[ZÄ#Q#6?ҥKAӿiJ׬n.gۀ^ݯLrZHA}֝DJ?o?JPMdҥX&S~;;uq`{lhU7] N; x6 ؄F%E]d @ \jªbXAǮ# F$oaA4؂]*dl4 =aǯFy}cA]F'1'nc~Lj]d|H#~ӈ;w/D/`~{GfyA8`wg k][*?%{D)jʕjsng @tȧc '`7"4V0pdԾLc} !,PbҥՁ^Bjw: nĈ۸(}/M(Jpt2)r-.gZiBD㱊%Id?gyQF1qX^ /4~-w֜GKˍ0j0 ĝaCֻ?i&%#vRnR!0P@atp}i[oN8n5ڨbO?aܹ̘1Phۏg$cᡇ_Es"¢xd2 sG+!U]du@K_x=Fśo3a3N:8c &Oa2q,[Iha}뮻2mFmnAP]]mp 6հ#9ذa?-#3"Ͷ蟃6N;||;sq:%F$L44 ͝mMD"+G+Aɒy:$ 6ǖez%BkxQaLSn&-8i;WAM,mH.H*q_GcImx ef(P$'$c׿u뛹* mέ(Z5 fP@!c>A?^'7`xІa466&/|ꩭ;g@t4χ2=L/2~|0|/F0>XHj2V_FӉyH$L   DXf |0Qn <3!V? ix>Uظo[:+.%۽{P(D(&zD'־_BTPaX\PAZz1~p*ΟnonnN\>??^|qGwAM9`ۼO@6W "mdTBpԼEׄiDXn$c7bźug>`L!- /  ;+ ,95F̰"1fl~-\ig̙Z%#A?֜9S|qȧy瑳7ҋHIq`Dcu'ZV4Bz#ە_XcI2kte^4ٸqchZ:P,8ƚ-쟄%3 qu'L'2p@x0AԻĀjT' P,Y( s9>KI]]\r MMMB!f͚T8  I7;Yzaӧy]I{͓ 4g9[CYБט QJ5 !X;T z-2}V"BCJP/1}%iū_NN:ܩ)(M" `huOBJ+WSVVfUq=_>UOk#a1C[PT!8m=?-,0]^zE̹w>u3SQW m!D5`ePt$$*A$cdϜ;w.W^ys /ma i{BN`R\: GhYy͸FnS(֭[k'.7w] 5P^ k6@Y9T@Y%Dj9d04Fð|(̆tHk| oi:x *w}e{hKKK/^k\s3Ml*aC)UO* Qφ0 y=Rx$6 N(.Xe!z[\r1oo65,26BfXZXS^pumrAa }`Hρa0p>!̞=2=S+WCq5״s4gP^PV`Hq# }Y# ( 'YZ˗==RSS{wm9ؽ ǹ˷Aohcwcw'FhOZ 3 cz =7GˀIyv=,[ַRjO<Σ> &Pm[:@ג_u s"H,G̟=*YjεVz ؟6U4p:hwރ2\(C ugŊV PRK]vMw\|{]Aۯ h{?bn^T^;0'MJ"h@*޷ (: *Y l3*QKY g,;yy}Rc&ڊ=-g|2fBUVqep8q;'OSs3PK/:hoB t!й*teJ89Պ+ƬE]b_,<$u9 jjj `Ŋ[8Ws_of̹Z>{"`Q?=˸뮞JU!Ʃ%`ODҦtCa/2|3d ;\lZUjK")0쟵k:mݸ;wn [:_d%y享/nsхgڴ:CalIILiےŋD:# QZI;TB95ؚٔ܎D~tX`͟'_QQQMKO/`5a u&Ot~G-<3gdܹ{!vu'N; 0"?f6QM`kbd ٟC#l)H"(6a1Bz=z4~4M%47}]>*@ \ ؾ@o6*N84gc [ nk)=_~9h%$b8x_Zz˞Pp[+1|RhE3hW$̔)fDxedև2e^D$WҀ@;!'a*b~n PVMZ,lFʜ O}0Hʙ@Oq:l6 ~8-h|?nnzYN/g}ɏ4j`y 4x!PTo8wsA \vsØ"_  7|"^KݰlD"nF^x^g !_1rH(>~\!k1 s3ri TfWA7fBm&˂Q0<J2z.ܝ!{Qw nņ 8_']/>g׊Ê+XτjVRled&i"#;DmJf3d} \X# aX;iR9h)6)ӗtҰlq'ng〷,cwVZŊZɀr\LV;-Bl-e-e>MwPg䲺ZP\ӷ999p8(--eى=vsσ.'0iD‘~~g-d`F) <ԅLjP^ ւZ!dMИ E0FIЖE*B#;;ʕ+={6--q߅=9`&7w\B;R+"!Z`c=l( 0)f:vhGaxdD#nv}Y,~G[op7Ii啰y3@I)TTjaވ]6NL S 0Ӂ ˅=`tU2$_EEE\]G=A ncy+-6; b8gOxХ5ƆM>}kq?RCV?BhX*l(:1ӆlHcG;h4Y"T1x5]c!NQFYGI,}Sܧvis5JlrK'0b^ _uUw};<#Fă[gۿ5騬O;Qc42dHٿg}6/"fth:#^ ~<#`8q.5 "4>qo#)QJ`!EF1c? L}ի;Y _|mLoݮ&40c_I vpГ& ~ZDO|q1W9dk[YD^ 6viN[p> N|>sOhv6j{ovD:`h@uThCV7 ӄ 7djwX>dkovbාF9s dVAArn;s|3֬˩Z k[`CB5kʫC0#KECCiZW ;9́2{lx !N@G|gZ}455?f*kgDv9cӊ2 *} U~Wd Q7FЖj_1FRLYYYnv;eee\q{>jq%3#CCC#555o.F<5rvɬcTq C4 ?@u5d+hȤ5U*lHKK#==ӉG̙ 6% !ħgq< H&jkjϺZVؼy3͞Fr͌N-gtVf4:a|3&##MJJ NLfq}c0@uZW_vsC0m䡶<&\ȈJ52~H?|ڛECFV٤Jjj*v=>B^{5}7 د?Hl;v,_|9n\QAC}=uu4U0^Pw#ڿ Ų.:<ִ+-ܸ'%%)%)))A̙F| MH]!)k6>=܃Vo+-ͬXիof *CXPR. ?G)OOzz:8N6lUW][sN`R6{#e%Pkbju T] t;B͎7e{v=0+mXq{ed}r-5= \3K.GyS+D @j`c47 &/4yڴiVW+ѺY2[ñǺv&LĔW|%a[DIJlYh{WO?iB:J&;ەŋs7t(nHvAU(4>89O@0W_űEkV_bvuq\;CE!n-AƁ LF\H*BԐsI%ŝQJB+E!b̘1xލ]Tnڛo;s;yħC$kC$VB%wE3Ć9A$RjO襗^jA\d0zuN:ڲ9"C> f {8a$ |o7D!l\N ࡇ[n}8KBx .R_Uհj1+Հ0MSԦT;d~=uD.yF=wq8#85}l6>3ON ০VXQ=U0o(*fl^-Og|,!y-uB`RM!/nlܸkH$Nv[`;ϏCcc#䡼|3:RȢzFof7il6sY-2Z-U@tjKJJ 6 )%ofb5/IB2 v3i$Z[xhDeeUX[*<@ORl0M™lee1撓fpĕ>˅BJIee%]wU9.R[dӄ3tZ-47mmN'FP[[GMM @`04M*L Z2nxnǡvm`_LBB|W_}EJ Oss3V/A D"B20!Dɓv\.W|nQVV-ܒXk:I"#_3|pZ^Z-477Bee.XUUEss3>ߏC(SlTh:RRSŠ;8xr_[n%1h4dDj`*E]}K  ilillSkbdQ6cEiT4eƛ"\iYdddMjjjf?p\̝;?=]Z" !hRJ>Cw_&K.c}ZBV1h3#6RьrZxoL! ,J}pBn^~|픔p'2zw|)%sg -J_= K i֗?S`QH7T6? 6mIspH78{Q?wuE)H?`sI'4|yLE.E@U,$ A/[ ZS SǍ҇oNit8QGILE no?>J5U4W1?ʹ?1\Nwab'jd@`ذ~=m/ʀCR}x?b:mV/}R԰ HJfwh/'tkkk9rd8^ďmbDޯfl| X7@@86G'z}QJ^Sۼmu((uBzo'ɿ9?plu<2fsEr4@JfcVĪ4'Y{… <8ASi^K7r]iS544CZkqQSu.9אG+Xz5G}U.r?>'M" Yd K?^r֒@*['at9tX b/qf):_nۃ܂b2220 e˖qW'F@!r`$=JG}]=h`ᩕL\MVZBPxZ( Sc8 ==tRRRƟb[5uX@sﯿ A$#jPS[C0D"ղysh v%]hwZZZaE}览9?vSZZwmv$5Vq!r 7r hZZZhxhmm%Ī4GOKKK0Bv{p82A-Ҙ8a)))[_ܺ[;q`>vHfZ[o' 6mA8U1uoD6---2v,ʧөOL+`Z͛u]gI !.Bc=FfZ[}x[xN?Jj mi&<&(J)$ ۅI*^x)_|tNFFYYYdfdn)q(I" !f]t?p?^/>wx56zhhhV1a@ j#(ܬ͑b\nrsskMć~XLg KJMIoaI|>|>?.ZHϟ-r7HMPQRk6u0d#l0 ?gC[׽[%"%uDv'{T WXD|tjJOGEEE|7%R5~.`s 44BC T4Bu4:"` !Tl 4} y HiC)()Yn}M-_dggSRRB~~JU!=kk1`SN[A`8hI=^ΦM:uE?wyCqy1cƎVB'z m8t-q8SA:6b+Umj?]3;8|ͭ(|bbcK AO0/DHۃPti#hp8>O?0 x g2wUsAUIQGy!iv@n:d!ť#c^@ 2'@4NO>FJ۠ x`ĉP\G+ʾzІwi_aY +vZQ` 9z:8Ѓɞp<AYY͜6 I)"` V/nI@]]=uTVVQ[[Kcc#csj8‚ '|:i) XKYtv4ؔx  /$I 8NԩS*fzc_Dj D" ҇PhARq8n–`ErsIHn-NDJ?oT/}هh4BsS3V~? |>h41 `E-2-6lEݧOS]S?W\aE,BӧV"33S#k zz[1 p(D4%cQZZwlUMp'xc, :d`@eU@E]d,& 9 ӹ7hTJ0pwg޼y8LàJ0`(D(0 (h#Dm]iƙJ-e\*cǎ!--:zz 8EU%rs#Nci.@>lUhժn,X@C|DF "0p~B h47pg=%%%ng1P[[gT\,^t2@q9ccũBcٲe`D45yZ}"1? jgP$BK]]]||V~aphu~!i€8?U5a={6eeeμ8xC))>ࠃB&--DE$455 D"6-Y>OwM~:ϟu]gB5'D'vƍǂ p9qj@鈐4im)>#JE)OJJ UUU*~ !wDohz*++ps%:1r`-}D01TTB}>X o_ʍ~yqCZZZp8F<|we-t!'Nޣ_~Z )Qޤ~)UCH)~/-+<(}ɏF)ǟXF~VXW +( |Ggc !3#͑BP2Z)M%xo;}z ؟񟛛c>$a&NԔTp:dgSNmC!B]+]sRkPf?\Rn\.cv ls9XmvESL6̙өۮ5HMff&ht2ϧ׫w[6lMjf<*4~xBR8g$r:"3p{z􊘇.554!55E@mSS͍;ax2z{p8k`ذBAjjk ==؃6^AGqGWJ0{l233cXdfJ0$ b&pp8L;"7o4Rʸcu:>\. ߏnVES]R~V+͞=;k*B  aD5$ p).&/?ͤDirzX[ TiTTTL$pp'Ym6 !KO^7ꫯ͆;5 gi5hDGCa)͛uL\*]':~,%ˢė v;'pEBߚDmNBW+\|X+%{lvSD w$L$חʹFD"qu>1 ӷOkjt σ=8tu 0cƌxԔ(Y٤ӈFa"iP@}}=ig#~V?1Z\.#F ' 4?~<ᄏe$JavǘC=t ##]>?!(p:NkOh9FǏrqtR|*Iv!f3x駱p4Koϧ*"^B{=S< p7% fo&W ĜVD+f͚Eyy9G'?2^hz466K*J|CXz,cnd@z:>D`fظ*?5h 1wbƦP1+X+'̍l>zB+ɓʫhRjYVUN1LQpFv8JAv: "sSH ̙3'1Yo.4/8y uݤ[w3ёD7 oho>%~R-ߤFbh IR!𶂧Y|WV@a?Z@燈_(5aׅ@2t.PҜJOE֭[ǑGi}8{p8hB\<zS/>}:>_+`GlAy4l պ 8fmx ]FnT~k?(I#Ҕ7ylܸ /01' !$X 8m6.x >o65@ee%ޖfd mkSPaV (^[dffYe\2L`In$x~ϿÈiԴV_+M&`e @ hVv[q+͢N+NrKn&V@JiTJ=c\S+0>`(GF"# #JCN q0x#1jѠ-n3j( s>sh R>̲o/N8z730E׆*mQV^YƭfDϊgff2vbV?6UVqUjTp)eڹx===kR\\ 1QLeiin!jD1 3K6h `ժ/~' k0bpJ7B$6ZZZ8:}]qp(~BqŬ\ljKhTD"(Q#v2޺+W [ 77QZZK) ̚5rnO6#4`x{$??;2x{p8L  ba^8Yb%Jk9. !fࠁzsꙜ z{'ЅBaR"!w<` 0Xa6SA pHh#j`*d:jkku}4Mrrr9reeq9c}4[W)l>ceֱ@0Z}#ḑo9lFmm-aBP钸Y/k=Bv2vؘ%?-[5\xOۀCR//~Ymi&z # CxbP(gAX{XXc0vn755xDQ.K5OC B8K3<̙31MOGxx<DÚ@;d1l6n;ؤy|ֿAButost :ټy3^i` ?) hS)`yk_Vy ˋIt[s[zRL1 &bꫯf崶|ُxV/PPA0ꥴVWCI% gGx"q/'>9NZL#gdn%%%\|ʼn,6pȑ#Y[rsA~ T5bhif͆p% >nةNO$|̧buqGX^:@tkrio{bFr^g[װOYcu ͺ?.΋uS\;DnCE:eL7ٓ%M{e̙2k%%zG0u|>jkTsvgMh0m`sS~M4+XaPR0;+-~, H?223u%---zA׺^@wpuA.TJ9}|!P3p:]n222_weR0veJsssb@J+gM`(iTTTč_KmLfJ+kIacL81nƩAɍ;}v4 L/';;\ "[{Yc4zfcԨQsT8}LPJ]Ω `vkTsĖq8(S_4T 0"33ŋs(YDk@$! n17ƍ=fq]3gY?ʼn߿p:I80L2Rb yyX͛+NoyZi)ΞRFHw%:'tAg1oMbƣfClv9S\)1N0 S\233Y[R펏E;d))Xń=z4"[^ە{y?zպ/ugݝawJ S Κ"jjk,GeZN_!`9n7锗oO>rߋ_S!9薂5+?3Nױ@$)کm }? BvVuucXAo{ 1h \.55vLn… ]y놶T ZpR.SO&iit8q :`ê@?Q2e+Qx#NCʩENuDǘ~Ȑ!dffGauB}_n"BīrL< GKK @l zR[V2*e#MK͂Uɇr4"ŝΚ@?VOfJ.Y,|UT5tZw/3m_B[RR 'tYϲ?r,o VoiސfA8mk 6mey.@ wy{K-2eYj&NB]38p*)sޘ5*.!bVonh`9 d_CruA)4>lbc=iԅkH[45ռL3@ AqQ?vF ՝o_ZTDEE6Ͳ iKZ&؈)ME߇F]+8!JRBp駳j*+ŅPa~)f mݦ.>_̈sa"  ldggQ_VZ@NLɵYIvv6Ç~qwx@nFgW Cn3.(B+M?h]q, $t IMM% B8NMNO([|bEwKA9PXP@Uu5^B;8KVt%}v˸^K%ztA펵uLi0^TwfCHOgڵ_њ kES\Xp$Ck& N> M[%2%qNL>Z?H.N)dffJ l6{zGnN.~9>-?ylE0q:g]vIti*#uK{Rn+Lco*>6ÁӕB4kD 2cN{'.X@}}}\2~߇SD"ƌy͆xJ1< 83f')eƮUƌSHIMm{,oQB)׷Ѩ.虈on`K(Ծ%SottY+0Zu0Ld Nڲ (HOK.,GQ6{Xbeł"V4M Aw(:F׆xIOlo߳R!cǎ~ dN Ӊsh he1nSb& R],?RJPH;Cںbܸq!^SmHOO sr8N'HHDu*} !++.GהĺICc#ؾifcȑJlfztpG;s:.R). Xh$&1MEn^.٬][Oq =AT2ME{cߩP!D8>;?giu:=Ljjg$  „#aׯeeFa xXR ѵN8r`ےj4KtC=?VßZPMJ;,/E8&"JI!;;K@b_~~u"v /f\XUrgef2d`),(￷6ٷl ʯ!hP ӧo8vBJ(.*nKee:5 eRx0^ f9w3$8Aq#k8q]Rbsw@!H)-dL:U׿j4YO"~ﲊ4aM=_-:+&CLm̆郠їJ vI%uFKH.;S$rcʮL0F{#NSv>kֲ* ZPn⊓T?_TT¨8, S67őde琓_-eOJI߾}9s&>gV~r<#WU[BoTc"33fxCeU{+.%'~.W`q!(++s;O<BX߭L.xDJM "/7P,7 idgBUUUU)<5f2v;kQGeU۠|O+Uݦp'& ViivG¸ܱVS.e1йH$^Y ŕcǒc9A'?!;U`O{bsӧ󿭿lz)^upD+01Mqv!=#Wm@(p$[͵h#hʔ) fS~Y{ И1c}f6iCHI4G54()Y_::?,|7#x[s:&GL7*MJEma'BӠm6L$ 2}41:fd[l ֜"18VvxvtaLBY[}܀Z0b쭝L{ 0 ͎fNC :OEEE\F8*e7z'OIg4 nGR~ԧBqQG&Sli#f4u&}e444Ɲ~:@%f8"sl6 BVV j{-z=.mOgFp8M3@n 99444Pa=J{}>h9HAHII裏:e1cδx>}`F,4bA?MMI!;;ǃϗ_!?V+=rVFdzFv;'MnqF9#8BLDÏ0qDK{?`8y|8חUQ]Mn fy_16862Sr_ $#+\2cz?50%%>}0sLqkm:nؿ]rH)EWB?09܄6ٷ*:x4>l{U>k^ǀFs5E~T5pILonWrѷoHIIaʕt S~~Uy/WJ0a: ,cTh4{ӈD̤㡾>^Ɋb.oZr0 kD ԁ5](4ՀF7vZؐ]ՖH aEЧ\֭_G4ݢYXhs~Bi.Ǽ8W_}]TdnK TC!8ayymy?o."^z3KL`bɏKSެRԺ445]iʔ)!%?I's㥔ÀJ(2v;)1@SN,F !c 10ٸiS\MT-2 t_m[9J[3-]a߆dZlIRboUiBb8NI?QD"oGdB?q jjkKAӧ;@Rw+[Brco3{F;4 #^E,C+8Mۍ>N%f9vπ[ gwj%hVy7瀁}a㷼Z"H5/P?oW~ Ƞ5.{wB!Щķ# |_{WU~{zH$@@b 3è8~QQDTt0c&"5NSOݿ?>~nr=߬Or9{{wJ *M[Hl.G䛟i.$` ` 7e(Bx6B.^1AAt?+jk_jC4DQ88yN:D=D:6/y00IH?tyBϩ{ljG:S% N+\DQQGEC4WwLJրa?/ 8OJ9܃gaG9f䌘?O1I6oVJ ?0jd2n6ܟ8>}3s& _)>$hO'tS7iYZZT_p0Tq%Kٽga-E|KsC {L2Nknm6%CzL'd>(zY/&q3m4x'197YsO1P6W.j앯|%?^kxަc };13[@⯍شwtpD3ɨqt[ٳq\~ N裏f͚57 {&~̇>TG˶0 beEwБܶL9tq|'lmTz0m\)ǴV2L"&MX,fYn;yS3+)Jz :QB֠X,yy&uu۫BxZ%*G72] qI_T!gQT+r!|g,^ a($R)eB)K.C$cY6zuzR A{G;ӧOc˖KԧfOΎvڥ4 w p!j╨9O2pbF#ਣKR:qh4<h1,0RK mm,[<{kF&]-U48裏~: pb;U$rz?І;ji?Y5ˆ˶1E9!8yGHw6'?_c$3gNQr"<7!D^Jyrߵ Rۧ?\F!Q`l؆$uG}4z=@(L$@,5C%-T{|F >߲9 Pő3a! lN!":I+`:Y ʹ< `|~*JLA%>wk ~;22r b3%!W8Z0) ̞=-['Irt]V$Y NG1='߱n߶}QDCQ[~+>!q3!b~\VZ=N۠}Huߓ^>icǎ&4ѕ*Q|XJLE Q0ZёB?|.˗/G8M!{RH~I)+o3~R@GsBPV1 01-{{fV%T+ƶl ͙æ"#ŖK U%=1uz߈j;%})ۛXƪ$Lکj/f?/pc9'ofe(G%l xU[[۳ qgXrW#eL)J*7>>PGyWW(KtfcxnO|@U_r@dz? qPEli[$IƂ&qA6 iR( y@ (E.@~7YN=0 k۱l isy"-ഷQ*Yjuh5]KZK<۶T* +J%?p֮]L~biK/I)Ӆw\bfl ۲su0V|B!ϤIزu҆m- Ӥɓcxxr8|CK/g_ | ܇d TTu]zgoEkbhmi={h4jp쬦y31l6O\&gٲe c|H)Sjه>!8Huscsy}LU鈥@gZJZZسgGQ@U{ xsom=|.F~ʕ#_:=Qxq(qLM$"(Y܌qS%8RU,!Q4g| *ʸ@yWhmmmd2(a̝{x:fF}~J(z@^J~߂ji=!c\7-ȵw'T4[?}VRꥋQtG,|e[hޱňQ]MH?8.|z8ګOY8MB_{j< _Uݹs'IIWݶm8LiqTL&C{[;QG+-X4qJLmY{'kn@Bg.]m[&OQ50 3%gA nUw@K8NZ-4 HS0 c۷WГYl~+Wܼzժ9̚E6#Ҭu H)7 ,!cEUʕc[i TV)$(M]0Qm۶MJ׋mXr֕+Ϟ6}:\>efe[Z2C !kG5VarC:pq QXz e@ b,OށDCeϞ=Q=qdXlٕ۶nM4 a-7%oR Qo煺OjJUAɳlmmu51 RS%0R^mjXF0 ڱcGEuJȽ]vjqFScI)$66j7hj8C{{;00 ʕD1a'+@T)p$n0܅:1AL4MaD֖V=8h~ƉQذN8ᄽ~~x^;L_'5iӦ}'&d _~ %D2eV\AVOSPZ8 0V,R<?v ʠ򟷡D_`>}#H7MB6T}RDX:::Ԥj5mN[&2 -q{aԪ5)L27 r-u>)P *Lm&w^7㸘E&!SʆH"yGP`lٺ4Kͪʸd.hww##4 \Mozzks`/Ia|>R$c:oDp = 2X>q,v*h=XqjJJ%!dhxёqtq8c%f; U GTUܥ?> L&I)zکTCka`ɦH:7BLCE"=Lo:uFGhɓAU^޲Y,5MOdԒ ~,HPʷ.^ 58‘T;M0&tMum~j'd&>!T_D1q U!WqS괶b}ᇳrʔ&h$m!tPǂaXuxKϳ84Ga̜9C)AtEX1zM%q{j_j>\amJX'84rH4)~k-W^!&OLQǶ2l.eXTeLӤГ.t<:cTD4uWҽ= zEM:6mWx~.mڸ_WYs{RaڴiO6d^mG1JUcFza֎iR5T$  iӦKُyXnOZJԩS P220PթkVjؖMccMT_)M:0T1V m[000Mpٺe5˖-r!3>mz]k6l[3ժ GBi4uWo4@Rcsd@a֭[ŋ@{6m`Ѣ'Xl93gΤTƞZ*/ Uŷ۶6ZNVOlN^L1E 4u<=X[6otX H5BD~)/UBXZ{8CGg֋8^cC(6EgI)Lw\b2 k;M?%Olg{@6 &qZ6/;x_h㣙լ @ - >T>Hɩt)C ;.L?4Tz}$m8Ӵ>}:'Vxi@ifzyb1zg'y/})ekBp '<JM3a:jCJŢBO[[,RŒX! 022ˆf@$u]N:$瞽8 O&piexs}Yf\^ [cc:@ `,GݺkJ"`WAVo4)#Q,ֶV=۶7S}E⒯'@>>_-_vȬY%-vII2-<|0LL Bj=+VquLRU C#M@%k% #XW^E-z*/Y|5JiӦ5jeaH Wƒ I!tY@U>R5D$5k^TE'7lU+ rAZ#+SEGTD~@EQ%J&0p^ca6nܸ|WWݞڼ厕+ACzF.#ҳX +eP%Qa_ BoAw"jDY2cŮIF !Xhv́]w\Wmm-|.G%F8Rmq?$&׶- W$bƍ_+<˖,]3fJ4ӲȸnhWKzJzz] Z&WUFCQރ Eu:oǝJ`u۶GM1^TTRp^4VAzC=/Ξ-[0r4@xc"EVPHXR=T_f=IOO-yb?̞50>`m|/L } GH[U]47A) $W@;^r;n'MrvP/Aӛ!F1AjgU^RXBؖJzK~> ]+A?pOfAwKJa$cI&Ȳ,z{{ŋۋsnɒ+׬^`51 k ۲zMVKϸ3XNEtvu{|Kx1jtرc5==t(p&HIxkq3Y0o@Ʋb3No\?y@1`秠BsŸy$߽ȧ1)0J0.߅E'v.gtB 40Mk\"'c!%ʘ??VƓq$X-/vQ}_@ a} J@{5Wtw)n+jNpj;H!t[r+ }AȜ9z7mnQ7 0ٹs(g O+U*Ll.eEVֹްQEka@R`ފ?44ĺu>Jlٺd_=!ě?w:uJk%Q`6~ `0"\7ָ 5tMɍj"@ |෿[}O~S;oͅS&n=H)#$2VVlH$IEHk=(&{!عsw}{/_~/oy5r]9nQ-,Q V4i Cn1BB$X p .|m~\j@qtuu;o3#H={,KbH !R0X/cMEP IKB}LI>zy#v~'JӐ7B{$B)AL^#FF R`R5NQED$1ɽjN'Alܸe` Dk׮KoVL6ZFPım \ڟ(b\_#

W)X9~J$KGS@BقFSO=58T.OZxגi{}|=</z{z>avFSAVDqV!9c}#o* JqBq`x!mh׮WX[gdҤIEXx_ju?!cN e7+N'W"uvuN]l㦧^zRaR(-ڢT{MUQ^BO*ɆA -釋t$*7n[4mYG;CCQLlAO5ƀ: ÊbmX4i4rahkjXJ֬]{ۚ5k<.@F`u/tz1/"]bHa0-D01C}/b?BQ-c)udϞ=w79wɒ%Io pсZ_>4sִ9秮kb11L I$]B?Ro-&cIj݇Ga2T! H!^}{2ӈVŰ]A``hzAyD1 ,MrCb9@xF O@RaRҭe˖Mw+>g_fI`y $&ib8RTphGa:2Q4d"@DI58"9HTX"aAGnm-`11}ض iAm;ɬe`krnʱ8 L#]׏=؋6[wwkV)ZرcSLNDHuňkxA4Hh=z%q%*R-˗/@6o|eK;9tuM"|,2 \ih݇d\uVN ic#MK1`!a~$@.BڵJikm ˴|5<t%JJAd( a2}t(J@d%`u'uikc2R0r2?h yj3N2&}N( Rnow^GMNϒPQ: $՜dق^2/YLPaK"߬?-YrXMsC^FQXT4u PToyGZShvٱdY  i<Lo^({칃c oZ|;?ӫװ(]4u?Ziul UJ"Mqf͚m۶doj?ů_W-ۦa a:đzQ,107 t58ֺ ˋ=U?}m{yPȥ^:aGy׽ޝww{^"d a4H*fƄ='!HE8ya{ P|>/~vz_|zyWZip Ę 0j $ecwZbA 'B0UF6f{{w&tۼwM +(!P"CT+ئMo0R PbАR~׿O/_>!C>Qm:[?cākāôql_S-Xq$24+P1n"I 3H~,;ܼyO?}rɒ%[L:e<,zu_7aR $}R'L@|%cZ%0-30 Г^DV#ͦE-[ܷe˖OH׭]wê+&xEVQ.=滎,jDR! j FB+RE0m-cʼ'IRsF6}PWU($fhmmU`i&)%qW BXCp {@^/u~_mf: I>_}VZU+ZIF%h*6myl۶Ϳk߽{ 19^y}6}ʤLFl)bMhxRyU,SWzS:v?W5+|+M`89EEr\4bAB3?b5c|?PQ UӴred~7^姄Na" 0L") 05Np:IlxDQ8(oo{k_{G Ĵ,0a5لfIP@1mkKZZ@ [0e (˷z}>wyG9cc2ٌ;Uk4e!c@j34LD Iqf Y'mϞ=}sŦ$n6QKLTZ>lRI3A ٱcG*FҘɘTs|M7q]w5_,hsm؁1>h^=?]`c* T#]ըzJrL<@X  >>xw$׵o]l/4@jͷ)+u7KPT c#*C4jjW6M\ Q!cGGY&"6=omP9j02mi8\'Wk4cTk{Au܋p!ZXo*n^zo+w_ش?/|~ٰ w U i)tLGdp |7噖MTUTX&ֆ3B]UCo+m_~˟Kw5խ7::Z%ǻЋ CK)MHbj3mNl 6٣~U!S}?Ŏ_7ن=G UGDqƍa"T$[~Yx0T1(B_Rr#@&ڼO~qheR sЯ&F[i˂jo&Z22Qb }7&⠾zO?֢$ ׮]sO,ٳ2er{j1(R-Z]B jj5g]ٳ'I1uݴ-$ C6n P9nc\E L\xWrcyʹi1- 0hX(`9qQ֔9u=Wg{7&*͊a6ŵYl^{7Okԋ xYgW}5 ;b>n&mg@+ C2nFP7Vm[j,_W>g>ʗ( n0 V,RmYcajJL3 $,XB=RFa8߼yǯھnG6F+k23`0,°}1,:$Dhƌ =_S|\}0}+xU/-]#yLl'["ϓU }?`dtZJZ##ej!jjxhyh=<K)n.V@u,m8))R(r RRVk >@&-U g[_Ag^yj3lP ;%2pKdZ&Sli4Mʣ# jdd,S\ 260UjY/ޤz:>ozؾV.2T=jʡH\Dd;]ؖM}Q&/*dh3`T 3߾xkBMa] CPa3 3Ae2ePltuflLˀQmrkOE{_M\W-l[6†j{!4`XgRDԊeY4j$n*yF)>92\404]3׽T?\JMp"]*5,qJm2F;SPj!a;n:`d ~BX@ C8Y[=mW=L Ŷɘv|'vĆi0m jz[Zcdd0>j/h`u1pM /<>:=#n1UgA, ak0D<0HFUG'8@T/%}udeE($6xI%PbJDZP'xؠBxM@(RE$Э<#ӟtB߳^qxkιt\m mq,PַГLCe%MŊ!^"g4{ڵkp«> 'u} cɓ`Y6|B>G>ŶTZU\X W5)O S5ky* W^xW*6 |"7w}ٯ>gC(Nm<_~@^^o#MC͌MI87]Oq@)عs;{E8 ;o+徇ia h_qCX*D922NAQ1e} ?Z _HXQ~uK%vVXQt7 ]5@ĶT ?oQOgޠVo( - Wwuu]w翤@ȴZj"[lX,d ńbZA SoPTT+5So0:ZZUG{Sn|(x! &sܺIZoQ ӆul+v4McøhBQ c!k{K& 'd"5 u0ؔӉ2YM%*;%EsϺHfs?։GT8D|G`x|)Þ>`* iZ ]:3B;fXUsτR뼅?$m wzʰcD”d g{T {J۳|7џw?PC7 0~ع6n1f2ճLXsyGe{ѥ%g}zf9R_ ;¥;z`CuAVʔQ`Wil -h@K|9"AoqbKe i_jh1 67ҍǕ {`h*02Ͽg?>hFY a N2\Uʵ/R(lp 1 ~:!`6FQ"`l;//+TKm]Jm E| +aLưjF(ZѲ*T};e'phDl+5FXT)me` B PX2d Jr+U?u8-vuuOOoäQ3M 2b0DMLNeh+XabjtN%ba2c޽Sq\m@ם3}s3 A5L" jƘzC6%{'4iJR"dMسg;o}` @|#_WO;n,L Ӱ#8N-IJTy DԬENC t<\rx}/E[~pbU~j1cI&toEaa9JM~iPT5* '?y@D]QhT$_(beKؙ&r_yM"DOS"rV`ד*^v¨þK.MűM2;*c `&~gJ.{O&$k\ uT߲sסV[a(l$n-*9*؏p K6f<_8X`C@:`HԁN2l[f$8KUԁWuA& ހ &dmg,9SL%b QVaO?hww8f*tg5`=xʗ'vDqad=T .s&} !X`F[>{:va:^JX۴vBG^;?>r;z9p-d8jULq-1SfW Gawv AOB^&00Ԡ `jxx!< ա>Cg^j6+QAek7cAK:Trܯ1!jز(5sT܏kӁvرs!o~DuxunzL;1(WBYB"!03oTHkFm al[ ?\]sx͛>6mkpEwTXpA?vJ?~ Q 0n-b %njw|fh?T)T,8lCܞb ?˸k_8Sa ;uV؜~T.Y 4?;`XB.ز(l矄0C=Ӝκ>l }CbQ_V9t8oƼc!``G-<;dt;||LZ'IJLmBț 2§͑L6ɩ'eY_y hd4 aLo9F$ 51>Vf2Vn!px'9I%dj$4Z2]yZr̸],,^֟ہ *P0 ɐmIaD8U4`0 $Z2:p848xxBe*5TW*9TЛA9G>7s2}>UQwO~0m`~䦀sлRB-`.,Z?zA@4@z0'KO@<ՅzL@@d8z2G]˓8H,L}DSF`!PGOI%xlبdyA%7YGB VJ} ׳ X@_u{RQUOSa몯1ri#u,3Bn1kB؄5YT$,P`v+λ .7ah:P{H; #TgbS.̢):1L P¬y{oֹo³T FA8CǠwdR, :ϩ1ƀI?C[&πcëMh02NUapk#f#0ZEW yS +&}9L,pgax˻ԫ=[<ª6nʞnQC=fM*s̫&! a?*Tz=\cشkJ`)l%~g`6n=>@V4O[VҥlSkߒe/?-EϾ'6Or޿PMA n1I E %[hŴ,%LK3 JZ#F+rB!sw|l, #_s]dYb"7"4,L?BM Pb2ՋH & j |]]]:@b~Μg!r-(9 'W" 7aP`{!#?FzFRaxd=4\kԛLP$oUg'?>6#*98$H^hqC7'&d|=%ߩ{L!_%#`@!ll@Z a=ʫ ]zd}FM|`Wx`^6`v?d I݆A^=`E毙3=bff93c yKx 8ٱba̽U;+r L*rksLck,Y8#!A EYM\lL'Y~&1]CLE` f^&Y{˼Я8+8ȝI{Cb$A HzʬCO8 #jFsH T̖k ㄙաƨj:NznE 5$@ڲ`QG'a&s655ah7, `9[*EDa8AHRSc<[hL~_0Rƴ9GZO>"gIgҗ,TϮ<3 {;x%<~Qmx' Q"H+f{@CCAF%U?ܵKCIx{ջ!? o;P: @aJ Zzy!#|Cd0i?Anm)@PW6t,B2G)aU%ILf|SUT^ |V\4701Xt\SeD6V[}}] ^9"wL :"n@bDW=Ga_w=WrVr8L.xu~_Zn}1L`a`+dK=ƀ'ynx k[(D2M?M $xJ$1c=b>9a?‰8,&@h Zm00r A\,!:x!ס?ox2OĊTynŌu(8q"!9 V ]@;xޢ3f 3R] X$;0PƀZ? ҡ X&ǵ_ʉY +| h'co=4 JԲ2}lۡwZ5%kF7cM@J ÉmJ0{q~rhc5!UbuG!`[A ApڶmU%lj q,ۧ3@6T28KR ?GxBa:Pb,ަ7CA cfpFnSfSOι@EfN-AZ!x遖7#dd?LQ`Af[X ,N9AQ`aSCG:ټXUQ'k9 9lO&*AUaFlYW`~xٔn-TjN )u5k{Kk/ ☥pLz!]Sl K'aVJ&+ R/̜l%|ɍ/i RJJa(048U<6lvA{6ˤdZ$YenZTk868Ae//?Kb71 A/_2xl#NgwK%nH,W-LrJ\"b Y Bs,,gCs/v'wmrD#("6uH>ӆʀGf#dwqŠH7e{z! [Bv-Y9(M Ѱ@Ɍg@&CɉZ1]LeK7r_4N{N; :A퀚 3w*H_?k&chMia5*P4c3ȣorl_ K7ʁ 9I3=r ]&h cqDlWX XI%Xܦx6C32Œah5) ǔM,aJyk>M=r;ml  ]j( 9ǜǃ`L=0*ʍ~>\A+3L;!_W%kcx{ʜ;k vvձr Vܢ^U QA3x6yv,IF,x  -m(f]ҿچ`^$ib6pkQ(57DxA;hlQ}U۲6ɖn`sx ',%AĪ5tfm ^?qD*?Fg 0 Y]}Ml::c~ QD(L-P~M^%; Z!Gހ̱``,١\ s ݰz[/8{>lATGs1<-r)gi$w+O9,TF_Zݟ'YiΜyd ሷ0Os`Ge)a#pOBٹc Vlw}g1<Td Cܣ_pM(,WI)yPʴnctlh uU7j`>u)gLm׶!@+Vp7c᥆` %_vW},`eR{cGƒ\,l5VIB[OE/A;hvAopOKE1K;z!!8B!X{" c2dka},;& A/pq{+sWU,2N¯-BBJW%|~4r6&Ld#K2(-\ V1&\˷ѻ# Gvl Ce3Pq-0qDս)Yh^?`5(F׈ 9 _Q]`DѠWsD 6\w?M᩹ױN+DjUap:+S~ȣ?P2 X=a[&/7$ AaX ⢗σvA;hvKF,#v- bL3 *O` bKvZ%/2815P~R@oc.B@\vNJXV^)-Mp3ʹG|]Y}%ׁn*e-MzP/!hF< 0WjAXkB.b#(03i01`\A;hvA;hR'%a& c* 4F_ _׾Fm(ƒ`YSLrLNAYEqA;hvA;h8?/ @IENDB`gnubiff-2.2.16/art/Makefile.in0000664000175000017500000003455112474430241013011 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = art DIST_COMMON = $(dist_gnome_DATA) $(dist_gnubiff_DATA) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(gnomedir)" "$(DESTDIR)$(gnubiffdir)" DATA = $(dist_gnome_DATA) $(dist_gnubiff_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ gnubiffdir = $(pkgdatadir) dist_gnubiff_DATA = \ envelopes.png \ gnubiff.png \ tux-big.png \ tux-awake.png \ tux-jump(64x64).png \ tux-sleep(64x64).png \ tux-sleep.png gnomedir = $(datadir)/pixmaps dist_gnome_DATA = \ gnubiff.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu art/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu art/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_gnomeDATA: $(dist_gnome_DATA) @$(NORMAL_INSTALL) @list='$(dist_gnome_DATA)'; test -n "$(gnomedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gnomedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gnomedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gnomedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(gnomedir)" || exit $$?; \ done uninstall-dist_gnomeDATA: @$(NORMAL_UNINSTALL) @list='$(dist_gnome_DATA)'; test -n "$(gnomedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(gnomedir)'; $(am__uninstall_files_from_dir) install-dist_gnubiffDATA: $(dist_gnubiff_DATA) @$(NORMAL_INSTALL) @list='$(dist_gnubiff_DATA)'; test -n "$(gnubiffdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gnubiffdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gnubiffdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gnubiffdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(gnubiffdir)" || exit $$?; \ done uninstall-dist_gnubiffDATA: @$(NORMAL_UNINSTALL) @list='$(dist_gnubiff_DATA)'; test -n "$(gnubiffdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(gnubiffdir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(gnomedir)" "$(DESTDIR)$(gnubiffdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_gnomeDATA install-dist_gnubiffDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_gnomeDATA uninstall-dist_gnubiffDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_gnomeDATA install-dist_gnubiffDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-dist_gnomeDATA uninstall-dist_gnubiffDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/art/envelopes.png0000644000175000017500000000631612474422122013445 00000000000000PNG  IHDR00WbKGDC IDATx{l\uv?{ΌǞc'N#Ah6&KRJmQ`U8='\s-?#& X<htt4;???;rnz|Rw[t _=;;HV* ,K u ү+H$n?yo䤰,d2>???/|h]. N)J˙$ɐL&j4 9vd!myx۶}}}q?|l;v:0ZmWB|B4 k\Vyyz'N099,˴H$H$xDQE!رC=z__L!_zρ ({)SsL6mڔtz뺨J:X, S*@yaȲL*2_{5ѣ?裏˲,arr;CڲeҎ?9|_J`%#b"@ _)E,ˢZ:B q… r 7.$*P.fSO=%^.dմiGaffٶm pHu1( (+?J$y`YR.CASTX$Iu],"Dxw7x۶E^'b333xiYY宮._|QX7,j}aE`~*H/ P(PT#JQVq!J%*e177^{-[n~)>`/eMJȗp 嗝۷o_JDTB0N&0 V\I<0^ڵx3N>͊+N!Md2<#oXQx!D<<K.ettJBww76ldYٹs'lݺ zzz:B PVb\uUXbHwwwH5Y_{,E LF;w.,Y4T*vm$I^xFFFajj|>4BD"Akk+xMHR`vS;v̹;e19("((IX$pW3>><6m"Nl28|RO"cdX,$Iὗ,Y4 IRR5ef;_ ic3gȒ$Jfa˨:Z\.TUlƲ,TUeaaڵȲL@ގ$ILMMa&0==ͭފo/})X/BȪA$ ]CA,_vڈbl޼;vObYVha O fKz@ e> AueYaP,瞣X,rA8ur]]]LOO7*&_\ŀ'2j49{,B:0Բ,c6.h4 ˖-hzˁ[y睕mmmLɋX,>oThggg#CCCxHDGpTՈFT**Ht:(`^P>7nx n;22"vڥ4By p+.BHIQmj*%rU$+ETUkl~X~ }[[=cz0.53 43ACH5M/5A_E=?'  G<0.o ݨ/@oŅ|*oF7ӤlsNV{_*_f4m6 gk>f$/.QLo3&a!5 ٜ> v9%-vWʺ+[ Hyɸ}"IENDB`gnubiff-2.2.16/art/tux-sleep.png0000644000175000017500000001012712474422122013366 00000000000000PNG  IHDR@@iqbKGD pHYs  tIME :}5IDATxkuvtLKbxI" X8D U*v\).2(SN 1e;RKHTB0$I+ BΣ_C,ޕTݚ?s=."99+i2f lMI`p=b%HÂ?ka Xp+{16F@nx> O;E/$sXK{8 )m)eRK)R'O%O{NJ)ˤߕR*lH)ћh!B<,X!8eT^2o-@}礔Y)7ۏ &hoBOe.rxK)<|{+ !nBg:qXsBg*  V \zBJ;? BI1Nh}WUeFr20[P`ٲeXyooJBѰr9/_W_@C޽f^}5zaӤOL9N_wwwk>~X#:5kr|Rz]Ҷm$jӳkm6}E_`޸q㘮H+z֬Y$:/BR .8_wvvJoozkϸ9[lO7닯H)uX>^裏N\."N#ԏ<>k׮ma ѢEtЧ[uGGGg<^=@vm8sړ0u;Z7 y6rY)Si,'\xL>I~zҥH9qJ)R/ dO*Y2 0gϙ3 }6o ԩSYj՘/]E CRJf̘: (t:=fK.4M&TM68Q_wuT*D`Ϡq Yx1/ 9% \!Nmi2Z+Gw3Z=WOKnj3' j{׮X\hڬ}'|QT֊xkٲ u7ߤ^`DU t8BzDmßS9F<PZ%?%AkM\fǎq1ƴ! ]ٕ $b 6̺H,T<}3hYl0 Bpײn: <T*SըMZ6Reb?3URֳ|p2NuNq]4q]RD:&Ezx=$N:RʳZ"@*_gɒ%h P^o>QogppjzR0 GCd22 t۶mT*8 yܬm8H-;:; 5*pP .co{V=AahLT*؎C&!b:eYضM.u]<|\.7yqplBJ4I)֌ <\eٳ54(~,@a !nk/r5׌*h |DQx&ZJju(²,,qL$N&Jamfma&a"`Y=1睬(p)m̝;+)b!0eZ4Ml&""xOXd2HeB--n,@at ,BkMq" sa̙|Ut,X =V`!%[i84eBR |rnL6 V룙]КBR?QGJ?h,gY .l'O%-CH1 %"4V*iQZijAVjBH)92@d&B=O(D 0L'#@E:CͲ`<# C@cQ0 , )%ab-RtĘOZڏԾtE(5=RHCf]h "KETߕRXu'nB_/B1vRZ"^ĥ ? R =,"aebYh^ $ CTErc)%o߾ %Nm֭[aϔS4B`ROqH֊zAVCJAmFAHŦE(HQG2H ػw$zƚvΝrƍ+ ) cuYafH)T<!P 4 (;w|i&'c|rV6 v9歗qTus؎p% b ep$N-*#))@^z WeMh=;o쫮b޽LHiX4Qytίur%)&M8i t#ȔaHLh^344D2,xTuˑo>'mDo4XS#VtuAmq"_L:7|,Iry' I\2G}BK4 jPDŽY~1#Ϗ&gx>;0Hjcݰyz_U/gyK❝bUwQlP0 .2?>{>mR&NJ,*IE 9 Dt exw'<6̃0r _gO: 5 [!Y^ȧ!X>Nj< X~8R'/^^у*sh}[Fetepo}A eن$I$imÁX*^[V|!Z5b`sT/g-y'MXK??U.->&z{r׻Z4}h|4M[zAzUWٽ{3v>eLLؑ;22bGell֭̾b1Ʈ_گX؎ڱ1;::jGGGf;x[nJ){oG}pt.^~czݾ.^rdd9!ı/;adb"]t=qj{1nl2;>>nⓟY5k_=ꨣCCCvppЖoY m'aȟ'x~\pŊ xb>vUApDGN9Xf J鮷 8V)=k펗Q911-[^}ǭ=RC)e;22ā[.nyDyhhK.\p1;;k| @jba7y0eGVCJ)(~툃Jo=O7W찆N;7^xJJ%@,DP*^~7a·rՑ1< _$4ڐ9J)V:;B .͛7i]pZ_ߐl^ { j9&~4[kCs 7n6:߀L( `ry#{칃oW[p!!`5(ɳ,t`h07; h)&Nm{˗/q]x3߿&nyڭ V8S|K.o[wR,Ee)i)Yu -@. ˎ;i=g=:k$裏z/d'oC'[3ӐlK{@4?}N9J} >^$1A\ɲkXt:k5n'[6{tJ鮮֪^~,,^c [n]90nWB]<H&o"'^h_Z]/xK㚆BTHNX]DO@o iR)h󽐅@jwCu+>x=Ƙ /=Wl7u2دKY@ \=NHe&mV'E-nQm=D@T*'߻^ܻ .xEaPۇOUJ6:LOih΂mA$/uඅ7jONǾŴ=}|R%`AC$|_bffWbyHHGgy&nQOk S [͓y;l [¶ P(I F05,D?,2! Ekɶ`ۻ QR|_zE61,)]{O=G1Rv<-~ ?st:Ry߶n BS 0Ynh_@ ipRՖ00z:Jn14>c>Ϻȫy;mwdE)wǶm۞ BL}}}Wjk;/?EjѨ3;;޽{ٻwSݻ9{Xm)NIJ6x<> w~ 6mSiĖF?[Z<dkQD\+aHQaHVVZ6l _"v{AfyH8666!!˖/VI^hh4277\웚^t}fcUu96fYdt}0(bD`\xGQLRZRϓdYF|{qM7u`W$dYv5,}}}\{-y9c@yx<8b 0 jHVV|)ҍg;^JIT}0 8&'C0@J )%j}5j}]k! C,7m⡇^C,+qD@BGQz^x袋`LۥyDQ>ˆfI&MSm6m4HkGG8(Gʥ.JA~ncVM?Nx7J/)n(B4;8>NQq 7hѢ#"2V(~NQL\ DQDmqLT(w\T*u8R)SVVKe2Q!Jv_RV{֒Rz&!DYk}19s:nEo+cPXS+߳ac]ERrLGDQ9 ZK( /K3ZeI$i:j9< fGں@xw1Nc̶ bTzoR}'WrބIA!}#A\awĎ9#(,y(&О硵jl6ɲP! *h}ϲZRH$xI:h_TĖ,Yʫ=WYb'1y(UK-hKji4-V$IkAzY0ۓ#Vc )%xkwgo'^`szY\)ƺϺc m4¹kK%3RRef^V  B"(9f c}t[ ;}i+"xI's?zaQLD}ܗ纷Wjժ|;N##0R aRa{] 0:/ U@pJ!}lDIc){ k2PuXia,.x^@e?S{>sr#;^o8N}oqed]G%<!ka;yJi"2RdyFfd"@AK]YB #"=c,is׮ɯݻG E;'-||E"+ [\µQ0?m%@xx~mK*GkVΚiFdJd2(c8FRrEjONnq )_/}>я<.8 Β&dDa_$ҋPV` -<'rԭdJf\[u:QeqDv9[lTͭ߻wAr!w'n=n?C;DyQϕZ=rQXXO H))Jj`,1 ҴFoE720Zο홙ynjAH(r"# ΄y#nJ5`<ZHt ё =0FdK].K>]/D XNxf!OofZ᳻P ɌG=r#RQuBS8g AXOh0 E 40 }4a:=={ܿlO S׊*\Btc4tUR Ȅ =#$dxx v͚ *\ C# /3+-:4v*pOo7Qm Mg3UM Iԝ}.2i: aq?Va_},ۿoڢEOGeoa˫9 A"%I iUh}9"-5DVźsL%p$m_j@~Z&}ίr_"An"d5y XT ]\]sx~E@?rAv/GV (Lxw=!eƗGߺŝgbx3CfW[=J y^Fiōb-ICY@V^Thf3%/X7^@[`0EprN٣:ל3MHnƁM cK!yh KnH4.aVJsOAb|+?gmޗk3[Q"4-<pZ9t$)L5uObNǼhtPw_ U>]1oڟ}͛q $KRgC1bWSYD.f`6!~bf^Z[3gO&zrH휁<:Q?u)gU9QF)&l6&~)6Ǭ$_,%@gnVIENDB`gnubiff-2.2.16/art/tux-awake.png0000644000175000017500000001022712474422122013347 00000000000000PNG  IHDR@@iqgAMA1_sBIT|d>IDATxmp\y{%wفH MMBC LSyPB;-2I۴ 0iJL3$HN&11[66,cYz޷sN?ݵDDؕm!gh9{<9} x}_YRJX Z1c̐1/9H)p5p+½g ہvc̹@JR#<(46!O0BJRfK)O~nB.7_ )erkĥ4R#!D 륔GG\!wp5`81xR^F;mXLn Hpg$tkkkcƍ\wu\xؖʼna^y}YN:w4r96ŏ & C=ʎ;ؾ};J9;!bgcѐR{͕yy' \. njyS(z###sIo/_vٽ{;;9b{{{;;^~e=W)ϥ/6Gm| /7W\g&''?44d֬YSuyK)͒%K޽{6c%^ w6\&–L!.)yGm׾{+kjݺuT*oT*={IӋ~vNj7 !~ɤ͉'166f!~n My@i/+Vh^ ]]]_ f6R@woo/B4Dcfog>- y.袆<l|===7˖-3d!eY^[z^{衇j;pZ.@7Vj뉿6js͆n}ʄA`(2AL&#7͆ j:5ɩiyAWEz mXk"/CBr ?UAWdŬBu ta#AH!022)f,&g۶m v)|2zH.lYV`IOoTDATD-kGX,o}[ha ms#A9}w4?"9K C;<`F)ER'}f,f ,Nڶ-m_?߀`^`# @|HVLi*b-}'m;cwwߍ1F+f,&c枞^|E:;OC+0ޫ>gajt2T KP*CXKcA& 486,kH9J@&~ϑL&Bor-pI, )!p ? [?}ϱwġ18| 3*(*+oO6D6NL|i6vCߚVu_ r=|;}l]f؋a/zΝ?0|t֤+dT-R7ì-N{{;Nq]qR8;vk&ӔH)7Oco->-hRe8LqfdYNEhJ{Kg[]^t&՚bEK lt:uI$ˊikk#L200?_3q)F95R~cL+@*b=\rhP(0;;4~rbX>OTX,R*PJ!IJ,d2\%͒H$ٶ۶ifٸq#Y&'8rsBf$ 5«f!W1]ylٲ!x_B"v&ΐH8$ 2 l ǡT*8uҭdY$dt:]cYDu=H!E$r_fZ  ΫA)!IcL,^x*NL"U<2?ՅAQцc m۶I$$:mˊqR0::.|3" wh .֯_W?DZ pY}U,Bۢfٲ?0dNu],BTs_)1Ja\.&(蠧gK}LlvҖp0Z3!HTĵ6ʞ= "NcZkeYcR{xG>a?WFhY KPPR.d '$.Tt:ŵnb帮[酚!AA]Ԛ=RʅkTѹf} nA|/@J iő\Te٨(bƍrzBT8uQ>|0PJBXѳ&1r<*u* 1uW㬔5^|RXMMضU!j8[%=Eo,FcΝ=׆"@"DQ~(*RA@T"RI7I.Mk[+ݫ:~J0չ3211jX`?yС8!ō+VIJm,iّ%EJAT*efKe @Z*RxGū djj5Q>W7 S_21yS]fR@^ C0IJ'Su];9[x~i\ icDf0"$F$\hFێ"! 6u3,~|"5?7φ݋-]g.ڝij%"v-mw^@"J% 7]"#Vvmc@UPYgf+)OM:eg(n&yW^#Cpr\H0۶6mwtmi!ĉL>?D~JH0AT8MS) aC[=[YķQUSoQ|P!0500x;*@l T9JX2\7ɩS(.ZZ\Ⱥ +-IQ `YO;|'c`z  ;îAx}ǂu+aI:aaj,n[0%!n_b9Y e)HZn@A!:AtpT B~p)g!ax&Ce8* Ա )$K| pe")0p(HjI ]ĭ&m50c, AlbUߎ3hQBō"I2,PgK1;^w~WvCScmiFD,BH3rXRט{Vi;P3jK"/eKUBC-AZFJPY qm=`ڦdJIENDB`gnubiff-2.2.16/configure0000775000175000017500000115645212474430242012074 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for gnubiff 2.2.16. # # Report bugs to . # # # 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 and $0: gnubiff-bugs@lists.sourceforge.net 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='gnubiff' PACKAGE_TARNAME='gnubiff' PACKAGE_VERSION='2.2.16' PACKAGE_STRING='gnubiff 2.2.16' PACKAGE_BUGREPORT='gnubiff-bugs@lists.sourceforge.net' PACKAGE_URL='' ac_unique_file="src/gnubiff.cc" # 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_header_list= gt_needs= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS PASSWORD_STRING_FALSE PASSWORD_STRING_TRUE USE_PASSWORD_FALSE USE_PASSWORD_TRUE USE_GNOME_FALSE USE_GNOME_TRUE GCONFTOOL GNOME_DEP_LIBS GNOME_DEP_CFLAGS POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build XGETTEXT_EXTRA_OPTIONS XGETTEXT_015 GMSGFMT_015 MSGFMT_015 GETTEXT_MACRO_VERSION DATADIRNAME ALL_LINGUAS INTLTOOL_PERL GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE AM_DEFAULT_VERBOSITY INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS GETTEXT_PACKAGE LIBOBJS EGREP GREP GNUBIFF_DEP_LIBS GNUBIFF_DEP_CFLAGS FAM_LIBS FAM_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM 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_maintainer_mode enable_fam enable_gnome enable_dependency_tracking enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix with_password with_password_string enable_expert enable_debug ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR FAM_CFLAGS FAM_LIBS GNUBIFF_DEP_CFLAGS GNUBIFF_DEP_LIBS GNOME_DEP_CFLAGS GNOME_DEP_LIBS' # 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 gnubiff 2.2.16 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/gnubiff] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gnubiff 2.2.16:";; 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-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-fam disable the use of FAM (autodetect) --disable-gnome disable the use of gnome (default: enable) --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-expert disable showing expert tab as default, default=yes --enable-debug turn on debugging default=no Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-password Save password within configuration file (UNSECURE) --with-password-string String to use to encrypt password (HIGHLY RECOMMENDED) Some influential environment variables: CXX C++ compiler command CXXFLAGS 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 CC C compiler command CFLAGS C compiler flags CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path FAM_CFLAGS C compiler flags for FAM, overriding pkg-config FAM_LIBS linker flags for FAM, overriding pkg-config GNUBIFF_DEP_CFLAGS C compiler flags for GNUBIFF_DEP, overriding pkg-config GNUBIFF_DEP_LIBS linker flags for GNUBIFF_DEP, overriding pkg-config GNOME_DEP_CFLAGS C compiler flags for GNOME_DEP, overriding pkg-config GNOME_DEP_LIBS linker flags for GNOME_DEP, overriding pkg-config 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 . _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 gnubiff configure 2.2.16 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_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_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_cxx_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_cxx_try_compile # 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_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_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_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;} ( $as_echo "## ------------------------------------------------- ## ## Report this to gnubiff-bugs@lists.sourceforge.net ## ## ------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&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_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_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 gnubiff $as_me 2.2.16, 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 as_fn_append ac_header_list " utime.h" gt_needs="$gt_needs " # 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 ac_aux_dir= for ac_dir in config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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/config.h" am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; 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_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip" $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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; 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_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip" $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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk 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_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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_AWK="$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 AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gnubiff' VERSION='2.2.16' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ###################################################################### # Configure Options # ###################################################################### # Check whether --enable-fam was given. if test "${enable_fam+set}" = set; then : enableval=$enable_fam; OPT_USEFAM="$enableval" else OPT_USEFAM="yes" fi # Check whether --enable-gnome was given. if test "${enable_gnome+set}" = set; then : enableval=$enable_gnome; OPT_USEGNOME="$enableval" else OPT_USEGNOME="yes" fi ###################################################################### # Checks for programs # ###################################################################### ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC 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_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # 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_CXX="$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 CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC 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_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" 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 CXX=$ac_ct_CXX fi fi fi fi # 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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= 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 { $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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= 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 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 whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ###################################################################### # Checks for libraries # ###################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpopt" >&5 $as_echo_n "checking for main in -lpopt... " >&6; } if ${ac_cv_lib_popt_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpopt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_popt_main=yes else ac_cv_lib_popt_main=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_popt_main" >&5 $as_echo "$ac_cv_lib_popt_main" >&6; } if test "x$ac_cv_lib_popt_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPOPT 1 _ACEOF LIBS="-lpopt $LIBS" else as_fn_error $? " Cannot find popt library Please consider installing it before installing gnubiff " "$LINENO" 5 fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; 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_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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_PKG_CONFIG="$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 PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; 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_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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_ac_pt_PKG_CONFIG="$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 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test "x$OPT_USEFAM" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lfam" >&5 $as_echo_n "checking for main in -lfam... " >&6; } if ${ac_cv_lib_fam_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfam $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fam_main=yes else ac_cv_lib_fam_main=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_fam_main" >&5 $as_echo "$ac_cv_lib_fam_main" >&6; } if test "x$ac_cv_lib_fam_main" = xyes; then : FAM_LIBS="-lfam" $as_echo "#define HAVE_LIBFAM 1" >>confdefs.h fi if test -z "$FAM_LIBS" ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FAM" >&5 $as_echo_n "checking for FAM... " >&6; } if test -n "$FAM_CFLAGS"; then pkg_cv_FAM_CFLAGS="$FAM_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gamin >= 0.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gamin >= 0.1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FAM_CFLAGS=`$PKG_CONFIG --cflags "gamin >= 0.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FAM_LIBS"; then pkg_cv_FAM_LIBS="$FAM_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gamin >= 0.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gamin >= 0.1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FAM_LIBS=`$PKG_CONFIG --libs "gamin >= 0.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FAM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gamin >= 0.1.0" 2>&1` else FAM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gamin >= 0.1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FAM_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gamin >= 0.1.0) were not met: $FAM_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FAM_CFLAGS and FAM_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FAM_CFLAGS and FAM_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FAM_CFLAGS=$pkg_cv_FAM_CFLAGS FAM_LIBS=$pkg_cv_FAM_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test -z "$FAM_LIBS" ; then as_fn_error $? "Cannot find FAM library" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lssl" >&5 $as_echo_n "checking for main in -lssl... " >&6; } if ${ac_cv_lib_ssl_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ssl_main=yes else ac_cv_lib_ssl_main=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_ssl_main" >&5 $as_echo "$ac_cv_lib_ssl_main" >&6; } if test "x$ac_cv_lib_ssl_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSSL 1 _ACEOF LIBS="-lssl $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MD5_Init in -lcrypto" >&5 $as_echo_n "checking for MD5_Init in -lcrypto... " >&6; } if ${ac_cv_lib_crypto_MD5_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto $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 MD5_Init (); int main () { return MD5_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypto_MD5_Init=yes else ac_cv_lib_crypto_MD5_Init=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_crypto_MD5_Init" >&5 $as_echo "$ac_cv_lib_crypto_MD5_Init" >&6; } if test "x$ac_cv_lib_crypto_MD5_Init" = xyes; then : $as_echo "#define HAVE_CRYPTO 1" >>confdefs.h LIBS="$LIBS -lcrypto" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MD5_init in -lssl" >&5 $as_echo_n "checking for MD5_init in -lssl... " >&6; } if ${ac_cv_lib_ssl_MD5_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lssl $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 MD5_init (); int main () { return MD5_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ssl_MD5_init=yes else ac_cv_lib_ssl_MD5_init=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_ssl_MD5_init" >&5 $as_echo "$ac_cv_lib_ssl_MD5_init" >&6; } if test "x$ac_cv_lib_ssl_MD5_init" = xyes; then : $as_echo "#define HAVE_CRYPTO 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AES_encrypt in -lssl" >&5 $as_echo_n "checking for AES_encrypt in -lssl... " >&6; } if ${ac_cv_lib_ssl_AES_encrypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lssl $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 AES_encrypt (); int main () { return AES_encrypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ssl_AES_encrypt=yes else ac_cv_lib_ssl_AES_encrypt=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_ssl_AES_encrypt" >&5 $as_echo "$ac_cv_lib_ssl_AES_encrypt" >&6; } if test "x$ac_cv_lib_ssl_AES_encrypt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_AES 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AES_encrypt in -lcrypto" >&5 $as_echo_n "checking for AES_encrypt in -lcrypto... " >&6; } if ${ac_cv_lib_crypto_AES_encrypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto $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 AES_encrypt (); int main () { return AES_encrypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypto_AES_encrypt=yes else ac_cv_lib_crypto_AES_encrypt=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_crypto_AES_encrypt" >&5 $as_echo "$ac_cv_lib_crypto_AES_encrypt" >&6; } if test "x$ac_cv_lib_crypto_AES_encrypt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_AES 1 _ACEOF fi fi GTK_REQUIRED="gtk+-3.0 >= 3.0.0" GMODULE_REQUIRED="gmodule-export-2.0 >= 2.4" X11="xproto x11" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNUBIFF_DEP" >&5 $as_echo_n "checking for GNUBIFF_DEP... " >&6; } if test -n "$GNUBIFF_DEP_CFLAGS"; then pkg_cv_GNUBIFF_DEP_CFLAGS="$GNUBIFF_DEP_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" \$GTK_REQUIRED \$GMODULE_REQUIRED \$X11 \""; } >&5 ($PKG_CONFIG --exists --print-errors " $GTK_REQUIRED $GMODULE_REQUIRED $X11 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GNUBIFF_DEP_CFLAGS=`$PKG_CONFIG --cflags " $GTK_REQUIRED $GMODULE_REQUIRED $X11 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GNUBIFF_DEP_LIBS"; then pkg_cv_GNUBIFF_DEP_LIBS="$GNUBIFF_DEP_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" \$GTK_REQUIRED \$GMODULE_REQUIRED \$X11 \""; } >&5 ($PKG_CONFIG --exists --print-errors " $GTK_REQUIRED $GMODULE_REQUIRED $X11 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GNUBIFF_DEP_LIBS=`$PKG_CONFIG --libs " $GTK_REQUIRED $GMODULE_REQUIRED $X11 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GNUBIFF_DEP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " $GTK_REQUIRED $GMODULE_REQUIRED $X11 " 2>&1` else GNUBIFF_DEP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " $GTK_REQUIRED $GMODULE_REQUIRED $X11 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GNUBIFF_DEP_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ( $GTK_REQUIRED $GMODULE_REQUIRED $X11 ) were not met: $GNUBIFF_DEP_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GNUBIFF_DEP_CFLAGS and GNUBIFF_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GNUBIFF_DEP_CFLAGS and GNUBIFF_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GNUBIFF_DEP_CFLAGS=$pkg_cv_GNUBIFF_DEP_CFLAGS GNUBIFF_DEP_LIBS=$pkg_cv_GNUBIFF_DEP_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi ###################################################################### # Checks for header files # ###################################################################### { $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 ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; 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_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; 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_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi 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 arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h utime.h regex.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 if test "x$OPT_USEFAM" = "xyes"; then for ac_header in fam.h do : ac_fn_c_check_header_mongrel "$LINENO" "fam.h" "ac_cv_header_fam_h" "$ac_includes_default" if test "x$ac_cv_header_fam_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FAM_H 1 _ACEOF else as_fn_error $? "Cannot find fam (File Alteration Monitor) library header file fam.h" "$LINENO" 5 fi done fi ###################################################################### # Checks for typedefs, structures, and compiler characteristics # ###################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ###################################################################### # Checks for library functions # ###################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 $as_echo_n "checking whether closedir returns void... " >&6; } if ${ac_cv_func_closedir_void+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_closedir_void=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_closedir_void=no else ac_cv_func_closedir_void=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 $as_echo "$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then $as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : $as_echo_n "(cached) " >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then : ac_cv_func_lstat_dereferences_slashed_symlink=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_lstat_dereferences_slashed_symlink=yes else ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 $as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 $as_echo_n "checking whether stat accepts an empty string... " >&6; } if ${ac_cv_func_stat_empty_string_bug+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_stat_empty_string_bug=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_stat_empty_string_bug=no else ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 $as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi for ac_header in $ac_header_list 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether utime accepts a null argument" >&5 $as_echo_n "checking whether utime accepts a null argument... " >&6; } if ${ac_cv_func_utime_null+:} false; then : $as_echo_n "(cached) " >&6 else rm -f conftest.data; >conftest.data # Sequent interprets utime(file, 0) to mean use start of epoch. Wrong. if test "$cross_compiling" = yes; then : ac_cv_func_utime_null='guessing yes' else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_UTIME_H # include #endif int main () { struct stat s, t; return ! (stat ("conftest.data", &s) == 0 && utime ("conftest.data", 0) == 0 && stat ("conftest.data", &t) == 0 && t.st_mtime >= s.st_mtime && t.st_mtime - s.st_mtime < 120); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_utime_null=yes else ac_cv_func_utime_null=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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_utime_null" >&5 $as_echo "$ac_cv_func_utime_null" >&6; } if test "x$ac_cv_func_utime_null" != xno; then ac_cv_func_utime_null=yes $as_echo "#define HAVE_UTIME_NULL 1" >>confdefs.h fi rm -f conftest.data for ac_func in gethostbyname memset socket strchr strerror strrchr strstr utime bind_textdomain_codeset 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 ###################################################################### # Internationalization # ###################################################################### GETTEXT_PACKAGE=gnubiff cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= " >&5 $as_echo_n "checking for intltool >= ... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; 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_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # 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_INTLTOOL_UPDATE="$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 INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; 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_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # 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_INTLTOOL_MERGE="$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 INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; 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_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # 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_INTLTOOL_EXTRACT="$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 INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; 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_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # 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_XGETTEXT="$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 XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; 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_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # 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_MSGMERGE="$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 MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; 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_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # 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_MSGFMT="$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 MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; 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_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # 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_GMSGFMT="$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 test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; 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_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # 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_INTLTOOL_PERL="$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 INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi #AM_GLIB_GNU_GETTEXT GETTEXT_MACRO_VERSION=0.18 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; 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_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; 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_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # 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_GMSGFMT="$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 test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; 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_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; 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_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # 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 # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" ###################################################################### # GNOME support # ###################################################################### if test "$OPT_USEGNOME" = "yes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNOME_DEP" >&5 $as_echo_n "checking for GNOME_DEP... " >&6; } if test -n "$GNOME_DEP_CFLAGS"; then pkg_cv_GNOME_DEP_CFLAGS="$GNOME_DEP_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libpanelapplet-4.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors " libpanelapplet-4.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GNOME_DEP_CFLAGS=`$PKG_CONFIG --cflags " libpanelapplet-4.0 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GNOME_DEP_LIBS"; then pkg_cv_GNOME_DEP_LIBS="$GNOME_DEP_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libpanelapplet-4.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors " libpanelapplet-4.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GNOME_DEP_LIBS=`$PKG_CONFIG --libs " libpanelapplet-4.0 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GNOME_DEP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " libpanelapplet-4.0 " 2>&1` else GNOME_DEP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " libpanelapplet-4.0 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GNOME_DEP_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ( libpanelapplet-4.0 ) were not met: $GNOME_DEP_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GNOME_DEP_CFLAGS and GNOME_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GNOME_DEP_CFLAGS and GNOME_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GNOME_DEP_CFLAGS=$pkg_cv_GNOME_DEP_CFLAGS GNOME_DEP_LIBS=$pkg_cv_GNOME_DEP_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define USE_GNOME 1" >>confdefs.h # Extract the first word of "gconftool-2", so it can be a program name with args. set dummy gconftool-2; 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_GCONFTOOL+:} false; then : $as_echo_n "(cached) " >&6 else case $GCONFTOOL in [\\/]* | ?:[\\/]*) ac_cv_path_GCONFTOOL="$GCONFTOOL" # 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_GCONFTOOL="$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 test -z "$ac_cv_path_GCONFTOOL" && ac_cv_path_GCONFTOOL="no" ;; esac fi GCONFTOOL=$ac_cv_path_GCONFTOOL if test -n "$GCONFTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCONFTOOL" >&5 $as_echo "$GCONFTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$GCONFTOOL" = "xno"; then as_fn_error $? "gconftool-2 executable not found in your path - should be installed with GConf" "$LINENO" 5 fi fi if test $OPT_USEGNOME = yes; then USE_GNOME_TRUE= USE_GNOME_FALSE='#' else USE_GNOME_TRUE='#' USE_GNOME_FALSE= fi ###################################################################### # Save password option # ###################################################################### # Check whether --with-password was given. if test "${with_password+set}" = set; then : withval=$with_password; password=$withval else password=no fi if test "$password" = yes; then $as_echo "#define USE_PASSWORD 1" >>confdefs.h # Check whether --with-password-string was given. if test "${with_password_string+set}" = set; then : withval=$with_password_string; pstring=$withval else pstring="" fi if test "x$pstring" = "x"; then cat >>confdefs.h <<_ACEOF #define PASSWORD_STRING "FEDCBA9876543210" _ACEOF else cat >>confdefs.h <<_ACEOF #define PASSWORD_STRING "$withval" _ACEOF fi fi if test "$password" = yes; then USE_PASSWORD_TRUE= USE_PASSWORD_FALSE='#' else USE_PASSWORD_TRUE='#' USE_PASSWORD_FALSE= fi if test "$password" = yes; then PASSWORD_STRING_TRUE= PASSWORD_STRING_FALSE='#' else PASSWORD_STRING_TRUE='#' PASSWORD_STRING_FALSE= fi ###################################################################### # expert tab default # ###################################################################### # Check whether --enable-expert was given. if test "${enable_expert+set}" = set; then : enableval=$enable_expert; $as_echo "#define EXPERT_SHOW_NO_TAB 1" >>confdefs.h expert="$enableval" else expert="yes" fi ###################################################################### # debug support # ###################################################################### # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; $as_echo "#define DEBUG 1" >>confdefs.h fi as_ac_File=`$as_echo "ac_cv_file_"CVS"" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"CVS\"" >&5 $as_echo_n "checking for \"CVS\"... " >&6; } if eval \${$as_ac_File+:} false; then : $as_echo_n "(cached) " >&6 else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r ""CVS""; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi eval ac_res=\$$as_ac_File { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_File"\" = x"yes"; then : $as_echo "#define IS_CVS_VERSION 1" >>confdefs.h else $as_echo "#define IS_CVS_VERSION 0" >>confdefs.h fi ################## # configure output ################## ac_config_files="$ac_config_files Makefile src/Makefile po/Makefile.in ui/Makefile art/Makefile sound/Makefile doc/Makefile man1/Makefile config/gnubiff.spec" 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 if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${USE_GNOME_TRUE}" && test -z "${USE_GNOME_FALSE}"; then as_fn_error $? "conditional \"USE_GNOME\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_PASSWORD_TRUE}" && test -z "${USE_PASSWORD_FALSE}"; then as_fn_error $? "conditional \"USE_PASSWORD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PASSWORD_STRING_TRUE}" && test -z "${PASSWORD_STRING_FALSE}"; then as_fn_error $? "conditional \"PASSWORD_STRING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${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 gnubiff $as_me 2.2.16, 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" config_commands="$ac_config_commands" _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 Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ gnubiff config.status 2.2.16 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' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' 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 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _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/config.h") CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "ui/Makefile") CONFIG_FILES="$CONFIG_FILES ui/Makefile" ;; "art/Makefile") CONFIG_FILES="$CONFIG_FILES art/Makefile" ;; "sound/Makefile") CONFIG_FILES="$CONFIG_FILES sound/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "man1/Makefile") CONFIG_FILES="$CONFIG_FILES man1/Makefile" ;; "config/gnubiff.spec") CONFIG_FILES="$CONFIG_FILES config/gnubiff.spec" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) 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 test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands 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 :C $CONFIG_COMMANDS" 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 # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _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 s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;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 # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; 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 chmod +x config/mkinstalldirs config/ltmain.sh config/depcomp config/missing config/config.guess config/config.sub config/install-sh config/mdate-sh echo "--------------------------------------------------------------------------------" if test "$password" = yes; then echo " Password saving : yes" echo " Password string : $pstring" if test "x$pstring" = "x"; then echo " WARNING: You've not defined a string to encrypt passwords (this can be done" echo " (with the option --with-password-string). The default string will" echo " be used but it is less secure than using your own." fi fi if test "$password" = no; then echo " Password saving : no" echo " If you want gnubiff to save password within configuration file, use" echo " ./configure --with-password --with-password-string=\"any string you like...\"." echo " But be careful, it is highly unsecure, you've been warned!" fi echo " FAM support : $OPT_USEFAM" echo " Gnome support : $OPT_USEGNOME" #if test "$OPT_USEGNOME" = "yes"; then # if test "$prefix" != "`$PKG_CONFIG --variable=libpanel_applet_dir libpanelapplet-4.0`"; then # echo " NOTE: The installation directory for gnubiff is currently set to" # echo " \"$prefix\"," # echo " the default installation directory for gnome panel applications is" # echo " \""`pkg-config libpanelapplet-2.0 --variable=prefix`"\"." # echo " It may be necessary to add the path" # echo " \"$prefix/lib/bonobo/servers/\"" # echo " to the file \"/etc/bonobo-activation/bonobo-activation-config.xml\"" # echo " (root privileges needed) or to execute" # echo " \"activation-client --add-path=$prefix/lib/bonobo/servers/\"" # echo " (no root privileges needed) before gnubiff can be added to the panel." # fi #fi echo " Expert tab : $expert" echo "" echo " Just type 'make' and then 'make install' to install gnubiff" echo "--------------------------------------------------------------------------------" echo "" gnubiff-2.2.16/src/0000775000175000017500000000000012474430471011022 500000000000000gnubiff-2.2.16/src/gui.cc0000644000175000017500000002442712474422122012036 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gui.cc,v $ // Revision : $Revision: 1.11.2.6 $ // Revision date : $Date: 2012/01/08 20:59:06 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include "gtk_image_animation.h" #include "gui.h" /** * Local variable for animation preview in gtk_file_chooser **/ GtkImageAnimation *preview_animation = NULL; /** * "C" binding **/ extern "C" { gboolean GUI_on_delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) { if (data) return (static_cast(data))->on_delete (widget, event); else unknown_internal_error (); return false; } gboolean GUI_on_destroy_event (GtkWidget *widget, GdkEvent *event, gpointer data) { if (data) return (static_cast(data))->on_destroy (widget, event); else unknown_internal_error (); return false; } void GUI_on_ok (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_ok (widget); else unknown_internal_error (); } void GUI_on_apply (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_apply (widget); else unknown_internal_error (); } void GUI_on_close (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_close (widget); else unknown_internal_error (); } void GUI_on_cancel (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_cancel (widget); else unknown_internal_error (); } /* * From mail-notification applet * Copyright (c) 2003, 2004 Jean-Yves Lefort. * * The GtkFileChooser API does not allow a chooser to pick a file * (GTK_FILE_CHOOSER_ACTION_OPEN) and select a folder * (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) at the same time. * * This function provides a workaround. */ static void GUI_file_chooser_dialog_file_activated_h (GtkFileChooser *chooser, gpointer user_data) { int accept_id = GPOINTER_TO_INT(user_data); gtk_dialog_response (GTK_DIALOG(chooser), accept_id); } static void GUI_file_chooser_dialog_response_h (GtkDialog *dialog, int response_id, gpointer user_data) { int accept_id = GPOINTER_TO_INT (user_data); if (response_id == accept_id) { char *uri; uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER(dialog)); if (uri) g_free(uri); else g_signal_stop_emission_by_name (dialog, "response"); } } void GUI_file_chooser_dialog_allow_select_folder (GtkFileChooserDialog *dialog, int accept_id) { g_return_if_fail (GTK_IS_FILE_CHOOSER_DIALOG (dialog)); g_return_if_fail (gtk_file_chooser_get_action(GTK_FILE_CHOOSER(dialog)) == GTK_FILE_CHOOSER_ACTION_OPEN); g_return_if_fail(! (accept_id == GTK_RESPONSE_ACCEPT || accept_id == GTK_RESPONSE_OK || accept_id == GTK_RESPONSE_YES || accept_id == GTK_RESPONSE_APPLY)); g_signal_connect(G_OBJECT(dialog), "file-activated", G_CALLBACK(GUI_file_chooser_dialog_file_activated_h), GINT_TO_POINTER(accept_id)); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(GUI_file_chooser_dialog_response_h), GINT_TO_POINTER(accept_id)); } } GUI::GUI (std::string filename) { filename_ = filename; gtkbuilder_ = NULL; } GUI::~GUI (void) { if (gtkbuilder_) g_object_unref (G_OBJECT(gtkbuilder_)); gtkbuilder_ = NULL; } gint GUI::create (gpointer callbackdata) { if (gtkbuilder_) return true; GError* error = NULL; gtkbuilder_ = gtk_builder_new (); if (!gtk_builder_add_from_file (gtkbuilder_, filename_.c_str(), &error)) { g_warning (_("Couldn't load builder file \"%s\": %s"), filename_.c_str(), error->message); g_error_free (error); exit (EXIT_FAILURE); } gtk_builder_connect_signals (gtkbuilder_, callbackdata); create_insert_version (); return true; } /** * Insert version and date information into certain widgets. For widgets * called "gnubiff" (if existing) the following substitutions are made: * "%v" is substituted by the version number, "%c" is substituted by "CVS" if * it's a cvs version of gnubiff and "" otherwise. * * The version information for the about dialog is also set if this dialog * is present. */ void GUI::create_insert_version (void) { static const gchar *widgets[] = {"gnubiff", NULL}; static const std::string chars = "vc"; std::vector toinsert (2); toinsert[0] = std::string (PACKAGE_VERSION); toinsert[1] = std::string (IS_CVS_VERSION ? "CVS" : ""); guint i = 0; while (widgets[i] != NULL) { // Don't use GUI::get() because we don't want warning messages if // the widget doesn't exist GtkLabel *label = GTK_LABEL (gtk_builder_get_object (gtkbuilder_, widgets[i++])); if (!label) continue; // Substitute const gchar *text = gtk_label_get_label (label); if (!text) continue; std::string newtext = substitute (text, chars, toinsert); gtk_label_set_label (label, newtext.c_str ()); } // About dialog GtkAboutDialog *about; about = GTK_ABOUT_DIALOG (gtk_builder_get_object (gtkbuilder_, "gnubiffabout")); if (about) { std::string newtext = substitute ("%v %c", chars, toinsert); gtk_about_dialog_set_version (about, newtext.c_str ()); } } void GUI::show (std::string name) { if (gtkbuilder_) gtk_widget_show (get(name)); } void GUI::hide (std::string name) { if (gtkbuilder_) gtk_widget_hide (get (name)); } GtkWidget * GUI::get (std::string name) { GtkWidget *widget = GTK_WIDGET (gtk_builder_get_object (gtkbuilder_, static_cast(name.c_str()))); if (!widget) g_warning (_("Cannot find the specified widget (\"%s\")" " within xml structure (\"%s\")"), name.c_str(), filename_.c_str()); return widget; } gboolean GUI::browse (std::string title, std::string widget_name, gboolean file_and_folder, GtkWidget *preview) { GtkWidget *chooser = gtk_file_chooser_dialog_new (title.c_str(), 0, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, 1, NULL); g_object_set (G_OBJECT(chooser), "show-hidden", true, NULL); if (file_and_folder) GUI_file_chooser_dialog_allow_select_folder(GTK_FILE_CHOOSER_DIALOG(chooser), FALSE); if (preview) { gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (chooser), preview); g_signal_connect (chooser, "update-preview", G_CALLBACK (GUI_update_preview), preview); } gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_CENTER); gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), gtk_entry_get_text (GTK_ENTRY (get(widget_name.c_str())))); gint result = gtk_dialog_run (GTK_DIALOG (chooser)); if (result == 1) { char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); gtk_entry_set_text (GTK_ENTRY (get(widget_name.c_str())), filename); g_free (filename); } if (preview && preview_animation) preview_animation->stop(); gtk_widget_destroy (chooser); return result; } std::string GUI::utf8_to_filename (std::string text) { gchar *buffer = g_filename_from_utf8 (text.c_str(),-1,0,0,0); std::string newtext (buffer); g_free (buffer); return newtext; } std::string GUI::utf8_to_locale (std::string text) { gchar *buffer = g_locale_from_utf8 (text.c_str(),-1,0,0,0); std::string newtext (buffer); g_free (buffer); return newtext; } std::string GUI::filename_to_utf8 (std::string text) { gchar *buffer = g_filename_to_utf8 (text.c_str(),-1,0,0,0); std::string newtext (buffer); g_free (buffer); return newtext; } std::string GUI::locale_to_utf8 (std::string text) { gchar *buffer = g_locale_to_utf8 (text.c_str(),-1,0,0,0); std::string newtext (buffer); g_free (buffer); return newtext; } gboolean GUI::on_delete (GtkWidget *widget, GdkEvent *event) { gtk_widget_hide (widget); return true; } gboolean GUI::on_destroy (GtkWidget *widget, GdkEvent *event) { gtk_main_quit(); return true; } /*void GUI_connect (const gchar *handler_name, GObject *object, const gchar *signal_name, const gchar *signal_data, GObject *connect_object, gboolean after, gpointer user_data) { GModule *symbols = 0; GtkSignalFunc func = NULL, *func_ptr = &func; if (!symbols) { if (!g_module_supported()) { g_error (_("GUI_connect requires working gmodule")); exit (1); } symbols = g_module_open (0, G_MODULE_BIND_MASK); } if (!g_module_symbol(symbols, handler_name,(gpointer *) func_ptr)) g_warning(_("Could not find signal handler '%s'."), handler_name); else g_signal_connect (object, signal_name, GTK_SIGNAL_FUNC(func), user_data); }*/ void GUI_update_preview (GtkWidget *widget, gpointer data) { GtkWidget *preview; char *filename; gboolean have_preview = false; preview = GTK_WIDGET (data); if (preview_animation == 0) preview_animation = new GtkImageAnimation (GTK_IMAGE (preview)); preview_animation->attach (GTK_IMAGE (preview)); filename = gtk_file_chooser_get_preview_filename (GTK_FILE_CHOOSER(widget)); if (filename) { have_preview = preview_animation->open (filename); g_free (filename); } else have_preview = false; if (have_preview) preview_animation->start(); gtk_file_chooser_set_preview_widget_active (GTK_FILE_CHOOSER(widget), have_preview); } gnubiff-2.2.16/src/apop.h0000644000175000017500000000353712474422122012052 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: apop.h,v $ // Revision : $Revision: 1.6.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __APOP_H__ #define __APOP_H__ #include "pop.h" /** * Mailbox for the APOP protocol. */ class Apop : public Pop { public: // ======================================================================== // base // ======================================================================== Apop (class Biff *biff); Apop (const Mailbox &other); ~Apop (void); // ======================================================================== // main // ======================================================================== void connect (void) throw (pop_err); }; #endif gnubiff-2.2.16/src/gtk_image_animation.cc0000644000175000017500000002563712474422122015244 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gtk_image_animation.cc,v $ // Revision : $Revision: 1.6.2.2 $ // Revision date : $Date: 2008/04/25 22:52:59 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include "gtk_image_animation.h" #include "support.h" /** * "C" binding **/ extern "C" { gboolean GTK_IMAGE_ANIMATION_timeout (gpointer data) { if (data) return (static_cast(data))->timeout (); unknown_internal_error (); return false; } gboolean GTK_IMAGE_ANIMATION_on_delete (GtkWidget *widget, GdkEvent *event, gpointer data) { if (data) return (static_cast(data))->on_delete (); unknown_internal_error (); return false; } gboolean GTK_IMAGE_ANIMATION_on_destroy (GtkWidget *widget, GdkEvent *event, gpointer data) { if (data) return (static_cast(data))->on_destroy (); unknown_internal_error (); return false; } void GTK_IMAGE_ANIMATION_on_hide (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_hide (); else unknown_internal_error (); } void GTK_IMAGE_ANIMATION_on_show (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_show (); else unknown_internal_error (); } } // =================================================================== // Constructor // ------------------------------------------------------------------- // // =================================================================== GtkImageAnimation::GtkImageAnimation (GtkImage *image) { _image = image; _animation = 0; _original_pixbuf = 0; _scaled_pixbuf = 0; _frame.clear(); _current = 0; _original_width = 0; _original_height = 0; _scaled_width = 0; _scaled_height = 0; _timetag = 0; _speed = 30; // 20 milliseconds is quite too short a delay _object_mutex = g_mutex_new(); g_signal_connect (G_OBJECT (image), "delete-event", G_CALLBACK (GTK_IMAGE_ANIMATION_on_delete), this); g_signal_connect (G_OBJECT (image), "destroy-event", G_CALLBACK (GTK_IMAGE_ANIMATION_on_destroy), this); g_signal_connect (G_OBJECT (image), "hide", G_CALLBACK (GTK_IMAGE_ANIMATION_on_hide), this); g_signal_connect (G_OBJECT (image), "show", G_CALLBACK (GTK_IMAGE_ANIMATION_on_show), this); } GtkImageAnimation::~GtkImageAnimation (void) { g_mutex_lock (_object_mutex); if (_timetag) g_source_remove (_timetag); if (_animation) g_object_unref (_animation); if (_original_pixbuf) g_object_unref (_original_pixbuf); if (_scaled_pixbuf) g_object_unref (_scaled_pixbuf); for (guint i=0; i<_frame.size(); i++) if (_frame[i]) g_object_unref (_frame[i]); _frame.clear(); } gboolean GtkImageAnimation::timeout (void) { gdk_threads_enter(); if (!GTK_IS_IMAGE(_image)) { gdk_threads_leave(); _timetag = 0; return false; } _current = (_current+1)%_frame.size(); if (_frame.size()) gtk_image_set_from_pixbuf (_image, _frame[_current]); gdk_threads_leave(); return true; } // =================================================================== // open a new animation file // ------------------------------------------------------------------- // // Since the only supported animation format for gdk-pixbuf seems to // be the gif one, I needed another one that allows more color and // is not patented so some stupid company. // First option was to use mng but it is not yet supported by gdk-pixbuf. // Since I did not want to create a new format, I use instead a "normal" // image where frames are on top of each other (convert command from // ImageMagick with the -append option just do that). But, since I have // no information on the possible animation, I have to use filename to // to gather information about a single frame size. // // Example: // -------- // gnubiff is bundled with the png image "tux(64x64).png" // (It is unlikely that someone will name an image using parenthesis // so it's a good hint for us it may be an animation). // Here, the "64x64" means that one frame is 64 by 64 in size. // Furthermore, image size is 1024x64, so I can deduce that there // is 1024/64 = 16 frames within. // We're now able to play the animation by displaying subsequent frames // with a timeout callback. That's it ! // // =================================================================== gboolean GtkImageAnimation::open (std::string filename) { g_mutex_lock (_object_mutex); // Stop animation stop (); // Try to load given file GdkPixbufAnimation *animation = gdk_pixbuf_animation_new_from_file (filename.c_str(), 0); // Check if file is valid if (!animation) { g_mutex_unlock (_object_mutex); return false; } // Is it already an animation ? // (in this case, there not much to do) if (!gdk_pixbuf_animation_is_static_image (animation)) { // Set animation in image gtk_image_set_from_animation (_image, animation); // Free previous stuff if (_animation) g_object_unref (_animation); _animation = 0; if (_original_pixbuf) g_object_unref (_original_pixbuf); _original_pixbuf = 0; if (_scaled_pixbuf) g_object_unref (_scaled_pixbuf); _scaled_pixbuf = 0; for (guint i=0; i<_frame.size(); i++) if (_frame[i]) g_object_unref (_frame[i]); _frame.clear(); // Get new animation & filename _animation = animation; _original_width = gdk_pixbuf_animation_get_width (_animation); _original_height = gdk_pixbuf_animation_get_height (_animation); _scaled_width = _original_width; _scaled_height = _original_height; _filename = filename; g_mutex_unlock (_object_mutex); return true; } // Ok, we have a static image, so we get it and delete animation // (we won't use it anymore) if (_original_pixbuf) g_object_unref (_original_pixbuf); _original_pixbuf = gdk_pixbuf_copy (gdk_pixbuf_animation_get_static_image (animation)); g_object_unref (animation); if (_animation) g_object_unref (_animation); _animation = 0; // Ok, let's see what is the animation format _filename = filename; // It's like we got only one frame (no '('in filename) if (!is_animation()) { _original_width = gdk_pixbuf_get_width (_original_pixbuf); _original_height = gdk_pixbuf_get_height (_original_pixbuf); _scaled_width = _original_width; _scaled_height = _original_height; if (_scaled_pixbuf) g_object_unref (_scaled_pixbuf); _scaled_pixbuf = gdk_pixbuf_copy (_original_pixbuf); for (guint i=0; i<_frame.size(); i++) if (_frame[i]) g_object_unref (_frame[i]); _frame.clear(); gtk_image_set_from_pixbuf (_image, _scaled_pixbuf); g_mutex_unlock (_object_mutex); return true; } // Don't forget to set size to 0 since resize will check for size equality // (and do nothing if original = scaled) _scaled_height = 0; _scaled_width = 0; _current = 0; resize (_original_width, _original_height, true); g_mutex_unlock (_object_mutex); return true; } void GtkImageAnimation::resize (guint width, guint height, gboolean locked) { // Do we have something to resize ? if (!_original_pixbuf) return; // Do we already got the right size ? if ((width == _scaled_width) && (height == _scaled_height)) return; if (!locked) g_mutex_lock (_object_mutex); _scaled_width = width; _scaled_height = height; // Free previous scaled pixbuf & frames if (_scaled_pixbuf) g_object_unref (_scaled_pixbuf); // If we have only one frame... if (_original_width == (guint) gdk_pixbuf_get_width (_original_pixbuf)) { _scaled_pixbuf = gdk_pixbuf_scale_simple (_original_pixbuf, _scaled_width, _scaled_height, GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf (_image, _scaled_pixbuf); if (!locked) g_mutex_unlock (_object_mutex); return; } // Ok, we have a sequence to scale for (guint i=0; i<_frame.size(); i++) if (_frame[i]) g_object_unref (_frame[i]); _frame.clear(); guint n = gdk_pixbuf_get_width (_original_pixbuf)/_original_width; if (n == 0) n = 1; // Actual rescale _scaled_pixbuf = gdk_pixbuf_scale_simple (_original_pixbuf, n*_scaled_width, _scaled_height, GDK_INTERP_BILINEAR); // Rebuild each frame for (guint i=0; i 0) && (_timetag == 0) && (GTK_IS_IMAGE(_image))) _timetag = g_timeout_add (_speed, GTK_IMAGE_ANIMATION_timeout, this); } void GtkImageAnimation::stop (void) { if (_timetag) g_source_remove (_timetag); _timetag = 0; } gboolean GtkImageAnimation::is_animation (void) { // If there is no '(' in name, we consider to have a static image if (_filename.find('(') == std::string::npos) return false; std::string::size_type i = _filename.find ('(') + 1; std::string sw, sh; do { sw += _filename[i++]; } while ((i < _filename.size()) && (g_ascii_isdigit(_filename[i]))); if ((i < _filename.size()) && (_filename[i] != 'x')) return false; i++; do { sh += _filename[i++]; } while ((i < _filename.size()) && (g_ascii_isdigit(_filename[i]))); std::stringstream ssw(sw); std::stringstream ssh(sh); guint w, h; ssw >> w; ssh >> h; // Is the new "found height" equal to pixbuf height // (frame must be horizontally next to each other // so if a frame width is not pixbuf height, there is a problem if (h != (guint) gdk_pixbuf_get_height (_original_pixbuf)) return false; // Do we have an interger number of frame ? if (gdk_pixbuf_get_width(_original_pixbuf)%w) return false; _original_width = w; _original_height = h; return true; } gboolean GtkImageAnimation::on_delete (void) { stop(); return true; } gboolean GtkImageAnimation::on_destroy (void) { stop(); return true; } void GtkImageAnimation::on_hide (void) { stop(); } void GtkImageAnimation::on_show (void) { start(); } gnubiff-2.2.16/src/ui-applet.h0000644000175000017500000000514512474422122013010 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet.h,v $ // Revision : $Revision: 1.24.2.3 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __APPLET_H__ #define __APPLET_H__ #include #include "support.h" /** * Generic non-GUI code common for all types of applets. */ class Applet : public Support { protected: class Biff * biff_; GMutex * process_mutex_; GMutex * update_mutex_; public: // ======================================================================== // base // ======================================================================== Applet (class Biff *biff); virtual ~Applet (void); virtual void start (gboolean showpref = false); // ======================================================================== // main // ======================================================================== virtual gboolean update (gboolean init = false); void mark_messages_as_read (void); void execute_command (std::string option_command, std::string option_use_command = ""); std::string get_mailbox_status_text (void); virtual std::string get_number_of_unread_messages (void); /// @see AppletGUI::mailbox_to_be_replaced () virtual void mailbox_to_be_replaced (class Mailbox *from, class Mailbox *to) {} /// @see AppletGUI::get_password_for_mailbox () virtual void get_password_for_mailbox (class Mailbox *mb) {} virtual gboolean can_monitor_mailboxes (void); virtual class AppletGUI *appletgui_ptr (void); }; #endif gnubiff-2.2.16/src/ui-preferences.cc0000644000175000017500000007712212474422122014166 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-preferences.cc,v $ // Revision : $Revision: 1.55.2.5 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include "ui-preferences.h" #include "ui-properties.h" #include "ui-applet-gui.h" #include "gtk_image_animation.h" #include "biff.h" #include "mailbox.h" #include "nls.h" #include "support.h" /* "C" bindings */ extern "C" { gboolean PREFERENCES_on_click (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (data) { if ((event->button == 1) && (event->type == GDK_2BUTTON_PRESS)) PREFERENCES(data)->on_properties (0); } else unknown_internal_error (); return false; } void PREFERENCES_on_add (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_add (widget); else unknown_internal_error (); } void PREFERENCES_on_remove (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_remove (widget); else unknown_internal_error (); } void PREFERENCES_on_properties (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_properties (widget); else unknown_internal_error (); } void PREFERENCES_on_stop (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_stop (widget); else unknown_internal_error (); } void PREFERENCES_on_browse_newmail_image (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_browse_newmail_image (widget); else unknown_internal_error (); } void PREFERENCES_on_browse_nomail_image (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_browse_nomail_image (widget); else unknown_internal_error (); } void PREFERENCES_on_selection_changed (GtkTreeSelection *selection, gpointer data) { if (data) PREFERENCES(data)->on_selection (selection); else unknown_internal_error (); } void PREFERENCES_on_check_changed (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->on_check_changed (widget); else unknown_internal_error (); } void PREFERENCES_on_Notebook_switch_page (GtkNotebook *widget, GtkWidget *page, gint page_num, gpointer data) { if (data) { // FIXME: Do not hardcode page 3 if (page_num == 3) PREFERENCES(data)->expert_update_option_list (); } else unknown_internal_error (); } void PREFERENCES_on_selection_expert (GtkTreeSelection *selection, gpointer data) { if (data) PREFERENCES(data)->expert_on_selection (selection); else unknown_internal_error (); } void PREFERENCES_expert_on_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { if (data) PREFERENCES(data)->expert_toggle_option (); else unknown_internal_error (); } void PREFERENCES_expert_option_edited (GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer data) { if (data) PREFERENCES(data)->expert_set_selected_option (new_text); else unknown_internal_error (); } void PREFERENCES_expert_reset (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->expert_set_selected_option (NULL); else unknown_internal_error (); } void PREFERENCES_expert_toggle_option (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->expert_toggle_option (); else unknown_internal_error (); } void PREFERENCES_expert_edit_value (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->expert_edit_value (); else unknown_internal_error (); } void PREFERENCES_expert_search (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->expert_search (); else unknown_internal_error (); } void PREFERENCES_expert_new (GtkWidget *widget, gpointer data) { if (data) PREFERENCES(data)->expert_add_option_list (); else unknown_internal_error (); } gboolean PREFERENCES_expert_on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (data) { // Single click with right mouse button? if (event->type == GDK_BUTTON_PRESS && event->button == 3) return PREFERENCES(data)->expert_show_context_menu (event); } else unknown_internal_error (); return false; } } Preferences::Preferences (Biff *biff) : GUI (GNUBIFF_DATADIR"/preferences.ui") { biff_ = biff; properties_ = new Properties (this); properties_->create (properties_); selected_ = 0; added_ = 0; // Widgets expert_liststore = NULL; expert_treeview = NULL; expert_col_value = NULL; } Preferences::~Preferences (void) { } gint Preferences::create (gpointer callbackdata) { GUI::create (this); // Create expert tab expert_create (); // Mailboxes list GtkListStore *store = gtk_list_store_new (N_COLUMNS, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); GtkTreeView *view = GTK_TREE_VIEW (get("mailboxes_treeview")); gtk_tree_view_set_model (view, GTK_TREE_MODEL(store)); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); GtkTreeViewColumn *column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Mailbox")); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_sort_column_id (column, COLUMN_MAILBOX); GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "stock-id", COLUMN_MAILBOX_STOCK_ID); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_add_attribute (column, renderer, "text", COLUMN_MAILBOX); gtk_tree_view_column_set_expand (column, true); gtk_tree_view_append_column (view, column); column = gtk_tree_view_column_new_with_attributes (_("Type"), gtk_cell_renderer_text_new(), "text", COLUMN_FORMAT, NULL); gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_column_set_sort_column_id(column, COLUMN_FORMAT); gtk_tree_view_append_column (view, column); column = gtk_tree_view_column_new_with_attributes ("", gtk_cell_renderer_pixbuf_new (), "stock-id", COLUMN_STATUS_STOCK_ID, NULL); GtkWidget *image = gtk_image_new_from_stock ("gtk-execute", GTK_ICON_SIZE_MENU); gtk_widget_show (image); gtk_tree_view_column_set_widget (GTK_TREE_VIEW_COLUMN (column), image); gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_column_set_sort_column_id(column, COLUMN_STATUS_STOCK_ID); gtk_tree_view_append_column (view, column); gtk_widget_set_tooltip_text ((GtkWidget *)(gdk_window_get_parent (gdk_window_get_parent (gtk_widget_get_parent_window (image)))), _("Status")); column = gtk_tree_view_column_new_with_attributes ("", gtk_cell_renderer_pixbuf_new (), "stock-id", COLUMN_SECURITY_STOCK_ID, NULL); image = gtk_image_new_from_stock ("gtk-dialog-authentication", GTK_ICON_SIZE_MENU); gtk_widget_show (image); gtk_tree_view_column_set_widget (GTK_TREE_VIEW_COLUMN (column), image); gtk_tree_view_column_set_resizable (column, FALSE); gtk_tree_view_column_set_sort_column_id (column, COLUMN_SECURITY_STOCK_ID); gtk_tree_view_append_column (view, column); gtk_widget_set_tooltip_text ((GtkWidget *)(gdk_window_get_parent (gdk_window_get_parent (gtk_widget_get_parent_window (image)))), _("Security")); gtk_tree_view_set_search_column (view, COLUMN_MAILBOX); GtkTreeSelection *selection = gtk_tree_view_get_selection (view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK(PREFERENCES_on_selection_changed), this); // Selection label gtk_label_set_text (GTK_LABEL(get ("selection")), _("No mailbox selected")); return true; } /** * Create the expert option editing dialog. */ void Preferences::expert_create (void) { if (!biff_->value_bool ("expert_show_tab")) return; expert_liststore = gtk_list_store_new (COL_EXP_N, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT); expert_treeview = GTK_TREE_VIEW (get("expert_treeview")); gtk_tree_view_set_model (expert_treeview,GTK_TREE_MODEL(expert_liststore)); gtk_tree_view_set_rules_hint (expert_treeview, true); GtkTreeViewColumn *column; GtkCellRenderer *rend; // Column: NAME rend = gtk_cell_renderer_text_new (); g_object_set (rend, "style", PANGO_STYLE_ITALIC, NULL); column = gtk_tree_view_column_new_with_attributes (_("Option"), rend, "text", COL_EXP_GROUPNAME, "style-set", COL_EXP_NAME_ITALIC, NULL); gtk_tree_view_column_set_resizable (column, false); gtk_tree_view_column_set_sort_column_id (column, COL_EXP_GROUPNAME); gtk_tree_view_append_column (expert_treeview, column); // Column: TYPE column = gtk_tree_view_column_new_with_attributes (_("Type"), gtk_cell_renderer_text_new(), "text", COL_EXP_TYPE, NULL); gtk_tree_view_column_set_resizable (column, false); gtk_tree_view_column_set_sort_column_id (column, COL_EXP_TYPE); gtk_tree_view_append_column (expert_treeview, column); // Column: VALUE rend = gtk_cell_renderer_text_new (); g_signal_connect(rend, "edited", (GCallback) PREFERENCES_expert_option_edited, this); expert_col_value = gtk_tree_view_column_new_with_attributes (_("Value"), rend, "text", COL_EXP_VALUE, "editable", COL_EXP_EDITABLE, "editable-set", COL_EXP_EDITABLE, NULL); gtk_tree_view_column_set_resizable (expert_col_value, false); gtk_tree_view_column_set_sort_column_id (expert_col_value, COL_EXP_VALUE); gtk_tree_view_append_column (expert_treeview, expert_col_value); // Signals GtkTreeSelection *selection = gtk_tree_view_get_selection(expert_treeview); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK(PREFERENCES_on_selection_expert), this); // Help text area expert_textview = GTK_TEXT_VIEW (get ("expert_textview")); expert_textbuffer = gtk_text_view_get_buffer (expert_textview); gtk_text_buffer_create_tag (expert_textbuffer, "italic", "style", PANGO_STYLE_ITALIC, 0); gtk_text_buffer_create_tag (expert_textbuffer, "bold", "weight", PANGO_WEIGHT_BOLD,0); // Fill list expert_add_option_list (); } /** * Show the preferences dialog. * * @param name Widget's name of the dialog. The default is "dialog". */ void Preferences::show (std::string name) { // Is GTKBuilder file okay? if (!gtkbuilder_) return; // Update all widgets and texts in the dialog synchronize (); gtk_widget_show (get(name)); } /** * Hide the preferences dialog. * * @param name Widget's name of the dialog. The default is "dialog". */ void Preferences::hide (std::string name) { // Is GTKBuilder file okay? if (!gtkbuilder_) return; // Hide the properties dialog if (properties_) properties_->hide (); // Hide the preferences dialog gtk_widget_hide (get(name)); } void Preferences::synchronize (class Mailbox *mailbox, GtkListStore *store, GtkTreeIter *iter) { if (mailbox) { std::string stock_mailbox = "gtk-network"; std::string stock_status = "gtk-dialog-error"; if ((mailbox->protocol() == PROTOCOL_FILE) || (mailbox->protocol() == PROTOCOL_MH) || (mailbox->protocol() == PROTOCOL_MAILDIR)) stock_mailbox = "gtk-home"; else if (mailbox->protocol() == PROTOCOL_NONE) stock_mailbox ="gtk-dialog-question"; if (mailbox->status() == MAILBOX_UNKNOWN) stock_status = "gtk-dialog-question"; else if (mailbox->status() != MAILBOX_ERROR) stock_status = "gtk-ok"; std::string format = mailbox->value_to_string ("protocol", mailbox->protocol()); gtk_list_store_set (store, iter, COLUMN_UIN, mailbox->uin(), COLUMN_MAILBOX_STOCK_ID, stock_mailbox.c_str(), COLUMN_MAILBOX, mailbox->name().c_str(), COLUMN_SECURITY_STOCK_ID, "gtk-ok", COLUMN_FORMAT, format.c_str(), COLUMN_STATUS_STOCK_ID, stock_status.c_str(), -1); if (mailbox->protocol() == PROTOCOL_NONE) gtk_list_store_set (store, iter, COLUMN_SECURITY_STOCK_ID, "gtk-dialog-question", -1); else if (mailbox->authentication() == (gint) AUTH_USER_PASS) gtk_list_store_set (store, iter, COLUMN_SECURITY_STOCK_ID, "gtk-no", -1); } } void Preferences::synchronize (void) { // Mailboxes list GtkTreeView *view = GTK_TREE_VIEW (get("mailboxes_treeview")); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (view)); for (guint i=0; i < biff_->get_number_of_mailboxes (); i++) biff_->mailbox(i)->listed (false); GtkTreeIter iter; gboolean valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(store), &iter); while (valid) { guint uin; gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, COLUMN_UIN, &uin, -1); Mailbox *mailbox = biff_->get (uin); if (mailbox) { synchronize (mailbox, store, &iter); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); mailbox->listed (true); } else valid = gtk_list_store_remove (store, &iter); } for (guint i=0; i < biff_->get_number_of_mailboxes (); i++) { Mailbox *mailbox = biff_->mailbox(i); if (!mailbox->listed()) { gtk_list_store_append (store, &iter); synchronize (mailbox, store, &iter); } } // Insert the values of the options into the GUI widgets biff_->update_gui (OPTSGUI_UPDATE, OPTGRP_ALL, gtkbuilder_, filename_); // Expert dialog if (biff_->value_bool ("expert_show_tab")) expert_update_option_list (); // Stop button if (biff_->value_uint ("check_mode") == AUTOMATIC_CHECK) biff_->value ("check_mode", MANUAL_CHECK); else biff_->value ("check_mode", AUTOMATIC_CHECK); on_stop (0); // Make preferences dialog resizeable (if this is the user's wish) gtk_window_set_resizable (GTK_WINDOW (get("dialog")), biff_->value_bool ("pref_allow_resize")); } void Preferences::apply (void) { // Retrieve all values of the options from the GUI elements biff_->update_gui (OPTSGUI_GET, OPTGRP_ALL, gtkbuilder_, filename_); } void Preferences::on_add (GtkWidget *widget) { if (added_ == 0) { added_ = new Mailbox(biff_); if (selected_) (*added_) = (*selected_); biff_->add_mailbox (added_); synchronize (); GtkTreeView *view = GTK_TREE_VIEW (get("mailboxes_treeview")); GtkTreeIter iter; gboolean valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(expert_liststore), &iter); while (valid) { guint uin; gtk_tree_model_get (GTK_TREE_MODEL(expert_liststore), &iter, COLUMN_UIN, &uin, -1); if (added_->uin() == uin) break; valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (expert_liststore), &iter); } gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter); properties_->show (); } } void Preferences::on_remove (GtkWidget *widget) { GtkTreeView *view = GTK_TREE_VIEW (get("mailboxes_treeview")); GtkTreeSelection *selection = gtk_tree_view_get_selection (view); GtkTreeIter iter; if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (view)); guint uin; gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, COLUMN_UIN, &uin, -1); biff_->remove_mailbox (biff_->get(uin)); properties_->select (0); synchronize (); } } void Preferences::on_properties (GtkWidget *widget) { if (selected_) properties_->show(); } /** * This function is called when the preferences dialog shall be closed. Before * hiding the dialog the changes are applied and saved. * * @param widget Unused parameter. */ void Preferences::on_close (GtkWidget *widget) { // Apply changes and save them apply (); biff_->save (); // Hide the preferences dialog (static_cast(biff_->applet()))->hide_dialog_preferences(); } void Preferences::on_stop (GtkWidget *widget) { GtkWidget *child = gtk_bin_get_child (GTK_BIN(get("stop"))); child = gtk_bin_get_child (GTK_BIN(child)); GList *list = gtk_container_get_children (GTK_CONTAINER (child)); GtkWidget *image = static_cast(list->data); list = list->next; GtkWidget *label = static_cast(list->data); if (biff_->value_uint ("check_mode") == AUTOMATIC_CHECK) { gtk_label_set_markup (GTK_LABEL (label), _("_Start")); gtk_label_set_use_underline(GTK_LABEL (label), true); gtk_image_set_from_stock (GTK_IMAGE (image), GTK_STOCK_EXECUTE, GTK_ICON_SIZE_BUTTON); biff_->value ("check_mode", MANUAL_CHECK); } else { gtk_label_set_markup (GTK_LABEL (label), _("_Stop")); gtk_label_set_use_underline(GTK_LABEL (label), true); gtk_image_set_from_stock (GTK_IMAGE (image), GTK_STOCK_STOP, GTK_ICON_SIZE_BUTTON); biff_->value ("check_mode", AUTOMATIC_CHECK); } } void Preferences::on_browse_newmail_image (GtkWidget *widget) { GtkWidget *preview = gtk_image_new (); browse (_("Browse for a new mail image"), "newmail_image_entry", false, preview); } void Preferences::on_browse_nomail_image (GtkWidget *widget) { GtkWidget *preview = gtk_image_new (); browse (_("Browse for a new mail image"), "nomail_image_entry", false, preview); } /** * This function is called when the preferences dialog has been destroyed. * * @param widget Unused parameter. * @param event Unused parameter. * @return Always true is returned. */ gboolean Preferences::on_destroy (GtkWidget *widget, GdkEvent *event) { // Hide the preferences dialog (static_cast(biff_->applet()))->hide_dialog_preferences(); return true; } /** * This function is called when there is a request to delete the preferences * dialog. * * @param widget Unused parameter. * @param event Unused parameter. * @return Always true is returned. */ gboolean Preferences::on_delete (GtkWidget *widget, GdkEvent *event) { // Hide the preferences dialog (static_cast(biff_->applet()))->hide_dialog_preferences(); return true; } void Preferences::on_selection (GtkTreeSelection *selection) { GtkTreeIter iter; if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { GtkTreeView *view = GTK_TREE_VIEW (get("mailboxes_treeview")); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (view)); guint uin; gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, COLUMN_UIN, &uin, -1); Mailbox *mailbox = biff_->get (uin); properties_->select (mailbox); selected_ = mailbox; gtk_label_set_text (GTK_LABEL(get ("selection")), mailbox->name().c_str()); gtk_button_set_label (GTK_BUTTON(get("add")), "gtk-copy"); } else { gtk_label_set_text (GTK_LABEL(get ("selection")), _("No mailbox selected")); gtk_button_set_label (GTK_BUTTON(get("add")), "gtk-add"); selected_ = 0; } } void Preferences::on_check_changed (GtkWidget *widget) { // Need to update "expert_edit_options" option immediately if (std::string(gtk_widget_get_name(widget))=="expert_edit_options_check"){ biff_->update_gui (OPTSGUI_GET, biff_->find_option ("expert_edit_options"), gtkbuilder_, filename_); synchronize (); } // Disable and enable certain GUI elements depending on values of some // options biff_->update_gui (OptionsGUI (OPTSGUI_SENSITIVE | OPTSGUI_SHOW), OPTGRP_ALL, gtkbuilder_, filename_); } /** * Show context menu for the currently selected option. * * @param event The event that caused the menu to be shown or NULL. * @return Boolean indicating success */ gboolean Preferences::expert_show_context_menu (GdkEventButton *event) { // Get currently selected option Options *opts; Option *option; if (!expert_get_option (opts, option)) return false; // Can option not be changed? if (option->flags() & OPTFLG_USER_NO_CHANGE) return false; // Is it a boolean option? gboolean isbl = (option->type() == OPTTYPE_BOOL); GtkWidget *menu_toggle = get ("menu_option_toggleoption"); GtkWidget *menu_edit = get ("menu_option_editoption"); isbl ? gtk_widget_show (menu_toggle) : gtk_widget_hide (menu_toggle); (!isbl) ? gtk_widget_show (menu_edit) : gtk_widget_hide (menu_edit); // Show menu gtk_menu_popup (GTK_MENU(get("menu_option")), NULL, NULL, NULL, NULL, (event != NULL) ? event->button : 0, gdk_event_get_time ((GdkEvent*)event)); return true; } /** * Make the currently selected option editable. */ void Preferences::expert_edit_value (void) { // Get option GtkTreeIter treeiter; Options *opts; Option *option; if (!expert_get_option (opts, option, treeiter)) return; if (option->flags() & OPTFLG_USER_NO_CHANGE) return; // Edit entry in cell for editing the value GtkTreePath *path; path=gtk_tree_model_get_path (GTK_TREE_MODEL(expert_liststore), &treeiter); gtk_tree_view_set_cursor (expert_treeview, path, expert_col_value, true); gtk_widget_grab_focus (GTK_WIDGET (expert_treeview)); gtk_tree_path_free (path); } /** * Update list of options. Put all options and their values into the list. */ void Preferences::expert_add_option_list (void) { // General options regarding expert dialog if (!biff_->value_bool ("expert_show_tab")) return; gboolean showfixed = biff_->value_bool ("expert_show_fixed"); gboolean shownoshow = biff_->value_bool ("expert_show_noshow"); GtkTreeIter iter; // Clear old options gtk_list_store_clear (expert_liststore); Options *opts; std::map::iterator it; // Add options for (int i = -1; i < (signed)biff_->get_number_of_mailboxes (); i++) { if (i == -1) opts = biff_; else opts = biff_->mailbox(i); it = opts->options()->begin(); while (it != opts->options()->end()) { Option *option = (it++)->second; gint id = -1; // Ignore fixed options? if ((option->flags() & OPTFLG_USER_NO_CHANGE) && !showfixed) continue; // Show "No Show" options? if ((option->flags() & OPTFLG_NOSHOW) && !shownoshow) continue; // Create displayed name by concatenating group and name std::string groupname; if (i == -1) { groupname = biff_->group_name (option->group()); groupname += "/" + option->name(); } else { std::stringstream ss; id = opts->value_uint ("uin"); ss << "mailbox[" << id << "]/" << option->name(); ss >> groupname; } // Store fixed and variable values gtk_list_store_append (expert_liststore, &iter); gtk_list_store_set (expert_liststore, &iter, COL_EXP_ID, id , COL_EXP_NAME, option->name().c_str(), COL_EXP_GROUPNAME, groupname.c_str(), COL_EXP_TYPE, option->type_string().c_str(), -1); expert_update_option (option->name().c_str(), opts, &iter); } } } /** * This function has to be called if an option is selected. All the widgets * are updated. * * @param selection Pointer to a GtkTreeSelection widget (obtained by the * callback function). */ void Preferences::expert_on_selection (GtkTreeSelection *selection) { std::string tmpstr; // Get option Options *opts; Option *option; if (!expert_get_option (opts, option)) return; // Create help message const gchar *tmp = NULL; GtkTextIter iter; GtkTextBuffer *tb = expert_textbuffer; gtk_text_buffer_set_text (tb, "", -1); gtk_text_buffer_get_start_iter (tb, &iter); gtk_text_buffer_insert (tb, &iter, "Option ", -1); tmp = option->name().c_str(); gtk_text_buffer_insert_with_tags_by_name (tb, &iter, tmp, -1, "bold", NULL); gtk_text_buffer_insert (tb, &iter, ": ", -1); gtk_text_buffer_insert (tb, &iter, option->help().c_str(), -1); gtk_text_buffer_insert (tb, &iter, "\n\nGroup ", -1); tmp = opts->group_name(option->group()).c_str(); gtk_text_buffer_insert_with_tags_by_name (tb, &iter, tmp, -1, "bold", NULL); gtk_text_buffer_insert (tb, &iter, ": ", -1); tmp = opts->group_help(option->group()).c_str(); gtk_text_buffer_insert (tb, &iter, tmp, -1); gtk_text_buffer_insert (tb, &iter, "\n\nDefault value: ", -1); gtk_text_buffer_insert (tb, &iter, option->default_string().c_str(), -1); if (option->type () == OPTTYPE_UINT) { gtk_text_buffer_insert (tb, &iter, "\n\nAllowed values: ", -1); tmpstr = (static_cast(option))->allowed_ids (", "); tmp = tmpstr.c_str (); gtk_text_buffer_insert (tb, &iter, tmp, -1); if (!(option->flags () & OPTFLG_ID_INT_STRICT)) { if (*tmp) gtk_text_buffer_insert (tb, &iter, ", ", -1); tmp = "any positive integer"; gtk_text_buffer_insert_with_tags_by_name (tb, &iter, tmp, -1, "italic", NULL); } } gtk_text_buffer_insert (tb, &iter, "\n\nProperties: ", -1); tmpstr = option->flags_string (); tmp = tmpstr.c_str (); gtk_text_buffer_insert (tb, &iter, tmp, -1); } /** * Update all options that are currently listed in the expert dialog. */ void Preferences::expert_update_option_list (void) { gchar *name = NULL; gint id = -1; Options *option_opts = NULL; GtkTreeIter iter; gboolean valid=gtk_tree_model_get_iter_first (GTK_TREE_MODEL(expert_liststore),&iter); while (valid) { // Get next option gtk_tree_model_get (GTK_TREE_MODEL(expert_liststore), &iter, COL_EXP_NAME, &name, COL_EXP_ID, &id, -1); if (id<0) option_opts = biff_; else option_opts = biff_->get (id); // Update option (remove options to non existing mailboxes) if (option_opts) { expert_update_option (name, option_opts, &iter); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (expert_liststore), &iter); } else valid = gtk_list_store_remove (expert_liststore, &iter); } // Clear widgets if there is no selection GtkTreeSelection *select=gtk_tree_view_get_selection(expert_treeview); if ((!select) || (!gtk_tree_selection_count_selected_rows (select))) gtk_text_buffer_set_text (expert_textbuffer, "", -1); } /** * Update variable properties of a option in the list of all options. * * @param name Name of the option * @param options Container of the option * @param iter Iterator for option's line in the list */ void Preferences::expert_update_option (const gchar *name, Options *options, GtkTreeIter *iter) { Option *option = NULL; // Get option if ((options) && (name)) option = options->find_option (name); if (!option) return; // Update option const gchar *value = options->to_string(name).c_str(); gboolean italic = ((!(option->flags() & OPTFLG_USER_NO_CHANGE)) && (!option->is_default ()) && (biff_->value_bool ("expert_hilite_changed"))); gboolean edit = ((!(option->flags() & OPTFLG_USER_NO_CHANGE)) && (option->type() != OPTTYPE_BOOL)); gtk_list_store_set (expert_liststore, iter, COL_EXP_VALUE, value, COL_EXP_NAME_ITALIC, italic, COL_EXP_EDITABLE, edit, -1); } /** * Search for those (displayed) options that contain the string in the search * entry widget. */ void Preferences::expert_search (void) { // Get relevant information const gchar *search; search = gtk_entry_get_text (GTK_ENTRY (get ("expert_search_entry"))); gboolean value_search = biff_->value_bool ("expert_search_values"); GtkTreeIter iter; gboolean valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(expert_liststore), &iter); // Test each option while (valid) { // Get text gchar *name, *value; gtk_tree_model_get (GTK_TREE_MODEL(expert_liststore), &iter, COL_EXP_GROUPNAME, &name, COL_EXP_VALUE, &value, -1); // Look for string if ((name) && (value) && (std::string(name).find(search) == std::string::npos) && (!value_search || (std::string(value).find(search) == std::string::npos))) valid = gtk_list_store_remove (expert_liststore, &iter); else valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(expert_liststore), &iter); } // Clear widgets if there is no selection GtkTreeSelection *select = gtk_tree_view_get_selection (expert_treeview); if ((!select) || (!gtk_tree_selection_count_selected_rows (select))) gtk_text_buffer_set_text (expert_textbuffer, "", -1); } /** * Toggle the currently selected boolean option. */ void Preferences::expert_toggle_option (void) { Options *opts; Option *option; if (!expert_get_option (opts, option)) return; if (option->type() != OPTTYPE_BOOL) return; if (option->flags() & OPTFLG_USER_NO_CHANGE) return; // Toggle option std::string name = option->name (); opts->value (name, !opts->value_bool (name)); // Update GUI synchronize (); if ((option->group() == OPTGRP_MAILBOX) && (selected_ == static_cast(opts))) properties_->update_view (); } /** * Set the currently selected option. * * @param new_text New value of the selected option. If this is NULL the * option will be set to its default value. */ void Preferences::expert_set_selected_option (const gchar *new_text) { Options *opts; Option *option; if (!expert_get_option (opts, option)) return; // Set option if (new_text) opts->from_string (option->name(), new_text); else opts->from_string (option->name(), option->default_string()); // Update GUI synchronize (); if ((option->group() == OPTGRP_MAILBOX) && (selected_ == static_cast(opts))) properties_->update_view (); } /** * Get a pointer to the currently selected option. * * @param options Reference where a pointer to the container of the option * is returned * @param option Reference where a pointer to the option is returned * @return Boolean indicating success */ gboolean Preferences::expert_get_option (Options *&options, Option *&option) { GtkTreeIter treeiter; return expert_get_option (options, option, treeiter); } /** * Get a pointer to the currently selected option. * * @param options Reference where a pointer to the container of the option * is returned * @param option Reference where a pointer to the option is returned * @param treeiter Reference to a GtkTreeIter, where the GtkTreeIter of the * list entry of the option is returned * @return Boolean indicating success */ gboolean Preferences::expert_get_option (class Options *&options, class Option *&option, GtkTreeIter &treeiter) { // Get selection GtkTreeSelection *select = gtk_tree_view_get_selection (expert_treeview); if (!select) return false; if (!gtk_tree_selection_get_selected (select, NULL, &treeiter)) return false; // Get selected row gint id = -1; gchar *name = NULL; gtk_tree_model_get (GTK_TREE_MODEL(expert_liststore), &treeiter, COL_EXP_ID, &id, COL_EXP_NAME, &name, -1); if (!name) return false; // Get option if (id < 0) options = biff_; else options = biff_->get (id); if (!options) return false; option = options->find_option (name); return true; } gnubiff-2.2.16/src/pop.cc0000644000175000017500000003703312474422122012045 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: pop.cc,v $ // Revision : $Revision: 1.34.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include "ui-applet.h" #include "pop.h" #include "socket.h" #include "nls.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The mailbox for one of the IMAP protocols is created from * scratch. * * @param biff Pointer to the instance of Gnubiff. */ Pop::Pop (Biff *biff) : Mailbox (biff) { socket_ = new Socket (this); } /** * Constructor. The mailbox for one of the POP protocols is created by taking * the attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Pop::Pop (const Mailbox &other) : Mailbox (other) { socket_ = new Socket (this); } /// Destructor Pop::~Pop (void) { delete socket_; } // ======================================================================== // main // ======================================================================== /** * Make a note to start monitoring in a new thread. If there is already a note * or if we are in idle state nothing is done. * * @param delay Time (in seconds) to wait before the new thread will be * created. If {\em delay} is zero (this is the default) the * value of {\em delay()} is taken. */ void Pop::threaded_start (guint delay) { // If no delay is given use internal delay if (!delay) delay=Mailbox::delay(); Mailbox::threaded_start (delay); } /** * Method to be called by a new thread for monitoring the mailbox. The status * of the mailbox will be updated, new mails fetched and idle state entered * (if the server does allow this). Before exiting creating of a new thread * for monitoring is noted down. * * Remark: In this function all exceptions are catched that are thrown when * sending POP commands or receiving response from the server. */ void Pop::start (void) throw (pop_err) { if (!g_mutex_trylock (monitor_mutex_)) return; try { start_checking (); } catch (pop_err& err) { // Catch all errors that are un-recoverable and result in // closing the connection, and resetting the mailbox status. #if DEBUG g_warning ("[%d] Pop exception: %s", uin(), err.what()); #endif set_status_mailbox_error (); socket_->close (); } gdk_threads_enter (); biff_->applet()->update (); gdk_threads_leave (); g_mutex_unlock (monitor_mutex_); threaded_start (delay()); } /** * Connect to the mailbox, get unread mails and update mailbox status. * If the password for the mailbox isn't already known, it is obtained (if * possible). When leaving this function gnubiff will logout from the server. * * @exception pop_command_err * This exception is thrown when we get an unexpected * response. * @exception pop_dos_err * This exception is thrown when a DoS attack is suspected. * @exception pop_nologin_err * The server doesn't want us to login or the user doesn't * provide a password. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Pop::fetch (void) throw (pop_err) { // Is there a password? Can we obtain it? if (!biff_->get_password_for_mailbox (this)) { g_warning (_("[%d] Empty password"), uin()); throw pop_nologin_err(); } // Connection and authentification connect(); fetch_mails (); // QUIT command_quit(); } /** * Get the first lines of the unread mails and update the status of the * mailbox. * * @exception pop_command_err * This exception is thrown when we get an unexpected * response. * @exception pop_dos_err * This exception is thrown when a DoS attack is suspected. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Pop::fetch_mails (gboolean statusonly) throw (pop_err) { std::map msg_uid; // STAT guint total = command_stat (); // We want to retrieve a maximum of _max_collected_mail uidl // so we have to check the total number and find corresponding // starting index (start). guint start = 1, num = biff_->value_uint ("max_mail"); if ((biff_->value_bool ("use_max_mail")) && (total > num)) start = 1 + total - num; else num = total; // UIDL if (num == total) command_uidl (total, msg_uid); // Fetch mails std::vector mail; std::string uid; for (guint i=0; i< num; i++) { // UIDL if (msg_uid.empty()) uid = command_uidl (i+start); else uid = msg_uid[i+start]; if (statusonly) continue; // Check if mail is already known if (new_mail (uid)) continue; // TOP command_top (mail, start + i); // Parse mail parse (mail, uid); } } /** * Opening the socket for the connection to the server. If authentication is * set to autodetection before this is done. Login to the server is handled * by the methods Pop3::connect() or Apop::connect(). * * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Pop::connect (void) throw (pop_err) { // Autodetection of authentication if (authentication() == AUTH_AUTODETECT) { guint prt = port(); if (!use_other_port()) prt = 995; if (!socket_->open (address(), prt, AUTH_SSL)) { if (!use_other_port()) prt = 110; if (!socket_->open (address(), prt, AUTH_USER_PASS)) throw pop_socket_err(); else { port (prt); authentication (AUTH_USER_PASS); socket_->close(); } } else { port (prt); authentication (AUTH_SSL); socket_->close(); } } // Open socket if (!socket_->open (address(), port(), authentication(), certificate(), 3)) throw pop_socket_err(); } /** * Sending the POP3 command "QUIT" to the server. If this succeeds the * connection to the POP3 server is closed. * * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Pop::command_quit (void) throw (pop_err) { std::string line; // Sending the command sendline ("QUIT"); readline (line, true, true, false); // Closing the socket socket_->close(); } /** * Sending the POP3 command "STAT" to the server to get the total number of * messages. * * @return Total number of messages * @exception pop_command_err * This exception is thrown if there is an error in the * server's response. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ guint Pop::command_stat (void) throw (pop_err) { std::string line; // Get total number of messages into total sendline ("STAT"); readline (line); // line is "+OK total total_size" (see RFC 1939 5.) std::stringstream ss(line.substr(4)); if (!g_ascii_isdigit(line[4])) throw pop_command_err(); guint total; ss >> total; return total; } /** * Sending the POP3 command "TOP" to get the header and the first lines of a * mail. * * @param mail Lines of the obtained mail in a vector * @param msg Message number of the mail in question * @exception pop_command_err * This exception is thrown if there is an error in the * server's response. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Pop::command_top (std::vector &mail, guint msg) throw (pop_err) { std::string line; // Clear old mail mail.clear (); std::stringstream ss; ss << "TOP " << msg << " " << biff_->value_uint ("min_body_lines"); // Get header and first lines of mail sendline (ss.str ()); readline (line, false); // +OK response to TOP #ifdef DEBUG g_print ("** Message: [%d] RECV(%s:%d): (message) ", uin(), address().c_str(), port()); #endif gint cnt = biff_->value_uint ("prevdos_header_lines"); cnt += biff_->value_uint ("min_body_lines") + 1; do { readline (line, false, true, false); // Remove trailing '\r' if (line.size() > 0) { if (line[0] != '.') mail.push_back (line.substr(0, line.size()-1)); else // Note: We know line.size()>1 in this case mail.push_back (line.substr(0, line.size()-2)); #ifdef DEBUG g_print ("+"); #endif } else throw pop_command_err (); } while ((line != ".\r") && (cnt--)); if (cnt < 0) throw pop_dos_err(); #ifdef DEBUG g_print("\n"); #endif // Remove ".\r" line mail.pop_back(); } /** * Sending the POP3 command "UIDL" to get the unique id for all mails. * * @param total Total number of messages * @param msg_uid Reference to a map of pairs (message number, unique id) * that is used to return the obtained values. * @exception pop_command_err * This exception is thrown if there is an error in the * server's response. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Pop::command_uidl (guint total, std::map &msg_uid) throw (pop_err) { std::string line, uid; guint msg_int; msg_uid.clear (); // Get maximum length of identifier (should be 70, see RFC 1939 7.) unsigned uid_max_len = biff_->value_uint ("pop3_max_uid_length"); // Send command sendline ("UIDL"); readline (line); // line is "+OK" (see RFC 1939 7.) for (guint msg=1; msg <= total; msg++) { readline (line, true, true, false); std::stringstream ss(line); ss >> msg_int >> uid; if (msg_int != msg) throw pop_command_err (); if ((uid.size() > uid_max_len) || (uid.size() == 0)) throw pop_command_err (); msg_uid[msg] = uid; } readline (line, true, true, false); // line is ".\r" if (line != ".\r") throw pop_command_err (); } /** * Sending the POP3 command "UIDL" to get the unique id for a mail. * * @param msg Message number of the mail in question * @return unique id as a C++ String * @exception pop_command_err * This exception is thrown if there is an error in the * server's response. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ std::string Pop::command_uidl (guint msg) throw (pop_err) { std::string line, uid; guint msg_int; std::stringstream ss_msg; ss_msg << msg; // Get maximum length of identifier (should be 70, see RFC 1939 7.) unsigned int uid_max_len = biff_->value_uint ("pop3_max_uid_length"); // Send command sendline ("UIDL " + ss_msg.str ()); readline (line); // line is "+OK msg uidl" (see RFC 1939 7.) std::stringstream ss(line.substr(4)); ss >> msg_int >> uid; if (msg_int != msg) throw pop_command_err (); if ((uid.size() > uid_max_len) || (uid.size() == 0)) throw pop_command_err (); return uid; } /** * Send a line to the POP server. * The given {\em line} is postfixed with "\r\n" and then written to * the socket of the mailbox. * * If {\em check} is true the return value of the call to Socket::write() is * checked and an pop_socket_err exception is thrown if it was not successful. * So this function always returns SOCKET_STATUS_OK if {\em check} is true, * otherwise (if {\em check} is false) error handling is left to the caller of * this function. * * @param line line to be sent * @param print Shall the sent command be printed in debug mode? * The default is true. * @param check Shall the return value of the Socket::write() command be * checked? The default is true. * @return Return value of the Socket::write() command, this is always * SOCKET_STATUS_OK if {\em check} is true. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ gint Pop::sendline (const std::string line, gboolean print, gboolean check) throw (pop_err) { gint status=socket_->write (line + "\r\n", print); if ((status!=SOCKET_STATUS_OK) && check) throw pop_socket_err(); return status; } /** * Read one line from the server. If {\em check} is true the return value of * the call to Socket::read() is checked and a pop_socket_err exception is * thrown if it was not successful. So this function always returns * SOCKET_STATUS_OK if {\em check} is true, otherwise (if {\em check} is * false) error handling is left to the caller of this function. * * If {\em checkline} is true then the read line is checked for an negative * response ("-ERR"). If such a response is found an error message is printed, * the "QUIT" command is sent (see remark below) and a pop_command_err * exception is thrown. * * Remark: The parameter {\em checkline} must be false if reading the response * to the "QUIT" command. * * @param line String that contains the read line if the call was * successful (i.e. the return value is SOCKET_STATUS_OK), * the value is undetermined otherwise * @param print Shall the read line be printed in debug mode? * The default is true. * @param check Shall the return value of the Socket::read() command be * checked? The default is true. * @param checkline Shall {\em line} be checked for an error response? * The default is true. * @return Return value of the Socket::read() command, this is always * SOCKET_STATUS_OK if {\em check} is true. * @exception pop_command_err * This exception is thrown if {\em line} contains a negative * response and {\em checkline} is true. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ gint Pop::readline (std::string &line, gboolean print, gboolean check, gboolean checkline) throw (pop_err) { // Read line gint status=socket_->read(line, print, check); if (check && (status!=SOCKET_STATUS_OK)) throw pop_socket_err(); // Only "+OK" and "-ERR" are valid responses (see RFC 1939 3.) if (!checkline) return status; if (line.find ("-ERR") == 0) { g_warning (_("[%d] Error message from POP3 server:%s"), uin(), line.substr(4,line.size()-4).c_str()); // We are still able to logout command_quit (); throw pop_command_err(); } if (line.find ("+OK") != 0) { g_warning (_("[%d] Did not get a positive response from POP3 server"), uin()); throw pop_command_err(); } return status; } gnubiff-2.2.16/src/header.h0000644000175000017500000001564512474422122012346 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: header.h,v $ // Revision : $Revision: 1.6.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : All information about a specific mail needed by gnubiff // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __HEADER_H__ #define __HEADER_H__ #ifdef HAVE_CONFIG_H # include #endif #include /** * All the information about a specific mail needed by gnubiff. Headers are * referred to by the mailid. */ class Header { public: void add_to_body (const std::string text); void error_to_body (void); static gboolean sort_headers (std::vector

&ptr_headers, std::string sort_order); protected: /// First lines of the mail's body std::string body_; /// Error message to be displayed instead of the mail's body std::string error_; /// Characterset of the mail's body std::string charset_; /// Date of the mail std::string date_; /// Key for faster sorting by date std::string date_collate_key_; /// Mailbox identifier guint mailbox_uin_; /** * This is a (hopefully) unique identifier for the mail. If supported by * the protocol this will be the unique id of the mail that is provided * by the server (this is the case for POP3 and IMAP4). Otherwise * gnubiff creates an own identifier. * * Remark: This identifier must not contain whitespace characters! * * @see The mail identifier is calculated by the method Header::mailid(). */ std::string mailid_; /// Position in the mailbox guint position_; /// Sender of the mail std::string sender_; /// Key for faster sorting by sender std::string sender_collate_key_; /// Subject of the mail std::string subject_; /// Key for faster sorting by subject std::string subject_collate_key_; public: bool operator == (const Header &other) const; /* Binary function typedef. Needed to define the structures for comparing * headers when sorting. */ typedef std::binary_function
bin_fun_; /// Comparing the position of two headers struct compare_position : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return x->position() > y->position(); } }; /// Comparing the position of two headers (reversed) struct compare_position_rev : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return x->position() < y->position(); } }; /// Comparing the mailbox identifier of two headers struct compare_mailbox_uin : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return x->mailbox_uin() > y->mailbox_uin(); } }; /// Comparing the mailbox identifier of two headers (reversed) struct compare_mailbox_uin_rev : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return x->mailbox_uin() < y->mailbox_uin(); } }; /// Comparing the sender of two headers struct compare_sender : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return (x->sender_sort() > y->sender_sort()); } }; /// Comparing the sender of two headers (reversed) struct compare_sender_rev : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return (x->sender_sort() < y->sender_sort()); } }; /// Comparing the subject of two headers struct compare_subject : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return (x->subject_sort() > y->subject_sort()); } }; /// Comparing the subject of two headers (reversed) struct compare_subject_rev : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return (x->subject_sort() < y->subject_sort()); } }; /// Comparing the date of two headers struct compare_date : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return (x->date_sort() > y->date_sort()); } }; /// Comparing the date of two headers (reversed) struct compare_date_rev : public bin_fun_ { bool operator()(const Header *x, const Header *y) const { return (x->date_sort() < y->date_sort()); } }; /// Access function to Header::body_ std::string body (void) const {return body_;} /// Access function to Header::body_ void body (const std::string body) {body_ = body;} /// Access function to Header::error_ std::string error (void) const {return error_;} /// Access function to Header::error_ void error (const std::string error) {error_ = error;} /// Access function to Header::date_ std::string date (void) const {return date_;} void date (const std::string date); /// Access function to Header::date_collate_key_ std::string date_sort (void) const {return date_collate_key_;} /// Access function to Header::charset_ std::string charset (void) const {return charset_;} /// Access function to Header::charset_ void charset (const std::string charset) {charset_ = charset;} /// Access function to Header::mailbox_uin_ guint mailbox_uin (void) const {return mailbox_uin_;} /// Access function to Header::mailbox_uin_ void mailbox_uin (guint pos) {mailbox_uin_ = pos;} /// Access function to Header::mailid_ std::string mailid (void) const {return mailid_;} void mailid (const std::string uid); /// Access function to Header::position_ guint position (void) const {return position_;} /// Access function to Header::position_ void position (guint pos) {position_ = pos;} /// Access function to Header::sender_ std::string sender (void) const {return sender_;} void sender (const std::string sender); /// Access function to Header::sender_collate_key_ std::string sender_sort (void) const {return sender_collate_key_;} /// Access function to Header::subject_ std::string subject (void) const {return subject_;} void subject (const std::string subject); /// Access function to Header::subject_collate_key_ std::string subject_sort (void) const {return subject_collate_key_;} }; #endif gnubiff-2.2.16/src/eggtrayicon.c0000644000175000017500000003126612474422122013421 00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* eggtrayicon.c * Copyright (C) 2002 Anders Carlsson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include "eggtrayicon.h" #if defined (GDK_WINDOWING_X11) #include #include #elif defined (GDK_WINDOWING_WIN32) #include #endif #ifndef EGG_COMPILATION #ifndef _ #define _(x) dgettext (GETTEXT_PACKAGE, x) #define N_(x) x #endif #else #define _(x) x #define N_(x) x #endif #define SYSTEM_TRAY_REQUEST_DOCK 0 #define SYSTEM_TRAY_BEGIN_MESSAGE 1 #define SYSTEM_TRAY_CANCEL_MESSAGE 2 #define SYSTEM_TRAY_ORIENTATION_HORZ 0 #define SYSTEM_TRAY_ORIENTATION_VERT 1 enum { PROP_0, PROP_ORIENTATION }; static GtkPlugClass *parent_class = NULL; static void egg_tray_icon_init (EggTrayIcon *icon); static void egg_tray_icon_class_init (EggTrayIconClass *klass); static void egg_tray_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void egg_tray_icon_realize (GtkWidget *widget); static void egg_tray_icon_unrealize (GtkWidget *widget); #ifdef GDK_WINDOWING_X11 static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, gboolean dock_if_realized); static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon); #endif GType egg_tray_icon_get_type (void) { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (EggTrayIconClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) egg_tray_icon_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (EggTrayIcon), 0, /* n_preallocs */ (GInstanceInitFunc) egg_tray_icon_init }; our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0); } return our_type; } static void egg_tray_icon_init (EggTrayIcon *icon) { icon->stamp = 1; icon->orientation = GTK_ORIENTATION_HORIZONTAL; gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK); } static void egg_tray_icon_class_init (EggTrayIconClass *klass) { GObjectClass *gobject_class = (GObjectClass *)klass; GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; parent_class = g_type_class_peek_parent (klass); gobject_class->get_property = egg_tray_icon_get_property; widget_class->realize = egg_tray_icon_realize; widget_class->unrealize = egg_tray_icon_unrealize; g_object_class_install_property (gobject_class, PROP_ORIENTATION, g_param_spec_enum ("orientation", _("Orientation"), _("The orientation of the tray."), GTK_TYPE_ORIENTATION, GTK_ORIENTATION_HORIZONTAL, G_PARAM_READABLE)); #if defined (GDK_WINDOWING_X11) /* Nothing */ #elif defined (GDK_WINDOWING_WIN32) g_warning ("Port eggtrayicon to Win32"); #else g_warning ("Port eggtrayicon to this GTK+ backend"); #endif } static void egg_tray_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { EggTrayIcon *icon = EGG_TRAY_ICON (object); switch (prop_id) { case PROP_ORIENTATION: g_value_set_enum (value, icon->orientation); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } #ifdef GDK_WINDOWING_X11 static void egg_tray_icon_get_orientation_property (EggTrayIcon *icon) { Display *xdisplay; Atom type; int format; union { gulong *prop; guchar *prop_ch; } prop = { NULL }; gulong nitems; gulong bytes_after; int error, result; g_assert (icon->manager_window != None); xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); gdk_error_trap_push (); type = None; result = XGetWindowProperty (xdisplay, icon->manager_window, icon->orientation_atom, 0, G_MAXLONG, FALSE, XA_CARDINAL, &type, &format, &nitems, &bytes_after, &(prop.prop_ch)); error = gdk_error_trap_pop (); if (error || result != Success) return; if (type == XA_CARDINAL) { GtkOrientation orientation; orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; if (icon->orientation != orientation) { icon->orientation = orientation; g_object_notify (G_OBJECT (icon), "orientation"); } } if (prop.prop) XFree (prop.prop); } static GdkFilterReturn egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data) { EggTrayIcon *icon = user_data; XEvent *xev = (XEvent *)xevent; if (xev->xany.type == ClientMessage && xev->xclient.message_type == icon->manager_atom && xev->xclient.data.l[1] == icon->selection_atom) { egg_tray_icon_update_manager_window (icon, TRUE); } else if (xev->xany.window == icon->manager_window) { if (xev->xany.type == PropertyNotify && xev->xproperty.atom == icon->orientation_atom) { egg_tray_icon_get_orientation_property (icon); } if (xev->xany.type == DestroyNotify) { egg_tray_icon_manager_window_destroyed (icon); } } return GDK_FILTER_CONTINUE; } #endif static void egg_tray_icon_unrealize (GtkWidget *widget) { #ifdef GDK_WINDOWING_X11 EggTrayIcon *icon = EGG_TRAY_ICON (widget); GdkWindow *root_window; if (icon->manager_window != None) { GdkWindow *gdkwin; gdkwin = gdk_x11_window_lookup_for_display (gtk_widget_get_display (widget), icon->manager_window); gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); } root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget)); gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon); if (GTK_WIDGET_CLASS (parent_class)->unrealize) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); #endif } #ifdef GDK_WINDOWING_X11 static void egg_tray_icon_send_manager_message (EggTrayIcon *icon, long message, Window window, long data1, long data2, long data3) { XClientMessageEvent ev; Display *display; ev.type = ClientMessage; ev.window = window; ev.message_type = icon->system_tray_opcode_atom; ev.format = 32; ev.data.l[0] = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (icon))); ev.data.l[1] = message; ev.data.l[2] = data1; ev.data.l[3] = data2; ev.data.l[4] = data3; display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); gdk_error_trap_push (); XSendEvent (display, icon->manager_window, False, NoEventMask, (XEvent *)&ev); XSync (display, False); gdk_error_trap_pop (); } static void egg_tray_icon_send_dock_request (EggTrayIcon *icon) { egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_REQUEST_DOCK, icon->manager_window, gtk_plug_get_id (GTK_PLUG (icon)), 0, 0); } static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, gboolean dock_if_realized) { Display *xdisplay; if (icon->manager_window != None) return; xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); XGrabServer (xdisplay); icon->manager_window = XGetSelectionOwner (xdisplay, icon->selection_atom); if (icon->manager_window != None) XSelectInput (xdisplay, icon->manager_window, StructureNotifyMask|PropertyChangeMask); XUngrabServer (xdisplay); XFlush (xdisplay); if (icon->manager_window != None) { GdkWindow *gdkwin; gdkwin = gdk_x11_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)), icon->manager_window); gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon); if (dock_if_realized && gtk_widget_get_realized ((struct GtkWidget *)icon)) egg_tray_icon_send_dock_request (icon); egg_tray_icon_get_orientation_property (icon); } } static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon) { GdkWindow *gdkwin; g_return_if_fail (icon->manager_window != None); gdkwin = gdk_x11_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)), icon->manager_window); gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon); icon->manager_window = None; egg_tray_icon_update_manager_window (icon, TRUE); } #endif static void egg_tray_icon_realize (GtkWidget *widget) { #ifdef GDK_WINDOWING_X11 EggTrayIcon *icon = EGG_TRAY_ICON (widget); GdkScreen *screen; GdkDisplay *display; Display *xdisplay; char buffer[256]; GdkWindow *root_window; if (GTK_WIDGET_CLASS (parent_class)->realize) GTK_WIDGET_CLASS (parent_class)->realize (widget); screen = gtk_widget_get_screen (widget); display = gdk_screen_get_display (screen); xdisplay = gdk_x11_display_get_xdisplay (display); /* Now see if there's a manager window around */ g_snprintf (buffer, sizeof (buffer), "_NET_SYSTEM_TRAY_S%d", gdk_screen_get_number (screen)); icon->selection_atom = XInternAtom (xdisplay, buffer, False); icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False); icon->system_tray_opcode_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_OPCODE", False); icon->orientation_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_ORIENTATION", False); egg_tray_icon_update_manager_window (icon, FALSE); egg_tray_icon_send_dock_request (icon); root_window = gdk_screen_get_root_window (screen); /* Add a root window filter so that we get changes on MANAGER */ gdk_window_add_filter (root_window, egg_tray_icon_manager_filter, icon); #endif } EggTrayIcon * egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name) { g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL); } EggTrayIcon* egg_tray_icon_new (const gchar *name) { return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL); } guint egg_tray_icon_send_message (EggTrayIcon *icon, gint timeout, const gchar *message, gint len) { guint stamp; g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0); g_return_val_if_fail (timeout >= 0, 0); g_return_val_if_fail (message != NULL, 0); #ifdef GDK_WINDOWING_X11 if (icon->manager_window == None) return 0; #endif if (len < 0) len = strlen (message); stamp = icon->stamp++; #ifdef GDK_WINDOWING_X11 /* Get ready to send the message */ egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE, (Window)gtk_plug_get_id (GTK_PLUG (icon)), timeout, len, stamp); /* Now to send the actual message */ gdk_error_trap_push (); while (len > 0) { XClientMessageEvent ev; Display *xdisplay; xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon))); ev.type = ClientMessage; ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon)); ev.format = 8; ev.message_type = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_MESSAGE_DATA", False); if (len > 20) { memcpy (&ev.data, message, 20); len -= 20; message += 20; } else { memcpy (&ev.data, message, len); len = 0; } XSendEvent (xdisplay, icon->manager_window, False, StructureNotifyMask, (XEvent *)&ev); XSync (xdisplay, False); } gdk_error_trap_pop (); #endif return stamp; } void egg_tray_icon_cancel_message (EggTrayIcon *icon, guint id) { g_return_if_fail (EGG_IS_TRAY_ICON (icon)); g_return_if_fail (id > 0); #ifdef GDK_WINDOWING_X11 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE, (Window)gtk_plug_get_id (GTK_PLUG (icon)), id, 0, 0); #endif } GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon) { g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL); return icon->orientation; } gnubiff-2.2.16/src/mh_sylpheed.cc0000644000175000017500000001043512474422122013545 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mh_sylpheed.cc,v $ // Revision : $Revision: 1.6.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : Mh protocol as used by Sylpheed // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include "mh_sylpheed.h" #include "nls.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The local mailbox for the mh protocol (as used by sylpheed) * is created from scratch. * * @param biff Pointer to the instance of Gnubiff. */ Mh_Sylpheed::Mh_Sylpheed (Biff *biff) : Mh_Basic (biff) { value ("protocol", PROTOCOL_MH_SYLPHEED); } /** * Constructor. The local mailbox for the mh protocol (as used by sylpheed) * is created by taking the attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Mh_Sylpheed::Mh_Sylpheed (const Mailbox &other) : Mh_Basic (other) { value ("protocol", PROTOCOL_MH_SYLPHEED); } /// Destructor Mh_Sylpheed::~Mh_Sylpheed (void) { } // ======================================================================== // main // ======================================================================== /** * Get message numbers of the mails to be parsed. The message numbers of * unread mails are stored in the file ".sylpheed_mark" by Sylpheed. * * @param msn Reference to a vector in which the message numbers are * returned * @param empty Whether the vector shall be emptied before obtaining the * message numbers (the default is true) * @exception local_file_err * This exception is thrown when the file ".sylpheed_mark" * could not be opened. * @exception local_info_err * This exception is thrown when the ".sylpheed_mark" file * can't be parsed successfully. */ void Mh_Sylpheed::get_messagenumbers (std::vector &msn, gboolean empty) throw (local_err) { // Empty the vector if wished for if (empty) msn.clear (); // Open file std::string filename = add_file_to_path (address (), ".sylpheed_mark"); std::ifstream file; file.open (filename.c_str ()); if (!file.is_open ()) throw local_file_err (); // Get version of file guint32 version; file.read ((char *)&version, sizeof(version)); if (file.eof()) throw local_info_err(); if (version != 2) { g_warning (_("Version \"%u\" of sylpheed mark file not supported"), version); throw local_info_err(); } // Read message numbers while (true) { guint32 mn, flags; file.read ((char *)&mn, sizeof(mn)).read ((char *)&flags, sizeof(mn)); if (file.eof()) break; // (MSG_NEW || MSG_UNREAD) && !MSG_DELETED (see sylpheed sourcefile // "src/procmsg.h") if ((flags & 3) && !(flags & 8)) msn.push_back (mn); } // Close file file.close(); } /** * Give the name of the file that shall be monitored by FAM. For the mh * protocol this is the ".mh_sequences" file. * * @return Name of the file to be monitored. */ std::string Mh_Sylpheed::file_to_monitor (void) { return add_file_to_path (address(), std::string (".sylpheed_mark")); } gnubiff-2.2.16/src/ui-applet-systray.cc0000644000175000017500000001013412474422122014654 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-systray.cc,v $ // Revision : $Revision: 1.2.2.6 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include "eggtrayicon.h" #include "ui-applet-systray.h" #include "support.h" // ============================================================================ // base // ============================================================================ /** * Constructor. * * @param biff Pointer to gnubiff's biff */ AppletSystray::AppletSystray (Biff *biff) : AppletGtk (biff, this) { // Create the system tray icon trayicon_ = egg_tray_icon_new ("trayicon"); // Connect signals to system tray icon g_signal_connect (G_OBJECT (trayicon_), "size-allocate", G_CALLBACK (signal_size_allocate), this); // Tooltips shall be displayed in the system tray tooltip_widget_ = GTK_WIDGET (trayicon_); gtk_widget_set_tooltip_text (tooltip_widget_, ""); // We don't want a visible frame in the system tray gtk_frame_set_shadow_type (GTK_FRAME (get ("frame")), GTK_SHADOW_NONE); // We want to reuse the widgets for AppletGtk. So we have to change the // parent from the top level window to the system tray icon GtkWidget *eventbox = GTK_WIDGET (get ("event")); gtk_widget_reparent (eventbox, GTK_WIDGET (trayicon_)); // Show the tray icon gtk_widget_show_all (GTK_WIDGET (trayicon_)); } /// Destructor. AppletSystray::~AppletSystray (void) { } // ============================================================================ // main // ============================================================================ /** * Show the applet. Also the applet's appearance is updated. * * @param name This parameter is ignored (the default is "dialog"). */ void AppletSystray::show (std::string name) { gtk_widget_show (GTK_WIDGET (trayicon_)); } /** * This function is called automatically when the system tray icon is resized. * * @param width New width of the icon. * @param height New height of the icon. */ void AppletSystray::resize (guint width, guint height) { // Do we need to have the image rescaled? if ((width != widget_max_width_) || (height != widget_max_height_)) { widget_max_width_ = width; widget_max_height_ = height; update (); } } // ============================================================================ // callbacks // ============================================================================ /** * Callback function that is called when the size of the system tray icon * is changed. This function calls * * @param widget System tray icon * @param allocation Position and size of {\em widget} * @param user_data Pointer to the corresponding AppletSystray object */ void AppletSystray::signal_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data) { if (data) (static_cast(data))->resize (allocation->width, allocation->height); else unknown_internal_error (); } gnubiff-2.2.16/src/ui-applet-gtk.cc0000644000175000017500000001434412474422122013732 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-gtk.cc,v $ // Revision : $Revision: 1.31.2.5 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include #include #include "ui-preferences.h" #include "ui-applet-gtk.h" #include "ui-popup.h" #include "mailbox.h" #include "gtk_image_animation.h" /* "C" binding */ extern "C" { void APPLET_GTK_on_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer data) { if (data) (static_cast(data))->tooltip_update (); else unknown_internal_error (); } gboolean APPLET_GTK_on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (data) return (static_cast(data))->on_button_press (event); else unknown_internal_error (); return false; } void APPLET_GTK_on_menu_command (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->execute_command ("double_command", "use_double_command"); else unknown_internal_error (); } void APPLET_GTK_on_menu_mark (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->mark_messages_as_read (); else unknown_internal_error (); } void APPLET_GTK_on_menu_preferences (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->show_dialog_preferences (); else unknown_internal_error (); } void APPLET_GTK_on_menu_about (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->show_dialog_about (); else unknown_internal_error (); } void APPLET_GTK_on_menu_quit (GtkWidget *widget, gpointer data) { if (data) (static_cast(data))->on_menu_quit (); else unknown_internal_error (); } } // ============================================================================ // base // ============================================================================ /** * Constructor. * * @param biff Pointer to gnubiff's biff */ AppletGtk::AppletGtk (Biff *biff) : AppletGUI (biff, GNUBIFF_DATADIR"/applet-gtk.ui", this) { tooltip_widget_ = GTK_WIDGET (get ("dialog")); } /** * Constructor to be called from a constructor in a subclass of AppletGtk. * * @param biff Pointer to gnubiff's biff * @param applet Pointer to the applet itself */ AppletGtk::AppletGtk (class Biff *biff, class Applet *applet) : AppletGUI (biff, GNUBIFF_DATADIR"/applet-gtk.ui", applet) { } /// Destructor AppletGtk::~AppletGtk (void) { } // ============================================================================ // main // ============================================================================ /** * Update applet's status and appearance. * * @param init True if called when initializing gnubiff (the default is * false) * @return True if new messages are present */ gboolean AppletGtk::update (gboolean init) { // Is there another update going on? if (!g_mutex_trylock (update_mutex_)) return false; gboolean newmail = AppletGUI::update (init, "image", "unread", "fixed"); tooltip_update (); show (); g_mutex_unlock (update_mutex_); return newmail; } /** * Show the applet. Also the applet's appearance is updated. * * @param name This parameter is ignored (the default is "dialog"). */ void AppletGtk::show (std::string name) { GtkWindow *dialog = GTK_WINDOW (get ("dialog")); // Update window manager decorations gboolean decorated = gtk_window_get_decorated (dialog); if (decorated != biff_->value_bool ("applet_use_decoration")) gtk_window_set_decorated (dialog, biff_->value_bool ("applet_use_decoration")); gtk_widget_show (GTK_WIDGET (dialog)); if (biff_->value_bool ("applet_use_geometry")) gtk_window_parse_geometry (dialog, biff_->value_gchar ("applet_geometry")); if (biff_->value_bool ("applet_be_sticky")) gtk_window_stick (dialog); else gtk_window_unstick (dialog); gtk_window_set_keep_above(dialog, biff_->value_bool ("applet_keep_above")); gtk_window_set_skip_pager_hint (dialog,!biff_->value_bool("applet_pager")); gtk_window_set_skip_taskbar_hint (dialog, !biff_->value_bool ("applet_taskbar")); } gboolean AppletGtk::on_button_press (GdkEventButton *event) { // Double left click: start mail app if ((event->type == GDK_2BUTTON_PRESS) && (event->button == 1)) execute_command ("double_command", "use_double_command"); // Single left click: force mail check else if (event->button == 1) { force_popup_ = true; update (); } // Single middle click: mark messages as read else if (event->button == 2) mark_messages_as_read (); // Single right click: popup menu else if (event->button == 3) { if (biff_->value_bool ("use_double_command")) gtk_widget_set_sensitive (get("menu_start_command"), true); else gtk_widget_set_sensitive (get("menu_start_command"), false); gtk_menu_popup (GTK_MENU(get("menu")), NULL, NULL, NULL, NULL, event->button, event->time); } return true; } void AppletGtk::on_menu_quit (void) { gtk_main_quit(); } gnubiff-2.2.16/src/local.cc0000644000175000017500000002227112474422122012337 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: local.cc,v $ // Revision : $Revision: 1.31.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include #include #include "biff.h" #include "local.h" #include "support.h" #include "ui-applet.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The local mailbox is created from scratch. * * @param biff Pointer to the instance of Gnubiff. */ Local::Local (Biff *biff) : Mailbox (biff) { fam_mutex_ = g_mutex_new(); fam_is_open_ = false; } /** * Constructor. The local mailbox is created by taking the attributes of * the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Local::Local (const Mailbox &other) : Mailbox (other) { fam_mutex_ = g_mutex_new(); fam_is_open_ = false; } /// Destructor Local::~Local (void) { // Close FAM connection and free its mutex fam_close (); g_mutex_free (fam_mutex_); } // ======================================================================== // main // ======================================================================== /** * Monitor the files that need to be monitored by this mailbox via * polling. The thread calling this function must have been locked * Local::monitor_mutex_. */ void Local::start (void) { // Is there already someone watching this mailbox? if (!g_mutex_trylock (monitor_mutex_)) return; if (use_fam && value_bool ("local_fam_enable")) fam_start_monitoring (); else { try { start_checking (); gdk_threads_enter(); biff_->applet()->update(); gdk_threads_leave(); } catch (local_err &err) { // Catch all errors that are un-recoverable #if DEBUG g_warning ("[%d] Local mailbox exception: %s", uin(), err.what()); #endif set_status_mailbox_error (); } } g_mutex_unlock (monitor_mutex_); // If we are polling, there must be another check after the delay time if (!use_fam || value_bool ("local_fam_enable") == false) threaded_start (delay ()); } void Local::stop (void) { // Do the usual stopping things Mailbox::stop (); // Cancel the FAM monitor fam_cancel_monitor (); } /** * Give the name of the file that shall be monitored by FAM. * * Note: This may be different from the address when information about new * messages is stored in a separate file. * * @return Name of the file to be monitored. */ std::string Local::file_to_monitor (void) { return address (); } /** * Read und parse a file that contains a single message. * * @param filename Name of the file * @param uid Unique identifier of the message (if known) or the empty * string (the default is the empty string) * @exception local_file_err * This exception is thrown if the file could not be opened. */ void Local::parse_single_message_file (const std::string &filename, const std::string uid) throw (local_err) { std::ifstream file; std::vector mail; std::string line; guint max_cnt = 1 + biff_->value_uint ("min_body_lines"); // Read message header and first lines of message's body file.open (filename.c_str()); if (!file.is_open()) { g_warning (_("Cannot open %s."), filename.c_str()); throw local_file_err(); } // Read header and first lines of message gboolean header = true; guint cnt = max_cnt; getline (file, line); while ((!file.eof ()) && (cnt > 0)) { // End of header? if ((line.size() == 0) && header) header = false; // Store line if (!header) cnt--; mail.push_back (line); // Read next line getline(file, line); } file.close (); // Parse message parse (mail, uid); } // ======================================================================== // file alteration monitor (FAM) // ======================================================================== void Local::fam_cancel_monitor (void) { #ifdef HAVE_LIBFAM g_mutex_lock (fam_mutex_); if (fam_is_open_) { FAMCancelMonitor (&fam_connection_, &fam_request_); fam_is_open_ = false; } g_mutex_unlock (fam_mutex_); #endif } /** * Start monitoring the files that need to be monitored by this * mailbox via FAM. If the FAM connection terminates because of an * error, it is started again. The thread calling this function must * have been locked Local::monitor_mutex_. */ void Local::fam_start_monitoring (void) { #ifdef HAVE_LIBFAM gboolean keep_monitoring = true; while (keep_monitoring) { // Start FAM monitoring try { fam_monitoring (); keep_monitoring = false; } catch (local_err &err) { // Catch all errors that are un-recoverable #if DEBUG g_warning ("[%d] Local mailbox exception: %s", uin(), err.what()); g_message ("[%d] Start fetch in %d second(s)", uin(), delay()); #endif status (MAILBOX_ERROR); unread_.clear (); seen_.clear (); // If we have a fam connection then close it fam_close (); // Wait the delay time before monitoring again sleep (delay ()); } } #endif } /** * Close the FAM connection if it's open. */ void Local::fam_close (void) { #ifdef HAVE_LIBFAM g_mutex_lock (fam_mutex_); if (fam_is_open_) { FAMClose (&fam_connection_); fam_is_open_ = false; } g_mutex_unlock (fam_mutex_); #endif } /** * Get all pending FAM events. * * Note: Depending on how this function * was called this call may result in some new messages not being * noticed because of race conditions. */ void Local::fam_get_all_pending_events (void) { #ifdef HAVE_LIBFAM g_mutex_lock (fam_mutex_); if (fam_is_open_) while (FAMPending (&fam_connection_)) if (FAMNextEvent (&fam_connection_, &fam_event_) < 0) break; g_mutex_unlock (fam_mutex_); #endif } /** * Monitor the files that need to be monitored by this mailbox via * FAM. The thread calling this function must have been locked * Local::monitor_mutex_. * * @exception local_fam_err * This exception is thrown when there is a problem with * FAM (File Alteration Monitor). */ void Local::fam_monitoring (void) throw (local_err) { #ifdef HAVE_LIBFAM gint status = 0; // Connection request to FAM (File Alteration Monitor) g_mutex_lock (fam_mutex_); status = FAMOpen (&fam_connection_); if (status < 0) { g_mutex_unlock (fam_mutex_); throw local_fam_err(); } fam_is_open_ = true; // Start monitoring std::string file = file_to_monitor (); if (g_file_test (file.c_str(), G_FILE_TEST_IS_DIR)) status = FAMMonitorDirectory (&fam_connection_, file.c_str(), &fam_request_, NULL); else status = FAMMonitorFile (&fam_connection_, file.c_str(), &fam_request_, NULL); // Initialize the structures needed by the select() command fd_set readfds; FD_ZERO (&readfds); FD_SET (FAMCONNECTION_GETFD (&fam_connection_), &readfds); // Release FAM lock g_mutex_unlock (fam_mutex_); if (status < 0) throw local_fam_err(); // At this point we need to explicitely call the get function since // monitoring will start from now on. Even if the mailbox was full, // no change appears yet, so we force it. start_checking (); gdk_threads_enter(); biff_->applet()->update(); gdk_threads_leave(); // Wait for and handle FAM events status = 1; while (status == 1) { // Wait for next event if (select (FAMCONNECTION_GETFD (&fam_connection_) + 1, &readfds, NULL, NULL, NULL) < 0) { if (errno==EINTR) break; else throw local_fam_err(); } // Get the next event status = FAMNextEvent (&fam_connection_, &fam_event_); if ((status < 0 ) && (errno == EINTR)) break; if (status < 0) throw local_fam_err(); if ((fam_event_.code == FAMChanged) || (fam_event_.code == FAMCreated) || (fam_event_.code == FAMDeleted)) { start_checking (); gdk_threads_enter(); biff_->applet()->update(); gdk_threads_leave(); } else if (fam_event_.code == FAMAcknowledge) break; } // Close FAM connection fam_close (); // Ok, we got an error, just retry monitoring if (status != 1) throw local_fam_err(); #endif } gnubiff-2.2.16/src/pop3.h0000644000175000017500000000353712474422122011774 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: pop3.h,v $ // Revision : $Revision: 1.6.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __POP3_H__ #define __POP3_H__ #include "pop.h" /** * Mailbox for the POP3 protocol. */ class Pop3 : public Pop { public: // ======================================================================== // base // ======================================================================== Pop3 (class Biff *biff); Pop3 (const Mailbox &other); ~Pop3 (void); // ======================================================================== // main // ======================================================================== void connect (void) throw (pop_err); }; #endif gnubiff-2.2.16/src/ui-popup.h0000644000175000017500000000544312474422122012667 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-popup.h,v $ // Revision : $Revision: 1.10.2.2 $ // Revision date : $Date: 2007/09/08 18:06:31 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __POPUP_H__ #define __POPUP_H__ #ifdef HAVE_CONFIG_H # include #endif #include "decoding.h" #include "gui.h" #include "biff.h" #include "mailbox.h" enum { COLUMN_NAME = 0, COLUMN_NUMBER, COLUMN_SENDER, COLUMN_SUBJECT, COLUMN_DATE, COLUMN_MAILID, COLUMNS }; class Popup : public GUI, public Decoding { private: /** Some strings have to be stored while the popup is displayed (or * might be displayed */ std::vector stored_strings_; /* base */ void free_stored_strings (void); protected: class Biff *biff_; // Biff owner gint poptag_; // Tag for pop timer GMutex *timer_mutex_; // Mutex for timer tag access Header selected_header_; // Current selected header GtkTreeSelection *tree_selection_; // Current tree selection gboolean consulting_; // Tag to know if we're consulting a mail gint x_; // Last mouse x position known gint y_; // Last mouse y position known public: /* base */ Popup (class Biff *biff); virtual ~Popup (void); /* main */ virtual gint create (gpointer callbackdata); guint update (void); void show (std::string name = "dialog"); void hide (std::string name = "dialog"); /* callbacks */ gboolean on_delete (GtkWidget *widget, GdkEvent *event); gboolean on_popdown (void); gboolean on_button_press (GdkEventButton *event); gboolean on_button_release (GdkEventButton *event); void on_enter (GdkEventCrossing *event); void on_leave (GdkEventCrossing *event); void on_select (GtkTreeSelection *selection); }; #endif gnubiff-2.2.16/src/socket.h0000644000175000017500000000730212474422122012375 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: socket.h,v $ // Revision : $Revision: 1.12.2.2 $ // Revision date : $Date: 2010/02/06 14:39:37 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __SOCKET_H__ #define __SOCKET_H__ #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBSSL # include # include #endif #include #include #include "gnubiff_options.h" const gint SOCKET_TIMEOUT = 2; const gint SOCKET_STATUS_OK = 1; const gint SOCKET_STATUS_ERROR = 0; const gint SD_CLOSE = -1; class Socket { protected: std::string hostname_; gushort port_; class Mailbox * mailbox_; guint uin_; gboolean use_ssl_; std::string certificate_; /** Maximum length of a line being read from the socket before assuming * a DoS attack. When opening a connection this variable is set by * taking the value of the option "prevdos_line_length" (this is done * to avoid looking up the option for every line being read). */ guint prevdos_line_length_; # ifdef HAVE_LIBSSL SSL_CTX * context_; SSL * ssl_; gboolean bypass_certificate_; static class Certificate * ui_cert_; static GStaticMutex ui_cert_mutex_; // Lock to avoid conflicts # endif gint sd_; gint status_; gboolean connect (guint timeout); public: /** * base **/ Socket (class Mailbox *mailbox); virtual ~Socket (void); /** * main **/ gint open (std::string hostname = "", gushort port = 0, guint authentication = AUTH_SSL, std::string certificate = "", guint timeout = 5); void close (void); gint write (std::string line, gboolean print = true); gint read (std::string &line, gboolean print = true, gboolean check = true); /** * access **/ void status (const gint status) {status_ = status;} gint status (void) {return status_;} std::string hostname (void) {return hostname_;} void set_read_timeout(gint timeout); #ifdef HAVE_LIBSSL SSL *ssl (void) {return ssl_;} const gboolean bypass_certificate (void) {return bypass_certificate_;} void bypass_certificate (gboolean b) {bypass_certificate_ = b;} #endif }; /* TEMP_FAILURE_RETRY seems to be available only on Linux. For systems that * don't have this macro we provide our own version. This code was taken from * file "/usr/include/unistd.h" from Debian package "libc6-dev" * version 2.3.2.ds1-20. */ #ifndef TEMP_FAILURE_RETRY #define TEMP_FAILURE_RETRY(expression) \ (__extension__ \ ({ long int __result; \ do __result = (long int) (expression); \ while (__result == -1L && errno == EINTR); \ __result; })) #endif #endif gnubiff-2.2.16/src/ui-applet-systray.h0000644000175000017500000000444012474422122014521 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-systray.h,v $ // Revision : $Revision: 1.2.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __APPLET_SYSTRAY_H__ #define __APPLET_SYSTRAY_H__ #include #include "eggtrayicon.h" #include "ui-applet-gtk.h" class AppletSystray : public AppletGtk { private: /// Icon in the system tray EggTrayIcon *trayicon_; public: // ======================================================================== // base // ======================================================================== AppletSystray (class Biff *biff); ~AppletSystray (void); // ======================================================================== // main // ======================================================================== void show (std::string name = "dialog"); void resize (guint width, guint height); // ======================================================================== // callbacks // ======================================================================== static void signal_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data); }; #endif gnubiff-2.2.16/src/ui-certificate.cc0000644000175000017500000001132212474422122014135 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-certificate.cc,v $ // Revision : $Revision: 1.7.2.3 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include "ui-certificate.h" #include "socket.h" Certificate::Certificate (void) : GUI (GNUBIFF_DATADIR"/certificate.ui") { #ifdef HAVE_LIBSSL socket_ = 0; certificate_ = 0; stored_certificate_ = 0; #endif } Certificate::~Certificate (void) { GtkWidget *widget = get("dialog"); if (GTK_IS_WIDGET (widget)) { hide (); gtk_widget_destroy (widget); } if (gtkbuilder_) g_object_unref (G_OBJECT(gtkbuilder_)); gtkbuilder_ = NULL; } void Certificate::select (Socket *socket) { if (socket) { socket_ = socket; show (); } } void Certificate::show (std::string name) { if (!gtkbuilder_) create(this); gchar *text1 = g_strdup_printf (_("Unable to verify the identity of %s as a trusted site.\n"), socket_->hostname().c_str()); gchar *text2 = g_strdup_printf (_("Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password"), socket_->hostname().c_str()); std::string text = std::string(text1) + std::string(text2); gtk_label_set_text (GTK_LABEL(get("label")), text.c_str()); g_free (text1); g_free (text2); #ifdef HAVE_LIBSSL SSL *ssl = socket_->ssl(); if (!ssl) return; certificate_ = SSL_get_peer_certificate (ssl); if (!certificate_) return; if ((stored_certificate_) && X509_cmp (stored_certificate_, certificate_)) { socket_->bypass_certificate (true); return; } char common_name[100]; char country[100]; char state[100]; char locality[100]; char org[100]; char unit[100]; common_name[0] = '\0'; country[0] = '\0'; state[0] = '\0'; locality[0] = '\0'; org[0] = '\0'; unit[0] = '\0'; X509_NAME_get_text_by_NID (X509_get_subject_name(certificate_), NID_commonName, common_name, 100); X509_NAME_get_text_by_NID (X509_get_subject_name(certificate_), NID_organizationName, org, 100); X509_NAME_get_text_by_NID (X509_get_subject_name(certificate_), NID_organizationalUnitName, unit, 100); X509_NAME_get_text_by_NID (X509_get_subject_name(certificate_), NID_countryName, country, 100); X509_NAME_get_text_by_NID (X509_get_subject_name(certificate_), NID_stateOrProvinceName, state, 100); X509_NAME_get_text_by_NID (X509_get_subject_name(certificate_), NID_localityName, locality, 100); gtk_label_set_text (GTK_LABEL(get("peer_CN")), common_name); gtk_label_set_text (GTK_LABEL(get("peer_O")), org); gtk_label_set_text (GTK_LABEL(get("peer_OU")), unit); gtk_label_set_text (GTK_LABEL(get("peer_CO")), country); gtk_label_set_text (GTK_LABEL(get("peer_S")), state); gtk_label_set_text (GTK_LABEL(get("peer_L")), locality); gtk_widget_show_all (get("dialog")); gtk_main (); #endif } void Certificate::on_ok (GtkWidget *widget) { #ifdef HAVE_LIBSSL stored_certificate_ = certificate_; certificate_ = 0; socket_->bypass_certificate (true); #endif hide(); gtk_main_quit(); } void Certificate::on_cancel (GtkWidget *widget) { #ifdef HAVE_LIBSSL stored_certificate_ = 0; certificate_ = 0; socket_->bypass_certificate (false); #endif hide(); gtk_main_quit(); } gboolean Certificate::on_destroy (GtkWidget *widget, GdkEvent *event) { #ifdef HAVE_LIBSSL stored_certificate_ = 0; certificate_ = 0; socket_->bypass_certificate (false); #endif hide(); gtk_main_quit(); return TRUE; } gboolean Certificate::on_delete (GtkWidget *widget, GdkEvent *event) { #ifdef HAVE_LIBSSL stored_certificate_ = 0; certificate_ = 0; socket_->bypass_certificate (false); #endif hide(); gtk_main_quit(); return TRUE; } gnubiff-2.2.16/src/ui-authentication.cc0000644000175000017500000000646712474422122014710 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-authentication.cc,v $ // Revision : $Revision: 1.4.2.3 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include "ui-authentication.h" #include "mailbox.h" Authentication::Authentication (void) : GUI (GNUBIFF_DATADIR"/authentication.ui") { mailbox_ = 0; access_mutex_ = g_mutex_new (); } Authentication::~Authentication (void) { GtkWidget *widget = get("dialog"); if (GTK_IS_WIDGET (widget)) { hide (); gtk_widget_destroy (widget); } if (gtkbuilder_) g_object_unref (G_OBJECT(gtkbuilder_)); gtkbuilder_ = NULL; } void Authentication::select (Mailbox *mailbox) { if (mailbox) { g_mutex_lock (access_mutex_); mailbox_ = mailbox; show (); } } void Authentication::show (std::string name) { if (!gtkbuilder_) create(this); // Try to identify mailbox by: // 1. using name std::string id = mailbox_->name(); // 2. using hostname if (id.empty()) id = mailbox_->address(); // 3. using mailbox uin if (id.empty()) { std::stringstream s; s << mailbox_->uin(); id = s.str(); } gchar *text = g_strdup_printf (_("Please enter your username and password for mailbox '%s'"), id.c_str()); gtk_label_set_text (GTK_LABEL(get("label")), text); g_free (text); gtk_entry_set_text (GTK_ENTRY (get("username_entry")), mailbox_->username().c_str()); gtk_entry_set_text (GTK_ENTRY (get("password_entry")), mailbox_->password().c_str()); gtk_widget_show_all (get("dialog")); gtk_main (); } void Authentication::on_ok (GtkWidget *widget) { mailbox_->username (gtk_entry_get_text (GTK_ENTRY (get("username_entry")))); mailbox_->password (gtk_entry_get_text (GTK_ENTRY (get("password_entry")))); hide(); g_mutex_unlock (access_mutex_); gtk_main_quit (); } void Authentication::on_cancel (GtkWidget *widget) { hide(); g_mutex_unlock (access_mutex_); gtk_main_quit (); } gboolean Authentication::on_destroy (GtkWidget *widget, GdkEvent *event) { hide(); g_mutex_unlock (access_mutex_); gtk_main_quit (); return TRUE; } gboolean Authentication::on_delete (GtkWidget *widget, GdkEvent *event) { hide(); g_mutex_unlock (access_mutex_); gtk_main_quit (); return TRUE; } gnubiff-2.2.16/src/socket.cc0000644000175000017500000002614512474422122012541 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: socket.cc,v $ // Revision : $Revision: 1.32.2.4 $ // Revision date : $Date: 2012/02/26 09:21:47 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include #include #include #include #include #include #include #include "ui-certificate.h" #include "mailbox.h" #include "socket.h" #include "nls.h" #include "support.h" // ======================================================================== // Static features // ======================================================================== #ifdef HAVE_LIBSSL Certificate *Socket::ui_cert_ = 0; GStaticMutex Socket::ui_cert_mutex_ = G_STATIC_MUTEX_INIT; #endif // ======================================================================== // base // ======================================================================== Socket::Socket (Mailbox *mailbox) { mailbox_ = mailbox; if (mailbox_) uin_ = mailbox->uin(); else uin_ = 0; hostname_ = ""; port_ = 0; use_ssl_ = false; certificate_ = ""; sd_ = SD_CLOSE; status_ = SOCKET_STATUS_ERROR; #ifdef HAVE_LIBSSL ssl_ = 0; SSL_library_init (); SSL_load_error_strings(); context_ = SSL_CTX_new (SSLv23_client_method()); bypass_certificate_ = false; g_static_mutex_lock (&ui_cert_mutex_); if (ui_cert_ == 0) ui_cert_ = new Certificate (); g_static_mutex_unlock (&ui_cert_mutex_); #endif } Socket::~Socket (void) { if (sd_ != SD_CLOSE) close(); } /** * Determine the IP addresses of the given host and port and establish * a connection to one of them. * * @param timeout timeout * @result boolean indicating success */ gboolean Socket::connect (guint timeout) { struct addrinfo hints, *result, *rptr; int i; std::stringstream service; // Get address info service << port_; memset (&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = 0; hints.ai_protocol = 0; i = getaddrinfo (hostname_.c_str(), service.str().c_str(), &hints, &result); if (i != 0) { g_warning (_("[%d] Unable to connect to %s on port %d"), uin_, hostname_.c_str(), port_); #ifdef debug g_message ("[%d] Call to getaddrinfo fails: %s", uin_, gai_strerror(i)); #endif sd_ = SD_CLOSE; return false; } // Try all returned addresses for (rptr = result; rptr != NULL; rptr = rptr->ai_next) { // Try to create socket sd_ = socket (rptr->ai_family, rptr->ai_socktype, rptr->ai_protocol); if (sd_ == SD_CLOSE) continue; // Set non-blocking socket if a timeout is required if (timeout > 0) { int arg = fcntl (sd_, F_GETFL, NULL); arg |= O_NONBLOCK; fcntl (sd_, F_SETFL, arg); } // Try to connect i = ::connect (sd_, rptr->ai_addr, rptr->ai_addrlen); if (i != -1) break; // Connect failed but this may be because of non-blocking socket if (timeout > 0 && errno == EINPROGRESS) { int valopt; struct timeval tv; tv.tv_sec = timeout; tv.tv_usec = 0; fd_set myset; FD_ZERO (&myset); FD_SET (sd_, &myset); if (select (sd_ + 1, NULL, &myset, NULL, &tv) > 0) { socklen_t lon = sizeof (int); getsockopt (sd_, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon); if (!valopt) { // Set to blocking mode again... int arg = fcntl (sd_, F_GETFL, NULL); arg &= (~O_NONBLOCK); fcntl (sd_, F_SETFL, arg); break; } } } // Cannot connect, so close socket ::close (sd_); } // Free temporary allocated memory freeaddrinfo (result); // No success with any address? if (!rptr) { g_warning (_("[%d] Unable to connect to %s on port %d"), uin_, hostname_.c_str(), port_); #ifdef debug g_message ("[%d] Cannot connect to any address", uin_); #endif sd_ = SD_CLOSE; return false; } return true; } gint Socket::open (std::string hostname, gushort port, guint authentication, std::string certificate, guint timeout) { hostname_ = hostname; port_ = port; if ((authentication == AUTH_SSL) || (authentication == AUTH_CERTIFICATE)) use_ssl_ = true; certificate_ = certificate; // Get options' values to avoid periodic lookups prevdos_line_length_=mailbox_->biff()->value_uint ("prevdos_line_length"); // Default status before trying to connect status_ = SOCKET_STATUS_ERROR; // Connect to host on given port #ifdef DEBUG g_message ("[%d] OPEN %s:%d", uin_, hostname_.c_str(), port_); #endif if (!connect (timeout)) return 0; #ifdef HAVE_LIBSSL if (use_ssl_) { if (certificate_.size() > 0) { const gchar *capath = mailbox_->biff()->value_gchar ("dir_certificates"); if (*capath == '\0') capath = NULL; if (!SSL_CTX_load_verify_locations (context_, certificate_.c_str(), capath)) { g_warning(_("[%d] Failed to load certificate (%s) for %s"), uin_, certificate_.c_str(), hostname_.c_str()); ::close (sd_); sd_ = SD_CLOSE; return 0; } SSL_CTX_set_verify (context_, SSL_VERIFY_PEER, NULL); } else SSL_CTX_set_verify (context_, SSL_VERIFY_NONE, NULL); ssl_ = SSL_new (context_); if ((!ssl_) || (SSL_set_fd (ssl_, sd_) == 0)) { ::close (sd_); sd_ = SD_CLOSE; g_warning (_("[%d] Unable to connect to %s on port %d"), uin_, hostname_.c_str(), port_); return 0; } if (SSL_connect (ssl_) != 1) { SSL_free (ssl_); ssl_ = NULL; ::close (sd_); sd_ = SD_CLOSE; g_warning (_("[%d] Unable to connect to %s on port %d"), uin_, hostname_.c_str(), port_); return 0; } if ((certificate_.size() > 0) && (SSL_get_verify_result(ssl_) != X509_V_OK)) { g_static_mutex_lock (&ui_cert_mutex_); ui_cert_->select (this); g_static_mutex_unlock (&ui_cert_mutex_); if (!bypass_certificate_) { SSL_free (ssl_); ssl_ = NULL; ::close (sd_); sd_ = SD_CLOSE; g_warning (_("[%d] Cannot identify remote host (%s on port %d)"), uin_, hostname_.c_str(), port_); } } } #endif status_ = SOCKET_STATUS_OK; return 1; } /** * Close the socket. */ void Socket::close (void) { // Is socket already closed? if (sd_ == SD_CLOSE) { #ifdef HAVE_LIBSSL if (ssl_) { SSL_free (ssl_); ssl_ = NULL; } #endif return; } #ifdef DEBUG g_message ("[%d] CLOSE %s:%d", uin_, hostname_.c_str(), port_); #endif // Read lines that are not yet read std::string line; fcntl (sd_, F_SETFL, O_NONBLOCK); guint cnt = 1 + mailbox_->biff()->value_uint ("prevdos_close_socket"); do { read (line, false, false); } while ((!line.empty()) && (cnt--)); #ifdef HAVE_LIBSSL if (ssl_) { SSL_shutdown (ssl_); SSL_free (ssl_); ssl_ = NULL; } #endif ::close (sd_); sd_ = SD_CLOSE; } gint Socket::write (std::string line, gboolean print) { // Do not allow writing to a closed, or invalid socket. This causes // SEGV in SSL. if (sd_ == SD_CLOSE) return SOCKET_STATUS_ERROR; status_ = -1; // TEMP_FAILURE_RETRY will re-call the method if the write primitive // is interrupted by a signal. #ifdef HAVE_LIBSSL if (use_ssl_) { if (TEMP_FAILURE_RETRY(SSL_write (ssl_, line.c_str(), line.size())) <= 0) status_ = SOCKET_STATUS_ERROR; else status_ = SOCKET_STATUS_OK; } #endif if (status_ == -1) { if (TEMP_FAILURE_RETRY(::write (sd_, line.c_str(), line.size())) <= 0) status_ = SOCKET_STATUS_ERROR; else status_ = SOCKET_STATUS_OK; } #ifdef DEBUG if (print) g_message ("[%d] SEND(%s:%d): %s", uin_, hostname_.c_str(), port_, line.substr(0, line.size()-2).c_str()); #endif if ((print) && (status_ != SOCKET_STATUS_OK)) { g_warning (_("[%d] Unable to write to %s on port %d"), uin_, hostname_.c_str(), port_); close(); } return status_; } gint Socket::read (std::string &line, gboolean print, gboolean check) { // Do not allow writing to a closed, or invalid socket. This causes // SEGV in SSL. if (sd_ == SD_CLOSE) return SOCKET_STATUS_ERROR; char buffer; int status = 0; line = ""; status_ = -1; gint cnt = 1 + prevdos_line_length_; // TEMP_FAILURE_RETRY will re-call the method if the read primitive // is interrupted by a signal. errno = 0; #ifdef HAVE_LIBSSL if (use_ssl_) { while ((00) && (buffer != '\n')) line += buffer; } else #endif { while ((0 0) && (buffer != '\n')) line += buffer; } if (errno == EAGAIN) status_ = SOCKET_TIMEOUT; else if ((status > 0) && (cnt>=0)) status_ = SOCKET_STATUS_OK; else status_ = SOCKET_STATUS_ERROR; if (!check) return status_; #ifdef DEBUG if (print) { switch (status_) { case SOCKET_TIMEOUT: g_message ("[%d] RECV TIMEOUT(%s:%d)", uin_, hostname_.c_str(), port_); break; case SOCKET_STATUS_OK: g_message ("[%d] RECV(%s:%d): %s", uin_, hostname_.c_str(), port_, line.c_str()); break; default: if (cnt <= 0) g_message ("[%d] RECV ERROR(%s:%d): line too long, " "security/prevdos_line_length should be increased", uin_, hostname_.c_str(), port_); else g_message ("[%d] RECV ERROR(%s:%d): %s", uin_, hostname_.c_str(), port_, strerror(status)); break; } } #endif if (status_ == SOCKET_STATUS_ERROR) { if (cnt <= 0) g_warning (_("[%d] line too long, security/prevdos_line_length " "should be increased"), uin_); else g_warning (_("[%d] Unable to read from %s on port %d"), uin_, hostname_.c_str(), port_); close(); } return status_; } /** * Specify a timeout value for read operations on this socket. Read * operations will block until the given time has expired. If the * {\em gint Socket::read (std::string, gboolean, gboolean)} method * returns because of the timeout it will return with {\em SOCKET_TIMEOUT}. * * @param timeout Time in seconds for timeout duration. */ void Socket::set_read_timeout(gint timeout) { struct timeval tv; tv.tv_sec = timeout; tv.tv_usec = 0; if (setsockopt(sd_, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) == -1) g_warning (_("Could not set read timeout on socket: %s"), strerror(errno)); } gnubiff-2.2.16/src/ui-applet-gnome.cc0000644000175000017500000002353012474422122014247 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-gnome.cc,v $ // Revision : $Revision: 1.26.2.4 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include "ui-applet-gnome.h" #include "ui-popup.h" #include "mailbox.h" #include "gtk_image_animation.h" /** * "C" binding **/ extern "C" { void APPLET_GNOME_on_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer data) { if (data) (static_cast(data))->tooltip_update (); else unknown_internal_error (); } void APPLET_GNOME_on_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data) { if (!data) unknown_internal_error (); else if (!(static_cast(data))->calculate_size (allocation)) (static_cast(data))->update (); } // void APPLET_GNOME_on_change_background (GtkWidget *widget, // PanelAppletBackgroundType type, // GdkColor *color, // GdkPixmap *pixmap, // gpointer data) // { // if (data) // (static_cast(data))->update (); // else // unknown_internal_error (); // } gboolean APPLET_GNOME_on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (data) return (static_cast(data))->on_button_press (event); else unknown_internal_error (); return false; } static void APPLET_GNOME_on_menu_properties (GtkAction *action, AppletGnome *data) { if (data) data->show_dialog_preferences (); else unknown_internal_error (); } void APPLET_GNOME_on_menu_command (GtkAction *action, AppletGnome *data) { if (data) data->execute_command ("double_command", "use_double_command"); else unknown_internal_error (); } void APPLET_GNOME_on_menu_mail_read (GtkAction *action, AppletGnome *data) { if (data) data->mark_messages_as_read (); else unknown_internal_error (); } void APPLET_GNOME_on_menu_info (GtkAction *action, AppletGnome *data) { if (data) data->show_dialog_about (); else unknown_internal_error (); } // gboolean APPLET_GNOME_reconnect (gpointer data) // { // if (data) { // g_signal_connect (G_OBJECT ((static_cast(data))->panelapplet()), // "change_background", // GTK_SIGNAL_FUNC (APPLET_GNOME_on_change_background), // data); // } // else // unknown_internal_error (); // return false; // } } // ======================================================================== // base // ======================================================================== AppletGnome::AppletGnome (Biff *biff) : AppletGUI (biff, GNUBIFF_DATADIR"/applet-gtk.ui", this) { } AppletGnome::~AppletGnome (void) { } /** * Set properties of the gnubiff gnome panel applet. * * @param applet Gnome Panel widget of gnubiff. */ void AppletGnome::dock (GtkWidget *applet) { // Create the applet's menu static const GtkActionEntry gnubiff_menu_actions [] = { { "Props", GTK_STOCK_PROPERTIES, N_("_Preferences..."), NULL, NULL, G_CALLBACK (APPLET_GNOME_on_menu_properties) }, { "MailApp", GTK_STOCK_PROPERTIES, N_("_Run command"), NULL, NULL, G_CALLBACK (APPLET_GNOME_on_menu_command) }, { "MailRead", GTK_STOCK_PROPERTIES, N_("_Mark mailboxes read"), NULL, NULL, G_CALLBACK (APPLET_GNOME_on_menu_mail_read) }, { "Info", GTK_STOCK_ABOUT, N_("_Info"), NULL, NULL, G_CALLBACK (APPLET_GNOME_on_menu_info) } }; GtkActionGroup * action_group = gtk_action_group_new ("ShowDesktop Applet Actions"); gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions (action_group, gnubiff_menu_actions, G_N_ELEMENTS (gnubiff_menu_actions), this); gchar *ui_path = g_build_filename (GNUBIFF_UIDIR, "GNOME_gnubiffApplet.xml", NULL); panel_applet_setup_menu_from_file (PANEL_APPLET (applet), ui_path, action_group); g_free (ui_path); g_object_unref (action_group); // We need the PANEL_APPLET_EXPAND_MINOR for getting the correct size of // the gnome panel via the "size_allocate" signal panel_applet_set_flags (PANEL_APPLET (applet), PANEL_APPLET_EXPAND_MINOR); // Put gnubiff's widgets inside the panel's applet gtk_widget_reparent (get ("fixed"), applet); gtk_container_set_border_width (GTK_CONTAINER (applet), 0); // Tooltips gtk_widget_set_tooltip_text (applet, ""); // Connect callback functions to the applet's signals g_signal_connect (G_OBJECT (applet), "enter_notify_event", G_CALLBACK (APPLET_GNOME_on_enter), this); g_signal_connect (G_OBJECT (applet), "size_allocate", G_CALLBACK (APPLET_GNOME_on_size_allocate), this); // g_signal_connect (G_OBJECT (applet), "change_background", // G_CALLBACK (APPLET_GNOME_on_change_background), this); g_signal_connect (G_OBJECT (applet), "button_press_event", G_CALLBACK (APPLET_GNOME_on_button_press), this); applet_ = applet; } gboolean AppletGnome::update (gboolean init) { // Is there another update going on? if (!g_mutex_trylock (update_mutex_)) return false; // Update applet (depending on the orientation of the panel) gboolean newmail = AppletGUI::update (init, "image", "unread", "fixed"); // Background // PanelAppletBackgroundType type; // GdkColor color; // GdkPixmap *pixmap = NULL; // type = panel_applet_get_background (PANEL_APPLET (applet_), &color, // &pixmap); // if (pixmap && G_IS_OBJECT(pixmap)) { // GtkStyle* style = gtk_style_copy (gtk_widget_get_style (applet_)); // style->bg_pixmap[0] = pixmap; // gtk_widget_set_style (applet_, style); // gtk_widget_set_style (get("fixed"), style); // g_object_unref (style); // } // else { // if (type == PANEL_NO_BACKGROUND) { // GtkRcStyle *rc_style = gtk_rc_style_new (); // gtk_widget_modify_style (applet_, rc_style); // gtk_rc_style_unref (rc_style); // } // else // gtk_widget_modify_bg (get("applet_"), GTK_STATE_NORMAL, &color); // } g_mutex_unlock (update_mutex_); return newmail; } void AppletGnome::show (std::string name) { gtk_widget_show (applet_); } void AppletGnome::hide (std::string name) { gtk_widget_hide (applet_); } /** * Calculate the applet's size. This function should be called when a * "size_allocate" signal is caught. * * @param allocation Parameter passed to the "size_allocate" callback. * @return True, if there is no change in the applet's size, * false otherwise. */ gboolean AppletGnome::calculate_size (GtkAllocation *allocation) { guint widget_max_height_old = widget_max_height_; guint widget_max_width_old = widget_max_width_; // Check parameters if (!allocation) return true; // Get the orientation of the panel PanelAppletOrient orient = panel_applet_get_orient (PANEL_APPLET(applet_)); // Determine the new maximum size of the applet (depending on the // orientation) widget_max_height_ = G_MAXUINT; widget_max_width_ = G_MAXUINT; switch (orient) { case PANEL_APPLET_ORIENT_DOWN: case PANEL_APPLET_ORIENT_UP: widget_max_height_ = allocation->height; break; case PANEL_APPLET_ORIENT_LEFT: case PANEL_APPLET_ORIENT_RIGHT: widget_max_width_ = allocation->width; break; default: // Should never happen break; } return ((widget_max_height_old == widget_max_height_) && (widget_max_width_old == widget_max_width_));; } // ============================================================================ // callbacks // ============================================================================ gboolean AppletGnome::on_button_press (GdkEventButton *event) { // Double left click: start mail app if ((event->type == GDK_2BUTTON_PRESS) && (event->button == 1)) execute_command ("double_command", "use_double_command"); // Single left click: popup menu else if (event->button == 1) { force_popup_ = true; update (); } // Single middle click: mark messages as read else if (event->button == 2) mark_messages_as_read (); return false; } /** * This callback is called when gnome panel applet has been created. * * @param applet Pointer to the panel applet. * @param iid FIXME * @param data This is currently always the NULL pointer. * @return Always true. */ gboolean AppletGnome::gnubiff_applet_factory (PanelApplet *applet, const gchar *iid, gpointer data) { if (strcmp (iid, "GnubiffApplet")) return true; Biff *biff = new Biff (MODE_GNOME); AppletGnome *biffapplet = static_cast( biff->applet() ); biffapplet->dock ((GtkWidget *) applet); biffapplet->start (false); return true; } gnubiff-2.2.16/src/mailbox.cc0000644000175000017500000010775512474422122012713 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mailbox.cc,v $ // Revision : $Revision: 1.92.2.6 $ // Revision date : $Date: 2010/02/04 22:42:08 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include "support.h" #include "mailbox.h" #include "file.h" #include "maildir.h" #include "mh.h" #include "mh_sylpheed.h" #include "imap4.h" #include "pop3.h" #include "apop.h" #include "biff.h" #include "socket.h" #include "nls.h" // ======================================================================== // Static features // ======================================================================== guint Mailbox::uin_count_ = 1; // ======================================================================== // base // ======================================================================== Mailbox::Mailbox (Biff *biff) { biff_ = biff; listed_ = false; stopped_ = false; timetag_ = 0; // Create mutexes mutex_ = g_mutex_new (); monitor_mutex_ = g_mutex_new (); // Add options add_options (OPTGRP_MAILBOX, !biff_->value_bool ("config_file_loaded")); // Set session specific options value ("uin", uin_count_++); // Setup regular expressions for filtering messages filter_create (); } Mailbox::Mailbox (const Mailbox &other) { biff_ = other.biff_; add_option ((Mailbox &)other); status (MAILBOX_UNKNOWN); timetag_ = 0; mutex_ = g_mutex_new (); monitor_mutex_ = g_mutex_new (); } Mailbox & Mailbox::operator= (const Mailbox &other) { if (this == &other) return *this; biff_ = other.biff_; guint saved_uin = value_uint ("uin"); add_option ((Mailbox &)other); value ("uin", saved_uin); return *this; } Mailbox::~Mailbox (void) { // Free compiled regular expressions g_mutex_lock (mutex_); filter_free (); g_mutex_unlock (mutex_); // Free all mutexes g_mutex_unlock (mutex_); g_mutex_lock (monitor_mutex_); g_mutex_unlock (monitor_mutex_); g_mutex_free (monitor_mutex_); } // ======================================================================== // main // ======================================================================== void Mailbox::threaded_start (guint delay) { stopped_ = false; // Is there already a timeout? if ((delay) && (timetag_)) return; // Do we want to start now? if (delay) timetag_ = g_timeout_add (delay*1000, start_delayed_entry_point, this); // or later (delay is given in seconds)? else start_delayed_entry_point (this); #if DEBUG g_message ("[%d] Start fetch in %d second(s)", uin(), delay); #endif } gboolean Mailbox::start_delayed_entry_point (gpointer data) { GError *err = NULL; static_cast(data)->timetag (0); g_thread_create ((GThreadFunc) start_entry_point, data, false, &err); if (err != NULL) { g_warning (_("[%d] Unable to create thread: %s"), static_cast(data)->uin(), err->message); g_error_free (err); } return false; } void Mailbox::start_entry_point (gpointer data) { static_cast(data)->start(); } void Mailbox::start (void) { // Since class "Mailbox" is virtual, any monitoring requires first // to autodetect mailbox type. Once it's done, "this" mailbox is // destroyed so we cannot go any further past this point. lookup(); } void Mailbox::stop (void) { stopped_ = true; if (timetag_) { g_source_remove (timetag_); timetag_ = 0; } } void Mailbox::fetch (void) { // nothing to do, this mailbox is virtual } /** * Mark all collected messages in this mailbox as read. The status of * uncollected messages isn't changed. */ void Mailbox::mark_messages_as_read (void) { if (!g_mutex_trylock (mutex_)) return; // All seen messages should be hidden; no unread messages hidden_.clear(); hidden_ = seen_; unread_.clear(); // FIXME: If there might be unread messages that haven't been fetched yet, // they should be read now. Bug reported by Maik Wachsmuth g_mutex_unlock (mutex_); } /** * Return the standard port of the given mail protocol {\em protocol}. If * an invalid protocol is given zero is returned. This is also the case if * autodetection (for protocol or authentication is given). * * @param protocol Protocol identifier * @param auth Method of authentication * @param strict If false the following combinations are also allowed: * POP3 and APOP authentication. This is needed for * displaying the correct port in the preferences dialog * before all the values are correctly set. The default * value is true. * @return Standard port for the given combination of {\em protocol} * and {\em use_ssl} or zero */ guint Mailbox::standard_port (guint protocol, guint auth, gboolean strict) { if (!strict && (protocol == PROTOCOL_POP3) && (auth == AUTH_APOP)) protocol = PROTOCOL_APOP; switch (auth) { case AUTH_AUTODETECT: case AUTH_NONE: return 0; case AUTH_APOP: return ((protocol == PROTOCOL_APOP) ? 110 : 0); case AUTH_CERTIFICATE: case AUTH_SSL: if (protocol == PROTOCOL_IMAP4) return 993; return ((protocol == PROTOCOL_POP3) ? 995 : 0); case AUTH_USER_PASS: if (protocol == PROTOCOL_IMAP4) return 143; return ((protocol == PROTOCOL_POP3) ? 110 : 0); } return 0; } /** * This function is called when an option is changed that has the * OPTFLG_CHANGE flag set. * * @param option Pointer to the option that is changed. */ void Mailbox::option_changed (Option *option) { if (!option) return; // DELAY if (option->name() == "delay") { value ("delay_minutes", (static_cast(option))->value()/60, false); value ("delay_seconds", (static_cast(option))->value()%60, false); return; } // DELAY_MINUTES, DELAY_SECONDS if ((option->name() == "delay_minutes") || (option->name() == "delay_seconds")) { guint dly = value_uint("delay_minutes")*60+value_uint("delay_seconds"); value ("delay", dly, false); return; } // OTHER_FOLDER, USE_OTHER_FOLDER if ((option->name() == "other_folder") || (option->name() == "use_other_folder")) { if ((!value_bool ("use_other_folder")) || (value_string("other_folder").size() == 0)) value ("folder", "INBOX"); else value ("folder", value_string ("other_folder")); return; } // OTHER_PORT, USE_OTHER_PORT, PROTOCOL, AUTHENTICATION if ((option->name() == "other_port") || (option->name() == "protocol") || (option->name() == "use_other_port") || (option->name() == "authentication")) { guint newport = 0; // Standard port or user given port? if (!value_bool ("use_other_port")) newport = standard_port (protocol(), authentication()); else newport = value_uint ("other_port") % 65536; // Set port value ("port", newport); return; } #ifdef USE_PASSWORD // PASSWORD_AES if (option->name() == "password_aes") { std::string decpass = decrypt_aes (biff_->value_string ("passphrase"), (static_cast(option))->value()); value ("password", decpass); return; } #endif // SEEN if (option->name() == "seen") { get_values ("seen", hidden_, true, false); return; } // UIN if (option->name() == "uin") { if (value_string("name").size() == 0) { gchar *text = g_strdup_printf (_("mailbox %d"), (static_cast(option))->value()); value ("name", text); g_free (text); } return; } // FILTER_LOCAL if (option->name() == "filter_local") { filter_create (); return; } } /** * This function is called when an option is to be read that needs updating * before. These options have to be marked by the OPTFLG_UPDATE flag. * * @param option Pointer to the option that is to be updated. */ void Mailbox::option_update (Option *option) { if (!option) return; #ifdef USE_PASSWORD // PASSWORD_AES if (option->name() == "password_aes") { std::string enc_aes = encrypt_aes (biff_->value_string ("passphrase"), value_string ("password")); (static_cast(option))->value (enc_aes); return; } #endif // SEEN if (option->name() == "seen") { set_values ("seen", hidden_, true, false); return; } } // ================================================================================ // lookup function to try to guess mailbox status // -------------------------------------------------------------------------------- // There are several hints that help us detect a mailbox format: // // 1. Does address begins with a '/' ? (File, Mh or Maildir) // // 1.1 Is the address a directory ? (Mh or Maildir) // 1.2.1 If there is a 'new' file within then Maildir // else Mh // 1.2 Is the address a file ? (File or Mh) // 1.2.1 If last address component is '.mh_sequences' then Mh // else File // // 1.3 Is the address not a file, not a directory then Unknown // // // 2. Else (Pop3, Apop or Imap4) // // 2.1 Does server answer '+OK' (Pop3 or Apop) // 2.1.1 If there is angle bracket in server greetings then Apop // else Pop3 // 2.2 If there is an 'Imap4' in server greetings then Imap4 // else Unknown // // ================================================================================ // // FIXME: stop lookup when displaying preferences // -> need to interrupt the for loop one way or the other void Mailbox::lookup (void) { if (!g_mutex_trylock (monitor_mutex_)) return; #ifdef DEBUG g_message ("[%d] Mailbox \"%s\" type is unknown, looking up...", uin(), name().c_str()); #endif Mailbox *mailbox = 0; // Local mailbox if (g_path_is_absolute (address().c_str())) mailbox=lookup_local(*this); // Distant mailbox else { std::string line; Socket s(this); // Ok, at this stage, either the port is given or we have to try // 4 standard ports (pop3:110, imap4:143, spop3:995, simap4:993) // Also, if auth is autodetect we have to try with or without ssl. // So, port is organized as follows: // 0: given port, ssl // 1: given port, no ssl // 2: 995, ssl // 3: 993, ssl // 4: 110, no ssl // 5: 143, no ssl // Any null port means do not try // 0 1 2 3 4 5 guint prt [6] = {port(), port(), 995, 993, 110, 143}; gboolean ssl [6] = {true , false, true, true, false, false}; // Port is given and authentication uses ssl so we do not try other methods if ((use_other_port()) && ((authentication() == AUTH_SSL) || (authentication() == AUTH_CERTIFICATE))) for (guint i=1; i<6; i++) prt[i] = 0; // Port is given but authentication method is unknown, we only try given port with and without ssl else if ((use_other_port()) && ((authentication() != AUTH_AUTODETECT))) for (guint i=2; i<6; i++) prt[i] = 0; // Standard port is required, we do not use port() else if (!use_other_port()) { prt[0] = 0; prt[1] = 0; // SSL is required, we do not try port 110 & 143 if ((authentication() == AUTH_SSL) || (authentication() == AUTH_CERTIFICATE)) { prt[4] = 0; prt[5] = 0; } // SSL is forbidden, we do not try port 995 & 993 else if ((authentication() == AUTH_USER_PASS) || (authentication() == AUTH_APOP)) { prt[2] = 0; prt[3] = 0; } } guint i; for (i=0; i<6; i++) { if (stopped_) { g_mutex_unlock (monitor_mutex_); return; } if (prt[i] && s.open (address(), prt[i], (ssl[i]==true)?AUTH_SSL:AUTH_USER_PASS, "", 5)) { #ifdef DEBUG g_message ("[%d] Mailbox \"%s\", port %d opened", uin(), name().c_str(), prt[i]); #endif // Get server greetings s.read (line, true); if (line.find("+OK") == 0) { s.write ("QUIT\r\n"); s.close(); #ifdef HAVE_CRYPTO if (line.find ("<") != std::string::npos) { mailbox = new Apop (*this); mailbox->port (prt[i]); mailbox->authentication ((ssl[i]==true)?AUTH_SSL:AUTH_USER_PASS); if ((authentication() == AUTH_AUTODETECT) && !ssl[i]) authentication (AUTH_APOP); break; } else #endif { mailbox = new Pop3 (*this); mailbox->port (prt[i]); mailbox->authentication ((ssl[i]==true)?AUTH_SSL:AUTH_USER_PASS); break; } } else if ((line.find("* OK") == 0) || (line.find("* PREAUTH")== 0)) { s.write ("A001 LOGOUT\r\n"); s.close (); mailbox = new Imap4 (*this); mailbox->port (prt[i]); mailbox->authentication ((ssl[i]==true)?AUTH_SSL:AUTH_USER_PASS); break; } } } port (prt[i]); if (authentication() == AUTH_AUTODETECT) { if (ssl[i]) authentication (AUTH_SSL); else authentication (AUTH_USER_PASS); } } #ifdef DEBUG if (mailbox) { std::string type = value_to_string ("protocol", mailbox->protocol()); g_message ("[%d] Ok, mailbox \"%s\" type is %s, monitoring starting " "in 3 seconds", uin(), name().c_str(), type.c_str()); } #endif // After replace, "this" is destroyed so we must return immediately if (mailbox) { g_mutex_unlock (monitor_mutex_); biff_->replace_mailbox (this, mailbox); return; } g_mutex_unlock (monitor_mutex_); #ifdef DEBUG g_message ("[%d] mailbox \"%s\" type is still unknown, retrying in 3 " "seconds", uin(), name().c_str()); #endif threaded_start (3); } /** * Identification of the type of a local mailbox. * The type of the mailbox that belongs to the (local) address of the given * mailbox {\em oldmailbox} is determined. If this cannot be done, NULL will * be returned. Otherwise a new mailbox of this type is created, the * attributes of {\em oldmailbox} are copied to this mailbox. The return value * is a pointer to this mailbox. * * Note: This is a static function. * * @param oldmailbox Mailbox from which the address is taken. * @return New mailbox of the correct type, or NULL if type cannot * be determined. */ Mailbox * Mailbox::lookup_local (Mailbox &oldmailbox) { Mailbox *mailbox = NULL; std::string addr = oldmailbox.address (); std::string base = path_get_basename (addr); // Is it a directory? if (g_file_test (addr.c_str(), G_FILE_TEST_IS_DIR)) { std::string file_new = add_file_to_path (addr, "new"); std::string file_seq = add_file_to_path (addr, ".mh_sequences"); std::string file_syl = add_file_to_path (addr,".sylpheed_mark"); if (g_file_test (file_seq.c_str(), G_FILE_TEST_IS_REGULAR)) mailbox = new Mh (oldmailbox); if (g_file_test (file_syl.c_str(), G_FILE_TEST_IS_REGULAR)) mailbox = new Mh_Sylpheed (oldmailbox); else if (base == "new") mailbox = new Maildir (oldmailbox); else if (g_file_test (file_new.c_str(), G_FILE_TEST_IS_DIR)) { mailbox = new Maildir (oldmailbox); mailbox->address (file_new); } } // Is it a file? else if (g_file_test (addr.c_str(), G_FILE_TEST_EXISTS)) { if (base == ".mh_sequences") { mailbox = new Mh (oldmailbox); mailbox->address (path_get_dirname (addr)); } else if (base == ".sylpheed_mark") { mailbox = new Mh_Sylpheed (oldmailbox); mailbox->address (path_get_dirname (addr)); } else mailbox = new File (oldmailbox); } return mailbox; } /** * Parse a mail string array. This function parses a message that is given * line by line in the vector {\em mail}. Information like sender, date, * subject is extracted and decoded from the header. Messages that have not * be seen before and that are not marked as being spam are stored in the * vector for unread messages. If some information has been obtained before * it can be given to this functions via the optional parameters {\em pi} and * {\em hh}. * * @param mail Message line by line in a vector of strings * @param uid Unique identifier of the mail (if known), the default is an * empty string. * @param pi PartInfo structure with information about the first part of * the mail (if known), the default is NULL. * @param hh Header with retrieved information about the message (if * known), the default is NULL. * @param pos Number of the first line in the array to be parsed. This is * needed to easily parse multipart messages recusively. The * default is 0. * @param status Default status of the message. If this is set to false the * message will not be stored. This option is needed for * multipart messages that are parsed recursivly (The default is * true). */ void Mailbox::parse (std::vector &mail, std::string uid, PartInfo *pi, Header *hh, guint pos, gboolean status) { Header h; gboolean getstatus = true; guint len = mail.size (); PartInfo partinfo; // If we have an uid and this uid is known we do not need to parse the mail if ((uid.size() > 0) && (hidden_.find (uid) != hidden_.end ())) { new_seen_.insert (uid); #ifdef DEBUG g_message ("[%d] Ignored mail with id \"%s\"", uin (), uid.c_str ()); #endif return; } // Information about the mail obtained before? if (pi != NULL) partinfo = *pi; if (hh != NULL) h = *hh; else { // Insert default values h.date (_("")); h.sender (_("")); h.subject (_("")); } if ((partinfo.error_.size() > 0) && (h.error().size() == 0)) h.error (partinfo.error_); // Parse header for (; (pos < len) && status; pos++) { // Beginning of body? (header and body are separated by an empty line) if (mail[pos].empty()) break; // Only header lines are handled now // Remove folding in header (see RFC 2822 2.2.2 & 2.2.3.) std::string line = mail[pos]; if (mail[pos].empty() == false) while ((pos+1 < len) && (mail[pos+1].size() > 0) && ((mail[pos+1].at(0) == ' ') || (mail[pos+1].at(0) == '\t'))) line += mail[++pos]; // Filter header line using stored regular expression if (getstatus) getstatus = !filter_match_line (line, status); // Sender, Subject, Date: // There should be a whitespace (space or tab) after "From:", // "Subject:" or "Date:" // Message header fieldnames should be parsed case insensitive // (see RFC 2822 1.2.2 and RFC 5234 2.3) // Sender if ((g_ascii_strncasecmp (line.c_str(), "From:", 5) == 0) && (line.size() > 5)) { h.sender (decode_headerline (line.substr (5))); continue; } // Subject if ((g_ascii_strncasecmp (line.c_str(), "Subject:", 8) == 0) && (line.size() > 8)) { h.subject (decode_headerline (line.substr (8))); continue; } // Date if ((g_ascii_strncasecmp (line.c_str(), "Date:", 5) == 0) && (line.size() > 5)) { h.date (decode_headerline (line.substr (5))); continue; } // Content Type if (g_ascii_strncasecmp(line.c_str(), "Content-Type:", 13) == 0) { if (!parse_contenttype (line, partinfo)) { h.error (_("[Cannot parse content type header line]")); #ifdef DEBUG g_message ("[%d] Cannot parse content type header line: %s", uin(), line.c_str()); #endif } continue; } // Content Transfer Encoding (see RFC 2045 6.) if (g_ascii_strncasecmp(line.c_str(), "Content-Transfer-Encoding:", 26) == 0) { // size of "Content-Transfer-Encoding:" is 26 std::string::size_type cte_pos = 26; // Ignore whitespace while ((cte_pos < line.size()) && ((line[cte_pos] == ' ') || (line[cte_pos] == '\t'))) cte_pos++; // Get Token if (!get_mime_token (line, partinfo.encoding_, cte_pos)) { h.error (_("[Cannot parse content transfer encoding " "header line]")); continue; } } } // Charset if (partinfo.parameters_.find("charset") != partinfo.parameters_.end()) h.charset (partinfo.parameters_["charset"]); // Set default values if no value can be obtained from the mail (see // RFC 2045) if (h.charset().empty()) h.charset ("us-ascii"); if ((partinfo.type_.size() == 0) || (partinfo.subtype_.size() == 0)) { partinfo.type_ = "text"; partinfo.subtype_ = "plain"; } if (partinfo.encoding_.size() == 0) partinfo.encoding_ = "7bit"; // Decode mail body (may change length of mail) decode_body (mail, partinfo.encoding_, pos); len = mail.size (); // Content type: multipart/mixed and multipart/alternative // Because we only have the first lines of the message we have to take the // first part whether it is displayable for gnubiff or not. // See RFC 2046, RFC 2015 ("multipart/signed") if ((partinfo.type_ == "multipart") && ((partinfo.subtype_ == "mixed") || (partinfo.subtype_ == "alternative") || (partinfo.subtype_ == "signed"))) { gboolean ok = true; // Get boundary std::string boundary; if (partinfo.parameters_.find("boundary")!=partinfo.parameters_.end()) boundary = "--" + partinfo.parameters_["boundary"]; else { h.error (_("[Malformed multipart message]")); ok = false; } // Wait for boundary while (ok && (pos < len) && (mail[pos].find (boundary) != 0)) pos++; if (ok && (pos++ == len)) { h.error (_("[Can't find first part's beginning in the " "multipart message]")); ok = false; } else if (ok) { // Save line in which the first part begins guint saved_pos = pos; // Wait for boundary (may be not present if we have too few lines) while ((pos < len) && (mail[pos].find (boundary) != 0)) pos++; // Remove any trailing lines if (pos < len) mail.erase (mail.begin()+pos, mail.end()); // Remove multipart information from information about displayed // part partinfo.type_ = ""; partinfo.subtype_ = ""; partinfo.encoding_ = ""; partinfo.parameters_.clear (); // Parse first part of multipart message parse (mail, uid, &partinfo, &h, saved_pos, status); // No need to parse rest of mail return; } } // Error message present: No need to parse body if (h.error().size() > 0) {} // Content type: text/plain else if ((partinfo.type_ == "text") && (partinfo.subtype_ == "plain")) { // Get mail body guint j = 0, pdl = biff_->value_uint("popup_body_lines"); while ((j < pdl) && (++pos < len)) { if (j++) h.add_to_body ("\n"); h.add_to_body (mail[pos]); } if ((j == pdl) && (pos+2 < len)) h.add_to_body ("\n..."); } else { gchar *tmp = g_strdup_printf (_("[This message has an unsupported " "content type: \"%s/%s\"]"), partinfo.type_.c_str(), partinfo.subtype_.c_str()); if (tmp) h.error (std::string (tmp)); g_free (tmp); } // If there is an error message put it into the body h.error_to_body (); // Set unique message identifier h.mailid (uid); // Store mail depending on status if (status) { // Message was not filtered because of regular expressions and is // not marked as seen, so it will be stored now if (hidden_.find (h.mailid()) == hidden_.end ()) { h.position (new_unread_.size() + 1); h.mailbox_uin (value_uint ("uin")); new_unread_[h.mailid()] = h; } new_seen_.insert (h.mailid()); #ifdef DEBUG g_message ("[%d] Parsed message with id \"%s\"", uin(), h.mailid().c_str ()); #endif } else { // Store filtered messages so that they are fetched next time hidden_.insert (h.mailid()); #ifdef DEBUG g_message ("[%d] Parsed and discarded message with id \"%s\"", uin(), h.mailid().c_str ()); #endif } } /** * Parses the "Content-Type:" line in a mail header. Only if true is * returned the attributes of {\em partinfo} will have defined values. The * parameters will be added to the map in partinfo, this map will be * cleared before. As attributes are always case insensitive they will be * normalized to be in lower case. See also RFC 2045 5.1. for the syntax * of the content type header field. * * @param line Line from the mail header (folding already removed) * @param partinfo Reference to a PartInfo class in which all obtained * information will be returned * @return Boolean indicating success. */ gboolean Mailbox::parse_contenttype (std::string line, class PartInfo &partinfo) { // Non alphanumeric characters allowed in tokens const static std::string token_ok = "!#$%&'*+-._`{|}~"; // Line begins with "Content-Type:", this has to be tested before line = line.substr (13); // Initialize partinfo.type_ = ""; partinfo.subtype_ = ""; partinfo.parameters_.clear (); std::string::size_type len = line.size(), pos = 0; // Ignore whitespace while ((pos < len) && ((line[pos] == ' ') || (line[pos] == '\t'))) pos++; // Get type if (!get_mime_token (line, partinfo.type_, pos)) return false; // Separator '/' between type and subtype if ((pos >= len) || (line[pos++] != '/')) return false; // Get subtype if (!get_mime_token (line, partinfo.subtype_, pos)) return false; // Get parameters while (true) { // Ignore whitespace while ((pos < len) && ((line[pos] == ' ') || (line[pos] == '\t'))) pos++; // End of line? if (pos >= len) break; // There must be a ';' now if (line[pos++] != ';') return false; // Ignore whitespace while ((pos < len) && ((line[pos] == ' ') || (line[pos] == '\t'))) pos++; // Get attribute std::string attr; while ((pos < len) && ((token_ok.find(line[pos]) != std::string::npos) || (g_ascii_isalnum(line[pos])))) attr += line[pos++]; if (attr.size() == 0) return false; attr = ascii_strdown (attr); // Ignore whitespace while ((pos < len) && ((line[pos] == ' ') || (line[pos] == '\t'))) pos++; // Separator '=' between attribute and value if ((pos >= len) || (line[pos++] != '=')) return false; // Ignore whitespace while ((pos < len) && ((line[pos] == ' ') || (line[pos] == '\t'))) pos++; // Get value; can be token or quoted string if (pos >= len) return false; std::string value; // Quoted string if (line[pos] == '"') { if (!get_quotedstring (line, value, pos)) return false; } // Token else if (!get_mime_token (line, value, pos, false)) return false; // Insert pair (attribute, value) into map partinfo.parameters_[attr] = value; } #ifdef DEBUG std::string dbg="[%d] Parsed content type header line: mimetype="; dbg += partinfo.type_ + "/" + partinfo.subtype_; std::map::iterator it; it = partinfo.parameters_.begin (); while (it != partinfo.parameters_.end()) { dbg += std::string(" (") + it->first.c_str() + " = " + it->second.c_str() + ")"; it++; } g_message (dbg.c_str(), uin()); #endif return true; } /** * This function is to be called if the mail has been displayed, so status * can be changed from MAILBOX_NEW to MAILBOX_OLD. If the status isn't * MAILBOX_NEW nothing is done. */ void Mailbox::mail_displayed (void) { if (status() == MAILBOX_NEW) status (MAILBOX_OLD); } /** * Determine the new status of the mailbox and keep the values obtained in the * last update. */ void Mailbox::update_mailbox_status (void) { // Determine new mailbox status if (status() != MAILBOX_CHECK) return; if (new_unread_.size() == 0) status (MAILBOX_EMPTY); else if (unread_.size() < new_unread_.size()) status (MAILBOX_NEW); else if (!std::includes (unread_.begin(), unread_.end(), new_unread_.begin(), new_unread_.end(), less_pair_first())) status ((unread_ == new_unread_) ? MAILBOX_OLD : MAILBOX_NEW); else status (MAILBOX_OLD); // Remove mails from hidden that are no longer needed std::set new_hidden; std::set_intersection (hidden_.begin(), hidden_.end(), new_seen_.begin(), new_seen_.end(), std::insert_iterator > (new_hidden, new_hidden.begin())); // Save obtained values g_mutex_lock (mutex_); unread_ = new_unread_; seen_ = new_seen_; hidden_ = new_hidden; g_mutex_unlock (mutex_); // Clear sets for next update new_unread_.clear (); new_seen_.clear (); } /** * Start checking for new messages. */ void Mailbox::start_checking (void) { // Set mailbox status status (MAILBOX_CHECK); // Fetch mails and update status fetch (); update_mailbox_status (); } /** * Set the mailbox status into error state. Also resets the read status of * all messages if the corresponding mailbox option is set to true. */ void Mailbox::set_status_mailbox_error (void) { // Set mailbox status status (MAILBOX_ERROR); // Reset read status of messages if wanted by the user if (value_bool ("error_reset_msgs")) { unread_.clear (); seen_.clear (); } } /** * Decide whether a mail has to be fetched and parsed. If the mail is already * known it is inserted into the new_unread_ map. So it can be displayed later. * * @param mailid Gnubiff mail identifier of the mail in question * @return False if the mail has to be fetched and parsed, true * otherwise */ gboolean Mailbox::new_mail(std::string &mailid) { // We have now seen this mail new_seen_.insert (mailid); // Mail shall not be displayed? -> no need to fetch and parse it if (hidden_.find (mailid) != hidden_.end ()) { #ifdef DEBUG g_message ("[%d] Ignore message with id \"%s\"", uin(), mailid.c_str ()); #endif return true; } // Message unknown? if (unread_.find (mailid) == unread_.end ()) return false; // Insert known message into new unread mail map new_unread_[mailid] = unread_[mailid]; new_unread_[mailid].position (new_unread_.size()); #ifdef DEBUG g_message ("[%d] Already read mail with id \"%s\"", uin(), mailid.c_str()); #endif return true; } /** * Search the mailbox for the mail with id {\em mailid}. * * @param mailid Gnubiff mail identifier of the mail to find * @param mail Here the header of the found mail is returned. If no mail * with id {\em mailid} exists, {\em mail} remains unchanged. * @returns Boolean indicating if a mail exists or not. */ gboolean Mailbox::find_mail (std::string mailid, Header &mail) { gboolean ok = false; g_mutex_lock (mutex_); if ((ok = (unread_.find (mailid) != unread_.end ()))) mail = unread_[mailid]; g_mutex_unlock (mutex_); return ok; } // ============================================================================ // main -- messages // ============================================================================ /** * Add headers of messages in the mailbox to the vector {\em headers}. If * {\em use_max_num} is true at most {\em max_num} headers are added. If * {\em empty} is true, the vector will be emptied before adding vectors. * * @param headers Vector of headers to which the headers will be added. * @param use_max_num If true only a limited amount of headers will be * added (the default is false). * @param max_num If {\em use_max_num} is true, this is the maximum * number of headers to be added (the default is 0). * @param empty If true the vector will be emptied (the default is * {\em false}. */ void Mailbox::get_message_headers (std::vector
&headers, gboolean use_max_num, guint max_num, gboolean empty) { guint m = 0; // Empty headers if (empty) headers.clear (); g_mutex_lock (mutex_); std::map::iterator ie, i; i = unread_.begin (); ie = unread_.end (); if (use_max_num) m = unread_.size() - max_num; while (i != ie) { if (i->second.position() > m) headers.push_back (new Header(i->second)); i++; } g_mutex_unlock (mutex_); } // ============================================================================ // filtering // ============================================================================ /** * Compile some regular expressions and add them to those already * used for filtering messages by header lines in this mailbox. The * new expressions are applied after those already in existance. * * Format of the expressions: Each expression has to be prefixed by * "+" or "-". Messages matching a "+"-expression are displayed, * messages matching a "-"-expression are ignored. The "+" or "-" may * be preceded by " "I" for case insensitive pattern matching. * * @param regex Vector of the regular expressions as described above. * @return Boolean indicating success (i.e. all expressions could * be compiled successfully) */ gboolean Mailbox::filter_add (std::vector ®ex_strs) { unsigned int num = regex_strs.size (); std::string::size_type pos, len, errlen; gboolean okay = true; int cflags, errcode; regex_t *regex; for (unsigned int i = 0; i < num; i++) { // Find "+" or "-" len = regex_strs[i].length (); pos = 0; while ((pos < len) && (regex_strs[i][pos] != '+') && (regex_strs[i][pos] != '-')) pos++; if (pos == len) { okay = false; continue; } // Case sensitivity cflags = REG_EXTENDED | REG_NOSUB; if (regex_strs[i].substr(0, pos).find("I") != std::string::npos) cflags |= REG_ICASE; // Compile expression regex = new regex_t; errcode = regcomp (regex, regex_strs[i].substr(pos+1, len-pos-1).c_str(), cflags); // Add compiled expression if (!errcode) { filter_regex_.push_back (regex); filter_opts_.push_back (regex_strs[i].substr(0, pos+1)); continue; } // Error message errlen = regerror (errcode, regex, NULL, 0); gchar *buffer = new gchar[errlen]; regerror (errcode, regex, buffer, errlen); g_message (_("Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s"), regex_strs[i].substr(pos+1, len-pos-1).c_str(), buffer); delete buffer; } return okay; } /** * Compile the regular expressions used for filtering messages by header * lines in this mailbox. The compiled expressions are stored for later use, * any compiled expressions that are already stored are freed. * * @return Boolean indicating success */ gboolean Mailbox::filter_create (void) { gboolean ok = true; g_mutex_lock (mutex_); // Free existing compiled expressions filter_free (); // Compile expressions in the correct order std::vector regex; ok = biff_->get_values ("filter_global_first", regex, true); ok = get_values ("filter_local", regex, false) && ok; ok = biff_->get_values ("filter_global_last", regex, false) && ok; filter_add (regex); g_mutex_unlock (mutex_); return ok; } /** * Free all existing compiled regular expressions used for filtering messages * by header lines in this mailbox. */ void Mailbox::filter_free (void) { unsigned int num = filter_regex_.size (); for (unsigned int i = 0; i < num; i++) { regfree (filter_regex_[i]); delete filter_regex_[i]; } filter_regex_.clear (); filter_opts_.clear (); } /** * Match the string {\em line} with the stored regular expressions. * * @param line Line to be matched * @param status If the return value is true this parameter indicates * whether the message shall be shown or not. * @return True if {\em status} was set by this function call, false * otherwise. */ gboolean Mailbox::filter_match_line (std::string line, gboolean &status) { unsigned int num = filter_regex_.size (); for (unsigned int i = 0; i < num; i++) { if (!(regexec (filter_regex_[i],line.c_str (), 0, NULL, 0))) { if (filter_opts_[i].find ("+") != std::string::npos) status = true; else status = false; return true; } } return false; } gnubiff-2.2.16/src/nls.h0000644000175000017500000000354712474422122011710 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: nls.h,v $ // Revision : $Revision: 1.4.2.3 $ // Revision date : $Date: 2012/01/08 21:02:06 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __NLS_H__ #define __NLS_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef ENABLE_NLS # include # define _(String) dgettext(GETTEXT_PACKAGE,String) # ifdef gettext_noop # define N_(String) gettext_noop(String) # else # define N_(String) (String) # endif #else # define _(String) (String) # define N_(String) (String) # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,String) (String) # define dcgettext(Domain,String,Type) (String) # define bindtextdomain(Domain,Directory) (Domain) #endif #endif gnubiff-2.2.16/src/imap4.cc0000644000175000017500000015227712474422122012271 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2009 Nicolas Rougier, 2004-2009 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: imap4.cc,v $ // Revision : $Revision: 1.131.2.3 $ // Revision date : $Date: 2009/04/05 17:27:59 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include #include #include #include #include "ui-authentication.h" #include "ui-applet.h" #include "imap4.h" #include "nls.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The mailbox for the IMAP protocol is created from scratch. * * @param biff Pointer to the instance of Gnubiff. */ Imap4::Imap4 (Biff *biff) : Mailbox (biff) { value ("protocol", PROTOCOL_IMAP4); socket_ = new Socket (this); idleable_ = false; idled_ = false; } /** * Constructor. The mailbox for the IMAP protocol is created by taking the * attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Imap4::Imap4 (const Mailbox &other) : Mailbox (other) { value ("protocol", PROTOCOL_IMAP4); socket_ = new Socket (this); idleable_ = false; idled_ = false; } /// Destructor Imap4::~Imap4 (void) { delete socket_; } // ======================================================================== // main // ======================================================================== /** * Make a note to start monitoring in a new thread. If there is already a note * or if we are in idle state nothing is done. * * @param delay Time (in seconds) to wait before the new thread will be * created. If {\em delay} is zero (this is the default) the * value of {\em delay()} is taken. */ void Imap4::threaded_start (guint delay) { // Are we in idle state? if (idled_) return; // If no delay is given use internal delay if (!delay) delay = Mailbox::delay(); Mailbox::threaded_start (delay); } /** * Method to be called by a new thread for monitoring the mailbox. The status * of the mailbox will be updated, new mails fetched and idle state entered * (if the server does allow this). Before exiting creating of a new thread * for monitoring is noted down. * * Remark: In this function all exceptions are catched that are thrown when * sending IMAP commands or receiving response from the server. */ void Imap4::start (void) { // Is there already someone watching this mailbox? if (!g_mutex_trylock (monitor_mutex_)) return; try { start_checking (); } catch (imap_err& err) { // Catch all errors that are un-recoverable and result in // closing the connection, and resetting the mailbox status. #if DEBUG g_warning ("[%d] Imap exception: %s", uin(), err.what()); #endif if (err.is_mailboxerror()) set_status_mailbox_error (); socket_->close (); idled_ = false; } update_applet(); g_mutex_unlock (monitor_mutex_); threaded_start (delay()); } /** * Connect to the mailbox, get unread mails and update mailbox status. * If the password for the mailbox isn't already known, it is obtained (if * possible). If the mailbox supports the "IDLE" command this function starts * idling once the mailbox status is known. When leaving this function gnubiff * will logout from the server. * * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_nologin_err * The server doesn't want us to login or the user doesn't * provide a password. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::fetch (void) throw (imap_err) { // Is there a password? Can we obtain it? if (!biff_->get_password_for_mailbox (this)) throw imap_nologin_err(); // Connection and authentification connect(); // Set the mailbox status and get mails (if there is new mail) fetch_mails(); // Start idling (if possible) if (idleable_) idle(); // LOGOUT command_logout(); } /** * Update the applet with any new information about this mailbox. This * includes new or removed mail, for a new mail count. */ void Imap4::update_applet (void) { gdk_threads_enter(); biff_->applet()->update(); gdk_threads_leave(); } /** * A connection to the mailbox is established. If this can't be done then an * {\em imap_socket_err} is thrown. Otherwise gnubiff logins, checks * capabilities and selects the user chosen folder on the server. * * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_nologin_err * The server doesn't want us to login or the user doesn't * provide a password. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::connect (void) throw (imap_err) { // Resetting the tag counter reset_tag(); #ifdef DEBUG g_message ("[%d] Trying to connect to %s on port %d", uin(), address().c_str(), port()); #endif // Determine authentication if (authentication() == AUTH_AUTODETECT) { guint prt = port(); if (!use_other_port()) prt = 993; if (!socket_->open (address(), prt, AUTH_SSL)) { if (!use_other_port()) prt = 143; if (!socket_->open (address(), prt, AUTH_USER_PASS)) throw imap_socket_err(); else { port (prt); authentication (AUTH_USER_PASS); socket_->close(); } } else { port (prt); authentication (AUTH_SSL); socket_->close(); } } // Open socket if (!socket_->open (address(), port(), authentication(), certificate(), 3)) throw imap_socket_err(); // Set reads from the socket to time out. We do this primarily for // the IDLE state. However, this also prevents reads in general // from blocking forever on connections that have gone bad. We // don't let the timeout period be less then 60 seconds. socket_->set_read_timeout(delay() < 60 ? 60 : delay()); #ifdef DEBUG g_message ("[%d] Connected to %s on port %d", uin(), address().c_str(), port()); #endif // Get server's response (maybe we get the CAPABILITY response code) ok_response_codes_.clear (); std::string line; readline (line); // CAPABILITY command_capability (true); // LOGIN command_login(); // SELECT command_select(); } /** * Get the first lines of the unread mails and update the status of the * mailbox. * * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::fetch_mails (void) throw (imap_err) { // SEARCH NOT SEEN std::set buffer = command_searchnotseen (); // FETCH UID std::set uid_set = command_fetchuid (buffer); // Get new mails one by one for (std::set::iterator i=buffer.begin(); i != buffer.end(); i++) { // Check if mail is already known std::string mailid = uidvalidity_ + msn_uid_[*i]; if (new_mail (mailid)) continue; // FETCH header information std::vector mail = command_fetchheader (*i); // FETCH BODYSTRUCTURE PartInfo partinfo = command_fetchbodystructure (*i); // FETCH BODY command_fetchbody (*i, partinfo, mail); // Parse mail parse (mail, mailid, &partinfo); } } /** * Begin the IMAP idle mode. This method will not return until * either we receive IMAP notifications (new mail...), or the server * terminates for some reason. * * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::idle (void) throw (imap_err) { idled_ = true; gboolean sentdone=false; // "DONE\r\n" sent by command_idle()? // Currently we will never exit this loop unless an error occurs, // probably due to the loss of a connection. Basically our loop is: // (update applet)->(wait in idle for mail change)->(Get Mail headers) while (true) { // When in idle state, we won't exit this thread function // so we have to update applet in the meantime update_mailbox_status (); update_applet (); if (timetag_) g_source_remove (timetag_); timetag_ = 0; // IDLE command_idle (sentdone); if (!sentdone) if (socket_->write (std::string("DONE\r\n")) != SOCKET_STATUS_OK) throw imap_socket_err(); // Getting the acknowledgment waitfor_ack (); // Set mailbox status status (MAILBOX_CHECK); // Get mails fetch_mails (); } idled_ = false; } /** * Sending the IMAP command "CAPABILITY" and parsing the server's response. * The command "CAPABILITY" is sent to the server to get the supported * capabilities. Currently gnubiff recognizes the following capabilities: * \begin{itemize} * \item IDLE: If the server has the IDLE capability, gnubiff uses the * IDLE command instead of polling. * \item LOGINDISABLED: The server wants us not to login. * \end{itemize} * * If {\em check_rc} is true first the response codes to untagged OK responses * are checked for a "CAPABILITY" response code. If this is found no command * is sent to the server. Instead the arguments to this response code are * evaluated. * * @param check_rc Whether to check the response codes first. The default * is false. * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::command_capability (gboolean check_rc) throw (imap_err) { std::string line; gboolean command_sent = false; // Check for CAPABILITY response code if (check_rc) if (ok_response_codes_.find("CAPABILITY") != ok_response_codes_.end()) line = " " + ok_response_codes_["CAPABILITY"] + " "; // If no response code available send the command if (line.size() == 0) { // Sending the command sendline ("CAPABILITY"); command_sent = true; // Wait for "* CAPABILITY" untagged response waitfor_untaggedresponse (0, "CAPABILITY"); line = last_untagged_response_cont_; line = " " + line.substr (0, line.size()-1) + " "; // trailing '\r' // Getting the acknowledgment waitfor_ack(); } // Looking for supported capabilities idleable_ = use_idle () && (line.find (" IDLE ") != std::string::npos); if (line.find (" LOGINDISABLED ") != std::string::npos) { command_logout(); throw imap_nologin_err(); } // If we checked only the response code and didn't find all the // capabilities we are looking for (currently only IDLE), we send the // CAPABILITY command, maybe the server sends additional capabilities if (((idleable_ == false) && use_idle()) && check_rc && !command_sent) command_capability (false); } /** * Obtain the first lines of the body of the mail with sequence number * {\em msn}. * * @param msn Message sequence number of the mail * @param partinfo Partinfo structure with information of the relevant * part of the mail as returned by * Imap4::command_fetchbodystructure(). * @param mail Vector containing the mail's header lines (inclusive * the separating empty line). * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::command_fetchbody (guint msn, class PartInfo &partinfo, std::vector &mail) throw (imap_err) { std::string line; // Do we have to get any plain text? if (partinfo.part_ == "") { partinfo.error_ = std::string (_("[This message has no part with a " "supported content type]")); mail.push_back(std::string("")); return; } else if (partinfo.size_ == 0) { mail.push_back(std::string("")); return; } // Note: We are only interested in the first lines, there // are at most 1000 characters per line (see RFC 2821 4.5.3.1), // so it is sufficient to get at most 1000*min_body_lines // bytes. guint textsize = partinfo.size_; if (textsize > 1000 * biff_->value_uint ("min_body_lines")) textsize = 1000 * biff_->value_uint ("min_body_lines"); std::stringstream textsizestr; textsizestr << textsize; // Send command line = "(BODY.PEEK[" + partinfo.part_ + "]<0." + textsizestr.str() + ">)"; sendline ("FETCH", msn, line); // Wait for "* ... FETCH" untagged response (see RFC 3501 7.4.2) waitfor_untaggedresponse (msn, "FETCH"); #ifdef DEBUG g_print ("** Message: [%d] RECV(%s:%d): (message) ", uin(), address().c_str(), port()); #endif // Read text guint lineno = 0; std::string::size_type bytes = 0; std::string::size_type maxbytes = textsize + 3; // ")\r\n" at end of mail while ((bytes < maxbytes) && (readline (line, false, true, false))) { bytes += (gint)(line.size() + 1); // don't forget to count '\n'! if ((line.size() > 0) && (lineno++ < biff_->value_uint ("min_body_lines"))) { mail.push_back (line.substr(0, line.size()-1)); #ifdef DEBUG g_print ("+"); #endif } } #ifdef DEBUG g_print ("\n"); #endif if (bytes > maxbytes) throw imap_dos_err(); // Remove ")\r" from last line ('\n' was removed before) mail.pop_back (); if ((line.size() > 1) && (line[line.size()-2] == ')')) mail.push_back (line.substr(0, line.size()-2)); else throw imap_command_err(); // Getting the acknowledgment waitfor_ack(); } /** * Decide which part from the mail with sequence number {\em msn} we are * interested in. This is done by sending IMAP command * "FETCH {\em msn} (BODYSTRUCTURE)" to the server and parsing the server's * response. * * @param msn Message sequence number of the mail * @return Partinfo structure with information of the relevant * part of the mail. * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ class PartInfo Imap4::command_fetchbodystructure (guint msn) throw (imap_err) { std::string line, response; guint nestlevel=0; // Send command sendline ("FETCH", msn, "(BODYSTRUCTURE)"); // Wait for "* ... FETCH (BODYST..." untagged response (see RFC 3501 7.4.2) waitfor_untaggedresponse (msn, "FETCH", "(BODYSTRUCTURE ("); // Get the whole response (may be multiline) response = last_untagged_response_cont_.substr (16); // "(BODYSTRUCTURE (" gint cnt = biff_->value_uint ("prevdos_imap4_multiline"); while ((nestlevel=isfinished_fetchbodystructure(line,nestlevel))&&(cnt--)){ readline (line, true, true, false); response += line.substr (0, line.size()-1); // trailing '\r' } if (cnt < 0) throw imap_dos_err(); response = response.substr (0, response.size()-1); // trailing ')' // Get part of mail that contains "text/plain" (if any exists) and its // properties PartInfo partinfo; parse_bodystructure(response, partinfo); #ifdef DEBUG g_message ("[%d] Part=%s size=%d, encoding=%s\n", uin(), partinfo.part_.c_str(), partinfo.size_, partinfo.encoding_.c_str()); #endif // Getting the acknowledgment waitfor_ack(); return partinfo; } /** * Obtain some header information from the mail with sequence number {\em msn}. * The IMAP command "FETCH" is sent to the server in order to obtain the From, * Date and Subject of the mail. The last line of the returned header lines * should be empty. * * @param msn Message sequence number of the mail * @return C++ vector of C++ strings containing the header lines * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ std::vector Imap4::command_fetchheader (guint msn) throw (imap_err) { // Start with an empty mail std::vector mail; // Send command sendline ("FETCH", msn, "(BODY.PEEK[HEADER.FIELDS (DATE FROM SUBJECT)])"); // Wait for "* ... FETCH" untagged response (see RFC 3501 7.4.2) waitfor_untaggedresponse(msn, "FETCH"); // Date, From, Subject and an empty line #ifdef DEBUG g_print ("** Message: [%d] RECV(%s:%d): (message) ", uin(), address().c_str(), port()); #endif std::string line; gint cnt = 5 + biff_->value_uint ("prevdos_additional_lines"); while ((readline (line, false, true, false)) && (cnt--)) { if (line.find (tag()) == 0) break; if (line.size() > 0) { mail.push_back (line.substr(0, line.size()-1)); #ifdef DEBUG g_print ("+"); #endif } } #ifdef DEBUG g_print ("\n"); #endif // Did an error happen? if (cnt < 0) throw imap_dos_err(); if ((line.find (tag() + "OK") != 0) || (mail.size()<2)) throw imap_command_err(); // Remove the last line (should contain a closing parenthesis). // Note: We need the empty line before because it separates the // header from the mail text if ((mail[mail.size()-1] != ")") && (mail[mail.size()-2].size() != 0)) throw imap_command_err(); mail.pop_back(); return mail; } /** * Obtain all the unique identifiers for messages with a sequence number in * the set {\em msn}. This is done by sending the IMAP command "FETCH" to the * server. This function also updates Imap4::msn_uid_. * * @param msn Message sequence number of the mail * @return Unique id of the mail * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ std::set Imap4::command_fetchuid (std::set msn) throw (imap_err) { std::set uid; msn_uid_.clear (); // No messages at all if (!msn.size()) return uid; std::string msnstr; msnstr = vector_to_numbersequence::iterator>(msn.begin (), msn.end (), ",", ":"); // Send command sendline ("FETCH " + msnstr + " (UID)"); // Get all untagged responses that are of interest std::set::size_type cnt = msn.size() + 1; // prevent DoS while ((waitfor_ack_untaggedresponse ("FETCH" , "(UID ")) && (cnt--)) { // Get uid std::string line = last_untagged_response_cont_.substr (5); std::string::size_type pos = line.find (")"); if ((pos == 0) || (pos == std::string::npos)) throw imap_command_err(); if (msn.find (last_untagged_response_msn_) == msn.end ()) throw imap_command_err(); uid.insert (line.substr (0, pos)); msn_uid_[last_untagged_response_msn_] = line.substr (0, pos); } if (cnt == 0) throw imap_dos_err(); if (msn.size() != uid.size()) throw imap_command_err(); return uid; } /** * Sending the IMAP command "IDLE" to the server. * This function enters into the idle mode by issueing the imap "IDLE" * command, then waits for notifications from the IMAP server. * With inactivity the socket read will timeout periodically waiting for server * notifications. When the timeout occurs we simply issue the IMAP * "DONE" command then re-enter the idle mode again. The timeout * occurs every {\em delay()} + 1 minute time. We perform this timeout * operation so that we periodically test the connection to make sure it * is still valid, and to also keep the connection from being closed by * keeping the connection active. * * @param sentdone Reference to a boolean. When returning this is true if * "DONE" (for the last "IDLE") is already sent to the server, * and false if the caller still has to send "DONE". * @return Returns the last line received from the IMAP server. * @exception imap_command_err * This exception is thrown when we get an unexpected response. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ std::string Imap4::command_idle(gboolean &sentdone) throw (imap_err) { gboolean idleRenew = false; // If we should renew the IDLE again. std::string line; do { idleRenew = false; sentdone = false; // IDLE sendline ("IDLE"); // Read continuation response readline (line); if (line.find("+ ") != 0) throw imap_command_err(); // Wait for new mail and block thread at this point gint status = readline_ignoreinfo (line, true, false, true); if (status == SOCKET_TIMEOUT) { // We timed out, so we want to loop, and issue IDLE again. idleRenew = true; if (socket_->write (std::string("DONE\r\n")) != SOCKET_STATUS_OK) throw imap_socket_err(); sentdone = true; status = readline_ignoreinfo (line, true, false, true); if (status != SOCKET_STATUS_OK) // If there is another timeout: At this point we know the // connection is probably bad. The socket has not been torn down // yet, but the read has timed out again, with no received data. throw imap_socket_err(); if (line.find (tag() + "OK") != 0) // We may receive email notification before the server // receives the DONE command, in which case we would get // something like "XXX EXISTS" here before "OK IDLE". // At this point we assume this is the case, and fallout of // this method with the intent that the calling method can // handle this. idleRenew = false; } else if (status != SOCKET_STATUS_OK) throw imap_socket_err(); } while (idleRenew); return line; } /** * Sending the IMAP command "LOGIN" to the server. * * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::command_login (void) throw (imap_err) { // Sending the command sendline ("LOGIN \"" + username() + "\" \"" + password() + "\"", false); #ifdef DEBUG // Just in case someone sends me the output: password won't be displayed std::string line = tag() + "LOGIN \"" + username() + "\" (password) \r\n"; g_message ("[%d] SEND(%s:%d): %s", uin(), address().c_str(), port(), line.c_str()); #endif // Getting the acknowledgment waitfor_ack(); } /** * Sending the IMAP command "LOGOUT" to the server. If this succeeds the * connection to the IMAP server is closed. * * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::command_logout (void) throw (imap_err) { // Sending the command sendline ("LOGOUT"); // Acknowledgment is read (and ignored) when closing socket // Closing the socket socket_->close (); } /** * Sending the IMAP command "SELECT" to the server. The user chosen folder on * the server is selected. * * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::command_select (void) throw (imap_err) { std::string folder_imaputf7 = utf8_to_imaputf7 (folder()); if (folder_imaputf7.size() == 0) throw imap_command_err(); // Send command sendline (std::string("SELECT \"") + folder_imaputf7 + "\""); // Create error message gchar *buffer; buffer = g_strdup_printf (_("[%d] Unable to select folder %s on host %s"), uin(), folder().c_str(), address().c_str()); if (!buffer) throw imap_command_err(); std::string msg = std::string(buffer); g_free (buffer); // According to RFC 3501 6.3.1 there must be exactly seven lines // before getting the acknowledgment line. waitfor_ack (msg, 7); // Check for UIDVALIDITY response code; see RFC 3501 2.3.1.1 if (ok_response_codes_.find("UIDVALIDITY") != ok_response_codes_.end()) uidvalidity_ = ok_response_codes_["UIDVALIDITY"]; } /** * Sending the IMAP command "SEARCH NOT SEEN" and parsing the server's * response. The IMAP command "SEARCH NOT SEEN" is sent to the server to get * the message sequence numbers of those messages that have not been read yet. * * @return C++ vector of integers for the message sequence numbers * of unread messages. * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ std::set Imap4::command_searchnotseen (void) throw (imap_err) { // Sending the command sendline ("SEARCH NOT SEEN"); // Wait for "* SEARCH" untagged response waitfor_untaggedresponse (0, "SEARCH"); std::stringstream ss (last_untagged_response_cont_); // Parse server's answer. Should be something like // "* SEARCH 1 2 3 4" or "* SEARCH" std::set buffer; guint n, cnt = 0, maxcnt = biff_->value_uint ("max_mail"); gboolean usemax = biff_->value_bool ("use_max_mail"); while ((ss >> n) && (!usemax || (cnt++ < maxcnt))) buffer.insert (n); // Getting the acknowledgment waitfor_ack(); return buffer; } /** * Reading and discarding input lines from the server's response for the last * sent command. If the response is not positive the optional error message * {\em msg} is printed and an imap_command_err exception is thrown. * Response codes for "* OK" responses are saved in Imap4::ok_response_codes_, * which is being reset when calling this function. * * @param msg Error message to be printed if we don't get a positive * response. The default is to print no message. * @param num Number of lines that are expected to be sent by the * server. This value is needed to help deciding whether * we are DoS attacked. The default value is 0. * @exception imap_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Imap4::waitfor_ack (std::string msg, gint num) throw (imap_err) { std::string line; // Reset server response code map ok_response_codes_.clear (); num += 1 + biff_->value_uint ("prevdos_additional_lines"); while ((readline (line)) && (num--)) if (line.find (tag()) == 0) break; // Error? if (num<0) { g_warning (_("[%d] Unable to get acknowledgment from %s on port %d"), uin(), address().c_str(), port()); throw imap_dos_err(); } // Negative response? if (line.find (tag() + "OK") != 0) { // Print error message if (msg != "") g_warning ("%s", msg.c_str()); // We still have a connection to the server so we can logout command_logout(); throw imap_command_err(); } } /** * Reading and discarding input lines from the server's response until a * specified untagged response or a acknowledgment is read. Testing for the * specified untagged response succeeds for any message sequence number. * * Response codes for "* OK" responses are saved in Imap4::ok_response_codes_, * which is being reset when calling this function. * * @param key Key to be tested * @param contbegin This is tested for being the prefix of the contents part of * the response. The default is the empty string. * @param num Number of lines that are expected to be sent by the * server before the untagged response. This value is * needed to help deciding whether we are DoS attacked. * The default value is 0. * @return True if the specified untagged response was sent, false if * the acknowledgment was sent. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * @see Imap4::waitfor_ack(), Imap4::waitfor_untaggedresponse() */ gboolean Imap4::waitfor_ack_untaggedresponse (std::string key, std::string contbegin, gint num) throw (imap_err) { std::string line; // Reset server response code map ok_response_codes_.clear (); // We need to set a limit to lines read (DoS attacks). num += 1 + biff_->value_uint ("prevdos_additional_lines"); while (num--) { readline (line); if (test_untagged_response (key, contbegin)) return true; if (line.find (tag()) == 0) break; } if (num < 0) { g_warning (_("[%d] Server doesn't send untagged \"%s\" response " "or acknowledgment"), uin(), key.c_str()); throw imap_dos_err(); } // Negative response? if (line.find (tag() + "OK") != 0) { // We still have a connection to the server so we can logout command_logout(); throw imap_command_err(); } return false; } /** * Reading and discarding input lines from the server's response until a * specified untagged response is read. If no such line is read in time a * DoS attack is suspected and an imap_dos_err exception is thrown. * * Response codes for "* OK" responses are saved in Imap4::ok_response_codes_, * which is being reset when calling this function. * * @param msn Message sequence number to be tested. This must be 0 if the * response shall not contain a message sequence number. * @param key Key to be tested * @param contbegin This is tested for being the prefix of the contents part of * the response. The default is the empty string. * @param num Number of lines that are expected to be sent by the * server before the untagged response. This value is * needed to help deciding whether we are DoS attacked. * The default value is 0. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err */ void Imap4::waitfor_untaggedresponse (guint msn, std::string key, std::string contbegin,gint num)throw(imap_err) { std::string line; // Reset server response code map ok_response_codes_.clear (); // We need to set a limit to lines read (DoS attacks). num += 1 + biff_->value_uint ("prevdos_additional_lines"); while (num--) { readline (line); if (test_untagged_response (msn, key, contbegin)) return; } g_warning (_("[%d] Server doesn't send untagged \"%s\" response"), uin(), key.c_str()); throw imap_dos_err(); } /** * Determine if the whole response to the "FETCH (BODYSTRUCTURE)" command has * been read. The server's response may be multiline. So gnubiff must know if * another line has to be read. This is done be counting opening and closing * parentheses ("(" and ")"). The level of nesting before getting to the * current line is given by the parameter {\em nestlevel}. * * @param line Current line of server's response * @param nestlevel Level of nesting before parsing response {\em line} * @return Level of nesting after parsing response {\em line} * @exception imap_command_err * This exception is thrown when the structure of the * response {\em line} is not what we expected. */ guint Imap4::isfinished_fetchbodystructure (std::string line, guint nestlevel) throw (imap_err) { std::string::size_type len = line.size (), pos = 0; while (pos < len) { gchar c = line[pos++]; // String if (c == '"') { // Read whole string std::string tmp; // We don't allow line breaks inside of strings. Is this a problem? if (!get_quotedstring (line, tmp, pos, '"', false)) throw imap_command_err(); continue; } // Nested "( ... )" block begins if (c == '(') { nestlevel++; continue; } // Nested "( ... )" block ends if (c == ')') { nestlevel--; // Back at toplevel we expect to be at the end of the line if ((nestlevel == 0) && (pos != len-1) && (line[pos] != '\r')) throw imap_command_err(); if (nestlevel == 0) return 0; continue; } // All other characters are ignored } return nestlevel; } /** * Parse the body structure of a mail. * This function parses the result {\em structure} of a * "FETCH ... (BODYSTRUCTURE)" IMAP command. It returns (via the reference * parameter {\em partinfo} the part of the mail body containing the first * "text/plain" section and information about this part. If no such section * exists (or in case of an error) false is returned. * * @param structure C++ String containing the result of the IMAP command * (without "* ... FETCH (BODYSTRUCTURE (" and the trailing * ')'). * @param partinfo Reference to a PartInfo structure. If true is * returned the structure will contain the information about * the selected part (part, size, encoding, charset, * mimetype) * @param toplevel Boolean (default value is true). This is true if it is the * toplevel call of this function, false if it is called * recursively. * @return C++ String containing the first "text/plain" part or an * empty string */ gboolean Imap4::parse_bodystructure (std::string structure, PartInfo &partinfo, gboolean toplevel) { std::string::size_type len = structure.size (), pos = 0, startpos = 0; guint block = 1, nestlevel = 0; gboolean multipart=false; // Multipart? -> Parse recursively if (structure.at(0)=='(') multipart=true; // Length is in the 7th block:-( while (pos < len) { gchar c = structure.at (pos++); // String if (c == '"') { // When in multipart only the last entry is allowed to be a string if ((multipart) && (nestlevel == 0)) return false; // Get the string std::string value; if (!get_quotedstring (structure, value, pos, '"', false)) return false; value = ascii_strdown (value); if ((nestlevel == 0) && (!multipart)) { switch (block) { case 1: // MIME type if (value != "text") return false; partinfo.type_ = value; break; case 2: // MIME subtype if (value != "plain") return false; partinfo.subtype_ = value; break; case 6: // Encoding partinfo.encoding_=value; break; } } continue; } // Next block if (c == ' ') { if (nestlevel == 0) block++; if ((block > 7) && (!multipart)) return false; while ((pos < len) && (structure.at(pos) == ' ')) pos++; continue; } // Nested "( ... )" block begins if (c == '(') { if (nestlevel == 0) startpos = pos - 1; nestlevel++; continue; } // Nested "( ... )" block ends if (c == ')') { nestlevel--; if (nestlevel < 0) return false; // Content of block std::string content=structure.substr (startpos+1, pos-startpos-2); // One part of a multipart message? if ((nestlevel == 0) && (multipart)) { if (!parse_bodystructure (content, partinfo, false)) continue; std::stringstream ss; ss << block; if (toplevel) partinfo.part_ = ss.str(); else partinfo.part_ = ss.str()+std::string(".")+partinfo.part_; return true; } // List of parameter/value pairs? (3rd block) if ((nestlevel == 0) && (!multipart) && (block == 3)) { if (!parse_bodystructure_parameters (content, partinfo)) return false; } continue; } // Alphanumerical character if (g_ascii_isalnum (c)) { if ((multipart) && (nestlevel == 0)) return false; if (!multipart) startpos = pos-2; while ((pos> partinfo.size_; partinfo.part_ = std::string ("1"); return true; } continue; } // Otherwise: Error! return false; } // At end and no length found: Error! return false; } /** * Parse the list of parameter/value pairs of a part of a mail. * This list is the third block of the body structure of this part. Currently * the only parameter we are interested in is the character set. * If the parameter is not in the list an empty string is returned as value for * this parameter. * * @param list C++ String containing the parameter/value list. This is a * (converted to lower case) substring of the result of the * IMAP "FETCH ... (BODYSTRUCTURE) command). * @param partinfo Reference to a PartInfo structure. If true is * returned the structure will contain the information about * the selected part (part, size, encoding, charset, * mimetype) * @return Boolean indicating success or failure. */ gboolean Imap4::parse_bodystructure_parameters (std::string list, PartInfo &partinfo) { std::string::size_type len = list.size(), pos = 0; guint stringcnt = 1; std::string parameter, value; while (pos < len) { gchar c = list.at (pos++); // Next string if (c == ' ') { while ((pos < len) && (list.at(pos) == ' ')) pos++; stringcnt++; continue; } // String if (c == '"') { if (!get_quotedstring (list, value, pos, '"', false)) return false; if (stringcnt%2) { // Parameter: convert to lower case parameter = ascii_strdown (value); continue; } // Insert parameter and its value into map partinfo.parameters_[parameter] = value; continue; } // Otherwise: Error! return false; } return true; } /** * Reset the counter for tagging imap commands. */ void Imap4::reset_tag () { tag_ = std::string(""); tagcounter_ = 0; } /** * Give the tag (including the following space) of the last sent IMAP command. * * @return a C++ string with the tag */ std::string Imap4::tag () { return tag_; } /** * Save the response code from the last line sent by the server. This line * must contain a response code, otherwise an imap_command_err exception is * thrown. * * @param rc_map Map for response codes (pairs of atoms and arguments) * @exception imap_command_err * This exception is thrown if {\em line} doesn't contain a * valid response code. */ void Imap4::save_response_code (std::map &rc_map) throw (imap_err) { gboolean is_string = false; std::string::size_type pos = 0, startpos = 1; // No response code in line if (last_untagged_response_cont_[0] != '[') throw imap_command_err(); // Get end of response code while ((++pos) < last_untagged_response_cont_.size()) { if (last_untagged_response_cont_[pos] == '"') // FIXME: '"' in strings? is_string = !is_string; if ((last_untagged_response_cont_[pos] == ']') && !is_string) break; } if (pos == last_untagged_response_cont_.size ()) throw imap_command_err(); // Get atom and (if available) arguments std::string rc=last_untagged_response_cont_.substr(startpos, pos-startpos); std::string atom, arg; pos = rc.find (" "); if (pos == std::string::npos) atom = rc; else { atom = rc.substr (0, pos); arg = rc.substr (pos+1); } // Save response code rc_map[atom] = arg; #ifdef DEBUG g_message ("[%d] Saved response code to untagged status response: " "atom=\"%s\" arg=\"%s\"", uin(), atom.c_str(), arg.c_str()); #endif } /** * Parse untagged server's response. If the given line {\em line} is an * untagged response it is split into the message number (if present), the * keyword that gives the type of the response and the contents (if present). * If {\em line} is no untagged response this function returns immediately. * * @param line Response line of the server * @exception imap_command_err * This exception is thrown if {\em line} doesn't contain a * untagged response that is not valid. */ void Imap4::save_untagged_response (std::string &line) throw (imap_err) { // Is there no untagged response? if (line.find("* ") != 0) { last_untagged_response_ = false; return; } // Defaults last_untagged_response_ = true; last_untagged_response_msn_ = 0; last_untagged_response_cont_ = std::string(""); last_untagged_response_key_ = std::string(""); std::string::size_type pos = 2; // Handling the message sequence number if (g_ascii_isdigit (line[2])) { while (g_ascii_isdigit (line[++pos]));// terminates because '\r' at end pos++; std::stringstream ss (line.substr (2, pos-3)); ss >> last_untagged_response_msn_; } // Find the separating space between key and contents (if it exists) std::string::size_type pos_sep = line.find (" ", pos); if (pos_sep == std::string::npos) last_untagged_response_key_ = line.substr (pos, line.size()-pos-1); else { if (pos == pos_sep) throw imap_command_err(); last_untagged_response_key_ = line.substr (pos, pos_sep-pos); last_untagged_response_cont_ = line.substr (pos_sep+1, line.size()-pos_sep); } } /** * Test if the last line sent by the server was the specified untagged * response. * * @param msn Message sequence number to be tested. This must be 0 if the * response shall not contain a message sequence number. * @param key Key to be tested * @param contbegin This is tested for being the prefix of the contents part of * the response. The default is the empty string. * return True if the last line sent by the server was a untagged * response with the given attributes. */ gboolean Imap4::test_untagged_response (guint msn, std::string key, std::string contbegin) { return (last_untagged_response_ && (msn == last_untagged_response_msn_) && (key == last_untagged_response_key_) && (last_untagged_response_cont_.find (contbegin) == 0)); } /** * Test if the last line sent by the server was the specified untagged * response for any message sequence number. The value of this message * sequence number is saved in Imap4::last_untagged_response_msn_. * * @param key Key to be tested * @param contbegin This is tested for being the prefix of the contents part of * the response. The default is the empty string. * return True if the last line sent by the server was a untagged * response with the given attributes. */ gboolean Imap4::test_untagged_response (std::string key, std::string contbegin) { return (last_untagged_response_ && (0 != last_untagged_response_msn_) && (key == last_untagged_response_key_) && (last_untagged_response_cont_.find (contbegin) == 0)); } /** * Send an IMAP command. * The given {\em command} is prefixed with a unique identifier (obtainable * via the Imap::tag() function) and postfixed with "\r\n" and then written to * the socket of the mailbox. * * If {\em check} is true the return value of the call to Socket::write() is * checked and an imap_socket_err exception is thrown if it was not successful. * So this function always returns SOCKET_STATUS_OK if {\em check} is true, * otherwise (if {\em check} is false) error handling is left to the caller of * this function. * * @param command IMAP command line to be sent * @param print Shall the sent command be printed in debug mode? * The default is true. * @param check Shall the return value of the Socket::write() command be * checked? The default is true. * @return Return value of the Socket::write() command, this is always * SOCKET_STATUS_OK if {\em check} is true. * @exception imap_command_err * This exception is thrown if we can't create the string to be * sent to the server. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ gint Imap4::sendline (const std::string command, gboolean print, gboolean check) throw (imap_err) { // Create new tag tagcounter_++; gchar *buffer = g_strdup_printf("A%05d ",tagcounter_); if (buffer == NULL) throw imap_command_err(); tag_ = std::string (buffer); g_free (buffer); // Write line gint status = socket_->write (tag_ + command + "\r\n", print); if ((status != SOCKET_STATUS_OK) && check) throw imap_socket_err(); return status; } /** * Send an IMAP command. The command line will be created by concatenating * {\em command}, {\em msn} and {\em arg}. * * @param command IMAP command to be sent * @param msn Message sequence number argument to the command * @param arg Other arguments to the command * @param print Shall the sent command be printed in debug mode? * The default is true. * @param check Shall the return value of the Socket::write() command be * checked? The default is true. * @return Return value of the Socket::write() command, this is always * SOCKET_STATUS_OK if {\em check} is true. * @exception imap_command_err * This exception is thrown if we can't create the string to be * sent to the server. * @exception imap_socket_err * This exception is thrown if a network error occurs. * @see The description of the method Imap4::sendline() contains a * more extensive description for the parameter {\em check}. */ gint Imap4::sendline (const std::string command, guint msn, const std::string arg, gboolean print, gboolean check) throw (imap_err) { std::stringstream ss; ss << msn; return sendline (command + " " + ss.str() + " " + arg, print, check); } /** * Read one line from the server. If {\em check} is true the return value of * the call to Socket::read() is checked and an imap_socket_err exception is * thrown if it was not successful. So this function always returns * SOCKET_STATUS_OK if {\em check} is true, otherwise (if {\em check} is * false) error handling is left to the caller of this function. * * If {\em checkline} is true then the read line is checked for being an * untagged response. If it is an untagged response the line is parsed and its * values are saved for later use. * * If {\em checkline} is true then the read line is checked for being an * untagged status response. If an error response is found * ("* BYE" or "* BAD") an error message is printed and an imap_command_err * exception is thrown. If a warning response ("* NO") is found the warning is * printed. * * If {\em checkline} is true server response codes for "* OK" server status * responses are saved in Imap4::ok_response_codes_. No response codes are * currently saved for other status responses than "* OK". * * Remark: If the mailbox is not checking for new mail and we get a "* BYE" * message (when idling for example) an imap_command_err exception is thrown * but mailbox status will not be set to MAILBOX_ERROR. * * Remark: The parameter {\em checkline} must be false if reading the response * to the "LOGOUT" command because in this situation an untagged "* BYE" * response doesn't indicate an error. * * @param line String that contains the read line if the call was * successful (i.e. the return value is SOCKET_STATUS_OK), * the value is undetermined otherwise * @param print Shall the read line be printed in debug mode? * The default is true. * @param check Shall the return value of the Socket::read() command be * checked? The default is true. * @param checkline Shall {\em line} be checked for an untagged negative * response? The default is true. * @return Return value of the Socket::read() command, this is always * SOCKET_STATUS_OK if {\em check} is true. * @exception imap_command_err * This exception is thrown if {\em line} contains a negative * untagged response and {\em checkline} is true. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ gint Imap4::readline (std::string &line, gboolean print, gboolean check, gboolean checkline) throw (imap_err) { // Read line gint status = socket_->read (line, print, check); if (check && (status != SOCKET_STATUS_OK)) throw imap_socket_err(); // Check for an untagged negative response if (!checkline) return status; // Save untagged response save_untagged_response (line); if (!last_untagged_response_) return status; // Parse specific untagged responses if (test_untagged_response (0, "OK", "[")) // see RFC 3501 7.1 save_response_code (ok_response_codes_); else if (test_untagged_response (0, "BYE")) { // see RFC 3501 7.1.5 g_warning (_("[%d] Server closes connection immediately:%s"), uin(), line.substr (5, line.size()-5).c_str()); throw imap_command_err (Mailbox::status() == MAILBOX_CHECK); } else if (test_untagged_response (0, "BAD")) { // see RFC 3501 7.1.3 g_warning (_("[%d] Internal server failure or unknown error:%s"), uin(), line.substr (5, line.size()-5).c_str()); throw imap_command_err(); } else if (test_untagged_response (0, "NO")) { // see RFC 3501 7.1.2 g_warning (_("[%d] Warning from server:%s"), uin(), line.substr (4, line.size()-4).c_str()); } return status; } /** * Read one line from the server and ignore warning and information message * lines. * * @param line String that contains the read line if the call was * successful (i.e. the return value is SOCKET_STATUS_OK), * the value is undetermined otherwise * @param print Shall the read lines be printed in debug mode? * The default is true. * @param check Shall the return value of the Socket::read() command be * checked? The default is true. * @param checkline Shall {\em line} be checked for an untagged negative * response? The default is true. * @return Return value of the Socket::read() command, this is always * SOCKET_STATUS_OK if {\em check} is true. * @exception imap_command_err * This exception is thrown if {\em line} contains a negative * untagged response and {\em checkline} is true. * @exception imap_dos_err * This exception is thrown when a DoS attack is suspected. * @exception imap_socket_err * This exception is thrown if a network error occurs. * @see The description of the method Imap4::readline() contains a * more extensive description for the parameters {\em check} * and {\em checkline} and some information regarding * exception handling. */ gint Imap4::readline_ignoreinfo (std::string &line, gboolean print, gboolean check, gboolean checkline) throw (imap_err) { gint cnt = 1 + biff_->value_uint ("prevdos_ignore_info"), status; do { status = readline (line, print, check, checkline); // Check for information or warning message if (!last_untagged_response_) break; if (last_untagged_response_key_ == "OK") continue; if (last_untagged_response_key_ != "NO") break; } while ((status == SOCKET_STATUS_OK) && (cnt--)); if (cnt < 0) throw imap_dos_err(); return status; } gnubiff-2.2.16/src/org.gnome.panel.applet.GnubiffApplet.panel-applet.in.in0000664000175000017500000000037112474422122023255 00000000000000[Applet Factory] Id=GnubiffApplet_Factory Name=Gnubiff Applet Factory Description=gnubiff Applet Factory [GnubiffApplet] _Name=gnubiff _Description=Mail notification program Icon=@PKGDATADIR@/gnubiff.png BonoboId=OAFIID:GNOME_gnubiffApplet_Factory gnubiff-2.2.16/src/Makefile.am0000644000175000017500000001062112474422122012766 00000000000000INCLUDES = \ $(FAM_CFLAGS) \ $(GNUBIFF_DEP_CFLAGS) \ $(GNOME_DEP_CFLAGS) \ -DGNUBIFF_LOCALEDIR=\""$(datadir)/locale"\" \ -DGNUBIFF_DATADIR=\""$(pkgdatadir)"\" \ -DGNUBIFF_ICONDIR=\""$(datadir)/pixmaps"\" \ -DGNUBIFF_UIDIR=\""$(datadir)/gnome-2.0/ui"\" \ -DREAL_DATADIR=\""$(datadir)"\" \ -D_GNU_SOURCE \ -Wall -ansi -pedantic -export-dynamic bin_PROGRAMS = gnubiff gnome_sources = \ ui-applet-gnome.cc ui-applet-gnome.h common_sources = \ gnubiff.cc \ biff.cc biff.h \ \ mailbox.cc mailbox.h \ header.cc header.h \ socket.cc socket.h \ support.cc support.h \ nls.h \ decoding.cc decoding.h \ local.cc local.h \ file.cc file.h \ imap4.cc imap4.h \ maildir.cc maildir.h \ mh.cc mh.h \ mh_basic.cc mh_basic.h \ mh_sylpheed.cc mh_sylpheed.h \ pop.cc pop.h \ apop.cc apop.h \ pop3.cc pop3.h \ \ option.cc option.h \ options.cc options.h \ gnubiff_options.cc gnubiff_options.h \ \ gui.cc gui.h \ ui-applet.cc ui-applet.h \ ui-applet-gtk.cc ui-applet-gtk.h \ ui-applet-gui.cc ui-applet-gui.h \ ui-applet-systray.cc ui-applet-systray.h \ ui-preferences.cc ui-preferences.h \ ui-authentication.cc ui-authentication.h \ ui-certificate.cc ui-certificate.h \ ui-properties.cc ui-properties.h \ gtk_image_animation.cc gtk_image_animation.h \ ui-popup.cc ui-popup.h \ \ signals.cc signals.h \ \ eggtrayicon.c eggtrayicon.h ## In case of compilation problem, just comment next lines ## then autoconf/automake/configure/make .cc.o: @printf "%-40s" "Compiling $<... " @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< @echo "[OK]" gnubiff$(EXEEXT): $(gnubiff_OBJECTS) $(gnubiff_DEPENDENCIES) @rm -f gnubiff$(EXEEXT) @printf "%-40s" "Linking $@ ... " $(CXXLINK) $(gnubiff_LDFLAGS) $(gnubiff_OBJECTS) $(gnubiff_LDADD) $(LIBS) @echo "[OK]" ## End of section to be commented in case of compilation problem gnubiff_SOURCES = $(common_sources) gnubiff_LDADD = $(INTLLIBS) $(GNUBIFF_DEP_LIBS) $(FAM_LIBS) panelappletdir = `pkg-config --variable=libpanel_applet_dir libpanelapplet-4.0` panelapplet_in_files = panelapplet_DATA = servicedir = /usr/share/dbus-1/services service_in_files = service_DATA = uidir = $(datadir)/gnome-2.0/ui ui_DATA = ## ## Additional files and directories for the gnome panel frontend ## if USE_GNOME gnubiff_SOURCES += $(gnome_sources) gnubiff_LDADD += $(GNOME_DEP_LIBS) panelapplet_in_files += org.gnome.panel.applet.GnubiffApplet.panel-applet.in panelapplet_DATA += $(panelapplet_in_files:.panel-applet.in=.panel-applet) ui_DATA += GNOME_gnubiffApplet.xml service_in_files += org.gnome.panel.applet.GnubiffApplet_Factory.service.in service_DATA += $(service_in_files:.service.in=.service) endif $(panelapplet_in_files): $(panelapplet_in_files:.panel-applet.in=.panel-applet.in.in) sed -e "s|\@BINDIR\@|$(bindir)|" \ -e "s|\@PKGDATADIR\@|$(pkgdatadir)|" $< > $@ # Following rule should be provided by intltool (INTLTOOL_PANEL_APPLET_RULE) %.panel-applet: %.panel-applet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache org.gnome.panel.applet.GnubiffApplet_Factory.service: $(service_in_files) sed -e "s|\@BINDIR\@|$(bindir)|" $< > $@ ## ## Files not yet (or not always) covered that must be included when creating ## a package for distribution ## EXTRA_DIST = \ org.gnome.panel.applet.GnubiffApplet_Factory.service.in \ org.gnome.panel.applet.GnubiffApplet.panel-applet.in.in \ GNOME_gnubiffApplet.xml \ gnubiff.schemas \ $(gnome_sources) ## ## Created files to be deleted when executing "make distclean" ## DISTCLEANFILES = \ org.gnome.panel.applet.GnubiffApplet.panel-applet.in \ org.gnome.panel.applet.GnubiffApplet.panel-applet \ org.gnome.panel.applet.GnubiffApplet_Factory.service gnubiff-2.2.16/src/gtk_image_animation.h0000644000175000017500000000526712474422122015103 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gtk_image_animation.h,v $ // Revision : $Revision: 1.4.2.2 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __GTK_IMAGE_ANIMATION_H__ #define __GTK_IMAGE_ANIMATION_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include #include class GtkImageAnimation { protected: std::string _filename; GtkImage * _image; GdkPixbufAnimation * _animation; GdkPixbuf * _original_pixbuf; GdkPixbuf * _scaled_pixbuf; std::vector _frame; gint _current; guint _original_width; guint _original_height; guint _scaled_width; guint _scaled_height; gint _timetag; guint _speed; GMutex * _object_mutex; public: /** * Base **/ GtkImageAnimation (GtkImage *image); ~GtkImageAnimation (void); /** * Misc. **/ gboolean open (std::string filename); void resize (guint width, guint height, gboolean locked=false); void start (void); void stop (void); /** * Access **/ void attach (GtkImage *image) {_image = image;} std::string filename (void) {return _filename;} guint original_width (void) {return _original_width;} guint original_height (void) {return _original_height;} guint scaled_width (void) {return _scaled_width;} guint scaled_height (void) {return _scaled_height;} /** * Callbacks **/ gboolean timeout (void); gboolean on_delete (void); gboolean on_destroy (void); void on_show (void); void on_hide (void); private: gboolean is_animation (void); }; #endif gnubiff-2.2.16/src/ui-applet-gtk.h0000644000175000017500000000424612474422122013574 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-gtk.h,v $ // Revision : $Revision: 1.15.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __APPLET_GTK_H__ #define __APPLET_GTK_H__ #include "ui-applet-gui.h" class AppletGtk : public AppletGUI { public: // ======================================================================== // base // ======================================================================== AppletGtk (class Biff *biff); AppletGtk (class Biff *biff, class Applet *applet); ~AppletGtk (void); // ======================================================================== // main // ======================================================================== gboolean update (gboolean init = false); void show (std::string name = "dialog"); // ======================================================================== // callbacks // ======================================================================== gboolean on_button_press (GdkEventButton *event); void on_menu_quit (void); }; #endif gnubiff-2.2.16/src/ui-properties.h0000644000175000017500000000743312474422122013721 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-properties.h,v $ // Revision : $Revision: 1.6.2.4 $ // Revision date : $Date: 2011/12/29 12:46:53 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __UI_PROPERTIES_H__ #define __UI_PROPERTIES_H__ #include "gnubiff_options.h" #include "gui.h" // Use of corresponding constants allows us to use functions like // Mailbox::standard_port() const gint TYPE_AUTODETECT = PROTOCOL_NONE; const gint TYPE_LOCAL = PROTOCOL_FILE; const gint TYPE_POP = PROTOCOL_POP3; const gint TYPE_IMAP = PROTOCOL_IMAP4; #define PROPERTIES(x) (static_cast(x)) class Properties : public GUI { protected: class Preferences * preferences_; class Mailbox * mailbox_; GtkComboBoxText *auth_cbox_; GtkComboBoxText *type_cbox_; GtkSizeGroup * group_; gint selected_type_; guint selected_auth_; public: // ======================================================================== // Base // ======================================================================== Properties (class Preferences *preferences); ~Properties (void); /* main */ gboolean create (gpointer callbackdata); void show (std::string name = "dialog"); // ======================================================================== // Access // ======================================================================== void select (class Mailbox *mailbox); class Mailbox *mailbox (void) {return mailbox_;} // ======================================================================== // GUI modification // ======================================================================== void update_view (void); void type_view (void); void set_type (gint type); void identity_view (gboolean visible); void details_view (gboolean visible); void connection_view (gboolean visible); void auth_view (gboolean visible); void certificate_view (gboolean visible); void mailbox_view (gboolean visible); void delay_view (gboolean visible); // ======================================================================== // Callbacks // ======================================================================== void on_delay (GtkWidget *widget); void on_port (GtkWidget *widget); void on_mailbox (GtkWidget *widget); void on_type_changed (void); void on_auth_changed (void); void on_browse_address (GtkWidget *widget); void on_browse_certificate (GtkWidget *widget); void on_ok (GtkWidget *widget); void on_apply (GtkWidget *widget); void on_cancel (GtkWidget *widget); gboolean on_destroy (GtkWidget *widget, GdkEvent *event); gboolean on_delete (GtkWidget *widget, GdkEvent *event); }; #endif gnubiff-2.2.16/src/ui-properties.cc0000644000175000017500000004156012474422122014056 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-properties.cc,v $ // Revision : $Revision: 1.25.2.6 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include "ui-preferences.h" #include "ui-properties.h" #include "mailbox.h" #include "imap4.h" #include "pop3.h" #include "apop.h" /** * "C" binding **/ extern "C" { void PROPERTIES_on_delay (GtkWidget *widget, gpointer data) { PROPERTIES(data)->on_delay (widget); } void PROPERTIES_on_port (GtkWidget *widget, gpointer data) { PROPERTIES(data)->on_port (widget); } void PROPERTIES_on_mailbox (GtkWidget *widget, gpointer data) { PROPERTIES(data)->on_mailbox (widget); } void PROPERTIES_on_type_changed (GtkComboBoxText *cbox, gpointer data) { PROPERTIES(data)->on_type_changed (); } void PROPERTIES_on_auth_changed (GtkComboBoxText *cbox, gpointer data) { PROPERTIES(data)->on_auth_changed (); } void PROPERTIES_on_browse_address (GtkWidget *widget, gpointer data) { PROPERTIES(data)->on_browse_address (widget); } void PROPERTIES_on_browse_certificate (GtkWidget *widget, gpointer data) { PROPERTIES(data)->on_browse_certificate (widget); } } Properties::Properties (Preferences *preferences) : GUI (GNUBIFF_DATADIR"/properties.ui") { preferences_ = preferences; mailbox_ = 0; group_ = 0; } Properties::~Properties (void) { GtkWidget *widget = get("dialog"); if (GTK_IS_WIDGET (widget)) { hide (); gtk_widget_destroy (widget); } if (gtkbuilder_) g_object_unref (G_OBJECT(gtkbuilder_)); gtkbuilder_ = NULL; } gboolean Properties::create (gpointer callbackdata) { gboolean result = GUI::create(this); group_ = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); gtk_size_group_add_widget (group_, get ("name")); gtk_size_group_add_widget (group_, get ("connection")); gtk_size_group_add_widget (group_, get ("authentication")); gtk_size_group_add_widget (group_, get ("certificate")); gtk_size_group_add_widget (group_, get ("delay")); gtk_size_group_add_widget (group_, get ("mailbox")); // Type menu type_cbox_ = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new ()); gtk_combo_box_text_append_text (type_cbox_, _("Autodetect")); gtk_combo_box_text_append_text (type_cbox_, _("File or Folder")); gtk_combo_box_text_append_text (type_cbox_, "Pop"); gtk_combo_box_text_append_text (type_cbox_, "Imap"); gtk_container_add (GTK_CONTAINER (get("type_container")), GTK_WIDGET (type_cbox_)); gtk_widget_show (GTK_WIDGET (type_cbox_)); g_signal_connect (G_OBJECT (type_cbox_), "changed", G_CALLBACK (PROPERTIES_on_type_changed), this); // Authentication menu auth_cbox_ = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new ()); gtk_combo_box_text_append_text (auth_cbox_, _("Autodetect")); gtk_combo_box_text_append_text (auth_cbox_, _("User/Pass")); gtk_combo_box_text_append_text (auth_cbox_, _("Encrypted User/Pass (apop)")); gtk_combo_box_text_append_text (auth_cbox_, "SSL"); gtk_combo_box_text_append_text (auth_cbox_, _("SSL with certificate")); gtk_container_add (GTK_CONTAINER (get("auth_container")), GTK_WIDGET (auth_cbox_)); gtk_widget_show (GTK_WIDGET (auth_cbox_)); g_signal_connect (G_OBJECT (auth_cbox_), "changed", G_CALLBACK (PROPERTIES_on_auth_changed), this); return result; } void Properties::select (Mailbox *mailbox) { if (!mailbox) { hide(); return; } mailbox_ = mailbox; selected_auth_ = mailbox->authentication(); selected_type_ = -1; update_view (); } void Properties::show (std::string name) { if (!mailbox_) return; select (mailbox_); gtk_widget_show (get("dialog")); } // ======================================================================== // Callbacks // ======================================================================== void Properties::on_delay (GtkWidget *widget) { gint minutes = (gint) gtk_spin_button_get_value (GTK_SPIN_BUTTON(get("minutes_spin"))); gint seconds = (gint) gtk_spin_button_get_value (GTK_SPIN_BUTTON(get("seconds_spin"))); if ((minutes == 0) && (seconds < 5)) gtk_spin_button_set_value (GTK_SPIN_BUTTON(get("seconds_spin")), 5); } void Properties::on_port (GtkWidget *widget) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (get("standard_port_radio")))) gtk_widget_set_sensitive (get("port_spin"), false); else gtk_widget_set_sensitive (get("port_spin"), true); } void Properties::on_mailbox (GtkWidget *widget) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (get("standard_mailbox_radio")))) gtk_widget_set_sensitive (get("mailbox_entry"), false); else gtk_widget_set_sensitive (get("mailbox_entry"), true); } void Properties::on_type_changed (void) { selected_type_ = gtk_combo_box_get_active (GTK_COMBO_BOX (type_cbox_)); switch (selected_type_) { case TYPE_AUTODETECT: gtk_widget_set_sensitive (get ("browse_address"), true); identity_view (false); details_view (false); break; case TYPE_LOCAL: gtk_widget_set_sensitive (get("browse_address"), true); identity_view (false); details_view (false); break; case TYPE_POP: gtk_widget_set_sensitive (get("browse_address"), false); identity_view (true); details_view (true); auth_view (true); connection_view (true); certificate_view (false); mailbox_view (false); delay_view (true); break; case TYPE_IMAP: gtk_widget_set_sensitive (get("browse_address"), false); identity_view (true); details_view (true); auth_view (true); connection_view (true); certificate_view (false); mailbox_view (true); delay_view (true); break; } } void Properties::on_auth_changed (void) { selected_auth_ = gtk_combo_box_get_active (GTK_COMBO_BOX (auth_cbox_)); switch (selected_auth_) { case AUTH_CERTIFICATE: certificate_view (true); break; case AUTH_APOP: case AUTH_AUTODETECT: case AUTH_SSL: case AUTH_USER_PASS: default: certificate_view (false); break; } // Maybe the standard port has changed: Update the displayed connection // details connection_view (true); } void Properties::on_browse_address (GtkWidget *widget) { browse (_("Browse for a file or folder"), "address_entry", true); } void Properties::on_browse_certificate (GtkWidget *widget) { browse (_("Browse for a certificate file"), "certificate_entry"); } void Properties::on_ok (GtkWidget *widget) { on_apply (widget); preferences_->added(0); hide (); } void Properties::on_apply (GtkWidget *widget) { if (!mailbox_) return; // Save old address for comparing std::string oldaddress = mailbox_->address (); // Retrieve all values of the options from the GUI elements mailbox_->update_gui (OPTSGUI_GET, OPTGRP_MAILBOX, gtkbuilder_, filename_); mailbox_->authentication (selected_auth_); // Here we need to update or transform mailbox according to several criterion: // - If type is autodetect we just set protocol to PROTOCOL_NONE and next mail // check will lookup for mailbox format // - If type is LOCAL: See below // First case: type has been set to autodetect, we simply put procotol // to PROTOCOL_NONE and lookup will be done automatically. if (selected_type_ == TYPE_AUTODETECT) { mailbox_->protocol (PROTOCOL_NONE); Mailbox *mailbox = new Mailbox (*mailbox_); preferences_->biff()->replace_mailbox (mailbox_, mailbox); } // Second case: type has been set to local if (selected_type_ == TYPE_LOCAL) { Mailbox *mailbox=NULL; if (((mailbox_->protocol() != PROTOCOL_FILE) && (mailbox_->protocol() != PROTOCOL_MH) && (mailbox_->protocol() != PROTOCOL_MH_BASIC) && (mailbox_->protocol() != PROTOCOL_MH_SYLPHEED) && (mailbox_->protocol() != PROTOCOL_MAILDIR)) || (mailbox_->address() == oldaddress)) { // Something changed. Try to determine type now. This allows // setting the right mailbox now, so the properties dialog will // show the correct mailbox type if the user opens this dialog // before closing the preferences dialog mailbox_->protocol (PROTOCOL_NONE); // If possible create a correct mailbox, otherwise a generic one // (to force lookup) if (!(mailbox = Mailbox::lookup_local (*mailbox_))) mailbox = new Mailbox (*mailbox_); preferences_->biff()->replace_mailbox (mailbox_, mailbox); } } // Third case: type is set to imap else if (selected_type_ == TYPE_IMAP) { // Protocol was not imap4 or mailbox was unknown, we change mailbox if ((mailbox_->protocol() != PROTOCOL_IMAP4) || (mailbox_->status() == MAILBOX_UNKNOWN)) { Mailbox *mailbox = new Imap4 (*mailbox_); preferences_->biff()->replace_mailbox (mailbox_, mailbox); } } // Fourth case: type is set to pop else if (selected_type_ == TYPE_POP) { if (((mailbox_->protocol() != PROTOCOL_APOP) || (mailbox_->status() == MAILBOX_UNKNOWN)) && (selected_auth_ == AUTH_APOP)) { Mailbox *mailbox = new Apop (*mailbox_); preferences_->biff()->replace_mailbox (mailbox_, mailbox); } else if ((mailbox_->protocol() != PROTOCOL_POP3) || (mailbox_->status() == MAILBOX_UNKNOWN)) { Mailbox *mailbox = new Pop3 (*mailbox_); preferences_->biff()->replace_mailbox (mailbox_, mailbox); } } preferences_->synchronize (); } void Properties::on_cancel (GtkWidget *widget) { hide (); Preferences *prefs = preferences_; if (prefs->added()) { prefs->biff()->remove_mailbox (prefs->biff()->get(prefs->added()->uin())); prefs->added(0); prefs->synchronize (); } } gboolean Properties::on_destroy (GtkWidget *widget, GdkEvent *event) { on_cancel (0); return TRUE; } gboolean Properties::on_delete (GtkWidget *widget, GdkEvent *event) { on_cancel (0); return TRUE; } // ======================================================================== // // GUI modification // // ======================================================================== void Properties::update_view (void) { // in case there is no mailbox to update view from if (!mailbox_) return; // Insert the values of the options into the GUI widgets and update // widget status mailbox_->update_gui (OPTSGUI_UPDATE, OPTGRP_MAILBOX, gtkbuilder_, filename_); type_view (); } void Properties::type_view (void) { // in case there is no mailbox to get type from if (!mailbox_) return; gtk_widget_set_sensitive (get("browse_address"), true); identity_view (false); details_view (false); auth_view (false); certificate_view (false); mailbox_view (false); delay_view (false); guint protocol = mailbox_->protocol (); selected_type_ = TYPE_AUTODETECT; if ((protocol == PROTOCOL_FILE) || (protocol == PROTOCOL_MH) || (protocol == PROTOCOL_MH_BASIC) || (protocol == PROTOCOL_MH_SYLPHEED) || (protocol == PROTOCOL_MAILDIR)) { selected_type_ = TYPE_LOCAL; } else if ((protocol == PROTOCOL_POP3) || (protocol == PROTOCOL_APOP)) { selected_type_ = TYPE_POP; gtk_widget_set_sensitive (get("browse_address"), false); identity_view (true); details_view (true); delay_view (true); auth_view (true); } else if ((protocol == PROTOCOL_IMAP4)) { selected_type_ = TYPE_IMAP; gtk_widget_set_sensitive (get("browse_address"), false); identity_view (true); details_view (true); delay_view (true); mailbox_view (true); auth_view (true); } connection_view (true); gtk_combo_box_set_active (GTK_COMBO_BOX (type_cbox_) ,selected_type_); } void Properties::identity_view (gboolean visible) { if (visible) { gtk_widget_show (get("username")); gtk_widget_show (get("username_entry")); gtk_widget_show (get("password")); gtk_widget_show (get("password_entry")); } else { gtk_widget_hide (get("username")); gtk_widget_hide (get("username_entry")); gtk_widget_hide (get("password")); gtk_widget_hide (get("password_entry")); } } void Properties::details_view (gboolean visible) { if (visible) { if (!gtk_widget_get_visible (get("details_expander"))) { gtk_widget_show (get("details_expander")); gtk_size_group_add_widget (group_, get ("connection")); gtk_size_group_add_widget (group_, get ("authentication")); gtk_size_group_add_widget (group_, get ("certificate")); gtk_size_group_add_widget (group_, get ("delay")); gtk_size_group_add_widget (group_, get ("mailbox")); } } else { if (gtk_widget_get_visible (get("details_expander"))) { gtk_widget_hide (get("details_expander")); gtk_size_group_remove_widget (group_, get ("connection")); gtk_size_group_remove_widget (group_, get ("authentication")); gtk_size_group_remove_widget (group_, get ("certificate")); gtk_size_group_remove_widget (group_, get ("delay")); gtk_size_group_remove_widget (group_, get ("mailbox")); } } } /** * Show or hide the widgets for setting the connection port. This function * also sets the label for the standard port of the current selection. * * Note: If calling several Properties::..._view(...) functions this one must * be called after Properties::auth_view(...)! * * @param visible Whether the widgets shall be visible */ void Properties::connection_view (gboolean visible) { // Show or hide the widgets if (visible) gtk_widget_show (get ("connection_alignment")); else gtk_widget_hide (get ("connection_alignment")); // Set the standard port label std::stringstream ss; ss << "(" << Mailbox::standard_port (selected_type_, selected_auth_, false) << ")"; gtk_label_set_text (GTK_LABEL (get ("label_standard_port")), ss.str().c_str()); } void Properties::auth_view (gboolean visible) { if (visible) gtk_widget_show (get("authentication_alignment")); else { gtk_widget_hide (get("authentication_alignment")); return; } // #ifdef HAVE_CRYPTO // if (selected_type_ == TYPE_POP) // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/Apop"), true); // else // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/Apop"), false); // #else // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/Apop"), false); // #endif // #ifdef HAVE_LIBSSL // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/SSL"), true); // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/Certificate"), true); // #else // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/SSL"), false); // gtk_widget_set_sensitive (gtk_ui_manager_get_widget (auth_manager_, "/Auth/Certificate"), false); // #endif // Get authentication method guint auth = AUTH_AUTODETECT; if (selected_auth_ == AUTH_NONE) auth = mailbox_->authentication(); else auth = selected_auth_; // Now we check what are available authentication methods #ifndef HAVE_CRYPTO if (auth == AUTH_APOP) auth = AUTH_USER_PASS; #endif #ifndef HAVE_LIBSSL if ((auth == AUTH_SSL) || (auth == AUTH_CERTIFICATE)) # ifdef HAVE_CRYPTO if (selected_type_ == TYPE_POP) auth = AUTH_APOP; # else auth = AUTH_USER_PASS; # endif #endif // Just in case "encrypted user pass" was selected and we just switch // to an imap mailbox (where apop encryption is not possible) if ((auth == AUTH_APOP) && (selected_type_ != TYPE_POP)) { #ifdef HAVE_LIBSSL auth = AUTH_SSL; #else auth = AUTH_USER_PASS; #endif } gtk_combo_box_set_active (GTK_COMBO_BOX (auth_cbox_), auth); certificate_view (auth == AUTH_CERTIFICATE); selected_auth_ = auth; } void Properties::certificate_view (gboolean visible) { if (visible) gtk_widget_show (get("certificate_alignment")); else gtk_widget_hide (get("certificate_alignment")); } void Properties::mailbox_view (gboolean visible) { if (visible) gtk_widget_show (get("mailbox_alignment")); else gtk_widget_hide (get("mailbox_alignment")); } void Properties::delay_view (gboolean visible) { if (visible) gtk_widget_show (get("delay_alignment")); else gtk_widget_hide (get("delay_alignment")); } gnubiff-2.2.16/src/option.h0000644000175000017500000002363312474422122012422 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: option.h,v $ // Revision : $Revision: 1.12.2.2 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : One option for gnubiff // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __OPTION_H__ #define __OPTION_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "decoding.h" const guint OPTGRP_NONE = 0; const guint OPTGRP_ALL = (guint)-1; /// No flags const guint OPTFLG_NONE = 0; /// Shall the string be tested for being the name of a regular file? (string) const guint OPTFLG_TEST_FILE = 1; /// Are only the given values allowed? (guint) const guint OPTFLG_ID_INT_STRICT = 2; /// The option's value is fixed. const guint OPTFLG_FIXED = 4; /// The option's value is set automatically. const guint OPTFLG_AUTO = 8; /// The option will not be saved const guint OPTFLG_NOSAVE = 16; /** If this option is changed, other options or variables have to be updated * automatically. This flag is only checked when accessing to the values * via the Options class, not when accessing to the option directly.*/ const guint OPTFLG_CHANGE = 32; /** If this option is read, it has to be updated before, because it depends * on the values of other options or variables. This flag is only checked * when accessing to the values via the Options class, not when accessing to * the option directly.*/ const guint OPTFLG_UPDATE = 64; /// The option is a space separated list of strings (string) const guint OPTFLG_STRINGLIST = 128; /** The option will not be shown in the expert dialog. This flag should only be * used for internal options that cannot be changed. Options that may be of * information interest for the user should not be flagged.*/ const guint OPTFLG_NOSHOW = 256; /** This option is deprecated. It is only present to load and convert old * configuration files.*/ const guint OPTFLG_DEPRECATED = 512; /// Option cannot be changed by the user const guint OPTFLG_USER_NO_CHANGE = OPTFLG_FIXED | OPTFLG_AUTO; enum OptionType {OPTTYPE_NONE = 0, OPTTYPE_UINT, OPTTYPE_STRING, OPTTYPE_BOOL}; enum OptionGUI {OPTGUI_NONE = 0, OPTGUI_TOGGLE, OPTGUI_SPIN, OPTGUI_ENTRY, OPTGUI_FONT, OPTGUI_RADIO}; class Option : public Decoding { public: Option (); Option (std::string name, guint group, std::string help, guint flags = OPTFLG_NONE, OptionGUI gui = OPTGUI_NONE, std::string gui_name = std::string("")); /// Destructor. virtual ~Option () {} virtual std::string type_string (void) {return "none";} virtual std::string to_string (void) {return std::string("");} virtual gboolean from_string (const std::string &value) {return false;} virtual void set_gui (std::vector &widgets) {} virtual void get_gui (std::vector &widgets) {} /** * Reset the option to the default value. * * Remark: Instead of calling this function directly better call * Options::reset(). This function handles flags like OPTFLG_CHANGE! */ virtual void reset (void) {} virtual gboolean is_default (void) {return false;} virtual std::string default_string (void) {return std::string("");} virtual Option *copy (void) {return new Option(*this);} std::string flags_string (std::string sep = std::string("; ")); /// Access function to Option::flags_ guint flags (void) const {return flags_;} /// Access function to Option::group_ guint group (void) const {return group_;} /// Access function to Option::gui_ OptionGUI gui (void) const {return gui_;} /// Access function to Option::gui_name_ std::string gui_name (void) const {return gui_name_;} /// Access function to Option::help std::string help (void) const {return help_;} /// Access function to Option::name_ std::string name (void) const {return name_;} /// Access function to Option::type_ OptionType type (void) const {return type_;} protected: /// Name of the option std::string name_; /// Type of the option OptionType type_; /// Group to which the option belongs guint group_; /// Short description of the option std::string help_; /** Type of the GUI element corresponding to this option in the preferences * dialog. */ OptionGUI gui_; /** Name of the GUI element corresponding to this option in the preferences * dialog. */ std::string gui_name_; /// Flags guint flags_; }; class Option_UInt : public Option { public: Option_UInt (std::string name, guint group, std::string help, guint def, guint flags, const guint array_int[], const gchar *array_id[], OptionGUI gui = OPTGUI_NONE, std::string gui_name = std::string("")); Option_UInt (std::string name, guint group, std::string help, guint def, guint flags = OPTFLG_NONE, OptionGUI gui = OPTGUI_NONE, std::string gui_name = std::string("")); std::string type_string (void) {return ((flags_ & OPTFLG_ID_INT_STRICT) ? "enum" : "unsigned int");} std::string to_string (void); std::string default_string (void); gboolean from_string (const std::string &value); void get_gui (std::vector &widgets); void set_gui (std::vector &widgets); void reset (void); std::string allowed_ids (std::string sep = std::string(" ")); gboolean is_default (void) {return value_ == default_;} Option *copy (void) {return new Option_UInt(*this);} /// Access function to Option_UInt::value_ guint value (void) {return value_;} /// Access function to Option_UInt::value_ void value (guint val) {value_ = val;} const std::string value_to_string (guint val); guint string_to_value (const std::string &str); protected: /// Value of the option guint value_; /// Default value of the option guint default_; /// Map for converting identifiers to values std::map id_int_; /// Map for converting values to identifiers std::map int_id_; }; class Option_Bool : public Option_UInt { public: Option_Bool (std::string name, guint group, std::string help, gboolean def, guint flags = OPTFLG_NONE, OptionGUI gui = OPTGUI_NONE, std::string gui_name = std::string(""), const gchar *gui_sensitive[] = NULL, const gchar *gui_show[] = NULL); Option *copy (void) {return new Option_Bool(*this);} std::string type_string (void) {return "bool";} /// Access function to Option_UInt::value_ gboolean value (void) {return (gboolean)value_;} /// Access function to Option_UInt::value_ void value (gboolean val) {value_ = (guint)val;} /// Access function to Option_UInt::gui_sensitive_ void gui_sensitive (std::set &gs) {gs = gui_sensitive_;} /// Access function to Option_UInt::gui_sensitive_neg_ void gui_show (std::set &gs) {gs = gui_show_;} private: static const gchar *ids_[3]; static const guint ints_[3]; /* GUI widgets that are sensitive to this boolean. If the * negated boolean should be taken into account the widget's name should * be prefixed by a '!' */ std::set gui_sensitive_; /* GUI widgets that are shown/hidden depending on this boolean. If the * negated boolean should be taken into account the widget's name should * be prefixed by a '!' */ std::set gui_show_; }; class Option_String : public Option { public: Option_String (std::string name, guint group, std::string help, std::string def, guint flags = OPTFLG_NONE, OptionGUI gui = OPTGUI_NONE, std::string gui_name = std::string("")); std::string type_string (void) {return ((flags_ & OPTFLG_STRINGLIST) ? "list (strings)" : "string");} std::string to_string (void); std::string default_string (void); gboolean from_string (const std::string &value); void get_gui (std::vector &widgets); void set_gui (std::vector &widgets); void reset (void); gboolean is_default (void) {return value_ == default_;} Option *copy (void) {return new Option_String(*this);} void set_values (const std::set &values, gboolean empty=true); void get_values (std::set &values, gboolean empty = true); void get_values (std::vector &values, gboolean empty = true); void get_vector (std::vector &vector, gchar sep = ' ', gboolean empty = true); /// Access function to Option_UInt::value_ std::string value (void) {return value_;} /// Access function to Option_UInt::value_ void value (const std::string val) {from_string (val);} protected: /// Value of the option std::string value_; /// Default value of the option std::string default_; }; class Option_Group { public: Option_Group (); Option_Group (std::string name, guint id, std::string help); /// Access function to Option::group_ guint id (void) {return id_;} /// Access function to Option::help_ std::string help (void) {return help_;} /// Access function to Option::name_ std::string name (void) {return name_;} protected: /// Name of the group std::string name_; /// Group ID guint id_; /// Short description of the group's options std::string help_; }; #endif gnubiff-2.2.16/src/mh.cc0000644000175000017500000000756012474422122011655 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mh.cc,v $ // Revision : $Revision: 1.17.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include "mh.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The local mailbox for the mh protocol is created from * scratch. * * @param biff Pointer to the instance of Gnubiff. */ Mh::Mh (Biff *biff) : Mh_Basic (biff) { value ("protocol", PROTOCOL_MH); } /** * Constructor. The local mailbox for the mh protocol is created by * taking the attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Mh::Mh (const Mailbox &other) : Mh_Basic (other) { value ("protocol", PROTOCOL_MH); } /// Destructor Mh::~Mh (void) { } // ======================================================================== // main // ======================================================================== /** * Get message numbers of the mails to be parsed. In the mh protocol the * message numbers of unread mails are stored in the file ".mh_sequences". * * @param msn Reference to a vector in which the message numbers are * returned * @param empty Whether the vector shall be emptied before obtaining the * message numbers (the default is true) * @exception local_file_err * This exception is thrown when the file ".mh_sequences" * could not be opened. * @exception local_info_err * This exception is thrown when the ".mh_sequences" file * can't be parsed successfully. */ void Mh::get_messagenumbers (std::vector &msn, gboolean empty) throw (local_err) { // Empty the vector if wished for if (empty) msn.clear (); // Open file std::string filename = add_file_to_path (address (), ".mh_sequences"); std::ifstream file; file.open (filename.c_str ()); if (!file.is_open ()) throw local_file_err (); // Parse mh sequences and try to find the unseen sequence std::string line; getline (file, line); while (!file.eof()) { // Got it! if (line.find ("unseen:") == 0) { line = line.substr (7); // size of "unseen:" is 7 if (!numbersequence_to_vector (line, msn)) throw local_info_err(); break; } // Read next line getline (file, line); } // Close file file.close(); } /** * Give the name of the file that shall be monitored by FAM. For the mh * protocol this is the ".mh_sequences" file. * * @return Name of the file to be monitored. */ std::string Mh::file_to_monitor (void) { return add_file_to_path (address(), std::string(".mh_sequences")); } gnubiff-2.2.16/src/ui-preferences.h0000644000175000017500000001073012474422122014020 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-preferences.h,v $ // Revision : $Revision: 1.13.2.2 $ // Revision date : $Date: 2008/04/25 22:53:15 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __UI_PREFERENCES_H__ #define __UI_PREFERENCES_H__ #include "gui.h" #include "ui-properties.h" enum { COLUMN_UIN, COLUMN_MAILBOX_STOCK_ID, COLUMN_SSL_ICON, COLUMN_MAILBOX, COLUMN_FORMAT, COLUMN_STATUS_STOCK_ID, COLUMN_SECURITY_STOCK_ID, N_COLUMNS }; enum { COL_EXP_ID, COL_EXP_NAME, COL_EXP_GROUPNAME, COL_EXP_TYPE, COL_EXP_VALUE, COL_EXP_NAME_ITALIC, COL_EXP_EDITABLE, COL_EXP_N}; #define PREFERENCES(x) (static_cast(x)) class Preferences : public GUI { protected: class Biff * biff_; // biff class Mailbox * selected_; // current selected mailbox class Mailbox * added_; // last added mailbox class Properties * properties_; // properties ui public: /** * Base **/ Preferences (class Biff *biff); ~Preferences (void); gint create (gpointer callbackdata); /** * Main **/ void show (std::string name = "dialog"); void hide (std::string name = "dialog"); void synchronize (void); void synchronize (class Mailbox *mailbox, GtkListStore *store, GtkTreeIter *iter); void apply (void); /** * Access **/ class Properties *properties (void) {return properties_;} class Biff * biff (void) {return biff_;} class Mailbox *added (void) {return added_;} void added (class Mailbox *mailbox) {added_ = mailbox;} class Mailbox *selected (void) {return selected_;} void selected (class Mailbox *mailbox) { selected_ = mailbox; if (properties_) properties_->select (mailbox); } /** * Callbacks **/ void on_add (GtkWidget *widget); void on_remove (GtkWidget *widget); void on_properties (GtkWidget *widget); void on_stop (GtkWidget *widget); void on_close (GtkWidget *widget); void on_browse_newmail_image(GtkWidget *widget); void on_browse_nomail_image (GtkWidget *widget); void on_selection (GtkTreeSelection *selection); void on_check_changed (GtkWidget *widget); gboolean on_destroy (GtkWidget *widget, GdkEvent *event); gboolean on_delete (GtkWidget *widget, GdkEvent *event); /** * Expert dialog **/ void expert_create (void); void expert_add_option_list (void); void expert_toggle_option (void); void expert_update_option_list (void); void expert_edit_value (void); void expert_update_option (const gchar *name, class Options *options, GtkTreeIter *iter); void expert_set_selected_option (const gchar *new_text); void expert_on_selection (GtkTreeSelection *selection); gboolean expert_show_context_menu (GdkEventButton *event); void expert_search (void); protected: gboolean expert_get_option (class Options *&options,class Option *&option); gboolean expert_get_option (class Options *&options, class Option *&option, GtkTreeIter &treeiter); // Treeview widget for the expert option editing dialog GtkTreeView *expert_treeview; // Liststore for the options in the expert option editing dialog GtkListStore *expert_liststore; // Treeview column that contains the values in the expert option dialog GtkTreeViewColumn *expert_col_value; // Textview for displaying the description of the currently selected option GtkTextView *expert_textview; // Buffer of the description of the currently selected option GtkTextBuffer *expert_textbuffer; }; #endif gnubiff-2.2.16/src/biff.cc0000644000175000017500000006252312474422122012157 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: biff.cc,v $ // Revision : $Revision: 1.65.2.3 $ // Revision date : $Date: 2008/04/25 22:52:58 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include #include #include #include #ifdef USE_GNOME # include "ui-applet-gnome.h" #endif #include "apop.h" #include "biff.h" #include "file.h" #include "imap4.h" #include "mailbox.h" #include "maildir.h" #include "mh.h" #include "mh_basic.h" #include "mh_sylpheed.h" #include "pop3.h" #include "signals.h" #include "ui-applet-gtk.h" #include "ui-applet-systray.h" // ============================================================================ // "C" binding // ============================================================================ extern "C" { void BIFF_xml_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error) { if (data) BIFF(data)->xml_start_element (context, element_name, attribute_names, attribute_values, error); else unknown_internal_error (); } void BIFF_xml_end_element (GMarkupParseContext *context, const gchar *element_name, gpointer data, GError **error) { if (data) BIFF(data)->xml_end_element (context, element_name, error); else unknown_internal_error (); } void BIFF_xml_error (GMarkupParseContext *context, GError *error, gpointer data) { if (data) BIFF(data)->xml_error (context, error); else unknown_internal_error (); } } // ============================================================================ // base // ============================================================================ Biff::Biff (guint ui_mode, std::string filename) { mutex_ = g_mutex_new (); // Authentication mutex auth_mutex_ = g_mutex_new (); // Add options add_options (OPTGRP_ALL & (~OPTGRP_MAILBOX), true); // Set session specific options if (filename.size() > 0) value ("config_file", filename); value ("ui_mode", ui_mode); // Does the configuration file exist? std::ifstream file; file.open (value_gchar ("config_file")); if (file.is_open ()) { file.close (); load (); } else { g_warning (_("Configuration file (%s) not found!"), value_gchar ("config_file")); mailbox_.push_back (new Mailbox (this)); } value ("config_file_loaded", true); // Remove all deprecated options remove_options (OPTFLG_DEPRECATED); for (guint i = 0; i < mailbox_.size(); i++) mailbox_[i]->remove_options (OPTFLG_DEPRECATED); // Applet switch (ui_mode) { #ifdef USE_GNOME case MODE_GNOME: applet_ = new AppletGnome (this); break; #endif case MODE_GTK: applet_ = new AppletGtk (this); break; case MODE_NOGUI: applet_ = new Applet (this); break; case MODE_SYSTEMTRAY: applet_ = new AppletSystray (this); break; default: applet_ = new AppletGtk (this); break; } // Initialize Signals Signals::init_signals (this); } /// Destructor Biff::~Biff (void) { } // ============================================================================ // access // ============================================================================ /** * Search in all mailboxes for the message with id {\em mailid}. * * @param mailid Gnubiff message identifier of the mail to find * @param mail Here the header of the found mail is returned. If no mail * with id {\em mailid} exists, {\em mail} remains unchanged. * @returns Boolean indicating if a mail exists or not. */ gboolean Biff::find_message (std::string mailid, Header &mail) { gboolean ok = false; g_mutex_lock (mutex_); for (guint i = 0; (i < mailbox_.size()) && !ok; i++) if (mailbox_[i]->find_mail (mailid, mail)) ok = true; g_mutex_unlock (mutex_); return ok; } Mailbox * Biff::mailbox (guint index) { if (index < mailbox_.size()) return mailbox_[index]; return 0; } Mailbox * Biff::get (guint uin) { Mailbox *find = 0; g_mutex_lock (mutex_); for (guint i = 0; i < mailbox_.size(); i++) if (mailbox_[i]->uin() == uin) { find = mailbox_[i]; break; } g_mutex_unlock (mutex_); return find; } // ============================================================================ // main -- mailbox handling // ============================================================================ /** * Add the new mailbox {\em mailbox} for monitoring. * * @param mailbox Mailbox to be added for monitoring. */ void Biff::add_mailbox (Mailbox *mailbox) { g_mutex_lock (mutex_); mailbox_.push_back (mailbox); g_mutex_unlock (mutex_); } /** * Get the number of mailboxes that are being monitored. * * @return Number of mailboxes. */ guint Biff::get_number_of_mailboxes (void) { g_mutex_lock (mutex_); guint size = mailbox_.size(); g_mutex_unlock (mutex_); return size; } /** * Get message headers from the messages in the mailboxes. If * {\em use_max_num} is true, the number of headers is limited to * {\em max_num}. If there are more message headers available than are to be * returned, from each mailbox the same number of headers is taken as far as * possible. * * @param use_max_num If true only a limited amount of headers is returned * (the default is false). * @param max_num If {\em use_max_num} is true, this is the maximum * number of message headers to be returned (the default * is 0). * @return Vector of message headers */ std::vector
Biff::get_message_headers (gboolean use_max_num, guint max_num) { g_mutex_lock (mutex_); // Get number of messages in each mailbox guint num_mails = 0, num_boxes = 0; num_boxes = mailbox_.size(); std::vector max (num_boxes); for (guint i = 0; i < num_boxes; i++) num_mails+= max[i] = mailbox_[i]->unreads(); // Distribute number of message headers std::vector count (num_boxes, 0); if (use_max_num) { guint index = 0, all = 0; num_mails = std::min (num_mails, max_num); while (all < num_mails) { if (count[index] < max[index]) { count[index]++; all++; } index = (index + 1) % num_boxes; } } else count = max; // Put all the headers to be displayed in one vector. // Note: In the mean time some headers may have been deleted, so less than // count[j] headers could be added to the vector std::vector
headers; for (guint j = 0; j < num_boxes; j++) mailbox_[j]->get_message_headers (headers, true, count[j]); g_mutex_unlock (mutex_); return headers; } /** * Get the number of unread messages in all mailboxes. * * @param num Here the number of unread messages is returned. * @return This boolean indicates whether there are new messages (true) * or not (false). */ gboolean Biff::get_number_of_unread_messages (guint &num) { std::vector::iterator mailbox; gboolean newmail = false; num = 0; g_mutex_lock (mutex_); mailbox = mailbox_.begin (); while (mailbox != mailbox_.end ()) { if ((*mailbox)->status () == MAILBOX_NEW) newmail = true; num += (*mailbox)->unreads (); mailbox++; } g_mutex_unlock (mutex_); return newmail; } /** * Determine if a password for the given mailbox {\em m} exists. If no * password exists yet this function tries to obtain it by: * \begin{itemize} * \item Looking at the other mailboxes. If one exists with the same * address, username and port (and a password) it is assumed that * this password is okay. * \item Asking the user. If no other mailbox with the correct parameters is * found the user has to enter the password in a dialog. * \end{\itemize} * * @param m the mailbox we want a password for * @return Boolean indicating whether a password could be obtained */ gboolean Biff::get_password_for_mailbox (Mailbox *m) { // Do we know the password already? if (!m->password().empty()) return true; // Remark: It's important to block thread before looking at other mailboxes // since one is maybe asking (using gui) for this password. g_mutex_lock (auth_mutex_); // Searching other mailboxes #if DEBUG g_message ("[%d] Looking for password for %s@%s:%d", m->uin(), m->username().c_str(), m->address().c_str(), m->port()); #endif for (guint i = 0; i < get_number_of_mailboxes (); i++) if ((mailbox(i) != m) && (mailbox(i)->address() == m->address()) && (mailbox(i)->username() == m->username()) && (mailbox(i)->port() == m->port()) && (!mailbox(i)->password().empty())) { m->password(mailbox(i)->password()); break; } // Ask the user if password is still not known if (m->password().empty()) { gdk_threads_enter (); applet_->get_password_for_mailbox (m); gdk_threads_leave (); } g_mutex_unlock (auth_mutex_); return !m->password().empty(); } /** * Mark all (obtained) messages from all mailboxes as read. */ void Biff::mark_messages_as_read (void) { std::vector::iterator mailbox; g_mutex_lock (mutex_); mailbox = mailbox_.begin (); while (mailbox != mailbox_.end ()) (*(mailbox++))->mark_messages_as_read (); g_mutex_unlock (mutex_); } /** * This function has to been called, when all (obtained) messages have been * displayed to the user. The status of the mailboxes will be updated. */ void Biff::messages_displayed (void) { std::vector::iterator mailbox; g_mutex_lock (mutex_); mailbox = mailbox_.begin (); while (mailbox != mailbox_.end ()) (*(mailbox++))->mail_displayed (); g_mutex_unlock (mutex_); } /** * Replace the mailbox {\em from} in the list of all mailboxes by the mailbox * {\em to}. The mailbox {\em from} will be destroyed. * * @param from Mailbox to be replaced. * @param to Mailbox that replaces the mailbox {\em from}. * @return NULL, if the mailbox {\em from} doesn't exist, otherwise a * pointer to the mailbox {\em to}. */ Mailbox * Biff::replace_mailbox (Mailbox *from, Mailbox *to) { Mailbox *inserted = NULL; g_mutex_lock (mutex_); for (std::vector::iterator i = mailbox_.begin(); i != mailbox_.end(); i++) if ((*i) == from) { (*i) = to; // Let the applet do necessary things before the mailbox can be // replaced applet_->mailbox_to_be_replaced (from, to); delete from; inserted = to; break; } g_mutex_unlock (mutex_); // Start monitoring the new mailbox if ((inserted) && (applet_->can_monitor_mailboxes ())) inserted->threaded_start (3); return inserted; } /** * Remove the mailbox {\em mailbox}. * * @param mailbox Mailbox to be removed. */ void Biff::remove_mailbox (Mailbox *mailbox) { g_mutex_lock (mutex_); for(std::vector::iterator i = mailbox_.begin(); i != mailbox_.end(); i++) if ((*i) == mailbox) { mailbox_.erase (i); break; } g_mutex_unlock (mutex_); } /** * Start monitoring all mailboxes. Optionally the delay {\em delay} can be * given, so monitoring starts later. * * @param delay Delay in seconds (the default is 0). */ void Biff::start_monitoring (guint delay) { #ifdef DEBUG if (delay) g_message ("Start monitoring mailboxes in %d second(s)", delay); else g_message ("Start monitoring mailboxes now"); #endif std::vector::iterator mailbox; g_mutex_lock (mutex_); mailbox = mailbox_.begin (); while (mailbox != mailbox_.end ()) (*(mailbox++))->threaded_start (delay); g_mutex_unlock (mutex_); } /** * Stop monitoring all mailboxes. */ void Biff::stop_monitoring (void) { #ifdef DEBUG g_message ("Stop monitoring mailboxes"); #endif std::vector::iterator mailbox; g_mutex_lock (mutex_); mailbox = mailbox_.begin (); while (mailbox != mailbox_.end ()) (*(mailbox++))->stop (); g_mutex_unlock (mutex_); } // ============================================================================ // options // ============================================================================ /** * This function is called when an option is changed that has the * OPTFLG_CHANGE flag set. * * @param option Pointer to the option that is changed. */ void Biff::option_changed (Option *option) { if (!option) return; // POPUP_FORMAT if (option->name() == "popup_format") { std::vector vec; (static_cast(option))->get_vector (vec, ':'); if (vec.size() < 3) return; value ("popup_size_sender", std::min (vec[0], 255), false); value ("popup_size_subject", std::min (vec[1], 255), false); value ("popup_size_date", std::min (vec[2], 255), false); return; } // POPUP_SIZE_SENDER, POPUP_SIZE_SUBJECT, POPUP_SIZE_DATE if ((option->name() == "popup_size_sender") || (option->name() == "popup_size_subject") || (option->name() == "popup_size_date")) { // Remark: Do not depend on these options, depend on "popup_format" // instead! std::stringstream ss; ss << value_uint ("popup_size_sender") << ":"; ss << value_uint ("popup_size_subject") << ":"; ss << value_uint ("popup_size_date"); value ("popup_format", ss.str()); return; } // UI_MODE if (option->name() == "ui_mode") { value ("gtk_mode", (static_cast(option))->value() == MODE_GTK); return; } // FILTER_GLOBAL_FIRST, FILTER_GLOBAL_LAST if ((option->name() == "filter_global_first") || (option->name() == "filter_global_last")) { for (unsigned int i = 0; i < mailbox_.size (); i++) mailbox_[i]->filter_create (); return; } } /** * This function is called when an option is to be read that needs updating * before. These options have to be marked by the OPTFLG_UPDATE flag. * * @param option Pointer to the option that is to be updated. */ void Biff::option_update (Option *option) { } /** * The loaded config file belongs to an old version of gnubiff. All options * with changed default values will be converted if possible. If the option * still has the old default value this is no problem, otherwise we might * give a warning message so the user can do this manually. * * If the config file belongs to a newer version of gnubiff, no conversion * will be done! */ void Biff::upgrade_options (void) { // Get version of gnubiff binary guint gnubiff_version = Support::version_to_integer (PACKAGE_VERSION); // Get config file version and reset internal version std::string config_version = value_string ("version"); guint version = 0; if (config_version == "0") config_version = "<=2.1.1"; else version = Support::version_to_integer (config_version); reset ("version"); // Check for newer version config file if (version > gnubiff_version) { g_warning (_("Loaded config file from newer gnubiff version \"%s\"."), config_version.c_str ()); return; } if (version == gnubiff_version) return; // Config file belongs to an older version of gnubiff g_warning (_("Loaded config file from old gnubiff version \"%s\"."), config_version.c_str ()); g_message (_("Trying to convert all options.")); // Store options that need manual conversion std::string options_bad; // Global options // Option: MIN_BODY_LINES if (version < 2001002) { if (value_uint ("min_body_lines") == 12) reset ("min_body_lines"); else options_bad += "\"min_body_lines\", "; } // Mailbox options for (guint i = 0; i < get_number_of_mailboxes (); i++) { Mailbox *mb = mailbox(i); // Option: ADDRESS (for maildir protocol) if ((version < 2001003) && (mb->protocol() == PROTOCOL_MAILDIR)) { const gchar* address = mb->address().c_str(); gchar *base = g_path_get_basename (address); if (base && (std::string(base) != "new")) { gchar *md_new = g_build_filename (address, "new", NULL); if (md_new) mb->address (md_new); g_free (md_new); g_free (base); } } #ifdef USE_PASSWORD // Option: PASSWORD if (version < 2002000) { std::string passphrase = value_string ("passphrase"); mb->password (Decoding::decrypt_password_legacy (passphrase, mb->password ())); } #endif } // End message if (options_bad.size() == 0) g_message (_("Successfully converted all options.")); else { options_bad = options_bad.substr (0, options_bad.size()-2); g_warning (_("Successfully converted some options. The following " "options must be updated manually: %s."), options_bad.c_str()); } } // ============================================================================ // i/o // ============================================================================ /** * Opens the new block {\em name} of options in the configuration file. * * @param name valid utf-8 character array for the name of the block */ void Biff::save_newblock (const gchar *name) { save_blocks.push_back (name); const gchar *fmt = "%*s<%s>\n"; gchar *esc = g_markup_printf_escaped(fmt,save_blocks.size()*2-2,"",name); save_file << esc; g_free (esc); } /** * Ends the last opened block of options in the configuration file. */ void Biff::save_endblock (void) { const gchar *fmt = "%*s\n"; gchar *esc = g_markup_printf_escaped(fmt, save_blocks.size()*2-2, "", save_blocks[save_blocks.size()-1]); save_file << esc; g_free (esc); save_blocks.pop_back (); } /** * Save all the given parameters into the configuration file. * * @param map Map of pairs (name, value) for the parameters to be saved. * @param block Name of the XML tag that encloses the block of parameters in * {\em map}. If it's the empty string (this is the default) no * block is generated. */ void Biff::save_parameters (std::map &map, std::string block) { const gchar *fmt = "%*s\n", *name; gchar *esc; if (block.size () > 0) save_newblock (block.c_str ()); std::map::iterator it = map.begin (); while (it != map.end ()) { name = it->first.c_str (); esc = g_markup_printf_escaped(fmt, save_blocks.size()*2, "", name, 28-strlen(name)-save_blocks.size()*2, "", it->second.c_str ()); save_file << esc; g_free(esc); it++; } if (block.size () > 0) save_endblock (); } /** * Save all option and mailboxes to the config file. If no config file * exists a new one is created that is readable only by the user. * * @return boolean indicating success */ gboolean Biff::save (void) { // Note: "stringstream" and standard C file access functions are used // instead of "ofstream" because there seems to be no way to set file // permissions without the susceptibility to race conditions when using // "ofstream" (Does ofstream respect the umask function?). // XML header save_blocks.clear(); save_file.str(std::string("")); save_file << "" << std::endl; save_newblock("configuration-file"); // Mailboxes std::map name_value; g_mutex_lock (mutex_); for (unsigned int i=0; i< mailbox_.size(); i++) { // Save options mailbox_[i]->to_strings (OPTGRP_MAILBOX, name_value); save_parameters (name_value, "mailbox"); } g_mutex_unlock (mutex_); // Save options common to all mailboxes (each group of options separate) std::map::iterator it = groups()->begin(); while (it != groups()->end()) { std::string name = it->second->name (); to_strings (it->first, name_value); it++; // Any options in this group to be saved? if (name_value.empty()) continue; save_parameters (name_value, name); } // End Header save_endblock(); // Write Configuration to file int fd = open (value_gchar ("config_file"), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if (fd==-1) return false; if (write(fd,save_file.str().c_str(),save_file.str().size())==-1) return false; if (close(fd)==-1) return false; return true; } gboolean Biff::load (void) { // Reset version. This must be done to detect pre 2.1.2 config files value ("version", "0"); mailbox_.clear(); // Is the configuration file a directory? const gchar *config_file = value_gchar ("config_file"); if (g_file_test (config_file, G_FILE_TEST_IS_DIR)) { g_warning ("Configuration file \"%s\" is a directory", config_file); return false; } // Open configuration file std::ifstream file; std::string line; file.open (config_file); if (!file.is_open ()) { mailbox_.push_back (new Mailbox (this)); g_warning (_("Cannot open your configuration file (%s)"), config_file); return false; } // Instantiate a new xml parser GMarkupParser parser; parser.start_element = BIFF_xml_start_element; parser.end_element = BIFF_xml_end_element; parser.text = 0; parser.passthrough = 0; parser.error = BIFF_xml_error; GMarkupParseContext *context; context = g_markup_parse_context_new (&parser, GMarkupParseFlags (0), this, 0); if (!context) { g_warning (_("Cannot create XML parser for config file")); return false; } // Parse the file gboolean status = TRUE; g_mutex_lock (mutex_); while ((!getline(file, line).eof()) && (status)) status = g_markup_parse_context_parse (context, line.c_str(), line.size(), 0); g_mutex_unlock (mutex_); g_markup_parse_context_free (context); // Check if we got at least one mailbox definition if (mailbox_.size() == 0) { g_warning (_("Found no mailbox definition in your configuration " "file (%s)"), value_gchar ("config_file")); mailbox_.push_back (new Mailbox (this)); } file.close (); // Do we have an config file from another version? if (value_string ("version") != PACKAGE_VERSION) upgrade_options (); return true; } /** * Callback function when parsing the config file. This function is called * when a new XML tag is parsed. * * @param context FIXME! * @param element_name Name of the XML tag * @param attribute_name array with the names of the attributes for the tag * @param attribute_values array with the values of the attributes for the tag * @param error FIXME! */ void Biff::xml_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, GError **error) { // Test parameters if ((element_name == NULL) || (attribute_names == NULL) || (attribute_values == NULL)) { unknown_internal_error (); return; } // All tags with the exception of the "parameter" tag start new if (std::string (element_name) != "parameter") buffer_load_.clear (); else { std::map temp; for (guint i = 0; attribute_names[i] != 0; i++) temp[attribute_names[i]] = attribute_values[i]; if (temp["name"].empty ()) { g_warning (_("Illegal parameter format in config file")); return; } buffer_load_[temp["name"]] = temp["value"]; } } void Biff::xml_end_element (GMarkupParseContext *context, const gchar *element_name, GError **error) { // Test parameters if (element_name == NULL) { unknown_internal_error (); return; } std::string element = element_name; // XML elements to be ignored if ((element == "parameter") || (element == "configuration-file")) return; // Mailbox if (element == "mailbox") { guint protocol = PROTOCOL_NONE, pos = mailbox_.size(); // Need to get protocol first if (buffer_load_.find ("protocol") == buffer_load_.end()) g_warning(_("No protocol specified for mailbox %d"), pos); else protocol = string_to_value ("protocol", buffer_load_["protocol"]); // Create mailbox switch (protocol) { case PROTOCOL_FILE: mailbox_.push_back (new File (this)); break; case PROTOCOL_MH: mailbox_.push_back (new Mh (this)); break; case PROTOCOL_MH_BASIC: mailbox_.push_back (new Mh_Basic (this)); break; case PROTOCOL_MH_SYLPHEED: mailbox_.push_back (new Mh_Sylpheed (this)); break; case PROTOCOL_MAILDIR: mailbox_.push_back (new Maildir (this)); break; case PROTOCOL_IMAP4: mailbox_.push_back (new Imap4 (this)); break; case PROTOCOL_POP3: mailbox_.push_back (new Pop3 (this)); break; case PROTOCOL_APOP: mailbox_.push_back (new Apop (this)); break; default: mailbox_.push_back (new Mailbox (this)); break; } // Get options mailbox_[pos]->from_strings (OPTGRP_MAILBOX, buffer_load_); } // Options common to all mailboxes else from_strings (OPTGRP_ALL & (~OPTGRP_MAILBOX), buffer_load_); } void Biff::xml_error (GMarkupParseContext *context, GError *error) { g_warning ("%s\n", error->message); } gnubiff-2.2.16/src/file.cc0000644000175000017500000001106412474422122012162 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: file.cc,v $ // Revision : $Revision: 1.19.2.1 $ // Revision date : $Date: 2007/09/08 14:57:56 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include "file.h" #include "nls.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The local mailbox for the file protocol is created from * scratch. * * @param biff Pointer to the instance of Gnubiff. */ File::File (Biff *biff) : Local (biff) { value ("protocol", PROTOCOL_FILE); } /** * Constructor. The local mailbox for the file protocol is created by * taking the attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ File::File (const Mailbox &other) : Local (other) { value ("protocol", PROTOCOL_FILE); } /// Destructor File::~File (void) { } // ======================================================================== // main // ======================================================================== /** * Get and parse new messages. * * @exception local_file_err * This exception is thrown if there is a problem when * opening, reading or manipulating the mailbox file. */ void File::fetch (void) throw (local_err) { struct stat file_stat; struct utimbuf timbuf; // First we save access time (if the user wants this) of the // mailfile to be able to reset it before exiting this function // because some mail clients (e.g. mutt) rely on this access time // to perform some operations. if (value_bool ("file_restore_atime")) { if (stat (address().c_str(), &file_stat) != 0) throw local_file_err (); timbuf.actime = file_stat.st_atime; timbuf.modtime = file_stat.st_mtime; } // Open mailbox for reading std::ifstream file; file.open (address().c_str()); if (!file.is_open()) { g_warning (_("Cannot open %s."), address().c_str()); throw local_file_err (); } std::vector mail; std::string line; gboolean header = true; // parsing mail header? guint cnt = 0, max_cnt = 1 + biff_->value_uint ("min_body_lines"); // Get maximum number of mails to catch guint maxnum = INT_MAX; if (biff_->value_bool ("use_max_mail")) maxnum = biff_->value_uint ("max_mail"); getline (file, line); while (!file.eof() && ((new_unread_.size() < maxnum))) { // Here we look for a "From " at a beginning of a line indicating // a new mail header. We then parse previous mail, reset mail // vector, store new line in it and go on reading file. if ((line.find ("From ", 0) == 0) && (mail.size() > 0)) { parse (mail); mail.clear(); header = true; } if ((line.size() == 0) && header) { header = false; cnt = max_cnt; } if ((header) || (cnt > 0)) { cnt--; mail.push_back (line); } // Read next line getline (file, line); } // Do not forget to parse the last one that cannot rely on "From " // from the next mail if (mail.size() > 1) parse (mail); // Close mailbox file file.close (); // Restore access and modification time (if wanted) if (value_bool ("file_restore_atime")) { utime (address().c_str(), &timbuf); // Get all pending FAM events. This is necassary because calling utime // causes FAM events. It may result in some new mails not being // noticed because of race conditions. fam_get_all_pending_events (); } } gnubiff-2.2.16/src/mh.h0000644000175000017500000000370312474422122011512 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mh.h,v $ // Revision : $Revision: 1.8.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __MH_H__ #define __MH_H__ #include #include #include "mh_basic.h" class Mh : public Mh_Basic { protected: public: // ======================================================================== // base // ======================================================================== Mh (class Biff *biff); Mh (const Mailbox &other); ~Mh (void); // ======================================================================== // main // ======================================================================== void get_messagenumbers (std::vector &msn, gboolean empty = true) throw (local_err); std::string file_to_monitor (void); }; #endif gnubiff-2.2.16/src/ui-popup.cc0000644000175000017500000003641012474422122013023 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-popup.cc,v $ // Revision : $Revision: 1.39.2.7 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include #include #include #include "ui-preferences.h" #include "ui-applet.h" #include "ui-popup.h" #include "mailbox.h" /** * "C" binding **/ extern "C" { gboolean POPUP_on_popdown (gpointer data) { if (data) return (static_cast(data))->on_popdown (); else unknown_internal_error (); return false; } gboolean POPUP_on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (data) return (static_cast(data))->on_button_press (event); else unknown_internal_error (); return false; } gboolean POPUP_on_button_release (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (data) return (static_cast(data))->on_button_release (event); else unknown_internal_error (); return false; } void POPUP_on_enter (GtkWidget *widget, GdkEventCrossing *event, gpointer data) { if (data) (static_cast(data))->on_enter (event); else unknown_internal_error (); } void POPUP_on_leave (GtkWidget *widget, GdkEventCrossing *event, gpointer data) { if (data) (static_cast(data))->on_leave (event); else unknown_internal_error (); } void POPUP_on_select (GtkTreeSelection *selection, gpointer data) { if (data) (static_cast(data))->on_select (selection); else unknown_internal_error (); } } Popup::Popup (Biff *biff) : GUI (GNUBIFF_DATADIR"/popup.ui") { biff_ = biff; poptag_ = 0; tree_selection_ = 0; consulting_ = false; // Create mutexes timer_mutex_ = g_mutex_new (); } Popup::~Popup (void) { // Free all mutexes g_mutex_lock (timer_mutex_); g_mutex_unlock (timer_mutex_); g_mutex_free (timer_mutex_); // Free allocated memory free_stored_strings (); } /** * Free all strings that have been stored for displaying the popup. */ void Popup::free_stored_strings (void) { GtkListStore *store; // Get tree store and clear it store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (get ("treeview")))); if (store) gtk_list_store_clear (store); // Free memory of strings displayed in popup previously for (guint i=0; i headers; headers = biff_->get_message_headers (biff_->value_bool ("popup_use_size"), biff_->value_uint ("popup_size")); // Sort headers gboolean mb; mb = Header::sort_headers (headers, biff_->value_string ("popup_sort_by")); // Now we populate the list std::vector
::iterator h = headers.begin(); std::vector
::iterator he = headers.end(); std::set firstmb; while (h != he) { gtk_list_store_append (store, &iter); guint size = 255; if (biff_->value_bool ("popup_use_format")) size = 1; // Subject gchar *subject = utf8_strndup ((*h)->subject().c_str(), std::max (size, biff_->value_uint ("popup_size_subject"))); // Date gchar *date = utf8_strndup ((*h)->date().c_str(), std::max (size, biff_->value_uint ("popup_size_date"))); // Sender gchar *sender = utf8_strndup ((*h)->sender().c_str(), std::max (size, biff_->value_uint ("popup_size_sender"))); // Mail identifier gchar *mailid = g_strdup ((*h)->mailid().c_str()); // The strings have to be stored as long as the popup might be shown stored_strings_.push_back (subject); stored_strings_.push_back (date); stored_strings_.push_back (sender); stored_strings_.push_back (mailid); std::stringstream s; s << (*h)->position(); if ((!mb) || (firstmb.find ((*h)->mailbox_uin()) == firstmb.end())) { // Mark mailbox as visited firstmb.insert ((*h)->mailbox_uin()); gtk_list_store_set (store, &iter, COLUMN_NAME, biff_->get((*h)->mailbox_uin())->name().c_str(), -1); } else gtk_list_store_set (store, &iter, COLUMN_NAME, "", -1); gtk_list_store_set (store, &iter, COLUMN_NUMBER, s.str().c_str(), COLUMN_SENDER, sender, COLUMN_SUBJECT, subject, COLUMN_DATE, date, COLUMN_MAILID, mailid, -1); // Free header and advance to next header delete (*h); h++; } // Update window decoration gtk_window_set_decorated (GTK_WINDOW(get("dialog")), biff_->value_bool ("popup_use_decoration")); // Update fonts GtkWidget *treeview = get("treeview"); PangoFontDescription *font; font = pango_font_description_from_string (biff_->value_gchar ("popup_font")); gtk_widget_modify_font (treeview, font); pango_font_description_free (font); if (biff_->value_bool ("popup_use_format")) { if (biff_->value_uint ("popup_size_subject") == 0) { GtkTreeViewColumn *column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), COLUMN_SUBJECT); gtk_tree_view_column_set_visible (column, false); } if (biff_->value_uint ("popup_size_sender") == 0) { GtkTreeViewColumn *column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), COLUMN_SENDER); gtk_tree_view_column_set_visible (column, false); } if (biff_->value_uint ("popup_size_date") == 0) { GtkTreeViewColumn *column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), COLUMN_DATE); gtk_tree_view_column_set_visible (column, false); } } return headers.size(); } /** * Hide the popup dialog. * * @param name Widget's name of the dialog. The default is "dialog". */ void Popup::hide (std::string name) { g_mutex_lock (timer_mutex_); if (poptag_ > 0) g_source_remove (poptag_); poptag_ = 0; g_mutex_unlock (timer_mutex_); GUI::hide (); gtk_widget_hide (get("popup")); consulting_ = false; } void Popup::show (std::string name) { tree_selection_ = 0; consulting_ = false; GtkWindow *dialog=GTK_WINDOW(get("dialog")); // Present the popup window. Keyboard focus should not be obtained // automatically when presenting the window but may then gained manually gtk_window_set_accept_focus (dialog, false); gtk_window_present (dialog); // gtk_window_set_accept_focus (dialog, true); if (biff_->value_bool ("popup_use_geometry")) gtk_window_parse_geometry (dialog, biff_->value_gchar ("popup_geometry")); if (biff_->value_bool ("popup_be_sticky")) gtk_window_stick (dialog); else gtk_window_unstick (dialog); gtk_window_set_keep_above (dialog, biff_->value_bool ("popup_keep_above")); gtk_window_set_skip_pager_hint (dialog,!biff_->value_bool ("popup_pager")); gtk_window_set_skip_taskbar_hint (dialog, !biff_->value_bool ("popup_taskbar")); g_mutex_lock (timer_mutex_); if (poptag_ > 0) g_source_remove (poptag_); poptag_ = g_timeout_add (biff_->value_uint ("popup_delay")*1000, POPUP_on_popdown, this); g_mutex_unlock (timer_mutex_); if (tree_selection_) gtk_tree_selection_unselect_all (tree_selection_); } gboolean Popup::on_delete (GtkWidget *widget, GdkEvent *event) { hide (); return true; } gboolean Popup::on_popdown (void) { hide(); return false; } gboolean Popup::on_button_press (GdkEventButton *event) { if (event->button == 1) { // This flag is set to warn "on_select" that we would like to // consult mail content. We cannot do that here because this // button press event will be called before the new selection is // made consulting_ = true; gint root_x, root_y; gtk_window_get_position (GTK_WINDOW (get("dialog")), &root_x, &root_y); x_ = gint (event->x) + root_x; y_ = gint (event->y) + root_y; } else if (event->button == 2) { } else if (event->button == 3) hide (); return false; } gboolean Popup::on_button_release (GdkEventButton *event) { if (event->button == 1) { gtk_widget_hide (get("popup")); consulting_ = false; if (tree_selection_) gtk_tree_selection_unselect_all (tree_selection_); } return false; } void Popup::on_enter (GdkEventCrossing *event) { g_mutex_lock (timer_mutex_); if (poptag_ > 0) g_source_remove (poptag_); poptag_ = 0; g_mutex_unlock (timer_mutex_); } void Popup::on_leave (GdkEventCrossing *event) { if (!consulting_) { g_mutex_lock (timer_mutex_); if (poptag_ > 0) g_source_remove (poptag_); poptag_ = g_timeout_add (biff_->value_uint ("popup_delay")*1000, POPUP_on_popdown, this); g_mutex_unlock (timer_mutex_); } } void Popup::on_select (GtkTreeSelection *selection) { GtkTreeIter iter; GtkTreeModel *model; tree_selection_ = selection; gchar *text; // We get the adress of the selected header by getting field 6 of // the store model where we stored this info if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gpointer *address; gtk_tree_model_get (model, &iter, COLUMN_MAILID, &address, -1); if (!biff_->find_message (std::string((gchar *)address), selected_header_)) return; } // If we're in consulting mode, update the text of the (single) mail popup if (consulting_) { // Nop popdown when we're consulting an email g_mutex_lock (timer_mutex_); if (poptag_ > 0) g_source_remove (poptag_); poptag_ = 0; g_mutex_unlock (timer_mutex_); // Show popup window for mail displaying // Name is stupid since we're in Popup // => "dialog" is the name of the real popup // => "popup" is the name of the mail content window gtk_widget_show_all (get("popup")); gtk_window_move (GTK_WINDOW(get("popup")), x_, y_); GtkWidget *view = get("textview"); GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(view)); GtkTextIter iter; gtk_text_buffer_set_text (buffer, "", -1); gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); gchar *markup = NULL; // Sender markup = g_markup_printf_escaped ("%s", selected_header_.sender().c_str()); if (markup) { gtk_label_set_markup (GTK_LABEL(get("from")), markup); g_free (markup); } // Subject markup = g_markup_printf_escaped ("%s", selected_header_.subject().c_str()); if (markup) { gtk_label_set_markup (GTK_LABEL(get("subject")), markup); g_free (markup); } // Date markup = g_markup_printf_escaped ("%s", selected_header_.date().c_str()); if (markup) { gtk_label_set_markup (GTK_LABEL(get("date")), markup); g_free (markup); } // Body text = charset_to_utf8 (selected_header_.body(), selected_header_.charset(), biff_->value_uint ("popup_convert_retries")); if (text) { gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, text, -1, "normal", NULL); g_free (text); } } } gnubiff-2.2.16/src/ui-authentication.h0000644000175000017500000000364712474422122014547 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-authentication.h,v $ // Revision : $Revision: 1.3.2.2 $ // Revision date : $Date: 2008/04/25 22:53:13 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __UI_AUTHENTICATION_H__ #define __UI_AUTHENTICATION_H__ #include "gui.h" #define AUTHENTICATION(x) (static_cast(x)) class Authentication : public GUI { protected: class Mailbox * mailbox_; GMutex * access_mutex_; public: /* base */ Authentication (void); ~Authentication (void); /* main */ void select (class Mailbox *mailbox); void show (std::string name = "dialog"); /* callbacks */ void on_ok (GtkWidget *widget); void on_cancel (GtkWidget *widget); gboolean on_destroy (GtkWidget *widget, GdkEvent *event); gboolean on_delete (GtkWidget *widget, GdkEvent *event); }; #endif gnubiff-2.2.16/src/org.gnome.panel.applet.GnubiffApplet_Factory.service.in0000664000175000017500000000014012474422123023410 00000000000000[D-BUS Service] Name=org.gnome.panel.applet.GnubiffApplet_Factory Exec=@BINDIR@/gnubiff --appletgnubiff-2.2.16/src/support.h0000644000175000017500000001046712474422123012630 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: support.h,v $ // Revision : $Revision: 1.16.2.4 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Support functions // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __SUPPORT_H__ #define __SUPPORT_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "nls.h" #include #include #include #include /** * This class provides various support functions. * * @see In the class Decoding are support functions for decoding, encoding * and converting. */ class Support { protected: // Basic string functions gchar *utf8_strndup (const gchar *str, gsize n); // Advanced string functions std::string substitute (std::string format, std::string chars, std::vector toinsert); gboolean numbersequence_to_vector (const std::string &seq, std::vector &vec, gboolean empty = true, char sep = ',', char range = '-'); template std::string vector_to_numbersequence (Iter start, Iter end, const std::string sep = std::string (", "), const std::string range = std::string ("-")); public: static guint version_to_integer (std::string versionstr, gchar sep = '.'); // File functions static std::string add_file_to_path (const std::string &path, const std::string file); static std::string path_get_basename (const std::string &path); static std::string path_get_dirname (const std::string &path); // Debugging static void unknown_internal_error_ (const gchar *file, guint line, const gchar *func, const gchar *signal); }; /** * Convert a sequence of unsigned integers (given by a start and end * iterator) to a string. Consecutive numbers will be combined into a * range expression. * * Example: [1,2,3,5,2,3,4,5,17,17] gives "1-3, 5, 2-5, 17, 17" * * @param start Start iterator * @param end End iterator * @param sep String to be used for separating list entries (default is * ", ") * @param range String to be used for ranges (default is "-") * @return Sequence of numbers in a string */ template std::string Support::vector_to_numbersequence (Iter start, Iter end, const std::string sep, const std::string range) { std::stringstream result; guint num = 0, last = 0, inf_bound = 0; Iter pos = start; while (pos != end) { // Next number in sequence num = *(pos++); // No number stored if (last == 0) { inf_bound = last = num; if (pos != end) continue; } // Number is last number plus 1 if (last+1 == num) { last++; if (pos != end) continue; } // We now have to put the numbers into the string if (result.str().size() > 0) result << sep; result << inf_bound; // Range? if (last > inf_bound) result << range << last; // Single last number in vector? if ((pos == end) && (last < num)) result << sep << num; // Save new number inf_bound = last = num; } return result.str (); } /** * Print debug information. This function should be called in a situation * that should never happen to provide more information in a bug report. */ #define unknown_internal_error() (Support::unknown_internal_error_ (__FILE__, __LINE__, __func__, "")) #endif gnubiff-2.2.16/src/options.h0000644000175000017500000001366312474422123012610 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: options.h,v $ // Revision : $Revision: 1.10.2.4 $ // Revision date : $Date: 2012/01/08 21:02:06 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : Container for storing options // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __OPTIONS_H__ #define __OPTIONS_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "option.h" enum OptionsGUI { OPTSGUI_GET = 1, OPTSGUI_SET = 2, OPTSGUI_SENSITIVE = 4, OPTSGUI_SHOW = 8, OPTSGUI_UPDATE = 14 // SET | SENSITIVE | SHOW }; class Options { public: Options (); virtual ~Options (); gboolean add_group (Option_Group *group); gboolean add_option (Option *option); gboolean add_option (Options &options); gboolean remove_options (guint flags); Option *find_option (const std::string &name,OptionType type=OPTTYPE_NONE); gboolean reset (const std::string &name, gboolean respect_change = true); gboolean value (const std::string &name, gboolean value, gboolean respect_change = true); gboolean value (const std::string &name, guint value, gboolean respect_change = true); gboolean value (const std::string &name, std::string value, gboolean respect_change = true); gboolean value_bool (const std::string &name, gboolean respect_update = true); std::string value_string (const std::string &name, gboolean respect_update = true); const gchar * value_gchar (const std::string &name, gboolean respect_update = true); guint value_uint (const std::string &name, gboolean respect_update = true); gboolean set_values (const std::string &name, const std::set &values, gboolean empty = true,gboolean respect_change = true); gboolean get_values (const std::string &name, std::set &var, gboolean empty = true,gboolean respect_update = true); gboolean get_values (const std::string &name, std::vector &var, gboolean empty = true,gboolean respect_update = true); const std::string value_to_string (const std::string &name, guint val); std::string to_string (const std::string &name, gboolean respect_update = true); gboolean from_string (const std::string &name, const std::string value, gboolean respect_change = true); guint string_to_value (const std::string &name, const std::string &str); void to_strings (guint groups, std::map &map, gboolean nosave = true, gboolean empty = true); gboolean from_strings (guint groups, std::map &map); void update_gui (GtkBuilder *gtkbuilder, const std::string filename); void update_gui (OptionsGUI whattodo, guint groups, GtkBuilder *gtkbuilder, const std::string filename); void update_gui (OptionsGUI whattodo, Option *option, GtkBuilder *gtkbuilder, const std::string filename); std::string group_help (guint group); std::string group_name (guint group); /// Access function to Options::groups_ std::map *groups (void) {return &groups_;} /// Access function to Options::options_ std::map *options (void) {return &options_;} protected: /// Iterator typedef std::map::iterator iterator; /// Iterator for groups typedef std::map::iterator iterator_group; /// Iterator for stored widgets/options map typedef std::map >::iterator iterator_widgets; /// Stored options std::map options_; /// Stored groups std::map groups_; GtkWidget *get_widget (const gchar *name, GtkBuilder *gtkbuilder, const gchar *filename); void store_widgets (const std::string name,const std::set &gs, std::map > &map); /** * This function is called when an option is changed that has the * OPTFLG_CHANGE flag set. * * @param option Pointer to the option that is changed. */ virtual void option_changed (Option *option) {} /** * This function is called when an option is to be read that needs * updating before. These options have to be marked by the OPTFLG_UPDATE * flag. * * @param option Pointer to the option that is to be updated. */ virtual void option_update (Option *option) {} private: /** * Map of widgets and a set of boolean options. If all boolean * options are true (false if the option's name is preceded by a * '!') then the widget is sensitive, otherwise it isn't set to * be sensitive. */ std::map > widgets_sensitive_; /** * Map of widgets and a set of boolean options. If all boolean * options are true (false if the option's name is preceded by a * '!') then the widget is shown, otherwise it's hidden. */ std::map > widgets_show_; }; #endif gnubiff-2.2.16/src/ui-applet.cc0000644000175000017500000001656412474422123013156 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2009 Nicolas Rougier, 2004-2009 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet.cc,v $ // Revision : $Revision: 1.39.2.4 $ // Revision date : $Date: 2009/04/05 16:08:05 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include #include "mailbox.h" #include "support.h" #include "ui-applet.h" /** * Constructor. * * @param biff Pointer to the biff object of the current gnubiff session. */ Applet::Applet (Biff *biff) { biff_ = biff; update_mutex_ = g_mutex_new (); } /// Destructor Applet::~Applet (void) { g_mutex_lock (update_mutex_); g_mutex_unlock (update_mutex_); g_mutex_free (update_mutex_); } /** * Start the applet. * * @param showpref If true and supported by the frontend the preferences * dialog is shown before monitoring starts (the default is * false). */ void Applet::start (gboolean showpref) { if (!showpref) if (biff_->value_uint ("check_mode") == AUTOMATIC_CHECK) biff_->start_monitoring (3); } /** * Update the applet status. If new messages are present the new * mail command is executed. * * @param init True if called when initializing gnubiff (the default is * false) * @return True if new messages are present */ gboolean Applet::update (gboolean init) { #ifdef DEBUG g_message ("Applet update"); #endif // Check if there is new mail guint unread = 0; gboolean newmail = biff_->get_number_of_unread_messages (unread); // New mail command if ((newmail == true) && (unread > 0)) execute_command ("newmail_command", "use_newmail_command"); // Messages have been displayed now biff_->messages_displayed (); return newmail; } /** * Mark all messages from all mailboxes as read and update the applet * status. The config file is saved with the information which * messages have been read. */ void Applet::mark_messages_as_read (void) { // Mark messages as read biff_->mark_messages_as_read (); // Save config file (especially the seen messages) biff_->save (); // Update the applet status update (); } /** * Execute a shell command that is stored in the biff string option * {\em option_command} if the biff boolean option {\em option_use_command} * is true. * * @param option_command Name of the biff string option that stores the * command. * @param option_use_command Name of the biff boolean option that indicates * whether the command should be executed or not. * If this string is empty the command will be * executed (the default is the empty string). */ void Applet::execute_command (std::string option_command, std::string option_use_command) { // Shall the command be executed? if ((!option_use_command.empty()) && (!(biff_->value_bool (option_use_command)))) return; // Execute the command (if there is one). std::string command = biff_->value_string (option_command); if (!command.empty ()) { command += " &"; int result = system (command.c_str ()); if (result == -1) g_warning ("Cannot execute command \"%s\".", command.c_str()); } } /** * Get the number of unread messages in all mailboxes as a string. * * @return Number of unread messages as a string. */ std::string Applet::get_number_of_unread_messages (void) { std::stringstream smax, text_zero, text_num; std::string text; // Get number of unread messages guint unread; biff_->get_number_of_unread_messages (unread); // Zero padded number of unread messages smax << biff_->value_uint ("max_mail"); text_zero << std::setfill('0') << std::setw (smax.str().size()) << unread; // Number of unread messages text_num << unread; // Use the correct user supplied message to create the text const std::string chars = "dD"; std::vector vec(2); vec[0] = text_zero.str (); // 'd' vec[1] = text_num.str (); // 'D' if (unread == 0) text = substitute (biff_->value_string ("nomail_text"), chars, vec); else if (unread < biff_->value_uint ("max_mail")) text = substitute (biff_->value_string ("newmail_text"), chars, vec); else { vec[0] = std::string (std::string(smax.str().size(), '+')); vec[1] = "+"; text = substitute (biff_->value_string ("newmail_text"), chars, vec); } return text; } /** * Returns a string with a overview of the statuses of all * mailboxes. Each mailbox's status is presented on a separate line, * if there is no problem the number of unread messages is * given. This text is suitable for displaying as a tooltip. * * @return String that contains the mailboxes' statuses. */ std::string Applet::get_mailbox_status_text (void) { // Get max collected mail number in a stringstream // just to have a default string size. std::stringstream smax; smax << biff_->value_uint ("max_mail"); std::string tooltip; for (unsigned int i=0; i < biff_->get_number_of_mailboxes (); i++) { if (i > 0) tooltip += "\n"; // Mailbox's name tooltip += biff_->mailbox(i)->name(); tooltip += ": "; // No protocol? if (biff_->mailbox(i)->protocol() == PROTOCOL_NONE) { tooltip += _(" unknown"); continue; } // Error? if (biff_->mailbox(i)->status() == MAILBOX_ERROR) { tooltip += _(" error"); continue; } // Put number of unread messages in the current mailbox into a string guint unread = biff_->mailbox(i)->unreads(); std::stringstream s; s << std::setfill('0') << std::setw (smax.str().size()) << unread; // Checking mailbox? if (biff_->mailbox(i)->status() == MAILBOX_CHECK) { tooltip += "(" + s.str() + ")" + _(" checking..."); continue; } // More unread messages in mailbox than got by gnubiff? if (unread >= biff_->value_uint ("max_mail")) { tooltip += std::string(smax.str().size(), '+'); continue; } // Just the number of unread messages tooltip += s.str(); } return tooltip; } /** * The return value indicates whether the applet wants the mailboxes to be * monitored. * * @return true, if the applet thinks monitoring the mailboxes is okay */ gboolean Applet::can_monitor_mailboxes (void) { return true; } /** * Return an AppletGUI pointer of the applet or NULL if the applet is no * AppletGUI applet. * * @return see description above */ class AppletGUI * Applet::appletgui_ptr (void) { return NULL; } gnubiff-2.2.16/src/mh_basic.cc0000644000175000017500000001057612474422123013020 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mh_basic.cc,v $ // Revision : $Revision: 1.5.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Base class for all local protocols similar to mh // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "mh_basic.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The local mailbox for the mh_basic protocol is created from * scratch. * * @param biff Pointer to the instance of Gnubiff. */ Mh_Basic::Mh_Basic (Biff *biff) : Local (biff) { value ("protocol", PROTOCOL_MH_BASIC); } /** * Constructor. The local mailbox for the mh_basic protocol is created by * taking the attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Mh_Basic::Mh_Basic (const Mailbox &other) : Local (other) { value ("protocol", PROTOCOL_MH_BASIC); } /// Destructor Mh_Basic::~Mh_Basic (void) { } // ======================================================================== // main // ======================================================================== /** * Get and parse new messages. * * @exception local_file_err * This exception is thrown if there is a problem when * reading message files or files that contain information * about the messages. */ void Mh_Basic::fetch (void) throw (local_err) { // Get message numbers of (hopefully) unread mails std::vector msn; get_messagenumbers(msn); // Get maximum number of mails to catch guint maxnum = INT_MAX; if (biff_->value_bool ("use_max_mail")) maxnum = biff_->value_uint ("max_mail"); for (guint i=0; (i < msn.size()) && (new_unread_.size() < maxnum); i++) { // Read and parse file std::stringstream ss; ss << msn[i]; parse_single_message_file (add_file_to_path (address(), ss.str())); } } /** * Get message numbers of the mails to be parsed. In the mh_basic protocol we * do not have any information about unread mails. So we have to return all * message numbers that are present in the directory. * * @param msn Reference to a vector in which the message numbers are * returned * @param empty Whether the vector shall be emptied before obtaining the * message numbers (the default is true) * @exception local_file_err * This exception is thrown when the directory containing * the messages cannot be opened. */ void Mh_Basic::get_messagenumbers (std::vector &msn, gboolean empty) throw (local_err) { // Empty the vector if wished for if (empty) msn.clear (); // Try to open the directory GDir *gdir = g_dir_open (address().c_str(), 0, NULL); if (gdir == NULL) { g_warning(_("Cannot open new mail directory (%s)"), address().c_str()); throw local_file_err(); } // Read filenames from directory const gchar *d_name; gchar c; while ((d_name = g_dir_read_name (gdir)) != NULL) { // Convert filename to message number guint pos = 0, num = 0; while (((c = d_name[pos++]) != 0) && (g_ascii_isdigit (c))) num = 10*num + (c - '0'); // Valid message number? if ((num > 0) && (c == 0)) msn.push_back (num); } // Close directory g_dir_close (gdir); } gnubiff-2.2.16/src/ui-applet-gnome.h0000644000175000017500000000503112474422123014106 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-gnome.h,v $ // Revision : $Revision: 1.12.2.4 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __APPLET_GNOME_H__ #define __APPLET_GNOME_H__ #include #include #include "ui-applet-gui.h" class AppletGnome : public AppletGUI { protected: // Pointer to the GtkWidget of the applet GtkWidget *applet_; public: // ======================================================================== // base // ======================================================================== AppletGnome (class Biff *biff); ~AppletGnome (void); // ======================================================================== // main // ======================================================================== PanelApplet *panelapplet() {return (PANEL_APPLET (applet_));} void dock (GtkWidget *applet); gboolean update (gboolean init = false); void show (std::string name = "dialog"); void hide (std::string name = "dialog"); gboolean calculate_size (GtkAllocation *allocation); // ======================================================================== // callbacks // ======================================================================== gboolean on_button_press (GdkEventButton *event); static gboolean gnubiff_applet_factory (PanelApplet *applet, const gchar *iid, gpointer data); }; #endif gnubiff-2.2.16/src/imap4.h0000644000175000017500000001721612474422123012125 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: imap4.h,v $ // Revision : $Revision: 1.49.2.2 $ // Revision date : $Date: 2008/04/25 22:53:00 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __IMAP4_H__ #define __IMAP4_H__ #include "mailbox.h" #include "socket.h" #define IMAP4(x) (static_cast(x)) /** * Mailbox for the IMAP4 protocol. */ class Imap4 : public Mailbox { protected: /// Socket to talk to the server class Socket * socket_; /// Does the server support the IDLE capability? gboolean idleable_; /// Is the server currently idled? gboolean idled_; /// Tag created for the last sent IMAP command. std::string tag_; /** Counter for creating the tag of the next IMAP command to be sent to * the server. */ guint tagcounter_; /** Value of UIDVALIDITY as sent by the IMAP4 server. This is a response * code to the SELECT command. The string is empty if the server does * not send it. See also RFC 3501 2.3.1.1. */ std::string uidvalidity_; /** Map of pairs (atom, arg) that represent the last sent server response * codes via untagged "* OK" server responses. */ std::map ok_response_codes_; /// Was the last line sent by the server an untagged response? gboolean last_untagged_response_; /// Contents of the last untagged response. This value may be empty. std::string last_untagged_response_cont_; /// Keyword of the last untagged response std::string last_untagged_response_key_; /** Message sequence number of the last untagged response. This value is * 0 if there was no message sequence number. */ guint last_untagged_response_msn_; /// Map of message sequence numbers and corresponding unique ids. std::map msn_uid_; public: // ======================================================================== // base // ======================================================================== Imap4 (class Biff *owner); Imap4 (const Mailbox &other); ~Imap4 (void); // ======================================================================== // exceptions // ======================================================================== /** Generic exception for IMAP mailboxes serving as a base for more * specific exceptions. */ class imap_err : public mailbox_err { public: /** Constructor. * * @param mailboxerror Whether this exception should imply a mailbox * error status or not. The default is true. */ imap_err (gboolean mailboxerror=true) : mailbox_err (mailboxerror) {} }; /** Exception for a socket connection failure. Usually this is thrown when * reading or writing. */ class imap_socket_err : public imap_err {}; /** Exception for a problem with a IMAP command. This exception may be * thrown in the following situations: * \begin{itemize} * \item There is an error when creating the line that is to be sent to * the server * \item There is an unexpected response by the server to the command * \item The command is not responded by OK * \end{itemize} */ class imap_command_err : public imap_err { public: /** Constructor. * * @param mailboxerror Whether this exception should imply a mailbox * error status or not. The default is true. */ imap_command_err(gboolean mailboxerror=true):imap_err(mailboxerror) {} }; /// This exception is thrown when a DoS attack is suspected. class imap_dos_err : public imap_err {}; /** This exception is thrown when login isn't possible. This can happen in * the following situations: * \begin{itemize} * \item The server doesn't want us to login (via the LOGINDISABLED * capability) * \item The user doesn't provide a password * \end{itemize} */ class imap_nologin_err : public imap_err {}; // ======================================================================== // main // ======================================================================== virtual void threaded_start (guint delay = 0); void start (void); void fetch (void) throw (imap_err); void connect (void) throw (imap_err); void fetch_mails (void) throw (imap_err); private: // ======================================================================== // Internal stuff // ======================================================================== guint isfinished_fetchbodystructure(std::string,guint) throw (imap_err); gboolean parse_bodystructure (std::string, class PartInfo &, gboolean toplevel=true); gboolean parse_bodystructure_parameters (std::string, class PartInfo &); void command_capability (gboolean check_rc = false) throw (imap_err); void command_fetchbody (guint, class PartInfo &, std::vector &) throw (imap_err); PartInfo command_fetchbodystructure (guint) throw (imap_err); std::vector command_fetchheader (guint) throw (imap_err); std::set command_fetchuid (std::set) throw (imap_err); std::string command_idle(gboolean &) throw (imap_err); void command_login (void) throw (imap_err); void command_logout (void) throw (imap_err); std::set command_searchnotseen (void) throw (imap_err); void command_select (void) throw (imap_err); void waitfor_ack (std::string msg=std::string(""), gint num = 0) throw (imap_err); gboolean waitfor_ack_untaggedresponse (std::string, std::string contbegin = std::string(""), gint num = 0) throw(imap_err); void waitfor_untaggedresponse (guint, std::string, std::string contbegin=std::string(""), gint num = 0) throw (imap_err); void reset_tag(); std::string tag(); gint sendline (const std::string command, gboolean print = true, gboolean check = true) throw (imap_err); gint sendline (const std::string command, guint msn, const std::string arg, gboolean print = true, gboolean check = true) throw (imap_err); gint readline (std::string &line, gboolean print = true, gboolean check = true, gboolean checkline = true) throw (imap_err); gint readline_ignoreinfo (std::string &line, gboolean print = true, gboolean check = true, gboolean checkline = true) throw (imap_err); void save_response_code (std::map &) throw (imap_err); void save_untagged_response (std::string &) throw (imap_err); gboolean test_untagged_response (guint, std::string, std::string contbegin = std::string ("")); gboolean test_untagged_response (std::string, std::string contbegin = std::string ("")); void update_applet(); void idle() throw (imap_err); }; #endif gnubiff-2.2.16/src/gnubiff.cc0000644000175000017500000001202112474424637012672 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gnubiff.cc,v $ // Revision : $Revision: 1.26.2.4 $ // Revision date : $Date: 2015/02/28 20:43:43 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include #ifdef USE_GNOME # include # include "ui-applet-gnome.h" #endif #include "biff.h" #include "nls.h" #include "ui-preferences.h" #include "ui-applet.h" #include "ui-applet-gtk.h" int main (int argc, char **argv); int mainGNOME (int argc, char **argv); int main (int argc, char **argv) { // Initialize i18n support setlocale (LC_ALL, ""); #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, GNUBIFF_LOCALEDIR); # ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); # endif textdomain (GETTEXT_PACKAGE); #endif // Thread initialization // g_thread_init (NULL); gdk_threads_init (); // // Parse Options // GMainLoop* gmainloop = NULL; poptContext poptcon; guint ui_mode = MODE_GTK; int status; char *config_file = 0; int no_configure = false, print_version = false, no_gui = false; int systemtray = false; #if defined USE_GNOME int debug_applet=false; static struct poptOption options_debug[] = { {"applet",'\0', POPT_ARG_NONE, &debug_applet, 0, N_("Start gnome applet from command line"), NULL}, POPT_TABLEEND }; #endif static struct poptOption options_general[] = { {"config", 'c' , POPT_ARG_STRING, &config_file, 0, N_("Configuration file to use"), N_("file")}, {"noconfigure", 'n' , POPT_ARG_NONE, &no_configure, 0, N_("Skip the configuration process"), NULL}, {"nogui", '\0', POPT_ARG_NONE, &no_gui, 0, N_("Start gnubiff without GUI"), NULL}, {"systemtray", '\0', POPT_ARG_NONE, &systemtray, 0, N_("Put gnubiff's icon into the system tray"), NULL}, {"version", 'v' , POPT_ARG_NONE, &print_version, 0, N_("Print version information and exit"), NULL}, POPT_TABLEEND }; static struct poptOption options[] = { {NULL, '\0', POPT_ARG_INCLUDE_TABLE, &options_general, 0, N_("General command line options:"), NULL }, #if defined USE_GNOME {NULL, '\0', POPT_ARG_INCLUDE_TABLE, &options_debug, 0, N_("Options for debugging:"), NULL }, #endif POPT_AUTOHELP POPT_TABLEEND }; // Parse command line poptcon = poptGetContext ("gnubiff", argc, (const char **) argv, options, 0); while ((status = poptGetNextOpt(poptcon)) >= 0); if (status < -1) { fprintf (stderr, "%s: %s\n\n", poptBadOption (poptcon, POPT_BADOPTION_NOALIAS), poptStrerror (status)); poptPrintHelp (poptcon, stderr, 0); exit (1); } poptGetNextOpt(poptcon); // Decide which frontend to use if (no_gui) { ui_mode = MODE_NOGUI; no_configure = true; } if (systemtray) ui_mode = MODE_SYSTEMTRAY; // Initialization of Glib and (if needed) GTK if (no_gui) gmainloop = g_main_loop_new (NULL, true); else gtk_init (&argc, &argv); #if defined USE_GNOME if (debug_applet) return mainGNOME (argc, argv); #endif // Print version information if requested and exit if (print_version) { #ifdef IS_CVS_VERSION g_print ("gnubiff version "PACKAGE_VERSION" CVS\n"); #else g_print ("gnubiff version "PACKAGE_VERSION"\n"); #endif exit (EXIT_SUCCESS); } // Create biff with configuration file (or not) Biff *biff; if (config_file) biff = new Biff (ui_mode, config_file); else biff = new Biff (ui_mode); // Decide whether the preferences dialog shall be shown now no_configure = no_configure || !biff->value_bool ("startup_preferences"); // Start applet biff->applet()->start (!no_configure); // Main loop if (no_gui) g_main_loop_run (gmainloop); else { gdk_threads_enter(); gtk_main(); gdk_threads_leave(); } // Exit return 0; } #ifdef USE_GNOME int mainGNOME (int argc, char **argv) { panel_applet_factory_main ("GnubiffApplet_Factory", PANEL_TYPE_APPLET, AppletGnome::gnubiff_applet_factory, 0); return 0; } #endif gnubiff-2.2.16/src/file.h0000644000175000017500000000351712474422123012031 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: file.h,v $ // Revision : $Revision: 1.4.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __FILE_H__ #define __FILE_H__ #include "local.h" #include class File : public Local { public: // ======================================================================== // base // ======================================================================== File (class Biff *biff); File (const Mailbox &other); ~File (void); // ======================================================================== // base // ======================================================================== void fetch (void) throw (local_err); }; #endif gnubiff-2.2.16/src/decoding.h0000644000175000017500000000736712474422123012675 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2008 Nicolas Rougier, 2004-2008 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: decoding.h,v $ // Revision : $Revision: 1.20.2.2 $ // Revision date : $Date: 2008/04/19 19:50:31 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Various functions for decoding, converting ... // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __DECODING_H__ #define __DECODING_H__ #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_AES # ifdef HAVE_LIBSSL # include # elif HAVE_LIBCRYPTO # include # endif #endif #include #include #include /** * This class is intended to provide functions needed for decoding, * encoding and converting encodings used in mails. * * @see In the class Support are various other support functions. */ class Decoding { protected: // Mail body and header gboolean decode_body (std::vector &mail, std::string encoding, std::string::size_type bodypos = 0, gboolean skip_header = true); std::string decode_headerline (const std::string &line); gboolean parse_encoded_word_search (const std::string &line, const std::string::size_type &pos, std::string::size_type &iter, gboolean searchLast = false); gboolean parse_encoded_word (const std::string &line, std::string &charset, std::string &encoding, std::string &text, std::string::size_type &pos); gboolean get_quotedstring (std::string line, std::string &str, std::string::size_type &pos, gchar quoted = '"', gboolean test_start = true, gboolean end_ok = false); gboolean get_mime_token (std::string line, std::string &str, std::string::size_type &pos, gboolean lowercase = true); // Encodings std::string decode_base64 (const std::string &); std::string decode_base64 (const std::vector &, std::string::size_type pos = 0); std::string decode_qencoding (const std::string &); std::string decode_quotedprintable (const std::string &); std::vector decode_quotedprintable ( const std::vector &, std::string::size_type pos = 0); // Converting std::string utf8_to_imaputf7 (std::string str); gchar* utf8_to_imaputf7 (const gchar *, gssize); std::string ascii_strdown (const std::string &str); gchar *charset_to_utf8 (std::string text, std::string charset, guint retries = 0); public: // Decryption/Encryption static std::string decrypt_password_legacy (const std::string &passphrase, const std::string &password); static std::string decrypt_aes (const std::string &passphrase, const std::string &data); static std::string encrypt_aes (const std::string &passphrase, const std::string &data); }; #endif gnubiff-2.2.16/src/pop3.cc0000644000175000017500000000637312474422123012134 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: pop3.cc,v $ // Revision : $Revision: 1.15.2.1 $ // Revision date : $Date: 2007/09/08 14:57:58 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #include #include #include #include #include #include "ui-authentication.h" #include "pop3.h" #include "socket.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The mailbox for the POP3 protocol is created from scratch. * * @param biff Pointer to the instance of Gnubiff. */ Pop3::Pop3 (Biff *biff) : Pop (biff) { value ("protocol", PROTOCOL_POP3); } /** * Constructor. The mailbox for the POP3 protocol is created by taking the * attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Pop3::Pop3 (const Mailbox &other) : Pop (other) { value ("protocol", PROTOCOL_POP3); } /// Destructor Pop3::~Pop3 (void) { } // ======================================================================== // main // ======================================================================== /** * A connection to the mailbox is established. If this can't be done then a * {\em pop_socket_err} is thrown. Otherwise gnubiff logins. * * @exception pop_command_err * This exception is thrown when we get an unexpected * response. * @exception imap_socket_err * This exception is thrown if a network error occurs. */ void Pop3::connect (void) throw (pop_err) { std::string line; // Open the socket Pop::connect (); readline (line); // +OK response // LOGIN: username sendline ("USER " + username()); readline (line); // +OK response // LOGIN: password sendline ("PASS " + password(), false); readline (line); // +OK response #ifdef DEBUG // Just in case someone sends me the output: password won't be displayed std::string line_no_password = "PASS (hidden)\r\n"; g_message ("[%d] SEND(%s:%d): %s", uin(), address().c_str(), port(), line_no_password.c_str()); #endif } gnubiff-2.2.16/src/mh_sylpheed.h0000644000175000017500000000435312474422123013412 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mh_sylpheed.h,v $ // Revision : $Revision: 1.5.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : Mh protocol as used by Sylpheed // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __MH_SYLPHEED_H__ #define __MH_SYLPHEED_H__ #include #include #include "mh_basic.h" /** * Local mailbox for the mh protocol (as used by sylpheed). * * Note: The file ".sylpheed_mark" in which sylpheed saves information about * messages is at the moment not platform independent! */ class Mh_Sylpheed : public Mh_Basic { protected: public: // ======================================================================== // base // ======================================================================== Mh_Sylpheed (class Biff *biff); Mh_Sylpheed (const Mailbox &other); ~Mh_Sylpheed (void); // ======================================================================== // main // ======================================================================== void get_messagenumbers (std::vector &msn, gboolean empty = true) throw (local_err); std::string file_to_monitor (void); }; #endif gnubiff-2.2.16/src/maildir.cc0000644000175000017500000000657312474422123012676 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: maildir.cc,v $ // Revision : $Revision: 1.20.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "maildir.h" #include "support.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The local mailbox for the maildir protocol is created from * scratch. * * @param biff Pointer to the instance of Gnubiff. */ Maildir::Maildir (Biff *biff) : Local (biff) { value ("protocol", PROTOCOL_MAILDIR); } /** * Constructor. The local mailbox for the maildir protocol is created by * taking the attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Maildir::Maildir (const Mailbox &other) : Local (other) { value ("protocol", PROTOCOL_MAILDIR); } /// Destructor Maildir::~Maildir (void) { } // ======================================================================== // main // ======================================================================== /** * Get and parse new messages. * * @exception local_file_err * This exception is thrown if there is a problem when * reading message files or files that contain information * about the messages. */ void Maildir::fetch (void) throw (local_err) { // Try to open new mail directory GDir *gdir = g_dir_open (address().c_str(), 0, NULL); if (gdir == NULL) { g_warning(_("Cannot open new mail directory (%s)"), address().c_str()); throw local_file_err(); } // Get maximum number of mails to catch guint maxnum = INT_MAX; if (biff_->value_bool ("use_max_mail")) maxnum = biff_->value_uint ("max_mail"); const gchar *d_name; // Read new mails while ((d_name = g_dir_read_name (gdir)) && (new_unread_.size() < maxnum)){ // Filenames that begin with '.' are not messages in maildir protocol if (d_name[0] == '.') continue; // If the mail is already known, we don't need to parse it std::string uid = std::string (d_name); if (new_mail (uid)) continue; // Read and parse file parse_single_message_file (add_file_to_path (address(), d_name), uid); } // Close directory g_dir_close (gdir); } gnubiff-2.2.16/src/signals.cc0000644000175000017500000001036612474422123012710 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2008 Nicolas Rougier, 2004-2008 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: signals.cc,v $ // Revision : $Revision: 1.7.2.4 $ // Revision date : $Date: 2008/09/07 20:16:45 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Handling of signals // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include "biff.h" #include "signals.h" #include "ui-applet.h" #include "ui-applet-gui.h" /// Pointer to biff class Biff *Signals::biff_ = NULL; /** * Initialize signal handling. After calling this function SIGUSR1 and * SIGUSR2 signals will be caught. * * @param biff Pointer to biff */ gboolean Signals::init_signals (class Biff *biff) { biff_=biff; // Attach callback function to signals if (signal (SIGUSR1, Signals::signal_handler) == SIG_ERR) return false; if (signal (SIGUSR2, Signals::signal_handler) == SIG_ERR) return false; if (signal (SIGBUS, Signals::signal_handler) == SIG_ERR) return false; if (signal (SIGFPE, Signals::signal_handler) == SIG_ERR) return false; if (signal (SIGILL, Signals::signal_handler) == SIG_ERR) return false; if (signal (SIGSEGV, Signals::signal_handler) == SIG_ERR) return false; if (signal (SIGPIPE, Signals::signal_handler) == SIG_ERR) return false; return true; } /** * Callback function for handling signals. * * @param signal Number of the signal that was caught. */ void Signals::signal_handler (int signum) { #ifdef DEBUG g_message ("Caught signal %d.", signum); #endif if (!biff_) return; // What signal was caught? guint cmd; switch (signum) { case SIGUSR1: cmd = biff_->value_uint ("signal_sigusr1"); break; case SIGUSR2: cmd = biff_->value_uint ("signal_sigusr2"); break; case SIGBUS: Support::unknown_internal_error_ (NULL, 0, NULL, "SIGBUS"); exit (EXIT_FAILURE); case SIGFPE: Support::unknown_internal_error_ (NULL, 0, NULL, "SIGFPE"); exit (EXIT_FAILURE); case SIGILL: Support::unknown_internal_error_ (NULL, 0, NULL, "SIGILL"); exit (EXIT_FAILURE); case SIGSEGV: Support::unknown_internal_error_ (NULL, 0, NULL, "SIGSEGV"); exit (EXIT_FAILURE); case SIGPIPE: #ifdef DEBUG g_message ("Ignored SIGPIPE signal"); #endif return; default: return; } // Get an AppletGUI pointer of the applet (or NULL is there in none) AppletGUI *appletgui = biff_->applet()->appletgui_ptr(); // What command has to be executed? switch (cmd) { case SIGNAL_NONE: break; case SIGNAL_MARK_AS_READ: biff_->mark_messages_as_read (); biff_->applet()->update (); break; case SIGNAL_START: biff_->start_monitoring (); break; case SIGNAL_STOP: biff_->stop_monitoring (); break; case SIGNAL_POPUP_ENABLE: if (appletgui) appletgui->enable_popup (true); break; case SIGNAL_POPUP_DISABLE: if (appletgui) appletgui->enable_popup (false); break; case SIGNAL_POPUP_TOGGLE: if (appletgui) appletgui->enable_popup (!biff_->value_bool ("use_popup")); break; case SIGNAL_POPUP_SHOW: if (appletgui) appletgui->show_dialog_popup (); break; case SIGNAL_POPUP_HIDE: if (appletgui) appletgui->hide_dialog_popup (); break; case SIGNAL_POPUP_TOGGLEVISIBLE: if (appletgui) { if (appletgui->visible_dialog_popup ()) appletgui->hide_dialog_popup (); else appletgui->show_dialog_popup (); } } } gnubiff-2.2.16/src/mailbox.h0000644000175000017500000003216112474422123012542 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mailbox.h,v $ // Revision : $Revision: 1.60.2.4 $ // Revision date : $Date: 2010/02/04 22:42:08 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __MAILBOX_H__ #define __MAILBOX_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "biff.h" #include "decoding.h" #include "header.h" #include "socket.h" #include "support.h" /** This struct is needed (when using STL algorithms for * std::map) for comparisons of * std::pair objects. We cannot compare headers so the * default compare function is not useful for us. */ struct less_pair_first : public std::binary_function,std::pair, bool> { bool operator()(std::pair x, std::pair y) const { return x.first < y.first; } }; /** * Generic mailbox intended as base for implementing mailboxes for a specific * protocol. */ class Mailbox : public Decoding, public Gnubiff_Options, public Support { protected: // ======================================================================== // internal stuff // ======================================================================== static guint uin_count_; // unique identifier number count class Biff * biff_; // biff owner GMutex * mutex_; // mutex for thread read access GMutex * monitor_mutex_; // mutex for monitor access guint timetag_; // tag for delayed start timeout gboolean listed_; // flag for updating mailboxes in preferences gboolean stopped_; // flag for stopping mailbox monitor while looking up void option_changed (Option *option); void option_update (Option *option); gboolean parse_contenttype (std::string line, class PartInfo &partinfo); /// Mail headers of mails that have not been read yet std::map unread_; /** Mail headers of mails (of the the present update) that have not been * read yet. These headers will be transfered to Mailbox::unread_ once * the updated is completed successfully. */ std::map new_unread_; /// Set of gnubiff mail ids of those mails that won't be displayed std::set hidden_; /** Set of gnubiff mail ids of those mails that have already been seen by * gnubiff during the last update */ std::set seen_; /** Set of gnubiff mail ids of those mails that have already been seen by * gnubiff during the present update. These ids will be transfered to * Mailbox::seen_ once the update is completed successfully. */ std::set new_seen_; public: // ======================================================================== // base // ======================================================================== Mailbox (class Biff *biff); Mailbox (const Mailbox &other); Mailbox &operator= (const Mailbox &other); virtual ~Mailbox (void); // ======================================================================== // exceptions // ======================================================================== /** Generic exception for mailboxes. This only serves as a base for more * more specific exceptions. */ class mailbox_err : public std::exception { private: /** If {\em mailboxerror_} is true this exception will imply a mailbox * error status when handled, otherwise lookup will be terminated but * mailbox status will be left untouched. */ gboolean mailboxerror_; public: /** Constructor. * * @param mailboxerror Whether this exception should imply a mailbox * error status or not. The default is true. */ mailbox_err (gboolean mailboxerror=true) {mailboxerror_=mailboxerror;} /// Access function to mailbox_err::mailboxerror_. gboolean is_mailboxerror() {return mailboxerror_;} }; // ======================================================================== // main // ======================================================================== virtual void threaded_start (guint delay = 0); // start monitoring in a new thread static gboolean start_delayed_entry_point (gpointer data); // start thread timeout entry point static void start_entry_point (gpointer data); // start thread entry point virtual void start (void); // start method (to be overidden) virtual void stop (void); // stop method (to be overidden) virtual void fetch (void); // fetch headers (if any) void mark_messages_as_read (void); void lookup (void); // try to guess mailbox format static Mailbox *lookup_local(Mailbox &); // try to guess mailbox format for a local mailbox gboolean new_mail (std::string &); void update_mailbox_status (void); void start_checking (void); void set_status_mailbox_error (void); void mail_displayed (void); void parse (std::vector &mail, std::string uid = std::string(""), class PartInfo *pi = NULL, class Header *hh = NULL, guint pos = 0, gboolean status = true); guint static standard_port (guint protocol, guint auth, gboolean strict = true); // ======================================================================== // main -- messages // ======================================================================== void get_message_headers (std::vector
&headers, gboolean use_max_num = false, guint max_num = 0, gboolean empty = false); // ======================================================================== // filtering // ======================================================================== private: /// Compiled regular expressions for filtering messages by header lines std::vector filter_regex_; /// Options for each regular expression std::vector filter_opts_; gboolean filter_add (std::vector ®ex_strs); void filter_free (void); gboolean filter_match_line (std::string line, gboolean &status); public: gboolean filter_create (void); // ======================================================================== // access // ======================================================================== gboolean find_mail (std::string mailid, Header &mail); /// Access function to Mailbox::biff_ class Biff *biff (void) {return biff_;} /// Access function to mailbox option "name" const std::string name (void) {return value_string ("name");} /// Access function to mailbox option "name" void name (const std::string val) {value ("name", val);} /// Access function to mailbox option "protocol" const guint protocol (void) {return value_uint ("protocol");} /// Access function to mailbox option "protocol" void protocol (const guint val) {value ("protocol", val);} /// Access function to mailbox option "authentication" const guint authentication (void) {return value_uint ("authentication");} /// Access function to mailbox option "authentication" void authentication (const guint val) {value ("authentication", val);} /// Access function to mailbox option "address" const std::string address (void) {return value_string ("address");} /// Access function to mailbox option "address" void address (const std::string val) {value ("address", val);} /// Access function to mailbox option "username" const std::string username (void) {return value_string ("username");} /// Access function to mailbox option "username" void username (const std::string val) {value ("username", val);} /// Access function to mailbox option "password" const std::string password (void) {return value_string ("password");} /// Access function to mailbox option "password" void password (const std::string val) {value ("password", val);} /// Access function to mailbox option "port" const guint port (void) {return value_uint ("port");} /// Access function to mailbox option "port" void port (const guint val) {value ("port", val);} /// Access function to mailbox option "folder" const std::string folder (void) {return value_string ("folder");} /// Access function to mailbox option "folder" void folder (const std::string val) {value ("folder",val);} /// Access function to mailbox option "certificate" const std::string certificate (void) {return value_string ("certificate");} /// Access function to mailbox option "certificate" void certificate (const std::string val) {value ("certificate", val);} /// Access function to mailbox option "delay" const guint delay (void) {return value_uint ("delay");} /// Access function to mailbox option "delay" void delay (const guint val) {value ("delay", val);} /// Access function to mailbox option "use_idle" const gboolean use_idle (void) {return value_bool ("use_idle");} /// Access function to mailbox option "use_idle" void use_idle (gboolean val) {value ("use_idle", val);} /// Access function to mailbox option "use_other_folder" const gboolean use_other_folder (void) {return value_bool ("use_other_folder");} /// Access function to mailbox option "use_other_folder" void use_other_folder (const gboolean val) {value ("use_other_folder", val);} /// Access function to mailbox option "other_folder" const std::string other_folder (void) {return value_string ("other_folder");} /// Access function to mailbox option "other_folder" void other_folder (const std::string val) {value ("other_folder", val);} /// Access function to mailbox option "use_other_port" const gboolean use_other_port (void) {return value_bool ("use_other_port");} /// Access function to mailbox option "use_other_port" void use_other_port (const gboolean val) {value ("use_other_port", val);} /// Access function to mailbox option "other_port" const guint other_port (void) {return value_uint ("other_port");} /// Access function to mailbox option "other_port" void other_port (const guint val) {value ("other_port", val);} /// Access function to mailbox option "status" const guint status (void) {return value_uint ("status");} /// Access function to mailbox option "status" void status (const guint status) {value ("status", status);} const gboolean listed (void) {return listed_;} void listed (gboolean value) {listed_ = value;} /// Access function to mailbox option "uin" const guint uin (void) {return value_uint ("uin");} #ifdef DEBUG /// Access function to Mailbox::uin_count_ (only when debugging is enabled) static guint uin_count (void) {return uin_count_;} #endif const guint timetag (void) {return timetag_;} void timetag (guint value) {timetag_ = value;} /// Access function to Mailbox::unread_ std::map &unread (void) {return unread_;} /// Number of unread mails guint unreads (void) { g_mutex_lock (mutex_); guint s = unread_.size(); g_mutex_unlock (mutex_); return s; } /// Access function to Mailbox::hidden_ std::set &hidden (void) {return hidden_;} /// Number of mails that won't be displayed guint hiddens (void) {return hidden_.size();} /// Access function to Mailbox::seen_ std::set &seen (void) {return seen_;} }; /** * Information about one part of a (possible) multi-part mail. If the mail * consists only of one part the information is valid for the whole mail. */ class PartInfo { public: /** Part identifier as needed for the IMAP command FETCH (see * RFC 3501 6:4:5). This is the part of the mail that will be displayed * by gnubiff (if possible). */ std::string part_; /** Error message. When the mail will be displayed the mail's body is * substituted by this message. */ std::string error_; /// MIME type std::string type_; /// MIME subtype std::string subtype_; /** Encoding of this part. Currently supported encodings are 7bit, 8bit * and quoted-printable. Encodings yet to be supported are binary and * base64. */ std::string encoding_; /// Parameters as pairs (attribute, value) std::map parameters_; /// Size of this part in bytes gint size_; }; #endif gnubiff-2.2.16/src/local.h0000644000175000017500000001061512474422123012201 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: local.h,v $ // Revision : $Revision: 1.16.2.2 $ // Revision date : $Date: 2008/04/25 22:53:01 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __LOCAL_H__ #define __LOCAL_H__ #include "mailbox.h" #ifdef HAVE_FAM_H # include #endif #include #include #ifdef HAVE_LIBFAM const gboolean use_fam = 1; #else const gboolean use_fam = 0; #endif #define LOCAL(x) (static_cast(x)) /** * Base class for all local mailbox protocols. */ class Local : public Mailbox { protected: #ifdef HAVE_FAM_H // ======================================================================== // monitoring stuff (using FAM, File Alteration Monitor) // ======================================================================== FAMConnection fam_connection_; FAMRequest fam_request_; FAMEvent fam_event_; #endif /** * This boolean indicates whether a FAM connection is being open or not. * It must only be read or changed when the fam_mutex_ is locked by the * thread. */ gboolean fam_is_open_; /** * This mutex must be locked before calling any FAM function * (when not having the Mailbox::monitor_mutex_). To call * FAMOpen() or FAMClose() and change the value of * Local::fam_is_open_ the Mailbox::monitor_mutex_ must be * locked. For calling functions like FAMNextEvent() it is * sufficient to have the Mailbox::monitor_mutex_, so others with * this mutex can call functions like FAMCancelMonitor(). */ GMutex *fam_mutex_; public: // ======================================================================== // base // ======================================================================== Local (class Biff *biff); Local (const Mailbox &other); virtual ~Local (void); // ======================================================================== // exceptions // ======================================================================== /** Generic exception for local mailboxes serving as a base for more * specific exceptions. */ class local_err : public mailbox_err {}; /// Exception for a problem with the file alteration monitor (FAM). class local_fam_err : public local_err {}; /// Exception for a problem when opening or reading a file class local_file_err : public local_err {}; /** This exception should be thrown if there is a problem when obtaining * information that is necessary to get and parse the messages (e.g. if * no message sequence numbers can be obtained). */ class local_info_err : public local_err {}; // ======================================================================== // main // ======================================================================== void start (void); void stop (void); // stop method virtual std::string file_to_monitor (void); void parse_single_message_file (const std::string &filename, const std::string uid = std::string ("")) throw (local_err); // ======================================================================== // file alteration monitor (FAM) // ======================================================================== void fam_cancel_monitor (void); void fam_close (void); void fam_get_all_pending_events (void); void fam_monitoring (void) throw (local_err); void fam_start_monitoring (void); }; #endif gnubiff-2.2.16/src/Makefile.in0000664000175000017500000007156312474430241013016 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gnubiff$(EXEEXT) @USE_GNOME_TRUE@am__append_1 = $(gnome_sources) @USE_GNOME_TRUE@am__append_2 = $(GNOME_DEP_LIBS) @USE_GNOME_TRUE@am__append_3 = org.gnome.panel.applet.GnubiffApplet.panel-applet.in @USE_GNOME_TRUE@am__append_4 = $(panelapplet_in_files:.panel-applet.in=.panel-applet) @USE_GNOME_TRUE@am__append_5 = GNOME_gnubiffApplet.xml @USE_GNOME_TRUE@am__append_6 = org.gnome.panel.applet.GnubiffApplet_Factory.service.in @USE_GNOME_TRUE@am__append_7 = $(service_in_files:.service.in=.service) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(panelappletdir)" \ "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)" PROGRAMS = $(bin_PROGRAMS) am__gnubiff_SOURCES_DIST = gnubiff.cc biff.cc biff.h mailbox.cc \ mailbox.h header.cc header.h socket.cc socket.h support.cc \ support.h nls.h decoding.cc decoding.h local.cc local.h \ file.cc file.h imap4.cc imap4.h maildir.cc maildir.h mh.cc \ mh.h mh_basic.cc mh_basic.h mh_sylpheed.cc mh_sylpheed.h \ pop.cc pop.h apop.cc apop.h pop3.cc pop3.h option.cc option.h \ options.cc options.h gnubiff_options.cc gnubiff_options.h \ gui.cc gui.h ui-applet.cc ui-applet.h ui-applet-gtk.cc \ ui-applet-gtk.h ui-applet-gui.cc ui-applet-gui.h \ ui-applet-systray.cc ui-applet-systray.h ui-preferences.cc \ ui-preferences.h ui-authentication.cc ui-authentication.h \ ui-certificate.cc ui-certificate.h ui-properties.cc \ ui-properties.h gtk_image_animation.cc gtk_image_animation.h \ ui-popup.cc ui-popup.h signals.cc signals.h eggtrayicon.c \ eggtrayicon.h ui-applet-gnome.cc ui-applet-gnome.h am__objects_1 = gnubiff.$(OBJEXT) biff.$(OBJEXT) mailbox.$(OBJEXT) \ header.$(OBJEXT) socket.$(OBJEXT) support.$(OBJEXT) \ decoding.$(OBJEXT) local.$(OBJEXT) file.$(OBJEXT) \ imap4.$(OBJEXT) maildir.$(OBJEXT) mh.$(OBJEXT) \ mh_basic.$(OBJEXT) mh_sylpheed.$(OBJEXT) pop.$(OBJEXT) \ apop.$(OBJEXT) pop3.$(OBJEXT) option.$(OBJEXT) \ options.$(OBJEXT) gnubiff_options.$(OBJEXT) gui.$(OBJEXT) \ ui-applet.$(OBJEXT) ui-applet-gtk.$(OBJEXT) \ ui-applet-gui.$(OBJEXT) ui-applet-systray.$(OBJEXT) \ ui-preferences.$(OBJEXT) ui-authentication.$(OBJEXT) \ ui-certificate.$(OBJEXT) ui-properties.$(OBJEXT) \ gtk_image_animation.$(OBJEXT) ui-popup.$(OBJEXT) \ signals.$(OBJEXT) eggtrayicon.$(OBJEXT) am__objects_2 = ui-applet-gnome.$(OBJEXT) @USE_GNOME_TRUE@am__objects_3 = $(am__objects_2) am_gnubiff_OBJECTS = $(am__objects_1) $(am__objects_3) gnubiff_OBJECTS = $(am_gnubiff_OBJECTS) am__DEPENDENCIES_1 = @USE_GNOME_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) gnubiff_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/config depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(gnubiff_SOURCES) DIST_SOURCES = $(am__gnubiff_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(panelapplet_DATA) $(service_DATA) $(ui_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = \ $(FAM_CFLAGS) \ $(GNUBIFF_DEP_CFLAGS) \ $(GNOME_DEP_CFLAGS) \ -DGNUBIFF_LOCALEDIR=\""$(datadir)/locale"\" \ -DGNUBIFF_DATADIR=\""$(pkgdatadir)"\" \ -DGNUBIFF_ICONDIR=\""$(datadir)/pixmaps"\" \ -DGNUBIFF_UIDIR=\""$(datadir)/gnome-2.0/ui"\" \ -DREAL_DATADIR=\""$(datadir)"\" \ -D_GNU_SOURCE \ -Wall -ansi -pedantic -export-dynamic gnome_sources = \ ui-applet-gnome.cc ui-applet-gnome.h common_sources = \ gnubiff.cc \ biff.cc biff.h \ \ mailbox.cc mailbox.h \ header.cc header.h \ socket.cc socket.h \ support.cc support.h \ nls.h \ decoding.cc decoding.h \ local.cc local.h \ file.cc file.h \ imap4.cc imap4.h \ maildir.cc maildir.h \ mh.cc mh.h \ mh_basic.cc mh_basic.h \ mh_sylpheed.cc mh_sylpheed.h \ pop.cc pop.h \ apop.cc apop.h \ pop3.cc pop3.h \ \ option.cc option.h \ options.cc options.h \ gnubiff_options.cc gnubiff_options.h \ \ gui.cc gui.h \ ui-applet.cc ui-applet.h \ ui-applet-gtk.cc ui-applet-gtk.h \ ui-applet-gui.cc ui-applet-gui.h \ ui-applet-systray.cc ui-applet-systray.h \ ui-preferences.cc ui-preferences.h \ ui-authentication.cc ui-authentication.h \ ui-certificate.cc ui-certificate.h \ ui-properties.cc ui-properties.h \ gtk_image_animation.cc gtk_image_animation.h \ ui-popup.cc ui-popup.h \ \ signals.cc signals.h \ \ eggtrayicon.c eggtrayicon.h gnubiff_SOURCES = $(common_sources) $(am__append_1) gnubiff_LDADD = $(INTLLIBS) $(GNUBIFF_DEP_LIBS) $(FAM_LIBS) \ $(am__append_2) panelappletdir = `pkg-config --variable=libpanel_applet_dir libpanelapplet-4.0` panelapplet_in_files = $(am__append_3) panelapplet_DATA = $(am__append_4) servicedir = /usr/share/dbus-1/services service_in_files = $(am__append_6) service_DATA = $(am__append_7) uidir = $(datadir)/gnome-2.0/ui ui_DATA = $(am__append_5) EXTRA_DIST = \ org.gnome.panel.applet.GnubiffApplet_Factory.service.in \ org.gnome.panel.applet.GnubiffApplet.panel-applet.in.in \ GNOME_gnubiffApplet.xml \ gnubiff.schemas \ $(gnome_sources) DISTCLEANFILES = \ org.gnome.panel.applet.GnubiffApplet.panel-applet.in \ org.gnome.panel.applet.GnubiffApplet.panel-applet \ org.gnome.panel.applet.GnubiffApplet_Factory.service all: all-am .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/biff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decoding.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eggtrayicon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnubiff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnubiff_options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_image_animation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mailbox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maildir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mh_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mh_sylpheed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/option.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-applet-gnome.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-applet-gtk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-applet-gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-applet-systray.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-applet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-authentication.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-certificate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-popup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-properties.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-panelappletDATA: $(panelapplet_DATA) @$(NORMAL_INSTALL) @list='$(panelapplet_DATA)'; test -n "$(panelappletdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(panelappletdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(panelappletdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(panelappletdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(panelappletdir)" || exit $$?; \ done uninstall-panelappletDATA: @$(NORMAL_UNINSTALL) @list='$(panelapplet_DATA)'; test -n "$(panelappletdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(panelappletdir)'; $(am__uninstall_files_from_dir) install-serviceDATA: $(service_DATA) @$(NORMAL_INSTALL) @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(servicedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(servicedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(servicedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \ done uninstall-serviceDATA: @$(NORMAL_UNINSTALL) @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(servicedir)'; $(am__uninstall_files_from_dir) install-uiDATA: $(ui_DATA) @$(NORMAL_INSTALL) @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(uidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(uidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \ done uninstall-uiDATA: @$(NORMAL_UNINSTALL) @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(uidir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(panelappletdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-panelappletDATA install-serviceDATA \ install-uiDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-panelappletDATA \ uninstall-serviceDATA uninstall-uiDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man \ install-panelappletDATA install-pdf install-pdf-am install-ps \ install-ps-am install-serviceDATA install-strip install-uiDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-panelappletDATA \ uninstall-serviceDATA uninstall-uiDATA .cc.o: @printf "%-40s" "Compiling $<... " @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< @echo "[OK]" gnubiff$(EXEEXT): $(gnubiff_OBJECTS) $(gnubiff_DEPENDENCIES) @rm -f gnubiff$(EXEEXT) @printf "%-40s" "Linking $@ ... " $(CXXLINK) $(gnubiff_LDFLAGS) $(gnubiff_OBJECTS) $(gnubiff_LDADD) $(LIBS) @echo "[OK]" $(panelapplet_in_files): $(panelapplet_in_files:.panel-applet.in=.panel-applet.in.in) sed -e "s|\@BINDIR\@|$(bindir)|" \ -e "s|\@PKGDATADIR\@|$(pkgdatadir)|" $< > $@ # Following rule should be provided by intltool (INTLTOOL_PANEL_APPLET_RULE) %.panel-applet: %.panel-applet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache org.gnome.panel.applet.GnubiffApplet_Factory.service: $(service_in_files) sed -e "s|\@BINDIR\@|$(bindir)|" $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/src/ui-applet-gui.h0000644000175000017500000000760012474422123013571 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-gui.h,v $ // Revision : $Revision: 1.8.2.2 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __APPLET_GUI_H__ #define __APPLET_GUI_H__ #include "gui.h" #include "ui-applet.h" /** * Generic GUI code common for all types of applets. */ class AppletGUI : public Applet, public GUI { protected: /// Pointer to the gnubiff popup class Popup *popup_; /// Pointer to the preferences dialog class Preferences *preferences_; /** Pointer to the authentication dialog (needed for getting the user id * and password) */ class Authentication *ui_auth_; /// Widget that is used for displaying the applet's tooltip GtkWidget *tooltip_widget_; /// Shall the popup be forced on the next update? gboolean force_popup_; /** Maximum height of the applet's widgets. If there shall be no * restriction of the size this value should be G_MAXUINT. */ guint widget_max_height_; /** Maximum width of the applet's widgets. If there shall be no restriction * of the size this value should be G_MAXUINT. */ guint widget_max_width_; public: // ======================================================================== // base // ======================================================================== AppletGUI (class Biff *biff, std::string filename, gpointer callbackdata); virtual ~AppletGUI (void); virtual void start (gboolean showpref = false); AppletGUI *appletgui_ptr (void); // ======================================================================== // tools // ======================================================================== gboolean get_image_size (std::string widget_image, guint &width, guint &height); gboolean resize_image (std::string widget_image, guint max_width=G_MAXUINT, guint max_height=G_MAXUINT); // ======================================================================== // main // ======================================================================== virtual gboolean update (gboolean init = false, std::string widget_image = "", std::string widget_text = "", std::string widget_container = ""); virtual std::string get_number_of_unread_messages (void); void mailbox_to_be_replaced (class Mailbox *from, class Mailbox *to); virtual void get_password_for_mailbox (class Mailbox *mb); virtual gboolean can_monitor_mailboxes (void); void show_dialog_preferences (void); void hide_dialog_preferences (void); gboolean visible_dialog_preferences (void); void show_dialog_about (void); void hide_dialog_about (void); void show_dialog_popup (void); void hide_dialog_popup (void); gboolean visible_dialog_popup (void); void tooltip_update (void); void enable_popup (gboolean enable); }; #endif gnubiff-2.2.16/src/header.cc0000644000175000017500000002025712474422123012500 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: header.cc,v $ // Revision : $Revision: 1.4.4.1 $ // Revision date : $Date: 2007/09/08 14:57:56 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : All information about a specific mail needed by gnubiff // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include #include "header.h" #include "nls.h" /** * Test whether two headers belong to the same mail. * * @param other Reference to another header * @returns True if the two mails are equal, false otherwise */ bool Header::operator == (const Header &other) const { return (mailid_ == other.mailid_); } /** * Substitute mail body by error message (if such a message is present). * If no error message is present nothing is done. */ void Header::error_to_body (void) { if (error_.size() == 0) return; // Substitute body by error message and update charset (error messages are // in the charset given by the locale) body (error_); charset (""); } /** * Add some text to the mail's body. * * @param text Text to add */ void Header::add_to_body (const std::string text) { body_ += text; } /** * Sort a vector of (pointers to) headers. The properties of the headers by * which this vector shall be sorted is given by a space separated list of * strings. Sorted can be by position in the mailbox ("position"), mailbox * identifier ("mailbox"), sender ("sender"), subject ("subject") and date * ("date"). By preceding a "!" the sort order can be reversed. * * @param ptr_headers Reference to the vector of headers to be sorted. * @param sort_order Space separated list giving header properties * @return True if the last property is "mailbox", false otherwise */ gboolean Header::sort_headers (std::vector
&ptr_headers, std::string sort_order) { std::stringstream ss (sort_order); std::string sortby; std::vector
::iterator itb = ptr_headers.begin (); std::vector
::iterator ite = ptr_headers.end (); gboolean mb_end = false; while (ss >> sortby) { mb_end = false; // Reversed order? gboolean reversed = (sortby[0] == '!'); if (reversed) sortby = sortby.substr (1, sortby.size()-1); if (sortby == "position") { if (reversed) std::stable_sort(itb, ite, Header::compare_position()); else std::stable_sort(itb, ite, Header::compare_position_rev()); continue; } if (sortby == "mailbox") { if (reversed) std::stable_sort(itb, ite, Header::compare_mailbox_uin()); else std::stable_sort(itb, ite, Header::compare_mailbox_uin_rev()); mb_end = true; continue; } if (sortby == "sender") { if (reversed) std::stable_sort(itb, ite, Header::compare_sender()); else std::stable_sort(itb, ite, Header::compare_sender_rev()); continue; } if (sortby == "subject") { if (reversed) std::stable_sort(itb, ite, Header::compare_subject()); else std::stable_sort(itb, ite, Header::compare_subject_rev()); continue; } if (sortby == "date") { if (reversed) std::stable_sort(itb, ite, Header::compare_date()); else std::stable_sort(itb, ite, Header::compare_date_rev()); continue; } // Otherwise: Ignore it and print error message g_warning (_("Can't sort mails by \"%s\""), sortby.c_str()); } return mb_end; } /** * Set the date of the mail. This function also computes a key for faster * sorting mails by date. * * @param date Date of the mail */ void Header::date (const std::string date) { date_ = date; // For date and time specification see RFC 2822 3.3 std::stringstream ss (date); std::string temp; gint day = 0, month = 0, year = 0, hour = 0, minute = 0, second = 0; gint zone_hour = 0, zone_minute = 0, zone_sign = 1; // day-of-week & day if (date[3] == ',') ss >> temp; ss >> day; day = std::max(day, 1); // month static const std::string months = "JanFebMarAprMayJunJulAugSepOctNovDec"; ss >> temp; month = months.find (temp); if (((std::string::size_type)month == std::string::npos) || (month%3 != 0)) month = 0; month = month / 3 + 1; // year ss >> year; year = std::max(year, 1900); day=std::min(day, g_date_get_days_in_month((GDateMonth)month, year)); // time-of-day ss >> temp; if ((temp.size() == 5) || (temp.size() == 8)) { hour = std::min(10*(temp[0]-'0') + (temp[1]-'0'), 23); minute = std::min(10*(temp[3]-'0') + (temp[4]-'0'), 59); if (temp.size() == 8) second = std::min(10*(temp[6]-'0') + (temp[7]-'0'), 60); hour = std::max (hour, 0); minute = std::max (minute, 0); second = std::max (second, 0); } // zone ss >> temp; if (temp.size() == 5) { zone_hour = std::min(10*(temp[1]-'0') + (temp[2]-'0'), 99); zone_minute = std::min(10*(temp[3]-'0') + (temp[4]-'0'), 59); if (temp[0] == '-') zone_sign = -1; zone_hour = std::max (zone_hour, 0); zone_minute = std::max (zone_minute, 0); } // Calculate date // minute minute -= zone_sign*zone_minute; hour += minute/60; minute = minute%60; if (minute < 0) { hour--; minute += 60; } // hour hour -= zone_sign*zone_hour; day += hour/24; hour = hour%24; if (hour < 0) { day--; hour += 24; } // day, month, year if (day <= 0) { if (month-- == 0) { year--; month = 12; } day += g_date_get_days_in_month ((GDateMonth)month, year); } else if (day > g_date_get_days_in_month ((GDateMonth)month, year)) { day -= g_date_get_days_in_month ((GDateMonth)month, year); if (month++ == 13) { year++; month = 1; } } // Create date sort key gchar *date_str = g_strdup_printf ("%04d%02d%02d%02d%02d%02d", year, month, day, hour, minute, second); if (date_str) { gchar *tmp = g_utf8_collate_key (date_str, -1); if (tmp) { date_collate_key_ = tmp; g_free (tmp); } g_free (date_str); } } /** * Setting the gnubiff mail identifier for this mail header. If a unique * identifier {\em uid} is provided it is taken. Otherwise (i.e. * {\em uid} is an empty string) it is created by concatenating hash * values of the sender, subject and date. * * @param uid Unique identifier for the mail as provided by the protocol * (POP3 and IMAP4) or an empty string. */ void Header::mailid (const std::string uid = std::string("")) { if (uid.size () > 0) mailid_ = uid; else { std::stringstream ss; ss << g_str_hash (sender_.c_str()); ss << g_str_hash (subject_.c_str()); ss << g_str_hash (date_.c_str()); mailid_ = ss.str (); } } /** * Set the sender of the mail. This function also computes a key for faster * sorting mails by sender. * * @param sender Sender of the mail */ void Header::sender (const std::string sender) { sender_ = sender; gchar *tmp = g_utf8_collate_key (sender.c_str (), -1); if (tmp) { sender_collate_key_ = tmp; g_free (tmp); } } /** * Set the subject of the mail. This function also computes a key for faster * sorting mails by subject. * * @param subject Subject of the mail */ void Header::subject (const std::string subject) { subject_ = subject; gchar *tmp = g_utf8_collate_key (subject.c_str (), -1); if (tmp) { subject_collate_key_ = tmp; g_free (tmp); } } gnubiff-2.2.16/src/maildir.h0000644000175000017500000000354012474422123012527 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: maildir.h,v $ // Revision : $Revision: 1.4.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __MAILDIR_H__ #define __MAILDIR_H__ #include "local.h" #include class Maildir : public Local { public: // ======================================================================== // base // ======================================================================== Maildir (class Biff *biff); Maildir (const Mailbox &other); ~Maildir (void); // ======================================================================== // main // ======================================================================== void fetch (void) throw (local_err); }; #endif gnubiff-2.2.16/src/ui-certificate.h0000644000175000017500000000410712474422123014003 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-certificate.h,v $ // Revision : $Revision: 1.3.2.2 $ // Revision date : $Date: 2008/04/25 22:53:14 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __UI_CERTIFICATE_H__ #define __UI_CERTIFICATE_H__ #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBSSL # include # include #endif #include "gui.h" #define CERTIFICATE(x) (static_cast(x)) class Certificate : public GUI { protected: #ifdef HAVE_LIBSSL X509 * certificate_; X509 * stored_certificate_; #endif class Socket * socket_; public: /* base */ Certificate (void); ~Certificate (void); /* main */ void select (class Socket *socket); void show (std::string name = "dialog"); /* callbacks */ void on_ok (GtkWidget *widget); void on_cancel (GtkWidget *widget); gboolean on_destroy (GtkWidget *widget, GdkEvent *event); gboolean on_delete (GtkWidget *widget, GdkEvent *event); }; #endif gnubiff-2.2.16/src/decoding.cc0000644000175000017500000007105412474422123013025 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2008 Nicolas Rougier, 2004-2008 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: decoding.cc,v $ // Revision : $Revision: 1.28.2.7 $ // Revision date : $Date: 2008/12/07 21:40:53 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Various functions for decoding, converting ... // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include "decoding.h" #include "nls.h" /** * Decode the body of a mail. * The part of the mail's body that will be displayed by gnubiff is decoded. * The encoding is given by the parameter {\em encoding} and must be obtained * before. Currently supported encodings are 7bit, 8bit and quoted-printable. * If called with an unsupported encoding the mail's body is replaced with an * error message. * * @param mail Vector of strings consisting of the mail's lines. * @param encoding Encoding of the mail's body. * @param bodypos If the beginning of the mail's body is known (i.e. * {\em skip_header} is false) this is the position of the * first body line, otherwise it is the line in which the * search for the end of the header starts (default is 0) * @param skip_header If {\em bodypos} is the first line of the body this has * to be false, otherwise true (default is true) * @return Boolean indicating success. */ gboolean Decoding::decode_body (std::vector &mail, std::string encoding, std::string::size_type bodypos, gboolean skip_header) { // If mail is empty nothing has to be decoded if (mail.size() == 0) return true; // Skip header if (skip_header) { while ((bodypos= mail.size()) return true; // 7bit, 8bit encoding: nothing to do if ((encoding=="7bit") || (encoding=="8bit")); // || (encoding=="binary")); // Quoted-Printable else if (encoding == "quoted-printable") { std::vector decoded=decode_quotedprintable(mail, bodypos); mail.erase (mail.begin() + bodypos, mail.end()); for (guint i = 0; i < decoded.size(); i++) mail.push_back (decoded[i]); } // Base64 else if (encoding == "base64") { std::string decoded = decode_base64 (mail, bodypos); mail.erase (mail.begin() + bodypos, mail.end()); mail.push_back (decoded); } // Unknown encoding: Replace body text by a error message else { mail.erase (mail.begin() + bodypos, mail.end()); gchar *tmp = g_strdup_printf (_("[The encoding \"%s\" of this mail " "can't be decoded]"), encoding.c_str()); if (tmp) mail.push_back (std::string(tmp)); g_free (tmp); return false; } return true; } /** * Decode a header line. Any quoted-printable or base64 encoding is * decoded to utf-8. If there is an error during decoding an error message * is returned. Subject lines are kind of special because the character * set is encoded within the text. For example it can be something like: * =?iso-8859-1?Q?Apr=E8s?=. * * @param line Header line to be decoded * @return String containing the decoded line (or an error message). **/ std::string Decoding::decode_headerline (const std::string &line) { // A mail header line (sender, subject or date) cannot contain // non-ASCII characters, so first we remove any non-ASCII characters // and white space at the beginning std::string copy, result; std::string::size_type len = line.size(), i = 0; while ((i < len) && ((line[i] == ' ') || (line[i] == '\t'))) i++; for (; i < len; i++) if (line[i] >= 0) copy += line[i]; len = copy.size(); // Now we can begin decoding i = 0; while (i < len) { // An encoded word (see RFC 2047)? std::string::size_type j = i; while ((j+1 < len) && (copy[j] == '=') && (copy[j+1] == '?')) { std::string charset, encoding, text, decoded; gchar *utf8; if (!parse_encoded_word (copy, charset, encoding, text, j)) return _("[Cannot decode this header line]"); // Decode and convert text if (encoding == "q") decoded = decode_qencoding (text); else if (encoding == "b") decoded = decode_base64 (text); else return _("[Cannot decode this header line]"); if (decoded.size() > 0) { utf8 = g_convert (decoded.c_str(), -1, "utf-8", charset.c_str(), 0,0,0); if (!utf8) return _("[Cannot decode this header line]"); result += utf8; g_free (utf8); } i = j; // Maybe skip whitespace (see RFC 2047 section 6.2) while ((j < len) && ((copy[j] == ' ') || (copy[j] == '\t'))) j++; } // ASCII character if (i < len) result += copy[i++]; } return result; } /** * Search for next '?' character as a sub-function for * parse_encoded_word. If this is successful true is returned and * {\em iter} contains the position of the last '?' character. If this * is not successful false is returned and {\em iter} is undetermined. * * @param line One (unfolded) message header line * @param pos Position of the encoded word in the line. * @param iter Current position of iterator in the line. * @param searchLast Indicates if it search the last encoded-text and "?=". * The default value is false. * @return Boolean indicating success * * @see RFC 2047 section 2 */ gboolean Decoding::parse_encoded_word_search (const std::string &line, const std::string::size_type &pos, std::string::size_type &iter, gboolean searchLast) { const std::string::size_type len = line.size(); const std::string::size_type maxlen = 75; // see RFC 2047 section 2 // For especials: see RFC 2047 section 2. '=' omitted because it's // used by the 'Q'-encoding // "charset" and "encoding" can't have especials while // "encoded-text" can have some specials characters const std::string especials = "()<>@,;:\"/[]?. "; const std::string especials_ec = "? "; // Special characters used depending whether charset, encoding or encoded // text is parsed std::string esp; if(searchLast) esp = especials_ec; else esp = especials; while (iter < len && iter-pos < maxlen && !g_ascii_iscntrl(line[iter]) && esp.find(line[iter]) == std::string::npos) iter++; if (iter >= len || iter-pos >= maxlen || line[iter] != '?' || (line[iter+1] != '=' && searchLast)) return false; return true; } /** * Parse one encoded word in a message header. * If this is successful true is returned and {\em charset} contains the * charset, {\em encoding} the encoding, {\em text} the encoded text and * pos the position of the first character after the encoded word. If this * is not successful false is returned, {\em pos} is unchanged, the other * values are undetermined. * * @param line One (unfolded) message header line * @param charset Here the character set of the encoded word is returned * (converted to lower case; only if the return value is * true) * @param encoding Here the encoding of the encoded word is returned * (converted to lower case; only if the return value is * true) * @param text Here the encoded text of the encoded word is returned * (only if the return value is true) * @param pos Position of the encoded word in the line. When the return * value is true, {\em pos} is the position of the first * character after the encoded word * @return Boolean indicating success * * @see RFC 2047 sections 6.1 and 7 */ gboolean Decoding::parse_encoded_word (const std::string &line, std::string &charset, std::string &encoding, std::string &text, std::string::size_type &pos) { std::string::size_type i = pos, i1, i2; // Test for "=?" if ((i+1 >= line.size()) || (line[i] != '=') || (line[i+1] != '?')) return false; i += 2; // Search next "?" if (!parse_encoded_word_search(line, pos, i)) return false; i1 = i++; // Store charset charset = ascii_strdown (line.substr (pos+2, i1-2-pos)); // Search next "?" if (!parse_encoded_word_search(line, pos, i)) return false; i2 = i++; // Store encoding encoding = ascii_strdown (line.substr (i1+1, i2-1-i1)); // Search terminating "?=" if (!parse_encoded_word_search(line, pos, i, true)) return false; // Store text and update position text = line.substr (i2+1, i-1-i2); pos = i+2; return true; } /** * Get a quoted string that is a substring of the string {\em line}. The * quoted string has to be enclosed by the {\em quoted} character. If * there should be no test for this character at the beginning {\em * test_start} has to be false, if it is okay that the quoted string does * not end with the {\em quoted} character but with the end of {\em * line}. The position {\em pos} points to the first character of the * quoted string. If the quoted string can be successfully obtained it is * returned in {\em str} (with all quoted pairs "\x" substituted by "x" * for any character 'x') and {\em pos} is the position of the next * character of {\em line} after the quoted string. If {\em line} ends with * the quoted string {\em pos} will point outside of {\em line}! * * @param line String in which the quoted string is contained * @param str Here the obtained string is returned * @param pos Position of the first character of the quoted string. * When returning {\em pos} is the position of the next * character after the quoted string. If false is returned * it is the position in which the error occurred. * @param quoted Character that encloses the quoted string (default * is '"') * @param test_start Shall the first character be tested for being the * {\em quoted} character (default is true)? * @param end_ok Is it okay for the quoted string to end with the end of * {\em line} and not with {\em quoted} (default is false)? * @return Boolean indicating success */ gboolean Decoding::get_quotedstring (std::string line, std::string &str, std::string::size_type &pos, gchar quoted, gboolean test_start, gboolean end_ok) { std::string::size_type len = line.size (); str = std::string (""); if (pos >= len) return false; if ((test_start) && (line[pos++] != quoted)) return false; while ((pos < len) && (line[pos] != quoted)) { if ((line[pos] == '\\') && (pos+1 == len)) return false; if (line[pos] == '\\') pos++; str += line[pos++]; } if (pos == len) return end_ok; pos++; return true; } /** * Get a token that is a substring of {\em line}. This token may only consist * of those characters that are defined in RFC 2045 5.1. * * @param line String in which the quoted string is contained * @param str Here the obtained string is returned * @param pos Position of the first character of the token. * When returning {\em pos} is the position of the next * character after the token. If false is returned * it is the position in which the error occurred. * @param lowercase Shall the token be converted to lower case (default is * true)? * @return Boolean indicating success */ gboolean Decoding::get_mime_token (std::string line, std::string &str, std::string::size_type &pos, gboolean lowercase) { // Non alphanumeric characters allowed in tokens const static std::string token_ok = "!#$%&'*+-._`{|}~"; std::string::size_type len = line.size(); while ((pos < len) && ((g_ascii_isalnum(line[pos])) || (token_ok.find(line[pos]) != std::string::npos))) str += line[pos++]; if (str.size() == 0) return false; if (lowercase) str = ascii_strdown (str); return true; } /** * Decoding of a base64 encoded string. If the given string * {\em todec} is not valid an empty string is returned. * See RFC 3548 for definition of base64 encoding. * * @param todec Reference to a C++ string to be decoded * @return C++ string consisting of the decoded string {\em todec} */ std::string Decoding::decode_base64 (const std::string &todec) { static const int index_64[128] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 }; # define BASE64(c) (index_64[(unsigned char)(todec[c]) & 0x7F]) std::string result; std::string::size_type pos = 0, len = todec.length(); if (len%4 != 0) return std::string(""); while (pos+3 < len) { if ((todec[pos]&0x80) || (todec[pos+1]&0x80) || (todec[pos+2]&0x80) || (todec[pos+3]&0x80) || (index_64[(int)todec[pos]]<0) || (index_64[(int)todec[pos+1]]<0)) return std::string(""); result += (gchar)((BASE64(pos) << 2) | (BASE64(pos+1) >> 4)); if (todec[pos+2] == '=') { if ((todec[pos+3]=='=') && (pos+4==len) && (!(BASE64(pos+1)&15))) return result; else return std::string(""); } if (index_64[(int)todec[pos+2]]<0) return std::string(""); result += (gchar)(((BASE64(pos+1) & 0xf) << 4) | (BASE64(pos+2) >> 2)); if (todec[pos+3] == '=') { if ((pos+4 == len) && (!(BASE64(pos+2)&3))) return result; else return std::string(""); } if (index_64[(int)todec[pos+3]]<0) return std::string(""); result += static_cast((((BASE64(pos+2) & 0x3) << 6) | BASE64(pos+3))); pos += 4; } return result; } /** * Decoding of a vector of base64 encoded strings. It is assumed that * each string in the vector {\em todec} represents one line of the * base64 encoded text. Lines that have an invalid encoding are * omitted. * * Note: The last character of the decoded string may not be validly encoded * in its charset. * * See RFC 3548, 2045 6.8 for the definition of base64 encoding. * * @param todec Vector of base64 encoded C++ strings that will be decoded. * @param pos Number of the first line in the vector that shall be decoded. * The default value is 0. * @return String consisting of the decoded text */ std::string Decoding::decode_base64 (const std::vector &todec, std::string::size_type pos) { // Append all lines std::string body; while (pos < todec.size ()) body += todec[pos++]; // Decode line return decode_base64 (body); } /** * Decoding of a q-encoded strings. Q-Encoding is similar to quoted-printable * encoding and is used in mail headers. See RFC 2047 4.2. for a definition. * If the given string {\em todec} is not valid an empty string is returned. * * @param todec Reference to a C++ string to be decoded * @return C++ string consisting of the decoded string {\em todec} */ std::string Decoding::decode_qencoding (const std::string &todec) { std::string::size_type pos = 0, len = todec.length(); std::string result; gint decoded; while (pos < len) { switch (gchar c = todec.at(pos++)) { case '=': pos += 2; if (pos > len) return result; if ((decoded = g_ascii_xdigit_value(todec.at(pos-1))) < 0) return std::string(""); if ((decoded += 16*g_ascii_xdigit_value(todec.at(pos-2))) < 0) return std::string(""); result += decoded; break; case '_': result += ' '; break; default: result += c; break; } } return result; } /** * Decoding of a quoted-printable encoded string. This string must consist of * exactly one line (there is no handling of soft breaks etc., see * RFC 2045 6.7. (3)-(5)). If the given string {\em todec} is not valid an * empty string is returned. * * Note: For mail headers q-encoding is used instead of quoted-printable. * * @param todec Reference to a C++ string to be decoded * @return C++ string consisting of the decoded string {\em todec} */ std::string Decoding::decode_quotedprintable (const std::string &todec) { std::string::size_type pos = 0, len = todec.length(); std::string result; gint decoded; while (pos < len) { switch (gchar c = todec.at(pos++)) { case '=': pos += 2; if (pos > len) return result; if ((decoded = g_ascii_xdigit_value(todec.at(pos-1))) < 0) return std::string(""); if ((decoded += 16*g_ascii_xdigit_value(todec.at(pos-2))) < 0) return std::string(""); result += decoded; break; default: result += c; break; } } return result; } /** * Decoding of a vector of quoted-printable encoded strings. It is assumed that * each string in the vector {\em todec} represents one line of the * quoted-printable encoded text. Lines that have an invalid encoding are * omitted. * * See RFC 2045 6.7. for the definition of this encoding. * * Note: For mail headers q-encoding is used instead of quoted-printable. * * @param todec Vector of quoted printable encoded C++ strings that will be * decoded. * @param pos Number of the first line in the vector that shall be decoded. * The default value is 0. * @return Vector of C++ strings consisting of the decoded text */ std::vector Decoding::decode_quotedprintable (const std::vector &todec, std::string::size_type pos) { std::string line; std::vector result; while (pos < todec.size()) { // Handle soft breaks (see RFC 2045 6.7. (3),(5)) line += todec[pos]; std::string::size_type lpos = line.size(); while ((lpos>0) && ((line[lpos-1]=='\t') || (line[lpos-1]==' '))) lpos--; if (lpos < line.size()) line.erase (lpos, line.size()); if ((line.size() > 0) && (line[line.size()-1] == '=')) { line.erase (line.size()-1); if (pos < todec.size()-1) { pos++; continue; } } // Decode line result.push_back (decode_quotedprintable (line)); line = ""; pos++; } return result; } /** * This function converts an utf-8 encoded string to an imap modified * utf-7 string. If the conversion is not successful an empty string is * returned. * * @param str Valid utf-8 encoded string to be converted * @return Converted string or empty string */ std::string Decoding::utf8_to_imaputf7 (const std::string str) { gchar *buffer = utf8_to_imaputf7 (str.c_str(), -1); if (!buffer) return std::string (""); std::string result = std::string (buffer); g_free(buffer); return result; } /** * This function converts an utf-8 encoded character array to an imap modified * utf-7 character array. Unfortunately glib function g_convert() can only * convert to regular utf-7 (see RFC 2152) but IMAP needs a modified version * of utf-7 (see RFC 3501 5.1.3). * * If {\em len} is negative then {\em str} must be a nul-terminated valid utf-8 * string and the whole string will be converted. If {\em len} is positive * {\em str} must contain at least {\em len} bytes (forming a valid utf-8 * string) that will be converted. If the conversion is not successful NULL * will be returned, otherwise a newly allocated nul-terminated character array * containing the converted string will be returned. This array must be freed * using g_free(). * * @param str a valid utf-8 character array, nul-terminated if {\em len} is * less than zero * @param len number of characters of {\em str} that should be converted or * less than zero if {\em str} is nul-terminated * @return a newly allocated nul-terminated character array or NULL */ gchar* Decoding::utf8_to_imaputf7 (const gchar *str, gssize len) { // Modified base64 characters (see RFC 2045, RFC 3501 5.1.3) const char *modbase64="ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789+,"; // No String or nothing to do if ((str == NULL) || (len == 0)) return NULL; gchar c = *str;; std::string result; gssize cnt_len = 0; gboolean printableascii = true; const gchar *start = str; while (((len<0) && (*str!='\0')) || (cnt_len='\x20') && (c<='\x7e')) || (((len<0) && (c=='\0')) || ((cnt_len>=len) && (len>0)))) { result+='&'; // Convert first to UTF-16 gsize cnt = 0; gchar *utf16 = g_convert(start,str-start,"UTF-16BE","UTF-8", NULL,&cnt,NULL); if (utf16 == NULL) return NULL; // Convert to modified BASE64 gchar *pos = utf16; while (cnt > 0) { gchar b[5] = "\0\0\0\0"; b[0] = modbase64[(pos[0]&0xfc)>>2]; if (cnt == 1) b[1] = modbase64[(pos[0]&0x03)<<4]; else { b[1] = modbase64[((pos[0]&0x03)<<4)|(pos[1]&0xf0)>>4]; if (cnt == 2) b[2] = modbase64[(pos[1]&0x0f)<<2]; else { b[2] = modbase64[((pos[1]&0x0f)<<2)|(pos[2]&0xc0)>>6]; b[3] = modbase64[pos[2]&0x3f]; } } result += b; if (cnt > 2) cnt -= 3; else cnt = 0; pos += 3; } g_free (utf16); result += "-"; printableascii = true; continue; } cnt_len++; str++; // (Printable) ASCII character? if ((printableascii) && (c>='\x20') && (c<='\x7e')) { result += c; if (c == '&') result += '-'; continue; } // End of (printable) ASCII characters? if (printableascii) { printableascii = false; start = str-1; continue; } // Another non (printable) ASCII character! } return g_strdup (result.c_str ()); } /** * Convert the string {\em text} from the character set {\em charset} to * utf-8. If no character set is given the string is assumed to be in the * C runtime character set. * * If the string cannot be converted and if {\em retries} is non * zero, the string {\em text} without the last byte is converted (if * possible). This is done because gnubiff cannot know the end of * characters when decoding certain encodings (e.g. base64). If * {\em retries} is zero an error message is returned. * * @param text String to be converted * @param charset Character set of the string {\em text} or empty * @param retries Maximum number of retries. The default is 0. * @return Converted string or error message (as character array). * This string has to be freed with g_free(). */ gchar * Decoding::charset_to_utf8 (std::string text, std::string charset, guint retries) { gchar *utf8 = NULL; if (!charset.empty()) utf8 = g_convert (text.c_str(), -1, "utf-8", charset.c_str(), 0,0,0); else utf8 = g_locale_to_utf8 (text.c_str(), -1, 0, 0, 0); // Could not convert. Retry? if (!utf8 && retries) return charset_to_utf8 (text.substr (0, text.size()-1), charset, retries - 1); // Could not convert at all! if (!utf8) { gchar *tmp = g_strdup_printf (_("[Cannot convert character sets " "(from \"%s\" to \"utf-8\")]"), charset.empty() ? "C" : charset.c_str()); utf8 = g_locale_to_utf8 (tmp, -1, 0, 0, 0); g_free (tmp); } return utf8; } /** * Convert all upper case characters in an ASCII string to lower case * characters. Non-ASCII characters are left unchanged. * * @param str String to be converted * @retrun Converted string */ std::string Decoding::ascii_strdown (const std::string &str) { gchar *tmp = g_ascii_strdown (str.c_str(), -1); std::string result = std::string (tmp); g_free (tmp); return result; } /** * Decrypt a password that was stored before version 2.2.0. * * If no password saving is selected at configure time, an empty string is * returned. * * @param passphrase Passphrase to be used for decryption * @param password Encrypted password * @return Decrypted password */ std::string Decoding::decrypt_password_legacy (const std::string &passphrase, const std::string &password) { #ifdef USE_PASSWORD // Build passtable std::string passtable = passphrase; std::string buffer; for (std::string::size_type i = 0; i < passtable.size(); i++) if (buffer.find(passtable[i]) == std::string::npos) buffer += passtable[i]; passtable = buffer; // Decrypt password std::stringstream decrypted; for (std::string::size_type i = 0; i+1 < password.size(); i += 2) { char c = 0; for (guint j = 0; j < 16; j++) { if (passtable [j] == password[i]) c += j*16; if (passtable [j] == password[i+1]) c += j; } decrypted << c; } return decrypted.str(); #else return std::string(""); #endif } /** * Decrypt the AES encrypted data {\em data} using the passphrase * {\em passphrase}. The 128 bit AES algorithm is used. * * Note: If no AES libraries are available or if an error occurs, this * function returns an empty string. * * @param passphrase Passphrase to be used for decryption (must be 16 * characters long) * @param data Encrypted data * @return Decrypted data */ std::string Decoding::decrypt_aes (const std::string &passphrase, const std::string &data) { #ifdef HAVE_AES const unsigned char *phraseptr = reinterpret_cast(passphrase.c_str ()); guint phraselen = passphrase.size(); // Check Passphrase if (phraselen < 16) return std::string (""); // Determine size and allocate memory guint size = data.size()/2; if ((size == 0) || (size%16 != 0)) return std::string (""); unsigned char *bin = new unsigned char[size+1]; if (!bin) return std::string (""); unsigned char *result = new unsigned char[size+1]; if (!result) return std::string (""); // ASCII to Binary for (guint i = 0; i < size; i++) bin[i] = 16*g_ascii_xdigit_value (data[2*i]) + g_ascii_xdigit_value (data[2*i+1]); bin[size] = '\0'; // Decrypt via AES AES_KEY aes_key; for (guint i = 0, j = 0; i < size; i+=16) { AES_set_decrypt_key (phraseptr + j, 128, &aes_key); AES_decrypt (bin + i, result + i, &aes_key); if (++j > phraselen - 16) j = 0; } // Free memory std::string result_str = std::string (reinterpret_cast(result)); delete (bin); delete (result); return result_str; #else return std::string (""); #endif } /** * Encrypt the AES encrypted data {\em data} using the passphrase * {\em passphrase}. The 128 bit AES algorithm is used. * * Note: If no AES libraries are available or if an error occurs, this * function returns an empty string. * * @param passphrase Passphrase to be used for encryption (must be 16 * characters long) * @param data Decrypted data * @return Encrypted data */ std::string Decoding::encrypt_aes (const std::string &passphrase, const std::string &data) { #ifdef HAVE_AES const char hex[] = "0123456789ABCDEF"; const unsigned char *dataptr = reinterpret_cast(data.c_str ()); const unsigned char *phraseptr = reinterpret_cast(passphrase.c_str ()); guint phraselen = passphrase.size(); // Check Passphrase if (phraselen < 16) return std::string (""); // Determine size and allocate memory guint size = (data.size()+16)/16*16; if (size == 0) return std::string (""); unsigned char *result = new unsigned char[2*size]; if (!result) return std::string (""); // Encrypt via AES AES_KEY aes_key; for (guint i = 0, j = 0; i < size; i += 16) { AES_set_encrypt_key (phraseptr + j, 128, &aes_key); AES_encrypt (dataptr + i, result + i, &aes_key); if (++j > phraselen - 16) j = 0; } // Binary to ASCII for (guint i = size; i > 0; i--) { result[2*i-1] = hex[result[i-1]&0x0f]; result[2*i-2] = hex[result[i-1]/16]; } // Free memory std::string result_str = std::string (reinterpret_cast(result), 2*size); delete (result); return result_str; #else return std::string (""); #endif } gnubiff-2.2.16/src/option.cc0000644000175000017500000003301512474422123012554 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: option.cc,v $ // Revision : $Revision: 1.11.2.1 $ // Revision date : $Date: 2007/09/08 14:57:57 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : One option for gnubiff // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include "option.h" Option::Option () { name_ = std::string(""); type_ = OPTTYPE_NONE; group_ = OPTGRP_NONE; help_ = std::string(""); gui_ = OPTGUI_NONE; gui_name_ = std::string(""); flags_ = OPTFLG_NONE; } Option::Option (std::string name, guint group, std::string help, guint flags, OptionGUI gui, std::string gui_name) { name_ = name; type_ = OPTTYPE_NONE; group_ = group; help_ = help; gui_ = gui; gui_name_ = gui_name; flags_ = flags; } /** * Return all flags as a human readable list in a string. * * @param sep Separator between list elements, default is "; " * @return List of flags */ std::string Option::flags_string (std::string sep) { std::string result; if (flags_ == OPTFLG_NONE) return "none"; if (flags_ & OPTFLG_TEST_FILE) result += "only regular filenames allowed" + sep; if (flags_ & OPTFLG_ID_INT_STRICT) result += "only given identifiers allowed" + sep; if (flags_ & OPTFLG_FIXED) result += "option has fixed value" + sep; if (flags_ & OPTFLG_AUTO) result += "option is set automatically" + sep; if (flags_ & OPTFLG_NOSAVE) result += "option is not saved to config file" + sep; if (flags_ & OPTFLG_CHANGE) result += "editing this option may change other options" + sep; if (flags_ & OPTFLG_UPDATE) result += "option is automatically updated each time it is read" + sep; if (flags_ & OPTFLG_STRINGLIST) result += "option is a list" + sep; if (flags_ & OPTFLG_NOSHOW) result += "option is not to be shown" + sep; if (flags_ & OPTFLG_DEPRECATED) result += "option is deprecated" + sep; return result.substr (0, result.size()-sep.size()); } Option_UInt::Option_UInt (std::string name, guint group, std::string help, guint def, guint flags, const guint array_int[], const gchar *array_id[], OptionGUI gui, std::string gui_name) : Option (name, group, help, flags, gui, gui_name) { type_ = OPTTYPE_UINT; value_ = def; default_ = def; if ((array_int != NULL) && (array_id != NULL)) { guint i = 0; while (array_id[i] != NULL) { id_int_[std::string(array_id[i])] = array_int[i]; int_id_[array_int[i]] = std::string(array_id[i]); i++; } } } Option_UInt::Option_UInt (std::string name, guint group, std::string help, guint def, guint flags, OptionGUI gui, std::string gui_name) : Option (name, group, help, flags, gui, gui_name) { type_ = OPTTYPE_UINT; value_ = def; default_ = def; } std::string Option_UInt::to_string (void) { // Test whether there is an identifier for this value if (int_id_.find (value_) != int_id_.end ()) return int_id_[value_]; std::stringstream ss; ss << value_; return ss.str(); } std::string Option_UInt::default_string (void) { // Test whether there is an identifier for this value if (int_id_.find (default_) != int_id_.end ()) return int_id_[default_]; std::stringstream ss; ss << default_; return ss.str(); } gboolean Option_UInt::from_string (const std::string &value) { // Test whether the string is a known identifier if (id_int_.find (value) != id_int_.end ()) { value_ = id_int_[value]; return true; } guint tmp; std::stringstream ss (value); if ((!(ss >> tmp)) || ((flags_ & OPTFLG_ID_INT_STRICT) && (int_id_.find (tmp) == int_id_.end ()))) { value_ = default_; return false; } value_ = tmp; return true; } void Option_UInt::get_gui (std::vector &widgets) { switch (gui_) { case OPTGUI_SPIN: if (widgets[0]) value_ = (guint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets[0])); break; case OPTGUI_TOGGLE: if (widgets[0]) value_=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets[0])); break; case OPTGUI_RADIO: for (guint i = 0; i < widgets.size(); i++) { if (!widgets[i]) continue; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets[i]))) { value_ = i; break; } } break; default: break; } } void Option_UInt::set_gui (std::vector &widgets) { switch (gui_) { case OPTGUI_SPIN: if (widgets[0]) gtk_spin_button_set_value (GTK_SPIN_BUTTON(widgets[0]), value_); break; case OPTGUI_TOGGLE: if (widgets[0]) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets[0]),value_); break; case OPTGUI_RADIO: for (guint i = 0; i < widgets.size(); i++) { if (!widgets[i]) continue; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widgets[i]), i == value_); } break; default: break; } } /** * Reset the option to the default value. * * Remark: Instead of calling this function directly better call * Options::reset(). This function handles flags like OPTFLG_CHANGE! */ void Option_UInt::reset (void) { value_ = default_; } /** * Return all identifiers to which this option can be set. These will be * returned as a {\em sep} separated list in a string. * * @param sep List separator, default is " " * @return List (in a string) with all identifiers */ std::string Option_UInt::allowed_ids (std::string sep) { std::string result; std::map::iterator it = int_id_.begin (); while (it != int_id_.end ()) { if (it != int_id_.begin ()) result += sep; result += (it++)->second; } return result; } const std::string Option_UInt::value_to_string (guint val) { if (int_id_.find (val) != int_id_.end ()) return int_id_[val]; return std::string(""); } guint Option_UInt::string_to_value (const std::string &str) { if (id_int_.find (str) != id_int_.end ()) return id_int_[str]; return 0; } const gchar *Option_Bool::ids_[3] = {"false", "true", NULL}; const guint Option_Bool::ints_[3] = {0, 1, 0}; Option_Bool::Option_Bool (std::string name, guint group, std::string help, gboolean def, guint flags, OptionGUI gui, std::string gui_name, const gchar *gui_sensitive[], const gchar *gui_show[]) : Option_UInt (name, group, help, def, flags | OPTFLG_ID_INT_STRICT, ints_, ids_, gui, gui_name) { type_ = OPTTYPE_BOOL; guint i = 0; if (gui_sensitive) while (gui_sensitive[i] != NULL) gui_sensitive_.insert (std::string(gui_sensitive[i++])); if (gui_show) while (gui_show[i] != NULL) gui_show_.insert (std::string(gui_show[i++])); } Option_String::Option_String (std::string name, guint group, std::string help, std::string def, guint flags, OptionGUI gui, std::string gui_name) : Option (name, group, help, flags, gui, gui_name) { type_ = OPTTYPE_STRING; value_ = def; default_ = def; } std::string Option_String::to_string (void) { return value_; } std::string Option_String::default_string (void) { return default_; } gboolean Option_String::from_string (const std::string &value) { if (flags_ & OPTFLG_TEST_FILE) if (!g_file_test (value.c_str (), G_FILE_TEST_EXISTS)) return false; value_ = value; return true; } /** * Set the value of the option. This is done by creating a space separated * list of all the strings in the set {\em values}. If {\em empty} is true * the old value of the option will be overwritten, otherwise the new * strings are appended. Empty strings will not be stored. * * Note: Do not use this function directly, use the function * Options::set_values() instead. Then the OPTFLG_CHANGE flag will be * respected. * * Note: The character '\' is used as escape character, so "\x" as substring * in the stored option will be transformed to 'x' when obtaining the values * via Option_String::get_values() for any character 'x'. This is needed for * storing spaces and '\' itself. * * @param values New strings to add to the option's value * @param empty Shall the option be erased before appending (the * default is true)? */ void Option_String::set_values (const std::set &values, gboolean empty) { std::set::iterator i = values.begin (); if (empty) value_ = std::string(""); while (i != values.end()) { std::string str = *(i++); std::string::size_type len = str.size (); if (len == 0) continue; for (std::string::size_type j = 0; j < len ; j++) { if ((str[j] == ' ') || (str[j] == '\\')) value_ += '\\'; value_ += str[j]; } value_ += ' '; } } /** * Get the value of the option. The option's value is treated as a * space separated list of strings. Each string in this list is * returned in the set {\em var}. If {\em empty} is true then this set * will be emptied before obtaining the values, otherwise the new * strings are inserted in {\em var} in addition to the strings that * are in this set before calling this function. * * Note: Do not use this function directly, use the function * Options::get_values() instead. Then the OPTFLG_UPDATE flag will be * respected. * * @param values Set in which the strings will be returned * @param empty Shall the set {\em var} be erased before inserting * the strings (the default is true)? * * @see See the description of Option_String::set_values() for the handling * of the '\' character. */ void Option_String::get_values (std::set &values, gboolean empty) { if (empty) values.clear (); std::string tmp; std::string::size_type len = value_.size(); std::string::size_type pos = 0; while (pos < len) { // Remove spaces while ((pos < len) && (value_[pos] == ' ')) pos++; // Get quoted string if (pos < len) { if (get_quotedstring (value_, tmp, pos, ' ', false, true)) values.insert (tmp); else break; // we stop if there is an error } } } /** * Get the value of the option. The option's value is treated as a * space separated list of strings. Each string in this list is * returned in the vector {\em var} (in the same order as in the * string). If {\em empty} is true then this vector will be emptied * before obtaining the values, otherwise the new strings are * appended to {\em var}. * * Note: Do not use this function directly, use the function * Options::get_values() instead. Then the OPTFLG_UPDATE flag will be * respected. * * @param values Vector in which the strings will be returned * @param empty Shall the vector {\em var} be erased before * appending the strings (the default is true)? * * @see See the description of Option_String::set_values() for the handling * of the '\' character. */ void Option_String::get_values (std::vector &values, gboolean empty) { if (empty) values.clear (); std::string tmp; std::string::size_type len = value_.size(); std::string::size_type pos = 0; while (pos < len) { // Remove spaces while ((pos < len) && (value_[pos] == ' ')) pos++; // Get quoted string if (pos < len) { if (get_quotedstring (value_, tmp, pos, ' ', false, true)) values.push_back (tmp); else break; // we stop if there is an error } } } void Option_String::get_vector (std::vector &vector,gchar sep,gboolean empty) { if (empty) vector.clear (); std::string line = value_; if (sep != ' ') std::replace (line.begin(), line.end(), sep, ' '); std::stringstream ss (line); guint tmp; while (ss >> tmp) vector.push_back (tmp); } void Option_String::get_gui (std::vector &widgets) { switch (gui_) { case OPTGUI_ENTRY: if (widgets[0]) value_ = gtk_entry_get_text (GTK_ENTRY (widgets[0])); break; case OPTGUI_FONT: if (widgets[0]) value_=gtk_font_button_get_font_name (GTK_FONT_BUTTON(widgets[0])); break; default: break; } } void Option_String::set_gui (std::vector &widgets) { switch (gui_) { case OPTGUI_ENTRY: if (widgets[0]) gtk_entry_set_text (GTK_ENTRY (widgets[0]), value_.c_str()); break; case OPTGUI_FONT: if (widgets[0]) gtk_font_button_set_font_name (GTK_FONT_BUTTON (widgets[0]), value_.c_str()); break; default: break; } } /** * Reset the option to the default value. * * Remark: Instead of calling this function directly better call * Options::reset(). This function handles flags like OPTFLG_CHANGE! */ void Option_String::reset (void) { value_ = default_; } Option_Group::Option_Group () { help_ = std::string(""); id_ = OPTGRP_NONE; name_ = std::string(""); } Option_Group::Option_Group (std::string name, guint id, std::string help) { help_ = help; id_ = id; name_ = name; } gnubiff-2.2.16/src/ui-applet-gui.cc0000644000175000017500000003620312474422123013730 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: ui-applet-gui.cc,v $ // Revision : $Revision: 1.10.2.10 $ // Revision date : $Date: 2012/01/08 21:00:23 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "gtk_image_animation.h" #include "ui-applet-gui.h" #include "ui-authentication.h" #include "ui-popup.h" #include "ui-preferences.h" /** * Constructor. * * @param biff Pointer to the biff object of the current gnubiff * session. * @param filename Name of the glade file that contains the GUI * information. * @param callbackdata Pointer to be passed to the GUI callback functions. */ AppletGUI::AppletGUI (Biff *biff, std::string filename, gpointer callbackdata) : Applet (biff), GUI (filename) { // Set default values widget_max_height_ = G_MAXUINT; widget_max_width_ = G_MAXUINT; tooltip_widget_ = NULL; GUI::create (callbackdata); // Create image animation GtkImageAnimation *anim = new GtkImageAnimation (GTK_IMAGE(get("image"))); g_object_set_data (G_OBJECT(get("image")), "_animation_", anim); anim->open (biff_->value_string ("newmail_image")); anim->start (); // Create preferences dialog preferences_ = new Preferences (biff_); preferences_->create (preferences_); // Create popup dialog force_popup_ = false; popup_ = new Popup (biff_); popup_->create (popup_); // Create authentication dialog ui_auth_ = new Authentication (); // Connect signal for close button in about dialog (needed for gtk >=2.10) g_signal_connect (get ("gnubiffabout"), "response", G_CALLBACK (gtk_widget_hide), get ("gnubiffabout")); // Hide the about dialog when the delete event is signaled g_signal_connect (get ("gnubiffabout"), "delete-event", G_CALLBACK (gtk_widget_hide), get ("gnubiffabout")); } /// Destructor AppletGUI::~AppletGUI (void) { } /** * Return pointer to the applet. * * @return pointer to the applet */ class AppletGUI * AppletGUI::appletgui_ptr (void) { return this; } // ============================================================================ // tools // ============================================================================ /** * Get the size of the image/animation currently in use for the applet. * * @param widget_image Name of the image's widget. * @param width Width of the image (or 0 if there is no image). * @param height Height of the image (or 0 if there is no image). * @return False if there is currently no image available, true * otherwise. */ gboolean AppletGUI::get_image_size (std::string widget_image, guint &width, guint &height) { width = 0; height = 0; // Get widget (as GObject) GObject *widget = G_OBJECT (get (widget_image.c_str ())); if (!widget) return false; // Get animation GtkImageAnimation *anim; anim = static_cast( g_object_get_data (widget, "_animation_") ); if (!anim) return false; // Get image's current size width = anim->scaled_width (); height = anim->scaled_height (); return true; } /** * Resize the applet's image if it is currently too large. * * @param widget_image Name of the image's widget. * @param max_width Maximum width of the image (default is G_MAXUINT). * @param max_height Maximum height of the image (default is G_MAXUINT). * @return True if the image has been rescaled, false if there * is no image or if the image was not too large. */ gboolean AppletGUI::resize_image (std::string widget_image, guint max_width, guint max_height) { guint cur_width = 0, cur_height = 0; // Get widget (as GObject) GObject *widget = G_OBJECT (get (widget_image.c_str ())); if (!widget) return false; // Get animation GtkImageAnimation *anim; anim = static_cast( g_object_get_data (widget, "_animation_") ); if (!anim) return false; // Get image's current size cur_width = anim->scaled_width (); cur_height = anim->scaled_height (); // Determine new size of the image gboolean resize = false; if (cur_width > max_width) { cur_height = cur_height * max_width / cur_width; cur_width = max_width; resize = true; } if (cur_height > max_height) { cur_width = cur_width * max_height / cur_height; cur_height = max_height; resize = true; } // Resize the image if needed if (resize) anim->resize (cur_width, cur_height); return true; } // ============================================================================ // main // ============================================================================ /** * Start the applet. * * @param showpref If true and supported by the frontend the preferences * dialog is shown before monitoring starts (the default is * false). */ void AppletGUI::start (gboolean showpref) { if (showpref) show_dialog_preferences (); else { update (true, "image", "unread", "fixed"); show (); Applet::start (false); } } /** * Get the number of unread messages in all mailboxes as a string (with * pango markup for the font). * * @return Number of unread messages as a string. */ std::string AppletGUI::get_number_of_unread_messages (void) { std::string text; text = "value_string ("applet_font") + "\">"; text+= Applet::get_number_of_unread_messages (); text+= ""; return text; } /** * Update the applet status. This includes showing the * image/animation that corresponds to the current status of gnubiff * (no new messages or new messages are present). Also the text with * the current number of new messages is updated. If present a * container widget that contains the widgets for the image and the * text may be updated too. The status of the popup window is updated * (this is not done when this function is called during the * initialization of gnubiff). * * @param init True if called when initializing gnubiff (the * default is false). * @param widget_image Name of the widget that contains the image for * gnubiff's status or the empty string if * no image shall * be updated. The default * is the empty string. * @param widget_text Name of the widget that contains the text for * gnubiff's status or the empty string if * no text shall be updated. The default is * the empty string. * @param widget_container Name of the widget that contains the image and * text widget. If it's an empty string the container * widget (if present) will not be updated. The * default is the empty string. * @return True if new messages are present */ gboolean AppletGUI::update (gboolean init, std::string widget_image, std::string widget_text, std::string widget_container) { // Update applet's status: GUI-independent things to do gboolean newmail = Applet::update (init); // Get number of unread messages guint unread; biff_->get_number_of_unread_messages (unread); // Update popup if (!init && (popup_)) { // If there are no mails to display then hide popup if (!unread && (biff_->value_bool ("use_popup") || force_popup_)) hide_dialog_popup (); // Update and display the popup if (unread && ((biff_->value_bool ("use_popup")) || force_popup_) && (newmail || visible_dialog_popup () || force_popup_)) show_dialog_popup (); } // Update applet's image GtkWidget *widget = NULL; guint i_height = 0, i_width = 0; if (widget_image != "") { GtkImageAnimation *anim; widget = get (widget_image.c_str ()); anim = static_cast( g_object_get_data (G_OBJECT (widget), "_animation_") ); // Determine image std::string image; if ((unread == 0) && biff_->value_bool ("use_nomail_image")) image = biff_->value_string ("nomail_image"); if ((unread > 0) && biff_->value_bool ("use_newmail_image")) image = biff_->value_string ("newmail_image"); // Show/hide image if (image != "") { anim->open (image); // Resize image (if needed) resize_image (widget_image, widget_max_width_, widget_max_height_); // Get image's size get_image_size (widget_image, i_width, i_height); // Start animation in updated widget gtk_widget_set_size_request (widget, i_width, i_height); gtk_widget_show (widget); anim->start(); } else// Hide widget gtk_widget_hide (widget); } // Update applet's text GtkLabel *label = NULL; guint t_height = 0, t_width = 0; if (widget_text != "") { label = GTK_LABEL (get (widget_text.c_str ())); // Set label std::string text = get_number_of_unread_messages (); gtk_label_set_markup (label, text.c_str()); if (((unread == 0) && biff_->value_bool ("use_nomail_text")) || ((unread > 0) && biff_->value_bool ("use_newmail_text"))) { // Show widget gtk_widget_show (GTK_WIDGET (label)); // Resize label gtk_widget_set_size_request (GTK_WIDGET (label), -1, -1); GtkRequisition req; gtk_widget_size_request (GTK_WIDGET (label), &req); t_width = req.width; t_height = req.height; } else// Hide widget gtk_widget_hide (GTK_WIDGET (label)); } // Update the container widget guint c_width = 0, c_height = 0; if (widget_container != "") { GtkFixed *fixed = GTK_FIXED (get (widget_container.c_str ())); // Calculate size of container: Image and text should fit into it. c_width = std::max (i_width, t_width); c_height = std::max (i_height, t_height); // Resize container and move widgets inside it to the right position if ((c_width > 0) && (c_height > 0)) { gtk_widget_set_size_request (GTK_WIDGET(fixed), c_width, c_height); if (label) gtk_fixed_move (fixed, GTK_WIDGET (label), (c_width-t_width)/2, c_height-t_height); if (widget) gtk_fixed_move (fixed, widget, (c_width-i_width)/2, 0); } } // Reset the force popup boolean force_popup_ = false; return newmail; } /** * Show the preferences dialog. Monitoring of the mailboxes will be stopped. */ void AppletGUI::show_dialog_preferences (void) { // Hide the popup window if (popup_) popup_->hide(); // Show the dialog if (preferences_) preferences_->show(); // Stop monitoring mailboxes biff_->stop_monitoring (); } /** * Hide the preferences dialog. Monitoring of the mailboxes will be started * again (if automatic checking is enabled). */ void AppletGUI::hide_dialog_preferences (void) { // Hide the preferences dialog if (preferences_) preferences_->hide(); // Start monitoring of the mailboxes (if wanted) if (biff_->value_uint ("check_mode") == AUTOMATIC_CHECK) biff_->start_monitoring (3); // Update applet's status update (true, "image", "unread", "fixed"); show(); } /** * Is the preferences dialog visible? * * @return True, if the preferences dialog is visible, false otherwise. */ gboolean AppletGUI::visible_dialog_preferences (void) { return (preferences_ && gtk_widget_get_visible (preferences_->get ())); } /** * Show the about dialog. */ void AppletGUI::show_dialog_about (void) { // Hide the other dialogs if (popup_) popup_->hide (); if (preferences_) preferences_->hide (); // Show the dialog GUI::show ("gnubiffabout"); } /** * Hide the about dialog. */ void AppletGUI::hide_dialog_about (void) { GUI::hide ("gnubiffabout"); } /** * Show the popup dialog. */ void AppletGUI::show_dialog_popup (void) { if (popup_) { // First hide and update the popup hide_dialog_popup (); guint num = popup_->update (); // Show it only if there is at least one header if (num) popup_->show(); } } /** * Hide the popup dialog. */ void AppletGUI::hide_dialog_popup (void) { if (popup_) popup_->hide (); } /** * Is the popup dialog visible? * * @return True, if the popup dialog is visible, false otherwise. */ gboolean AppletGUI::visible_dialog_popup (void) { return (popup_ && gtk_widget_get_visible (popup_->get ("dialog"))); } /** * This function is called when the mailbox {\em from} is being replaced by * the mailbox {\em to}. * * If necessary the selection in the preferences dialog will be updated. * * @param from Mailbox to be replaced * @param to Mailbox that replaces the mailbox {\em from} */ void AppletGUI::mailbox_to_be_replaced (class Mailbox *from, class Mailbox *to) { // Is the to be deleted mailbox selected in the preferences dialog? if ((preferences_) && (preferences_->selected() == from)) preferences_->selected (to); } /** * The return value indicates whether the applet wants the mailboxes to be * monitored. * * If the preferences dialog is open, then there should be no monitoring. * * @return true, if the applet thinks monitoring the mailboxes is okay */ gboolean AppletGUI::can_monitor_mailboxes (void) { return !(visible_dialog_preferences ()); } /** * Ask the user for the user id and password of the mailbox {\em mb}. * * @param mb Mailbox */ void AppletGUI::get_password_for_mailbox (Mailbox *mb) { ui_auth_->select (mb); } /** * Attach a tooltip to an applet's widget. This tooltip contains information * about the status of the applet's mailboxes. * * @param widget Applet's widget that shall get the tooltip. */ void AppletGUI::tooltip_update (void) { if (!tooltip_widget_) return; // Get text for tooltip std::string text = get_mailbox_status_text (); // Put text in tooltip gtk_widget_set_tooltip_text (tooltip_widget_, text.c_str()); } /** * Enable or disable the popup dialog. The display is updated according to * the intended action. * * @param enable Boolean that indicates whether to enable (if true) or * disable (if false) the popup. */ void AppletGUI::enable_popup (gboolean enable) { // Is there no change in the value? if (biff_->value_bool ("use_popup") == enable) return; // Change the value biff_->value ("use_popup", enable); // Update the preferences dialog if (visible_dialog_preferences ()) preferences_->synchronize (); // Update the popup dialog if (!enable) hide_dialog_popup (); } gnubiff-2.2.16/src/gnubiff.schemas0000644000175000017500000000056112474422123013722 00000000000000 /schemas/apps/gnubiff/prefs/theme_path gnubiff string Directory in which the theme is located gnubiff-2.2.16/src/gui.h0000644000175000017500000000564012474422123011675 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gui.h,v $ // Revision : $Revision: 1.6.2.4 $ // Revision date : $Date: 2012/01/08 20:59:06 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __GUI_H__ #define __GUI_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "support.h" class GUI : public Support { protected: /// interface description using XML-GTKBuilder file GtkBuilder *gtkbuilder_; std::string filename_; // name of the interface file public: /* base */ GUI (std::string filename); virtual ~GUI (void); /* main */ virtual gint create (gpointer callbackdata); void create_insert_version (void); virtual void show (std::string name = "dialog"); virtual void hide (std::string name = "dialog"); gboolean browse (std::string title, std::string widget_name, gboolean file_and_folder = false, GtkWidget *widget = 0); /* access */ GtkWidget * get (std::string name = "dialog"); std::string utf8_to_filename (std::string text); std::string utf8_to_locale (std::string text); std::string filename_to_utf8 (std::string text); std::string locale_to_utf8 (std::string text); /* frequent callbacks */ virtual gboolean on_delete (GtkWidget *widget, GdkEvent *event); virtual gboolean on_destroy (GtkWidget *widget, GdkEvent *event); virtual void on_ok (GtkWidget *widget) {} virtual void on_apply (GtkWidget *widget) {} virtual void on_close (GtkWidget *widget) {} virtual void on_cancel (GtkWidget *widget) {} }; /* "C" bindings */ extern "C" { void GUI_connect (const gchar *handler_name, GObject *object, const gchar *signal_name, const gchar *signal_data, GObject *connect_object, gboolean after, gpointer user_data); void GUI_update_preview (GtkWidget *widget, gpointer data); } #endif gnubiff-2.2.16/src/support.cc0000644000175000017500000002630012474422123012757 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: support.cc,v $ // Revision : $Revision: 1.26.2.4 $ // Revision date : $Date: 2012/02/26 09:21:47 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Support functions // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include #include #include #include #include #include #include #include "support.h" /** * Duplicates the first {\em n} characters of a valid utf-8 character array, * returning a newly-allocated buffer {\em n + 1} characters long which will * always be nul-terminated. If {\em str} is less than {\em n} characters long * the buffer is padded with nuls. If {\em str} is NULL it returns NULL. The * returned value should be freed when no longer needed. * * @param str the valid utf-8 character array to duplicate * @param n the maximum number of utf-8 characters to copy from {\em str} * @return a newly-allocated buffer containing the first {\em n} * characters of {\em str}, nul-terminated */ gchar* Support::utf8_strndup (const gchar *str, gsize n) { // No String if (str == NULL) return NULL; // Find the first character not to be copied gsize i = 0; const gchar *lastpos = str; while ((i++ < n) && (*lastpos)) lastpos = g_utf8_next_char (lastpos); gsize len = lastpos-str; return g_strndup (str, MAX (len,n)); } /** * Similar to the printf function all '%'-sequences in {\em format} are * substituted with strings of {\em toinsert}. A '%' at the end of {\em format} * is erased, '%%' leads to '%' in the return value. The sequence '%x' is * erased if character 'x' is no element of {\em chars}, otherwise it is * replaced by a string of the array {\em toinsert}: If 'x' is the {\em n}-th * character in {\em chars} it is substituted with the {\em n}-th string of * {\em toinsert} (if there are multiple occurances of 'x' in {\em chars} the * first is taken). * * If all strings are valid utf-8 strings and all characters in {\em chars} * are single byte utf-8 characters the return value will be a valid utf-8 * string. * * @param format the format string * @param chars the string made up of characters to be substituted in * {\em format} when following a '%' * @param toinsert the array of strings to be inserted into the format string * {\em format} * @return format string {\em format} with all '%'-sequences * substituted */ std::string Support::substitute(std::string format, std::string chars, std::vector toinsert) { std::string::size_type pos = 0, cpos, prevpos=0; std::string::size_type len = format.length(); std::string result(""); while ((pos < len) && (pos = format.find("%", prevpos)) != std::string::npos) { if (prevpos < pos) result.append (format, prevpos, pos-prevpos); prevpos = pos+2; // '%' at end of string if (pos+1 == len) return result; // '%%' if (format[pos+1] == '%') { result+='%'; continue; } // generic case if ((cpos = chars.find(format[pos+1])) == std::string::npos) continue; result += toinsert[cpos]; } if (prevpos &vec, gboolean empty, char sep, char range) { std::string::size_type len = seq.length(), pos = 0; guint inf_bound = 0, sup_bound = 0; // Clear vector if wished by the user if (empty) vec.clear (); while (pos < len) { char c = seq[pos++]; // Got a digit? if (g_ascii_isdigit (c)) { // Do we already have a number? if (sup_bound > 0) return false; // Get number sup_bound = c - '0'; while ((pos < len) && (g_ascii_isdigit (seq[pos]))) sup_bound = 10*sup_bound + (seq[pos++] - '0'); continue; } // Range indicator? if (c == range) { // Test for "num-num-num" format error if (inf_bound > 0) return false; inf_bound = sup_bound; sup_bound = 0; continue; } // Separator? if (c == sep) { // No number at all or no end of range given if (sup_bound == 0) return false; // Convert single number to range if (inf_bound == 0) inf_bound = sup_bound; // Add numbers to vector for (guint i = inf_bound; i <= sup_bound; i++) vec.push_back (i); inf_bound = 0; sup_bound = 0; continue; } // Ignore whitespace and newlines if ((c == ' ') || (c == '\t') || (c == '\n') || (c == '\r')) continue; // Other character return false; } // Add last number/range if (sup_bound == 0) return true; // Convert single number to range if (inf_bound == 0) inf_bound = sup_bound; // Add numbers for (guint i = inf_bound; i <= sup_bound; i++) vec.push_back (i); return true; } /** * Convert a string in the format "x.y.z" to the integer 1000000x+1000y+z. * * Note: There are no checks for the string to be in the format "x.y.z". * * @param versionstr The string in "x.y.z" format. * @param sep Separator to be used in the string (default is '.'). * @return Integer 1000000x+1000y+z. */ guint Support::version_to_integer (std::string versionstr, gchar sep) { std::replace (versionstr.begin(), versionstr.end(), sep, ' '); std::stringstream tmpstr (versionstr); guint tmp, version; tmpstr >> tmp; version = 1000*1000*tmp; tmpstr >> tmp; version += 1000*tmp; tmpstr >> tmp; version += tmp; return version; } /** * Add the name of a file (or directory) to the given path {\em path}. * * @param path Path to which {\em file} will be added. * @param file Name of the file (or directory) that will be added to * {\em path}. * @return Resulting path or the empty string in case of an error. */ std::string Support::add_file_to_path (const std::string &path, const std::string file) { std::string result = std::string (""); gchar *newpath = g_build_filename (path.c_str(), file.c_str(), NULL); if (newpath) result = std::string (newpath); g_free (newpath); return result; } /** * Return the basename of the given path {\em path}. * * @param path Path of which the basename is to be returned. * @return Basename of {\em path} or the empty string in case of an * error */ std::string Support::path_get_basename (const std::string &path) { std::string result = std::string (""); gchar *base = g_path_get_basename (path.c_str()); if (base) result = std::string (base); g_free (base); return result; } /** * Return the directory components of the filename {\em path}. * * @param path Path of which the directory components are to be returned * @return Directory components of the empty string in case of an error */ std::string Support::path_get_dirname (const std::string &path) { std::string result = std::string (""); gchar *dir = g_path_get_dirname (path.c_str()); if (dir) result = std::string (dir); g_free (dir); return result; } /** * An unknown internal error has been encountered. Print a message that * asks the user to send a bug report. Print some additional information * that may be of use. * * @param file Source file in which the error is * @param line Source line in which the error is * @param func Name of the function in which the error is * @param signal Signal that caused the error */ void Support::unknown_internal_error_ (const gchar *file, guint line, const gchar *func, const gchar *signal) { std::stringstream ss; utsname uts; // Get system information if (uname (&uts) < 0) { uts.sysname[0] = '\0'; uts.release[0] = '\0'; uts.version[0] = '\0'; uts.machine[0] = '\0'; } // Create error message ss << _("You just found an unknown internal error. Please send a detailed " "bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n\n" "Additional information:\n"); if (file) { ss << "file : " << file << "\n"; ss << "line : " << line << "\n"; ss << "function : " << func << "\n"; } if (signal) ss << "signal : " << signal << "\n"; ss << "date : " << __DATE__ << " " << __TIME__ << "\n"; ss << "gnubiff : " << PACKAGE_VERSION << " "; ss << (IS_CVS_VERSION ? "CVS\n" : "\n"); ss << "\n"; ss << "system : " << uts.sysname << " " << uts.release << " "; ss << uts.version << " " << uts.machine << "\n"; ss << "sizeof : " << "gint=" << sizeof (gint) << " "; ss << "gsize=" << sizeof (gsize) << " "; ss << "s:s:s_t="<. // ======================================================================== // // File : $RCSfile: signals.h,v $ // Revision : $Revision: 1.3.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Handling of signals // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __SIGNALS_H__ #define __SIGNALS_H__ #include #ifdef HAVE_CONFIG_H # include #endif /** * Static functions for handling signals. */ class Signals { public: static gboolean init_signals (class Biff *biff); static void signal_handler (int signum); private: static class Biff *biff_; }; #endif gnubiff-2.2.16/src/pop.h0000644000175000017500000000757212474422123011715 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: pop.h,v $ // Revision : $Revision: 1.12.2.2 $ // Revision date : $Date: 2008/04/25 22:53:05 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __POP_H__ #define __POP_H__ #include "mailbox.h" #include #define POP(x) (static_cast(x)) /** * Mailbox for the POP3 and APOP protocols. This serves only as a base for * the more specific mailboxes for these protocols. */ class Pop : public Mailbox { protected: /// Socket to talk to the server class Socket * socket_; public: // ======================================================================== // base // ======================================================================== Pop (class Biff *biff); Pop (const Mailbox &other); virtual ~Pop (void); // ======================================================================== // exceptions // ======================================================================== /** Generic exception for POP3 and APOP mailboxes serving as a base for * more specific exceptions. */ class pop_err : public mailbox_err {}; /** Exception for a socket connection failure. Usually this is thrown when * reading or writing. */ class pop_socket_err : public pop_err {}; /** Exception for a problem with a POP3 command. This exception may be * thrown in the following situations: * \begin{itemize} * \item There is an error when creating the line that is to be sent to * the server * \item There is an unexpected response by the server to the command * \item The command is not responded by OK * \end{itemize} */ class pop_command_err : public pop_err {}; /// This exception is thrown when a DoS attack is suspected. class pop_dos_err : public pop_err {}; /** This exception is thrown when login because the user provides no * password. */ class pop_nologin_err : public pop_err {}; // ======================================================================== // main // ======================================================================== virtual void threaded_start (guint delay = 0); void start (void) throw (pop_err); void fetch (void) throw (pop_err); virtual void connect (void) throw (pop_err); void fetch_mails (gboolean statusonly = false) throw (pop_err); protected: void command_quit (void) throw (pop_err); guint command_stat (void) throw (pop_err); void command_top (std::vector &, guint) throw (pop_err); void command_uidl (guint, std::map &) throw (pop_err); std::string command_uidl (guint) throw (pop_err); gint readline (std::string &, gboolean print=true, gboolean check=true, gboolean checkline=true) throw (pop_err); gint sendline (const std::string, gboolean print=true, gboolean check=true) throw (pop_err); }; #endif gnubiff-2.2.16/src/mh_basic.h0000644000175000017500000000441212474422123012652 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: mh_basic.h,v $ // Revision : $Revision: 1.3.2.1 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : Base class for all local protocols similar to mh // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __MH_BASIC_H__ #define __MH_BASIC_H__ #include #include #include "local.h" /** * Base class for all local protocols similar to mh. Can be used itself for * mail notification but determining mail status is not very efficient. This * is because message numbers of unread messages cannot be obtained. */ class Mh_Basic : public Local { protected: public: // ======================================================================== // base // ======================================================================== Mh_Basic (class Biff *biff); Mh_Basic (const Mailbox &other); ~Mh_Basic (void); // ======================================================================== // main // ======================================================================== virtual void get_messagenumbers (std::vector &msn, gboolean empty = true) throw (local_err); void fetch (void) throw (local_err); }; #endif gnubiff-2.2.16/src/biff.h0000644000175000017500000001143012474422123012011 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: biff.h,v $ // Revision : $Revision: 1.28.2.2 $ // Revision date : $Date: 2008/04/25 22:52:59 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __BIFF_H__ #define __BIFF_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "decoding.h" #include "gnubiff_options.h" #include "header.h" #define BIFF(x) (static_cast(x)) class Biff : public Gnubiff_Options { public: // ======================================================================== // general // ======================================================================== protected: // ======================================================================== // internal // ======================================================================== // All mailboxes that are being monitored std::vector mailbox_; /** * Access mutex. This mutex has to be locked for working with the * mailboxes. */ GMutex * mutex_; /// Mutex for obtaining passwords GMutex *auth_mutex_; /// Applet user interface class Applet * applet_; /// Buffer for temporary saving values when loading the config file std::map buffer_load_; public: // ======================================================================== // base // ======================================================================== Biff (guint ui_mode = MODE_GTK, std::string filename = ""); ~Biff (void); // ======================================================================== // access // ======================================================================== gboolean find_message (std::string mailid, Header &mail); class Mailbox * mailbox (guint index); class Mailbox * get (guint uin); class Applet *applet (void) {return applet_;} // ======================================================================== // main -- mailbox handling // ======================================================================== void add_mailbox (Mailbox *mailbox); guint get_number_of_mailboxes (void); std::vector
get_message_headers (gboolean use_max_num = false, guint max_num = 0); gboolean get_number_of_unread_messages (guint &num); gboolean get_password_for_mailbox (Mailbox *mailbox); void mark_messages_as_read (void); void messages_displayed (void); void remove_mailbox (Mailbox *mailbox); Mailbox *replace_mailbox (Mailbox *from, Mailbox *to); void start_monitoring (guint delay = 0); void stop_monitoring (void); // ======================================================================== // options // ======================================================================== void option_changed (Option *option); void option_update (Option *option); void upgrade_options (void); // ======================================================================== // i/o // ======================================================================== gboolean load (void); protected: std::vector save_blocks; std::stringstream save_file; void save_newblock (const gchar *name); void save_endblock (void); public: void save_parameters (std::map &map, std::string block = std::string("")); gboolean save (void); void xml_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, GError **error); void xml_end_element (GMarkupParseContext *context, const gchar *element_name, GError **error); void xml_error (GMarkupParseContext *context, GError *error); }; #endif gnubiff-2.2.16/src/gnubiff_options.h0000644000175000017500000000670212474422123014304 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gnubiff_options.h,v $ // Revision : $Revision: 1.11.2.2 $ // Revision date : $Date: 2007/09/08 18:06:30 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : Options for gnubiff // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #ifndef __GNUBIFF_OPTIONS_H__ #define __GNUBIFF_OPTIONS_H__ #ifdef HAVE_CONFIG_H # include #endif #include #include "options.h" /** * Constant definitions **/ const guint MANUAL_CHECK = 0; const guint AUTOMATIC_CHECK = 1; const guint MODE_GTK = 0; const guint MODE_GNOME = 1; const guint MODE_NOGUI = 2; const guint MODE_SYSTEMTRAY = 3; const guint PROTOCOL_NONE = 0; const guint PROTOCOL_FILE = 1; const guint PROTOCOL_POP3 = 2; const guint PROTOCOL_IMAP4 = 3; const guint PROTOCOL_MAILDIR = 4; const guint PROTOCOL_MH = 5; const guint PROTOCOL_APOP = 6; const guint PROTOCOL_MH_BASIC = 7; const guint PROTOCOL_MH_SYLPHEED= 8; const guint AUTH_AUTODETECT = 0; const guint AUTH_USER_PASS = 1; const guint AUTH_APOP = 2; const guint AUTH_SSL = 3; const guint AUTH_CERTIFICATE = 4; const guint AUTH_NONE = (guint)-1; const guint MAILBOX_ERROR = 0; const guint MAILBOX_EMPTY = 1; const guint MAILBOX_OLD = 2; const guint MAILBOX_NEW = 3; const guint MAILBOX_CHECK = 4; const guint MAILBOX_STOP = 5; const guint MAILBOX_UNKNOWN = 6; const guint SIGNAL_NONE = 0; const guint SIGNAL_MARK_AS_READ = 1; const guint SIGNAL_START = 2; const guint SIGNAL_STOP = 3; const guint SIGNAL_POPUP_ENABLE = 4; const guint SIGNAL_POPUP_DISABLE = 5; const guint SIGNAL_POPUP_TOGGLE = 6; const guint SIGNAL_POPUP_SHOW = 7; const guint SIGNAL_POPUP_HIDE = 8; const guint SIGNAL_POPUP_TOGGLEVISIBLE = 9; const guint OPTGRP_GENERAL = 1; const guint OPTGRP_APPLET = 2; const guint OPTGRP_POPUP = 4; const guint OPTGRP_MAILBOX = 8; const guint OPTGRP_INFORMATION = 16; const guint OPTGRP_SECURITY = 32; class Gnubiff_Options : public Options { public: protected: void add_options (guint groups, gboolean deprecated = false); private: void add_options_applet (gboolean deprecated); void add_options_general (gboolean deprecated); void add_options_information (gboolean deprecated); void add_options_mailbox (gboolean deprecated); void add_options_popup (gboolean deprecated); void add_options_security (gboolean deprecated); const static guint protocol_int[]; const static gchar *protocol_gchar[]; }; #endif gnubiff-2.2.16/src/gnubiff_options.cc0000644000175000017500000010527212474422123014444 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: gnubiff_options.cc,v $ // Revision : $Revision: 1.51.2.3 $ // Revision date : $Date: 2007/09/08 14:57:56 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : Options for gnubiff // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "gnubiff_options.h" #include "nls.h" const guint Gnubiff_Options::protocol_int[] = { PROTOCOL_NONE, PROTOCOL_FILE, PROTOCOL_POP3, PROTOCOL_IMAP4, PROTOCOL_MAILDIR, PROTOCOL_MH, PROTOCOL_APOP, PROTOCOL_MH_BASIC, PROTOCOL_MH_SYLPHEED, 0 }; const gchar *Gnubiff_Options::protocol_gchar[] = { "-", "file", "pop3", "imap4", "maildir", "mh", "apop", "mhbasic", "sylpheed", NULL }; /** * Add options of the given groups. * * @param groups Groups of which the options shall be added. * @param deprecated Shall deprecated options be added? The default is * false. */ void Gnubiff_Options::add_options (guint groups, gboolean deprecated) { if (groups & OPTGRP_APPLET) add_options_applet (deprecated); if (groups & OPTGRP_GENERAL) add_options_general (deprecated); if (groups & OPTGRP_INFORMATION) add_options_information (deprecated); if (groups & OPTGRP_MAILBOX) add_options_mailbox (deprecated); if (groups & OPTGRP_POPUP) add_options_popup (deprecated); if (groups & OPTGRP_SECURITY) add_options_security (deprecated); } /** * Add options for the appearance of the applet. * * @param deprecated Shall deprecated options be added? */ void Gnubiff_Options::add_options_applet (gboolean deprecated) { add_group (new Option_Group ("applet", OPTGRP_APPLET, "Appearance of the applet.")); // APPLET_USE_DECORATION add_option (new Option_Bool ("applet_use_decoration", OPTGRP_APPLET, "Shall the gnubiff applet window have window manager decoration?", false, OPTFLG_NONE, OPTGUI_TOGGLE, "applet_decoration_check")); // APPLET_TASKBAR add_option (new Option_Bool ("applet_taskbar", OPTGRP_POPUP, "Shall the gnubiff applet window appear in the taskbar?", true)); // APPLET_BE_STICKY add_option (new Option_Bool ("applet_be_sticky", OPTGRP_APPLET, "Shall the gnubiff applet window be sticky (i.e. appear on all " "workspaces)?", false)); // APPLET_KEEP_ABOVE add_option (new Option_Bool ("applet_keep_above", OPTGRP_APPLET, "Shall the gnubiff applet window always be kept above other windows?", false)); // APPLET_PAGER add_option (new Option_Bool ("applet_pager", OPTGRP_APPLET, "Shall the gnubiff applet window appear in pagers?", false)); // USE_NEWMAIL_TEXT const static gchar *s1[] = {"newmail_text_entry", NULL}; add_option (new Option_Bool ("use_newmail_text", OPTGRP_APPLET, "Shall a text be printed into the applet if new mails are present?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "newmail_text_check", s1)); // NEWMAIL_TEXT add_option (new Option_String ("newmail_text", OPTGRP_APPLET, "Text to be printed into the applet if new mails are present " "(%d is the number of new messages).", "%d", OPTFLG_NONE, OPTGUI_ENTRY, "newmail_text_entry")); // USE_NEWMAIL_IMAGE const static gchar *s2[] = {"newmail_image_entry", "newmail_image_browse", NULL}; add_option (new Option_Bool ("use_newmail_image", OPTGRP_APPLET, "Shall a image be displayed in the applet if new mails are present?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "newmail_image_check", s2)); // NEWMAIL_IMAGE add_option (new Option_String ("newmail_image", OPTGRP_APPLET, "Filename of the image to be displayed in the applet if new mails are " "present.", GNUBIFF_DATADIR"/tux-awake.png", OPTFLG_TEST_FILE, OPTGUI_ENTRY, "newmail_image_entry")); // USE_NOMAIL_TEXT const static gchar *s3[] = {"nomail_text_entry", NULL}; add_option (new Option_Bool ("use_nomail_text", OPTGRP_APPLET, "Shall a text be printed into the applet if no mails are present?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "nomail_text_check", s3)); // NOMAIL_TEXT add_option (new Option_String ("nomail_text", OPTGRP_APPLET, "Text to be printed into the applet if no mails are present.", _("no mail"), OPTFLG_NONE, OPTGUI_ENTRY, "nomail_text_entry")); // USE_NOMAIL_IMAGE const static gchar *s4[] = {"nomail_image_entry", "nomail_image_browse", NULL}; add_option (new Option_Bool ("use_nomail_image", OPTGRP_APPLET, "Shall a image be displayed in the applet if no mails are present?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "nomail_image_check", s4)); // NOMAIL_IMAGE add_option (new Option_String ("nomail_image", OPTGRP_APPLET, "Filename of the image to be displayed in the applet if no mails are " "present.", GNUBIFF_DATADIR"/tux-sleep.png", OPTFLG_TEST_FILE, OPTGUI_ENTRY, "nomail_image_entry")); // APPLET_USE_GEOMETRY const static gchar *s5[] = {"applet_geometry_entry", NULL}; add_option (new Option_Bool ("applet_use_geometry", OPTGRP_APPLET, "Shall the given geometry be used for positioning the applet window?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "applet_geometry_check", s5)); // APPLET_GEOMETRY add_option (new Option_String ("applet_geometry", OPTGRP_APPLET, "Geometry to be used for positioning the applet window.", "+0+0", OPTFLG_NONE, OPTGUI_ENTRY, "applet_geometry_entry")); // APPLET_FONT add_option (new Option_String ("applet_font", OPTGRP_APPLET, "Font to be used in the applet.", "sans 10", OPTFLG_NONE, OPTGUI_FONT, "applet_font_button")); if (!deprecated) return; } /** * Add general options * * @param deprecated Shall deprecated options be added? */ void Gnubiff_Options::add_options_general (gboolean deprecated) { add_group (new Option_Group ("general", OPTGRP_GENERAL, "General options.")); // CONFIG_FILE gchar *filename = g_build_filename (g_get_home_dir (),".gnubiffrc", NULL); add_option (new Option_String ("config_file", OPTGRP_GENERAL, "Filename of the configuration file.", filename, OPTFLG_NOSAVE)); g_free(filename); // NEWMAIL_COMMAND_ENTRY const static gchar *s2[] = {"newmail_command_entry", NULL}; add_option (new Option_Bool ("use_newmail_command", OPTGRP_GENERAL, "Shall a command be executed if new mail arrives?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "newmail_command_check", s2)); // NEWMAIL_COMMAND add_option (new Option_String ("newmail_command", OPTGRP_GENERAL, "Command to be executed if new mail arrives.", "play "GNUBIFF_DATADIR"/coin.wav", OPTFLG_NONE, OPTGUI_ENTRY, "newmail_command_entry")); // DOUBLE_COMMAND_ENTRY const static gchar *s3[] = {"double_command_entry", NULL}; add_option (new Option_Bool ("use_double_command", OPTGRP_GENERAL, "Shall a command be executed if the gnubiff applet is doubleclicked?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "double_command_check", s3)); // DOUBLE_COMMAND add_option (new Option_String ("double_command", OPTGRP_GENERAL, "Command to be executed if the gnubiff applet is doubleclicked.", "xemacs", OPTFLG_NONE, OPTGUI_ENTRY, "double_command_entry")); // CHECK_MODE const static guint i4[] = {MANUAL_CHECK, AUTOMATIC_CHECK, 0}; const static gchar *s4[] = {"manual", "automatic", NULL}; add_option (new Option_UInt ("check_mode", OPTGRP_GENERAL, "Automatic or manual checking for new mails?", AUTOMATIC_CHECK, OPTFLG_NOSAVE | OPTFLG_ID_INT_STRICT, i4,s4)); // MIN_BODY_LINES add_option (new Option_UInt ("min_body_lines", OPTGRP_GENERAL, "Minimum number of body lines of a mail to be read. If the mail's " "body is shorter then the whole body is read. If supported by the " "protocol gnubiff tries to read exactly this number of lines.", 25)); // DIR_CERTIFICATES add_option (new Option_String ("dir_certificates", OPTGRP_GENERAL, "Directory in which to look for certificates when building the " "certificate chain.", "/etc/ssl/certs/")); // EXPERT_SHOW_TAB const static gchar *s5[] = {"expert_vbox", NULL}; add_option (new Option_Bool ("expert_show_tab", OPTGRP_GENERAL, "Shall the expert dialog for editing all options be shown? Note: If " "this option is set to \"false\" it can only be changed to \"true\" " "by editing the config file manually. The default value of this " "option can be changed via an option to configure.", #ifdef EXPERT_SHOW_NO_TAB false, #else true, #endif OPTFLG_NONE, OPTGUI_TOGGLE, "expert_show_tab_check", NULL, s5)); // EXPERT_EDIT_OPTIONS const static gchar *s6[] = {"!expert_warning_vbox", "expert_editing_vbox", NULL}; add_option (new Option_Bool ("expert_edit_options", OPTGRP_GENERAL, "Shall expert mode editing be enabled? Otherwise a warning message is " "shown inside of the expert tab.", false, OPTFLG_NONE, OPTGUI_TOGGLE, "expert_edit_options_check", NULL, s6)); // EXPERT_SHOW_FIXED add_option (new Option_Bool ("expert_show_fixed", OPTGRP_GENERAL, "Shall options be displayed in the expert dialog that cannot be " "changed?", true)); #ifdef DEBUG // EXPERT_SHOW_NOSHOW add_option (new Option_Bool ("expert_show_noshow", OPTGRP_GENERAL, "Shall options be displayed in the expert dialog that are flagged " "for not to be shown? Usually there should be no need to view these " "options as they are only needed for internal use and can only be " "changed by setting other options. Viewing them may be of interest " "when debugging.", false)); #endif // EXPERT_SEARCH_VALUES add_option (new Option_Bool ("expert_search_values", OPTGRP_GENERAL, "When searching for options that contain a given string, examine " "option name and value if this option is true, otherwise examine " "only the option name?", false)); // EXPERT_HILITE_CHANGED add_option (new Option_Bool ("expert_hilite_changed", OPTGRP_GENERAL, "Shall all options that have not their default values and are " "editable by the user be highlighted?", true)); // FILTER_GLOBAL_FIRST add_option (new Option_String ("filter_global_first", OPTGRP_GENERAL, "Space separated list of regular expressions (as defined in " "POSIX 1003.2) used for filtering the header lines of obtained " "messages in each mailbox. The regular expressions are processed in " "the given order and before the mailbox specific regular expression " "or the regular expressions given in the option " "\"filter_global_last\".\n" "Each expression has to be prefixed by \"+\" or \"-\". Messages " "matching a \"+\"-expression are displayed, messages matching a " "\"-\"-expression are ignored. The \"+\" or \"-\" may be preceded by " "an \"I\" for case insensitive pattern matching.\n" "Note: For some protocols (e.g. IMAP4) not all header lines are " "retrieved.", "-^Status:\\ R " "-^X-Mozilla-Status:\\ 0001 " "I-^x-spam-flag:\\ yes " "-^Subject:.*DON'T\\ DELETE\\ THIS\\ MESSAGE\\ --\\ " "FOLDER\\ INTERNAL\\ DATA", OPTFLG_CHANGE | OPTFLG_STRINGLIST)); // FILTER_GLOBAL_LAST add_option (new Option_String ("filter_global_last", OPTGRP_GENERAL, "Space separated list of regular expressions (as defined in " "POSIX 1003.2) used for filtering the header lines of obtained " "messages in each mailbox. The regular expressions are processed in " "the given order and after the mailbox specific regular expression " "or the regular expressions given in the option " "\"filter_global_first\".\n" "For more details see the description of the option " "\"filter_global_first\".", "", OPTFLG_CHANGE | OPTFLG_STRINGLIST)); // PREF_ALLOW_RESIZE add_option (new Option_Bool ("pref_allow_resize", OPTGRP_GENERAL, "Shall it be allowed to resize the preferences dialog window?", false)); // SIGNAL_SIGUSR1 const static guint i7[] = {SIGNAL_NONE, SIGNAL_MARK_AS_READ, SIGNAL_START, SIGNAL_STOP, SIGNAL_POPUP_ENABLE, SIGNAL_POPUP_DISABLE, SIGNAL_POPUP_TOGGLE, SIGNAL_POPUP_SHOW, SIGNAL_POPUP_HIDE, SIGNAL_POPUP_TOGGLEVISIBLE, 0}; const static gchar *s7[] = {"none", "mark_as_read", "start", "stop", "popup_enable", "popup_disable", "popup_toggle", "popup_show", "popup_hide", "popup_togglevisible", NULL}; add_option (new Option_UInt ("signal_sigusr1", OPTGRP_GENERAL, "Action to be executed if the signal SIGUSR1 is caught by gnubiff. " "\nPossible actions are ignoring the signal (\"none\"), marking all " "messages as read (\"mark_as_read\"), starting monitoring " "(\"start\"), stopping monitoring (\"stop\"), enabling and disabling " "the popup (\"popup_enable\" and \"popup_disable\"), " "toggling the popup enabled status (\"popup_toggle\"), showing and " "hiding the popup (\"popup_show\" and \"popup_hide\"), or toggling " "the popup's visibility (\"popup_togglevisible\")", SIGNAL_MARK_AS_READ, OPTFLG_ID_INT_STRICT, i7, s7)); // SIGNAL_SIGUSR2 add_option (new Option_UInt ("signal_sigusr2", OPTGRP_GENERAL, "Action to be executed if the signal SIGUSR2 is caught by gnubiff. " "\nFor the available actions see the description of option " "SIGNAL_SIGUSR1.", SIGNAL_NONE, OPTFLG_ID_INT_STRICT, i7,s7)); // STARTUP_PREFERENCES add_option (new Option_Bool ("startup_preferences", OPTGRP_GENERAL, "Shall the preferences dialog be shown when starting gnubiff? " "This option is ignored in gnome mode.", true)); if (!deprecated) return; } /** * Add options that are for information purposes only. * * @param deprecated Shall deprecated options be added? */ void Gnubiff_Options::add_options_information (gboolean deprecated) { add_group (new Option_Group ("information", OPTGRP_INFORMATION, "Not to be changed, for information purposes only.")); // CONFIG_FILE_LOADED add_option (new Option_Bool ("config_file_loaded", OPTGRP_INFORMATION, "Has the configuration file been loaded?", false, OPTFLG_NOSAVE | OPTFLG_AUTO | OPTFLG_NOSHOW)); // GTK_MODE const static gchar *s1[] = {"applet_geometry_check", "applet_geometry_entry", "applet_decoration_check", NULL}; add_option (new Option_Bool ("gtk_mode", OPTGRP_INFORMATION, "Is gnubiff in GTK mode?", true, OPTFLG_NOSAVE | OPTFLG_AUTO | OPTFLG_NOSHOW, OPTGUI_NONE, "", s1)); // PROTOCOL add_option (new Option_UInt ("protocol", OPTGRP_INFORMATION, "For internal use only when loading config file.", PROTOCOL_NONE, OPTFLG_ID_INT_STRICT |OPTFLG_FIXED | OPTFLG_NOSAVE | OPTFLG_NOSHOW, protocol_int, protocol_gchar)); // UI_MODE const static guint i2[] = {MODE_GTK, MODE_GNOME, MODE_NOGUI, MODE_SYSTEMTRAY, 0}; const static gchar *s2[] = {"gtk", "gnome", "nogui", "systemtray", NULL}; add_option (new Option_UInt ("ui_mode", OPTGRP_INFORMATION, "User interface mode in which gnubiff is running.", MODE_GTK, OPTFLG_CHANGE | OPTFLG_ID_INT_STRICT | OPTFLG_FIXED | OPTFLG_NOSAVE | OPTFLG_NOSHOW, i2, s2)); // VERSION add_option (new Option_String ("version", OPTGRP_INFORMATION, "Version of gnubiff that is saved into the config file. This is " "needed for converting values (that have not changed from their " "default) automatically when loading an old config file. Options " "that were changed by the user usually have to be converted manually.", PACKAGE_VERSION, OPTFLG_FIXED | OPTFLG_NOSHOW)); if (!deprecated) return; } /** * Add options that are different for each mailbox. * * @param deprecated Shall deprecated options be added? */ void Gnubiff_Options::add_options_mailbox (gboolean deprecated) { add_group (new Option_Group ("mailbox", OPTGRP_MAILBOX, "Options that are mailbox dependant.")); // ADDRESS std::string address; if (g_getenv ("MAIL")) address = g_getenv ("MAIL"); else if (g_getenv ("HOSTNAME")) address = g_getenv ("HOSTNAME"); add_option (new Option_String ("address", OPTGRP_MAILBOX, "Address of the mailbox. For local mailboxes this is the name of the " "file or directory, for network mailboxes this is the internet " "address.", address, OPTFLG_NONE, OPTGUI_ENTRY, "address_entry")); // AUTHENTICATION const static guint i4[] = {AUTH_AUTODETECT, AUTH_USER_PASS, AUTH_APOP, AUTH_SSL, AUTH_CERTIFICATE, AUTH_NONE, 0}; const static gchar *s4[] = {"autodetect", "user_pass", "apop", "ssl", "certificate", "-", NULL}; add_option (new Option_UInt ("authentication", OPTGRP_MAILBOX, "Authentication to be used when connecting to the server via the " "internet.\n" "Attention: Don't use autodetection if you don't want your password " "to be sent over the network in clear. There may be a " "man-in-the-middle attack resulting in gnubiff sending the password " "in clear even if your server supports APOP or SSL.", AUTH_AUTODETECT, OPTFLG_CHANGE | OPTFLG_ID_INT_STRICT, i4,s4)); // CERTIFICATE add_option (new Option_String ("certificate", OPTGRP_MAILBOX, "Certificate to be used when using SSL.", "", OPTFLG_NONE, OPTGUI_ENTRY, "certificate_entry")); // NAME add_option (new Option_String ("name", OPTGRP_MAILBOX, "Name of the mailbox.", "", OPTFLG_NONE, OPTGUI_ENTRY, "name_entry")); // DELAY add_option (new Option_UInt ("delay", OPTGRP_MAILBOX, "Time interval between mail checks for mailboxes that use " "polling (in seconds).", 180, OPTFLG_CHANGE)); // DELAY_MINUTES add_option (new Option_UInt ("delay_minutes", OPTGRP_MAILBOX, "Minute part of the time interval between mail checks for network " "mailboxes when polling.", 3, OPTFLG_CHANGE | OPTFLG_NOSAVE, OPTGUI_SPIN, "minutes_spin")); // DELAY_SECONDS add_option (new Option_UInt ("delay_seconds", OPTGRP_MAILBOX, "Second part of the time interval between mail checks for network " "mailboxes when polling.", 0, OPTFLG_CHANGE | OPTFLG_NOSAVE, OPTGUI_SPIN, "seconds_spin")); // USE_OTHER_FOLDER const static gchar *s3[] = {"mailbox_entry", NULL}; add_option (new Option_Bool ("use_other_folder", OPTGRP_MAILBOX, "Shall not the standard folder be used when accessing an Imap4 " "server?", false, OPTFLG_CHANGE, OPTGUI_RADIO, "standard_mailbox_radio other_mailbox_radio", s3)); // OTHER_FOLDER add_option (new Option_String ("other_folder", OPTGRP_MAILBOX, "Folder to be used when accessing a non standard folder on the Imap4 " "server.", "INBOX", OPTFLG_CHANGE, OPTGUI_ENTRY, "mailbox_entry")); // FOLDER add_option (new Option_String ("folder", OPTGRP_MAILBOX, "Folder to be used when accessing an Imap4 server.", "INBOX", OPTFLG_AUTO | OPTFLG_NOSAVE)); // PASSWORD add_option (new Option_String ("password", OPTGRP_MAILBOX, "Password of the mailbox. This is needed to login into network " "mailboxes.", "", OPTFLG_NOSAVE | OPTFLG_NOSHOW, OPTGUI_ENTRY, "password_entry")); // PASSWORD_AES add_option (new Option_String ("password_aes", OPTGRP_MAILBOX, "AES encrypted version of this mailbox's password.", "", #ifdef USE_PASSWORD OPTFLG_CHANGE | OPTFLG_UPDATE #else OPTFLG_NOSAVE | OPTFLG_NOSHOW #endif )); // USE_OTHER_PORT const static gchar *s2[] = {"port_spin", NULL}; add_option (new Option_Bool ("use_other_port", OPTGRP_MAILBOX, "Shall not the standard port be used when connection to the server " "via the internet?", false, OPTFLG_CHANGE, OPTGUI_RADIO, "standard_port_radio other_port_radio", s2)); // OTHER_PORT add_option (new Option_UInt ("other_port", OPTGRP_MAILBOX, "Port to be used when connecting to the server via the internet on " "a non standard port.", 0, OPTFLG_CHANGE, OPTGUI_SPIN, "port_spin")); // PORT add_option (new Option_UInt ("port", OPTGRP_MAILBOX, "Port to be used when connecting to the server via the internet. " "If authentication is set to autodetect this option will be set " "when the mailbox is connected for the first time.", 0, OPTFLG_AUTO | OPTFLG_NOSAVE)); // PROTOCOL add_option (new Option_UInt ("protocol", OPTGRP_MAILBOX, "Protocol to be used by the mailbox.", PROTOCOL_NONE, OPTFLG_ID_INT_STRICT | OPTFLG_FIXED | OPTFLG_CHANGE, protocol_int, protocol_gchar)); // SEEN add_option (new Option_String ("seen", OPTGRP_MAILBOX, "Space separated list of mail identifiers of mails that have been " "marked as read.", "", OPTFLG_CHANGE | OPTFLG_UPDATE | OPTFLG_STRINGLIST)); // STATUS const static guint i5[] = {MAILBOX_ERROR, MAILBOX_EMPTY, MAILBOX_OLD, MAILBOX_NEW, MAILBOX_CHECK, MAILBOX_STOP, MAILBOX_UNKNOWN, 0}; const static gchar *s5[] = {"error", "empty", "old", "new", "check", "stop", "unknown", NULL}; add_option (new Option_UInt ("status", OPTGRP_MAILBOX, "Status of the mailbox.", MAILBOX_UNKNOWN, OPTFLG_ID_INT_STRICT | OPTFLG_AUTO | OPTFLG_NOSAVE, i5, s5)); // UIN add_option (new Option_UInt ("uin", OPTGRP_MAILBOX, "Unique identifier number of the mailbox.", 0, OPTFLG_CHANGE | OPTFLG_FIXED | OPTFLG_NOSAVE)); // USE_IDLE add_option (new Option_Bool ("use_idle", OPTGRP_MAILBOX, "Shall the IDLE command be used if the IMAP4 server supports it? " "This is usually a good idea. But if multiple clients connect to the " "same mailbox this can lead to connection errors (depending on the " "internal server configuration). For users encountering this problem " "it is better not to use idling but use polling instead.", true)); // USERNAME std::string username; if (g_get_user_name ()) username = g_get_user_name (); add_option (new Option_String ("username", OPTGRP_MAILBOX, "Username of the mailbox. This is needed to login into network " "mailboxes.", username, OPTFLG_NONE, OPTGUI_ENTRY, "username_entry")); // FILE_RESTORE_ATIME add_option (new Option_Bool ("file_restore_atime", OPTGRP_MAILBOX, "Some mail clients rely on the access time of the mail file for " "doing certain operations. Gnubiff will restore the original " "access and modified time if this option is set to true.\n" "Note: Setting this option to true may result in some new mails not " "being noticed because of race conditions.\n" "This option is used for the file protocol only.", false)); // LOCAL_FAM_ENABLE add_option (new Option_Bool ("local_fam_enable", OPTGRP_MAILBOX, "Shall the mailbox be monitored by the FAM demon (or a substitution " "like GAMIN)? If this option is set to false, polling will be used " "instead. The time between two checks is determined by the " "\"delay\" option of this mailbox.\n" "Note: If no support for FAM is compiled into the gnubiff binary " "this option is ignored and polling is always used.\n" "This option is used for the local protocols only.", true)); // ERROR_RESET_MSGS add_option (new Option_Bool ("error_reset_msgs", OPTGRP_MAILBOX, "Shall the read status of all messages be reset to unread if there is " "a failure in retrieving the mailbox's messages? This results in all " "messages be presented as new once messages can be obtained again.", false)); // FILTER_LOCAL add_option (new Option_String ("filter_local", OPTGRP_GENERAL, "Space separated list of regular expressions (as defined in " "POSIX 1003.2) used for filtering the header lines of obtained " "messages for this mailbox. The regular expressions are processed in " "the given order and after the regular expressions given in the " "option \"filter_global_first\" and before those in " "\"filter_global_first\".\n" "For more details see the description of the option " "\"filter_global_first\".", "", OPTFLG_CHANGE | OPTFLG_STRINGLIST)); if (!deprecated) return; } /** * Add options for the appearance of the popup * * @param deprecated Shall deprecated options be added? */ void Gnubiff_Options::add_options_popup (gboolean deprecated) { add_group (new Option_Group ("popup", OPTGRP_POPUP, "Appearance of the popup.")); // USE_POPUP const static gchar *s1[] = {"popup_delay_spin", NULL}; add_option (new Option_Bool ("use_popup", OPTGRP_POPUP, "Shall a popup window displayed when new mails are present?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "use_popup_check", s1)); // POPUP_DELAY add_option (new Option_UInt ("popup_delay", OPTGRP_POPUP, "Time that the popup window will be shown when new mails are present " "(in seconds).", 5, OPTFLG_NONE, OPTGUI_SPIN, "popup_delay_spin")); // POPUP_USE_DECORATION add_option (new Option_Bool ("popup_use_decoration", OPTGRP_POPUP, "Shall the gnubiff popup window have window manager decoration?", false, OPTFLG_NONE, OPTGUI_TOGGLE, "popup_decoration_check")); // POPUP_TASKBAR add_option (new Option_Bool ("popup_taskbar", OPTGRP_POPUP, "Shall the gnubiff popup window appear in the taskbar?", false)); // POPUP_BE_STICKY add_option (new Option_Bool ("popup_be_sticky", OPTGRP_POPUP, "Shall the gnubiff popup window be sticky (i.e. appear on all " "workspaces)?", false)); // POPUP_KEEP_ABOVE add_option (new Option_Bool ("popup_keep_above", OPTGRP_POPUP, "Shall the gnubiff popup window always be kept above other windows?", false)); // POPUP_PAGER add_option (new Option_Bool ("popup_pager", OPTGRP_POPUP, "Shall the gnubiff popup window appear in pagers?", false)); // POPUP_USE_GEOMETRY const static gchar *s5[] = {"popup_geometry_entry", NULL}; add_option (new Option_Bool ("popup_use_geometry", OPTGRP_POPUP, "Shall the given geometry be used for positioning the popup window?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "popup_geometry_check", s5)); // POPUP_GEOMETRY add_option (new Option_String ("popup_geometry", OPTGRP_POPUP, "Geometry to be used for positioning the popup window.", "-0+0", OPTFLG_NONE, OPTGUI_ENTRY, "popup_geometry_entry")); // POPUP_FONT add_option (new Option_String ("popup_font", OPTGRP_POPUP, "Font to be used in the popup.", "sans 10", OPTFLG_NONE, OPTGUI_FONT, "popup_font_button")); // POPUP_USE_SIZE const static gchar *s6[] = {"popup_size_spin", NULL}; add_option (new Option_Bool ("popup_use_size", OPTGRP_POPUP, "Shall there be a restriction to the number of mails displayed in " "the popup?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "popup_size_check", s6)); // POPUP_SIZE add_option (new Option_UInt ("popup_size", OPTGRP_POPUP, "Maximum number of mails to be displayed in the popup.", 40, OPTFLG_NONE, OPTGUI_SPIN, "popup_size_spin")); // POPUP_USE_FORMAT const static gchar *s7[] = {"popup_format_entry", NULL}; add_option (new Option_Bool ("popup_use_format", OPTGRP_POPUP, "Shall there be a restriction to the length of the sender, subject " "and date when displayed in the popup?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "popup_format_check", s7)); // POPUP_SIZE_SENDER add_option (new Option_UInt ("popup_size_sender", OPTGRP_POPUP, "Maximum size of the sender when displayed in the popup (in " "characters).", 50, OPTFLG_NOSAVE | OPTFLG_CHANGE)); // POPUP_SIZE_SUBJECT add_option (new Option_UInt ("popup_size_subject", OPTGRP_POPUP, "Maximum size of the subject when displayed in the popup (in " "characters).", 50, OPTFLG_NOSAVE | OPTFLG_CHANGE)); // POPUP_SIZE_DATE add_option (new Option_UInt ("popup_size_date", OPTGRP_POPUP, "Maximum size of the date when displayed in the popup (in " "characters).", 50, OPTFLG_NOSAVE | OPTFLG_CHANGE)); // POPUP_FORMAT add_option (new Option_String ("popup_format", OPTGRP_POPUP, "Length restrictions to the length of the sender, subject and date " "when displayed in the popup. This has to be given as a colon " "separated list. A value of 0 disables the display of the " "corresponding property.", "50:50:50", OPTFLG_CHANGE, OPTGUI_ENTRY, "popup_format_entry")); // POPUP_BODY_LINES add_option (new Option_UInt ("popup_body_lines", OPTGRP_POPUP, "Maximum number of mail body lines that will be displayed in the " "popup.", 10)); // POPUP_CONVERT_RETRIES add_option (new Option_UInt ("popup_convert_retries", OPTGRP_POPUP, "Maximum number of retries when converting a message's body to UTF-8. " "Because gnubiff does not fetch the whole body but only the first " "lines the last character may be invalid after decoding from certain " "encodings (e.g. base64). This option gives the maximum number of " "retries when trying to convert such strings to get a validly " "encoded string.", 5)); // POPUP_SORT_BY add_option (new Option_String ("popup_sort_by", OPTGRP_POPUP, "A space separated list of header properties by which the headers " "in the popup shall be sorted. The headers are sorted first by the " "first given property then by the second and so on. A stable sort " "algorithm is being used. Currently the following properties are " "supported:\n" " * \"date\": Date when the mail was sent\n" " * \"mailbox\": Mailbox identifier. If mails from each mailbox " "shall stay together this should be the last given property.\n" " * \"position\": Position of the mail in the mailbox\n" " * \"sender\": Sender of the mail\n" " * \"subject\": Subject of the mail\n" "The sorting order of each property can be reversed by prefixing a " "\"!\".", "!position mailbox")); if (!deprecated) return; } /** * Add options that affect security issues. * * @param deprecated Shall deprecated options be added? */ void Gnubiff_Options::add_options_security (gboolean deprecated) { add_group (new Option_Group ("security", OPTGRP_SECURITY, "Options that affect security issues. Most of these options help " "gnubiff in deciding whether it is DoS attacked or not.")); // USE_MAX_MAIL const static gchar *s1[] = {"max_mail_spin", NULL}; add_option (new Option_Bool ("use_max_mail", OPTGRP_SECURITY, "Shall there be any restriction to the number of messages that are " "collected?", true, OPTFLG_NONE, OPTGUI_TOGGLE, "max_mail_check", s1)); // MAX_MAIL add_option (new Option_UInt ("max_mail", OPTGRP_SECURITY, "The maximum number of messages that will be collected per update and " "mailbox.", 100, OPTFLG_NONE, OPTGUI_SPIN, "max_mail_spin")); #ifdef USE_PASSWORD // PASSPHRASE add_option (new Option_String ("passphrase", OPTGRP_SECURITY, "This is the password phrase used for the encryption of the passwords " "in the configuration file (if this feature has been enabled at " "configuration time).\n" "Note: This phrase is stored in the gnubiff binary and can so " "obtained by anyone that can read it.", PASSWORD_STRING"FEDCBA9876543210", OPTFLG_FIXED | OPTFLG_AUTO | OPTFLG_NOSAVE )); #endif // PREVDOS_ADDITIONAL_LINES add_option (new Option_UInt ("prevdos_additional_lines", OPTGRP_SECURITY, "Maximum number of lines that are read from the network additionally " "to the number of lines that are expected when reading until a " "certain line is sent by the server. There are many possible " "reasons, why the number of lines that are sent is greater than " "expected:\n" " * The server sends information or warning messages (IMAP4 for " "example; see RFC 3501 7.1.1 and 7.1.2)\n" " * There exist extensions to the protocols\n" " * The server may implement a protocol not correctly\n" " * There is a DoS attack\n" "This option is currently used for the IMAP4 protocol.", 16)); // PREVDOS_HEADER_LINES add_option (new Option_UInt ("prevdos_header_lines", OPTGRP_SECURITY, "Maximum number of mail header lines that are read.\n" "This option is currently used for the POP3 protocol.", 2048)); // PREVDOS_IGNORE_INFO add_option (new Option_UInt ("prevdos_ignore_info", OPTGRP_SECURITY, "Maximum number of lines that are read from the network when the " "server is expected to need a lot of time to complete a command (the " "IMAP4 \"IDLE\" command for example) but may send information and " "warning messages before completion.\n" "This option is currently used for the IMAP4 protocol.", 32)); // PREVDOS_IMAP4_MULTILINE add_option (new Option_UInt ("prevdos_imap4_multiline", OPTGRP_SECURITY, "Maximum number of lines that are read additional from the network " "when reading the server's response to IMAP4 commands that consist " "of more than one line." "See also the description of the " "\"security/prevdos_additional_lines\" option.\n" "This option is only intended for the IMAP4 protocol.", 8)); // PREVDOS_LINE_LENGTH add_option (new Option_UInt ("prevdos_line_length", OPTGRP_SECURITY, "Maximum number of characters per line in mails. The following " "limits are set for the different protocols:\n" " * SMTP: maximum line length is 1001 (see RFC 2821 4.5.3.1)\n" " * IMAP4: no maximum line length\n" " * POP3: maximum response line length is 512 (see RFC 1939 3.)\n" "This option is currently used for all network protocols.", 16384)); // PREVDOS_CLOSE_SOCKET add_option (new Option_UInt ("prevdos_close_socket", OPTGRP_SECURITY, "Maximum number of lines to be read when the socket for a network " "connection is closed.\n" "This option is used for all network protocols.", 64)); // POP3_MAX_UID_LENGTH add_option (new Option_UInt ("pop3_max_uid_length", OPTGRP_SECURITY, "Maximum length of the unique identifier of messages for the POP3 " "protocol. The standard (RFC 1939 section 7.) specifies that no " "identifier must be longer than 70 characters. So there should be no " "need to change this value when dealing with servers respecting the " "standard.\n" "This option is used for the POP3 protocol.", 70)); if (!deprecated) return; } gnubiff-2.2.16/src/eggtrayicon.h0000644000175000017500000000506012474422123013420 00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* eggtrayicon.h * Copyright (C) 2002 Anders Carlsson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __EGG_TRAY_ICON_H__ #define __EGG_TRAY_ICON_H__ #include #include #ifdef GDK_WINDOWING_X11 #include #endif G_BEGIN_DECLS #define EGG_TYPE_TRAY_ICON (egg_tray_icon_get_type ()) #define EGG_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TRAY_ICON, EggTrayIcon)) #define EGG_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TRAY_ICON, EggTrayIconClass)) #define EGG_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TRAY_ICON)) #define EGG_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON)) #define EGG_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass)) typedef struct _EggTrayIcon EggTrayIcon; typedef struct _EggTrayIconClass EggTrayIconClass; struct _EggTrayIcon { GtkPlug parent_instance; guint stamp; #ifdef GDK_WINDOWING_X11 Atom selection_atom; Atom manager_atom; Atom system_tray_opcode_atom; Atom orientation_atom; Window manager_window; #endif GtkOrientation orientation; }; struct _EggTrayIconClass { GtkPlugClass parent_class; }; GType egg_tray_icon_get_type (void); EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen, const gchar *name); EggTrayIcon *egg_tray_icon_new (const gchar *name); guint egg_tray_icon_send_message (EggTrayIcon *icon, gint timeout, const char *message, gint len); void egg_tray_icon_cancel_message (EggTrayIcon *icon, guint id); GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon); G_END_DECLS #endif /* __EGG_TRAY_ICON_H__ */ gnubiff-2.2.16/src/apop.cc0000644000175000017500000001007412474422123012203 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2007 Nicolas Rougier, 2004-2007 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: apop.cc,v $ // Revision : $Revision: 1.15.2.1 $ // Revision date : $Date: 2007/09/08 14:57:56 $ // Author(s) : Nicolas Rougier, Robert Sowada // Short : // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include "support.h" #ifdef HAVE_CRYPTO # include #endif #include #include #include #include "ui-authentication.h" #include "socket.h" #include "apop.h" // ======================================================================== // base // ======================================================================== /** * Constructor. The mailbox for the APOP protocol is created from scratch. * * @param biff Pointer to the instance of Gnubiff. */ Apop::Apop (Biff *biff) : Pop (biff) { value ("protocol", PROTOCOL_APOP); } /** * Constructor. The mailbox for the APOP protocol is created by taking the * attributes of the existing mailbox {\em other}. * * @param other Mailbox from which the attributes are taken. */ Apop::Apop (const Mailbox &other) : Pop (other) { value ("protocol", PROTOCOL_APOP); } /// Destructor Apop::~Apop (void) { } // ======================================================================== // main // ======================================================================== /** * A connection to the mailbox is established. If this can't be done then a * {\em pop_socket_err} is thrown. Otherwise gnubiff logins. * * @exception pop_command_err * This exception is thrown when we get an unexpected * response or if the encrypted login line cannot be * created. * @exception pop_socket_err * This exception is thrown if a network error occurs. */ void Apop::connect (void) throw (pop_err) { std::string line; // Open the socket Pop::connect (); // Does the server support the apop protocol? // if so, answer should be something like: // +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us> readline (line); std::string::size_type lt = line.find ("<"), gt = line.find (">"); if ((lt == std::string::npos) || (gt == std::string::npos) || (gt < lt)) { g_warning (_("[%d] Your pop server does not seem to accept apop " "protocol (no timestamp provided)"), uin()); throw pop_command_err (); } // Get time stamp from server std::string timestamp = line.substr (lt, gt-lt+1); // Build message if MD5 library available char hex_response[33]; #ifdef HAVE_CRYPTO unsigned char response[16]; MD5_CTX ctx; MD5_Init (&ctx); MD5_Update (&ctx, timestamp.c_str(), timestamp.size()); MD5_Update (&ctx, password().c_str(), password().size()); MD5_Final (response, &ctx); for (guint i = 0; i < 16; i++) sprintf (&hex_response[i*2], "%02x", response[i]); hex_response[32] = '\0'; #else g_warning (_("[%d] Problem with crypto that should have been detected " "at configure time"), uin()); throw pop_command_err (); #endif // LOGIN sendline ("APOP " + username() + " " + std::string (hex_response)); readline (line); // +OK response } gnubiff-2.2.16/src/options.cc0000644000175000017500000005751112474422123012746 00000000000000// ======================================================================== // gnubiff -- a mail notification program // Copyright (c) 2000-2011 Nicolas Rougier, 2004-2011 Robert Sowada // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ======================================================================== // // File : $RCSfile: options.cc,v $ // Revision : $Revision: 1.18.2.4 $ // Revision date : $Date: 2012/01/08 21:02:06 $ // Author(s) : Robert Sowada, Nicolas Rougier // Short : Container for storing options // // This file is part of gnubiff. // // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- // ======================================================================== #include #include "nls.h" #include "options.h" /// Constructor. Options::Options () { } /// Destructor. Options::~Options () { iterator opt = options_.begin (); while (opt != options_.end ()) delete (opt++)->second; iterator_group grp = groups_.begin (); while (grp != groups_.end ()) delete (grp++)->second; } /** * Add the group {\em group} to the set of groups. If there is already a * group that has the same identifier as {\em group} the old group is left * unchanged. * * @param group Group to be added * @return Boolean indicating success */ gboolean Options::add_group (Option_Group *group) { if ((group == NULL) || (groups_.find (group->id()) != groups_.end())) return false; groups_[group->id()] = group; return true; } /** * Add the option {\em option} to the set of options. If there is already an * option that has the same name as {\em option} the old option is left * unchanged. * * @param option Option to be added * @return Boolean indicating success */ gboolean Options::add_option (Option *option) { if ((option == NULL) || (options_.find (option->name()) != options_.end())) return false; options_[option->name()] = option; return true; } /** * Add all options (and their values) from {\em options} to the set of * options. If a option already exists it gets the value from the same option * in {\em options}. This function also adds new groups from {\em options} * to the set of groups but does not change existing groups. * * @param options Options to be added. * @return True if all options could be added successfully. */ gboolean Options::add_option (Options &options) { gboolean ok = true; // Options std::map *opts = options.options (); iterator opt = opts->begin (); while (opt != opts->end ()) { // When we already have the option copy the value, otherwise create it Option *option = find_option (opt->second->name(), OPTTYPE_NONE); if (option) ok = option->from_string (opt->second->to_string()) && ok; else ok = add_option (opt->second->copy()) && ok; opt++; } // Groups std::map *grps = options.groups (); std::map::iterator grp = grps->begin (); while (grp != grps->end ()) { Option_Group *group = (grp++)->second; // If we don't have the group: Create it if (groups_.find (group->id()) == groups_.end()) ok = add_group (new Option_Group (group->name(), group->id(), group->help())); } return ok; } /** * Remove all options that are flagged by {\em flags} from the set of * options. * * @param flags Flags for determining the options to be removed. It is * sufficient for an option to be removed if it has one of the * flags in {\em flags}. * @return Always true. */ gboolean Options::remove_options (guint flags) { iterator opt = options_.begin (); while (opt != options_.end ()) { Option *option = opt->second; if (option && ((option->flags () & flags) == flags)) options_.erase (opt++); else opt++; } return true; } /** * Reset the option to the default value. This function handles the * OPTFLG_CHANGE flag, so use this function instead of calling Option::reset() * directly. * * @param name Name of the option * @param respect_change Shall the OPTFLG_CHANGE flag be respected (the * default is true)? * @return Success indicator */ gboolean Options::reset (const std::string &name, gboolean respect_change) { Option *option = find_option (name); if (option) { option->reset (); if (option->flags() & OPTFLG_CHANGE) option_changed (option); } return (option != NULL); } /** * Set the value of the boolean option {\em name}. This function handles the * OPTFLG_CHANGE flag, so use this function instead of setting the value * directly. * * @param name Name of the option to be changed * @param value New value of the option * @param respect_change Shall the OPTFLG_CHANGE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::value (const std::string &name, gboolean value, gboolean respect_change) { Option_Bool *option = static_cast( find_option (name, OPTTYPE_BOOL) ); if (option) { option->value (value); if ((option->flags() & OPTFLG_CHANGE) && respect_change) option_changed (option); } return (option != NULL); } /** * Set the value of the string option {\em name}. This function handles the * OPTFLG_CHANGE flag, so use this function instead of setting the value * directly. * * @param name Name of the option to be changed * @param value New value of the option * @param respect_change Shall the OPTFLG_CHANGE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::value (const std::string &name, std::string value, gboolean respect_change) { Option_String *option=static_cast( find_option (name, OPTTYPE_STRING) ); if (option) { option->value (value); if ((option->flags() & OPTFLG_CHANGE) && respect_change) option_changed (option); } return (option != NULL); } /** * Set the value of the unsigned integer option {\em name}. This function * handles the OPTFLG_CHANGE flag, so use this function instead of setting * the value directly. * * @param name Name of the option to be changed * @param value New value of the option * @param respect_change Shall the OPTFLG_CHANGE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::value (const std::string &name, guint value, gboolean respect_change) { Option_UInt *option = static_cast( find_option (name, OPTTYPE_UINT) ); if (option) { option->value (value); if ((option->flags() & OPTFLG_CHANGE) && respect_change) option_changed (option); } return (option != NULL); } /** * Get the value of the boolean option {\em name}. This function handles * the OPTFLG_UPDATE flag, so use this function instead of getting the * value directly. * * @param name Name of the option to be obtained * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return Value of the option or "false" if there is an error */ gboolean Options::value_bool (const std::string &name, gboolean respect_update) { Option_Bool *option = static_cast( find_option (name, OPTTYPE_BOOL) ); if (!option) return false; if ((option->flags() & OPTFLG_UPDATE) && respect_update) option_update (option); return option->value(); } /** * Get the value of the string option {\em name}. This function handles * the OPTFLG_UPDATE flag, so use this function instead of getting the * value directly. * * @param name Name of the option to be obtained * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return Value of the option or an empty string if there is * an error */ std::string Options::value_string (const std::string &name, gboolean respect_update) { Option_String *option=static_cast( find_option (name, OPTTYPE_STRING) ); if (!option) return std::string(""); if ((option->flags() & OPTFLG_UPDATE) && respect_update) option_update (option); return option->value(); } /** * Get the value of the string option {\em name} as a pointer to a * character array. This function handles the OPTFLG_UPDATE flag, so use * this function instead of getting the value directly. * * @param name Name of the option to be obtained * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return Value of the option or a pointer to an empty string * if there is an error */ const gchar * Options::value_gchar (const std::string &name, gboolean respect_update) { return value_string(name, respect_update).c_str(); } /** * Get the value of the unsigned integer option {\em name}. This function * handles the OPTFLG_UPDATE flag, so use this function instead of getting * the value directly. * * @param name Name of the option to be obtained * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return Value of the option or zero if there is an error */ guint Options::value_uint (const std::string &name, gboolean respect_update) { Option_UInt *option = static_cast( find_option (name, OPTTYPE_UINT) ); if (!option) return 0; if ((option->flags() & OPTFLG_UPDATE) && respect_update) option_update (option); return option->value(); } /** * Set the value of the string option {\em name}. This is done by creating * a space separated list of all the strings in the set {\em values}. If * {\em empty} is true the old value of the option will be overwritten, * otherwise the new strings are appended. Empty strings will not be * stored. * * Note: This function handles the OPTFLG_CHANGE flag, so use this * function instead of setting the value directly. * * @param name Name of the option to be changed * @param values New strings to add to the option's value * @param empty Shall the option be erased before appending (the * default is true)? * @param respect_change Shall the OPTFLG_CHANGE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::set_values (const std::string &name, const std::set &values, gboolean empty, gboolean respect_change) { Option_String *option=static_cast( find_option (name, OPTTYPE_STRING) ); if (option) { option->set_values (values, empty); if ((option->flags() & OPTFLG_CHANGE) && respect_change) option_changed (option); } return (option != NULL); } /** * Get the value of the string option {\em name}. The option's value is * treated as a space separated list of strings. Each string in this list * is returned in the set {\em var}. If {\em empty} is true the this set * will be emptied before obtaining the values, otherwise the new strings * are inserted in {\em var} in addition to the strings that are in this set * before calling this function. * * Note: This function handles the OPTFLG_UPDATE flag, so use this * function instead of getting the values directly. * * @param name Name of the option to be obtained * @param var Set in which the strings will be returned * @param empty Shall the set {\em var} be erased before inserting * the strings (the default is true)? * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::get_values (const std::string &name, std::set &var, gboolean empty, gboolean respect_update) { Option_String *option=static_cast( find_option (name, OPTTYPE_STRING) ); if (!option) return false; if ((option->flags() & OPTFLG_UPDATE) && respect_update) option_update (option); option->get_values (var, empty); return true; } /** * Get the value of the string option {\em name}. The option's value is * treated as a space separated list of strings. Each string in this list * is returned in the vector {\em var}. If {\em empty} is true the this vector * will be emptied before obtaining the values, otherwise the new strings * are appended to the vector {\em var}. * * Note: This function handles the OPTFLG_UPDATE flag, so use this * function instead of getting the values directly. * * @param name Name of the option to be obtained * @param var Vector in which the strings will be returned * @param empty Shall the vector {\em var} be erased before * appending the strings (the default is true)? * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::get_values (const std::string &name, std::vector &var, gboolean empty, gboolean respect_update) { Option_String *option=static_cast( find_option (name, OPTTYPE_STRING) ); if (!option) return false; if ((option->flags() & OPTFLG_UPDATE) && respect_update) option_update (option); option->get_values (var, empty); return true; } /** * Get the string constant that is equivalent to the value {\em val}. This * value must be a possible value for the option {\em name}. * * @param name Name of the option * @param val Value to be converted to a string constant * @return String constant or an empty string if there is no * constant for this value, {\em name} is no unsigned * integer option or if there is an error. */ const std::string Options::value_to_string (const std::string &name, guint val) { Option_UInt *option = static_cast( find_option (name, OPTTYPE_UINT) ); if (!option) return std::string(""); return option->value_to_string (val); } /** * Get the value that is equivalent to the string constant {\em str}. This * constant must be a possible string constant for the option {\em name}. * * @param name Name of the option * @param str String constant to be converted to an unsigned * integer * @return Integer value or zero if there is not such a string * constant, {\em name} is no unsigned integer option * or if there is an error. */ guint Options::string_to_value (const std::string &name, const std::string &str) { Option_UInt *option = static_cast( find_option (name, OPTTYPE_UINT) ); if (!option) return 0; return option->string_to_value (str); } /** * Convert the value of the option {\em name} to a string. This way the * option's value can be displayed or saved into the config file. * * Note: This function handles the OPTFLG_UPDATE flag, so use this * function instead of getting the string directly. * * @param name Name of the option to be converted to a string * @param respect_update Shall the OPTFLG_UPDATE flag be respected (the * default is true)? * @return To a string converted value of the option or an * empty string if there is an error */ std::string Options::to_string (const std::string &name, gboolean respect_update) { Option *option = find_option (name); if (!option) return std::string (""); if ((option->flags() & OPTFLG_UPDATE) && respect_update) option_update (option); return option->to_string (); } /** * Set the value of the option {\em name}. This is done by converting the * string {\em value} to a value of the option {\em name}. * * Note: This function handles the OPTFLG_CHANGE flag, so use this * function instead of getting the string directly. * * @param name Name of the option to be set * @param respect_change Shall the OPTFLG_CHANGE flag be respected (the * default is true)? * @return Boolean indicating success */ gboolean Options::from_string (const std::string &name, const std::string value, gboolean respect_change) { Option *option = find_option (name); if (!option) return false; option->from_string (value); if ((option->flags() & OPTFLG_CHANGE) && respect_change) option_changed (option); return true; } /** * Convert all option's values to strings. This way the values can be * displayed or saved into the config file. * * Note: This function handles the OPTFLG_UPDATE flag, so use this * function instead of getting the strings directly. * * @param groups Groups which option's shall be converted * @param map Map in which the pairs (option, value) are returned * @param nosave Shall the OPTFLG_NOSAVE flag be respected (the * default is true)? * @param empty Shall the map be cleared before inserting the new * pairs (the default is true)? */ void Options::to_strings (guint groups, std::map &map, gboolean nosave, gboolean empty) { if (empty) map.clear (); iterator opt = options_.begin (); while (opt != options_.end ()) { Option *option = opt->second; if (option && (groups & option->group ()) && (!nosave || !(option->flags() & OPTFLG_NOSAVE))) { if (option->flags() & OPTFLG_UPDATE) option_update (option); map[option->name ()] = option->to_string (); } opt++; } } /** * Set all options to the values in the map {\em map}. * * @param groups Groups which option's shall be set * @param map Map of pairs (option, value) * @return Boolean indicating success */ gboolean Options::from_strings (guint groups, std::map &map) { gboolean ok = true; std::map::iterator it=map.begin (); while (it != map.end ()) { iterator opt = options_.find (it->first); if (opt == options_.end()) { ok = false; g_warning(_("Unknown option \"%s\""), it->first.c_str()); } else { Option *option = opt->second; if (option && (groups & option->group ())) { if (!(option->from_string (it->second))) { ok = false; g_warning(_("Cannot set option \"%s\" to \"%s\""), it->first.c_str(), it->second.c_str()); } else if (option->flags() & OPTFLG_CHANGE) option_changed (option); } } it++; } return ok; } /** * Update GUI widgets for a group of options. * * @param whattodo Actions to be done * @param groups Groups from which all options are taken * @param gtkbuilder GTKBuilder information of the GUI * @param filename Filename of the glade file for the GUI */ void Options::update_gui (OptionsGUI whattodo, guint groups, GtkBuilder *gtkbuilder, const std::string filename) { iterator opt = options_.begin (); while (opt != options_.end ()) { Option *option = opt->second; opt++; if (!option || !(groups & option->group ())) continue; update_gui (whattodo, option, gtkbuilder, filename); } } /** * Update GUI widgets for the option {\em option}. The following actions can * be done (in the given order): * \begin{itemize} * \item Get the value from the widget and set {\em option} (OPTSGUI_GET) * \item Set the widget to the value of {\em option} (OPTSGUI_SET) * \item Update the widgets that are sensitive to {\em option} * (OPTSGUI_SENSITIVE) * \item Show and hide widgets (OPTSGUI_SHOW) * \end{itemize} * OPTSGUI_UPDATE is short for OPTSGUI_SET, OPTSGUI_SENSITIVE and * OPTSGUI_SHOW. * * @param whattodo Actions to be done * @param option Option for which the update is done * @param gtkbuilder GTKBuilder information of the GUI * @param filename Filename of the glade file for the GUI */ void Options::update_gui (OptionsGUI whattodo, Option *option, GtkBuilder *gtkbuilder, const std::string filename) { if (!option) return; const gchar *file = filename.c_str (); // Get widgets std::stringstream ss (option->gui_name()); std::string gui_name; std::vector widgets; while (ss >> gui_name) widgets.push_back (get_widget (gui_name.c_str(), gtkbuilder, file)); if (!widgets.size()) return; if (whattodo & OPTSGUI_GET) { option->get_gui (widgets); if (option->flags() & OPTFLG_CHANGE) option_changed (option); } if (whattodo & OPTSGUI_SET) option->set_gui (widgets); if ((whattodo & OPTSGUI_SENSITIVE) && (whattodo & OPTSGUI_SHOW)) { update_gui (OPTSGUI_SENSITIVE, option, gtkbuilder, filename); update_gui (OPTSGUI_SHOW, option, gtkbuilder, filename); whattodo=(OptionsGUI) (whattodo & ~(OPTSGUI_SENSITIVE | OPTSGUI_SHOW)); } if (whattodo & (OPTSGUI_SENSITIVE | OPTSGUI_SHOW)) { if (option->type() == OPTTYPE_BOOL) { // Obtain value for setting sensitive gboolean ok; if (option->gui() == OPTGUI_TOGGLE) ok=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets[0])); else ok = (static_cast(option))->value (); // Get widgets to be set sensitive/shown/hidden std::set gs; if (whattodo & OPTSGUI_SENSITIVE) (static_cast(option))->gui_sensitive (gs); else (static_cast(option))->gui_show (gs); // Change widgets std::set::iterator it = gs.begin (); while (it != gs.end ()) { gboolean wid_ok = ok; std::string name = *it; // Check if boolean from widget shall be negated if (it->at(0) == '!') { wid_ok = !ok; name = name.substr (1); } GtkWidget *other = get_widget (name.c_str(), gtkbuilder, file); it++; if (!other) continue; if (whattodo & OPTSGUI_SENSITIVE) gtk_widget_set_sensitive (other, wid_ok); if (whattodo & OPTSGUI_SHOW) wid_ok ? gtk_widget_show (other) : gtk_widget_hide (other); } } } } /** * Get the description of the given group {\em group}. * * @param group Identifier of the group. */ std::string Options::group_help (guint group) { if (groups_.find (group) == groups_.end ()) return std::string(""); return groups_[group]->help(); } /** * Get the name of the given group {\em group}. * * @param group Identifier of the group. */ std::string Options::group_name (guint group) { if (groups_.find (group) == groups_.end ()) return std::string(""); return groups_[group]->name(); } GtkWidget * Options::get_widget (const gchar *name, GtkBuilder *gtkbuilder, const gchar *filename) { if ((!name) || (!*name)) return NULL; GtkWidget *widget = GTK_WIDGET (gtk_builder_get_object (gtkbuilder, name)); if (!widget) g_warning (_("Cannot find the specified widget (\"%s\")" " within xml structure (\"%s\")"), name, filename); return widget; } Option * Options::find_option (const std::string &name, OptionType type) { iterator opt = options_.find (name); if ((opt == options_.end()) || ((type != OPTTYPE_NONE) && (opt->second->type() != type))) return NULL; return opt->second; } gnubiff-2.2.16/src/GNOME_gnubiffApplet.xml0000664000175000017500000000025412474422123015173 00000000000000 gnubiff-2.2.16/doc/0000775000175000017500000000000012474430471011000 500000000000000gnubiff-2.2.16/doc/gpl.texi0000644000175000017500000010442112474422123012370 00000000000000@c The GNU General Public License. @center Version 3, 29 June 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. 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. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading 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 state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{http://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{http://www.gnu.org/licenses/}. The GNU 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 Lesser General Public License instead of this License. But first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. gnubiff-2.2.16/doc/stamp-vti0000644000175000017500000000014712474430327012567 00000000000000@set UPDATED 28 February 2015 @set UPDATED-MONTH February 2015 @set EDITION 2.2.16 @set VERSION 2.2.16 gnubiff-2.2.16/doc/gnubiff.texi0000644000175000017500000002264012474422123013230 00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gnubiff.info @settitle gnubiff @include version.texi @c %**end of header @copying This manual is for gnubiff version @value{VERSION} Copyright @copyright{} 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada. @quotation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . @end quotation @end copying @dircategory Utilities @direntry * gnubiff: (gnubiff). A mail notification program for Gtk and Gnome. @end direntry @titlepage @title gnubiff @author Nicolas Rougier @page @vskip 0pt plus 1filll @insertcopying Published by Nicolas Rougier @end titlepage @contents @ifnottex @node Top @top gnubiff @insertcopying @end ifnottex @menu * Copying:: Your rights * About gnubiff:: What it is and what it is isn't * Installation:: How to install gnubiff * Start gnubiff:: How to start gnubiff. * Using gnubiff:: gnubiff interface. * Files:: Configuration files. * Animation format:: Description of PNG animation * Contributors:: People who have contributed to gnubiff. @end menu @comment ------------------------------------------------------------ @node Installation @chapter Installation @unnumberedsec @comment ------------------------------------------------------------ @noindent To install gnubiff:@* @command{./configure}@* @command{make}@* @command{make install}@* @sp 1 @noindent To have gnubiff to use GTK only:@* @command{./configure --disable-gnome} @sp 1 @noindent To have gnubiff to save password (unsecure):@* @command{./configure --with-password} @sp 1 @noindent To have gnubiff to use a given encryption table:@* @command{./configure --with-password-string} @sp 1 @noindent To disable the expert mode editing tab as default:@* @command{./configure --disable-expert} @node Copying @unnumbered GNU GENERAL PUBLIC LICENSE @include gpl.texi @comment ------------------------------------------------------------ @node About gnubiff @chapter About gnubiff @unnumberedsec @comment ------------------------------------------------------------ gnubiff is part of the GNU project, released under the aegis of GNU. @sp 1 gnubiff is a mail notification program that checks for mail, displays headers when new mail has arrived and allow to read first lines of new messages. It relies on the GNOME and GTK+ libraries but can be compiled and used with or without GNOME support. Supported protocols are pop3, apop, imap4, mh, qmail and mailfile. Furthermore, gnubiff is fully configurable with a lot of options like polltime, poptime, sounds, mail reader, mailbox names, etc. and can also filter spam.@* Note that gnubiff is not a mail reader even if it offers the possibility of reading very first lines of new messages. If you send some requests for specific features to be implemented, keep that in mind! @sp 1 @noindent Homepage: http://gnubiff.sourceforge.net/ @comment ------------------------------------------------------------ @node Start gnubiff @chapter Start gnubiff @unnumberedsec @comment ------------------------------------------------------------ Depending if you have compiled gnubiff with or without GNOME libraries, you'll be able to start gnubiff from command line or from the GNOME panel. @section How to start gnubiff in GTK mode @command{gnubiff [-c|--config file] [-n|--noconfigure] [-v|--version] [-?|--help] [--usage]} @sp 1 @table @samp @item -c file, --config file This option allows to specify an alternate configuration file, default is '$HOME/.gnubiffrc' @item -n, --noconfigure Skip the configuration process @item --nogui Start gnubiff without GUI @item --systemtray Start gnubiff in the system tray @item -v, --version Displays version number and exit @item -?, --help Shows a list of all supported options @item --usage Displays a brief usage message @end table @sp 2 @section How to start gnubiff in GNOME mode After installation, you should be able to select gnubiff in the Internet menu of the GNOME panel. Be careful that after installation, panel has to be restarted if this is your first installation. If gnubiff doesn't appear, check that prefix you provided at configure time is correct (usually, it's /usr). If prefix is right, panel has been restarted and gnubiff doesn't appear in GNOME panel menu, please contact the author. @comment ------------------------------------------------------------ @node Using gnubiff @chapter Using gnubiff @unnumberedsec @comment ------------------------------------------------------------ gnubiff has several mouse shortcuts: @sp 1 @itemize @bullet @item You can invoke a submenu by right-clicking on the applet window. @item You can mark mails as read by middle-clicking on the applet window. @item You can force a check by left clicking on the applet window. @item You can invoke your mail reader by double left-clicking on the applet window. @item You can read first lines of mail by left-clicking on them in the popup window. @item You can pop down popup window by right-clicking in it. @item As long as your mouse pointer remains in the popup window, popup is not popped down. @end itemize @comment ------------------------------------------------------------ @node Files @chapter Files @unnumberedsec @comment ------------------------------------------------------------ gnubiff loads ans saves parameters in default file "~/.gnubiffrc". @comment ------------------------------------------------------------ @node Animation format @chapter Animation format @unnumberedsec @comment ------------------------------------------------------------ gnubiff uses a very simple PNG animation format that allow to use full color images and also to handle alpha channel properly (thanks to PNG support). The idea is simply to put all frames of your animation in one big PNG image and gnubiff will take care of the animation. But, gnubiff cannot decide what is the size of a frame based on image size and so you have to provide this size with the name of the image. The convention is that frame size is given between parenthesis.@* For example, "anim(64x64).png" means that frame size is 64 by 64 pixels and then image should be n*64 pixels wide and 64 pixels tall (where n is the number of frame). @sp 1 @noindent To convert a gif animation to this format just type:@* @command{convert +append animation.gif animation(64x64).png} @comment ------------------------------------------------------------ @node Contributors @chapter Contributors @unnumberedsec @comment ------------------------------------------------------------ The authors would like to thank their many contributors. Without them the project would not have been nearly as successful as it has been. Any omissions in this list are accidental. Feel free to contact authors if you have been left out or some of your contributions are not listed. Please keep this list in alphabetical order. Authors:@* @itemize @bullet @item gnubiff has originally been written by Nicolas Rougier @end itemize Developers:@* @itemize @bullet @item Nicolas Rougier @item Robert Sowada @end itemize Maintainers:@* @itemize @bullet @item Tim Bishop @item Roland Stigge @end itemize Translators:@* @itemize @bullet @item Wallner Adam (hu) @item Victor Alonso (es) @item Elros Cyriatan (nl) @item Stefano Fabri (it) @item Gunther Furtado (pt_BR) @item Nicols Lichtmaler (es) @item Arif E. Nugroho (id) @item Daniel Nylander (sv) @item Erwin Poeze (nl) @item Michel Robitaille (fr) @item Nicolas Rougier (fr) @item Clytie Siddall (vi) @item David Smeringe (sv) @item Robert Sowada (de) @item Roland Stigge (de) @item Josef Vybiral (cs) @end itemize Various contributors:@* @itemize @bullet @item Wallner Adam @item Fabian Affolter @item Craig Agricola @item Adam Benjamin @item Josh Berdine @item Philippe Berger @item Wade Berrier @item Dennis Bjorklund @item Jan Blunck @item Sebastian Breier @item Alexis S. L. Carvalho @item Eric Cooper @item Felipe Csaszar @item John Ellson @item Nicolas Evrard @item Greg Fenton @item Byron Foster @item Grzegorz Gotawski @item Jonathan Hitchcock @item Bilal Hawa @item Ryan Hayle @item Samuel Hym @item Satou Kazuhito @item Chris Kemp @item Earl Killian @item Andre Klitzing @item Marc-Jano Knopp @item Paul Kuliniewicz @item Jean-Yves Lefort @item Michel Leunen @item Jason Lowdermilk @item Sascha Ludecke @item Calum Mackay @item Julio Mendoza @item Martin Michlmayr @item Michael Moellney @item Sophie Morel @item David Mosberger @item Neil Muller @item Eugene Ossintsev @item Jan Outrata @item Josh Parsons @item Pete Phillips @item Christian Probst @item Jakub Raczkowski @item Reid Rivenburgh @item Hans-Ulrich Schaefer @item Andy Schofield @item Achim Settelmeier @item Phil Shapiro @item Clytie Siddall @item Antoine Sirinelli @item Erik Sittman @item Barry Skidmore @item Chris Snell @item Blaise Tarr @item Theodore Tegos @item Iulian Tocu @item Richard Torkar @item Bernhard Valenti @item Frederik Vanderstraeten @item Dries Verachtert @item Hubert Verstraete @item Maik Wachsmuth @item Suzan Wassman @item Cai Yu @end itemize @bye gnubiff-2.2.16/doc/Makefile.am0000644000175000017500000000151712474422123012751 00000000000000# gnubiff -- a mail notification program # Copyright (C) 2000-2003 Nicolas Rougier # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # info_TEXINFOS = gnubiff.texi EXTRA_DIST = gpl.texi gnubiff-2.2.16/doc/gnubiff.info0000664000175000017500000013353312474430327013225 00000000000000This is gnubiff.info, produced by makeinfo version 5.2 from gnubiff.texi. This manual is for gnubiff version 2.2.16 Copyright (C) 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . INFO-DIR-SECTION Utilities START-INFO-DIR-ENTRY * gnubiff: (gnubiff). A mail notification program for Gtk and Gnome. END-INFO-DIR-ENTRY  File: gnubiff.info, Node: Top, Next: Copying, Up: (dir) gnubiff ******* This manual is for gnubiff version 2.2.16 Copyright (C) 2000-2010 Nicolas Rougier, 2004-2010 Robert Sowada. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . * Menu: * Copying:: Your rights * About gnubiff:: What it is and what it is isn't * Installation:: How to install gnubiff * Start gnubiff:: How to start gnubiff. * Using gnubiff:: gnubiff interface. * Files:: Configuration files. * Animation format:: Description of PNG animation * Contributors:: People who have contributed to gnubiff.  File: gnubiff.info, Node: Installation, Next: Copying, Prev: About gnubiff, Up: Top 1 Installation ************** To install gnubiff: './configure' 'make' 'make install' To have gnubiff to use GTK only: './configure --disable-gnome' To have gnubiff to save password (unsecure): './configure --with-password' To have gnubiff to use a given encryption table: './configure --with-password-string' To disable the expert mode editing tab as default: './configure --disable-expert'  File: gnubiff.info, Node: Copying, Next: About gnubiff, Prev: Top, Up: Top GNU GENERAL PUBLIC LICENSE ************************** Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS =========================== 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 state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read .  File: gnubiff.info, Node: About gnubiff, Next: Start gnubiff, Prev: Copying, Up: Top 2 About gnubiff *************** gnubiff is part of the GNU project, released under the aegis of GNU. gnubiff is a mail notification program that checks for mail, displays headers when new mail has arrived and allow to read first lines of new messages. It relies on the GNOME and GTK+ libraries but can be compiled and used with or without GNOME support. Supported protocols are pop3, apop, imap4, mh, qmail and mailfile. Furthermore, gnubiff is fully configurable with a lot of options like polltime, poptime, sounds, mail reader, mailbox names, etc. and can also filter spam. Note that gnubiff is not a mail reader even if it offers the possibility of reading very first lines of new messages. If you send some requests for specific features to be implemented, keep that in mind! Homepage: http://gnubiff.sourceforge.net/  File: gnubiff.info, Node: Start gnubiff, Next: Using gnubiff, Prev: About gnubiff, Up: Top 3 Start gnubiff *************** Depending if you have compiled gnubiff with or without GNOME libraries, you'll be able to start gnubiff from command line or from the GNOME panel. 3.1 How to start gnubiff in GTK mode ==================================== 'gnubiff [-c|--config file] [-n|--noconfigure] [-v|--version] [-?|--help] [--usage]' '-c file, --config file' This option allows to specify an alternate configuration file, default is '$HOME/.gnubiffrc' '-n, --noconfigure' Skip the configuration process '--nogui' Start gnubiff without GUI '--systemtray' Start gnubiff in the system tray '-v, --version' Displays version number and exit '-?, --help' Shows a list of all supported options '--usage' Displays a brief usage message 3.2 How to start gnubiff in GNOME mode ====================================== After installation, you should be able to select gnubiff in the Internet menu of the GNOME panel. Be careful that after installation, panel has to be restarted if this is your first installation. If gnubiff doesn't appear, check that prefix you provided at configure time is correct (usually, it's /usr). If prefix is right, panel has been restarted and gnubiff doesn't appear in GNOME panel menu, please contact the author.  File: gnubiff.info, Node: Using gnubiff, Next: Files, Prev: Start gnubiff, Up: Top 4 Using gnubiff *************** gnubiff has several mouse shortcuts: * You can invoke a submenu by right-clicking on the applet window. * You can mark mails as read by middle-clicking on the applet window. * You can force a check by left clicking on the applet window. * You can invoke your mail reader by double left-clicking on the applet window. * You can read first lines of mail by left-clicking on them in the popup window. * You can pop down popup window by right-clicking in it. * As long as your mouse pointer remains in the popup window, popup is not popped down.  File: gnubiff.info, Node: Files, Next: Animation format, Prev: Using gnubiff, Up: Top 5 Files ******* gnubiff loads ans saves parameters in default file "~/.gnubiffrc".  File: gnubiff.info, Node: Animation format, Next: Contributors, Prev: Files, Up: Top 6 Animation format ****************** gnubiff uses a very simple PNG animation format that allow to use full color images and also to handle alpha channel properly (thanks to PNG support). The idea is simply to put all frames of your animation in one big PNG image and gnubiff will take care of the animation. But, gnubiff cannot decide what is the size of a frame based on image size and so you have to provide this size with the name of the image. The convention is that frame size is given between parenthesis. For example, "anim(64x64).png" means that frame size is 64 by 64 pixels and then image should be n*64 pixels wide and 64 pixels tall (where n is the number of frame). To convert a gif animation to this format just type: 'convert +append animation.gif animation(64x64).png'  File: gnubiff.info, Node: Contributors, Prev: Animation format, Up: Top 7 Contributors ************** The authors would like to thank their many contributors. Without them the project would not have been nearly as successful as it has been. Any omissions in this list are accidental. Feel free to contact authors if you have been left out or some of your contributions are not listed. Please keep this list in alphabetical order. Authors: * gnubiff has originally been written by Nicolas Rougier Developers: * Nicolas Rougier * Robert Sowada Maintainers: * Tim Bishop * Roland Stigge Translators: * Wallner Adam (hu) * Victor Alonso (es) * Elros Cyriatan (nl) * Stefano Fabri (it) * Gunther Furtado (pt_BR) * Nicols Lichtmaler (es) * Arif E. Nugroho (id) * Daniel Nylander (sv) * Erwin Poeze (nl) * Michel Robitaille (fr) * Nicolas Rougier (fr) * Clytie Siddall (vi) * David Smeringe (sv) * Robert Sowada (de) * Roland Stigge (de) * Josef Vybiral (cs) Various contributors: * Wallner Adam * Fabian Affolter * Craig Agricola * Adam Benjamin * Josh Berdine * Philippe Berger * Wade Berrier * Dennis Bjorklund * Jan Blunck * Sebastian Breier * Alexis S. L. Carvalho * Eric Cooper * Felipe Csaszar * John Ellson * Nicolas Evrard * Greg Fenton * Byron Foster * Grzegorz Gotawski * Jonathan Hitchcock * Bilal Hawa * Ryan Hayle * Samuel Hym * Satou Kazuhito * Chris Kemp * Earl Killian * Andre Klitzing * Marc-Jano Knopp * Paul Kuliniewicz * Jean-Yves Lefort * Michel Leunen * Jason Lowdermilk * Sascha Ludecke * Calum Mackay * Julio Mendoza * Martin Michlmayr * Michael Moellney * Sophie Morel * David Mosberger * Neil Muller * Eugene Ossintsev * Jan Outrata * Josh Parsons * Pete Phillips * Christian Probst * Jakub Raczkowski * Reid Rivenburgh * Hans-Ulrich Schaefer * Andy Schofield * Achim Settelmeier * Phil Shapiro * Clytie Siddall * Antoine Sirinelli * Erik Sittman * Barry Skidmore * Chris Snell * Blaise Tarr * Theodore Tegos * Iulian Tocu * Richard Torkar * Bernhard Valenti * Frederik Vanderstraeten * Dries Verachtert * Hubert Verstraete * Maik Wachsmuth * Suzan Wassman * Cai Yu  Tag Table: Node: Top992 Node: Installation2238 Node: Copying2727 Node: About gnubiff40247 Node: Start gnubiff41174 Node: Using gnubiff42559 Node: Files43262 Node: Animation format43440 Node: Contributors44325  End Tag Table gnubiff-2.2.16/doc/version.texi0000644000175000017500000000014712474427470013305 00000000000000@set UPDATED 28 February 2015 @set UPDATED-MONTH February 2015 @set EDITION 2.2.16 @set VERSION 2.2.16 gnubiff-2.2.16/doc/Makefile.in0000664000175000017500000005634212474430241012772 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # gnubiff -- a mail notification program # Copyright (C) 2000-2003 Nicolas Rougier # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/stamp-vti $(srcdir)/version.texi texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = INFO_DEPS = $(srcdir)/gnubiff.info TEXINFO_TEX = $(top_srcdir)/config/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/config DVIS = gnubiff.dvi PDFS = gnubiff.pdf PSS = gnubiff.ps HTMLS = gnubiff.html TEXINFOS = gnubiff.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ info_TEXINFOS = gnubiff.texi EXTRA_DIST = gpl.texi all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): .texi.info: restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $< .texi.html: rm -rf $(@:.html=.htp) if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi $(srcdir)/gnubiff.info: gnubiff.texi $(srcdir)/version.texi gnubiff.dvi: gnubiff.texi $(srcdir)/version.texi gnubiff.pdf: gnubiff.texi $(srcdir)/version.texi gnubiff.html: gnubiff.texi $(srcdir)/version.texi $(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gnubiff.texi $(top_srcdir)/configure @(dir=.; test -f ./gnubiff.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/config/mdate-sh $$dir/gnubiff.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: @MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gnubiff.aux gnubiff.cp gnubiff.cps gnubiff.fn gnubiff.fns \ gnubiff.ky gnubiff.kys gnubiff.log gnubiff.pg gnubiff.pgs \ gnubiff.tmp gnubiff.toc gnubiff.tp gnubiff.tps gnubiff.vr \ gnubiff.vrs clean-aminfo: -test -z "gnubiff.dvi gnubiff.pdf gnubiff.ps gnubiff.html" \ || rm -rf gnubiff.dvi gnubiff.pdf gnubiff.ps gnubiff.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) installdirs: for dir in "$(DESTDIR)$(infodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-aminfo clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ dist-info distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ uninstall-info-am uninstall-pdf-am uninstall-ps-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/doc/texinfo.tex0000644000175000017500000066671612474422124013136 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2004-05-16.08} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software % Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2, or (at % your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, % Boston, MA 02111-1307, USA. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \message{Basics,} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexnoindent=\noindent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % In some macros, we cannot use the `\? notation---the left quote is % in some cases the escape char. \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\questChar = `\? \chardef\semiChar = `\; \chardef\underChar = `\_ \chardef\spaceChar = `\ % \chardef\spacecat = 10 \def\spaceisspace{\catcode\spaceChar=\spacecat} % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \escapechar = `\\ % use backslash in output files. \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \normalturnoffactive \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\next{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % We cannot use \next here, as it holds the macro to run; % thus we reuse \temp. \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \next. % (Similarily, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as enviroments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At runtime, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Evironment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux file. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=3000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } % @! is an end-of-sentence bang. \def\!{!\spacefactor=3000 } % @? is an end-of-sentence query. \def\?{?\spacefactor=3000 } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include file insert text of that file as input. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable \def\temp{\input #1 }% \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode\underChar = \active \gdef\mathunderscore{% \catcode\underChar=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus } } % @bullet and @minus need the same treatment as @math, just above. \def\bullet{$\ptexbullet$} \def\minus{$-$} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil .\hfil.\hfil.% \hskip 0pt plus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=3000 } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % \ifpdf \input pdfcolor \pdfcatalog{/PageMode /UseOutlines}% \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% % without \immediate, pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi \ifnum\pdftexversion<13 #1.pdf% \else {#1.pdf}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code in a section title % aren't expanded. \atdummies \normalturnoffactive \pdfdest name{#1} xyz% }} \def\pdfmkpgn#1{#1} \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node % text, which might be empty if this toc entry had no % corresponding node. #4 is the page number. % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worthwhile, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \let\thissecnum\empty \let\thissubsecnum\empty }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \let\thissubsecnum\empty }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \let\thischapnum\empty \let\thissecnum\empty \let\thissubsecnum\empty % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \input \jobname.toc % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \turnoffactive \input \jobname.toc \endgroup } % \def\makelinks #1,{% \def\params{#1}\def\E{END}% \ifx\params\E \let\nextmakelinks=\relax \else \let\nextmakelinks=\makelinks \ifnum\lnkcount>0,\fi \picknum{#1}% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{\the\pgn}}% \linkcolor #1% \advance\lnkcount by 1% \endlink \fi \nextmakelinks } \def\picknum#1{\expandafter\pn#1} \def\pn#1{% \def\p{#1}% \ifx\p\lbrace \let\nextpn=\ppn \else \let\nextpn=\ppnn \def\first{#1} \fi \nextpn } \def\ppn#1{\pgn=#1\gobble} \def\ppnn{\pgn=\first} \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi \def\pdfurl#1{% \begingroup \normalturnoffactive\def\@{@}% \makevalueexpandable \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\linkcolor = \relax \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Text fonts (11.2pt, magstep1). \newcount\mainmagstep \ifx\bigger\relax % not really supported. \mainmagstep=\magstep1 \setfont\textrm\rmshape{12}{1000} \setfont\texttt\ttshape{12}{1000} \else \mainmagstep=\magstephalf \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \fi \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1} \setfont\deftt\ttshape{10}{\magstep1} \setfont\defttsl\ttslshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page (20.4pt): \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} \def\authortt{\sectt} % Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % Reduced fonts for @acro in text (10pt). \setfont\reducedrm\rmshape{10}{1000} \setfont\reducedtt\ttshape{10}{1000} \setfont\reducedbf\bfshape{10}{1000} \setfont\reducedit\itshape{10}{1000} \setfont\reducedsl\slshape{10}{1000} \setfont\reducedsf\sfshape{10}{1000} \setfont\reducedsc\scshape{10}{1000} \setfont\reducedttsl\ttslshape{10}{1000} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % % I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \textfonts \rm % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000} \setfont\shortconttt\ttshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic \def\b#1{{\bf #1}} \let\strong=\b % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\frenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m } \catcode`@=\other \def\t#1{% {\tt \rawbackslash \frenchspacing #1}% \null } \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \frenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\arg{#1}% \ifx\arg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\arg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\arg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\arg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct.' \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @pounds{} is a sterling sign, which is in the CM italic font. % \def\pounds{{\it\$}} % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines \let\tt=\authortt} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rm #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\authorfont \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. (Unfortunately % we can't prevent a possible page break at the following % \baselineskip glue.) However, if what follows is an environment % such as @example, there will be no \parskip glue; then % the negative vskip we just would cause the example and the item to % crash together. So we use this bizarre value of 10001 as a signal % to \aboveenvbreak to insert \parskip glue after all. % (Possibly there are other commands that could be followed by % @example which need the same treatment, but not section titles; or % maybe section titles are the only special case and they should be % penalty 10001...) \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablex } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablex } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablex } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. Note that \everycr resets \everytab. \def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. \let\item\crcr % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut \else %% FIXME: what is \box0 supposed to be? \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore {#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the string `ifinfo'. % % Define a command to find the next `@end #1', which must be on a line % by itself. \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \obeylines % \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. \def\enddoignore{\endgroup\ignorespaces} % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within \newindex. {\catcode`\@=11 \gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \undefined % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname\donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % \definedummyword defines \#1 as \realbackslash #1\space, thus % effectively preventing its expansion. This is used only for control % words, not control letters, because the \space would be incorrect % for control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword##1{% \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% }% \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% }% \let\definedummyaccent\definedummyletter % % Do the redefinitions. \commondummies } % For the aux file, @ is the escape character. So we want to redefine % everything using @ instead of \realbackslash. When everything uses % @, this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % (See comments in \indexdummies.) \def\definedummyword##1{% \expandafter\def\csname ##1\endcsname{@##1\space}% }% \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{@##1}% }% \let\definedummyaccent\definedummyletter % % Do the redefinitions. \commondummies } % Called from \indexdummies and \atdummies. \definedummyword and % \definedummyletter must be defined first. % \def\commondummies{% % \normalturnoffactive % \commondummiesnofonts % \definedummyletter{_}% % % Non-English letters. \definedummyword{AA}% \definedummyword{AE}% \definedummyword{L}% \definedummyword{OE}% \definedummyword{O}% \definedummyword{aa}% \definedummyword{ae}% \definedummyword{l}% \definedummyword{oe}% \definedummyword{o}% \definedummyword{ss}% \definedummyword{exclamdown}% \definedummyword{questiondown}% \definedummyword{ordf}% \definedummyword{ordm}% % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword{bf}% \definedummyword{gtr}% \definedummyword{hat}% \definedummyword{less}% \definedummyword{sf}% \definedummyword{sl}% \definedummyword{tclose}% \definedummyword{tt}% % \definedummyword{LaTeX}% \definedummyword{TeX}% % % Assorted special characters. \definedummyword{bullet}% \definedummyword{copyright}% \definedummyword{registeredsymbol}% \definedummyword{dots}% \definedummyword{enddots}% \definedummyword{equiv}% \definedummyword{error}% \definedummyword{expansion}% \definedummyword{minus}% \definedummyword{pounds}% \definedummyword{point}% \definedummyword{print}% \definedummyword{result}% % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable % % Normal spaces, not active ones. \unsepspaces % % No macro expansion. \turnoffmacros } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % % Better have this without active chars. { \catcode`\~=\other \gdef\commondummiesnofonts{% % Control letters and accents. \definedummyletter{!}% \definedummyaccent{"}% \definedummyaccent{'}% \definedummyletter{*}% \definedummyaccent{,}% \definedummyletter{.}% \definedummyletter{/}% \definedummyletter{:}% \definedummyaccent{=}% \definedummyletter{?}% \definedummyaccent{^}% \definedummyaccent{`}% \definedummyaccent{~}% \definedummyword{u}% \definedummyword{v}% \definedummyword{H}% \definedummyword{dotaccent}% \definedummyword{ringaccent}% \definedummyword{tieaccent}% \definedummyword{ubaraccent}% \definedummyword{udotaccent}% \definedummyword{dotless}% % % Texinfo font commands. \definedummyword{b}% \definedummyword{i}% \definedummyword{r}% \definedummyword{sc}% \definedummyword{t}% % % Commands that take arguments. \definedummyword{acronym}% \definedummyword{cite}% \definedummyword{code}% \definedummyword{command}% \definedummyword{dfn}% \definedummyword{emph}% \definedummyword{env}% \definedummyword{file}% \definedummyword{kbd}% \definedummyword{key}% \definedummyword{math}% \definedummyword{option}% \definedummyword{samp}% \definedummyword{strong}% \definedummyword{tie}% \definedummyword{uref}% \definedummyword{url}% \definedummyword{var}% \definedummyword{verb}% \definedummyword{w}% } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{% \expandafter\let\csname ##1\endcsname\asis }% % We can just ignore other control letters. \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{}% }% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\copyright{copyright}% \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\expansion{==>}% \def\minus{-}% \def\pounds{pounds}% \def\point{.}% \def\print{-|}% \def\result{=>}% % % Don't write macro names. \emptyusermacros } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \ifvmode \dosubindsanitize \else \dosubindwrite \fi }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % % ..., ready, GO: % \def\dosubindsanitize{% % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \skip0 = \lastskip \edef\lastskipmacro{\the\lastskip}% \count255 = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\skip0 glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\skip0 \fi % \dosubindwrite % \ifx\lastskipmacro\zeroskipmacro % if \lastskip was zero, perhaps the last item was a % penalty, and perhaps it was >=10000, e.g., a \nobreak. % In that case, we want to re-insert the penalty; since we % just inserted a non-discardable item, any following glue % (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\count255>9999 \nobreak \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\skip0 \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \penalty -300 % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% \vskip .33\baselineskip plus .1\baselineskip % % Do our best not to break after the initial. \nobreak }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this frozes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#1}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. % However, they are not reliable, because we don't use marks. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % \message{\putwordChapter\space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % \def\appendixnum{\putwordAppendix\space \appendixletter}% \message{\appendixnum}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% \pchapsepmacro {% \chapfonts \rm % % Have to define \thissection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\thissection{#1}% \gdef\thischaptername{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \def\thischapter{#1}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \xdef\thischapter{}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. And we don't % use \thissection because that changes with each section. % \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert space above the heading. \csname #2headingbreak\endcsname % % Only insert the space after the number if we have a section number. \def\sectionlevel{#2}% \def\temptype{#3}% % \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\thissection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \thissection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\thissection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\thissection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chfplain. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chfplain. \donoderef{#3}% % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This \nobreak is purely so the last item on the list is a \penalty % of 10000. This is so other code, for instance \parsebodycommon, can % check for and avoid allowing breakpoints. Otherwise, it would % insert a valid breakpoint between: % @section sec-whatever % @deffn def-whatever \nobreak } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks \toks0 = {#2}% \toks2 = \expandafter{\lastnode}% \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% {\the\toks2}{\noexpand\folio}}}% \temp \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \def\thischapter{}% \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 % We can't do this, because then an actual ^ in a section % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \input \jobname.toc \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \jobname.toc \ifeof 1 \else \input \jobname.toc \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing=\comment \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes % @cartouche defines \nonarrowing to inhibit narrowing % at next level down. \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \fi \let\exdent=\nofillexdent } % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \envdef\quotation{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % [Knuth] pp. 380,381,391 % Disable Spanish ligatures ?` and !` of \tt font \begingroup \catcode`\`=\active\gdef`{\relax\lq} \endgroup % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \catcode`\`=\active \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup \def\setupverbatim{% \nonfillstart \advance\leftskip by -\defbodyindent % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \catcode`\`=\active \tabexpand % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. Many commands won't be % allowed in this context, but that's ok. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\begingroup % Define a command to swallow text until we reach `@end copying'. % \ is the escape char in this texinfo.tex file, so it is the % delimiter for the command; @ will be the escape char when we read % it, but that doesn't matter. \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}% % % We must preserve ^^M's in the input file; see \insertcopying below. \catcode`\^^M = \active \docopying } % What we do to finish off the copying text. % \def\enddocopying{\endgroup\ignorespaces} % @insertcopying. Here we must play games with ^^M's. On the one hand, % we need them to delimit commands such as `@end quotation', so they % must be active. On the other hand, we certainly don't want every % end-of-line to be a \par, as would happen with the normal active % definition of ^^M. On the third hand, two ^^M's in a row should still % generate a \par. % % Our approach is to make ^^M insert a space and a penalty1 normally; % then it can also check if \lastpenalty=1. If it does, then manually % do \par. % % This messes up the normal definitions of @c[omment], so we redefine % it. Similarly for @ignore. (These commands are used in the gcc % manual for man page generation.) % % Seems pretty fragile, most line-oriented commands will presumably % fail, but for the limited use of getting the copying text (which % should be quite simple) inserted, we can hope it's ok. % {\catcode`\^^M=\active % \gdef\insertcopying{\begingroup % \parindent = 0pt % looks wrong on title page \def^^M{% \ifnum \lastpenalty=1 % \par % \else % \space \penalty 1 % \fi % }% % % Fix @c[omment] for catcode 13 ^^M's. \def\c##1^^M{\ignorespaces}% \let\comment = \c % % % Don't bother jumping through all the hoops that \doignore does, it % would be very hard since the catcodes are already set. \long\def\ignore##1\end ignore{\ignorespaces}% % \copyingtext % \endgroup}% } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check for penalty 10002 (inserted by % \defargscommonending) instead of 10000, since the sectioning % commands insert a \penalty10000, and we don't want to allow a break % between a section heading and a defun. \ifnum\lastpenalty=10002 \penalty2000 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty 10002 % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remainnig is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \let\var=\ttslanted #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } \def\badparencount{% \errmessage{Unbalanced parentheses in @def}% \global\parencount=0 } \def\badbrackcount{% \errmessage{Unbalanced square braces in @def}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1\endinput}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex \catcode`\@=0 \catcode`\\=\other \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? \def\macrolist{} % List of all defined macros in the form % \do\macro1\do\macro2... % Utility routines. % This does \let #1 = #2, except with \csnames. \def\cslet#1#2{% \expandafter\expandafter \expandafter\let \expandafter\expandafter \csname#1\endcsname \csname#2\endcsname} % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\macrobodyctxt{% \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\{=\other \catcode`\}=\other \catcode`\@=\other \catcode`\^^M=\other \usembodybackslash} \def\macroargctxt{% \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\@=\other \catcode`\\=\other} % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% % Add the macroname to \macrolist \toks0 = \expandafter{\macrolist\do}% \xdef\macrolist{\the\toks0 \expandafter\noexpand\csname\the\macname\endcsname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\do\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx#1\relax % remove this \else \noexpand\do \noexpand #1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \next} % We want to disable all macros during \shipout so that they are not % expanded by \write. \def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% \edef\next{\macrolist}\expandafter\endgroup\next} % For \indexnofonts, we need to get rid of all macros, leaving only the % arguments (if present). Of course this is not nearly correct, but it % is the best we can do for now. makeinfo does not expand macros in the % argument to @deffn, which ends up writing an index entry, and texindex % isn't prepared for an index sort entry that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \def\emptyusermacros{\begingroup \def\do##1{\let\noexpand##1=\noexpand\asis}% \edef\next{\macrolist}\expandafter\endgroup\next} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \thissection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \turnoffactive \otherbackslash \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\thissection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \writexrdef{pg}{\folio}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf \leavevmode \getfilename{#4}% {\turnoffactive \otherbackslash \ifnum\filenamelength>0 \startlink attr{/Border [0 0 0]}% goto file{\the\filename.pdf} name{#1}% \else \startlink attr{/Border [0 0 0]}% goto name{\pdfmkpgn{#1}}% \fi }% \linkcolor \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \otherbackslash \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive \otherbackslash % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR#1\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readauxfile \global\havexrefstrue \fi \closein 1 } \def\readauxfile{\begingroup \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count 1=128 \def\loop{% \catcode\count 1=\other \advance\count 1 by 1 \ifnum \count 1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 % \input \jobname.aux \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarily, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\bigskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \line\bgroup\hss \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \hss \egroup \bigbreak \fi % space after the image \endgroup} % @float FLOATTYPE,LOC ... @end float for displayed figures, tables, etc. % We don't actually implement floating yet, we just plop the float "here". % But it seemed the best name for the future. % \envparseargdef\float{\dofloat #1,,,\finish} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \thissection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\thissection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline\thiscaption \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies \turnoffactive \otherbackslash \immediate\write\auxfile{@xrdef{\floatlabel-lof}{% \floatident \ifx\thisshortcaption\empty \ifx\thiscaption\empty \else : \thiscaption \fi \else : \thisshortcaption \fi }}% }% \fi % % Space below caption, if we printed anything. \ifx\printedsomething\empty \else \vskip\parskip \fi \egroup % end of \vtop \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \newtoks\appendtomacroAtoks \newtoks\appendtomacroBtoks \def\appendtomacro#1#2{% \appendtomacroAtoks = \expandafter{#1}% \appendtomacroBtoks = {#2}% \edef#1{\the\appendtomacroAtoks \the\appendtomacroBtoks}% } % @caption, @shortcaption are easy. % \long\def\caption#1{\checkenv\float \def\thiscaption{#1}} \def\shortcaption#1{\checkenv\float \def\thisshortcaption{#1}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \thissection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % and i18n. % @documentlanguage is usually given very early, just after % @setfilename. If done too late, it may not override everything % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file if it exists. \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \input txi-#1.tex \fi \closein 1 \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? In the current directory should work if nowhere else does.} % @documentencoding should change something in TeX eventually, most % likely, but for now just recognize it. \let\documentencoding = \comment % Page size parameters. % \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; 3) voffset; % 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) % physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}% {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.5 (or so) format. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {\voffset}{.25in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{51\baselineskip}{160mm} {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1 \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. {\catcode`\\=\active @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} } % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\backslashcurfont}} \catcode`\\=\active % Used sometimes to turn off (effectively) the active characters % even after parsing them. @def@turnoffactive{% @let"=@normaldoublequote @let\=@realbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @unsepspaces } % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. (Thus, \ is not expandable when this is in % effect.) % @def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\{ in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also back turn on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gnubiff-2.2.16/COPYING0000644000175000017500000010451312474422124011204 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS 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 state 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) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . gnubiff-2.2.16/ChangeLog0000644000175000017500000014374512474430412011734 00000000000000gnubiff -- History of visible changes. Copyright (C) 2000-2012 Nicolas Rougier and 2004-2015 Robert Sowada . See the end for copying conditions. Please send gnubiff bug reports to gnubiff-bugs@lists.sourceforge.net Version 2.2.16 2015-02-28 22:20 * Robert Sowada - Changed version to 2.2.16 - Updated all translations - Added eo translation (thanks to Felipe Castro) - Added fi translation (thanks to Jorma Karvonen) - Added sr translation (thanks to Miroslav Nikolic) Version 2.2.15 2012-02-26 10:38 * Robert Sowada - Changed version to 2.2.15 - Added missing ui-files - Fixed format-string-bug - Fixed false error message Version 2.2.14 2012-01-29 18:39 * Robert Sowada - Changed version to 2.2.14 - Several fixes so that gnubiff compiles with recent versions of gtk - Migrated deprecated GtkOptionMenu to GtkComboBoxText - Migrated to GTK3 and Gnome3 Version 2.2.13 2010-02-07 13:56 * Robert Sowada - Changed version to 2.2.13 - Updated Vietnamese translation (thanks to Clytie Siddall) - Updated Dutch translation (thanks to Erwin Poeze) - Updated Swedish translation (thanks to Daniel Nylander) - Added Indonesian translation (thanks to Arif E. Nugroho) - Bugfix: Race Condition when resetting polling timer (bug was reported several times (including #2079358 by Ryan Hayle and Bilal Hawa) - Added Bilal Hawa to contributors - Added Ryan Hayle to contributors - Support for IPv6 (backport from 2.3.0 CVS) Version 2.2.12 2010-01-10 13:21 * Robert Sowada - Changed version to 2.2.12 - Bugfix: Format string problem - Bugfix: Check for libgnomeui added in configure (see support request #2805290 by Jleuleu and debian bug #536955 by Lucas Nussbaum) - Added .desktop file (thanks to Fabian Affolter) - Added Fabian Affolter to contributors Version 2.2.11 2009-04-05 18:14 * Robert Sowada - Changed version to 2.2.11 - Fixed some gcc 4.3 warnings (thanks to Andre Klitzing for providing a patch) - Changed some C style casts to C++ style static casts (thanks to Andre Klitzing for providing patches) - Fixed some gcc 4.3 problems (thanks to ChristenDoc for providing a patch) - Bugfix: Only get filtered messages once (thanks to Frederik Vanderstraeten for reporting this bug as #2140306) - Added Frederik Vanderstraeten to contributors Version 2.2.10 2008-04-20 11:09 * Robert Sowada - Changed version to 2.2.10 - Updated Dutch translation (thanks to Erwin Poeze) - Added Erwin Poeze to contributors - Bugfix: Handling of message sequence numbers when using IMAP4 (thanks to Jan Outrata for providing a patch; this was debian bug #472080) - Added Jan Outrata to contributors - Bugfix: Not all RFC2047 compliant header lines were parsed correctly (thanks to Andre Klitzing for reporting the bug as #1924467 and for providing a patch; this is ubuntu bug #204640) - Bugfix: Message header fieldnames should be parsed case insensitive (thanks to Andre Klitzing for reporting the bug as #1924465 and for providing a patch; this is ubuntu bug #204642) - Added Andre Klitzing to contributors Version 2.2.9 2008-02-03 17:48 * Robert Sowada - Changed version to 2.2.9 - Bugfix: The last capability sent by an IMAP4 server was ignored (backport from 2.3.0 CVS) - Bugfix: The capability command when using IMAP4 was sometimes sent twice (backport from 2.3.0 CVS) - Bugfix: Infinite loop when using system tray without image or without system tray (this bug was reported by Marcelo and Iulian Tocu as #1824666; backport from 2.3.0 CVS) - Updated README/Info dialog (OpenSSL exception in license) - Updated German translation Version 2.2.8 2007-09-09 18:45 * Robert Sowada - Changed version to 2.2.8 - Updated Swedish translation (thanks to Daniel Nylander) - Updated Vietnamese translation (thanks to Clytie Siddall) - Upgraded license to GPL version 3 - Updated German translation Version 2.2.7 2007-07-15 21:20 * Robert Sowada - Changed version to 2.2.7 - Backport of signal code cleanup (from gnubiff 2.3.0 CVS) - Backport of showing/hiding popup via signals feature (from gnubiff 2.3.0 CVS; thanks to Jonathan Hitchcock for providing a patch) - Bugfix: Pointer tests for being not NULL - Compatibility with gcc 4.3 (thanks to Martin Michlmayr for providing a patch; this was debian bug #420969) - Backport of options for popup/applet appearance in taskbar (from gnubiff 2.3.0 CVS; thanks to Jonathan Hitchcock for providing a patch) - Backport of system tray frame removal bugfix (from gnubiff 2.3.0 CVS; thanks to Eugene Ossintsev for reporting this bug) - Added Jonathan Hitchcock, Martin Michlmayr and Eugene Ossintsev to contributors Version 2.2.6 2007-04-09 18:37 * Robert Sowada - Changed version to 2.2.6 - Updated Swedish translation (thanks to Daniel Nylander) - Added Daniel Nylander to contributors - Backport of infinite loop bugfix (from gnubiff 2.3.0 CVS) Version 2.2.5 2007-01-28 16:08 * Robert Sowada - Changed version to 2.2.5 - Fixed incompatibility in the about dialog (API change from gtk 2.8 to gtk 2.10?; this bug was reported by Sebastian Breier as #1621270) - Bugfix: Handling of the "delete-event" in the about dialog - Added Sebastian Breier to contributors - Bugfix: Determining initial image size (thanks to Felipe Csaszar for reporting this bug) - Added Felipe Csaszar to contributors - Changed years in the About dialog to 2007 Version 2.2.4 2006-12-10 19:47 * Robert Sowada - Changed version to 2.2.4 - Bugfix: Option "filter_global_last" was not available - Updated intltool (to version 0.35.0) and gettext (to version 0.15) files - Feature: Portuguese translation (thanks to Gunther Furtado) - Updated German translation - Added Gunther Furtago to contributors Version 2.2.3 2006-10-15 18:46 * Robert Sowada - Changed version to 2.2.3 - Bugfix: Encrypting passwords that are longer than 16 characters (debian bug #378233; thanks to Julio Mendoza for reporting this bug) - Bugfix: Encrypting passwords that have a length of 16, 32, 48 etc. - Bugfix: Code fixes to avoid gcc warnings - Bugfix: Ignore SIGPIPE signal for using SSL properly - Bugfix: Compiling without "fam.h" (thanks to Tom K. for reporting this bug) - Bugfix: Short password compatibility (debian bug #385625 by Antoine Sirinelli) - Added Julio Mendoza and Antoine Sirinelli to contributors - Bugfix: Including "sys/types.h" when including "regex.h" (needed for FreeBSD 4; thanks to Tim Bishop for reporting) Version 2.2.2 2006-08-06 18:47 * Robert Sowada - Changed version to 2.2.2 - Bugfix: Obtaining the panel's size (GNOME) - Updated Hungarian translation (thanks to Wallner Adam) - Updated Vietnamese translation (thanks to Clytie Siddall) - Feature: Three new options for filtering messages via regular expressions (feature request #1493670 by sunyata and others) - Cleanup: Substituted static mutex for popup by regular mutex - Cleanup: Added test for header file "regex.h" in "configure.ac" - Bugfix: Status of multipart messages (thanks to Chris Kemp for reporting and fixing this bug; bug was reported as #1514879 before by mtorroja) - Added Chris Kemp to contributors - Updated German Translation Version 2.2.1 2006-05-14 20:08 * Robert Sowada - Changed version to 2.2.1 - Bugfix: Version check of gtk in configure.ac (thanks to Andy Schofield for reporting this bug) - Added Andy Schofield to contributors - Bugfix: False GPL version in "doc/gnubiff.texi" - Added GPL (version 2) as ASCII text file to the gnubiff directory - Cleanup: All FAM functions in "src/local.cc" now have the prefix "fam_" - Cleanup: It should be possible now to compile the code without FAM support - Feature: Configuring gnubiff without support for FAM (feature request #1461632 by Kyle McDonald and others) - Updated Vietnamese translation (thanks to Clytie Siddall) - Feature: New option "startup_preferences" Version 2.2.0 2006-04-09 17:44 * Robert Sowada - Changed version to 2.2.0 (from version 2.1.5) - Removed not needed include files from "src/gnubiff.cc" - Added files from libegg for later systray support - Updated TODO - Cleanup of applet code - Bugfix: gnome version of gnubiff can now be installed to any directory - Added Jakub Raczkowski to contributors - Workaround: Added a parameter to the create function to work around the problem of setting an incorrect callback data pointer for the gtk applet - Bugfix: Text in gtk applet now always fits into the fixed container - Bugfix: Gnome applet now identical to gtk applet. - Feature: It's now possible to print the number of new messages without zero padding (via "%D") - Added Maik Wachsmuth and Satou Kazuhito to contributors - Bugfix: Checking for NULL-pointer (in Biff::replace()) - Bugfix: Threadsafeness of some mailbox access functions - Bugfix: Message when loading config file from newer gnubiff version - Updated Italian translation (thanks to Stefano Fabri; for version 2.1.x) - Bugfix: Removed no longer needed files from po/POTFILES.in - Feature: Gnubiff can now be started without GUI (option '--nogui') - Feature: Gnubiff can now be started without X (this was feature request #1059347 by Iulian Tocu) - Feature: Hungarian translation (thanks to Wallner Adam; for version 2.1.x) - Added Wallner Adam to translators and contributors - Bugfix: Added an include to src/support.cc (for FreeBSD 4) - Feature: Control gnubiff via USR1 and USR2 signal (feature request #1287946; thanks to a patch by Wallner Adam) - Bugfix: Creating properties line in expert dialog - Bugfix: Creating allowed values line in expert dialog - Feature: Catch some additional signals and give an error message - Bugfix: Changed 0 to NULL to get rid of compiler warning - Updated intltool (to version 0.34.1) and gettext (to version 0.14.4) files - Feature: Applet can now be put into system tray (option "--systemtray") - Feature: gnubiff-devel address in credits dialog - Bugfix: Detection of FAM/GAMIN in configure (thanks to Jan Blunck for providing a patch) - Added Jan Blunck to contributors - Updated German translation - Feature: Possibility to switch off FAM monitoring in favor of polling (option "mailbox/local_fam_enable") - Bugfix: Added FAM mutex lock when getting all pending FAM events - Bugfix: Check FAM connection when getting all pending FAM events - Changed the last copyright year in all sourcefiles to 2006 - Feature: Options in the config file can now become deprecated - Feature: Functions for encrypting and decrypting via AES - Security: Don't display the password in the expert dialog as plain text - Security/Feature: Password is now stored AES encrypted in the config file - Security/Feature: Converting passwords when loading old config files - Cleanup: Removed old password handling code - Security note: The passphrase must be stored in the binary, so anyone that has access to this binary can get it and thus decrypt the passwords in gnubiff configuration files - Feature: Decoding of base64 encoded message bodies - Bugfix: Do not start monitoring when the "apply" button in the properties dialog is clicked - Feature: Option for enabling resetting the mailbox in case of a connection failure (the new default value changes the default behavior of gnubiff) - Cleanup: Use GtkAboutDialog for displaying the about dialog - Feature: About dialog can be called from gnome applet menu - Cleanup: Translators tab in the preferences dialog - Bugfix: Obtaining option values from GUI - Feature: Enabling/disabling the popup can be controlled via signals (see debian bug #354383 by Eric Cooper) - Added Eric Cooper to contributors - Bugfix: Detection of fam.h header file at configuration time - Bugfix: Include gnome files only when compiling for gnome (thanks to Tim Bishop for reporting this bug) - Bugfix: Only add "passphrase" option when using password (thanks to Tim Bishop for reporting this bug) - Copied po/fr.po to po/fr_FR.po and po/fr_CA.po * Roland Stigge - Added reference to info pages in man page (Debian bug #335193) * Nicolas Rougier - Update of French translation Version 2.1.9 2006-01-08 10:54 * Robert Sowada - Changed version to 2.1.9 - Backport (from gnubiff 2.2.0 CVS) of properties line in expert dialog fix - Backport (from gnubiff 2.2.0 CVS) of a.v. line in expert dialog fix - Backport (from gnubiff 2.2.0 CVS) of compiler warning bugfix - Bugfix: Detection of FAM/GAMIN in configure (thanks to Jan Blunck for providing a patch) - Added Jan Blunck to contributors - Backport (from gnubiff 2.2.0 CVS) of FAM bugfixes and possibility to disable FAM Version 2.1.8 2005-12-19 22:01 * Robert Sowada - Changed version to 2.1.8 - Backport (from gnubiff 2.2.0 CVS) of smaller fixes - Backport (from gnubiff 2.2.0 CVS) of newer version in config file fix - Updated Italian translation (thanks to Stefano Fabri) - Feature: Hungarian translation (thanks to Wallner Adam) - Added Wallner Adam to translators and contributors - Updated TODO - Bugfix: Added an include to src/support.cc (for FreeBSD 4) Version 2.1.7 2005-10-31 0:43 * Robert Sowada - Changed version to 2.1.7 - Bugfix: Mistake when backporting from 2.2.0 to 2.1.6. Thanks to Maik Wachsmuth and Satou Kazuhito for reporting this bug. - Added Maik Wachsmuth and Satou Kazuhito to contributors * Roland Stigge - Added reference to info page in man page (Debian bug #335193) Version 2.1.6 2005-10-09 15:51 * Robert Sowada - Changed version to 2.1.6 - Backport (from gnubiff 2.2.0 CVS) of changes for installing gnubiff into an arbitrary location Version 2.1.5 2005-08-21 18:11 * Robert Sowada - Changed version to 2.1.5 - Bugfix: Checking if a FAM connection is established - Bugfix: Threadsafeness of FAM code - Bugfix: Retrying monitoring via FAM - Copyright message in Credits dialog updated - Bugfix: Finally fixed the FAM problem (bug #1221040; thanks to Hubert Verstraete for providing a patch) - Updated TODO - Added Hubert Verstraete to contributors - Bugfix: Obtaining keyboard focus automatically (thanks to Wade Berrier for reminding us of this bug and for providing a patch) - Added Wade Berrier to contributors - Feature: Option "pop3_max_uid_length" for dealing with buggy servers - Bugfix: Define HAVE_BIND_TEXTDOMAIN_CODESET in configure file (debian bug #305002; thanks to Elie Morisse for reporting this bug; thanks to Martin Samuelsson for giving information how to reproduce the bug; thanks to Roland Stigge for finding the exact cause of the bug) - Added config.rpath to config subdir - Bugfix: "config/gnubiff.spec.in" must be specified in "Makefile.am" - Updated NEWS Version 2.1.4 2005-06-27 22:45 * Robert Sowada - Changed version to 2.1.4 - Version is now inserted automatically in gnubiff.spec, gnubiff.texi - Added "config/mdate-sh" (needed for generating "doc/version.texi") - Added "doc/version.texi" (can be updated via "--enable-maintainer-mode") - Checked files for incorrect string size type without problems (so all files are checked now; see below for files checked for version 2.1.3): "src/gnubiff_options.*", "src/gui.*", "src/local.*", "src/options.*", "src/socket.*", "src/ui-applet.*", "src/ui-applet-gtk.*", "src/ui-authentication.*", "src/ui-certificate.*", "src/ui-popup.*" and "src/ui-preferences.*" - Cleanup: New class Support (for existing functions in "src/support.cc") - Cleanup: Moved parsing of number sequences to "src/support.cc" - Bugfix: Don't monitor directory for mh protocol (saves resources) - Cleanup of autodetection code for local mailboxes - Cleanup of Imap4::command_fetchuid() - Cleanup of mh and maildir protocols - Feature: Support for mh protocol as used by Sylpheed - Bugfix in "src/ui-properties.h" (when no SSL is available) - Added include file for FreeBSD - Updated Vietnamese translation (thanks to Clytie Siddall) - Very basic support for the Kinyarwanda language (thanks to Steven Michael Murphy) - Bugfix: Not reading the whole message (mh protocols) - Cleanup: FAM error handling via exceptions - Bugfix: Race condition when starting monitoring via FAM - Bugfix: Testing returned pointer in Decoding::decode_body() - Bugfix: Testing for end of file - Bugfix: Reading not enough header lines (maildir; thanks to Nicolas Evrard for reporting this bug; this fixes debian bug #303965) - Bugfix/Cleanup: Rewrite of parsing header lines that may be RFC 2047 encoded for more RFC 2047 compliance. This also fixes the whitespace between two encoded words bugs (thanks to Samuel Hym for reporting this bug) - Added Samuel Hym to contributors - Czech translation added (thanks to Josef Vybiral) - Added Josef Vybiral to contributors - Bugfix: Added include file for compiling with gcc-c++-4.0.0-11 (thanks to John Ellson for reporting this bug) - Bugfix: Password strings containing spaces in configure (thanks to John Ellson for reporting this bug) - Bugfix: Bug in error message (was fixed in 2.0.3, got lost in 2.1.0; thanks to John Ellson for reporting this bug) - Bugfix: Operator precedence in debug message (thanks to John Ellson for reporting this bug) - Added John Ellson to contributors - Change: Default value of option "mailbox/other_port" is now 0 - Feature: Display standard port being used in the properties dialog - Bugfix: Showing/Hiding of certificate text entry Version 2.1.3 2005-04-03 23:57 * Robert Sowada - Changed version to 2.1.3 - Updated po files, German translation - Bugfix: Detecting FAMCreated - Bugfix: Maildir protocol provides uid - Cleanup: Using glib functions for directory access (maildir) - Bugfix: Obtaining version of gnubiff config file - Bugfix: Don't parse already read messages (maildir) - Bugfix: Respect "use_max_mail" option (maildir) - Bugfix: Reading message body (file) - Bugfix: Don't read whole body (maildir) - Bugfix: Check pointers in callbacks (in "src/gui.cc") - Bugfix: 64bit problem (debian bug #301853); note: The same problem is still present multiple times in the code; added this to TODO file; thanks to David Mosberger for reporting and fixing this bug - Added David Mosberger to contributors - Bugfix: Corrected string size types in "src/decoding.*", "src/mailbox.*" "src/apop.*", "src/imap4.*", "src/maildir.*", "src/biff.*", "src/gtk_image_animation.*", "src/option.*", "src/mh.*", "src/header.*" and "src/support.*" (64bit systems) - Checked files for incorrect string size type without problems: "src/pop.*", "src/maildir.*", "src/file.*", "src/gnubiff.*", "src/pop3.*", "src/ui-properties.*" and "src/ui-applet-gnome.*" - Bugfix: Crash in image selecting dialogs (thanks to David Mosberger for reporting this bug) - Feature: More information in unknown_internal_error() provided - Documentation of Mailbox::parse() - Bugfix: Throw exception if login line cannot be created (apop) - Bugfix: "Quit" menu item (gtk applet) - Bugfix: Respect "use_max_mail" option (mh) - Bugfix: Test pointers in callback functions ("src/gtk_image_animation.cc") - Updated Vietnamese translation (thanks to Clytie Siddall) - Bugfix: Substituted protocol dependent test in "src/local.h" (fam) - Bugfix: Detecting FAMDeleted (this should finally fix debian bug 297774) - Bugfix/Feature: New option "file_restore_atime". Note: This results in a changed default behavior! - Updates in "ui/preferences.glade" to make translating easier - Bugfix: Monitoring the correct directory by FAM (maildir; thanks to Alexis S. L. Carvalho for reporting this and previous maildir bugs) - Bugfix: Reading messages (mh) - Added Alexis S. L. Carvalho to contributors - Bugfix: AM_GLIB_GNU_GETTEXT prevents creating localization (thanks to Nicolas Evrard for reporting this bug) - Bugfix: Makefile.am in "ui" subdirectory Version 2.1.2 2005-03-26 17:28 * Robert Sowada - Changed version to 2.1.2, updated spec file - Various small changes - Updated po files, German translation - Cleanup: Complete documentation of functions in "src/options.cc" - Bugfix: Allow storing of strings that contain spaces in string list options - Bugfix: Email address for bugs updated in "ChangeLog", "configure.ac", "NEWS" - Bugfix: Respect folding in mail header - Bugfix: Better handling of certain header lines - Bugfixes/Cleanup: Parsing of content type header field - Bugfix: Handling of quoted strings (IMAP4) - Feature: Support other encodings than "7bit" for all protocols - Feature: Error message if content type is not supported - Bugfix: Typo in mini help(thanks to Clytie Siddall for reporting this bug) - Bugfix: Bugs regarding the word "mail" (thanks to Clytie Siddall for reporting this bug) - Added Clytie Siddall to contributors - Feature: Support for "multipart/mixed" and "multipart/alternative" mails - Feature: Version saved to config file - Feature: Autoupdate of options that have new default values - Feature: Vietnamese translation (thanks to Clytie Siddall) - Added Clytie Siddall to translators - Added David Smeringe to translators (was forgotten before) - Update: Included Dutch translation for 2.0.2 into CVS (was from 1.4.0 before) - Bugfix: Building certificate chain automatically (this fixes debian bug #226914) - Bugfix: Don't load config file twice in gnome mode - Cleanup: Get "prevdos_line_length" option only once per connect not once per line - Bugfix: Displaying error messages instead of mail body - Bugfix: Illegal parameters to callback function while parsing config file - Bugfix: Testing return value when creating XML parser - Bugfix: Testing popup() for being NULL pointer in "src/applet.cc" (thanks to Phil Shapiro for reporting this bug) - Added Phil Shapiro and Nicolas Evrard to contributors - Bugfix: Setting defaults for date, subject and from - Bugfix: Don't parse mails that aren't stored anyway - Added Victor Alonso to translators - Cleanup of Socket::close() - Bugfix/Update: Updated various files from the gettext package to version 0.14.1 - Updated intltool utilities to version 0.33 - Removed "config/stamp-h1" (is autogenerated) - Bugfix: Updating popup window - Bugfix: Executing new mail command (when popup is not to be updated) - Bugfix: Checking parameters to callback functions - Update: Expert option dialog popup menus now created via glade - Bugfix: Memory leak when creating popup menu - Bugfix: Added include file for FreeBSD (thanks to Tim Bishop for reporting this bug) - Bugfix: Check for crypto lib in autoconf.ac (thanks to Tim Bishop for reporting this bug) - Feature: Support for "multipart/signed" mails (without checking signature) * Roland Stigge - Bugfix: Encoding of "po/fr.po" Version 2.1.1 2005-02-27 11:13 * Nicolas Rougier - bugfix: gui, biff geometry field was sensitive when in gnome mode - bugfix: password automatic finding, misplaced mutex lock - bugfix: password automatic finding, port was no taken into account - bugfix: use delay instead of 1 second between FAM retries. - bugfix: change preferences ui - update: French translation - update: gnubiff.texi - bugfix: Remove use of the pseudo-capability greeting message in IMAP4 * Robert Sowada - Changed version to 2.1.1, updated spec file - Small changes - Marked strings for internationalization (type & authentication menu) - Updated po files, German translation - Bugfix: Parsing local mails could trigger additional FAM events resulting in parsing mails another time (->infinite loop, 100% CPU load) - Translating copyright message in credits dialog simplified (po files are now independent of cuurent version) - Added decoding.cc to POTFILES.in - Bugfix: Setting mailbox status to old after new mail is displayed (thanks to Byron Foster for providing a patch) - Bugfix: Quick test for new mail while idling is not enogh (IMAP4; thanks to Byron Foster for providing a patch) - Added Byron Foster to Contributors - Bugfix: Don't crash if server's response is not valid (IMAP4; thanks to Calum Mackay for reporting this bug) - Feature: Applet and Popup now can be set to be sticky and be kept above all other windows - Bugfixes: Better error handling and bad connection handling (IMAP4; thanks to Byron Foster for providing a patch) - Bugfix: Corrected tests for responses to IDLE, SEARCH NOT SEEN and FETCH header commands (IMAP4) - Cleanup of SEARCH NOT SEEN, CAPABILITY, FETCH header, LOGIN, SELECT, FETCH bodystructurei, LOGOUT, IDLE and FETCH BODY commands (IMAP4) - Bugfix: Segfaulting in SSL when writing to a closed socket - Cleanup of code for obtaining the password for distant mailboxes - Cleanup of code for checking for new mails (IMAP4) - Bugfix: Signal SIGCHLD interrupts socket reads and writes (thanks to Byron Foster for providing patches) - Bugfix: Some error handling was only done when debugging was activated - Bugfix: CAPABILITY command (IMAP4) - Cleanup of code for getting server's acknowledgment (IMAP4) - Bugfix: LOGINDISABLED capability respected (IMAP4) - Bugfix: Inserting a correct Content-type into the header (IMAP4) - Bugfix: Server's response to the "FETCH (BODYSTRUCTURE)" command may be multiline (IMAP4) - Bugfix: Accept mail lines beginning with "* BYE" (IMAP4) - Bugfix: Send the LOGOUT command if we have to terminate a connection untimely (IMAP4) - Bugfix/Cleanup: Simplified error handling when sending to the server (IMAP4) - Bugfix/Cleanup: Simplified error handling when reading server responses (IMAP4) - Bugfix/Cleanup: Simplified waiting for specified untagged server responses (IMAP4) - Don't stop idling when the server sends information and warning messages (IMAP4) - Source code for class Imap4, Pop, Apop and Pop3 is fully documented now - Bugfix: Printing debug messages for sent lines (IMAP4 & POP3) - Feature: Allow the user to forbid idling (no GUI support ATM; IMAP4) - Added exception handling to POP3 - Bugfix/Cleanup: Error handling when reading and sending (POP3) - Cleanup: Got rid of protocol specific code in class Socket - Bugfix: Corrected tests regarding socket status - Bugfix: Allow mail lines to begin with "-ERR" (POP3) - Bugfix: Don't treat "* BYE" messages by server as mailbox error when not checking for mail (IMAP4) - Bugfix/Cleanup of QUIT, STAT, UIDL and TOP commands (POP3) - Bugfix: Mail lines beginning with '.' (POP3, was fixed in 2.0.x) - fetch_mails() instead of fetch_status() and fetch_header (POP3 & IMAP4). So we now have only one connection per update. This helps users whose servers enforce a limit on connections per time interval. - Bugfix: Error handling when getting timestamp (APOP) - substituted std::vector by std::set for saved uids (POP3), hidden mailids, seen mailids and new seen mailids - mailids are strings now, no longer integers. Note: This makes the saved values for seen mails in the config file invalid - mailids are now created by taking uids from server if possible (currently only POP3, IMAP4 will follow) - Unread headers are now saved in a map (using the mailid as key) - Save response codes for positive server responses (IMAP4) - Check for the UIDVALIDITY response code for the SELECT command (IMAP4) - Check for the CAPABILITY response code when starting connection. If found there is no need to send the CAPABILITY command (IMAP4) - Support for unique ids when using IMAP4. Deciding whether a mail is new by looking at the unique id instead of the message sequence number. Note: This may lead to inaccurate results if the server does not support UIDVALIDITY (see RFC 3501 2.3.1.1) but is of course not worse than message sequence numbers;-) - Removed contains_new(): No longer needed - Cleanup of error message when setting socket timeouts - Feature: Mails are now fetched from the server and parsed only once per session. Subsequent updates take the saved header instead of fetching and parsing the mail again (IMAP4 & POP3) - Feature: Do not fetch and parse mails that are not to be displayed anyway (IMAP4 & POP3) - Cleanup: Handling untagged responses, sending commands with msn argument (IMAP4) - Bugfix: Respect the number of mail headers to be shown in the popup (thanks to Calum Mackay for reporting this bug) - Feature: Get all unique identifiers at once. If no new mail is present on the server we now have to send only 5 or 6 IMAP commands to the server (IMAP4) - Change: biff->max_mail_ is now the number of message sequence numbers that are obtained from the server (IMAP4) - Bugfix: Respect biff_->use_max_mail_ (IMAP4) - Feature: Get all unique ids via one POP command if this is possible (i.e. if the total number of unread messages on the server is not greater than max_mail_). So only 5 (POP3) or 4 (APOP) POP commands needed for a update when no new messages are available (POP3) - Bugfix: Respect use_max_mail_ (POP3) - Start of checking for new mail now protocol independent in class Mailbox - Bugfix: Number of mails to be displayed distributed correctly among the mailboxes - Bugfix: Displaying popup data correctly - Some additional include files added for FreeBSD (thanks to Tim Bishop) - Macro TEMP_FAILURE_RETURN provided for systems that don't have it - Bugfix: Once mail is displayed set mailbox status to MAILBOX_OLD - Bugfix: Note only those mails for displaying that will be displayed (local mailboxes) - Feature: Gnubiff applet and/or popup may appear in pagers or not - Bugfix: Remove mail ids from hidden_ that are no longer in seen_ - Simplified code for loading config file - Error messages for errors when loading config file - Bugfix: Segmentation faults when selecting mails in popup while updating - New files for class Header, cleanup of this class - Added Tim Bishop to maintainers, updated some dates to 2005 - Bugfix: Only don't send CAPABILITY command if all capabilities are present in the response code (IMAP4) - Bugfix: Updating applet/popup when idling (IMAP4), thanks to Byron Foster for reporting this bug - Bugfix: Marking mails as read - Feature: Options are now stored in a common container - Feature: Expert dialog for editing all options - Feature: Searching for options in expert dialog - Feature: Security settings available as options, no longer fixed constants - Feature: Sorting of headers can be configured by the user - Feature: Context menus for expert dialog - Don't save "port" and "folder" to config file (are set automatically by other options) - Bugfix: Respect "use_max_mail" for file protocol - Feature: Option "pref_allow_resize" for resizing preferences window - Bugfix: Respect "min_body_lines" for file protocol - Bugfixes: Displaying of mail body in popup - Bugfix: Prevent DoS attacks in socket closing function - Bugfix: Updating GUI when changing option via expert dialog - Feature: Default value for showing expert tab can be changed via option to configure - Feature: Warning message is shown before expert editing mode can be activated - Feature: Print whether expert tab will be shown at the end of configure - Updated gnubiff.texi file - Include an additional file to support FreeBSD 4 (thanks to Tim Bishop) - Bugfix: Handling of "expert_edit_options" option - Bugfix: Respect OPTFLG_CHANGE when getting option's value from gui Version 2.1.0 2004-12-22 11:20 * Nicolas Rougier - New & simpler interface - Support of the IDLE state for imap4 (no more polling) - Support of the FAM (File Alteration Monitor) (no more polling for file/folder protocols) - Better detection of mailbox format - Bugfix: IMAP4 idle state test to avoid checking twice - Bugfix: Popup was shown on exiting preferences - Put back credits - Updated French translations - Fix a bug with IMAP4 idle feature (not recognizing the BYE command) - Added a TODO file to keep track of features/bugs to be implemented/fixed - Bugfix: Testing of "\"text\" \"plain\"" in imap4 parsing was wrong (some servers answer using upper cases letter) - Modified credits apperance in the preferences panel (and remove the about menu from gnome applet popup menu) - Bugfix: socket was closed twice when lock was lost in IDLE state - Bugfix: modify the configure script to have errors if popt or fam libraries not present - Sorted the contributors list - Feature: When adding a mailbox and if one is selected, the new mailbox is copied from the selected one - Feature: If password is empty, gnubiff try to find by looking at other mailboxes and matching (address/username) - Updated THANKS file - Bugfix: display last received mail for each mailbox (up to popup_size) - Bugfix: Take popup_use_size_ into account - Bugfix: Use of the decoded charset for imap4 - Bugfix: Added a lock for the ui-authentification/ui-certificate access - Bugfix: Fix a problem with certificate (not taking the HAVE_LIBSSL flag into account) - Bugfix: Bad line fixed in apop. - Bugfix: lock for ui-authentification access was not used in imap4 - Bugfix: Newly created mailboxes were not created properly * Robert Sowada (adapted by Nicolas Rougier from v2.0.3 to v2.1.0) - Gnome version can determine itself if in standalone mode or panel mode - Removed "--gtk" option, added "--applet" option in debug mode instead - Added "--version" option to all versions of gnubiff - "--help" option handled by "poptPrintHelp" in all versions of gnubiff - Removed messages that are no longer necessary - Bugfix: Using in password entry - Bugfix: return value of main - Output of "--help" restructured - Update of man page (command line options, version, date) - Bugfix: Failure of select command (IMAP) - Bugfix: Failure of opening connection (IMAP) - Security Bugfix: DoS attacks by sending unterminated lines anticipated (if SSL is used, this was fixed for non-SSL connections in 2.0.2) - Bugfix: Handling network writing/reading errors - Bugfix/Feature: Support for international Mailbox names for IMAP - Security Bugfix: DoS attacks by sending a unterminated response to the SELECT, SEARCH, FETCH (IMAP) and TOP (POP3) commands anticipated - Bugfix: User set value for maximum number of mail to be collected is now respected (IMAP) - Bugfix: Fetching mails is no longer stopped if certain strings are in mail or mail header (IMAP) - Bugfix: First lines of email content are now displayed (IMAP) - Bugfix: Displaying mails that do not end with a newline (IMAP) - Feature: Only get first "text/plain" part of mail, not the whole mail; don't get the whole part if it is very long (IMAP) - Feature: Message if there is no "text/plain" part (IMAP) - Bugfix: Creating different tags for different commands (IMAP) * Robert Sowada - Updated german translation - Various small changes in GUI - Updated "text" "plain" fix of Nicolas to make it safe for future extensions - Get encoding and character set of "text" "plain" part (IMAP4) - Updated intltool utilities to version 0.32.1 - Ported local and distant mailbox detection code from 2.0.3 to 2.1.0 - Decoding of quotedprintable encoded mails (IMAP4) - Error message for mails in unknown enoding (IMAP4) - Bugfix: base64 decoding now rejects invalid encoded strings - New source files for decoding and converting - Separated q-encoding and quoted printable encoding - Number of lines (of mail body) to be read is now a constant - Bugfix: Setting file permissions of scripts in configure script (fixes bug #1083485) - Marked strings for translation (GNOME menu entries) - Bugfix: DoS attacks in IDLE command (IMAP4) - Bugfix: Hanging of local mailboxes - Ported saving to configuration file code from 2.0.2 to 2.1.0 - Ported mh protocol fixes from 2.0.2 to 2.1.0 - Ported maildir protocol fixes from 2.0.2 to 2.1.0 - Ported substituting of "%d" from 2.0.2 to 2.1.0 - Bugfix: Selecting "File or Folder" or "Autodetect" in properties dialog - Bugfix: Segfaults when all mails are read while popup is present - Bugfixes in local mailbox detection; local mailboxes are identified immediately - Feature: Use of relative paths allowed (when not using autodetection) Version 2.0.3 2004-11-30 08:49 * Roland Stigge: - Updated man page (section 1, "GTK+") * Robert Sowada: - Changed version to 2.0.3 - Various small changes and bugfixes - Updated german translation, updated po files - Gnome version can determine itself if in standalone mode or panel mode - Removed "--gtk" option, added "--applet" option in debug mode instead - Added "--version" option to all versions of gnubiff - "--help" option handled by "poptPrintHelp" in all versions of gnubiff - Removed messages that are no longer necessary - Bugfix: return value of main - Output of "--help" restructured - Code for saving the configuration file cleaned up - Bugfix: Autodetection of IMAP - Bugfix: Failure of select command (IMAP) - Bugfix: Failure of opening connection (IMAP) - Security Bugfix: DoS attacks by sending unterminated lines anticipated (if SSL is used, this was fixed for non-SSL connections in 2.0.2) - Bugfix: Handling network writing/reading errors - Bugfix/Feature: Support for international Mailbox names for IMAP - Security Bugfix: DoS attacks by sending a unterminated response to the SELECT, SEARCH, FETCH (IMAP) and TOP (POP3) commands anticipated - Bugfix: User set value for maximum number of mail to be collected is now respected (IMAP) - Bugfix: Fetching mails is no longer stopped if certain strings are in mail or mail header (IMAP) - Bugfix: First lines of email content are now displayed (IMAP) - Bugfix: Displaying mails that do not end with a newline (IMAP) - Feature: Only get first "text/plain" part of mail, not the whole mail; don't get the whole part if it is very long (IMAP) - Feature: Message if there is no "text/plain" part (IMAP) - Bugfix: Setting always status to MAILBOX_ERROR if an error occurs (POP3 & IMAP) - Bugfixes in displaying first lines of mails - Bugfix: Creating different tags for different commands (IMAP) - Update of man page (command line options, version, date) - Bugfix: Handling of text lines beginning with a dot (IMAP & POP3) - Bugfix: Deleting of mailboxes when detecting mailbox format - Bugfix: Updating when connection for mailbox detection fails - Bugfix: Using in password entry * Nicolas Rougier: - Updated french translations Version 2.0.2 2004-10-20 01:24 * Some cosmetic fixes * Bug fix in IMAP4 protocol * Bug fix in APOP+SSL protocol handling * Bug fix in seen mail handling being reset after error * Bug fix in image choosing for preferences panel * Bug fix when panel is vertically oriented * Bug fix in applet or biff font to be always bold * Bug fix when asking for password or certificate * Bug fix in apop.cc (debug message) * Mail count added in gtk applet window title * Nicolas Rougier - Some fixes for FreeBSD - Imap4 bug when copying from another mailbox (folder_ was set to "INBOX") * Roland Stigge: - updated po/{nl,de}.po - finally fixed g++-3.4 compile error (Debian bug #271288) * Robert Sowada: - Various small changes - Bugfix: User can no longer make config file invalid by using XML sensitive characters in strings - Bugfixes in setting file permissions - File permissions are only set when creating a new config file. So the user is able to change to less restrictive permissions if he/she wants to do this - Bugfix in detection of animation information (via filename) - Bugfixes in detection of local mailbox format - Bugfix in mh protocol - Bugfixes in handling of sound filename - Bugfixes in string handling - Bugfix in "new mail" and "no mail" tooltips - Security Bugfix: DoS attacks by sending unterminated lines anticipated Version 2.0.1 2004-09-03 12:10 * Small buf fix that prevented GTK+ version to be compiled Version 2.0.0 2004-09-03 05:17 * gnubiff now officially part of the GNU project * Complete redesign of interface inspired by MailNotification by Jean-Yves Lefort. * Automatic detection of mailbox format * New option to tell gnubiff to never send passwords in clear * Better handling of SSL certificate * Various small bugfixes * Security fix in possible buffer overflow (pop3.c) * Security fix in pop3 (infinite uidl list would block gnubiff and ultimately crashes it) * Bugfix in geometry handling (was not saved properly) * Bugfix in pop3 protocol to really get only most recent headers * Bugfix in apop protocol which was really broken * Bugfix in imap4 to handle server panic * Bugfix in utf8 translation * Added hidden files in gtk_file_chooser's Version 1.4.0 2004-06-23 03:49 * gnubiff now requires glib/gdk/gtk/libglade 2.4 * Use of file chooser instead of file selector * PNG simple animation support * Preview added when selecting images * Image/animation resizing with panel for GNOME version * Read mails are saved in configuration file * User can now choose text to be displayed when new mail and when no mail * Possibility to choose command to play sound * Possibility to choose popup background color (to make it flashy) * Possibility to hide image or/and text when no mail and when new mail * File protocol has been improved to speedup things * Security fix: table used for password encryption is now configurable using the --with-password-string making your .gnubiffrc dependent on your gnubiff executable (far more secure than previously but still very unsecure). * Configure script has been changed to auto-detect gnome * Bug fix for automatic check at startup * Bug fix in IMAP4 protocol with user/password/folder fields * Bug fix in maildir protocol with the static mtime field * Bug fix in file protocol with the static mtime field * Bug fix with mail read and popup preview * Bug fix with multi mailboxes and polltime * Bug fix in creating a default configuration file from void * Bug fix when no mailbox defined in confiration file * Bug fix with gethostbyname which is no thread safe on some platform * --enable-debug option added to configure Version 1.2.0 2004-05-03 00:42 * Real multi-mailbox support * Mouse button clicks are now different * Bug fix in displaying headers * GTK version got now a popup menu * New possibility of marking "mail as seen" Version 1.0.10 2004-04-08 01:40 * gnubiff becomes multithreaded (so it won't hang while checking for mail) * Bug fix in playing soundfile with space in name * Spam tagged email are not displayed (X-Spam-Flag: YES) * Fix a bug when no connection or when server is unreachable * Added a "max collected header" option. * Various translation fixes Version 1.0.9 2004-02-16 05:05 * Multi mailbox with GNOME * Small typo fixes * Rewrite of decode64 function * Fix a bug for handling bad formatted email Version 1.0.8 * Fix in password saving * Fix in imap4 protocol Version 1.0.7 * Fix a bug in playing sound in setup * Fix a bug with forbidden characters in password * Fix a bug with Pop protocols and null password Version 1.0.6 * Fix a bug with saved options for popup geometry * Added a configure option to save password within configuration file * Fixed a bug in imap4 protocol (prevents gnubiff from stalling) Version 1.0.5 * Fix a bug when consulting email and closing popup window * Fix a bug with the about window (GNOME version) * Fix a bug in mail file protocol * Added a --gtk version to the gnome version Version 1.0.4 * Fix a bug when consulting environment variables * Take the UW-IMAP mailbox state mail into account * Fix a bug in maildir Version 1.0.3 * Fix mailfile protocol Version 1.0.2 * Use of a certificate for SSL authentication * Window placement can now be done by window manager Version 1.0.1 * Complete rewrite of gbiff2 that becomes officially gnubiff and to be part ot the GNU project * SSL support added - Achim Settelmeier * Possibility to read mail (first 10 lines) * All protocols fixed (hopefully) ------------------------------------------------------- gbiff2 package - development stopped ------------------------------------------------------- Version 0.4.0 * Hide 'Quit' button in configuration for GNOME version * Display title and read mail now also affect biff and applet * Fix IMAP4 protocol again (hope it'll be the last) * gbiff2 now support animations ! Version 0.3.0 * Add man page * Add German translation * Fix French translation * More cleanup with 'make distclean' * Modified configure.ac script * Bugfix in IMAP4 protocol * Bugfix to handle cases when mail number > MAX_HEADERS (100) Version 0.2.0 * Fix bug with image filenames * Fix bug in popup delete_event_handler * Fix window positionning * Add a 'smart update' buttons for geometry automatic update * Remove schemas file from GNOME version Version 0.1.0 * Alpha release * GNOME 2.0 support * GTK 2.0 support * Use of a config file ------------------------------------------------------- gbiff package - development stopped ------------------------------------------------------- Version 3.2 * Configure change to include orbit headers properly Version 3.1 * Popup window has decorations back * Added support for apop protocol - Earl A. Killian * Bug fix in GTK style management - Philippe Berger * Bug fix in IMAP4 (yes, again !) * Bug fix with missing logo.xpm file in RPM distributions * Bug fix in mail application saving * Bug fix in pixmap handling * Bug fix in window management Version 3.0 * Bug corrected in RPM packages - Dennis Bjorklund * Major interface change - Josh Parsons * Bug fix in window positioning * gbiff now only displays new mails (use of 'Status:' field) * You can now launch a mail application by a double-click * Bug fix in buffer overflow in IMAP4 protocol Version 2.6 * Bug corrected in MH protocol when only one mail * File last access time fixed in FILE protocol (mutt) * Dynamic ports for POP3 and IMAP4 protocols (omnibiff, ssh) * Suspend button for stopping automatic check * --user option - Craig B. Agricola * Memory leaks fixed - Craig B. Agricola Version 2.5 * Added support for imap4 - Cai Yu * Minor bugfixes - Cai Yu * Web page documentation Greg Fenton * Base64 decoding support -> parse_base64 by Michel Leunen * Minor bugfix in file descriptors handling * Internationalization: French added Version 2.4a * Major bugfix in mh-style maildirs * Minor bugfix in pop3 protocol - Blaise Tarr * Minor bugfix in font selection - Blaise Tarr * Minor bugfix in memory leaks Version 2.4 * Added Support for mh-style maildirs * Minor bugfix in qmail-style * RPM packaging - Richard Torkar Version 2.3 * Gnome session management - Neil Muller * --disable-gnome flag in configure script, allows to use gbiff without gnome * Minor bug fixes Version 2.2 * Bug fixes - Neil Muller * Added Support for qmail-style maildirs - Neil Muller * Bug fixes for buffer overflow * Added support for gnome panel size and orientation Version 2.1 * Added support fo POP3 protocol Version 2.0 * Gnome dockable version Version 1.0 * Fix remaining bugs Version 0.4 * New handling of mouse button events: - keeping mouse button pressed makes headers to remain popped. - keeping mouse in popup makes headers to remain popped. * Max length option for 'From' and 'Subject' fields * New field (number) in popup window * Possibility of sorting headers by number, sender, subject or date by clicking titles. Version 0.3 * popup_geometry bug fixed * you can now play .au or .wav sound files when new mail (requires a play program) * you can now choose the main window background color Version 0.2 * Display date of messages * Possibility of choosing what has to be displayed in popup window * Presentation in list format * Several bug fixes Version 0.1 * Check for mail and popup a window with sender and subject information * Click on main window to force mail check. * When headers are popped, click on them or in main window to hide them. * Display unread mail number at any time ------------------------------------------------------- Copying information: Copyright (C) 2000-2008 Nicolas Rougier and 2004-2008 Robert Sowada . Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. gnubiff-2.2.16/AUTHORS0000644000175000017500000000021312474422124011211 00000000000000Authors of gnubiff. See also the files THANKS and ChangeLog. Nicolas Rougier designed and implemented gnubiff. gnubiff-2.2.16/config/0000775000175000017500000000000012474430471011500 500000000000000gnubiff-2.2.16/config/gnubiff.spec.in0000644000175000017500000000453712474422124014324 00000000000000Summary: Mail notification program for GNOME 2 Name: gnubiff Version: @VERSION@ Release: 1 Copyright: GPL Group: X11/Utilities Source: %{name}-%{version}.tar.bz2 URL: http://gnubiff.sourceforge.net Prefix: /usr Buildroot: %{_tmppath}/%{name}-root Packager: Nicolas Rougier BuildRequires: libglade2-devel, libglade2 >= 2.3, gtk2-devel >= 2.4, libfam-devel # description take from the website (see URL) %description gnubiff is a mail notification program that checks for mail, displays headers when new mail has arrived and allow to read first lines of new mails. It relies on the GNOME and GTK libraries but can be compiled and used with or without GNOME support. Supported protocols are pop3, apop, imap4, mh, qmail and mailfile. Furthermore, gnubiff is fully configurable with a lot of options like polltime, poptime, sounds, mail reader, etc. %clean case "$RPM_BUILD_ROOT" in *-root) rm -rf $RPM_BUILD_ROOT ;; esac %prep %setup CPPFLAGS="-I/usr/kerberos/include" \ ./configure --prefix=%{prefix} --with-password %build make %install case "$RPM_BUILD_ROOT" in *-root) rm -rf $RPM_BUILD_ROOT ;; esac make install prefix=$RPM_BUILD_ROOT%{prefix} %files %defattr(-,root,root) %doc ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS README THANKS %{prefix}/share/gnubiff %{prefix}/share/locale/*/LC_MESSAGES/gnubiff.mo %{prefix}/share/sounds/gnubiff/ %{prefix}/share/pixmaps/gnubiff_icon.png %{prefix}/bin/gnubiff %doc %{prefix}/info/gnubiff* %doc %{prefix}/man/man?/gnubiff* %changelog * Mon Apr 4 2005 sowada - RPM specfile for version 2.1.4 (version is now inserted automatically) * Sun Mar 26 2005 sowada - RPM specfile for version 2.1.3 * Sun Feb 27 2005 sowada - RPM specfile for version 2.1.2 * Fri Dec 24 2004 sowada - RPM specfile for version 2.1.1 * Sat June 18 2004 rougier - RPM specfile for version 1.4.0 * Sun May 2 2004 rougier - RPM specfile for version 1.2.0 * Wed March 30 2004 rougier - RPM specfile for version 1.0.10 * Wed Jan 07 2004 rougier - RPM specfile for version 1.0.9 * Wed Nov 20 2003 rougier - RPM specfile for version 1.0.6 * Wed Sep 03 2003 Settel - Initial RPM specfile for version 1.0.1 gnubiff-2.2.16/config/install-sh0000755000175000017500000002244112474422124013421 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-04-01.17 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 -d DIRECTORIES... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. test -n "$dir_arg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" || lasterr=$? # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; } fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: gnubiff-2.2.16/config/intltool-update.in0000644000175000017500000007442612474422124015103 00000000000000#!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Updater # # Copyright (C) 2000-2003 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You 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 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Maciej Stachowiak # Darin Adler ## Release information my $PROGRAM = "intltool-update"; my $VERSION = "0.37.0"; my $PACKAGE = "intltool"; ## Loaded modules use strict; use Getopt::Long; use Cwd; use File::Copy; use File::Find; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $DIST_ARG = 0; my $POT_ARG = 0; my $HEADERS_ARG = 0; my $MAINTAIN_ARG = 0; my $REPORT_ARG = 0; my $VERBOSE = 0; my $GETTEXT_PACKAGE = ""; my $OUTPUT_FILE = ""; my @languages; my %varhash = (); my %po_files_by_lang = (); # Regular expressions to categorize file types. # FIXME: Please check if the following is correct my $xml_support = "xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required) "ui|". # Bonobo specific - User Interface desc. files "lang|". # ? "glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required) "scm(?:\\.in)*|". # ? (Note: .in is not required) "oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files "etspec|". # ? "server(?:\\.in)+|". # Bonobo specific "sheet(?:\\.in)+|". # ? "schemas(?:\\.in)+|". # GConf specific "pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer. "kbd(?:\\.in)+|". # GOK specific. "policy(?:\\.in)+"; # PolicyKit files my $ini_support = "icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec "desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec "caves(?:\\.in)+|". # GNOME Games specific "directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec "soundlist(?:\\.in)+|". # GNOME specific "keys(?:\\.in)+|". # GNOME Mime database specific "theme(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec "service(?:\\.in)+"; # DBus specific my $buildin_gettext_support = "c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py"; ## Always flush buffer when printing $| = 1; ## Sometimes the source tree will be rooted somewhere else. my $SRCDIR = $ENV{"srcdir"} || "."; my $POTFILES_in; $POTFILES_in = "<$SRCDIR/POTFILES.in"; my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "dist|d" => \$DIST_ARG, "pot|p" => \$POT_ARG, "headers|s" => \$HEADERS_ARG, "maintain|m" => \$MAINTAIN_ARG, "report|r" => \$REPORT_ARG, "verbose|x" => \$VERBOSE, "gettext-package|g=s" => \$GETTEXT_PACKAGE, "output-file|o=s" => \$OUTPUT_FILE, ) or &Console_WriteError_InvalidOption; &Console_Write_IntltoolHelp if $HELP_ARG; &Console_Write_IntltoolVersion if $VERSION_ARG; my $arg_count = ($DIST_ARG > 0) + ($POT_ARG > 0) + ($HEADERS_ARG > 0) + ($MAINTAIN_ARG > 0) + ($REPORT_ARG > 0); &Console_Write_IntltoolHelp if $arg_count > 1; my $PKGNAME = FindPackageName (); # --version and --help don't require a module name my $MODULE = $GETTEXT_PACKAGE || $PKGNAME || "unknown"; if ($POT_ARG) { &GenerateHeaders; &GeneratePOTemplate; } elsif ($HEADERS_ARG) { &GenerateHeaders; } elsif ($MAINTAIN_ARG) { &FindLeftoutFiles; } elsif ($REPORT_ARG) { &GenerateHeaders; &GeneratePOTemplate; &Console_Write_CoverageReport; } elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/) { my $lang = $ARGV[0]; ## Report error if the language file supplied ## to the command line is non-existent &Console_WriteError_NotExisting("$SRCDIR/$lang.po") if ! -s "$SRCDIR/$lang.po"; if (!$DIST_ARG) { print "Working, please wait..." if $VERBOSE; &GenerateHeaders; &GeneratePOTemplate; } &POFile_Update ($lang, $OUTPUT_FILE); &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE); } else { &Console_Write_IntltoolHelp; } exit; ######### sub Console_Write_IntltoolVersion { print <<_EOF_; ${PROGRAM} (${PACKAGE}) $VERSION Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler. Copyright (C) 2000-2003 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. _EOF_ exit; } sub Console_Write_IntltoolHelp { print <<_EOF_; Usage: ${PROGRAM} [OPTION]... LANGCODE Updates PO template files and merge them with the translations. Mode of operation (only one is allowed): -p, --pot generate the PO template only -s, --headers generate the header files in POTFILES.in -m, --maintain search for left out files from POTFILES.in -r, --report display a status report for the module -d, --dist merge LANGCODE.po with existing PO template Extra options: -g, --gettext-package=NAME override PO template name, useful with --pot -o, --output-file=FILE write merged translation to FILE -x, --verbose display lots of feedback --help display this help and exit --version output version information and exit Examples of use: ${PROGRAM} --pot just create a new PO template ${PROGRAM} xy create new PO template and merge xy.po with it Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") or send email to . _EOF_ exit; } sub echo_n { my $str = shift; my $ret = `echo "$str"`; $ret =~ s/\n$//; # do we need the "s" flag? return $ret; } sub POFile_DetermineType ($) { my $type = $_; my $gettext_type; my $xml_regex = "(?:" . $xml_support . ")"; my $ini_regex = "(?:" . $ini_support . ")"; my $buildin_regex = "(?:" . $buildin_gettext_support . ")"; if ($type =~ /\[type: gettext\/([^\]].*)]/) { $gettext_type=$1; } elsif ($type =~ /schemas(\.in)+$/) { $gettext_type="schemas"; } elsif ($type =~ /glade2?(\.in)*$/) { $gettext_type="glade"; } elsif ($type =~ /scm(\.in)*$/) { $gettext_type="scheme"; } elsif ($type =~ /keys(\.in)+$/) { $gettext_type="keys"; } # bucket types elsif ($type =~ /$xml_regex$/) { $gettext_type="xml"; } elsif ($type =~ /$ini_regex$/) { $gettext_type="ini"; } elsif ($type =~ /$buildin_regex$/) { $gettext_type="buildin"; } else { $gettext_type="unknown"; } return "gettext\/$gettext_type"; } sub TextFile_DetermineEncoding ($) { my $gettext_code="ASCII"; # All files are ASCII by default my $filetype=`file $_ | cut -d ' ' -f 2`; if ($? eq "0") { if ($filetype =~ /^(ISO|UTF)/) { chomp ($gettext_code = $filetype); } elsif ($filetype =~ /^XML/) { $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8 } } return $gettext_code; } sub isNotValidMissing { my ($file) = @_; return if $file =~ /^\{arch\}\/.*$/; return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/; } sub FindLeftoutFiles { my (@buf_i18n_plain, @buf_i18n_xml, @buf_i18n_xml_unmarked, @buf_i18n_ini, @buf_potfiles, @buf_potfiles_ignore, @buf_allfiles, @buf_allfiles_sorted, @buf_potfiles_sorted, @buf_potfiles_ignore_sorted ); ## Search and find all translatable files find sub { push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/; push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/; push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/; push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/; }, ".."; find sub { push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/; push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/; push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/; push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/; }, "$SRCDIR/.." if "$SRCDIR" ne "."; open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n"; @buf_potfiles = grep !/^(#|\s*$)/, ; close POTFILES; foreach (@buf_potfiles) { s/^\[.*]\s*//; } print "Searching for missing translatable files...\n" if $VERBOSE; ## Check if we should ignore some found files, when ## comparing with POTFILES.in foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") { (-s "$SRCDIR/$ignore") or next; if ("$ignore" eq "POTFILES.ignore") { print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n". "content of this file to POTFILES.skip.\n"; } print "Found $ignore: Ignoring files...\n" if $VERBOSE; open FILE, "<$SRCDIR/$ignore" or die "ERROR: Failed to open $SRCDIR/$ignore!\n"; while () { push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/; } close FILE; @buf_potfiles_ignore_sorted = sort (@buf_potfiles_ignore); } foreach my $file (@buf_i18n_plain) { my $in_comment = 0; my $in_macro = 0; open FILE, "<$file"; while () { # Handle continued multi-line comment. if ($in_comment) { next unless s-.*\*/--; $in_comment = 0; } # Handle continued macro. if ($in_macro) { $in_macro = 0 unless /\\$/; next; } # Handle start of macro (or any preprocessor directive). if (/^\s*\#/) { $in_macro = 1 if /^([^\\]|\\.)*\\$/; next; } # Handle comments and quoted text. while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy { my $match = $1; if ($match eq "/*") { if (!s-/\*.*?\*/--) { s-/\*.*--; $in_comment = 1; } } elsif ($match eq "//") { s-//.*--; } else # ' or " { if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) { warn "mismatched quotes at line $. in $file\n"; s-$match.*--; } } } if (/\w\.GetString *\(QUOTEDTEXT/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { ## Remove the first 3 chars and add newline push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } ## C_ N_ Q_ and _ are the macros defined in gi8n.h if (/[CNQ]?_ *\(QUOTEDTEXT/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { ## Remove the first 3 chars and add newline push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } } close FILE; } foreach my $file (@buf_i18n_xml) { open FILE, "<$file"; while () { # FIXME: share the pattern matching code with intltool-extract if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } } close FILE; } foreach my $file (@buf_i18n_ini) { open FILE, "<$file"; while () { if (/_(.*)=/) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } last; } } close FILE; } foreach my $file (@buf_i18n_xml_unmarked) { if (defined isNotValidMissing (unpack("x3 A*", $file))) { push @buf_allfiles, unpack("x3 A*", $file) . "\n"; } } @buf_allfiles_sorted = sort (@buf_allfiles); @buf_potfiles_sorted = sort (@buf_potfiles); my %in2; foreach (@buf_potfiles_sorted) { s#^$SRCDIR/../##; s#^$SRCDIR/##; $in2{$_} = 1; } foreach (@buf_potfiles_ignore_sorted) { s#^$SRCDIR/../##; s#^$SRCDIR/##; $in2{$_} = 1; } my @result; foreach (@buf_allfiles_sorted) { my $dummy = $_; my $srcdir = $SRCDIR; $srcdir =~ s#^../##; $dummy =~ s#^$srcdir/../##; $dummy =~ s#^$srcdir/##; $dummy =~ s#_build/##; if (!exists($in2{$dummy})) { push @result, $dummy } } my @buf_potfiles_notexist; foreach (@buf_potfiles_sorted) { chomp (my $dummy = $_); if ("$dummy" ne "" and !(-f "$SRCDIR/../$dummy" or -f "../$dummy")) { push @buf_potfiles_notexist, $_; } } ## Save file with information about the files missing ## if any, and give information about this procedure. if (@result + @buf_potfiles_notexist > 0) { if (@result) { print "\n" if $VERBOSE; unlink "missing"; open OUT, ">missing"; print OUT @result; close OUT; warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n". "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n"; print STDERR @result, "\n"; warn "If some of these files are left out on purpose then please add them to\n". "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n". "of left out files has been written in the current directory.\n"; } if (@buf_potfiles_notexist) { unlink "notexist"; open OUT, ">notexist"; print OUT @buf_potfiles_notexist; close OUT; warn "\n" if ($VERBOSE or @result); warn "\e[1mThe following files do not exist anymore:\e[0m\n\n"; warn @buf_potfiles_notexist, "\n"; warn "Please remove them from POTFILES.in. A file \e[1m'notexist'\e[0m\n". "containing this list of absent files has been written in the current directory.\n"; } } ## If there is nothing to complain about, notify the user else { print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE; } } sub Console_WriteError_InvalidOption { ## Handle invalid arguments print STDERR "Try `${PROGRAM} --help' for more information.\n"; exit 1; } sub isProgramInPath { my ($file) = @_; # If either a file exists, or when run it returns 0 exit status return 1 if ((-x $file) or (system("$file --version >$devnull") == 0)); return 0; } sub isGNUGettextTool { my ($file) = @_; # Check that we are using GNU gettext tools if (isProgramInPath ($file)) { my $version = `$file --version`; return 1 if ($version =~ m/.*\(GNU .*\).*/); } return 0; } sub GenerateHeaders { my $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} || "intltool-extract"; ## Generate the .h header files, so we can allow glade and ## xml translation support if (! isProgramInPath ("$EXTRACT")) { print STDERR "\n *** The intltool-extract script wasn't found!" ."\n *** Without it, intltool-update can not generate files.\n"; exit; } else { open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n"; while () { chomp; next if /^\[\s*encoding/; ## Find xml files in POTFILES.in and generate the ## files with help from the extract script my $gettext_type= &POFile_DetermineType ($1); if (/\.($xml_support|$ini_support)$/ || /^\[/) { s/^\[[^\[].*]\s*//; my $filename = "../$_"; if ($VERBOSE) { system ($EXTRACT, "--update", "--srcdir=$SRCDIR", "--type=$gettext_type", $filename); } else { system ($EXTRACT, "--update", "--type=$gettext_type", "--srcdir=$SRCDIR", "--quiet", $filename); } } } close FILE; } } # # Generate .pot file from POTFILES.in # sub GeneratePOTemplate { my $XGETTEXT = $ENV{"XGETTEXT"} || "xgettext"; my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || ''; chomp $XGETTEXT; if (! isGNUGettextTool ("$XGETTEXT")) { print STDERR " *** GNU xgettext is not found on this system!\n". " *** Without it, intltool-update can not extract strings.\n"; exit; } print "Building $MODULE.pot...\n" if $VERBOSE; open INFILE, $POTFILES_in; unlink "POTFILES.in.temp"; open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing"); my $gettext_support_nonascii = 0; # checks for GNU gettext >= 0.12 my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`; if ($? == 0) { $gettext_support_nonascii = 1; } else { # urge everybody to upgrade gettext print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n". " strings. That means you should install a version of gettext\n". " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n". " or have to let non-ASCII strings untranslated. (If there is any)\n"; } my $encoding = "ASCII"; my $forced_gettext_code; my @temp_headers; my $encoding_problem_is_reported = 0; while () { next if (/^#/ or /^\s*$/); chomp; my $gettext_code; if (/^\[\s*encoding:\s*(.*)\s*\]/) { $forced_gettext_code=$1; } elsif (/\.($xml_support|$ini_support)$/ || /^\[/) { s/^\[.*]\s*//; print OUTFILE "../$_.h\n"; push @temp_headers, "../$_.h"; $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code); } else { print OUTFILE "$SRCDIR/../$_\n"; $gettext_code = &TextFile_DetermineEncoding ("$SRCDIR/../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code); } next if (! $gettext_support_nonascii); if (defined $forced_gettext_code) { $encoding=$forced_gettext_code; } elsif (defined $gettext_code and "$encoding" ne "$gettext_code") { if ($encoding eq "ASCII") { $encoding=$gettext_code; } elsif ($gettext_code ne "ASCII") { # Only report once because the message is quite long if (! $encoding_problem_is_reported) { print STDERR "WARNING: You should use the same file encoding for all your project files,\n". " but $PROGRAM thinks that most of the source files are in\n". " $encoding encoding, while \"$_\" is (likely) in\n". " $gettext_code encoding. If you are sure that all translatable strings\n". " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n". " line to POTFILES.in:\n\n". " [encoding: UTF-8]\n\n". " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n". "(such warning message will only be reported once.)\n"; $encoding_problem_is_reported = 1; } } } } close OUTFILE; close INFILE; unlink "$MODULE.pot"; my @xgettext_argument=("$XGETTEXT", "--add-comments", "--directory\=.", "--default-domain\=$MODULE", "--flag\=g_strdup_printf:1:c-format", "--flag\=g_string_printf:2:c-format", "--flag\=g_string_append_printf:2:c-format", "--flag\=g_error_new:3:c-format", "--flag\=g_set_error:4:c-format", "--flag\=g_markup_printf_escaped:1:c-format", "--flag\=g_log:3:c-format", "--flag\=g_print:1:c-format", "--flag\=g_printerr:1:c-format", "--flag\=g_printf:1:c-format", "--flag\=g_fprintf:2:c-format", "--flag\=g_sprintf:2:c-format", "--flag\=g_snprintf:3:c-format", "--flag\=g_scanner_error:2:c-format", "--flag\=g_scanner_warn:2:c-format", "--output\=$MODULE\.pot", "--files-from\=\.\/POTFILES\.in\.temp"); my $XGETTEXT_KEYWORDS = &FindPOTKeywords; push @xgettext_argument, $XGETTEXT_KEYWORDS; my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress; push @xgettext_argument, "--msgid-bugs-address\=\"$MSGID_BUGS_ADDRESS\"" if $MSGID_BUGS_ADDRESS; push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii); push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS; my $xgettext_command = join ' ', @xgettext_argument; # intercept xgettext error message print "Running $xgettext_command\n" if $VERBOSE; my $xgettext_error_msg = `$xgettext_command 2>\&1`; my $command_failed = $?; unlink "POTFILES.in.temp"; print "Removing generated header (.h) files..." if $VERBOSE; unlink foreach (@temp_headers); print "done.\n" if $VERBOSE; if (! $command_failed) { if (! -e "$MODULE.pot") { print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE; } else { print "Wrote $MODULE.pot\n" if $VERBOSE; } } else { if ($xgettext_error_msg =~ /--from-code/) { # replace non-ASCII error message with a more useful one. print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n". " string marked for translation. Please make sure that all strings marked\n". " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n". " following line to POTFILES.in and rerun $PROGRAM:\n\n". " [encoding: UTF-8]\n\n"; } else { print STDERR "$xgettext_error_msg"; if (-e "$MODULE.pot") { # is this possible? print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n". " Please consult error message above if there is any.\n"; } else { print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n". " error message above if there is any.\n"; } } exit (1); } } sub POFile_Update { -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n"; my $MSGMERGE = $ENV{"MSGMERGE"} || "msgmerge"; my ($lang, $outfile) = @_; if (! isGNUGettextTool ("$MSGMERGE")) { print STDERR " *** GNU msgmerge is not found on this system!\n". " *** Without it, intltool-update can not extract strings.\n"; exit; } print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE; my $infile = "$SRCDIR/$lang.po"; $outfile = "$SRCDIR/$lang.po" if ($outfile eq ""); # I think msgmerge won't overwrite old file if merge is not successful system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot"); } sub Console_WriteError_NotExisting { my ($file) = @_; ## Report error if supplied language file is non-existing print STDERR "$PROGRAM: $file does not exist!\n"; print STDERR "Try '$PROGRAM --help' for more information.\n"; exit; } sub GatherPOFiles { my @po_files = glob ("./*.po"); @languages = map (&POFile_GetLanguage, @po_files); foreach my $lang (@languages) { $po_files_by_lang{$lang} = shift (@po_files); } } sub POFile_GetLanguage ($) { s/^(.*\/)?(.+)\.po$/$2/; return $_; } sub Console_Write_TranslationStatus { my ($lang, $output_file) = @_; my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt"; if (! isGNUGettextTool ("$MSGFMT")) { print STDERR " *** GNU msgfmt is not found on this system!\n". " *** Without it, intltool-update can not extract strings.\n"; exit; } $output_file = "$SRCDIR/$lang.po" if ($output_file eq ""); system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file); } sub Console_Write_CoverageReport { my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt"; if (! isGNUGettextTool ("$MSGFMT")) { print STDERR " *** GNU msgfmt is not found on this system!\n". " *** Without it, intltool-update can not extract strings.\n"; exit; } &GatherPOFiles; foreach my $lang (@languages) { print STDERR "$lang: "; &POFile_Update ($lang, ""); } print STDERR "\n\n * Current translation support in $MODULE \n\n"; foreach my $lang (@languages) { print STDERR "$lang: "; system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po"); } } sub SubstituteVariable { my ($str) = @_; # always need to rewind file whenever it has been accessed seek (CONF, 0, 0); # cache each variable. varhash is global to we can add # variables elsewhere. while () { if (/^(\w+)=(.*)$/) { ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/; } } if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) { my $rest = $3; my $untouched = $1; my $sub = ""; # Ignore recursive definitions of variables $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/; return SubstituteVariable ("$untouched$sub$rest"); } # We're using Perl backticks ` and "echo -n" here in order to # expand any shell escapes (such as backticks themselves) in every variable return echo_n ($str); } sub CONF_Handle_Open { my $base_dirname = getcwd(); $base_dirname =~ s@.*/@@; my ($conf_in, $src_dir); if ($base_dirname =~ /^po(-.+)?$/) { if (-f "Makevars") { my $makefile_source; local (*IN); open (IN, ") { if (/^top_builddir[ \t]*=/) { $src_dir = $_; $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; chomp $src_dir; if (-f "$src_dir" . "/configure.ac") { $conf_in = "$src_dir" . "/configure.ac" . "\n"; } else { $conf_in = "$src_dir" . "/configure.in" . "\n"; } last; } } close IN; $conf_in || die "Cannot find top_builddir in Makevars."; } elsif (-f "$SRCDIR/../configure.ac") { $conf_in = "$SRCDIR/../configure.ac"; } elsif (-f "$SRCDIR/../configure.in") { $conf_in = "$SRCDIR/../configure.in"; } else { my $makefile_source; local (*IN); open (IN, ") { if (/^top_srcdir[ \t]*=/) { $src_dir = $_; $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; chomp $src_dir; $conf_in = "$src_dir" . "/configure.in" . "\n"; last; } } close IN; $conf_in || die "Cannot find top_srcdir in Makefile."; } open (CONF, "<$conf_in"); } else { print STDERR "$PROGRAM: Unable to proceed.\n" . "Make sure to run this script inside the po directory.\n"; exit; } } sub FindPackageName { my $version; my $domain = &FindMakevarsDomain; my $name = $domain || "untitled"; &CONF_Handle_Open; my $conf_source; { local (*IN); open (IN, "<&CONF") || return $name; seek (IN, 0, 0); local $/; # slurp mode $conf_source = ; close IN; } # priority for getting package name: # 1. GETTEXT_PACKAGE # 2. first argument of AC_INIT (with >= 2 arguments) # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument) # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m # the \s makes this not work, why? if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m) { ($name, $version) = ($1, $2); $name =~ s/[\[\]\s]//g; $version =~ s/[\[\]\s]//g; $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); } if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) { ($name, $version) = ($1, $2); $name =~ s/[\[\]\s]//g; $version =~ s/[\[\]\s]//g; $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); } # \s makes this not work, why? $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m; # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables. $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g; $name = $domain if $domain; $name = SubstituteVariable ($name); $name =~ s/^["'](.*)["']$/$1/; return $name if $name; } sub FindPOTKeywords { my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_"; my $varname = "XGETTEXT_OPTIONS"; my $make_source; { local (*IN); open (IN, "; close IN; } # unwrap lines split with a trailing \ $make_source =~ s/\\ $ \n/ /mxg; $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m; return $keywords; } sub FindMakevarsDomain { my $domain = ""; my $makevars_source; { local (*IN); open (IN, "; close IN; } $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m; $domain =~ s/^\s+//; $domain =~ s/\s+$//; return $domain; } sub FindMakevarsBugAddress { my $address = ""; my $makevars_source; { local (*IN); open (IN, "; close IN; } $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m; $address =~ s/^\s+//; $address =~ s/\s+$//; return $address; } gnubiff-2.2.16/config/config.h.in0000644000175000017500000001250012474430471013437 00000000000000/* config/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define to 1 to enable debugging code. */ #undef DEBUG /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 to disable showing expert tab as default. */ #undef EXPERT_SHOW_NO_TAB /* The prefix for our gettext translation domains. */ #undef GETTEXT_PACKAGE /* Define to 1 if AES encryption is available */ #undef HAVE_AES /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have crypto base functions */ #undef HAVE_CRYPTO /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_FAM_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* libfam */ #undef HAVE_LIBFAM /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the `popt' library (-lpopt). */ #undef HAVE_LIBPOPT /* Define to 1 if you have the `ssl' library (-lssl). */ #undef HAVE_LIBSSL /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_REGEX_H /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* 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 `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* 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 `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_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 1 if you have the `utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ #undef HAVE_UTIME_NULL /* Is a CVS version being used? */ #undef IS_CVS_VERSION /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Name of package */ #undef PACKAGE /* 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 /* */ #undef PASSWORD_STRING /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* */ #undef USE_GNOME /* */ #undef USE_PASSWORD /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc gnubiff-2.2.16/config/intltool-extract.in0000644000175000017500000005565012474422124015271 00000000000000#!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Extractor # # Copyright (C) 2000-2001, 2003 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You 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 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Darin Adler # ## Release information my $PROGRAM = "intltool-extract"; my $PACKAGE = "intltool"; my $VERSION = "0.37.0"; ## Loaded modules use strict; use File::Basename; use Getopt::Long; ## Scalars used by the option stuff my $TYPE_ARG = "0"; my $LOCAL_ARG = "0"; my $HELP_ARG = "0"; my $VERSION_ARG = "0"; my $UPDATE_ARG = "0"; my $QUIET_ARG = "0"; my $SRCDIR_ARG = "."; my $FILE; my $OUTFILE; my $gettext_type = ""; my $input; my %messages = (); my %loc = (); my %count = (); my %comments = (); my $strcount = 0; my $XMLCOMMENT = ""; ## Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; ## Always print first $| = 1; ## Handle options GetOptions ( "type=s" => \$TYPE_ARG, "local|l" => \$LOCAL_ARG, "help|h" => \$HELP_ARG, "version|v" => \$VERSION_ARG, "update" => \$UPDATE_ARG, "quiet|q" => \$QUIET_ARG, "srcdir=s" => \$SRCDIR_ARG, ) or &error; &split_on_argument; ## Check for options. ## This section will check for the different options. sub split_on_argument { if ($VERSION_ARG) { &version; } elsif ($HELP_ARG) { &help; } elsif ($LOCAL_ARG) { &place_local; &extract; } elsif ($UPDATE_ARG) { &place_normal; &extract; } elsif (@ARGV > 0) { &place_normal; &message; &extract; } else { &help; } } sub place_normal { $FILE = $ARGV[0]; $OUTFILE = "$FILE.h"; my $dirname = dirname ($OUTFILE); if (! -d "$dirname" && $dirname ne "") { system ("mkdir -p $dirname"); } } sub place_local { $FILE = $ARGV[0]; $OUTFILE = fileparse($FILE, ()); if (!-e "tmp/") { system("mkdir tmp/"); } $OUTFILE = "./tmp/$OUTFILE.h" } sub determine_type { if ($TYPE_ARG =~ /^gettext\/(.*)/) { $gettext_type=$1 } } ## Sub for printing release information sub version{ print <<_EOF_; ${PROGRAM} (${PACKAGE}) $VERSION Copyright (C) 2000, 2003 Free Software Foundation, Inc. Written by Kenneth Christiansen, 2000. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. _EOF_ exit; } ## Sub for printing usage information sub help { print <<_EOF_; Usage: ${PROGRAM} [OPTION]... [FILENAME] Generates a header file from an XML source file. It grabs all strings between <_translatable_node> and its end tag in XML files. Read manpage (man ${PROGRAM}) for more info. --type=TYPE Specify the file type of FILENAME. Currently supports: "gettext/glade", "gettext/ini", "gettext/keys" "gettext/rfc822deb", "gettext/schemas", "gettext/scheme", "gettext/xml", "gettext/quoted", "gettext/quotedxml" -l, --local Writes output into current working directory (conflicts with --update) --update Writes output into the same directory the source file reside (conflicts with --local) --srcdir Root of the source tree -v, --version Output version information and exit -h, --help Display this help and exit -q, --quiet Quiet mode Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") or send email to . _EOF_ exit; } ## Sub for printing error messages sub error{ print STDERR "Try `${PROGRAM} --help' for more information.\n"; exit; } sub message { print "Generating C format header file for translation.\n" unless $QUIET_ARG; } sub extract { &determine_type; &convert; open OUT, ">$OUTFILE"; binmode (OUT) if $^O eq 'MSWin32'; &msg_write; close OUT; print "Wrote $OUTFILE\n" unless $QUIET_ARG; } sub convert { ## Reading the file { local (*IN); local $/; #slurp mode open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!"; $input = ; } &type_ini if $gettext_type eq "ini"; &type_keys if $gettext_type eq "keys"; &type_xml if $gettext_type eq "xml"; &type_glade if $gettext_type eq "glade"; &type_scheme if $gettext_type eq "scheme"; &type_schemas if $gettext_type eq "schemas"; &type_rfc822deb if $gettext_type eq "rfc822deb"; &type_quoted if $gettext_type eq "quoted"; &type_quotedxml if $gettext_type eq "quotedxml"; } sub entity_decode_minimal { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; return $_; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/<//g; s/&/&/g; return $_; } sub escape_char { return '\"' if $_ eq '"'; return '\n' if $_ eq "\n"; return '\\\\' if $_ eq '\\'; return $_; } sub escape { my ($string) = @_; return join "", map &escape_char, split //, $string; } sub type_ini { ### For generic translatable desktop files ### while ($input =~ /^(#(.+)\n)?^_.*=(.*)$/mg) { if (defined($2)) { $comments{$3} = $2; } $messages{$3} = []; } } sub type_keys { ### For generic translatable mime/keys files ### while ($input =~ /^\s*_\w+=(.*)$/mg) { $messages{$1} = []; } } sub type_xml { ### For generic translatable XML files ### my $tree = readXml($input); parseTree(0, $tree); } sub print_var { my $var = shift; my $vartype = ref $var; if ($vartype =~ /ARRAY/) { my @arr = @{$var}; print "[ "; foreach my $el (@arr) { print_var($el); print ", "; } print "] "; } elsif ($vartype =~ /HASH/) { my %hash = %{$var}; print "{ "; foreach my $key (keys %hash) { print "$key => "; print_var($hash{$key}); print ", "; } print "} "; } else { print $var; } } # Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment) sub getAttributeString { my $sub = shift; my $do_translate = shift || 1; my $language = shift || ""; my $translate = shift; my $result = ""; foreach my $e (reverse(sort(keys %{ $sub }))) { my $key = $e; my $string = $sub->{$e}; my $quote = '"'; $string =~ s/^[\s]+//; $string =~ s/[\s]+$//; if ($string =~ /^'.*'$/) { $quote = "'"; } $string =~ s/^['"]//g; $string =~ s/['"]$//g; ## differences from intltool-merge.in.in if ($key =~ /^_/) { $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT; $messages{entity_decode($string)} = []; $$translate = 2; } ## differences end here from intltool-merge.in.in $result .= " $key=$quote$string$quote"; } return $result; } # Verbatim copy from intltool-merge.in.in sub getXMLstring { my $ref = shift; my $spacepreserve = shift || 0; my @list = @{ $ref }; my $result = ""; my $count = scalar(@list); my $attrs = $list[0]; my $index = 1; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); while ($index < $count) { my $type = $list[$index]; my $content = $list[$index+1]; if (! $type ) { # We've got CDATA if ($content) { # lets strip the whitespace here, and *ONLY* here $content =~ s/\s+/ /gs if (!$spacepreserve); $result .= $content; } } elsif ( "$type" ne "1" ) { # We've got another element $result .= "<$type"; $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements if ($content) { my $subresult = getXMLstring($content, $spacepreserve); if ($subresult) { $result .= ">".$subresult . ""; } else { $result .= "/>"; } } else { $result .= "/>"; } } $index += 2; } return $result; } # Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed # Translate list of nodes if necessary sub translate_subnodes { my $fh = shift; my $content = shift; my $language = shift || ""; my $singlelang = shift || 0; my $spacepreserve = shift || 0; my @nodes = @{ $content }; my $count = scalar(@nodes); my $index = 0; while ($index < $count) { my $type = $nodes[$index]; my $rest = $nodes[$index+1]; traverse($fh, $type, $rest, $language, $spacepreserve); $index += 2; } } # Based on traverse() in intltool-merge.in.in sub traverse { my $fh = shift; # unused, to allow us to sync code between -merge and -extract my $nodename = shift; my $content = shift; my $language = shift || ""; my $spacepreserve = shift || 0; if ($nodename && "$nodename" eq "1") { $XMLCOMMENT = $content; } elsif ($nodename) { # element my @all = @{ $content }; my $attrs = shift @all; my $translate = 0; my $outattr = getAttributeString($attrs, 1, $language, \$translate); if ($nodename =~ /^_/) { $translate = 1; $nodename =~ s/^_//; } my $lookup = ''; $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); if ($translate) { $lookup = getXMLstring($content, $spacepreserve); if (!$spacepreserve) { $lookup =~ s/^\s+//s; $lookup =~ s/\s+$//s; } if ($lookup && $translate != 2) { $comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT; $messages{$lookup} = []; } elsif ($translate == 2) { translate_subnodes($fh, \@all, $language, 1, $spacepreserve); } } else { $XMLCOMMENT = ""; my $count = scalar(@all); if ($count > 0) { my $index = 0; while ($index < $count) { my $type = $all[$index]; my $rest = $all[$index+1]; traverse($fh, $type, $rest, $language, $spacepreserve); $index += 2; } } } $XMLCOMMENT = ""; } } # Verbatim copy from intltool-merge.in.in, $fh for compatibility sub parseTree { my $fh = shift; my $ref = shift; my $language = shift || ""; my $name = shift @{ $ref }; my $cont = shift @{ $ref }; while (!$name || "$name" eq "1") { $name = shift @{ $ref }; $cont = shift @{ $ref }; } my $spacepreserve = 0; my $attrs = @{$cont}[0]; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); traverse($fh, $name, $cont, $language, $spacepreserve); } # Verbatim copy from intltool-merge.in.in sub intltool_tree_comment { my $expat = shift; my $data = $expat->original_string(); my $clist = $expat->{Curlist}; my $pos = $#$clist; $data =~ s/^$//s; push @$clist, 1 => $data; } # Verbatim copy from intltool-merge.in.in sub intltool_tree_cdatastart { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; push @$clist, 0 => $expat->original_string(); } # Verbatim copy from intltool-merge.in.in sub intltool_tree_cdataend { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; $clist->[$pos] .= $expat->original_string(); } # Verbatim copy from intltool-merge.in.in sub intltool_tree_char { my $expat = shift; my $text = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; # Use original_string so that we retain escaped entities # in CDATA sections. # if ($pos > 0 and $clist->[$pos - 1] eq '0') { $clist->[$pos] .= $expat->original_string(); } else { push @$clist, 0 => $expat->original_string(); } } # Verbatim copy from intltool-merge.in.in sub intltool_tree_start { my $expat = shift; my $tag = shift; my @origlist = (); # Use original_string so that we retain escaped entities # in attribute values. We must convert the string to an # @origlist array to conform to the structure of the Tree # Style. # my @original_array = split /\x/, $expat->original_string(); my $source = $expat->original_string(); # Remove leading tag. # $source =~ s|^\s*<\s*(\S+)||s; # Grab attribute key/value pairs and push onto @origlist array. # while ($source) { if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; push @origlist, $1; push @origlist, '"' . $2 . '"'; } elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; push @origlist, $1; push @origlist, "'" . $2 . "'"; } else { last; } } my $ol = [ { @origlist } ]; push @{ $expat->{Lists} }, $expat->{Curlist}; push @{ $expat->{Curlist} }, $tag => $ol; $expat->{Curlist} = $ol; } # Copied from intltool-merge.in.in and added comment handler. sub readXml { my $xmldoc = shift || return; my $ret = eval 'require XML::Parser'; if(!$ret) { die "You must have XML::Parser installed to run $0\n\n"; } my $xp = new XML::Parser(Style => 'Tree'); $xp->setHandlers(Char => \&intltool_tree_char); $xp->setHandlers(Start => \&intltool_tree_start); $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); ## differences from intltool-merge.in.in $xp->setHandlers(Comment => \&intltool_tree_comment); ## differences end here from intltool-merge.in.in my $tree = $xp->parse($xmldoc); #print_var($tree); # Hello thereHowdydo # would be: # [foo, [{}, 1, "comment", head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, # [{}, 0, "Howdy", ref, [{}]], 0, "do" ] ] return $tree; } sub type_schemas { ### For schemas XML files ### # FIXME: We should handle escaped < (less than) while ($input =~ / \s* (\s*(?:\s*)?(.*?)\s*<\/default>\s*)? (\s*(?:\s*)?(.*?)\s*<\/short>\s*)? (\s*(?:\s*)?(.*?)\s*<\/long>\s*)? <\/locale> /sgx) { my @totranslate = ($3,$6,$9); my @eachcomment = ($2,$5,$8); foreach (@totranslate) { my $currentcomment = shift @eachcomment; next if !$_; s/\s+/ /g; $messages{entity_decode_minimal($_)} = []; $comments{entity_decode_minimal($_)} = $currentcomment if (defined($currentcomment)); } } } sub type_rfc822deb { ### For rfc822-style Debian configuration files ### my $lineno = 1; my $type = ''; while ($input =~ /\G(.*?)(^|\n)(_+)([^:]+):[ \t]*(.*?)(?=\n\S|$)/sg) { my ($pre, $newline, $underscore, $tag, $text) = ($1, $2, $3, $4, $5); while ($pre =~ m/\n/g) { $lineno ++; } $lineno += length($newline); my @str_list = rfc822deb_split(length($underscore), $text); for my $str (@str_list) { $strcount++; $messages{$str} = []; $loc{$str} = $lineno; $count{$str} = $strcount; my $usercomment = ''; while($pre =~ s/(^|\n)#([^\n]*)$//s) { $usercomment = "\n" . $2 . $usercomment; } $comments{$str} = $tag . $usercomment; } $lineno += ($text =~ s/\n//g); } } sub rfc822deb_split { # Debian defines a special way to deal with rfc822-style files: # when a value contain newlines, it consists of # 1. a short form (first line) # 2. a long description, all lines begin with a space, # and paragraphs are separated by a single dot on a line # This routine returns an array of all paragraphs, and reformat # them. # When first argument is 2, the string is a comma separated list of # values. my $type = shift; my $text = shift; $text =~ s/^[ \t]//mg; return (split(/, */, $text, 0)) if $type ne 1; return ($text) if $text !~ /\n/; $text =~ s/([^\n]*)\n//; my @list = ($1); my $str = ''; for my $line (split (/\n/, $text)) { chomp $line; if ($line =~ /^\.\s*$/) { # New paragraph $str =~ s/\s*$//; push(@list, $str); $str = ''; } elsif ($line =~ /^\s/) { # Line which must not be reformatted $str .= "\n" if length ($str) && $str !~ /\n$/; $line =~ s/\s+$//; $str .= $line."\n"; } else { # Continuation line, remove newline $str .= " " if length ($str) && $str !~ /\n$/; $str .= $line; } } $str =~ s/\s*$//; push(@list, $str) if length ($str); return @list; } sub type_quoted { while ($input =~ /\"(([^\"]|\\\")*[^\\\"])\"/g) { my $message = $1; my $before = $`; $message =~ s/\\\"/\"/g; $before =~ s/[^\n]//g; $messages{$message} = []; $loc{$message} = length ($before) + 2; } } sub type_quotedxml { while ($input =~ /\"(([^\"]|\\\")*[^\\\"])\"/g) { my $message = $1; my $before = $`; $message =~ s/\\\"/\"/g; $message = entity_decode($message); $before =~ s/[^\n]//g; $messages{$message} = []; $loc{$message} = length ($before) + 2; } } sub type_glade { ### For translatable Glade XML files ### my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message"; while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) { # Glade sometimes uses tags that normally mark translatable things for # little bits of non-translatable content. We work around this by not # translating strings that only includes something like label4 or window1. $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label|dialog)[0-9]+$/; } while ($input =~ /(..[^<]*)<\/items>/sg) { for my $item (split (/\n/, $1)) { $messages{entity_decode($item)} = []; } } ## handle new glade files while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"(?:\s+[^>]*comments\s*=\s*"([^"]*)")?[^>]*>([^<]+)<\/\1>/sg) { $messages{entity_decode($3)} = [] unless $3 =~ /^(window|label)[0-9]+$/; if (defined($2) and !($3 =~ /^(window|label)[0-9]+$/)) { $comments{entity_decode($3)} = entity_decode($2) ; } } while ($input =~ /]*)"\s+description="([^>]+)"\/>/sg) { $messages{entity_decode_minimal($2)} = []; } } sub type_scheme { my ($line, $i, $state, $str, $trcomment, $char); for $line (split(/\n/, $input)) { $i = 0; $state = 0; # 0 - nothing, 1 - string, 2 - translatable string while ($i < length($line)) { if (substr($line,$i,1) eq "\"") { if ($state == 2) { $comments{$str} = $trcomment if ($trcomment); $messages{$str} = []; $str = ''; $state = 0; $trcomment = ""; } elsif ($state == 1) { $str = ''; $state = 0; $trcomment = ""; } else { $state = 1; $str = ''; if ($i>0 && substr($line,$i-1,1) eq '_') { $state = 2; } } } elsif (!$state) { if (substr($line,$i,1) eq ";") { $trcomment = substr($line,$i+1); $trcomment =~ s/^;*\s*//; $i = length($line); } elsif ($trcomment && substr($line,$i,1) !~ /\s|\(|\)|_/) { $trcomment = ""; } } else { if (substr($line,$i,1) eq "\\") { $char = substr($line,$i+1,1); if ($char ne "\"" && $char ne "\\") { $str = $str . "\\"; } $i++; } $str = $str . substr($line,$i,1); } $i++; } } } sub msg_write { my @msgids; if (%count) { @msgids = sort { $count{$a} <=> $count{$b} } keys %count; } else { @msgids = sort keys %messages; } for my $message (@msgids) { my $offsetlines = 1; $offsetlines++ if $message =~ /%/; if (defined ($comments{$message})) { while ($comments{$message} =~ m/\n/g) { $offsetlines++; } } print OUT "# ".($loc{$message} - $offsetlines). " \"$FILE\"\n" if defined $loc{$message}; print OUT "/* ".$comments{$message}." */\n" if defined $comments{$message}; print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/; my @lines = split (/\n/, $message, -1); for (my $n = 0; $n < @lines; $n++) { if ($n == 0) { print OUT "char *s = N_(\""; } else { print OUT " \""; } print OUT escape($lines[$n]); if ($n < @lines - 1) { print OUT "\\n\"\n"; } else { print OUT "\");\n"; } } } } gnubiff-2.2.16/config/mkinstalldirs0000755000175000017500000000133412474422124014221 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.3 2004/12/14 11:13:14 nicolasrougier Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here gnubiff-2.2.16/config/mdate-sh0000755000175000017500000001013012474422124013035 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. # Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME save_arg1="$1" # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # A `ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named `Jan', or `Feb', etc. However, it's unlikely that `/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set - x`$ls_command /` # Find which argument is the month. month= command= until test $month do shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done # Get the extended ls output of the file or directory. set - x`eval "$ls_command \"\$save_arg1\""` # Remove all preceding arguments eval $command # Get the month. Next argument is day, followed by the year or time. case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac day=$2 # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year gnubiff-2.2.16/config/config.rpath0000755000175000017500000003521312474422124013726 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < # Kenneth Christiansen # Darin Adler # # Proper XML UTF-8'ification written by Cyrille Chepelov # ## Release information my $PROGRAM = "intltool-merge"; my $PACKAGE = "intltool"; my $VERSION = "0.37.0"; ## Loaded modules use strict; use Getopt::Long; use Text::Wrap; use File::Basename; my $must_end_tag = -1; my $last_depth = -1; my $translation_depth = -1; my @tag_stack = (); my @entered_tag = (); my @translation_strings = (); my $leading_space = ""; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $BA_STYLE_ARG = 0; my $XML_STYLE_ARG = 0; my $KEYS_STYLE_ARG = 0; my $DESKTOP_STYLE_ARG = 0; my $SCHEMAS_STYLE_ARG = 0; my $RFC822DEB_STYLE_ARG = 0; my $QUOTED_STYLE_ARG = 0; my $QUOTEDXML_STYLE_ARG = 0; my $QUIET_ARG = 0; my $PASS_THROUGH_ARG = 0; my $UTF8_ARG = 0; my $MULTIPLE_OUTPUT = 0; my $cache_file; ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "quiet|q" => \$QUIET_ARG, "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility "ba-style|b" => \$BA_STYLE_ARG, "xml-style|x" => \$XML_STYLE_ARG, "keys-style|k" => \$KEYS_STYLE_ARG, "desktop-style|d" => \$DESKTOP_STYLE_ARG, "schemas-style|s" => \$SCHEMAS_STYLE_ARG, "rfc822deb-style|r" => \$RFC822DEB_STYLE_ARG, "quoted-style" => \$QUOTED_STYLE_ARG, "quotedxml-style" => \$QUOTEDXML_STYLE_ARG, "pass-through|p" => \$PASS_THROUGH_ARG, "utf8|u" => \$UTF8_ARG, "multiple-output|m" => \$MULTIPLE_OUTPUT, "cache|c=s" => \$cache_file ) or &error; my $PO_DIR; my $FILE; my $OUTFILE; my %po_files_by_lang = (); my %translations = (); my $iconv = $ENV{"ICONV"} || "iconv"; my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); sub isProgramInPath { my ($file) = @_; # If either a file exists, or when run it returns 0 exit status return 1 if ((-x $file) or (system("$file -l >$devnull") == 0)); return 0; } if (! isProgramInPath ("$iconv")) { print STDERR " *** iconv is not found on this system!\n". " *** Without it, intltool-merge can not convert encodings.\n"; exit; } # Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; # XML quoted string contents my $q = "[^\\\"]*"; ## Check for options. if ($VERSION_ARG) { &print_version; } elsif ($HELP_ARG) { &print_help; } elsif ($BA_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &ba_merge_translations; &finalize; } elsif ($XML_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &xml_merge_output; &finalize; } elsif ($KEYS_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &keys_merge_translations; &finalize; } elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &desktop_merge_translations; &finalize; } elsif ($SCHEMAS_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &schemas_merge_translations; &finalize; } elsif ($RFC822DEB_STYLE_ARG && @ARGV > 2) { &preparation; &print_message; &rfc822deb_merge_translations; &finalize; } elsif (($QUOTED_STYLE_ARG || $QUOTEDXML_STYLE_ARG) && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; "ed_merge_translations($QUOTEDXML_STYLE_ARG); &finalize; } else { &print_help; } exit; ## Sub for printing release information sub print_version { print <<_EOF_; ${PROGRAM} (${PACKAGE}) ${VERSION} Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen. Copyright (C) 2000-2003 Free Software Foundation, Inc. Copyright (C) 2000-2001 Eazel, 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. _EOF_ exit; } ## Sub for printing usage information sub print_help { print <<_EOF_; Usage: ${PROGRAM} [OPTION]... PO_DIRECTORY FILENAME OUTPUT_FILE Generates an output file that includes some localized attributes from an untranslated source file. Mandatory options: (exactly one must be specified) -b, --ba-style includes translations in the bonobo-activation style -d, --desktop-style includes translations in the desktop style -k, --keys-style includes translations in the keys style -s, --schemas-style includes translations in the schemas style -r, --rfc822deb-style includes translations in the RFC822 style --quoted-style includes translations in the quoted string style --quotedxml-style includes translations in the quoted xml string style -x, --xml-style includes translations in the standard xml style Other options: -u, --utf8 convert all strings to UTF-8 before merging (default for everything except RFC822 style) -p, --pass-through deprecated, does nothing and issues a warning -m, --multiple-output output one localized file per locale, instead of a single file containing all localized elements -c, --cache=FILE specify cache file name (usually \$top_builddir/po/.intltool-merge-cache) -q, --quiet suppress most messages --help display this help and exit --version output version information and exit Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") or send email to . _EOF_ exit; } ## Sub for printing error messages sub print_error { print STDERR "Try `${PROGRAM} --help' for more information.\n"; exit; } sub print_message { print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG; } sub preparation { $PO_DIR = $ARGV[0]; $FILE = $ARGV[1]; $OUTFILE = $ARGV[2]; &gather_po_files; &get_translation_database; } # General-purpose code for looking up translations in .po files sub po_file2lang { my ($tmp) = @_; $tmp =~ s/^.*\/(.*)\.po$/$1/; return $tmp; } sub gather_po_files { if (my $linguas = $ENV{"LINGUAS"}) { for my $lang (split / /, $linguas) { my $po_file = $PO_DIR . "/" . $lang . ".po"; if (-e $po_file) { $po_files_by_lang{$lang} = $po_file; } } } else { if (open LINGUAS_FILE, "$PO_DIR/LINGUAS") { while () { next if /^#/; for my $lang (split) { chomp ($lang); my $po_file = $PO_DIR . "/" . $lang . ".po"; if (-e $po_file) { $po_files_by_lang{$lang} = $po_file; } } } close LINGUAS_FILE; } else { for my $po_file (glob "$PO_DIR/*.po") { $po_files_by_lang{po_file2lang($po_file)} = $po_file; } } } } sub get_local_charset { my ($encoding) = @_; my $alias_file = $ENV{"G_CHARSET_ALIAS"} || "@INTLTOOL_LIBDIR@/charset.alias"; # seek character encoding aliases in charset.alias (glib) if (open CHARSET_ALIAS, $alias_file) { while () { next if /^\#/; return $1 if (/^\s*([-._a-zA-Z0-9]+)\s+$encoding\b/i) } close CHARSET_ALIAS; } # if not found, return input string return $encoding; } sub get_po_encoding { my ($in_po_file) = @_; my $encoding = ""; open IN_PO_FILE, $in_po_file or die; while () { ## example: "Content-Type: text/plain; charset=ISO-8859-1\n" if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) { $encoding = $1; last; } } close IN_PO_FILE; if (!$encoding) { print STDERR "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n" unless $QUIET_ARG; $encoding = "ISO-8859-1"; } system ("$iconv -f $encoding -t UTF-8 <$devnull 2>$devnull"); if ($?) { $encoding = get_local_charset($encoding); } return $encoding } sub utf8_sanity_check { print STDERR "Warning: option --pass-through has been removed.\n" if $PASS_THROUGH_ARG; $UTF8_ARG = 1; } sub get_translation_database { if ($cache_file) { &get_cached_translation_database; } else { &create_translation_database; } } sub get_newest_po_age { my $newest_age; foreach my $file (values %po_files_by_lang) { my $file_age = -M $file; $newest_age = $file_age if !$newest_age || $file_age < $newest_age; } $newest_age = 0 if !$newest_age; return $newest_age; } sub create_cache { print "Generating and caching the translation database\n" unless $QUIET_ARG; &create_translation_database; open CACHE, ">$cache_file" || die; print CACHE join "\x01", %translations; close CACHE; } sub load_cache { print "Found cached translation database\n" unless $QUIET_ARG; my $contents; open CACHE, "<$cache_file" || die; { local $/; $contents = ; } close CACHE; %translations = split "\x01", $contents; } sub get_cached_translation_database { my $cache_file_age = -M $cache_file; if (defined $cache_file_age) { if ($cache_file_age <= &get_newest_po_age) { &load_cache; return; } print "Found too-old cached translation database\n" unless $QUIET_ARG; } &create_cache; } sub create_translation_database { for my $lang (keys %po_files_by_lang) { my $po_file = $po_files_by_lang{$lang}; if ($UTF8_ARG) { my $encoding = get_po_encoding ($po_file); if (lc $encoding eq "utf-8") { open PO_FILE, "<$po_file"; } else { print "NOTICE: $po_file is not in UTF-8 but $encoding, converting...\n" unless $QUIET_ARG;; open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|"; } } else { open PO_FILE, "<$po_file"; } my $nextfuzzy = 0; my $inmsgid = 0; my $inmsgstr = 0; my $msgid = ""; my $msgstr = ""; while () { $nextfuzzy = 1 if /^#, fuzzy/; if (/^msgid "((\\.|[^\\]+)*)"/ ) { $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; $msgid = ""; $msgstr = ""; if ($nextfuzzy) { $inmsgid = 0; } else { $msgid = unescape_po_string($1); $inmsgid = 1; } $inmsgstr = 0; $nextfuzzy = 0; } if (/^msgstr "((\\.|[^\\]+)*)"/) { $msgstr = unescape_po_string($1); $inmsgstr = 1; $inmsgid = 0; } if (/^"((\\.|[^\\]+)*)"/) { $msgid .= unescape_po_string($1) if $inmsgid; $msgstr .= unescape_po_string($1) if $inmsgstr; } } $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; } } sub finalize { } sub unescape_one_sequence { my ($sequence) = @_; return "\\" if $sequence eq "\\\\"; return "\"" if $sequence eq "\\\""; return "\n" if $sequence eq "\\n"; return "\r" if $sequence eq "\\r"; return "\t" if $sequence eq "\\t"; return "\b" if $sequence eq "\\b"; return "\f" if $sequence eq "\\f"; return "\a" if $sequence eq "\\a"; return chr(11) if $sequence eq "\\v"; # vertical tab, see ascii(7) return chr(hex($1)) if ($sequence =~ /\\x([0-9a-fA-F]{2})/); return chr(oct($1)) if ($sequence =~ /\\([0-7]{3})/); # FIXME: Is \0 supported as well? Kenneth and Rodney don't want it, see bug #48489 return $sequence; } sub unescape_po_string { my ($string) = @_; $string =~ s/(\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\.)/unescape_one_sequence($1)/eg; return $string; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/<//g; s/&/&/g; return $_; } # entity_encode: (string) # # Encode the given string to XML format (encode '<' etc). sub entity_encode { my ($pre_encoded) = @_; my @list_of_chars = unpack ('C*', $pre_encoded); # with UTF-8 we only encode minimalistic return join ('', map (&entity_encode_int_minimalist, @list_of_chars)); } sub entity_encode_int_minimalist { return """ if $_ == 34; return "&" if $_ == 38; return "'" if $_ == 39; return "<" if $_ == 60; return ">" if $_ == 62; return chr $_; } sub entity_encoded_translation { my ($lang, $string) = @_; my $translation = $translations{$lang, $string}; return $string if !$translation; return entity_encode ($translation); } ## XML (bonobo-activation specific) merge code sub ba_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!"; # Binmode so that selftest works ok if using a native Win32 Perl... binmode (OUTPUT) if $^O eq 'MSWin32'; while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) { print OUTPUT $1; my $node = $2 . "\n"; my @strings = (); $_ = $node; while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) { push @strings, entity_decode($3); } print OUTPUT; my %langs; for my $string (@strings) { for my $lang (keys %po_files_by_lang) { $langs{$lang} = 1 if $translations{$lang, $string}; } } for my $lang (sort keys %langs) { $_ = $node; s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s; s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg; print OUTPUT; } } print OUTPUT $source; close OUTPUT; } ## XML (non-bonobo-activation) merge code # Process tag attributes # Only parameter is a HASH containing attributes -> values mapping sub getAttributeString { my $sub = shift; my $do_translate = shift || 0; my $language = shift || ""; my $result = ""; my $translate = shift; foreach my $e (reverse(sort(keys %{ $sub }))) { my $key = $e; my $string = $sub->{$e}; my $quote = '"'; $string =~ s/^[\s]+//; $string =~ s/[\s]+$//; if ($string =~ /^'.*'$/) { $quote = "'"; } $string =~ s/^['"]//g; $string =~ s/['"]$//g; if ($do_translate && $key =~ /^_/) { $key =~ s|^_||g; if ($language) { # Handle translation my $decode_string = entity_decode($string); my $translation = $translations{$language, $decode_string}; if ($translation) { $translation = entity_encode($translation); $string = $translation; } $$translate = 2; } else { $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" $translate } } $result .= " $key=$quote$string$quote"; } return $result; } # Returns a translatable string from XML node, it works on contents of every node in XML::Parser tree sub getXMLstring { my $ref = shift; my $spacepreserve = shift || 0; my @list = @{ $ref }; my $result = ""; my $count = scalar(@list); my $attrs = $list[0]; my $index = 1; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); while ($index < $count) { my $type = $list[$index]; my $content = $list[$index+1]; if (! $type ) { # We've got CDATA if ($content) { # lets strip the whitespace here, and *ONLY* here $content =~ s/\s+/ /gs if (!$spacepreserve); $result .= $content; } } elsif ( "$type" ne "1" ) { # We've got another element $result .= "<$type"; $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements if ($content) { my $subresult = getXMLstring($content, $spacepreserve); if ($subresult) { $result .= ">".$subresult . ""; } else { $result .= "/>"; } } else { $result .= "/>"; } } $index += 2; } return $result; } # Translate list of nodes if necessary sub translate_subnodes { my $fh = shift; my $content = shift; my $language = shift || ""; my $singlelang = shift || 0; my $spacepreserve = shift || 0; my @nodes = @{ $content }; my $count = scalar(@nodes); my $index = 0; while ($index < $count) { my $type = $nodes[$index]; my $rest = $nodes[$index+1]; if ($singlelang) { my $oldMO = $MULTIPLE_OUTPUT; $MULTIPLE_OUTPUT = 1; traverse($fh, $type, $rest, $language, $spacepreserve); $MULTIPLE_OUTPUT = $oldMO; } else { traverse($fh, $type, $rest, $language, $spacepreserve); } $index += 2; } } sub isWellFormedXmlFragment { my $ret = eval 'require XML::Parser'; if(!$ret) { die "You must have XML::Parser installed to run $0\n\n"; } my $fragment = shift; return 0 if (!$fragment); $fragment = "$fragment"; my $xp = new XML::Parser(Style => 'Tree'); my $tree = 0; eval { $tree = $xp->parse($fragment); }; return $tree; } sub traverse { my $fh = shift; my $nodename = shift; my $content = shift; my $language = shift || ""; my $spacepreserve = shift || 0; if (!$nodename) { if ($content =~ /^[\s]*$/) { $leading_space .= $content; } print $fh $content; } else { # element my @all = @{ $content }; my $attrs = shift @all; my $translate = 0; my $outattr = getAttributeString($attrs, 1, $language, \$translate); if ($nodename =~ /^_/) { $translate = 1; $nodename =~ s/^_//; } my $lookup = ''; $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); print $fh "<$nodename", $outattr; if ($translate) { $lookup = getXMLstring($content, $spacepreserve); if (!$spacepreserve) { $lookup =~ s/^\s+//s; $lookup =~ s/\s+$//s; } if ($lookup || $translate == 2) { my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup}); if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) { $translation = $lookup if (!$translation); print $fh " xml:lang=\"", $language, "\"" if $language; print $fh ">"; if ($translate == 2) { translate_subnodes($fh, \@all, $language, 1, $spacepreserve); } else { print $fh $translation; } print $fh ""; return; # this means there will be no same translation with xml:lang="$language"... # if we want them both, just remove this "return" } else { print $fh ">"; if ($translate == 2) { translate_subnodes($fh, \@all, $language, 1, $spacepreserve); } else { print $fh $lookup; } print $fh ""; } } else { print $fh "/>"; } for my $lang (sort keys %po_files_by_lang) { if ($MULTIPLE_OUTPUT && $lang ne "$language") { next; } if ($lang) { # Handle translation # my $translate = 0; my $localattrs = getAttributeString($attrs, 1, $lang, \$translate); my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup}); if ($translate && !$translation) { $translation = $lookup; } if ($translation || $translate) { print $fh "\n"; $leading_space =~ s/.*\n//g; print $fh $leading_space; print $fh "<", $nodename, " xml:lang=\"", $lang, "\"", $localattrs, ">"; if ($translate == 2) { translate_subnodes($fh, \@all, $lang, 1, $spacepreserve); } else { print $fh $translation; } print $fh ""; } } } } else { my $count = scalar(@all); if ($count > 0) { print $fh ">"; my $index = 0; while ($index < $count) { my $type = $all[$index]; my $rest = $all[$index+1]; traverse($fh, $type, $rest, $language, $spacepreserve); $index += 2; } print $fh ""; } else { print $fh "/>"; } } } } sub intltool_tree_comment { my $expat = shift; my $data = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; push @$clist, 1 => $data; } sub intltool_tree_cdatastart { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; push @$clist, 0 => $expat->original_string(); } sub intltool_tree_cdataend { my $expat = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; $clist->[$pos] .= $expat->original_string(); } sub intltool_tree_char { my $expat = shift; my $text = shift; my $clist = $expat->{Curlist}; my $pos = $#$clist; # Use original_string so that we retain escaped entities # in CDATA sections. # if ($pos > 0 and $clist->[$pos - 1] eq '0') { $clist->[$pos] .= $expat->original_string(); } else { push @$clist, 0 => $expat->original_string(); } } sub intltool_tree_start { my $expat = shift; my $tag = shift; my @origlist = (); # Use original_string so that we retain escaped entities # in attribute values. We must convert the string to an # @origlist array to conform to the structure of the Tree # Style. # my @original_array = split /\x/, $expat->original_string(); my $source = $expat->original_string(); # Remove leading tag. # $source =~ s|^\s*<\s*(\S+)||s; # Grab attribute key/value pairs and push onto @origlist array. # while ($source) { if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; push @origlist, $1; push @origlist, '"' . $2 . '"'; } elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) { $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; push @origlist, $1; push @origlist, "'" . $2 . "'"; } else { last; } } my $ol = [ { @origlist } ]; push @{ $expat->{Lists} }, $expat->{Curlist}; push @{ $expat->{Curlist} }, $tag => $ol; $expat->{Curlist} = $ol; } sub readXml { my $filename = shift || return; if(!-f $filename) { die "ERROR Cannot find filename: $filename\n"; } my $ret = eval 'require XML::Parser'; if(!$ret) { die "You must have XML::Parser installed to run $0\n\n"; } my $xp = new XML::Parser(Style => 'Tree'); $xp->setHandlers(Char => \&intltool_tree_char); $xp->setHandlers(Start => \&intltool_tree_start); $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); my $tree = $xp->parsefile($filename); # Hello thereHowdydo # would be: # [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, [{}, # 0, "Howdy", ref, [{}]], 0, "do" ] ] return $tree; } sub print_header { my $infile = shift; my $fh = shift; my $source; if(!-f $infile) { die "ERROR Cannot find filename: $infile\n"; } print $fh qq{\n}; { local $/; open DOCINPUT, "<${FILE}" or die; $source = ; close DOCINPUT; } if ($source =~ /()/s) { print $fh "$1\n"; } elsif ($source =~ /(]*>)/s) { print $fh "$1\n"; } } sub parseTree { my $fh = shift; my $ref = shift; my $language = shift || ""; my $name = shift @{ $ref }; my $cont = shift @{ $ref }; while (!$name || "$name" eq "1") { $name = shift @{ $ref }; $cont = shift @{ $ref }; } my $spacepreserve = 0; my $attrs = @{$cont}[0]; $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); traverse($fh, $name, $cont, $language, $spacepreserve); } sub xml_merge_output { my $source; if ($MULTIPLE_OUTPUT) { for my $lang (sort keys %po_files_by_lang) { if ( ! -d $lang ) { mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n"; } open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; my $tree = readXml($FILE); print_header($FILE, \*OUTPUT); parseTree(\*OUTPUT, $tree, $lang); close OUTPUT; print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG; } if ( ! -d "C" ) { mkdir "C" or -d "C" or die "Cannot create subdirectory C: $!\n"; } open OUTPUT, ">C/$OUTFILE" or die "Cannot open C/$OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; my $tree = readXml($FILE); print_header($FILE, \*OUTPUT); parseTree(\*OUTPUT, $tree); close OUTPUT; print "CREATED C/$OUTFILE\n" unless $QUIET_ARG; } else { open OUTPUT, ">$OUTFILE" or die "Cannot open $OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; my $tree = readXml($FILE); print_header($FILE, \*OUTPUT); parseTree(\*OUTPUT, $tree); close OUTPUT; print "CREATED $OUTFILE\n" unless $QUIET_ARG; } } sub keys_merge_translation { my ($lang) = @_; if ( ! -d $lang && $MULTIPLE_OUTPUT) { mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n"; } open INPUT, "<${FILE}" or die "Cannot open ${FILE}: $!\n"; open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; if (!$MULTIPLE_OUTPUT) { print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/[$lang]$1=$translation/; print OUTPUT; } } else { my $non_translated_line = $_; my $translation = $translations{$lang, $string}; $translation = $string if !$translation; $_ = $non_translated_line; s/(\w+)=.*/$1=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG; } sub keys_merge_translations { if ($MULTIPLE_OUTPUT) { for my $lang (sort keys %po_files_by_lang) { keys_merge_translation ($lang); } keys_merge_translation ("C"); } else { keys_merge_translation ("."); } } sub desktop_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/${1}[$lang]=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } sub schemas_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; # FIXME: support attribute translations # Empty nodes never need translation, so unmark all of them. # For example, <_foo/> is just replaced by . $source =~ s|<\s*_($w+)\s*/>|<$1/>|g; while ($source =~ s/ (.*?) (\s+)((\s*) (\s*(?:\s*)?(.*?)\s*<\/default>)?(\s*) (\s*(?:\s*)?(.*?)\s*<\/short>)?(\s*) (\s*(?:\s*)?(.*?)\s*<\/long>)?(\s*) <\/locale>) //sx) { print OUTPUT $1; my $locale_start_spaces = $2 ? $2 : ''; my $default_spaces = $4 ? $4 : ''; my $short_spaces = $7 ? $7 : ''; my $long_spaces = $10 ? $10 : ''; my $locale_end_spaces = $13 ? $13 : ''; my $c_default_block = $3 ? $3 : ''; my $default_string = $6 ? $6 : ''; my $short_string = $9 ? $9 : ''; my $long_string = $12 ? $12 : ''; print OUTPUT "$locale_start_spaces$c_default_block"; $default_string =~ s/\s+/ /g; $default_string = entity_decode($default_string); $short_string =~ s/\s+/ /g; $short_string = entity_decode($short_string); $long_string =~ s/\s+/ /g; $long_string = entity_decode($long_string); for my $lang (sort keys %po_files_by_lang) { my $default_translation = $translations{$lang, $default_string}; my $short_translation = $translations{$lang, $short_string}; my $long_translation = $translations{$lang, $long_string}; next if (!$default_translation && !$short_translation && !$long_translation); print OUTPUT "\n$locale_start_spaces"; print OUTPUT "$default_spaces"; if ($default_translation) { $default_translation = entity_encode($default_translation); print OUTPUT "$default_translation"; } print OUTPUT "$short_spaces"; if ($short_translation) { $short_translation = entity_encode($short_translation); print OUTPUT "$short_translation"; } print OUTPUT "$long_spaces"; if ($long_translation) { $long_translation = entity_encode($long_translation); print OUTPUT "$long_translation"; } print OUTPUT "$locale_end_spaces"; } } print OUTPUT $source; close OUTPUT; } sub rfc822deb_merge_translations { my %encodings = (); for my $lang (keys %po_files_by_lang) { $encodings{$lang} = ($UTF8_ARG ? 'UTF-8' : get_po_encoding($po_files_by_lang{$lang})); } my $source; $Text::Wrap::huge = 'overflow'; $Text::Wrap::break = qr/\n|\s(?=\S)/; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">${OUTFILE}" or die; binmode (OUTPUT) if $^O eq 'MSWin32'; while ($source =~ /(^|\n+)(_*)([^:\s]+)(:[ \t]*)(.*?)(?=\n[\S\n]|$)/sg) { my $sep = $1; my $non_translated_line = $3.$4; my $string = $5; my $underscore = length($2); next if $underscore eq 0 && $non_translated_line =~ /^#/; # Remove [] dummy strings my $stripped = $string; $stripped =~ s/\[\s[^\[\]]*\],/,/g if $underscore eq 2; $stripped =~ s/\[\s[^\[\]]*\]$//; $non_translated_line .= $stripped; print OUTPUT $sep.$non_translated_line; if ($underscore) { my @str_list = rfc822deb_split($underscore, $string); for my $lang (sort keys %po_files_by_lang) { my $is_translated = 1; my $str_translated = ''; my $first = 1; for my $str (@str_list) { my $translation = $translations{$lang, $str}; if (!$translation) { $is_translated = 0; last; } # $translation may also contain [] dummy # strings, mostly to indicate an empty string $translation =~ s/\[\s[^\[\]]*\]$//; if ($first) { if ($underscore eq 2) { $str_translated .= $translation; } else { $str_translated .= Text::Tabs::expand($translation) . "\n"; } } else { if ($underscore eq 2) { $str_translated .= ', ' . $translation; } else { $str_translated .= Text::Tabs::expand( Text::Wrap::wrap(' ', ' ', $translation)) . "\n .\n"; } } $first = 0; # To fix some problems with Text::Wrap::wrap $str_translated =~ s/(\n )+\n/\n .\n/g; } next unless $is_translated; $str_translated =~ s/\n \.\n$//; $str_translated =~ s/\s+$//; $_ = $non_translated_line; s/^(\w+):\s*.*/$sep${1}-$lang.$encodings{$lang}: $str_translated/s; print OUTPUT; } } } print OUTPUT "\n"; close OUTPUT; close INPUT; } sub rfc822deb_split { # Debian defines a special way to deal with rfc822-style files: # when a value contain newlines, it consists of # 1. a short form (first line) # 2. a long description, all lines begin with a space, # and paragraphs are separated by a single dot on a line # This routine returns an array of all paragraphs, and reformat # them. # When first argument is 2, the string is a comma separated list of # values. my $type = shift; my $text = shift; $text =~ s/^[ \t]//mg; return (split(/, */, $text, 0)) if $type ne 1; return ($text) if $text !~ /\n/; $text =~ s/([^\n]*)\n//; my @list = ($1); my $str = ''; for my $line (split (/\n/, $text)) { chomp $line; if ($line =~ /^\.\s*$/) { # New paragraph $str =~ s/\s*$//; push(@list, $str); $str = ''; } elsif ($line =~ /^\s/) { # Line which must not be reformatted $str .= "\n" if length ($str) && $str !~ /\n$/; $line =~ s/\s+$//; $str .= $line."\n"; } else { # Continuation line, remove newline $str .= " " if length ($str) && $str !~ /\n$/; $str .= $line; } } $str =~ s/\s*$//; push(@list, $str) if length ($str); return @list; } sub quoted_translation { my ($xml_mode, $lang, $string) = @_; $string = entity_decode($string) if $xml_mode; $string =~ s/\\\"/\"/g; my $translation = $translations{$lang, $string}; $translation = $string if !$translation; $translation = entity_encode($translation) if $xml_mode; $translation =~ s/\"/\\\"/g; return $translation } sub quoted_merge_translations { my ($xml_mode) = @_; if (!$MULTIPLE_OUTPUT) { print "Quoted only supports Multiple Output.\n"; exit(1); } for my $lang (sort keys %po_files_by_lang) { if ( ! -d $lang ) { mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n"; } open INPUT, "<${FILE}" or die; open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; binmode (OUTPUT) if $^O eq 'MSWin32'; while () { s/\"(([^\"]|\\\")*[^\\\"])\"/"\"" . "ed_translation($xml_mode, $lang, $1) . "\""/ge; print OUTPUT; } close OUTPUT; close INPUT; } } gnubiff-2.2.16/config/depcomp0000755000175000017500000003541012474422124012772 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2004-04-25.13 # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # Dependencies are output in .lo.d with libtool 1.4. # They are output in .o.d with libtool 1.5. tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.o.d" tmpdepfile3="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" tmpdepfile3="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" elif test -f "$tmpdepfile2"; then tmpdepfile="$tmpdepfile2" else tmpdepfile="$tmpdepfile3" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: gnubiff-2.2.16/config/config.sub0000755000175000017500000007460412474422124013410 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2004-02-23' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnubiff-2.2.16/config/ltmain.sh0000755000175000017500000054666212474422124013260 00000000000000# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # RH: define SED for historic ltconfig's generated by Libtool 1.3 [ -z "$SED" ] && SED=sed # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.6 TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42)" # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit $EXIT_FAILURE fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in [0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in [0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in [0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" save_umask=`umask` umask 0077 if $mkdir "$tmpdir"; then umask $save_umask else umask $save_umask $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $EXIT_SUCCESS # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: gnubiff-2.2.16/config/missing0000755000175000017500000002466612474422124013027 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2003-09-02.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: gnubiff-2.2.16/config/texinfo.tex0000644000175000017500000066671612474422124013636 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2004-05-16.08} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software % Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2, or (at % your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, % Boston, MA 02111-1307, USA. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \message{Basics,} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexnoindent=\noindent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % In some macros, we cannot use the `\? notation---the left quote is % in some cases the escape char. \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\questChar = `\? \chardef\semiChar = `\; \chardef\underChar = `\_ \chardef\spaceChar = `\ % \chardef\spacecat = 10 \def\spaceisspace{\catcode\spaceChar=\spacecat} % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \escapechar = `\\ % use backslash in output files. \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \normalturnoffactive \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\next{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % We cannot use \next here, as it holds the macro to run; % thus we reuse \temp. \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \next. % (Similarily, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as enviroments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At runtime, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Evironment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux file. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=3000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } % @! is an end-of-sentence bang. \def\!{!\spacefactor=3000 } % @? is an end-of-sentence query. \def\?{?\spacefactor=3000 } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include file insert text of that file as input. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable \def\temp{\input #1 }% \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode\underChar = \active \gdef\mathunderscore{% \catcode\underChar=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus } } % @bullet and @minus need the same treatment as @math, just above. \def\bullet{$\ptexbullet$} \def\minus{$-$} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil .\hfil.\hfil.% \hskip 0pt plus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=3000 } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % \ifpdf \input pdfcolor \pdfcatalog{/PageMode /UseOutlines}% \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% % without \immediate, pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi \ifnum\pdftexversion<13 #1.pdf% \else {#1.pdf}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code in a section title % aren't expanded. \atdummies \normalturnoffactive \pdfdest name{#1} xyz% }} \def\pdfmkpgn#1{#1} \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node % text, which might be empty if this toc entry had no % corresponding node. #4 is the page number. % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worthwhile, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \let\thissecnum\empty \let\thissubsecnum\empty }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \let\thissubsecnum\empty }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \let\thischapnum\empty \let\thissecnum\empty \let\thissubsecnum\empty % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \input \jobname.toc % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \turnoffactive \input \jobname.toc \endgroup } % \def\makelinks #1,{% \def\params{#1}\def\E{END}% \ifx\params\E \let\nextmakelinks=\relax \else \let\nextmakelinks=\makelinks \ifnum\lnkcount>0,\fi \picknum{#1}% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{\the\pgn}}% \linkcolor #1% \advance\lnkcount by 1% \endlink \fi \nextmakelinks } \def\picknum#1{\expandafter\pn#1} \def\pn#1{% \def\p{#1}% \ifx\p\lbrace \let\nextpn=\ppn \else \let\nextpn=\ppnn \def\first{#1} \fi \nextpn } \def\ppn#1{\pgn=#1\gobble} \def\ppnn{\pgn=\first} \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi \def\pdfurl#1{% \begingroup \normalturnoffactive\def\@{@}% \makevalueexpandable \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\linkcolor = \relax \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Text fonts (11.2pt, magstep1). \newcount\mainmagstep \ifx\bigger\relax % not really supported. \mainmagstep=\magstep1 \setfont\textrm\rmshape{12}{1000} \setfont\texttt\ttshape{12}{1000} \else \mainmagstep=\magstephalf \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \fi \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1} \setfont\deftt\ttshape{10}{\magstep1} \setfont\defttsl\ttslshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page (20.4pt): \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} \def\authortt{\sectt} % Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % Reduced fonts for @acro in text (10pt). \setfont\reducedrm\rmshape{10}{1000} \setfont\reducedtt\ttshape{10}{1000} \setfont\reducedbf\bfshape{10}{1000} \setfont\reducedit\itshape{10}{1000} \setfont\reducedsl\slshape{10}{1000} \setfont\reducedsf\sfshape{10}{1000} \setfont\reducedsc\scshape{10}{1000} \setfont\reducedttsl\ttslshape{10}{1000} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % % I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \textfonts \rm % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000} \setfont\shortconttt\ttshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic \def\b#1{{\bf #1}} \let\strong=\b % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\frenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m } \catcode`@=\other \def\t#1{% {\tt \rawbackslash \frenchspacing #1}% \null } \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \frenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\arg{#1}% \ifx\arg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\arg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\arg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\arg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct.' \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @pounds{} is a sterling sign, which is in the CM italic font. % \def\pounds{{\it\$}} % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines \let\tt=\authortt} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rm #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\authorfont \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. (Unfortunately % we can't prevent a possible page break at the following % \baselineskip glue.) However, if what follows is an environment % such as @example, there will be no \parskip glue; then % the negative vskip we just would cause the example and the item to % crash together. So we use this bizarre value of 10001 as a signal % to \aboveenvbreak to insert \parskip glue after all. % (Possibly there are other commands that could be followed by % @example which need the same treatment, but not section titles; or % maybe section titles are the only special case and they should be % penalty 10001...) \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablex } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablex } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablex } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. Note that \everycr resets \everytab. \def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. \let\item\crcr % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut \else %% FIXME: what is \box0 supposed to be? \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore {#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the string `ifinfo'. % % Define a command to find the next `@end #1', which must be on a line % by itself. \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \obeylines % \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. \def\enddoignore{\endgroup\ignorespaces} % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within \newindex. {\catcode`\@=11 \gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \undefined % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname\donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % \definedummyword defines \#1 as \realbackslash #1\space, thus % effectively preventing its expansion. This is used only for control % words, not control letters, because the \space would be incorrect % for control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword##1{% \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% }% \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% }% \let\definedummyaccent\definedummyletter % % Do the redefinitions. \commondummies } % For the aux file, @ is the escape character. So we want to redefine % everything using @ instead of \realbackslash. When everything uses % @, this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % (See comments in \indexdummies.) \def\definedummyword##1{% \expandafter\def\csname ##1\endcsname{@##1\space}% }% \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{@##1}% }% \let\definedummyaccent\definedummyletter % % Do the redefinitions. \commondummies } % Called from \indexdummies and \atdummies. \definedummyword and % \definedummyletter must be defined first. % \def\commondummies{% % \normalturnoffactive % \commondummiesnofonts % \definedummyletter{_}% % % Non-English letters. \definedummyword{AA}% \definedummyword{AE}% \definedummyword{L}% \definedummyword{OE}% \definedummyword{O}% \definedummyword{aa}% \definedummyword{ae}% \definedummyword{l}% \definedummyword{oe}% \definedummyword{o}% \definedummyword{ss}% \definedummyword{exclamdown}% \definedummyword{questiondown}% \definedummyword{ordf}% \definedummyword{ordm}% % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword{bf}% \definedummyword{gtr}% \definedummyword{hat}% \definedummyword{less}% \definedummyword{sf}% \definedummyword{sl}% \definedummyword{tclose}% \definedummyword{tt}% % \definedummyword{LaTeX}% \definedummyword{TeX}% % % Assorted special characters. \definedummyword{bullet}% \definedummyword{copyright}% \definedummyword{registeredsymbol}% \definedummyword{dots}% \definedummyword{enddots}% \definedummyword{equiv}% \definedummyword{error}% \definedummyword{expansion}% \definedummyword{minus}% \definedummyword{pounds}% \definedummyword{point}% \definedummyword{print}% \definedummyword{result}% % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable % % Normal spaces, not active ones. \unsepspaces % % No macro expansion. \turnoffmacros } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % % Better have this without active chars. { \catcode`\~=\other \gdef\commondummiesnofonts{% % Control letters and accents. \definedummyletter{!}% \definedummyaccent{"}% \definedummyaccent{'}% \definedummyletter{*}% \definedummyaccent{,}% \definedummyletter{.}% \definedummyletter{/}% \definedummyletter{:}% \definedummyaccent{=}% \definedummyletter{?}% \definedummyaccent{^}% \definedummyaccent{`}% \definedummyaccent{~}% \definedummyword{u}% \definedummyword{v}% \definedummyword{H}% \definedummyword{dotaccent}% \definedummyword{ringaccent}% \definedummyword{tieaccent}% \definedummyword{ubaraccent}% \definedummyword{udotaccent}% \definedummyword{dotless}% % % Texinfo font commands. \definedummyword{b}% \definedummyword{i}% \definedummyword{r}% \definedummyword{sc}% \definedummyword{t}% % % Commands that take arguments. \definedummyword{acronym}% \definedummyword{cite}% \definedummyword{code}% \definedummyword{command}% \definedummyword{dfn}% \definedummyword{emph}% \definedummyword{env}% \definedummyword{file}% \definedummyword{kbd}% \definedummyword{key}% \definedummyword{math}% \definedummyword{option}% \definedummyword{samp}% \definedummyword{strong}% \definedummyword{tie}% \definedummyword{uref}% \definedummyword{url}% \definedummyword{var}% \definedummyword{verb}% \definedummyword{w}% } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{% \expandafter\let\csname ##1\endcsname\asis }% % We can just ignore other control letters. \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{}% }% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\copyright{copyright}% \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\expansion{==>}% \def\minus{-}% \def\pounds{pounds}% \def\point{.}% \def\print{-|}% \def\result{=>}% % % Don't write macro names. \emptyusermacros } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \ifvmode \dosubindsanitize \else \dosubindwrite \fi }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % % ..., ready, GO: % \def\dosubindsanitize{% % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \skip0 = \lastskip \edef\lastskipmacro{\the\lastskip}% \count255 = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\skip0 glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\skip0 \fi % \dosubindwrite % \ifx\lastskipmacro\zeroskipmacro % if \lastskip was zero, perhaps the last item was a % penalty, and perhaps it was >=10000, e.g., a \nobreak. % In that case, we want to re-insert the penalty; since we % just inserted a non-discardable item, any following glue % (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\count255>9999 \nobreak \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\skip0 \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \penalty -300 % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% \vskip .33\baselineskip plus .1\baselineskip % % Do our best not to break after the initial. \nobreak }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this frozes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#1}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. % However, they are not reliable, because we don't use marks. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % \message{\putwordChapter\space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % \def\appendixnum{\putwordAppendix\space \appendixletter}% \message{\appendixnum}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% \pchapsepmacro {% \chapfonts \rm % % Have to define \thissection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\thissection{#1}% \gdef\thischaptername{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \def\thischapter{#1}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \xdef\thischapter{}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. And we don't % use \thissection because that changes with each section. % \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert space above the heading. \csname #2headingbreak\endcsname % % Only insert the space after the number if we have a section number. \def\sectionlevel{#2}% \def\temptype{#3}% % \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\thissection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \thissection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\thissection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\thissection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chfplain. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chfplain. \donoderef{#3}% % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This \nobreak is purely so the last item on the list is a \penalty % of 10000. This is so other code, for instance \parsebodycommon, can % check for and avoid allowing breakpoints. Otherwise, it would % insert a valid breakpoint between: % @section sec-whatever % @deffn def-whatever \nobreak } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks \toks0 = {#2}% \toks2 = \expandafter{\lastnode}% \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% {\the\toks2}{\noexpand\folio}}}% \temp \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \def\thischapter{}% \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 % We can't do this, because then an actual ^ in a section % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \input \jobname.toc \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \jobname.toc \ifeof 1 \else \input \jobname.toc \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing=\comment \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes % @cartouche defines \nonarrowing to inhibit narrowing % at next level down. \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \fi \let\exdent=\nofillexdent } % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \envdef\quotation{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % [Knuth] pp. 380,381,391 % Disable Spanish ligatures ?` and !` of \tt font \begingroup \catcode`\`=\active\gdef`{\relax\lq} \endgroup % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \catcode`\`=\active \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup \def\setupverbatim{% \nonfillstart \advance\leftskip by -\defbodyindent % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \catcode`\`=\active \tabexpand % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. Many commands won't be % allowed in this context, but that's ok. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\begingroup % Define a command to swallow text until we reach `@end copying'. % \ is the escape char in this texinfo.tex file, so it is the % delimiter for the command; @ will be the escape char when we read % it, but that doesn't matter. \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}% % % We must preserve ^^M's in the input file; see \insertcopying below. \catcode`\^^M = \active \docopying } % What we do to finish off the copying text. % \def\enddocopying{\endgroup\ignorespaces} % @insertcopying. Here we must play games with ^^M's. On the one hand, % we need them to delimit commands such as `@end quotation', so they % must be active. On the other hand, we certainly don't want every % end-of-line to be a \par, as would happen with the normal active % definition of ^^M. On the third hand, two ^^M's in a row should still % generate a \par. % % Our approach is to make ^^M insert a space and a penalty1 normally; % then it can also check if \lastpenalty=1. If it does, then manually % do \par. % % This messes up the normal definitions of @c[omment], so we redefine % it. Similarly for @ignore. (These commands are used in the gcc % manual for man page generation.) % % Seems pretty fragile, most line-oriented commands will presumably % fail, but for the limited use of getting the copying text (which % should be quite simple) inserted, we can hope it's ok. % {\catcode`\^^M=\active % \gdef\insertcopying{\begingroup % \parindent = 0pt % looks wrong on title page \def^^M{% \ifnum \lastpenalty=1 % \par % \else % \space \penalty 1 % \fi % }% % % Fix @c[omment] for catcode 13 ^^M's. \def\c##1^^M{\ignorespaces}% \let\comment = \c % % % Don't bother jumping through all the hoops that \doignore does, it % would be very hard since the catcodes are already set. \long\def\ignore##1\end ignore{\ignorespaces}% % \copyingtext % \endgroup}% } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check for penalty 10002 (inserted by % \defargscommonending) instead of 10000, since the sectioning % commands insert a \penalty10000, and we don't want to allow a break % between a section heading and a defun. \ifnum\lastpenalty=10002 \penalty2000 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty 10002 % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remainnig is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \let\var=\ttslanted #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } \def\badparencount{% \errmessage{Unbalanced parentheses in @def}% \global\parencount=0 } \def\badbrackcount{% \errmessage{Unbalanced square braces in @def}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1\endinput}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex \catcode`\@=0 \catcode`\\=\other \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? \def\macrolist{} % List of all defined macros in the form % \do\macro1\do\macro2... % Utility routines. % This does \let #1 = #2, except with \csnames. \def\cslet#1#2{% \expandafter\expandafter \expandafter\let \expandafter\expandafter \csname#1\endcsname \csname#2\endcsname} % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\macrobodyctxt{% \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\{=\other \catcode`\}=\other \catcode`\@=\other \catcode`\^^M=\other \usembodybackslash} \def\macroargctxt{% \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\@=\other \catcode`\\=\other} % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% % Add the macroname to \macrolist \toks0 = \expandafter{\macrolist\do}% \xdef\macrolist{\the\toks0 \expandafter\noexpand\csname\the\macname\endcsname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\do\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx#1\relax % remove this \else \noexpand\do \noexpand #1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \next} % We want to disable all macros during \shipout so that they are not % expanded by \write. \def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% \edef\next{\macrolist}\expandafter\endgroup\next} % For \indexnofonts, we need to get rid of all macros, leaving only the % arguments (if present). Of course this is not nearly correct, but it % is the best we can do for now. makeinfo does not expand macros in the % argument to @deffn, which ends up writing an index entry, and texindex % isn't prepared for an index sort entry that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \def\emptyusermacros{\begingroup \def\do##1{\let\noexpand##1=\noexpand\asis}% \edef\next{\macrolist}\expandafter\endgroup\next} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \thissection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \turnoffactive \otherbackslash \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\thissection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \writexrdef{pg}{\folio}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf \leavevmode \getfilename{#4}% {\turnoffactive \otherbackslash \ifnum\filenamelength>0 \startlink attr{/Border [0 0 0]}% goto file{\the\filename.pdf} name{#1}% \else \startlink attr{/Border [0 0 0]}% goto name{\pdfmkpgn{#1}}% \fi }% \linkcolor \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \otherbackslash \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive \otherbackslash % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR#1\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readauxfile \global\havexrefstrue \fi \closein 1 } \def\readauxfile{\begingroup \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count 1=128 \def\loop{% \catcode\count 1=\other \advance\count 1 by 1 \ifnum \count 1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 % \input \jobname.aux \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarily, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\bigskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \line\bgroup\hss \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \hss \egroup \bigbreak \fi % space after the image \endgroup} % @float FLOATTYPE,LOC ... @end float for displayed figures, tables, etc. % We don't actually implement floating yet, we just plop the float "here". % But it seemed the best name for the future. % \envparseargdef\float{\dofloat #1,,,\finish} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \thissection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\thissection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline\thiscaption \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies \turnoffactive \otherbackslash \immediate\write\auxfile{@xrdef{\floatlabel-lof}{% \floatident \ifx\thisshortcaption\empty \ifx\thiscaption\empty \else : \thiscaption \fi \else : \thisshortcaption \fi }}% }% \fi % % Space below caption, if we printed anything. \ifx\printedsomething\empty \else \vskip\parskip \fi \egroup % end of \vtop \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \newtoks\appendtomacroAtoks \newtoks\appendtomacroBtoks \def\appendtomacro#1#2{% \appendtomacroAtoks = \expandafter{#1}% \appendtomacroBtoks = {#2}% \edef#1{\the\appendtomacroAtoks \the\appendtomacroBtoks}% } % @caption, @shortcaption are easy. % \long\def\caption#1{\checkenv\float \def\thiscaption{#1}} \def\shortcaption#1{\checkenv\float \def\thisshortcaption{#1}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \thissection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % and i18n. % @documentlanguage is usually given very early, just after % @setfilename. If done too late, it may not override everything % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file if it exists. \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \input txi-#1.tex \fi \closein 1 \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? In the current directory should work if nowhere else does.} % @documentencoding should change something in TeX eventually, most % likely, but for now just recognize it. \let\documentencoding = \comment % Page size parameters. % \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; 3) voffset; % 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) % physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}% {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.5 (or so) format. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {\voffset}{.25in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{51\baselineskip}{160mm} {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1 \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. {\catcode`\\=\active @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} } % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\backslashcurfont}} \catcode`\\=\active % Used sometimes to turn off (effectively) the active characters % even after parsing them. @def@turnoffactive{% @let"=@normaldoublequote @let\=@realbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @unsepspaces } % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. (Thus, \ is not expandable when this is in % effect.) % @def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\{ in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also back turn on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gnubiff-2.2.16/config/config.guess0000755000175000017500000012502012474422124013732 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2004-03-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pegasos:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` # GNU/KFreeBSD systems have a "k" prefix to indicate we are using # FreeBSD's kernel, but not the complete OS. case ${LIBC} in gnu) kernel_only='k' ;; esac echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp 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` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnubiff-2.2.16/po/0000775000175000017500000000000012474430471010651 500000000000000gnubiff-2.2.16/po/pt_BR.po0000644000175000017500000007364312474422124012146 00000000000000# translation of gnubiff.po to Português-BR # Portuguese/Brazil translation of gnubiff. # Copyright (C) 2006 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # # Gunther Furtado , 2006. # Felipe Augusto van de Wiel (faw) , 2006. # msgid "" msgstr "" "Project-Id-Version: gnubiff\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2006-10-28 18:15-0200\n" "Last-Translator: Gunther Furtado \n" "Language-Team: l10n portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "pt_BR utf-8\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[A codificação \"%s\" desta mensagem não pode ser decodificada]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Não é possível decodificar esta linha de cabeçalho]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "" "[Não é possível converter os conjuntos de caracteres \n" "(de \"%s\" para \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Iniciar miniaplicativo do gnome a partir da linha de comando " #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Arquivo de configuração a utilizar" #: ../src/gnubiff.cc:98 msgid "file" msgstr "arquivo" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Pular o processo de configuração" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Iniciar o gnubiff sem GUI" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Colocar ícone do gnubiff na bandeja do sistema" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Mostrar versão e sair" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Opções gerais de linha de comando:" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Opções para depuração:" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Arquivo de configuração (%s) não encontrado!" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Arquivo de configuração carregado a partir da nova versão \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Arquivo de configuração carregado a partir da antiga versão \"%s\"." #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Tentando converter todas opções." #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Todas opções convertidas com sucesso." #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Algumas opções convertidas com sucesso. As seguintes opções devem ser " "atualizadas manualmente: %s." #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Não é possível abrir seu arquivo de configuração (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Não é possível criar analizador XML para o arquivo de configuração" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Não foi encontrada definição de caixa de correio \n" "em seu arquivo de configuração (%s)" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Formato de parâmetro ilegal no arquivo de configuração" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Nenhum protocolo especificado para a caixa de correio %d" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Não é possível criar discussão: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "caixa de correio %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "" "[Não é possível analizar o tipo de conteúdo da linha de \n" "cabeçalho]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "" "[Não é possível analizar a codificação de transferência de conteúdo da linha " "de cabeçalho]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Mensagem subdividida malformada]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "" "[Não é possível encontrar o começo da primeira parte em mensagem \n" "subdividida]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Esta mensagem têm um tipo de conteúdo não suportado: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Erro ao compilar uma expressão regular.\n" "Expressão regular: %s\n" "Mensagem de erro: %s" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Não é possível ordenar mensagens por \"%s\"" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Não é possível conectar a %s pela porta %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Falha ao carregar o certificado (%s) para %s" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Não é possível identificar o servidor remoto (%s na porta %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Não é possível escrever em %s na porta %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Não é possível ler de %s na porta %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Não foi possível definir o tempo máximo de leitura na conexão: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Não é possível abrir %s." #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "" "[Esta mensagem não tem nenhuma parte com tipo de conteúdo\n" "suportado]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Não é possível selecionar diretório %s no servidor %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Não é possível obter confirmação de %s na porta %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "" "[%d] Servidor não envia \"%s\" resposta ou confirmação de \n" "recebimento não sinalizada" #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Servidor não envia resposta não marcada \"%s\"" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Servidor fecha a conexão imediatamente:%s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Falha interna do servidor ou erro desconhecido:%s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Alerta do servidor:%s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Não é possível abrir o diretório de novas mensagens (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Senha vazia" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Mensagem de erro do servidor POP3:%s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Não foi recebida resposta positiva do servidor POP3" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Seu servidor pop não parece aceitar o protocolo apop (\"timestamp\" \n" "não fornecido)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problema com a criptografia que deveria ter sido detectado \n" "no momento da configuração." #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Opção desconhecida \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Não é possível definir opção \"%s\" como \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Não é possível encontrar o dispositivo especificado (\"%s\") \n" "dentro da estrutura xml (\"%s\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "sem mensagens" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Não é possível construir a interface.\n" "\n" "Nome: %s\n" "Caminho: %s\n" "\n" "Certifique-se de que o pacote tenha sido instalado corretamente." #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect requer um \"gmodule\" funcional" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Não é possível encontrar o controlador da sinal '%s'" #: ../src/ui-applet.cc:217 msgid " unknown" msgstr " desconhecido" #: ../src/ui-applet.cc:222 msgid " error" msgstr " erro" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " checando..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Caixa de correio" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Tipo" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Estado" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Segurança" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Nenhuma caixa de correio selecionada" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Opção" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Valor" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "Começar (_S)" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "Parar (_S)" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Procurar por uma imagem de correio novo" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Entre com seu nome de usuário e senha para a conta de correio '%s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "" "Não foi possível verificar a identidade de %s como um site \n" "confiável.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "O certificado do site é incompleto ou esta conexão é com um site simulando " "ser %s, possivelmente para tentar obter sua senha" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Autodetectar" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Arquivo ou Diretório" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Usuário/Senha" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Usuário/Senha (apop) criptografados" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL com certificado" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Procurar por um arquivo ou diretório" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Procurar por um arquivo de certificado" #: ../src/ui-popup.cc:195 msgid "From" msgstr "De" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Assunto" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Data" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Você acabou de descobrir um erro interno desconhecido. Por favor, envie um " "relatório de erro detalhado para \"gnubiff-bugs@lists.sourceforge.net\". \n" "\n" "Informação adicional:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Sobre" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Marcar caixas de correio como lidas" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Preferências..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Executar o comando" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Programa de aviso de novas mensagens" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "Sobre" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff é um programa de aviso de novas mensagens." #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 #, fuzzy msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" "Gnubiff faz parte do projeto GNU.\n" "Ele é distribuído sob os auspícios do GNU.\n" "\n" "Este programa é um software livre, você pode redistribui-lo e/ou modifica-lo " "dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação " "do Software Livre (FSF), na versão 2 da LIcença ou (na sua opnião) em " "qualquer versão posterior.\n" "\n" "Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA " "GARANTIA, sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou " "APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNUpara maiores " "detalhes.\n" "\n" "Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este " "programa, se não, escreva para a Fundação do Software Livre (FSF) Inc., 51 " "Franklin St, Fifth Floor, Boston, MA 02110, USA.\n" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Iniciar comando" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "Sair (_Q)" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "dica" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Comandos" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Modo avançado de edição" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Geral" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Cabeçalhos" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Layout" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Caixas de correio" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Opção quando houver nova(s) mensagem(ns)" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Opção quando não houver mensagens" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Este programa é parte do projeto GNU,\n" " Publicado sob os auspícios do GNU." #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Os desenvolvedores podem ser contatados via \n" "gnubiff-devel@lists.sourceforge.net. \n" "\n" "Os relatórios de erro devem ser remetidos a \n" "gnubiff-bugs@lists.sourceforge.net. \n" "" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" "Aqui está uma lista das pessoas que traduziram o gnubiffpara os " "diversos idiomas (tradutores de versões anteriores estãomarcados com um " "asterisco):" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Muitas pessoas contribuíram com o gnubiff\n" " - relatando problemas\n" " - sugerindo vários melhoramentos\n" " - enviando código\n" "Aqui está uma lista destas pessoas:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Geometria do miniaplicativo" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Miniaplicativo ou Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "Navega_r..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Buscar um arquivo de imagem" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Colaboradores" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Créditos" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Desenvolvedores" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Editar opção" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Avançado" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Nome do arquivo de imagem" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Listar todas as opções." #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Lista de opções, por tipo e valores atuais. Para editar uma opção dê um " "duplo clique no seu valor." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Caixas de correio" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Mantenedores" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Número máximo de cabeçalhos a exibir" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Janela popup" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Geometria da janela popup" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "" "Procurar pelas opções (exibidas) que contenham a string na entrada de texto." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Retornar ao valor padrão" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Mostrar _imagem:" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Mostrar _texto:" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Mostrar i_magem:" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Mostrar t_exto:" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Linha a ser procurada." #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" "Texto a ser exibido (%d e %D é o número de novas mensagens, %d é completado " "com zeros à esquerda). Marcação Pango poderá ser usada." #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Comando a executar quando chegarem novas mensagens" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Comando a executar quando o ícone recebe um clique-duplo" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "O diálogo de edição para todas as opções que o gnubiff usa internamente pode " "ser habilitado aqui. Logo, é possível alterar o valor das opções para as " "quais nenhum dispositivo gráfico é oferecido. Uma breve descrição de cada " "opção está disponível.\n" "Alerta: Alterar estas opções pode fazer com que o gnubiff aja de " "maneira imprópria ou que problemas de segurança apareçam." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Fonte a usar para mostrar informação" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Tempo de exibição da janela popup" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Alternar opção" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Tradutores" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Usar _decoração" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Usar _geometria:" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "Opção de realizar um clique-_duplo:" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Quando chegar uma _nova mensagem:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Opção de editar opções no modo avançado" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Opção de mostrar um texto" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Opção de exibir uma imagem" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Opção de exibir a janela popup" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Opção de restringir o número de cabeçalhos exibidos" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Opção de mostrar uma imagem" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Opção de exibir a aba avançada. Nota: A desativação desta opção só pode " "ser \n" "revertida através da edição manual do arquivo de configuração!" #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Opção de usar formato para os cabeçalhos" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Opção de usar geometria" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Opção de usar a decoração do gerenciador de janelas" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[tamanho máx remetente]:[tamanho máx assunto]:[tamanho máx data]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "Navegar... (_B)" #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "Exibir por (_d)" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Editar opções no modo avançado" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Fonte:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Formato:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Restringir mensagens coletadas a" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Restringir número a" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "Mo_strar aba de edição avançada" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "Preferências do gnubiff" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "cabeçalho(s)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "mensagem(ns)" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "segundo(s)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Detalhes" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "En_dereço:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Autenticação: (_h)" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Explorar... (_w)" #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tificado:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Arquivo do certificado" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Porta de conexão para se conectar ao servidor" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Conexão:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Atraso: (_y)" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Diretório da caixa de correio" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Propriedades da caixa de correio" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Nome da caixa de correio" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Outra porta de conexão" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Outro diretório de caixa de correio" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Porta de conexão padrão" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Diretório padrão da caixa de correio" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "A quantidade de tempo de espera entre as checagens de e-mail ou entre as " "tentativas quando a conexão é perdida" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Sua senha no servidor de e-mail" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Seu nome de usuário no servidor de e-mail" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "Caixa de correio: (_M)" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "_Nome:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "Senha: (_P)" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Tipo:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "Nome de _Usuário:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "_other" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "arquivo ou diretório ou nome de servidor" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minutos" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "out_ro" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "segundos" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "pa_drão" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "p_adrão" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Autenticação" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Sua senha no servidor" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Seu nome de usuário no servidor" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Endereço" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Dirigido a" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Aceitar" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Não é possível certificar o servidor" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Detalhes do certificado" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nome Comum" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "País" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Localidade" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organização" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Departamento" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Estado ou Província" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Data" #: ../ui/popup.glade.h:2 msgid "From" msgstr "De" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Assunto" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "conteúdo da mensagem" gnubiff-2.2.16/po/fi.po0000664000175000017500000007161512474424326011543 00000000000000# Finnish messages for gnubiff. # Copyright © 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Jorma Karvonen , 2012. # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.2.11\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2009-04-05 18:19+0200\n" "PO-Revision-Date: 2012-11-27 23:10+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.4\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Sähköpostiviestin koodauksen ”%s” avaaminen epäonnistui]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Otsakerivin koodauksen avaaminen epäonnistui]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Merkistön muuntaminen (merkistöstä ”%s” merkistöön ”utf-8”) epäonnistui]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Käynnistä gnome-sovelma komentoriviltä" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Käytettävä asetustiedosto" #: src/gnubiff.cc:98 msgid "file" msgstr "tiedosto" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Ohita asetusprosessi" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Käynnistä gnubiff ilman graafista käyttöliittymää" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Sijoita gnubiff-kuvake ilmoitusalueelle" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Tulosta versiotiedot ja poistu" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Yleisiä komentorivivalitsimia:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Valitsimet vianjäljitystä varten:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Asetustiedostoa (%s) ei löytynyt!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Ladattiin asetustiedosto uudemmasta gnubiff-versiosta ”%s”." #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Ladattiin asetustiedosto vanhemmasta gnubiff-versiosta ”%s”." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Yritetään muuntaa kaikki valitsimet." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Kaikkien valitsimien muuntaminen onnistui." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Joidenkin valitsimien muuntaminen onnistui. Seuraavat valitsimet on päivitettävä manuaalisesti: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Asetustiedostosi (%s) avaus epäonnistui" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "XML-jäsentäjän luominen asetustiedostolle epäonnistui" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Asetustiedostostasi (%s) ei löytynyt sähköpostilaatikkomäärittelyä" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Virheellinen parametrimuoto asetustiedostossa" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Sähköpostilaatikolle %d ei ole määritelty yhteyskäytäntöä" #: src/mailbox.cc:143 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Säikeen luominen epäonnistui: %s" #: src/mailbox.cc:315 #, c-format msgid "mailbox %d" msgstr "sähköpostilaatikko %d" #: src/mailbox.cc:640 msgid "" msgstr "" #: src/mailbox.cc:641 msgid "" msgstr "" #: src/mailbox.cc:642 msgid "" msgstr "" #: src/mailbox.cc:696 msgid "[Cannot parse content type header line]" msgstr "[Sisältötyyppiotsakerivin jäsentäminen epäonnistui]" #: src/mailbox.cc:718 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Sisältösiirtokoodausotsakerivin jäsentäminen epäonnistui]" #: src/mailbox.cc:759 msgid "[Malformed multipart message]" msgstr "[Vääränmuotoinen moniosainen viesti]" #: src/mailbox.cc:767 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Moniosaisen viestin ensimmäisen osan alun löytäminen epäonnnistui]" #: src/mailbox.cc:813 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Viestin sisältötyyppiä ”%s/%s” ei tueta]" #: src/mailbox.cc:1215 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Virhe käännettäessä säännöllistä lauseketta.\n" "Säännöllinen lauseke: %s\n" "Virheviesti: %s" #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Käyttäjän ”%s” sähköpostiviestien lajittelu epäonnistui" #: src/socket.cc:123 src/socket.cc:152 src/socket.cc:180 src/socket.cc:189 #: src/socket.cc:198 src/socket.cc:211 src/socket.cc:241 src/socket.cc:250 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Yhdistäminen verkkokoneeseen %s portissa %d epäonnistui" #: src/socket.cc:226 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Varmenteen (%s) lataaminen verkkokoneelle %s epäonnistui" #: src/socket.cc:263 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Etäpään verkkokoneen (%s portissa %d) tunnistaminen epäonnistui" #: src/socket.cc:348 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Kirjoittaminen verkkokoneeseen %s portissa %d epäonnistui" #: src/socket.cc:419 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Lukeminen verkkokoneesta %s portissa %d epäonnistui" #: src/socket.cc:442 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Lukemisen aikakatkaisun asettaminen pistokkeeseen epäonnistui: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Tiedoston %s avaaminen epäonnistui." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Viestissä ei ole yhtään tuettua sisältötyyppiosaa]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Kansion %s valitseminen verkkokoneella %s epäonnistui" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Kuittauksen saaminen osoitteesta %s portissa %d epäonnistui" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Palvelin ei lähetä tunnisteetonta ”%s”-vastausta tai -kuittausta" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Palvelin ei lähetä tunnisteetonta ”%s”-vastausta" #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Palvelin sulkee yhteyden heti:%s" #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Sisäinen palvelinhäiriö tai tuntematon virhe:%s" #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Varoitus palvelimelta:%s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Uuden sähköpostihakemistom (%s) avaaminen epäonnistui" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Tyhjä salasana" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Virheviesti POP3-palvelimelta:%s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Ei saatu positiivista vastausta POP3-palvelimelta" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Pop-palvelimesi ei tunnu hyväksyvän apop-yhteyskäytäntöä (aikaleimaa ei tarjota)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Salauksessa on pulma, joka olisi pitänyt havaita asetusaikana" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Tuntematon valitsin ”%s”" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Valitsimen ”%s” arvoksi ei voida asettaa ”%s”" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Määritellyn käyttöliittymäkomponentin (”%s”) löytäminen xml-rakenteen (”%s”) sisältä epäonnistui" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "ei sähköpostia" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Käyttöliittymän rakentaminen epäonnistui.\n" "\n" "Nimi: %s\n" "Polku: %s\n" "\n" "Varmista, että pakkauksesi on asennettu oikein." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "Graafisen käyttöliittymän yhteys vaatii toimivaa gmodule-moduulia" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Ei kyetty löytämään signaalikäsittelijää ’%s’." #: src/ui-applet.cc:217 msgid " unknown" msgstr " tuntematon" #: src/ui-applet.cc:222 msgid " error" msgstr " virhe" #: src/ui-applet.cc:231 msgid " checking..." msgstr " tarkistetaan…" #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Sähköpostilaatikko" #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Tyyppi" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Tila" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Turvallisuus" #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Sähköpostilaatikkoa ei ole valittu" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Valitsin" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Arvo" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "Käynni_stä" #: src/ui-preferences.cc:615 ui/preferences.glade:2176 msgid "_Stop" msgstr "_Lopeta" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Selaa uutta sähköpostikuvaa" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Kirjoita käyttäjätunnuksesi ja salasanasi sähköpostilaatikolle ’%s’" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Sivuston %s identiteetin varmistaminen turvallisena webbisivustona epäonnistui.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Joko sivuston varmenne on vaillinainen tai olet yhteydessä sivustoon, joka teeskentelee olevansa %s, ja yrittää ehkä kalastella salasanaasi" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Tunnista automaattisesti" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Tiedosto tai kansio" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Käyttäjä/Salasana" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Salattu käyttäjä/Salasana (apop)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL varmenteella" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Selaa tiedostoa tai kansiota" #: src/ui-properties.cc:323 ui/properties.glade:616 msgid "Browse for a certificate file" msgstr "Selaa varmennetiedostoa" #: src/ui-popup.cc:195 msgid "From" msgstr "Lähettäjä" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Aihe" #: src/ui-popup.cc:207 msgid "Date" msgstr "Päivämäärä" #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Löysit juuri tuntemattoman sisäisen virheen. Lähetä yksityiskohtainen vikailmoitus osoitteeseen ”gnubiff-bugs@lists.sourceforge.net”.\n" "\n" "Lisätietoja:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Tiedot" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade:79 msgid "Mark mailboxes read" msgstr "Merkitse sähköpostilaatikot luetuiksi" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Asetukset…" #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Suorita komento" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Sähköpostin ilmoitusohjelma" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade:7 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade:6 msgid "tooltip" msgstr "työkaluvihje" #: ui/applet-gtk.glade:64 msgid "Start command" msgstr "Käynnistyskomento" #: ui/applet-gtk.glade:94 msgid "About" msgstr "Tietoja" #: ui/applet-gtk.glade:114 msgid "_Quit" msgstr "_Lopeta" #: ui/applet-gtk.glade:131 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff on sähköpostin ilmoitusohjelma." #: ui/applet-gtk.glade:133 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Gnubiff on osa GNU-projektia.\n" "Se julkaistaan GNU aegis -ohjelman mukana.\n" "\n" "Tämä on vapaa ohjelmisto; voit jakaa sitä edelleen ja/tai muokata sitä Free Software Foundationin julkaiseman GNU General Public License-ehtojen alla; joko Lisenssin version 3, tai (valintasi mukaan) minkä tahansa myöhäisemmän version alla.\n" "\n" "Tätä ohjelmaa jaellaan toivossa, että se on hyödyllinen, mutta ILMAN MITÄÄN TAKUUTA; ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA tai SOPIVUUDESTA TIETTYYN TARKOITUKSEEN. Lisätietoja GNU General Public License.\n" "\n" "Sinun pitäisi vastaanottaa GNU General Public License-kopion tämän ohjelman mukana; jos näin ei ole, katso osoitetta http://www.gnu.org/licenses/.\n" "\n" "Poikkeuksena GNU General Public License-lisenssiin gnubiff-ohjelman jakelu linkitettynä OpenSSL-kirjastoon, katso README-tiedosto." #: ui/preferences.glade:6 msgid "gnubiff preferences" msgstr "gnubiff-asetukset" #: ui/preferences.glade:49 msgid "_Restrict collected mail to" msgstr "_Rajoita kerätyn sähköpostin määräksi" #: ui/preferences.glade:76 msgid "mail(s)" msgstr "sähköpostit" #: ui/preferences.glade:107 msgid "The command to run when the icon is double-clicked" msgstr "Komento, joka suoritetaan kaksoisnapsautettaessa kuvaketta" #: ui/preferences.glade:122 msgid "The command to run when new mail arrives" msgstr "Komento, joka suoritetaan uuden viestin saapuessa" #: ui/preferences.glade:137 msgid "When _new mail:" msgstr "Ku_n uusi viesti:" #: ui/preferences.glade:199 msgid "Commands" msgstr "Komennot" #: ui/preferences.glade:219 msgid "Mailboxes" msgstr "Sähköpostilaatikot" #: ui/preferences.glade:236 msgid "General" msgstr "Yleistä" #: ui/preferences.glade:249 msgid "When _double-clicked:" msgstr "Kun _kaksoisnapsautetaan:" #: ui/preferences.glade:322 msgid "Mailboxes" msgstr "Sähköpostilaatikot" #: ui/preferences.glade:367 ui/preferences.glade:751 msgid "Whether to use window manager decoration" msgstr "Käytetäänkö ikkunan kehyksiä" #: ui/preferences.glade:368 ui/preferences.glade:752 msgid "Use _decoration" msgstr "Käytä ke_hyksiä" #: ui/preferences.glade:386 ui/preferences.glade:770 msgid "The font to use to display information" msgstr "Tietojen näyttämiseen käytetty kirjasin" #: ui/preferences.glade:403 ui/preferences.glade:860 msgid "_Font:" msgstr "Ki_rjasin:" #: ui/preferences.glade:424 msgid "When no mail" msgstr "Kun sähköpostia ei ole" #: ui/preferences.glade:445 msgid "When new mail" msgstr "Uusi viesti on saapunut" #: ui/preferences.glade:462 ui/preferences.glade:807 msgid "Layout" msgstr "Asettelu" #: ui/preferences.glade:475 msgid "Whether to display an image" msgstr "Näytetäänkö kuvat" #: ui/preferences.glade:476 msgid "Show i_mage:" msgstr "Näytä ku_va:" #: ui/preferences.glade:495 ui/preferences.glade:535 msgid "Whether to display a text" msgstr "Näytetäänkö teksti" #: ui/preferences.glade:496 msgid "Show t_ext:" msgstr "Näytä _teksti:" #: ui/preferences.glade:515 msgid "Whether to show an image" msgstr "Näytetäänkö kuva" #: ui/preferences.glade:516 msgid "Show _image:" msgstr "Näytä ku_va:" #: ui/preferences.glade:536 msgid "Show _text:" msgstr "Näytä tek_sti:" #: ui/preferences.glade:555 ui/preferences.glade:840 msgid "Whether to use geometry" msgstr "Käytetäänkö geometriaa" #: ui/preferences.glade:556 ui/preferences.glade:841 msgid "Use _geometry:" msgstr "Käytä _geometriaa:" #: ui/preferences.glade:575 msgid "Applet geometry" msgstr "Sovelmageometria" #: ui/preferences.glade:590 ui/preferences.glade:639 msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Teksti näytettäväksi (%d ja %D ovat uusien viestien lukumääriä, %d on täydennetty nollalla). Voidaan käyttää Pango-merkintäkieltä." #: ui/preferences.glade:605 ui/preferences.glade:654 msgid "Browse for an image file" msgstr "Selaa kuvatiedostoa" #: ui/preferences.glade:606 msgid "B_rowse..." msgstr "Sel_aa…" #: ui/preferences.glade:624 ui/preferences.glade:673 msgid "Image filename" msgstr "Kuvatiedoston nimi" #: ui/preferences.glade:655 ui/properties.glade:295 msgid "_Browse..." msgstr "S_elaa…" #: ui/preferences.glade:694 msgid "Applet or Biff" msgstr "Sovelma tai Biff" #: ui/preferences.glade:791 msgid "Headers" msgstr "Otsakkeet" #: ui/preferences.glade:820 msgid "Whether to display the popup window" msgstr "Näytetäänkö ponnahdusikkuna" #: ui/preferences.glade:821 msgid "_Display for" msgstr "Näytä koh_de" #: ui/preferences.glade:877 msgid "header(s)" msgstr "otsakkeet" #: ui/preferences.glade:892 msgid "Maximum number of headers to display" msgstr "Näytettävien otsakkeiden enimmäismäärä" #: ui/preferences.glade:909 msgid "Whether to restrict number of displayed headers" msgstr "Rajoitetaanko näytettävien otsakkeiden määrää" #: ui/preferences.glade:910 msgid "_Restrict number to" msgstr "_Rajoita määrä arvoon" #: ui/preferences.glade:929 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[lähettäjän enimmäiskoko]:[aiheen enimmäiskoko]:[päivämäärän enimmäiskoko]" #: ui/preferences.glade:944 msgid "Whether to use format for header" msgstr "Käytetäänkö otsakkeille muotoilua" #: ui/preferences.glade:945 msgid "_Format:" msgstr "_Muotoilu:" #: ui/preferences.glade:964 msgid "Popup geometry" msgstr "Ponnahdusikkunageometria" #: ui/preferences.glade:979 msgid "Time to display popup window" msgstr "Ponnahdusikkunan näyttöaika" #: ui/preferences.glade:996 msgid "second(s)" msgstr "sekuntia" #: ui/preferences.glade:1016 ui/popup.glade:7 msgid "Popup" msgstr "Ponnahdusikkuna" #: ui/preferences.glade:1062 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "Muokkausikkunat kaikille gnubiff-ohjelman sisäisesti käyttämille valitsimelle voidaan ottaa käyttöön tässä. Joten on mahdollista vaihtaa arvo niille valitsimille, joille ei tarjota käyttöliittymäkomponenttia. Jokaisesta valitsimesta tarjotaan lyhyt kuvaus.\n" "Varoitus: Näiden valitsimien vaihtaminen voi aiheuttaa sen, että gnubiff ei toimi oikein tai tuloksena on turvallisuuspulmia." #: ui/preferences.glade:1080 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Näytetäänkö asiantuntijavälilehti. Huomaa: Tämän valitsimen ottaminen pois käytöstä voidaan palauttaa vain muokkaamalla asetustiedostoa manuaalisesti!" #: ui/preferences.glade:1081 msgid "_Show expert tab" msgstr "_Näytä asiantuntijavälilehti" #: ui/preferences.glade:1101 msgid "Whether options can be edited in expert mode" msgstr "Voidaanko valitsimia muokata asiantuntijatilassa" #: ui/preferences.glade:1102 msgid "_Edit options in expert mode" msgstr "M_uokkaa valitsimia asiantuntijatilassa" #: ui/preferences.glade:1121 msgid "Expert editing mode" msgstr "Asiantuntijamuokkaustila" #: ui/preferences.glade:1155 msgid "List all options." msgstr "Luettele kaikki valitsimet." #: ui/preferences.glade:1171 msgid "String to be searched for." msgstr "Etsittävä merkkijono." #: ui/preferences.glade:1183 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Etsi niitä (näytettyjä) valitsimia, jotka sisältävät merkkijonon tekstirivillä." #: ui/preferences.glade:1212 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Valitsimien, niiden tyypin ja nykyisen arvon luettelo. Valitsimen muokkaamiseksi kaksoisnapsauta sen arvoa." #: ui/preferences.glade:1257 msgid "Expert" msgstr "Asiantuntija" #: ui/preferences.glade:1297 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff on osa GNU- projektia.\n" " Se julkaistaan GNU aegis -ohjelman mukana." #: ui/preferences.glade:1363 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Kehittäjiin voi ottaa yhteyttä osoitteella gnubiff-devel@lists.sourceforge.net.\n" "Viat pitäisi ilmoittaa osoitteeseen gnubiff-bugs@lists.sourceforge.net." #: ui/preferences.glade:1432 msgid "Developers" msgstr "Kehittäjät" #: ui/preferences.glade:1511 msgid "Maintainers" msgstr "Ylläpitäjät" #: ui/preferences.glade:1530 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Tässä on luettelo niistä ihmisistä, jotka ovat kotoistaneet gnubiff-ohjelmaa eri kieliin (edellisten versioiden kotoistajat on merkitty tähtimerkillä):" #: ui/preferences.glade:2048 msgid "Translators" msgstr "Kotoistajat" #: ui/preferences.glade:2065 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Monet ihmiset ovat avustaneet lisää gnubiff-ohjelmaa\n" " - ilmoittamalla pulmista\n" " - suosittelemalla erilaisia parannuksia\n" " - lähettämällä itse koodia\n" "Tässä on luettelo kyseisistä ihmisistä:" #: ui/preferences.glade:2108 msgid "Contributors" msgstr "Osallistujat" #: ui/preferences.glade:2130 msgid "Credits" msgstr "Kiitokset" #: ui/preferences.glade:2219 msgid "Set to default value" msgstr "Aseta oletusarvoon" #: ui/preferences.glade:2234 msgid "Toggle option" msgstr "Vuorotteluvalitsin" #: ui/preferences.glade:2249 msgid "Edit option" msgstr "Muokkausvalitsin" #: ui/properties.glade:7 msgid "Mailbox properties" msgstr "Sähköpostilaatikon ominaisuudet" #: ui/properties.glade:52 msgid "_Name:" msgstr "_Nimi:" #: ui/properties.glade:77 msgid "A_ddress:" msgstr "O_soite:" #: ui/properties.glade:102 msgid "Name of the mailbox" msgstr "Sähköpostilaatikon nimi" #: ui/properties.glade:124 msgid "_Type:" msgstr "_Tyyppi:" #: ui/properties.glade:174 ui/authentication.glade:52 msgid "_Username:" msgstr "_Käyttäjätunnus:" #: ui/properties.glade:199 msgid "Your username on the mail server" msgstr "Käyttäjätunnuksesi sähköpostipalvelimella" #: ui/properties.glade:221 ui/authentication.glade:77 msgid "_Password:" msgstr "Salasa_na:" #: ui/properties.glade:246 msgid "Your password on the mail server" msgstr "Salasanasi sähköpostipalvelimella" #: ui/properties.glade:274 msgid "file or folder or hostname" msgstr "tiedosto tai kansio tai tietokonenimi" #: ui/properties.glade:367 msgid "Connection:" msgstr "Yhteys:" #: ui/properties.glade:391 msgid "Connection port to connect to server" msgstr "Yhteysportti yhteydenottoon palvelimeen" #: ui/properties.glade:414 msgid "Standard connection port" msgstr "Vakio yhteysportti" #: ui/properties.glade:416 msgid "stan_dard" msgstr "vaki_o" #: ui/properties.glade:437 msgid "Other connection port" msgstr "Muu yhteysportti" #: ui/properties.glade:439 msgid "_other" msgstr "m_uu" #: ui/properties.glade:540 msgid "Aut_hentication:" msgstr "To_dentaminen" #: ui/properties.glade:594 msgid "Certificate filename" msgstr "Varmenteen tiedostonimi" #: ui/properties.glade:618 msgid "Bro_wse..." msgstr "S_elaa…" #: ui/properties.glade:637 msgid "Cer_tificate:" msgstr "_Varmenne:" #: ui/properties.glade:692 msgid "minutes" msgstr "minuuttia" #: ui/properties.glade:716 msgid "seconds" msgstr "sekuntia" #: ui/properties.glade:739 ui/properties.glade:765 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Sähköpostin tarkistamisien välinen aika tai uudelleenyritysten välinen aika kun yhteys menetetään" #: ui/properties.glade:791 msgid "Dela_y:" msgstr "V_iive:" #: ui/properties.glade:846 msgid "_Mailbox:" msgstr "Säh_köpostilaatikko:" #: ui/properties.glade:871 msgid "Mailbox folder" msgstr "Sähköpostilaatikkokansio" #: ui/properties.glade:893 msgid "Other mailbox folder" msgstr "Muu sähköpostilaatikkokansio" #: ui/properties.glade:895 msgid "othe_r" msgstr "_muu" #: ui/properties.glade:916 msgid "Standard mailbox folder" msgstr "Vakio sähköpostilaatikkokansio" #: ui/properties.glade:918 msgid "stand_ard" msgstr "va_kio" #: ui/properties.glade:951 msgid "_Details" msgstr "Yksityskoh_dat" #: ui/authentication.glade:7 msgid "Authentication" msgstr "Todentaminen" #: ui/authentication.glade:102 msgid "Your username on the server" msgstr "Käyttäjätunnuksesi palvelimella" #: ui/authentication.glade:124 msgid "Your password on the server" msgstr "Salasanasi palvelimella" #: ui/certificate.glade:7 msgid "Cannot certify server" msgstr "Palvelimen varmentaminen epäonnistui" #: ui/certificate.glade:130 msgid "Common Name" msgstr "Yleinen nimi" #: ui/certificate.glade:154 msgid "Organization" msgstr "Järjestö" #: ui/certificate.glade:178 msgid "Organization Unit" msgstr "Järjestöyksikkö" #: ui/certificate.glade:275 msgid "Issued To" msgstr "Julkaistu kohteelle" #: ui/certificate.glade:394 msgid "Address" msgstr "Osoite" #: ui/certificate.glade:418 msgid "Country" msgstr "Maa" #: ui/certificate.glade:442 msgid "Locality" msgstr "Seutu" #: ui/certificate.glade:540 msgid "State or Province" msgstr "Valtio tai provinssi" #: ui/certificate.glade:570 msgid "Certificate details" msgstr "Varmenteen yksityiskohdat" #: ui/certificate.glade:668 msgid "Accept" msgstr "Hyväksy" #: ui/popup.glade:61 msgid "mail content" msgstr "sähköpostisisältö" #: ui/popup.glade:116 msgid "From" msgstr "Lähettäjä" #: ui/popup.glade:140 msgid "Subject" msgstr "Aihe" #: ui/popup.glade:164 msgid "Date" msgstr "Päivämäärä" #~ msgid "To" #~ msgstr "Vastaanottaja" #~ msgid "[%d] line too long, security/prevdos_line_length should be increased" #~ msgstr "[%d] rivi on liian pitkä, asetusta security/prevdos_line_length pitäisi kasvattaa" gnubiff-2.2.16/po/fr_CA.po0000644000175000017500000007277312474422124012115 00000000000000# translation of fr.po to Français # French translation of gnubiff # Copyright (C) 2005 Nicolas Rougier # This file is distributed under the same license as the gnubiff package. # Nicolas Rougier , 2004, 2005. # Nicolas Rougier , 2004. # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2006-03-27 11:59+0200\n" "Last-Translator: Rougier \n" "Language-Team: Français \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[L'encodage \"%s\" ne peut être décodé]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Impossible de décoder cette ligne]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "" "[Impossible de convertir le jeu de caractères (fr \"%s\" vers \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Démarrer l'applet gnome depuis la ligne de commande" #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Fichier de configuration à utiliser " #: ../src/gnubiff.cc:98 msgid "file" msgstr "fichier" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Passer l'étape de configuration" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Démarrer gnubiff sans l'interface" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Placer l'icône de gnubiff dans le panneau système" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Afficher la version et sortir" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Options de la ligne de commande" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Options de déboggage" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Fichier de configuration (%s) non trouvé" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "" "Chargement du fichier de configuration à partir d'une nouvelle version de " "gnubiff \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "" "Chargement du fichier de configuration à partir d'une vieille version de " "gnubiff \"%s\"" #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Tentative de conversion des options" #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Tentative de conversion réussie" #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Tentative de conversion réussie pour quelques options. Les options suivantes " "doivent être manuellement converties: %s " #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Impossible d'ouvrir votre fichier de configuration (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Impossible de créer le parser XML pour le fichier de configuration" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Votre fichier de configuration n'as pas de définition de boîte aux lettres (%" "s)" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Format de paramètre illégal dans le fichier de configuration" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Pas de protocole spécifié pour la boîte aux lettres %d" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Impossible de créer le thread: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "Boîte aux lettres %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Impossible de décoder le type de la ligne d'entête]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Impossible de décoder le code de la ligne d'entête]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Message multi-parties mal formé]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Impossible de trouver la première partie du message]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Ce message possède un contenu de type non supporté: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Impossible de trier les mails avec \"%s\"" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Impossible de se connecter à %s via le port %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Impossible de charger le certificat (%s) pour %s" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Impossible d'identifier l'hôte (%s sur le port %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Impossible d'écrire à %s sur le port %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Impossible de lire depuis %s sur le port %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Impossible de régler le délai sur la socket: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Impossible d'ouvrir %s" #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Ce message de possède pas de partie avec un contenu lisible]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Impossible de sélectionner le répertoire %s sur l'hôte %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Impossible de serrer la main à %s sur le port %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "" "[%d] Le serveur n'a pas envoyé la réponse non taggée \"%s\" ni l'acquitement." #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Le serveur n'a pas envoyé la réponse non taggée \"%s\"" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Le serveur a fermé immédiatement la connexion: %s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Erreur interne sur le serveur ou alors erreur inconnue: %s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Mise en garde du serveur: %s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Inpossible d'ouvrir le répertoire (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Mot de passe vide" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Message d'erreur du serveur POP3: %s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Aucune réponse positive du serveur POP3" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Votre serveur ne semble pas accepter le protocol apop (pas de tampon)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problème de cryptographie qui aurait du être détecté durant la " "configuration" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Option inconnue \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Impossible de mettre l'option \"%s\" à \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Impossible de trouver le widget spécifié (\"%s\") dans la structure xml (\"%s" "\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "Aucun courrier" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "gnubiff ne peut pas charger son fichier interface.\n" "\n" "Nom: %s\n" "Chemin: %s\n" "Assurez vous que gnubiff a été installé correctement" #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect requiert la librairie gmodule" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Handler '%s' non trouvé." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr "inconnu" #: ../src/ui-applet.cc:222 msgid " error" msgstr "erreur" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " consultation..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Boîte aux lettres" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Type" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Status" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Sécurité" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Pas de boîte aux lettres séléctionnée" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Option" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Valeur" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "_Démarrer" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Stopper" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Chercher le fichier image" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "" "Entrez votre nom de login et votre mot de passe pour la boîte aux lettres '%" "s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Impossible de vérifier que l'hôte %s est sûr.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "Soit le certificat est incomplet ou bien vous êtes connecté à un site " "prétendant être %s vraisemblablement pour essayer d'obtenir votre mot de " "passe" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Autodetection" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Fichier ou Répertoire" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Utilisateur/Mot de Passe" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Utilisateur/Mot de pass encrypté (apop)" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL avec certificat" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Chercher une fichier ou un répertoire" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Chercher un certificat" #: ../src/ui-popup.cc:195 msgid "From" msgstr "De" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Sujet" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Date" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Vous venez de trouver une erreur interne. Veuillez s'il vous plaît envoyer " "un rapport de bug à \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Information additionelle:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "info" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Marquer le courrier comme étant lu" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Préférences..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Exécuter la commande" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Programme de notification de courrier" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "A propos" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff est un programme de notification de courrier" #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 #, fuzzy msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" "Gnubiff fait partie du projet GNU\n" "Il est distribué sous l'égide de GNU\n" "\n" "Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon " "les termes de la Licence Publique Générale GNU publiée par la Free Software " "Foundation (version 2 ou bien toute autre version ultérieure choisie par " "vous).\n" "\n" "Ce programme est distribué car potentiellement utile, mais SANS AUCUNE " "GARANTIE, ni explicite ni implicite, y compris les garanties de " "commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la " "Licence Publique Générale GNU pour plus de détails.\n" "\n" "Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même " "temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software " "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-" "Unis.\n" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Exécuter la commande" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "_Quitter" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "truc" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Commandes" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Mode éditeur expert" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Général" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Entêtes" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Aspect" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Boîtes aux lettres" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Si nouveau courrier" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Absence de courrier" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" "Ce programme fait partie du projet GNU\n" "il est distribué sous l'égide de GNU." #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Les développeurs peuvent être contactés via gnubiff-devel@lists.sourceforge.net.\n" "Les bogues doivent etre reportés à gnubiff-" "bugs@lists.sourceforge.net" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" "Voici la liste des personnes ayant participé à la traduction de " "gnubiff dans les différents langages (les traducteurs des versions " "précédentes sont marqués d'un astérisque):" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Beaucoup de personnes ont contribué à gnubiff en:\n" " - reportant des problèmes\n" " - suggérant des améliorations\n" " - soumettant du code\n" "Voici une liste de ces personnes:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Géométrie de l'applet" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Appet ou Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "Che_rcher..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Chercher une image" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Contributeurs" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Remerciements" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Développeurs" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Editer l'option" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Expert" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Image" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Liste des options" #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Liste des options, types et valeurs courantes. Pour éditer une option, " "double-cliquez sur sa valeur." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Boîtes aux lettres" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Mainteneurs" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Nombre maximum de courriers à afficher" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Popup" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Géométrie du popup" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "Recherche les options contenant la chaîne spécifiée." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Mettre la valeur par défaut" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Afficher l'_image" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Afficher le _texte" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Afficher l'i_mage" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Afficher le t_exte" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Chaîne à chercher." #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" "Texte à afficher (%d et %D sont les nombres de nouveaux courriers, %d est " "justifié avec des zéros). Le marquage type Pango peut être utilisé." #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Commande à exécuter lorsqu'il y des nouveaux courriers" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Commande à exécuter pour un double-click" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "L'éditeur d'options que gnubiff utilise de façon interne peut être activé " "ici de façon à pouvoir changer certaines options \"cachées\". Une coure " "description de chaque option est fournie. AttentionChanger ces " "options peut provoquer des erreurs ou bien des problèmes de sécurité." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Fonte à utiliser" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Durée d'affichage de la fenêtre popup" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Basculer l'option" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Traducteurs" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Utiliser la _décoration" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Utiliser la _géométrie" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "En cas de _double-click" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "_Nouveau courrier:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Est ce que les options peuvent êtreéditées en mode expert" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Afficher un texte ou non" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Afficher une image ou non" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Afficher la fenêtre des entêtes ou non" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Restreindre le nombre d'entêtes ou non" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Afficher une image ou non" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Afficher le mode expert. Note: Enlever ce mode ne peut se fait qu'en éditant " "le fichier de configuration manuellement." #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Utiliser un format d'entêtes ou non" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Utiliser la géométrie ou non" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Fenêtre des entêtes décorée ou non" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" "[taille max champs expéditeur]:[taille max champs sujet]:[taille max champs " "date]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "_Chercher..." #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "_Affichage" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Editer les options en mode expert" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Fonte:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Format:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Restreindre le nombre de mail collectés à" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Restreindre le nombre à" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "_Afficher le mode expert" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "gnubiff préferences" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "entête(s)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "mèl(s)" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "seconde(s)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Détails" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "A_dresse:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Aut_hentification:" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Che_rcher..." #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tificat:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Fichier certificat" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Port de connexion au serveur" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Connexion:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Déla_i:" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Répertoire de boîtes aux lettres" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Propriété de la boîte aux lettres" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Nom de la boîte aux lettres" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Autre port de connexion" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Autre répertoire" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Port de connexion standard" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Répertoire standard" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "Durée d'attente entre deux vérifications ou deux tentatives en cas d'échec" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Votre mot de passe sur le seveur" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Votre nom d'utilisateur sur le serveur" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Boîte aux lettres:" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "_Nom:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "Mot de _passe" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Type:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Utilisateur:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "_autre:" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "fichier ou répertoire ou hôte" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minutes" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "autre" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "secondes" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "stan_dard" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "stand_ard" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Authentification" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Votre mot de passe sur le seveur" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Votre nom d'utilisateur sur le serveur" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Adresse" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Fait pour" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Accepter" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Ompossible de certifier le serveur" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Détails du certificat" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nom commun" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "Pays" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Ville" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organisation" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Unité de l'organisation" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Etat ou Province" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Date" #: ../ui/popup.glade.h:2 msgid "From" msgstr "De" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Sujet" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "contenu du mèl" #~ msgid "About gnubiff" #~ msgstr "A propos de gnubiff" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "New mail" #~ msgstr "Nouveau courrier" #~ msgid "No mail" #~ msgstr "Aucun courrier" #~ msgid "Applet" #~ msgstr "Applet" #~ msgid "00" #~ msgstr "00" #~ msgid "Text to display" #~ msgstr "Texte à afficher" #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Impossible de trouver le répertoire (%s)" gnubiff-2.2.16/po/sv.po0000644000175000017500000013215012474424637011570 00000000000000# Swedish translation of gnubiff # Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Daniel Nylander , 2007, 2009. # David Smeringe , 2004, 2005. # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.2.11\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2009-04-05 18:19+0200\n" "PO-Revision-Date: 2009-07-06 20:05+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Kodningen \"%s\" av det här meddelandet kan inte avkodas]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Kan inte avkoda den här rubrikraden]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Kan inte konvertera teckenuppsättningar (från \"%s\" till \"utf-8\")]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Starta panelprogrammet från kommandorad" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Konfigurationsfil att använda" #: src/gnubiff.cc:98 msgid "file" msgstr "fil" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Hoppa över konfigurationsprocessen" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Starta gnubiff utan grafiskt gränssnitt" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Lägg gnubiffs ikon i systembrickan" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Skriv ut versionsinformation och avsluta" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Allmänna kommandoradsflaggor:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Alternativ för felsökning:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Konfigurationsfilen (%s) hittades inte!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Läste in konfigurationsfil från nyare gnubiff version \"%s\"." #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Läste in konfigurationsfil från äldre gnubiff version \"%s\"." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Försöker att konvertera alla alternativ." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Konvertering av alla alternativ lyckades." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Lyckades konvertera några alternativ. Följande alternativ måste uppdateras manuellt: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Kan inte öppna din konfigurationsfil (%s)" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Kan inte skapa XML-tolkare för konfigurationsfil" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Hittade ingen brevlådedefinition i din konfigureringsfil (%s)" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Felaktigt parameterformat i konfigurationsfil" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Inget protokoll angivit för brevlåda %d" #: src/mailbox.cc:143 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Kan inte skapa tråd: %s" #: src/mailbox.cc:315 #, c-format msgid "mailbox %d" msgstr "Brevlåda %d" #: src/mailbox.cc:640 msgid "" msgstr "" #: src/mailbox.cc:641 msgid "" msgstr "" #: src/mailbox.cc:642 msgid "" msgstr "" #: src/mailbox.cc:696 msgid "[Cannot parse content type header line]" msgstr "[Kan inte tolka rubrikrad för innehållstyp]" #: src/mailbox.cc:718 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Kan inte tolka rubrikrad för kodning för innehållsöverföring]" #: src/mailbox.cc:759 msgid "[Malformed multipart message]" msgstr "[Felformulerat multipart-meddelande]" #: src/mailbox.cc:767 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Kan inte hitta första delens början i multipart-meddelandet]" #: src/mailbox.cc:813 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Det här meddelandet innehåller en innehållstyp som inte stöds: \"%s/%s\"]" #: src/mailbox.cc:1215 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Fel vid kompilering av ett reguljärt uttryck.\n" "Reguljärt uttryck: %s\n" "Felmeddelande: %s" #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Kan inte sortera brev efter \"%s\"" #: src/socket.cc:123 src/socket.cc:152 src/socket.cc:180 src/socket.cc:189 #: src/socket.cc:198 src/socket.cc:211 src/socket.cc:241 src/socket.cc:250 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Kan inte ansluta till %s på port %d" #: src/socket.cc:226 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Misslyckades att läsa in certifikat (%s) for %s" #: src/socket.cc:263 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Kan inte identifiera fjärrvärd (%s på port %d)" #: src/socket.cc:348 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Kan inte skriva till %s på port %d" #: src/socket.cc:419 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Kan inte läsa från %s på port %d" #: src/socket.cc:442 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Kunde inte ställa in tidsgräns för läsning på uttag: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Kan inte öppna %s." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Det här meddelandet innehåller ingen del med en innehållstyp som stöds]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Kan inte välja mappen %s hos värden %s" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Kan inte få godkännande från %s på port %d" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Servern skickade inte otaggat \"%s\" svar eller bekräftelse" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Servern skickade inte otaggat \"%s\" svar" #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Servern stängde anslutningen direkt:%s" #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Internt serverfel eller okänt fel:%s" #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Varning från server:%s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Kan inte öppna nytt brevbibliotek (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Tomt lösenord" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Felmeddelande från POP3-server:%s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Fick inget positivt svar från POP3-servern" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Din pop-server verkar inte acceptera apop-protokoll (ingen tidsstämpel finns)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Problem med kryptering som borde ha upptäckts vid konfigureringstillfället" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Okänt alternativ \"%s\"" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Kan inte ställa in alternativet \"%s\" till \"%s\"" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Kan inte hitta den angivna widgeten (\"%s\") inuti xml-strukturen (\"%s\")" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "Inga meddelanden" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Kan inte bygga gränssnittet.\n" "\n" "Namn: %s\n" "Sökväg: %s\n" "\n" "Försäkra dig om att paketet har blivit installerat ordentligt." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect kräver en fungerande gmodule" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Kunde inte hitta signalhanteraren \"%s\"." #: src/ui-applet.cc:217 msgid " unknown" msgstr " okänd" #: src/ui-applet.cc:222 msgid " error" msgstr "fel" #: src/ui-applet.cc:231 msgid " checking..." msgstr "Kontrollerar..." #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Brevlåda" #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Typ" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Status" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Säkerhet" #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Ingen brevlåda vald" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Alternativ" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Värde" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Start" #: src/ui-preferences.cc:615 ui/preferences.glade:2176 msgid "_Stop" msgstr "_Stop" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Bläddra efter en ny meddelandebild" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Ange ditt användarnamn och lösenord för brevlådan \"%s\"" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Kan inte verifiera identiteten för %s som en betrodd plats.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Antingen är platsens certifikat ofullständigt eller så är du uppkopplad mot en plats som låtsas vara %s, troligen för att få tag på ditt lösenord." #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Identifiera automatiskt" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Fil eller mapp" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Användare/Lösenord" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Krypterad användare/lösenord (apop)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL med certifikat" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Bläddra efter en fil eller mapp" #: src/ui-properties.cc:323 ui/properties.glade:616 msgid "Browse for a certificate file" msgstr "Bläddra efter en certifikatfil" #: src/ui-popup.cc:195 msgid "From" msgstr "Från" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Ämne" #: src/ui-popup.cc:207 msgid "Date" msgstr "Datum" #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Du har precis hittat ett okänt internt fel. Skicka in en detaljerad felrapport till \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Ytterligare information:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Info" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade:79 msgid "Mark mailboxes read" msgstr "Markera e-postlådor som lästa" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Inställningar..." #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Kör kommando" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Meddelandenotiferingsprogram" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade:7 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade:6 msgid "tooltip" msgstr "verktygstips" #: ui/applet-gtk.glade:64 msgid "Start command" msgstr "Startkommando" #: ui/applet-gtk.glade:94 msgid "About" msgstr "Om" #: ui/applet-gtk.glade:114 msgid "_Quit" msgstr "A_vsluta" #: ui/applet-gtk.glade:131 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff är ett meddelandenotiferingsprogram." #: ui/applet-gtk.glade:133 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Gnubiff är en del av GNU-projektet.\n" "Det är utgivet under GNU:s beskydd.\n" "\n" "Det här programmet är fri programvara; du kan distribuera det och/eller ändra det under villkoren för GNU General Public License som publicerats av Free Software Foundation; antingen version 3 av licensen, eller (enligt dig) någon senare version.\n" "\n" "Det här programmet distribueras i hopp om att det ska vara användbart, men UTAN NÅGRA GARANTIER; inte ens den underförstådda garantin för SÄLJBARHET eller LÄMPLIGHET FÖR ETT SPECIFIKT ÄNDAMÅL. Se GNU General Public License för mer information.\n" "\n" "Du bör ha fått en kopia av GNU General Public License tillsammans med det här programmet; om inte, se http://www.gnu.org/licenses/.\n" "\n" "Se filen README för undantag till GNU General Public License för distribution av gnubiff länked till biblioteket OpenSSL." #: ui/preferences.glade:6 msgid "gnubiff preferences" msgstr "Inställningar för gnubiff" #: ui/preferences.glade:49 msgid "_Restrict collected mail to" msgstr "Beg_ränsa insamlad e-post till" #: ui/preferences.glade:76 msgid "mail(s)" msgstr "meddelande(n)" #: ui/preferences.glade:107 msgid "The command to run when the icon is double-clicked" msgstr "Kommando att köra när ikonen dubbelklickas" #: ui/preferences.glade:122 msgid "The command to run when new mail arrives" msgstr "Kommando att köra när nya meddelanden anländer" #: ui/preferences.glade:137 msgid "When _new mail:" msgstr "Vid _nya meddelanden:" #: ui/preferences.glade:199 msgid "Commands" msgstr "Kommandon" #: ui/preferences.glade:219 msgid "Mailboxes" msgstr "Brevlådor" #: ui/preferences.glade:236 msgid "General" msgstr "Allmänt" #: ui/preferences.glade:249 msgid "When _double-clicked:" msgstr "Vid dubbelklick:" #: ui/preferences.glade:322 msgid "Mailboxes" msgstr "Brevlådor" #: ui/preferences.glade:367 ui/preferences.glade:751 msgid "Whether to use window manager decoration" msgstr "Huruvida fönsterhanterarens dekorationer skall användas" #: ui/preferences.glade:368 ui/preferences.glade:752 msgid "Use _decoration" msgstr "Använd _dekorering" #: ui/preferences.glade:386 ui/preferences.glade:770 msgid "The font to use to display information" msgstr "Typsnittet att använda för att visa information" #: ui/preferences.glade:403 ui/preferences.glade:860 msgid "_Font:" msgstr "T_ypsnitt:" #: ui/preferences.glade:424 msgid "When no mail" msgstr "Vid inga meddelanden" #: ui/preferences.glade:445 msgid "When new mail" msgstr "Vid nya meddelanden" #: ui/preferences.glade:462 ui/preferences.glade:807 msgid "Layout" msgstr "Layout" #: ui/preferences.glade:475 msgid "Whether to display an image" msgstr "Huruvida en bild skall visas" #: ui/preferences.glade:476 msgid "Show i_mage:" msgstr "Visa b_ild:" #: ui/preferences.glade:495 ui/preferences.glade:535 msgid "Whether to display a text" msgstr "Huruvida en text skall visas" #: ui/preferences.glade:496 msgid "Show t_ext:" msgstr "Visa t_ext:" #: ui/preferences.glade:515 msgid "Whether to show an image" msgstr "Huruvida en bild skall visas" #: ui/preferences.glade:516 msgid "Show _image:" msgstr "Visa b_ild:" #: ui/preferences.glade:536 msgid "Show _text:" msgstr "Visa _text:" #: ui/preferences.glade:555 ui/preferences.glade:840 msgid "Whether to use geometry" msgstr "Huruvida geometri skall användas" #: ui/preferences.glade:556 ui/preferences.glade:841 msgid "Use _geometry:" msgstr "Använd _geometri" #: ui/preferences.glade:575 msgid "Applet geometry" msgstr "Panelprogrammets geometri" #: ui/preferences.glade:590 ui/preferences.glade:639 msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Text som skall visas (%d och %D är antalet nya meddelanden, %d är nollutfylld). Pango-markup kan användas." #: ui/preferences.glade:605 ui/preferences.glade:654 msgid "Browse for an image file" msgstr "Bläddra efter en bildfil" #: ui/preferences.glade:606 msgid "B_rowse..." msgstr "Blädd_ra..." #: ui/preferences.glade:624 ui/preferences.glade:673 msgid "Image filename" msgstr "Bildfilnamn" #: ui/preferences.glade:655 ui/properties.glade:295 msgid "_Browse..." msgstr "_Bläddra..." #: ui/preferences.glade:694 msgid "Applet or Biff" msgstr "Panelprogram eller Biff" #: ui/preferences.glade:791 msgid "Headers" msgstr "Rubriker" #: ui/preferences.glade:820 msgid "Whether to display the popup window" msgstr "Huruvida popupfönstret skall visas" #: ui/preferences.glade:821 msgid "_Display for" msgstr "_Visa för" #: ui/preferences.glade:877 msgid "header(s)" msgstr "rubrik(er)" #: ui/preferences.glade:892 msgid "Maximum number of headers to display" msgstr "Maximalt antal rubriker som skall visas" #: ui/preferences.glade:909 msgid "Whether to restrict number of displayed headers" msgstr "Huvurida antalet visade rubriker skall begränsas" #: ui/preferences.glade:910 msgid "_Restrict number to" msgstr "Beg_ränsa antalet till" #: ui/preferences.glade:929 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[maxstorlek avsändare]:[maxstorlek ämne]:[maxstorlek datum]" #: ui/preferences.glade:944 msgid "Whether to use format for header" msgstr "Huruvida format skall användas för rubrik" #: ui/preferences.glade:945 msgid "_Format:" msgstr "_Format" #: ui/preferences.glade:964 msgid "Popup geometry" msgstr "Popupgeometri" #: ui/preferences.glade:979 msgid "Time to display popup window" msgstr "Tid att visa popupfönster" #: ui/preferences.glade:996 msgid "second(s)" msgstr "sekund(er)" #: ui/preferences.glade:1016 ui/popup.glade:7 msgid "Popup" msgstr "Popup" #: ui/preferences.glade:1062 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "Redigeringsdialogen för alla alternativ som gnubiff använder internt kan aktiveras här. Det är således möjligt att ändra värdet för alternativ som det inte finns några grafiska widgetar för. En kort beskrivning för varje alternativ tillhandahålls.\n" "Varning: Ändring av dessa alternativ kan göra att gnubiff inte fungerar korrekt eller resultera i säkerhetsproblem." #: ui/preferences.glade:1080 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Huruvida expertfliken ska visas. Observera: Inaktivering av det här alternativ kan endast återställas genom att manuellt redigera konfigurationsfilen!" #: ui/preferences.glade:1081 msgid "_Show expert tab" msgstr "_Visa expertflik" #: ui/preferences.glade:1101 msgid "Whether options can be edited in expert mode" msgstr "Huruvida alternativ kan redigeras i expertläget" #: ui/preferences.glade:1102 msgid "_Edit options in expert mode" msgstr "R_edigera alternativ i expertläge" #: ui/preferences.glade:1121 msgid "Expert editing mode" msgstr "Expertredigeringsläge" #: ui/preferences.glade:1155 msgid "List all options." msgstr "Lista alla alternativ." #: ui/preferences.glade:1171 msgid "String to be searched for." msgstr "Sträng att sökas efter:" #: ui/preferences.glade:1183 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Sök efter de (visad) alternativen som innehåller strängen i textfältet." #: ui/preferences.glade:1212 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Lista över alternativ, deras typ och aktuella värden. För att redigera ett alternativ, dubbelklicka på dess värde." #: ui/preferences.glade:1257 msgid "Expert" msgstr "Expert" #: ui/preferences.glade:1297 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff är en del av GNU-projektet.\n" " Det är släppt under GNUs rättighetsskydd." #: ui/preferences.glade:1363 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Utvecklarna kan kontaktas via gnubiff-devel@lists.sourceforge.net.\n" "Fel ska rapporteras till gnubiff-bugs@lists.sourceforge.net." #: ui/preferences.glade:1432 msgid "Developers" msgstr "Utvecklare" #: ui/preferences.glade:1511 msgid "Maintainers" msgstr "Underhållare" #: ui/preferences.glade:1530 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Här är en lista över dessa personer som översatte gnubiff till olika språk (översättare av tidigare versioner är markerade med en stjärna):" #: ui/preferences.glade:2048 msgid "Translators" msgstr "Översättare" #: ui/preferences.glade:2065 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Många personer har bidragit till gnubiff genom\n" " - felrapportering\n" " - föreslagit olika förbättringar\n" " - skickat in källkod\n" "Här är en lista på dessa personer:" #: ui/preferences.glade:2108 msgid "Contributors" msgstr "Bidragsgivare" #: ui/preferences.glade:2130 msgid "Credits" msgstr "Tack till" #: ui/preferences.glade:2219 msgid "Set to default value" msgstr "Ställ in till standardvärde" #: ui/preferences.glade:2234 msgid "Toggle option" msgstr "Växla alternativ" #: ui/preferences.glade:2249 msgid "Edit option" msgstr "Redigera alternativ" #: ui/properties.glade:7 msgid "Mailbox properties" msgstr "Brevlådeegenskaper" #: ui/properties.glade:52 msgid "_Name:" msgstr "_Namn:" #: ui/properties.glade:77 msgid "A_ddress:" msgstr "A_dress:" #: ui/properties.glade:102 msgid "Name of the mailbox" msgstr "Namn på brevlåda" #: ui/properties.glade:124 msgid "_Type:" msgstr "_Typ:" #: ui/properties.glade:174 ui/authentication.glade:52 msgid "_Username:" msgstr "_Användarnamn:" #: ui/properties.glade:199 msgid "Your username on the mail server" msgstr "Ditt användarnamn på meddelandeservern" #: ui/properties.glade:221 ui/authentication.glade:77 msgid "_Password:" msgstr "_Lösenord:" #: ui/properties.glade:246 msgid "Your password on the mail server" msgstr "Ditt lösenord på meddelandeservern" #: ui/properties.glade:274 msgid "file or folder or hostname" msgstr "fil, mapp eller värdnamn" #: ui/properties.glade:367 msgid "Connection:" msgstr "Anslutning:" #: ui/properties.glade:391 msgid "Connection port to connect to server" msgstr "Anslutningsport för att ansluta till server" #: ui/properties.glade:414 msgid "Standard connection port" msgstr "Standardanslutningsport" #: ui/properties.glade:416 msgid "stan_dard" msgstr "stan_dard" #: ui/properties.glade:437 msgid "Other connection port" msgstr "Annan anslutningsport" #: ui/properties.glade:439 msgid "_other" msgstr "a_ndra " #: ui/properties.glade:540 msgid "Aut_hentication:" msgstr "Auten_tisering:" #: ui/properties.glade:594 msgid "Certificate filename" msgstr "Certifikatfilnamn" #: ui/properties.glade:618 msgid "Bro_wse..." msgstr "Blädd_ra..." #: ui/properties.glade:637 msgid "Cer_tificate:" msgstr "Cer_tifikat:" #: ui/properties.glade:692 msgid "minutes" msgstr "minuter" #: ui/properties.glade:716 msgid "seconds" msgstr "sekunder" #: ui/properties.glade:739 ui/properties.glade:765 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Den vänttid som skall vara mellan e-postkontroller, eller återanslutningsförsök när anslutningen förloras" #: ui/properties.glade:791 msgid "Dela_y:" msgstr "Fördröjn_ing:" #: ui/properties.glade:846 msgid "_Mailbox:" msgstr "Br_evlåda:" #: ui/properties.glade:871 msgid "Mailbox folder" msgstr "Brevlådemapp" #: ui/properties.glade:893 msgid "Other mailbox folder" msgstr "Annan brevlådemapp" #: ui/properties.glade:895 msgid "othe_r" msgstr "and_ra" #: ui/properties.glade:916 msgid "Standard mailbox folder" msgstr "Standardbrevlådemapp" #: ui/properties.glade:918 msgid "stand_ard" msgstr "stand_ard" #: ui/properties.glade:951 msgid "_Details" msgstr "_Detaljer" #: ui/authentication.glade:7 msgid "Authentication" msgstr "Autentisering" #: ui/authentication.glade:102 msgid "Your username on the server" msgstr "Ditt användarnamn på servern" #: ui/authentication.glade:124 msgid "Your password on the server" msgstr "Ditt lösenord på servern" #: ui/certificate.glade:7 msgid "Cannot certify server" msgstr "Kan inte certifiera server" #: ui/certificate.glade:130 msgid "Common Name" msgstr "Namn" #: ui/certificate.glade:154 msgid "Organization" msgstr "Organisation" #: ui/certificate.glade:178 msgid "Organization Unit" msgstr "Organisationsavdelning" #: ui/certificate.glade:275 msgid "Issued To" msgstr "Utfärdat till" #: ui/certificate.glade:394 msgid "Address" msgstr "Adress" #: ui/certificate.glade:418 msgid "Country" msgstr "Land" #: ui/certificate.glade:442 msgid "Locality" msgstr "Lokalitet" #: ui/certificate.glade:540 msgid "State or Province" msgstr "Län eller provins" #: ui/certificate.glade:570 msgid "Certificate details" msgstr "Certifikatdetaljer" #: ui/certificate.glade:668 msgid "Accept" msgstr "Acceptera" #: ui/popup.glade:61 msgid "mail content" msgstr "meddelandeinnehåll" #: ui/popup.glade:116 msgid "From" msgstr "Från" #: ui/popup.glade:140 msgid "Subject" msgstr "Ämne" #: ui/popup.glade:164 msgid "Date" msgstr "Datum" #~ msgid "[This mail has no \"text/plain\" part]" #~ msgstr "[Det här meddelandet har ingen \"text/plain\"-del]" #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Kan inte hitta nytt brevbibliotek (%s)" #~ msgid "New mail" #~ msgstr "Nya meddelanden" #~ msgid "No mail" #~ msgstr "Inga meddelanden" #~ msgid "* error *" #~ msgstr "* fel *" #~ msgid "Error" #~ msgstr "Fel" #~ msgid "(C) 2000-2004 Nicolas Rougier" #~ msgstr "(c) 2000-2004 Nicolas Rougier" #~ msgid "gnubiff" #~ msgstr "gnubiff" #~ msgid "About gnubiff" #~ msgstr "Om gnubiff" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "00" #~ msgstr "00" #~ msgid "Applet" #~ msgstr "Applet" #~ msgid "" #~ "Gnubiff 2.1.0\n" #~ " Released under the aegis of GNU\n" #~ " Copyright (c) 2000-2004 Nicolas Rougier" #~ msgstr "" #~ "Gnubiff 2.1.0\n" #~ " Släppt i skydd av GNU\n" #~ "Copyright (c) 2000-2004 Nicolas Rougier" #~ msgid "Text to display" #~ msgstr "Text att visa" #~ msgid "file or folder or [ssl:]hostname[:port][:folder]" #~ msgstr "Fil, mapp eller [ssl:]värdnamn[:port][:mapp]" #~ msgid "" #~ "\n" #~ "This version of gnubiff has been compiled with GNOME support\n" #~ msgstr "" #~ "\n" #~ "Den här versionen av gnubiff har kompilerats med GNOME-support\n" #~ msgid "If you want to use the GTK version, type gnubiff --gtk\n" #~ msgstr "Skriv gnubiff --gtk om du vill använda GTK-versionen\n" #~ msgid " then use -c file to specify an alternate configuration file\n" #~ msgstr " använd sedan -c fil för att specifiera en alternativ konfigurationsfil\n" #~ msgid " and -n to skip configuration process\n" #~ msgstr " och -n för att hoppa över konfigurationsprocessen\n" #~ msgid "If you want to use the GNOME version, use gnome panel\n" #~ msgstr "Använd GNOME-panelen om du vill använda GNOME-versionen\n" #~ msgid "Have a nice day\n" #~ msgstr "Ha en bra dag\n" #~ msgid "" #~ "\n" #~ "This version of gnubiff has been compiled with GNOME support" #~ msgstr "" #~ "\n" #~ "Den här versionen av gnubiff har kompilerats med GNOME-stöd" #~ msgid "Now I will hang forever...\n" #~ msgstr "Nu kommer jag hänga för evigt...\n" #~ msgid "Copyright (c) 2000-2004 Nicolas Rougier\n" #~ msgstr "Copyright (c) 2000-2004 Nicolas Rougier\n" #~ msgid "Unable to create lookup thread: %s\n" #~ msgstr "Kan inte skapa utsökningstråd: %s\n" #~ msgid "Mailbox format is unknown" #~ msgstr "Brevlådans format är okänt" #~ msgid "blocked (unsecure)" #~ msgstr "Blockerad (osäker)" #~ msgid "Poll time" #~ msgstr "Kontrolltider" #~ msgid "Browse for a sound" #~ msgstr "Bläddra efter ett ljud" #~ msgid "Browse for a mail application" #~ msgstr "Bläddra efter ett e-postprogram" #~ msgid "Browse for a location" #~ msgstr "Bläddra efter en plats" #~ msgid "From: " #~ msgstr "Från: " #~ msgid "Subject: " #~ msgstr "Ämne: " #~ msgid "Date: " #~ msgstr "Datum: " #~ msgid "About..." #~ msgstr "Om..." #~ msgid "Start mail application" #~ msgstr "Starta e-postprogram" #~ msgid "00/00" #~ msgstr "00/00" #~ msgid "%d" #~ msgstr "%d" #~ msgid "'Sender' field maximum size" #~ msgstr "'Avsändare'-fältets högsta storlek" #~ msgid "'Subject' field maximum size" #~ msgstr "'Ämne'-fältets högsta storlek" #~ msgid "*" #~ msgstr "*" #~ msgid "+0+0" #~ msgstr "+0+0" #~ msgid "-0+0" #~ msgstr "-0+0" #~ msgid "Biff window" #~ msgstr "Biff-fönster" #~ msgid "Popup window" #~ msgstr "Popuppfönster" #~ msgid "Popup" #~ msgstr "Popupp" #~ msgid "Advanced" #~ msgstr "Avancerad" #~ msgid "Color:" #~ msgstr "Färg:" #~ msgid "Display popup window for poptime seconds" #~ msgstr "Visa poppuppfönster under popptids sekunder" #~ msgid "Do not show any text when new mail" #~ msgstr "Visa inte någon text vid nytt meddelande" #~ msgid "Geometry" #~ msgstr "Geometri" #~ msgid "Layout" #~ msgstr "Utformning" #~ msgid "Let window manager place window" #~ msgstr "Låt fönsterhanteraren placera fönstret" #~ msgid "Ma_ximum number of email to collect:" #~ msgstr "Hö_gsta antal e-post att samla:" #~ msgid "Mail a_pplication:" #~ msgstr "E-post_program:" #~ msgid "Mail application to launch via popup menu." #~ msgstr "Brevprogram att starta via popuppmenyn." #~ msgid "Maximum number of displayed headers (you know, if you have a screen with a finite display area...)" #~ msgstr "Högsta antal visade rubriker (du vet, om du har en skärm med begränsad visningsyta...)" #~ msgid "Maximum size of the sender field in popup window" #~ msgstr "Största storlek för avsändarfältet i poppuppfönster" #~ msgid "Never send pass_word in clear" #~ msgstr "Skicka aldrig l_ösenord i klartext" #~ msgid "New mail:" #~ msgstr "Nytt meddelande:" #~ msgid "No mail:" #~ msgstr "Ingen meddelande:" #~ msgid "No sound when new mail has arrived" #~ msgstr "Inget ljud när nya meddelanden har anlänt" #~ msgid "Pick a color for applet font" #~ msgstr "Välj en färg för applettypsnitt" #~ msgid "Pick a color for popup font" #~ msgstr "Välj en färg för popupptypsnitt" #~ msgid "Pick a font for applet" #~ msgstr "Välj ett typsnitt för appleten" #~ msgid "Pick a font for popup" #~ msgstr "Välj ett typsnitt för popupp" #~ msgid "Popup window with window manager decorations or not" #~ msgstr "Poppuppfönster med fönsterhanterarens dekorationer eller ej" #~ msgid "" #~ "Released under the GNU general public license\n" #~ "(c) 2000-2004 Nicolas Rougier\n" #~ "Special thanks to Robert Sowada and Roland Stigge for their help" #~ msgstr "" #~ "Släppt under GNU general public license\n" #~ "(c) 2000-2004 Nicolas Rougier\n" #~ "Ett speciellt tack till Robert Sowada och Roland Stigge för deras hjälp" #~ msgid "Sound play command (%s is the soundfile, %v is the volume)" #~ msgstr "Ljudspelningskommando (%s är ljudfilen, %v är volymen)" #~ msgid "Sound when new mail has arrived" #~ msgstr "Ljud när nya meddelanden har anlänt" #~ msgid "System _beep" #~ msgstr "Systemp_ip" #~ msgid "System beep when new mail has arrived" #~ msgstr "Systempip när nya meddelanden har anlänt" #~ msgid "Test" #~ msgstr "Test" #~ msgid "Use image" #~ msgstr "Använd bild" #~ msgid "Use of no image implies no applet window for GTK version" #~ msgstr "Användande av inga bilder innebär inget appletfönster för GTK-version " #~ msgid "Use text" #~ msgstr "Använd text" #~ msgid "_Biff:" #~ msgstr "_Biff:" #~ msgid "_Display date" #~ msgstr "Visa _datum" #~ msgid "_Display popup window when new mail arrives" #~ msgstr "Visa poppuppfönster när nya meddelanden anländer" #~ msgid "_File:" #~ msgstr "Fil:" #~ msgid "_No sound" #~ msgstr "I_nget ljud" #~ msgid "_Popup:" #~ msgstr "_Poppupp:" #~ msgid "_Sound" #~ msgstr "L_jud" #~ msgid "balsa" #~ msgstr "balsa" #~ msgid "characters" #~ msgstr "tecken" #~ msgid "emacs" #~ msgstr "emacs" #~ msgid "evolution" #~ msgstr "evolution" #~ msgid "" #~ "gnubiff has originally been written by Nicolas Rougier.\n" #~ "Many people have further contributed to gnubiff by\n" #~ " * reporting problems\n" #~ " * suggesting various improvements\n" #~ " * submitting actual code.\n" #~ "\n" #~ "Here is a list of these people in no particular order:\n" #~ " - Robert Sowada\n" #~ " - Roland Stigge\n" #~ " - Jean-Yves Lefort\n" #~ " - Calum Mackay\n" #~ " - Paul Kuliniewicz\n" #~ " - Erik Sittman\n" #~ " - Dries Verachtert\n" #~ " - Grzegorz Gotawski\n" #~ " - Adam Benjamin\n" #~ " - Theodore Tegos\n" #~ " - Achim Settelmeier\n" #~ " - Barry Skidmore\n" #~ " - Jason Lowdermilk\n" #~ " - Marc-jano Knopp\n" #~ " - Suzan Wassman\n" #~ " - Philippe Berger\n" #~ " - Earl A. Killian\n" #~ " - Christian Probst\n" #~ " - Hans-Ulrich Schaefer\n" #~ " - Josh Parsons\n" #~ " - Michael Moellney\n" #~ " - Dennis Bjorklund\n" #~ " - Craig Agricola\n" #~ " - Bernhard Valenti\n" #~ " - Josh Berdine\n" #~ " - Michel Leunen\n" #~ " - Greg Fenton\n" #~ " - Cai Yu\n" #~ " - Chris Snell\n" #~ " - Reid Rivenburgh\n" #~ " - Neil Muller\n" #~ " - Sascha Ludecke\n" #~ " - Richard Torkar\n" #~ " - Pete Phillips\n" #~ " - Blaise Tarr\n" #~ "\n" #~ "And of course, there are also translators:\n" #~ " - Roland Stigge, Robert Sowada (de)\n" #~ " - Nicolas Lichtmaier (es)\n" #~ " - Elros Cyriatan (nl)\n" #~ " - Michel Robitaille (fr)\n" #~ " - Eugen Hoanca (ro)\n" #~ " - David Smeringe (sv)\n" #~ "\n" #~ "\n" #~ "If you like this software, you can send me a post-card to:\n" #~ " Nicolas Rougier\n" #~ " Campus Scientifique, B.P. 239\n" #~ " F-54506 Vandoeuvre-Les-Nancy Cedex\n" #~ " FRANCE" #~ msgstr "" #~ "gnubiff skevs från början av Nicolas Rougier.\n" #~ "Många personer har sedan dess bidragit till gnubiff med\n" #~ " * raportering av problem\n" #~ " * föreslagit olika förbättringar\n" #~ " * skickat in kod.\n" #~ "\n" #~ "Här är en lista med dessa personer utan inbördes sortering:\n" #~ " - Robert Sowada\n" #~ " - Roland Stigge\n" #~ " - Jean-Yves Lefort\n" #~ " - Calum Mackay\n" #~ " - Paul Kuliniewicz\n" #~ " - Erik Sittman\n" #~ " - Dries Verachtert\n" #~ " - Grzegorz Gotawski\n" #~ " - Adam Benjamin\n" #~ " - Theodore Tegos\n" #~ " - Achim Settelmeie\n" #~ " - Barry Skidmore\n" #~ " - Jason Lowdermilk\n" #~ " - Marc-jano Knopp\n" #~ " - Suzan Wassman\n" #~ " - Philippe Berger\n" #~ " - Earl A. Killian\n" #~ " - Chistian Probst\n" #~ " - Hans-Ulrich Schaefer\n" #~ " - Josh Parsons\n" #~ " - Michael Moellney\n" #~ " - Dennis Bjorklund\n" #~ " - Craig Agricola\n" #~ " - Bernhard Valenti\n" #~ " - Josh Berdine\n" #~ " - Michel Leunen\n" #~ " - Greg Fenton\n" #~ " - Cai Yu\n" #~ " - Chris Snell\n" #~ " - Reid Rivenburgh\n" #~ " - Neil Muller\n" #~ " - Sascha Ludecke\n" #~ " - Richard Torkar\n" #~ " - Pete Phillips\n" #~ " - Blaise Tarr\n" #~ "\n" #~ "Och naturligtvis finns det även översättare:\n" #~ " - Roland Stigge, Robert Sowada (de)\n" #~ " - Nicolas Lichtmaier (es)\n" #~ " - Elros Cyriathan (nl)\n" #~ " - Michel Robitiaille (fr)\n" #~ " - Eugen Hanca (ro)\n" #~ " - David Smeringe (sv)\n" #~ "\n" #~ "Om du tycker om det här programmet så kan du skicka mig ett vykort till:\n" #~ " Nicolas Rougier\n" #~ " Campus Scientifique, B.P 239\n" #~ " F-54506 Vandoeuvre-Les-Nancy Cedex\n" #~ " FRANCE" #~ msgid "mozilla -mail" #~ msgstr "mozilla -mail" #~ msgid "netscape -mail" #~ msgstr "netscape -mail" #~ msgid "play %s -v %v" #~ msgstr "spela %s -v %v" #~ msgid "pop3 and imap4 without ssl send passwords in clear. Checking this option prevents gnubiff from using them." #~ msgstr "pop3 och imap4 utan ssl skickar lösenord i klartext. Markera detta val för att förhindra gnubiff från att använda dom." #~ msgid "thunderbird" #~ msgstr "thunderbird" #~ msgid "xemacs " #~ msgstr "xemacs " #~ msgid "Details" #~ msgstr "Detaljer" #~ msgid "Folder to check on the IMAP4 server" #~ msgstr "Mapp att kontrollera på IMAP4-server" #~ msgid "Folder:" #~ msgstr "Mapp:" #~ msgid "Port to connect (usually POP3: 110, IMAP4: 143, POP3 over SSL: 995, IMAP4 over SSL: 993)" #~ msgstr "Port att ansluta (vanligen POP3: 110, IMAP4: 143, POP3 över SSL: 995, IMAP4 över SSL: 993)" #~ msgid "Server certificate, leave blank if you do not want to use one" #~ msgstr "Servercertifikat. Lämna tom om du inte vill använda ett" #~ msgid "The hostname or IP address of the server" #~ msgstr "Värdnamn eller IP-adress för servern" #~ msgid "Time in seconds between each check" #~ msgstr "Tid i sekunder mellan varje kontroll" #~ msgid "Use SSL encryption" #~ msgstr "Använd SSL-kryptering" #~ msgid "_Delay between checks:" #~ msgstr "_Fördröjningar mellan kontroller:" #~ msgid "_Hostname:" #~ msgstr "_Värdnamn:" #~ msgid "_Network" #~ msgstr "_Nätverk" #~ msgid "debug output" #~ msgstr "felsökningsutdata" #~ msgid "" #~ "Released under the GNU general public license.\n" #~ "Mail notification program." #~ msgstr "" #~ "Släppt under GNU general public license.\n" #~ "E-postnotifieringsprogram." #~ msgid "%02x" #~ msgstr "%02x" #~ msgid "Mail" #~ msgstr "E-post" #~ msgid "Title" #~ msgstr "Titel" #~ msgid "File protocol: for example, your mailbox is held in a file like \"/var/log/login_name\"" #~ msgstr "Filprotokoll: Exempelvis så kan din mailbox finnas i en fil som heter \"/var/log/login_name\"" #~ msgid "mh" #~ msgstr "mh" #~ msgid "maildir" #~ msgstr "maildir" #~ msgid "IMAP4 protocol: your mailbox is held on an IMAP4 server on a remote host. Contact your system admnistrator for setup details." #~ msgstr "IMAP4-protokoll: Din brevlåda ligger på en IMAP4-server hos en frärrvärd. Kontakta din systemadministratör för inställningsdetaljer." #~ msgid "imap4" #~ msgstr "imap4" #~ msgid "Network" #~ msgstr "Nätverk" #~ msgid "Local" #~ msgstr "Lokalt" #~ msgid "POP3 protocol: your mailbox is held on a POP3 server on a remote host. Contact your system admnistrator for setup details." #~ msgstr "POP3-protokoll: Din brevlåda ligger på en POP3-server hos en fjärrvärd. Kontakta din systemadministratör för inställningsdetaljer." #~ msgid "pop3" #~ msgstr "pop3" #~ msgid "APOP protocol: your mailbox is held on an APOP server on a remote host. Contact your system admnistrator for setup details." #~ msgstr "APOP-protokoll: Din brevlåda ligger på en APOP-server hos en fjärrvärd. Kontakta din systemadministratör för inställningsdetaljer." #~ msgid "apop" #~ msgstr "apop" #~ msgid "Use Secure Socket Layer" #~ msgstr "Använd Secure Socket Layer" #~ msgid "Address of your mailbox" #~ msgstr "Adress för din brevlåda" #~ msgid " ... " #~ msgstr " ... " #~ msgid "Address / filename" #~ msgstr "Adress / filnamn" #~ msgid "Port" #~ msgstr "Port" #~ msgid "User mail account name " #~ msgstr "Användarnamn för e-postkontot " #~ msgid "User" #~ msgstr "Användare" #~ msgid "Password" #~ msgstr "Lösenord" #~ msgid "User mail account password" #~ msgstr "Lösenord för e-postkontot" #~ msgid "Server certificate" #~ msgstr "Servercertifikat" #~ msgid "Mailbox addressing information " #~ msgstr "Brevlådans adressinformation" #~ msgid "Poll time" #~ msgstr "Kontrolltid" #~ msgid "Check for new mail every polltime seconds" #~ msgstr "Sök efter nya meddelanden varje kontrolltids sekunder" #~ msgid "second(s)" #~ msgstr "sekund(er)" #~ msgid "Pop time" #~ msgstr "Popptid" #~ msgid "Timing " #~ msgstr "Tider " #~ msgid "Sound file" #~ msgstr "Ljudfil" #~ msgid "mail.wav" #~ msgstr "mail.wav" #~ msgid "Play selected sound" #~ msgstr "Spela valt ljud" #~ msgid "Sounds " #~ msgstr "Ljud " #~ msgid "Image or animation to use when no new mail available" #~ msgstr "Bild eller animation att använda när inga nya meddelanden finns." #~ msgid "Image or animation to use when new mail has arrived" #~ msgstr "Bild eller animation att använda när nya meddelanden har anlänt" #~ msgid "Hide biff or applet window when no new mail" #~ msgstr "Göm biff eller appletfönster när inga nya meddelanden finns" #~ msgid "Images / Animations " #~ msgstr "Bilder / Animationer " #~ msgid "Restrict sender size to " #~ msgstr "Begränsa avsändarstorleken till " #~ msgid "character(s)" #~ msgstr "tecken" #~ msgid "Restrict subject size to " #~ msgstr "Begränsa ämnesstorleken till " #~ msgid "Maximum size of subject field in popup window" #~ msgstr "Största storlek för ämnesfältet i poppuppfönster" #~ msgid "Show title or not" #~ msgstr "Visa titel eller ej" #~ msgid "Display title" #~ msgstr "Visa titel" #~ msgid "Show date in headers or not" #~ msgstr "Visa datum i rubriker eller ej" #~ msgid "Look " #~ msgstr "Utseende " #~ msgid "X" #~ msgstr "X" #~ msgid "Popup" #~ msgstr "Poppupp" #~ msgid "Positive numbers refer to left border, negative numbers refer to right border" #~ msgstr "Positiva nummer hänvisar till vänster ramkant, negativa nummer hänvisar till höger ramkant" #~ msgid "Positive numbers refer to top border, negative numbers refer to bottom border" #~ msgstr "Positiva nummer hänvisar till övre ramkant. Negativa nummer hänvisar till nedre ramkant" #~ msgid "Biff" #~ msgstr "Biff" #~ msgid "Placement " #~ msgstr "Placering" #~ msgid "Maximum size of the 'From' field in popup" #~ msgstr "Största storlek på 'Från'-fältet i poppupp" #~ msgid "header(s)" #~ msgstr "rubriker" #~ msgid "Size " #~ msgstr "Storlek " #~ msgid "Font to be used for title" #~ msgstr "Typsnitt att använda för titel" #~ msgid "Sans 10" #~ msgstr "Sans 10" #~ msgid "Body" #~ msgstr "Kropp" #~ msgid "Sans 8" #~ msgstr "Sans 8" #~ msgid "Running" #~ msgstr "Kör" gnubiff-2.2.16/po/ChangeLog0000644000175000017500000000000012474422124012323 00000000000000gnubiff-2.2.16/po/rw.po0000644000175000017500000006511512474424636011575 00000000000000# Kinyarwanda translations for gnubiff package. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Steve Murphy , 2005. # Steve performed initial rough translation from compendium built from translations provided by the following translators: # Philibert Ndandali , 2005. # Viateur MUGENZI , 2005. # Noëlla Mupole , 2005. # Carole Karema , 2005. # JEAN BAPTISTE NGENDAHAYO , 2005. # Augustin KIBERWA , 2005. # Donatien NSENGIYUMVA , 2005. # Antoine Bigirimana , 2005. # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.1.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-02-27 14:31+0100\n" "PO-Revision-Date: 2005-04-04 10:55-0700\n" "Last-Translator: Steven Michael Murphy \n" "Language-Team: Kinyarwanda \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:70 #, fuzzy, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Imisobekere: Bya iyi Ubutumwa" #: ../src/gnubiff.cc:98 #, fuzzy msgid "Start gnome applet from command line" msgstr "Gutangira Apuleti... Bivuye Komandi: Umurongo" #: ../src/gnubiff.cc:106 #, fuzzy msgid "Configuration file to use" msgstr "IDOSIYE Kuri Gukoresha" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_HFCMD_FILE.text #: ../src/gnubiff.cc:106 #, fuzzy msgid "file" msgstr "IDOSIYE" #: ../src/gnubiff.cc:108 #, fuzzy msgid "Skip the configuration process" msgstr "i Iboneza" #: ../src/gnubiff.cc:110 #, fuzzy msgid "Print version information and exit" msgstr "Verisiyo Ibisobanuro Na Gusohoka" #: ../src/gnubiff.cc:117 #, fuzzy msgid "General command line options:" msgstr "Komandi: Umurongo Amahitamo" #: ../src/gnubiff.cc:120 #, fuzzy msgid "Options for debugging:" msgstr "kugirango" #: ../src/biff.cc:125 #, fuzzy, c-format msgid "Configuration file (%s) not found !" msgstr "IDOSIYE OYA Byabonetse" #: ../src/biff.cc:509 #, fuzzy, c-format msgid "Cannot open your configuration file (%s)" msgstr "Gufungura Iboneza IDOSIYE" #: ../src/biff.cc:535 #, fuzzy, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Oya Insobanuro in Iboneza IDOSIYE" #: ../src/biff.cc:559 #, fuzzy msgid "Illegal parameter format in config file" msgstr "Imiterere in IDOSIYE" #: ../src/biff.cc:582 #, fuzzy, c-format msgid "No protocol specified for mailbox %d" msgstr "Porotokole kugirango" #: ../src/mailbox.cc:134 #, fuzzy, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d]Kuri Kurema Urudodo" #: ../src/mailbox.cc:265 #, c-format msgid "mailbox %d" msgstr "" #: ../src/mailbox.cc:541 #, fuzzy msgid "" msgstr "" msgstr "" msgstr "(C) 2000-2004 Nicolas Rougier" msgstr "gnubiff" msgstr "Commands" msgstr "Expert editing mode" msgstr "General" msgstr "Headers" msgstr "Layout" msgstr "Mailboxes" msgstr "When new mail" msgstr "When no mail" msgstr " Released under the aegis of GNU\n" " Copyright (c) 2000-2005 Nicolas Rougier" msgstr "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net" msgstr "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "Ikiganiro kugirango Byose Amahitamo Bikora ni Kuri Guhindura>> i Agaciro Bya Amahitamo kugirango Oya A Isobanuramiterere kugirango Ihitamo ni B B Amahitamo Gicurasi Kuri OYA Cyangwa Igisubizo in Umutekano" #: ../ui/preferences.glade.h:47 #, fuzzy msgid "The font to use to display information" msgstr "Intego- nyuguti Kuri Gukoresha Kuri Kugaragaza Ibisobanuro" #: ../ui/preferences.glade.h:48 #, fuzzy msgid "Time to display popup window" msgstr "Kuri Kugaragaza Idirishya" #: ../ui/preferences.glade.h:49 msgid "Translators" msgstr "" #: ../ui/preferences.glade.h:50 msgid "Use _decoration" msgstr "" #: ../ui/preferences.glade.h:51 #, fuzzy msgid "Use _geometry:" msgstr "Iyigamashusho" #: ../ui/preferences.glade.h:52 #, fuzzy msgid "When _double-clicked:" msgstr "MAHARAKUBIRI" #: ../ui/preferences.glade.h:53 #, fuzzy msgid "When _new mail:" msgstr "Gishya Ubutumwa" #: ../ui/preferences.glade.h:54 #, fuzzy msgid "Whether options can be edited in expert mode" msgstr "Amahitamo in Ubwoko" #: ../ui/preferences.glade.h:55 #, fuzzy msgid "Whether to display a text" msgstr "Kuri Kugaragaza a Umwandiko" #: ../ui/preferences.glade.h:56 #, fuzzy msgid "Whether to display an image" msgstr "Kuri Kugaragaza Ishusho" #: ../ui/preferences.glade.h:57 #, fuzzy msgid "Whether to display the popup window" msgstr "Kuri Kugaragaza i Idirishya" #: ../ui/preferences.glade.h:58 #, fuzzy msgid "Whether to restrict number of displayed headers" msgstr "Kuri Umubare Bya Imitwe" #: ../ui/preferences.glade.h:59 #, fuzzy msgid "Whether to show an image" msgstr "Kuri Garagaza Ishusho" #: ../ui/preferences.glade.h:60 #, fuzzy msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Kuri Garagaza i Isunika iyi Ihitamo Bicuritswe ku i IDOSIYE" #: ../ui/preferences.glade.h:61 #, fuzzy msgid "Whether to use format for header" msgstr "Kuri Gukoresha Imiterere kugirango Umutwempangano" #: ../ui/preferences.glade.h:62 #, fuzzy msgid "Whether to use geometry" msgstr "Kuri Gukoresha Iyigamashusho" #: ../ui/preferences.glade.h:63 #, fuzzy msgid "Whether to use window manager decoration" msgstr "Kuri Gukoresha Idirishya Muyobozi" #: ../ui/preferences.glade.h:64 #, fuzzy msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[Uwohereza KININI Ingano Ikivugwaho KININI Ingano Itariki KININI Ingano" #: ../ui/preferences.glade.h:65 ../ui/properties.glade.h:21 #, fuzzy msgid "_Browse..." msgstr "Gushakisha..." #: ../ui/preferences.glade.h:66 #, fuzzy msgid "_Display for" msgstr "kugirango" #: ../ui/preferences.glade.h:67 #, fuzzy msgid "_Edit options in expert mode" msgstr "Amahitamo in Ubwoko" #: ../ui/preferences.glade.h:68 #, fuzzy msgid "_Font:" msgstr "Imyandikire:" # svx/source\dialog\srchdlg.src:RID_SVXDLG_SEARCH.BTN_FORMAT.text #: ../ui/preferences.glade.h:69 #, fuzzy msgid "_Format:" msgstr "Imiterere..." #: ../ui/preferences.glade.h:70 #, fuzzy msgid "_Restrict collected mail to" msgstr "Ubutumwa Kuri" #: ../ui/preferences.glade.h:71 #, fuzzy msgid "_Restrict number to" msgstr "Umubare Kuri" #: ../ui/preferences.glade.h:72 #, fuzzy msgid "_Show expert tab" msgstr "Isunika" #: ../ui/preferences.glade.h:74 #, fuzzy msgid "gnubiff preferences" msgstr "Ibyahiswemo" #: ../ui/preferences.glade.h:75 #, fuzzy msgid "header(s)" msgstr "Umutwempangano S" #: ../ui/preferences.glade.h:76 #, fuzzy msgid "mail(s)" msgstr "Ubutumwa S" #: ../ui/preferences.glade.h:77 msgid "second(s)" msgstr "amasegonda" #: ../ui/properties.glade.h:1 #, fuzzy msgid "_Details" msgstr "Address" msgstr "Issued To" msgstr "Date" msgstr "From" msgstr "Subject" msgstr ", 2003. # Robert Sowada , 2004-2008. # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2008-02-03 17:30+0100\n" "Last-Translator: Robert Sowada \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Die Kodierung »%s« dieser Nachricht kann nicht dekodiert werden]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Kann diese Kopfzeile nicht dekodieren]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Kann Zeichenkodierung nicht konvertieren (von »%s« nach »utf-8«)]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Gnome Applet von der Kommandozeile aus starten" #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Zu verwendende Konfigurationsdatei" #: ../src/gnubiff.cc:98 msgid "file" msgstr "Datei" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Konfiguration überspringen" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Gnubiff ohne grafische Benutzeroberfläche (GUI) starten" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Gnubiffs Piktogramm im Benachrichtigungsfeld ablegen" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Versionsinformation ausgeben und beenden" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Allgemeine Kommandozeilenoptionen:" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Debugging-Optionen:" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Konnte Konfigurationsdatei »%s« nicht finden!" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Konfigurationsdatei aus neuerer Gnubiff-Version »%s« geladen." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Konfigurationsdatei aus alter Gnubiff-Version »%s« geladen." #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Versuche alle Optionen zu konvertieren." #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Erfolgreich alle Optionen konvertiert." #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Erfolgreich einige Optionen konvertiert. Die folgenden Optionen müssen " "manuell aktualisiert werden: %s." #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Kann die Konfigurationsdatei »%s« nicht öffnen!" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Kann keinen XML-Parser für die Konfigurationsdatei erzeugen!" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Keine Briefkastendefinition in der Konfigurationsdatei »%s« gefunden!" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Illegales Parameterformat in der Konfigurationsdatei!" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Kein Protokoll für Briefkasten %d angegeben" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Kann Thread nicht erzeugen: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "Briefkasten %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Kann die Kopfzeile für den Inhaltstyp nicht parsen]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Kann die Kopfzeile für die Kodierung nicht parsen]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Missgebildete Multipart-Nachricht]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Kann den ersten Teil der Multipart-Nachricht nicht finden]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Diese Nachricht besitzt keinen unterstützten Inhaltstyp: »%s/%s«]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Fehler beim Übersetzen eines regulären Ausdrucks.\n" "Regulärer Ausdruck: %s\n" "Fehlermeldung: %s" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Kann Nachrichten nicht nach »%s« sortieren" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Kann mit »%s« auf Port %d keine Verbindung aufbauen" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Konnte das Zertifikat »%s« für »%s« nicht laden" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Kann entfernten Host »%s« auf Port %d nicht identifizieren" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Kann nicht an »%s« auf Port %d schreiben" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Kann nicht von »%s« auf Port %d lesen" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Kann nicht das Timeout zum Lesen auf dem Socket setzen: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Kann »%s« nicht öffnen." #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Diese Nachricht besitzt keinen Teil mit unterstütztem Inhaltstyp]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Kann Ordner »%s« auf dem Server »%s« nicht auswählen" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Bekomme keine Bestätigung von »%s« auf Port %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Der Server sendet keine unmarkierte »%s«-Antwort oder Bestätigung" #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Der Server sendet keine unmarkierte »%s«-Antwort" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Der Server beendet die Verbindung unverzüglich:%s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Interner Fehler des Servers oder unbekannter Fehler:%s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Warnung des Servers:%s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Kann neues Mail-Verzeichnis nicht öffnen (»%s«)." #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Leeres Passwort" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Fehlermeldung des POP3-Servers:%s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Keine positive Antwort vom POP3 server bekommen" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Der POP-Server scheint das APOP-Protokoll nicht zu akzeptieren (kein " "Zeitstempel bereitgestellt)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problem mit der Verschlüsselung, das zur Konfigurationszeitentdeckt " "worden sein sollte" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Unbekannte Option »%s«" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Kann Option »%s« nicht auf »%s« setzen" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Kann das angegebene Widget (»%s«) nicht innerhalb der XML-Struktur (»%s«) " "finden" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "Keine Post" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Konnte die Schnittstelle nicht bauen.\n" "\n" "Name: %s\n" "Pfad: %s\n" "\n" "Bitte versichern Sie sich, dass das Paket korrekt installiert wurde." #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect benötigt funktionierendes gmodule" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Konnte Signalhandler »%s« nicht finden." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr " unbekannt" #: ../src/ui-applet.cc:222 msgid " error" msgstr " Fehler" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " wird geprüft..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Briefkasten" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Format" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Status" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Sicherheit" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Kein Briefkasten ausgewählt" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Option" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Wert" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "_Start" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Stopp" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Datei für ein neues Nachrichtenbild wählen" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "" "Bitte den Benutzernamen und das Passwort für den Briefkasten »%s« eingeben" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Kann »%s« nicht als vertrauenswürdig verifizieren.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "Entweder ist das Zertifikat unvollständig, oder die Gegenseite gibt vor, »%s« " "zu sein, vermutlich um Ihr Passwort zu bekommen" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Automatische Erkennung" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Datei oder Ordner" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Benutzer & Passwort" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Benutzer & Passwort verschlüsselt (apop)" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL mit Zertifikat" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Wähle eine Datei oder einen Ordner" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Wähle eine Datei mit Zertifikat" #: ../src/ui-popup.cc:195 msgid "From" msgstr "Absender" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Betreff" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Datum" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Sie haben gerade einen unbekannten internen Fehler gefunden. Bitte senden " "Sie einen detaillierten Fehlerbericht an »gnubiff-bugs@lists.sourceforge." "net«.\n" "\n" "Zusätzliche Informationen:\n" #: ../src/ui-applet-gnome.cc:166 msgid "Info" msgstr "_Info" #: ../src/ui-applet-gnome.cc:165 msgid "Mark mailboxes read" msgstr "Nachrichten als gelesen _markieren" #: ../src/ui-applet-gnome.cc:163 msgid "Preferences..." msgstr "Einstellungen..." #: ../src/ui-applet-gnome.cc:164 msgid "Run command" msgstr "_Befehl ausführen" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Überwachung von Email-Briefkästen" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "Gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "_Über" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff ist ein Programm zur Briefkastenüberwachung." #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" "Gnubiff ist Teil des GNU-Projekts.\n" "Es ist veröffentlicht unter der Obhut von GNU.\n" "\n" "Dieses Programm ist freie Software. Sie können es unter den Bedingungen der " "GNU General Public License, wie von der Free Software Foundation " "veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 " "der Lizenz oder (nach Ihrer Option) jeder späteren Version.\n" "\n" "Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen " "von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die " "implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN " "BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.\n" "\n" "Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem " "Programm erhalten haben. Falls nicht, siehe http://www.gnu.org/licenses/.\n" "\n" "Für eine Ausnahme zur GNU General Public License, um Gnubiff an die OpenSSL-" "Bibliothek gelinkt zu verteilen, vergleiche die Datei README." #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "_Befehl ausführen" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "_Beenden" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "Kurzhilfe" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Befehle" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Experteneditiermodus" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Allgemeines" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Nachrichten-Header" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Darstellung" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Briefkästen" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Bei neuen Nachrichten" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Bei keinen neuen Nachrichten" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff ist Teil des GNU-Projekts.\n" " Es ist veröffentlicht unter der Obhut von GNU." #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Die Entwickler können unter gnubiff-" "devel@lists.sourceforge.net kontaktiert werden.\n" "Fehler sollten an gnubiff-bugs@lists." "sourceforge.net gemeldet werden." #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" "Hier ist eine Aufzählung derjenigen Leute, die Gnubiff in " "verschiedene Sprachen übersetzt haben (Übersetzer älterer Versionen sind mit " "einem Stern markiert):" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Zu Gnubiff haben viele Personen etwas beigesteuert, indem sie\n" " • Fehler gemeldet haben\n" " • Verbesserungsvorschläge eingereicht haben\n" " • Code eingesendet haben.\n" "Hier ist eine Liste dieser Personen:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Platzierungseinstellungen für das Applet" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Applet _oder Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "Aus_wählen..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Wähle Bilddatei" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Mit_wirkende" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "_Danksagungen" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "_Entwickler" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Option bearbeiten" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "E_xperte" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Dateiname des ausgewählten Bildes" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Liste alle Optionen." #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Liste aller Optionen, ihrer Typen und gegenwärtigen Werte. Um eine Option zu " "bearbeiten, einen Doppelklick auf ihren Wert ausführen." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "_Briefkästen" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "_Maintainer" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Maximale Anzahl anzuzeigender Nachrichten" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "_Popup" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Platzierungseinstellungen für das Popup-Fenster" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "" "Nach denjenigen (der angezeigten) Optionen suchen, die den String im " "Texteingabefeld enthalten." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Auf Standardwert zurücksetzen" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "B_ild anzeigen:" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "_Text anzeigen:" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "B_ild anzeigen:" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "_Text anzeigen:" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "String, nach dem gesucht werden soll." #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" "Anzuzeigender Text bei neuen Nachrichten (»%d« und »%D« bezeichnet die Anzahl " "der neuen Nachrichten; »%d« wird mit Nullen aufgefüllt). Pango kann zur " "Formatierung benutzt werden." #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Auszuführender Befehl bei Ankunft neuer Nachrichten" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Auszuführender Befehl bei Doppelklick auf das Piktogramm" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "Der Editierdialog für alle Optionen, die von Gnubiff intern verwendet " "werden, kann hier aktiviert werden. So ist es möglich, Optionen zu ändern, " "für die auf der Benutzeroberfläche keine Editiermöglichkeiten zur Verfügung " "stehen. Eine kurze (englischsprachige) Beschreibung für jede Option wird " "angegeben.\n" "Warnung: Das Ändern dieser Optionen kann dazu führen, dass sich " "Gnubiff nicht vernünftig verhält, oder dass sich Sicherheitsprobleme ergeben." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Zeichensatz um Informationen darzustellen" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Zeit, die das Popup-Fenster dargestellt wird" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Option verändern" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Überse_tzer" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "F_ensterdekoration verwenden" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "_Fensterplatzierung verwenden:" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "Bei Doppel_klick:" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Bei _neuen Nachrichten:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Sollen Optionen im Expertenmodus editiert werden können?" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Soll ein Text angezeigt werden?" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Soll ein Bild angezeigt werden?" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Soll ein Popup-Fenster angezeigt werden?" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Soll die Anzahl der anzuzeigenden Nachrichten beschränkt werden?" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Soll ein Bild angezeigt werden?" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Soll der Expertenreiter angezeigt werden? Beachte: Das Deaktivieren dieser " "Option kann nur durch manuelles Editieren der Konfigurationsdatei rückgängig " "gemacht werden!" #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Soll die Formatierung für die Nachrichten verwendet werden?" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Soll die Fensterplatzierung verwendet werden?" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "" "Soll das Popup-Fenster mit Fenstermanager-Dekorationen versehen werden?" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" "[Max. Länge des Absenders]:[Max. Länge des Betreffs]:[Max. Länge des Datums]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "Aus_wählen..." #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "A_nzeigen für" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "Optionen im _Expertenmodus editieren" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Zeichensatz:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "For_mat der Ausgabe:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "An_zahl einzusammelnder Nachrichten beschränken auf" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "Anzahl einschr_änken auf" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "Expertenreiter an_zeigen" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "Einstellungen für Gnubiff" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "Nachrichten" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "Nachrichten" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "Sekunden" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Details" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "A_dresse:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Aut_hentifizierung:" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Auswählen..." #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "_Zertifikat:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Datei, die das Zertifikat enthält" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Port, auf dem der Server kontaktiert werden soll" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Verbindung:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Verz_ögerung:" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Ordner auf dem Server" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Eigenschaften des Briefkastens" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Name des Briefkastens" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Es soll ein anderer Port verwendet werden" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Es soll ein anderer Ordner verwendet werden" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Es soll der Standard-Port verwendet werden" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Es soll der standardmäßige Eingangsordner verwendet werden" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "Das Zeitintervall zwischen Überprüfungen auf neue Nachrichten bzw. zwischen " "Verbindungsversuchen, falls die Verbindung abbricht" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Passwort auf dem Server" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Benutzername auf dem Server" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Briefkasten:" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "_Name:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "_Passwort:" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "T_yp:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Benutzername:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "benu_tzerdefiniert" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "Datei, Ordner oder Rechnername" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "Minuten" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "benut_zerdefiniert" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "Sekunden" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "standardm_äßig" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "standardmä_ßig" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Authentifizierung" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Passwort auf dem Server" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Benutzername auf dem Server" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Adresse" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Ausgestellt auf" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Akzeptieren" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Kann Server nicht zertifizieren" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Details des Zertifikats" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Name" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "Land" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Ort" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organisation" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Abteilung" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Bundesland oder Provinz" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Datum" #: ../ui/popup.glade.h:2 msgid "From" msgstr "Absender" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Betreff" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "Nachrichtentext" gnubiff-2.2.16/po/POTFILES.in0000644000175000017500000000114212474424634012346 00000000000000src/decoding.cc src/gnubiff.cc src/ui-applet-gnome.cc src/biff.cc src/mailbox.cc src/header.cc src/socket.cc src/file.cc src/imap4.cc src/maildir.cc src/mh.cc src/pop.cc src/apop.cc src/pop3.cc src/option.cc src/options.cc src/gnubiff_options.cc src/gui.cc src/ui-applet-gtk.cc src/ui-preferences.cc src/ui-authentication.cc src/ui-certificate.cc src/ui-properties.cc src/gtk_image_animation.cc src/ui-popup.cc src/support.cc src/GNOME_gnubiffApplet.xml src/GNOME_gnubiffApplet.server.in ui/applet-gtk.glade ui/preferences.glade ui/properties.glade ui/authentication.glade ui/certificate.glade ui/popup.glade gnubiff-2.2.16/po/Makevars0000644000175000017500000000365712474422124012272 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = gnubiff-bugs@lists.sourceforge.net # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # Create C header files for the strings from XML files. These files can be # processed by xgettext. %.h: intltool-update -s gnubiff-2.2.16/po/it.po0000644000175000017500000014362512474422124011552 00000000000000# msgid "" msgstr "" "Project-Id-Version: gnubiff\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2005-12-07 23:43+0100\n" "Last-Translator: Stefano Fabri \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[La codifica \"%s\" di questo messaggio non pu essere decodificata]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Non possibile decodificare questa linea dell'intestazione]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Impossibile convertire il set di caratteri (da \"%s\" a \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Avviare l'applet gnome dalla linea di comando" #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "File di configurazione da usare" #: ../src/gnubiff.cc:98 msgid "file" msgstr "file" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Salta il processo di configurazione" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Stampare le informazione sulla versione ed uscire" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Opzioni generali da linea di comando:" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Opzioni per il debug:" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "File di configurazione (%s) non trovato !" #: ../src/biff.cc:596 #, fuzzy, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "" "File di configurazione caricato da una vecchia versione di gnubiff \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "" "File di configurazione caricato da una vecchia versione di gnubiff \"%s\"." #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Tentativo di conversione di tutte le opzioni in corso." #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Tutte le opzioni sono state convertite correttamente." #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Alcune opzioni sono state convertite correttamente. Le seguenti opzioni " "devono essere aggiornate manualmente: %s." #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Non riesco ad aprire il tuo file di configurazione (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "" "Non riesco a creare il parser XML per il tuo file di configurazione (%s)" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Non stata trovata l'impostazione di una casella di posta impostata nel tuo " "file di configurazione (%s)" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Formato del parametro illegale nel file di configurazione" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Nessun protocollo stato specificato per la casella di posta %d" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Impossibile creare il thread: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "casella di posta %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "" "[Analisi della linea d'intestazione del tipo di contenuto non riuscita]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "" "[Analisi della linea di intestazione della codifica di trasferimento dei " "contenuti non riuscita]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Messaggio multi parte non conforme]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "" "[L'inizio della prima parte nel messaggio multi parti non stata trovata]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Questo messaggio ha un tipo di contenuto non supportato: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Ordinamento messaggi di posta per \"%s\" non possibile" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Impossibile connettersi a %s alla porta %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Impossibile caricare il certificato (%s) for %s" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Non riesco ad identificare l'host remoto (%s sulla porta %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Impossibile scrivere a %s sulla porta %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Impossibile leggere da %s dalla porta %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Impostazione del timeout sulla socket non riuscito: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Non riesco ad aprire %s." #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "" "[Questo messaggio non ha nessuna parte con un tipo di contenuto supportato]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Impossibile selezionare la cartella %s sull'host %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Impossibile prendere il riconoscimento da %s alla porta %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Il server non invia risposte non etichettate \"%s\"" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Il server ha chiuso la connessione immediatamente:%s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Errore interno del server o errore sconosciuto:%s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Avviso dal server:%s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Non riesco ad aprire la directory per la nuova posta (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Password vuota" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Messaggio d'errore dal server POP3:%s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Non stata ricevuta una risposta positiva dal server POP3" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Il tuo server pop non sembra accettare il protocollo apop (nessuna " "datazione stata fornita)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problemi con la crittografia che potrebbero essere stati riscontrati al " "momento della configurazione" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Opzione sconosciuta \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Impossibile impostare l'opzione \"%s\" a \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Non riesco a trovere il widget specificato (\"%s\") nella struttura xml (\"%s" "\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "niente posta" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Non posso costruire l'intefaccia.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Sei pregato di assicurarti che il paccheto sia stato installato " "correttamente." #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect richiede un gmodule funzionante" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Non riesco a trovare il signal handler '%s'." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr " sconosciuto" #: ../src/ui-applet.cc:222 msgid " error" msgstr " errore" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " sto controllando..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Casella mail" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "_Tipo:" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Sato" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Sicurezza" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Nessuna casalle di posta selezionata" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Opzioni" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "_Valore:" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "_Avvia" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Ferma" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Scegli l'immagine per quando c' nuova posta" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "" "Prego inserisci il tuo nome utente e password per la casella di posta '%s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Impossibile verificare l'identit di %s come sito sicuro.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "O il certificato del sito incompleto oppure sei connesso a un sito " "pretendendo di essere %s, con la possibilit di ottenere la tua password" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Impostazione automatica" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "File o cartella" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Identificativo utente/Password" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Crittografa Utente/Pass (apop)" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL con certificato" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Scegli il file o una cartella" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Scegli il file del certificato" #: ../src/ui-popup.cc:195 msgid "From" msgstr "Da" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Oggetto" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Data" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Si appena verificato un errore interno sconosciuto. Inviare un rapporto " "dettaglio sul bug a \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Informazioni addizionali:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Segna la posta come letta" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Preferenze..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Esegui il comando" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Un programma per la notifica della posta" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "Informazioni" #: ../ui/applet-gtk.glade.h:2 #, fuzzy msgid "Gnubiff is a mail notification program." msgstr "Un programma per la notifica della posta" #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Esegui il comando" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "_Esci" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "suggerimento" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Comadi" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Modalit di editazione per esperti" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Generale" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Intestazioni" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Layout" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Caselle di posta" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Quando c' nuova posta" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Quando non c' posta" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff parte del progetto GNU.\n" " E' rilasciato sotto i termini di GNU." #: ../ui/preferences.glade.h:11 #, fuzzy msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Gli errori possono essere segnalati a gnubiff-bugs@lists.sourceforge.net" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Molte persone hanno utilmente contribuito a gnubiff attraverso\n" " - la segnalazione dei problemi\n" " - il suggerimento di varie migliorie\n" " - l'invio del codice attuale\n" "Ecco una lista di queste persone:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Gemotria dell'applet" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Applet o Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "S_foglia..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Scegli il file di un'immagine" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Hanno contribuito" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Crediti" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Sviluppatori" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Opzioni di editazione" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Esperto" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Nome file dell'immagine" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Elenca tutte le opzioni." #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Lista delle opzioni, il tipo e il valore corrente. Per editare un opzione " "fare doppio clic sul suo valore." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Caselle mail" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Manutentori" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Numero massimo di intestazioni da visualizzare" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Notifica" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Geometria della finestra a comparsa" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "" "Cerca questa (visualizzata) opzione che contiene la stringa nella casella di " "testo." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Imposta al valore predefinito" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Visualizza _immagine:" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Visualizza il _testo:" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Visualizza i_mmagine:" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Visualizza il t_esto:" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "La stringa che deve essere cercata." #: ../ui/preferences.glade.h:44 #, fuzzy, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "Il testo da visualizzare (%d il numero dei nuovi messaggi)" #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Il comando da eseguire quando la nuova posta arrivata" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Il comando da eseguire quando sull'icona stato fatto un doppio clic" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "La finestra di editazione per tutte le opzione che gnubiff usa internamente " "pu essere abilitata qui. E' impossibile cambiare il valore delle opzioni " "per le quali non fornito un widget grafico. Una breve descrizione per ogni " "opzione fornita.\n" "Attenzione: Cambiare queste opzioni potrebbe cause un " "malfunzionamento di gnubiff o il verificarsi di problemi di sicurezza." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Il font da utilizzare nel visualizzare le informazioni" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "L'ora da visualizzare nella finestra a comparsa" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Traduttori" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Usa _decorazione" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Usa la _geometria:" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "Sul _doppio click:" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Quando arriva della _nuova posta:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Se queste opzioni possono essere editate in modalit esperta" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Indica se visualizzare del testo" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Indica di visualizzare un immagine" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Indica se visualizzare una finestra a comparsa" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "" "Nel caso vi necessita di restringere il numero delle intestazioni " "visualizzate" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Indica se visualizzare un immagine" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Indica se mostrare la linguetta per esperti. Nota: Disabilitando questa " "opzione pu essere solo riabilitata editando manualmente il file di " "configurazione!" #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Indica se utilizzare la formattazione per l'header" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Indica se usare la gometria" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Quando usare le decorazioni del window manager" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" "[dimensione massima del mittente]:[dimensione massima dell'oggetto]:" "[dimensione massima della data]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "_Sfoglia..." #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "_Visualizza per" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Edita le opzioni in modalit esperta" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Caratteri " #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Formato:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Restringi i messaggi presi a" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Riduci il numero a" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "_Visualizza la linguetta per esperti" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "preferenze di gnubiff" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "intestazione(i)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "mesaggio(i) di posta" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "secondo(i)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Dettagli" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "I_ndirizzo:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Aut_enticazione" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Sfo_glia..." #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tificato:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Nome file del certificato" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Porta di connessione per collegarsi al server" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Connessione:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Ritar_do:" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Cartella della casella di posta" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Propriet della casa di posta" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Nome della casella di posta" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Altra porta di connessione" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Altre caselle di posta %d" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Porta di connessione standard" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Cartella standard di posta" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "Il totale di tempo da aspettare tra due controlli di posta o di un nuovo " "tentativo quando non la connessione perduta" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "La tua password sul server di posta" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Il tuo nome utente sul server di posta" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Casella mail" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "N_ome:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "_Password:" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Tipo:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Nomeutente:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "_altro" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "nome del file o della cartella o il nome host" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minuti" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "alt_ro" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "secondi" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "stan_dard" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "stand_ard" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Autenticazione" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "La tua password sul server" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Il tuo nome utente sul server" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Indirizzo" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Emesso a" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Accetta" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Non posso certificare il server" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Dettagli del certificato" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nome comune" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "Paese" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Localit" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organizzazione" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Unit dell'organizzazione" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Stato o Profincia" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Data" #: ../ui/popup.glade.h:2 msgid "From" msgstr "Da" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Oggeto" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "contenuto del messaggio" #~ msgid "About gnubiff" #~ msgstr "Informazioni su gnubiff" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "New mail" #~ msgstr "Nuova posta" #~ msgid "No mail" #~ msgstr "Niente posta" #~ msgid "Applet" #~ msgstr "Applet" #~ msgid "00" #~ msgstr "00" #~ msgid "Text to display" #~ msgstr "Testo da visualizzare" #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Non riesco a trovare la directory per la nuova posta (%s)" #, fuzzy #~ msgid "Gnubiff %v %c" #~ msgstr "gnubiff" #~ msgid "(C) 2000-2004 Nicolas Rougier" #~ msgstr "(C) 2000-2004 Nicolas Rougier" #, fuzzy #~ msgid "" #~ " Released under the aegis of GNU\n" #~ " Copyright (c) 2000-2005 Nicolas Rougier" #~ msgstr "(C) 2000-2004 Nicolas Rougier" #~ msgid "* error *" #~ msgstr "* errore *" #~ msgid "Error" #~ msgstr "Errore" #, fuzzy #~ msgid "Whether the window shall appear in pagers" #~ msgstr "Finestra Biff con dercorazioni del gestore delle finestre o senza" #, fuzzy #~ msgid "Gnubiff 2.1.1" #~ msgstr "gnubiff" #, fuzzy #~ msgid "date" #~ msgstr "Data" #, fuzzy #~ msgid "from" #~ msgstr "Da" #, fuzzy #~ msgid "subject" #~ msgstr "Oggetto" #~ msgid "*" #~ msgstr "*" #~ msgid "00/00" #~ msgstr "00/00" #~ msgid "Copyright (c) 2000-2004 Nicolas Rougier\n" #~ msgstr "Copyright (c) 2000-2004 Nicolas Rougier\n" #~ msgid "About..." #~ msgstr "Informazioni su..." #, fuzzy #~ msgid "" #~ "gnubiff has originally been written by Nicolas Rougier.\n" #~ "Many people have further contributed to gnubiff by\n" #~ " * reporting problems\n" #~ " * suggesting various improvements\n" #~ " * submitting actual code.\n" #~ "\n" #~ "Here is a list of these people in no particular order:\n" #~ " - Robert Sowada\n" #~ " - Roland Stigge\n" #~ " - Jean-Yves Lefort\n" #~ " - Calum Mackay\n" #~ " - Paul Kuliniewicz\n" #~ " - Erik Sittman\n" #~ " - Dries Verachtert\n" #~ " - Grzegorz Gotawski\n" #~ " - Adam Benjamin\n" #~ " - Theodore Tegos\n" #~ " - Achim Settelmeier\n" #~ " - Barry Skidmore\n" #~ " - Jason Lowdermilk\n" #~ " - Marc-jano Knopp\n" #~ " - Suzan Wassman\n" #~ " - Philippe Berger\n" #~ " - Earl A. Killian\n" #~ " - Christian Probst\n" #~ " - Hans-Ulrich Schaefer\n" #~ " - Josh Parsons\n" #~ " - Michael Moellney\n" #~ " - Dennis Bjorklund\n" #~ " - Craig Agricola\n" #~ " - Bernhard Valenti\n" #~ " - Josh Berdine\n" #~ " - Michel Leunen\n" #~ " - Greg Fenton\n" #~ " - Cai Yu\n" #~ " - Chris Snell\n" #~ " - Reid Rivenburgh\n" #~ " - Neil Muller\n" #~ " - Sascha Ludecke\n" #~ " - Richard Torkar\n" #~ " - Pete Phillips\n" #~ " - Blaise Tarr\n" #~ "\n" #~ "And of course, there are also translators:\n" #~ " - Roland Stigge, Robert Sowada (de)\n" #~ " - Nicolas Lichtmaier (es)\n" #~ " - Elros Cyriatan (nl)\n" #~ " - Michel Robitaille (fr)\n" #~ " - Eugen Hoanca (ro)\n" #~ " - David Smeringe (sv)\n" #~ msgstr "" #~ "gnubiff è stato originalmente scritto da Nicolas Rougier.\n" #~ "Molte altre persone in seguito hanno contribuito a gnubiff\n" #~ " * segnalando problemi\n" #~ " * suggerendo migliorie varie\n" #~ " * inviando l'attuale codice.\n" #~ "\n" #~ "Questa è la lista delle persone in nessun ordine particolare:\n" #~ "··-·Robert·Sowada\n" #~ "··-·Roland·Stigge\n" #~ "··-·Jean-Yves·Lefort\n" #~ "··-·Calum·Mackay\n" #~ "··-·Paul·Kuliniewicz\n" #~ "··-·Erik·Sittman\n" #~ "··-·Dries·Verachtert\n" #~ "··-·Grzegorz·Gotawski\n" #~ "··-·Adam·Benjamin\n" #~ "··-·Theodore·Tegos\n" #~ "··-·Achim·Settelmeier\n" #~ "··-·Barry·Skidmore\n" #~ "··-·Jason·Lowdermilk\n" #~ "··-·Marc-jano·Knopp\n" #~ "··-·Suzan·Wassman\n" #~ "··-·Philippe·Berger\n" #~ "··-·Earl·A.·Killian\n" #~ "··-·Christian·Probst\n" #~ "··-·Hans-Ulrich·Schaefer\n" #~ "··-·Josh·Parsons\n" #~ "··-·Michael·Moellney\n" #~ "··-·Dennis·Bjorklund\n" #~ "··-·Craig··Agricola\n" #~ "··-·Bernhard·Valenti\n" #~ "··-·Josh·Berdine\n" #~ "··-·Michel·Leunen\n" #~ "··-·Greg·Fenton\n" #~ "··-·Cai·Yu\n" #~ "··-·Chris·Snell\n" #~ "··-·Reid·Rivenburgh\n" #~ "··-·Neil·Muller\n" #~ "··-·Sascha·Ludecke\n" #~ "··-·Richard·Torkar\n" #~ "··-·Pete·Phillips\n" #~ "··-·Blaise·Tarr\n" #~ "\n" #~ "E naturalmente, ci sono anche i traduttori:\n" #~ " - Roland Stigge, Robert Sowada (de)\n" #~ " - Nicolas Lichtmaier (es)\n" #~ " - Elros Cyriatan (nl)\n" #~ " - Michel Robitaille (fr)\n" #~ " - Eugen Hoanca (ro)\n" #~ " - David Smeringe (sv)\n" #~ "\n" #~ "\n" #~ "Se ti piace questo programma mandami una cartolina:\n" #~ " Nicolas Rougier\n" #~ " Campus Scientifique, B.P. 239\n" #~ " F-54506 Vandoeuvre-Les-Nancy Cedex\n" #~ " FRANCE" #~ msgid "" #~ "\n" #~ "This version of gnubiff has been compiled with GNOME support\n" #~ msgstr "" #~ "\n" #~ "Questa versione di gnubiff è stata comiplate con il supporto per " #~ "Gnome\n" #~ msgid "If you want to use the GTK version, type gnubiff --gtk\n" #~ msgstr "se vuoi usare la versione Gtk, digita gnubiff --gtk\n" #~ msgid " then use -c file to specify an alternate configuration file\n" #~ msgstr "" #~ " poi usa -c file per specificare un file di configurazione alternativo\n" #~ msgid " and -n to skip configuration process\n" #~ msgstr " e -n per saltare il processo di configurazione\n" #~ msgid "If you want to use the GNOME version, use gnome panel\n" #~ msgstr "se vuoi usare la versione GNOME, usa il panello di gnome\n" #~ msgid "Have a nice day\n" #~ msgstr "Buongiorno\n" #~ msgid "" #~ "\n" #~ "This version of gnubiff has been compiled with GNOME support" #~ msgstr "" #~ "\n" #~ "Questa version di gnubiff è stata compilata con il supporto per GNOME" #~ msgid "Now I will hang forever...\n" #~ msgstr "Adesso mi blocchero per sempre \n" #, fuzzy #~ msgid "Date" #~ msgstr "Carattere" #, fuzzy #~ msgid "From" #~ msgstr "Finestra di notifica" #, fuzzy #~ msgid "Subject" #~ msgstr "Carattere" #~ msgid "From: " #~ msgstr "Da: " #~ msgid "Subject: " #~ msgstr "Oggetto: " #~ msgid "Date: " #~ msgstr "Data: " #~ msgid "Unable to create lookup thread: %s\n" #~ msgstr "Impossibile creare il thread di controllo: %s\n" #~ msgid "Mailbox format is unknown" #~ msgstr "Il formato della casella di posta è sconosciuto" #~ msgid "Start mail application" #~ msgstr "Lancia l'applicazione di posta" #~ msgid "Browse for a location" #~ msgstr "Scegli un indirizzo" #~ msgid "Browse for a certificate" #~ msgstr "Scegli il file per il certificato" #, fuzzy #~ msgid "_Popup" #~ msgstr "_Notifica:" #, fuzzy #~ msgid "Type" #~ msgstr "Utente" #, fuzzy #~ msgid "Status" #~ msgstr "Porta" #, fuzzy #~ msgid "Security" #~ msgstr "Porta" #, fuzzy #~ msgid "in_box" #~ msgstr "Casella mail" #~ msgid "Browse for a sound" #~ msgstr "Scegli il file sonoro" #~ msgid "Browse for a mail application" #~ msgstr "Scegli l'applicazione di posta tramite file" #~ msgid "Text to be displayed when new mail, %d is the number of mail." #~ msgstr "" #~ "Testo che deve essere visualizzato quando c'è nuova posta, %d è " #~ "il numero dei messaggi." #~ msgid "%d" #~ msgstr "%d" #~ msgid "'Sender' field maximum size" #~ msgstr "Dimensione massima del campo 'Mittente'" #~ msgid "'Subject' field maximum size" #~ msgstr "Dimensione massima del campo 'Oggetto'" #~ msgid "+0+0" #~ msgstr "+0+0" #~ msgid "-0+0" #~ msgstr "-0+0" #~ msgid "Biff window" #~ msgstr "Finestra Biff" #~ msgid "Popup window" #~ msgstr "Finestra di notifica" #~ msgid "Advanced" #~ msgstr "Avanzate" #~ msgid "Browse for a soundfile" #~ msgstr "Scegli il file sonoro" #~ msgid "Color:" #~ msgstr "Colore:" #~ msgid "Display popup window for poptime seconds" #~ msgstr "" #~ "Visualizza una finestra a comparsa per i secondi indicati in tempo di " #~ "comparsa" #~ msgid "Do not show any text when new mail" #~ msgstr "Non visualizzare nessun testo quando c'è nuova posta" #~ msgid "Geometry" #~ msgstr "Geometria" #~ msgid "Layout" #~ msgstr "Aspetto" #~ msgid "Let window manager place window" #~ msgstr "Lascia che sia il gestore delle finestre a posizionare la finestra" #~ msgid "Ma_ximum number of email to collect:" #~ msgstr "Numero ma_ssimo di posta raccolta:" #~ msgid "Mail a_pplication:" #~ msgstr "A_pplicazione di posta:" #~ msgid "Mail application to launch via popup menu." #~ msgstr "Applicazione email da lanciare attravarso il menu a comparsa." #~ msgid "" #~ "Maximum number of displayed headers (you know, if you have a screen with " #~ "a finite display area...)" #~ msgstr "" #~ "Numero massimo delle intestazioni visualizzate (tu lo sai, se hai una " #~ "schermo con una limitata area di visualizzazione...)" #~ msgid "Maximum size of the sender field in popup window" #~ msgstr "Dimensione massima del campo del mittente nella finestra a comparsa" #~ msgid "No mail:" #~ msgstr "Niente posta:" #~ msgid "No sound when new mail has arrived" #~ msgstr "Nessun suono quando la nuova posta è arrivata" #~ msgid "Pick a color for applet font" #~ msgstr "Scegli un colore per il carattere dell'applet" #~ msgid "Pick a color for popup font" #~ msgstr "Scegi un coloro per il carattere della notifica" #~ msgid "Pick a font for applet" #~ msgstr "Scegli un font per l'applet" #~ msgid "Pick a font for popup" #~ msgstr "Scegli un font per la notifica" #~ msgid "Popup window with window manager decorations or not" #~ msgstr "" #~ "Finestra di notifica con decorazioni del manager delle finestre o senza" #~ msgid "" #~ "Released under the GNU general public license\n" #~ "(c) 2000-2004 Nicolas Rougier\n" #~ "Special thanks to Robert Sowada and " #~ "Roland Stigge for their help" #~ msgstr "" #~ "Rilasciato sotto la GNU general public license\n" #~ "(c) 2000-2004 Nicolas Rougier\n" #~ "Un ringraziamento speciale a " #~ "Robert·Sowada·e Roland·Stigge·per il loro aiuto" #~ msgid "Sound play command (%s is the soundfile, %v is the volume)" #~ msgstr "" #~ "Commando per eseguire il suono (%s e il file sonoro, %v è il volume)" #~ msgid "Sound when new mail has arrived" #~ msgstr "Esegue un suono quando la nuova posta è arrivata" #~ msgid "System _beep" #~ msgstr "Beep di sistema" #~ msgid "System beep when new mail has arrived" #~ msgstr "Beep dell'altoparlante inter quando la nuova posta è arrivata" #~ msgid "Test" #~ msgstr "Prova" #~ msgid "Use image" #~ msgstr "Usa un immagine" #~ msgid "Use of no image implies no applet window for GTK version" #~ msgstr "" #~ "Non usare un'immagine implica non avere la finestra dell'applet per la " #~ "versione GTK" #~ msgid "Use text" #~ msgstr "Usa il testo" #~ msgid "_Biff:" #~ msgstr "_Biff:" #~ msgid "_Command:" #~ msgstr "_Comando:" #~ msgid "_Display popup window when new mail arrives" #~ msgstr "Visualizza la finestra di notifica quando arrivanuova posta" #~ msgid "_File:" #~ msgstr "_File:" #~ msgid "_No sound" #~ msgstr "_Nessun suono" #~ msgid "_Sound" #~ msgstr "_Suono" #~ msgid "balsa" #~ msgstr "balsa" #~ msgid "characters" #~ msgstr "caratteri" #~ msgid "emacs" #~ msgstr "emacs" #~ msgid "evolution" #~ msgstr "evolution" #~ msgid "mozilla -mail" #~ msgstr "mozilla -mail" #~ msgid "netscape -mail" #~ msgstr "netscape -mail" #~ msgid "play %s -v %v" #~ msgstr "play %s -v %v" #~ msgid "thunderbird" #~ msgstr "thunderbird" #~ msgid "xemacs " #~ msgstr "xemacs " #, fuzzy #~ msgid "_Details" #~ msgstr "Dettagi" #~ msgid "Folder to check on the IMAP4 server" #~ msgstr "Cartella da controllare sul server IMAP4" #~ msgid "Folder:" #~ msgstr "Cartella:" #~ msgid "P_ort:" #~ msgstr "P_orta:" #~ msgid "" #~ "Port to connect (usually POP3: 110, IMAP4: 143, POP3 over SSL: 995, IMAP4 " #~ "over SSL: 993)" #~ msgstr "" #~ "Porta a cui connettersi (generalmente POP3: 110, IMAP4: 143, POP3 su SSL: " #~ "995, IMAP4 su SSL: 993)" #~ msgid "Server certificate, leave blank if you do not want to use one" #~ msgstr "" #~ "Certificato del server. lasciare in bianco se non si vuoi usarne uno." #~ msgid "The hostname or IP address of the server" #~ msgstr "Nome host o indirizzo IP del server" #, fuzzy #~ msgid "Time in seconds between each check for pop accounts." #~ msgstr "Intervallo in secondo tra ogni controllo" #~ msgid "Use SSL encryption" #~ msgstr "Usa la crittografia SSL" #~ msgid "_Hostname:" #~ msgstr "_Hostname:" #~ msgid "_Network" #~ msgstr "_Network" #~ msgid "Poll time" #~ msgstr "Intervallo di controllo" #~ msgid "_Delay between checks:" #~ msgstr "_Ritardo tra i controlli:" #~ msgid "%02x" #~ msgstr "%02x" #~ msgid "" #~ "Released under the GNU general public license.\n" #~ "Mail notification program." #~ msgstr "" #~ "Rilasciato sotta la GNU general public license.\n" #~ "Programma di notifica Mail." #~ msgid "Pick a color for popup background" #~ msgstr "Scegli un colore per lo sfondo della notifica" #, fuzzy #~ msgid "Miscellaneous" #~ msgstr "Varie " #, fuzzy #~ msgid "Maximum s_ender size (character):" #~ msgstr "Massima dimensione del mittente" #, fuzzy #~ msgid "Maximum s_ubject size (character):" #~ msgstr "Massima dimensione dell'oggetto" #, fuzzy #~ msgid "Maximum si_ze (line):" #~ msgstr "Massima dimensione del mittente" #~ msgid "Account " #~ msgstr "Account " #, fuzzy #~ msgid "Maximum displayed _headers:" #~ msgstr "Massima dimensione del mittente" #~ msgid " ... " #~ msgstr " ... " #~ msgid " Mailbox" #~ msgstr " Casella di posta" #~ msgid "Applet (GTK only)" #~ msgstr "Applet (solo GTK)" #~ msgid "Popup" #~ msgstr "Notifica" #~ msgid "Sound file" #~ msgstr "File sonoro" #~ msgid "Address / filename" #~ msgstr "Indirizzo / nome del file" #~ msgid "Folder" #~ msgstr "Cartella" #~ msgid "Local" #~ msgstr "Locale" #~ msgid "Mail application" #~ msgstr "Applicazione per posta" #~ msgid "Maximum number of displayed header(s) in popup: " #~ msgstr "" #~ "Numero massimo delle insestazione(i) visualizzate nella notifica: " #~ "" #~ msgid "Network" #~ msgstr "Rete" #~ msgid "Password" #~ msgstr "Password" #~ msgid "Poll time (s)" #~ msgstr "Intervallo (s)" #~ msgid "Pop time(s)" #~ msgstr "Tempo di comparsa(s)" #~ msgid "Server certificate" #~ msgstr "Certificato del server" #~ msgid "character(s)" #~ msgstr "carahterre(i)" #~ msgid "" #~ "APOP protocol: your mailbox is held on an APOP server on a remote host. " #~ "Contact your system admnistrator for setup details." #~ msgstr "" #~ "Protocollo APOP: la tua casella di posta è contenuta in un server " #~ "APOP su un host remoto. Contatta il tuo amministratore di sitema per " #~ "dettagli sulla configurazione." #~ msgid "Address of your mailbox" #~ msgstr "Indirizzo del tua casella di posta" #~ msgid "Check for new mail every polltime seconds" #~ msgstr "" #~ "Controlla la nuova posta dopo ogni volta che sono trascorsi i secondi " #~ "indicati nell'intervallo" #~ msgid "Create a new mailbox" #~ msgstr "Crea una nuova casella di posta" #~ msgid "Decorated" #~ msgstr "Decorata" #~ msgid "Delete current mailbox" #~ msgstr "Cancella l'attuale casella di posta" #~ msgid "Do not show any text when no mail" #~ msgstr "Non visualizzare nessun testo quando non c'è posta" #~ msgid "" #~ "File protocol: for example, your mailbox is held in a file like \"/var/" #~ "log/login_name\"" #~ msgstr "" #~ "Protocollo del file: per esempio, la tua casella di posta è " #~ "contenuta in un file tipo \"/var/log/nome_utente\"" #~ msgid "" #~ "IMAP4 protocol: your mailbox is held on an IMAP4 server on a remote host. " #~ "Contact your system administrator for setup details." #~ msgstr "" #~ "Protocollo IMAP4: la tua casella di posta è su un server IMAP4 su " #~ "un host remoto. Contatta il tuo amministratore di sistema per dettagli " #~ "sulla configurazione." #~ msgid "Image or animation to use when new mail has arrived" #~ msgstr "" #~ "Immagine·o·animazione·da·usare·quando·è " #~ "arrivata nuova posta" #~ msgid "Image or animation to use when no new mail available" #~ msgstr "Immagine o animazione da usare quando non c'è nuova posta" #~ msgid "MH protocol: your mailbox is held in a mh directory." #~ msgstr "" #~ "Protocollo MH: la tua cassa di posta è contenuta in una direttory " #~ "mh." #~ msgid "Maildir protocol: your mailbox is held in a directory." #~ msgstr "" #~ "Protocollo maildir: la tuca casella di posta è contenuta in una " #~ "directory." #~ msgid "Maximum size of subject field in popup window" #~ msgstr "Dimensione massima del campo oggeto nella finesta a comparsa" #~ msgid "" #~ "POP3 protocol: your mailbox is held on a POP3 server on a remote host. " #~ "Contact your system admnistrator for setup details." #~ msgstr "" #~ "Protocollo POP3: la tua casella di posta è contenuta in un server " #~ "POP3 su un host remoto. Contatto il tuo amministratore di sitema per " #~ "dettaggli sulla configurazione." #~ msgid "Placement " #~ msgstr "Piazzamento" #~ msgid "Play selected sound" #~ msgstr "Ascolta il suono selezionato" #~ msgid "Popup " #~ msgstr "Notifica " #~ msgid "" #~ "Positive numbers refer to left border, negative numbers refer to right " #~ "border" #~ msgstr "" #~ "Numeri positivi con riferimento al bordo sinistro, numeri negativi con " #~ "riferimento al bordo destro" #~ msgid "" #~ "Positive numbers refer to top border, negative numbers refer to bottom " #~ "border" #~ msgstr "" #~ "Numeri positivi in riferimento al bordo superiore, numeri negativi in " #~ "riferimento al bordo inferiore" #~ msgid "Previous mailbox" #~ msgstr "Casella di posta precedente" #~ msgid "Protocol " #~ msgstr "Protocollo " #~ msgid "Sanity " #~ msgstr "Piazzamento " #~ msgid "Show date in headers or not" #~ msgstr "Visualizza o no la data nelle intestazioni" #~ msgid "Size " #~ msgstr "Dimensione " #~ msgid "Sounds " #~ msgstr "Suoni " #~ msgid "" #~ "This is the command used to play sound, %s is the name of the file, %v is " #~ "the volume (between 0.0 and 1.0)" #~ msgstr "" #~ "This·is·the·command·used·to·play·sound," #~ "·%" #~ "s·is·the·name·of·the·file," #~ "·%v·is·the·volume·" #~ "(between·0.0·and·1.0)" #~ msgid "Timing " #~ msgstr "Tempo." #~ msgid "Title of the mailbox to be displayed." #~ msgstr "Titolo della casella di posta che deve essere visualizzato." #~ msgid "Use Secure Socket Layer" #~ msgstr "Usa Secure Socket Layer" #~ msgid "Use popup" #~ msgstr "Visualizza la finestra di notifica" #~ msgid "User mail account name " #~ msgstr "Nome utente per l'indirizzo di posta" #~ msgid "User mail account password" #~ msgstr "Password per l'account di posta dell'utente" #~ msgid "apop" #~ msgstr "apop" #~ msgid "imap4" #~ msgstr "imap4" #~ msgid "mail.wav" #~ msgstr "mail.wav" #~ msgid "maildir" #~ msgstr "maildir" #~ msgid "mh" #~ msgstr "mh" #~ msgid "pop3" #~ msgstr "pop3" #~ msgid "Running" #~ msgstr "Attivo" #~ msgid "Stopped" #~ msgstr "Fermo" #, fuzzy #~ msgid "0" #~ msgstr "00" #~ msgid "debug output" #~ msgstr "debug output" #, fuzzy #~ msgid "mail: " #~ msgstr "kmail" #, fuzzy #~ msgid "mail: ++" #~ msgstr "kmail" #, fuzzy #~ msgid "Options" #~ msgstr "Tempo di comparsa(s)" #~ msgid "Title" #~ msgstr "Titolo" #~ msgid "Mail" #~ msgstr "Posta" #~ msgid "Images / Animations " #~ msgstr "Immagini / Animazioni " #~ msgid "Restrict subject size to" #~ msgstr "Riduci la dimensione dell'oggetto a" #~ msgid "Look " #~ msgstr "Guarda " #~ msgid "Biff" #~ msgstr "Biff" #~ msgid "Sans 10" #~ msgstr "Sans 10" gnubiff-2.2.16/po/pt.po0000644000175000017500000007364312474422124011563 00000000000000# translation of gnubiff.po to Português-BR # Portuguese/Brazil translation of gnubiff. # Copyright (C) 2006 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # # Gunther Furtado , 2006. # Felipe Augusto van de Wiel (faw) , 2006. # msgid "" msgstr "" "Project-Id-Version: gnubiff\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2006-10-28 18:15-0200\n" "Last-Translator: Gunther Furtado \n" "Language-Team: l10n portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "pt_BR utf-8\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[A codificação \"%s\" desta mensagem não pode ser decodificada]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Não é possível decodificar esta linha de cabeçalho]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "" "[Não é possível converter os conjuntos de caracteres \n" "(de \"%s\" para \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Iniciar miniaplicativo do gnome a partir da linha de comando " #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Arquivo de configuração a utilizar" #: ../src/gnubiff.cc:98 msgid "file" msgstr "arquivo" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Pular o processo de configuração" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Iniciar o gnubiff sem GUI" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Colocar ícone do gnubiff na bandeja do sistema" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Mostrar versão e sair" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Opções gerais de linha de comando:" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Opções para depuração:" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Arquivo de configuração (%s) não encontrado!" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Arquivo de configuração carregado a partir da nova versão \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Arquivo de configuração carregado a partir da antiga versão \"%s\"." #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Tentando converter todas opções." #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Todas opções convertidas com sucesso." #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Algumas opções convertidas com sucesso. As seguintes opções devem ser " "atualizadas manualmente: %s." #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Não é possível abrir seu arquivo de configuração (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Não é possível criar analizador XML para o arquivo de configuração" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Não foi encontrada definição de caixa de correio \n" "em seu arquivo de configuração (%s)" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Formato de parâmetro ilegal no arquivo de configuração" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Nenhum protocolo especificado para a caixa de correio %d" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Não é possível criar discussão: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "caixa de correio %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "" "[Não é possível analizar o tipo de conteúdo da linha de \n" "cabeçalho]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "" "[Não é possível analizar a codificação de transferência de conteúdo da linha " "de cabeçalho]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Mensagem subdividida malformada]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "" "[Não é possível encontrar o começo da primeira parte em mensagem \n" "subdividida]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Esta mensagem têm um tipo de conteúdo não suportado: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Erro ao compilar uma expressão regular.\n" "Expressão regular: %s\n" "Mensagem de erro: %s" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Não é possível ordenar mensagens por \"%s\"" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Não é possível conectar a %s pela porta %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Falha ao carregar o certificado (%s) para %s" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Não é possível identificar o servidor remoto (%s na porta %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Não é possível escrever em %s na porta %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Não é possível ler de %s na porta %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Não foi possível definir o tempo máximo de leitura na conexão: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Não é possível abrir %s." #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "" "[Esta mensagem não tem nenhuma parte com tipo de conteúdo\n" "suportado]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Não é possível selecionar diretório %s no servidor %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Não é possível obter confirmação de %s na porta %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "" "[%d] Servidor não envia \"%s\" resposta ou confirmação de \n" "recebimento não sinalizada" #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Servidor não envia resposta não marcada \"%s\"" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Servidor fecha a conexão imediatamente:%s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Falha interna do servidor ou erro desconhecido:%s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Alerta do servidor:%s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Não é possível abrir o diretório de novas mensagens (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Senha vazia" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Mensagem de erro do servidor POP3:%s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Não foi recebida resposta positiva do servidor POP3" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Seu servidor pop não parece aceitar o protocolo apop (\"timestamp\" \n" "não fornecido)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problema com a criptografia que deveria ter sido detectado \n" "no momento da configuração." #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Opção desconhecida \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Não é possível definir opção \"%s\" como \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Não é possível encontrar o dispositivo especificado (\"%s\") \n" "dentro da estrutura xml (\"%s\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "sem mensagens" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Não é possível construir a interface.\n" "\n" "Nome: %s\n" "Caminho: %s\n" "\n" "Certifique-se de que o pacote tenha sido instalado corretamente." #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect requer um \"gmodule\" funcional" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Não é possível encontrar o controlador da sinal '%s'" #: ../src/ui-applet.cc:217 msgid " unknown" msgstr " desconhecido" #: ../src/ui-applet.cc:222 msgid " error" msgstr " erro" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " checando..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Caixa de correio" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Tipo" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Estado" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Segurança" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Nenhuma caixa de correio selecionada" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Opção" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Valor" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "Começar (_S)" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "Parar (_S)" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Procurar por uma imagem de correio novo" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Entre com seu nome de usuário e senha para a conta de correio '%s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "" "Não foi possível verificar a identidade de %s como um site \n" "confiável.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "O certificado do site é incompleto ou esta conexão é com um site simulando " "ser %s, possivelmente para tentar obter sua senha" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Autodetectar" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Arquivo ou Diretório" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Usuário/Senha" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Usuário/Senha (apop) criptografados" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL com certificado" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Procurar por um arquivo ou diretório" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Procurar por um arquivo de certificado" #: ../src/ui-popup.cc:195 msgid "From" msgstr "De" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Assunto" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Data" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Você acabou de descobrir um erro interno desconhecido. Por favor, envie um " "relatório de erro detalhado para \"gnubiff-bugs@lists.sourceforge.net\". \n" "\n" "Informação adicional:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Sobre" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Marcar caixas de correio como lidas" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Preferências..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Executar o comando" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Programa de aviso de novas mensagens" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "Sobre" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff é um programa de aviso de novas mensagens." #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 #, fuzzy msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" "Gnubiff faz parte do projeto GNU.\n" "Ele é distribuído sob os auspícios do GNU.\n" "\n" "Este programa é um software livre, você pode redistribui-lo e/ou modifica-lo " "dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação " "do Software Livre (FSF), na versão 2 da LIcença ou (na sua opnião) em " "qualquer versão posterior.\n" "\n" "Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA " "GARANTIA, sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou " "APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNUpara maiores " "detalhes.\n" "\n" "Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este " "programa, se não, escreva para a Fundação do Software Livre (FSF) Inc., 51 " "Franklin St, Fifth Floor, Boston, MA 02110, USA.\n" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Iniciar comando" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "Sair (_Q)" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "dica" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Comandos" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Modo avançado de edição" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Geral" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Cabeçalhos" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Layout" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Caixas de correio" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Opção quando houver nova(s) mensagem(ns)" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Opção quando não houver mensagens" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Este programa é parte do projeto GNU,\n" " Publicado sob os auspícios do GNU." #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Os desenvolvedores podem ser contatados via \n" "gnubiff-devel@lists.sourceforge.net. \n" "\n" "Os relatórios de erro devem ser remetidos a \n" "gnubiff-bugs@lists.sourceforge.net. \n" "" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" "Aqui está uma lista das pessoas que traduziram o gnubiffpara os " "diversos idiomas (tradutores de versões anteriores estãomarcados com um " "asterisco):" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Muitas pessoas contribuíram com o gnubiff\n" " - relatando problemas\n" " - sugerindo vários melhoramentos\n" " - enviando código\n" "Aqui está uma lista destas pessoas:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Geometria do miniaplicativo" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Miniaplicativo ou Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "Navega_r..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Buscar um arquivo de imagem" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Colaboradores" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Créditos" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Desenvolvedores" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Editar opção" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Avançado" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Nome do arquivo de imagem" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Listar todas as opções." #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Lista de opções, por tipo e valores atuais. Para editar uma opção dê um " "duplo clique no seu valor." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Caixas de correio" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Mantenedores" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Número máximo de cabeçalhos a exibir" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Janela popup" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Geometria da janela popup" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "" "Procurar pelas opções (exibidas) que contenham a string na entrada de texto." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Retornar ao valor padrão" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Mostrar _imagem:" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Mostrar _texto:" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Mostrar i_magem:" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Mostrar t_exto:" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Linha a ser procurada." #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" "Texto a ser exibido (%d e %D é o número de novas mensagens, %d é completado " "com zeros à esquerda). Marcação Pango poderá ser usada." #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Comando a executar quando chegarem novas mensagens" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Comando a executar quando o ícone recebe um clique-duplo" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "O diálogo de edição para todas as opções que o gnubiff usa internamente pode " "ser habilitado aqui. Logo, é possível alterar o valor das opções para as " "quais nenhum dispositivo gráfico é oferecido. Uma breve descrição de cada " "opção está disponível.\n" "Alerta: Alterar estas opções pode fazer com que o gnubiff aja de " "maneira imprópria ou que problemas de segurança apareçam." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Fonte a usar para mostrar informação" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Tempo de exibição da janela popup" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Alternar opção" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Tradutores" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Usar _decoração" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Usar _geometria:" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "Opção de realizar um clique-_duplo:" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Quando chegar uma _nova mensagem:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Opção de editar opções no modo avançado" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Opção de mostrar um texto" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Opção de exibir uma imagem" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Opção de exibir a janela popup" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Opção de restringir o número de cabeçalhos exibidos" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Opção de mostrar uma imagem" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Opção de exibir a aba avançada. Nota: A desativação desta opção só pode " "ser \n" "revertida através da edição manual do arquivo de configuração!" #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Opção de usar formato para os cabeçalhos" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Opção de usar geometria" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Opção de usar a decoração do gerenciador de janelas" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[tamanho máx remetente]:[tamanho máx assunto]:[tamanho máx data]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "Navegar... (_B)" #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "Exibir por (_d)" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Editar opções no modo avançado" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Fonte:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Formato:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Restringir mensagens coletadas a" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Restringir número a" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "Mo_strar aba de edição avançada" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "Preferências do gnubiff" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "cabeçalho(s)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "mensagem(ns)" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "segundo(s)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Detalhes" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "En_dereço:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Autenticação: (_h)" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Explorar... (_w)" #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tificado:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Arquivo do certificado" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Porta de conexão para se conectar ao servidor" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Conexão:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Atraso: (_y)" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Diretório da caixa de correio" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Propriedades da caixa de correio" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Nome da caixa de correio" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Outra porta de conexão" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Outro diretório de caixa de correio" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Porta de conexão padrão" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Diretório padrão da caixa de correio" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "A quantidade de tempo de espera entre as checagens de e-mail ou entre as " "tentativas quando a conexão é perdida" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Sua senha no servidor de e-mail" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Seu nome de usuário no servidor de e-mail" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "Caixa de correio: (_M)" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "_Nome:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "Senha: (_P)" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Tipo:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "Nome de _Usuário:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "_other" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "arquivo ou diretório ou nome de servidor" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minutos" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "out_ro" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "segundos" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "pa_drão" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "p_adrão" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Autenticação" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Sua senha no servidor" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Seu nome de usuário no servidor" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Endereço" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Dirigido a" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Aceitar" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Não é possível certificar o servidor" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Detalhes do certificado" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nome Comum" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "País" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Localidade" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organização" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Departamento" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Estado ou Província" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Data" #: ../ui/popup.glade.h:2 msgid "From" msgstr "De" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Assunto" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "conteúdo da mensagem" gnubiff-2.2.16/po/eo.po0000664000175000017500000006703712474424325011552 00000000000000# translation of gnubiff-2.0.2.po to Esperanto # Copyright (C) 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Felipe Castro , 2013. # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.2.11\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2009-04-05 18:19+0200\n" "PO-Revision-Date: 2013-02-06 14:15-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[La enkodigo \"%s\" de tiu ĉi retmesaĝo ne povas esti dekodita]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Ne eblas dekodigi tiun ĉi kaplinion]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Ne eblas konverti signarojn (de \"%s\" al \"utf-8\")]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Lanĉi gnome-aplikaĵeton el la komandlinio" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Agorda dosiero uzota" #: src/gnubiff.cc:98 msgid "file" msgstr "dosiero" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Salti la agordan procezon" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Lanĉi gnubiff sen GUI" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Meti la piktogramon de gnubiff en la taskopleto" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Montri version kaj eliri" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Ĝeneralaj komandliniaj modifiloj:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Modifiloj por rafinigo:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Agorda dosiero (%s) ne estis trovata!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Ni ŝargis agordo-dosieron el pli nova versio de gnubiff \"%s\"." #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Ni ŝargis agordo-dosieron el malnova versio de gnubiff \"%s\"." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Ni provas konverti ĉiujn modifilojn." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Sukceso en konverto de ĉiuj modifiloj." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Sukceso en konverto de kelkaj modifiloj. La jenaj modifiloj devos esti ĝisdatigataj malaŭtomate: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Ne eblas malfermi vian agordan dosieron (%s)" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Ne eblas krei analizilon de XML por agorda dosiero" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Neniu poŝtskatola difino estis trovata en via agorda dosiero (%s)" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Malvalida parametra formo en agorda dosiero" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Neniu protokolo estis indikata por la poŝtskatolo %d" #: src/mailbox.cc:143 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Ne eblas krei fadenon: %s" #: src/mailbox.cc:315 #, c-format msgid "mailbox %d" msgstr "poŝtskatolo %d" #: src/mailbox.cc:640 msgid "" msgstr "" #: src/mailbox.cc:641 msgid "" msgstr "" #: src/mailbox.cc:642 msgid "" msgstr "" #: src/mailbox.cc:696 msgid "[Cannot parse content type header line]" msgstr "[Ne eblas analizi la kaplinion pri enhavtipo]" #: src/mailbox.cc:718 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Ne eblas analizi la kaplinion pri enhava transsenda enkodigo]" #: src/mailbox.cc:759 msgid "[Malformed multipart message]" msgstr "[Misformita multparta mesaĝo]" #: src/mailbox.cc:767 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Ne eblas trovi la unuan komencon de parto en multparta mesaĝo]" #: src/mailbox.cc:813 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Tiu ĉi mesaĝo havas nesubtenatan enhavtipon: \"%s/%s\"]" #: src/mailbox.cc:1215 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Eraro dum kompilado de regulesprimo.\n" "Regulesprimo: %s\n" "Erarmesaĝo: %s" #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Ne eblas vicigi retmesaĝoj laŭ \"%s\"" #: src/socket.cc:123 src/socket.cc:152 src/socket.cc:180 src/socket.cc:189 #: src/socket.cc:198 src/socket.cc:211 src/socket.cc:241 src/socket.cc:250 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Ne eblas konekti al %s ĉe pordo %d" #: src/socket.cc:226 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Ni malsukcesis ŝargi atestilon (%s) por %s" #: src/socket.cc:263 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Ne eblas identigi foran gastigejon (%s ĉe pordo %d)" #: src/socket.cc:348 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Ne eblas skribi al %s ĉe pordo %d" #: src/socket.cc:419 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Ne eblas legi el %s ĉe pordo %d" #: src/socket.cc:442 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Ne eblis difini legan templimon ĉe konektingo: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Ne eblas malfermi %s." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Tiu ĉi retmesaĝo havas neniun parton kun subtenata enhavtipo]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Ne eblas elekti la dosierujon %s ĉe gastigejo %s" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Ne eblas havigi konfirmon el %s ĉe pordo %d" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] La servilo ne sendas nemarkitan respondon \"%s\" nek konfirmon" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] La servilo ne sendas nemarkitan respondon \"%s\"" #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] La servilo fermas konekton tuje:%s" #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Interna servila paneo aŭ nekonata eraro:%s" #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Averto el servilo:%s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Ne eblas malfermi novan retpoŝtan dosierujon (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Malplena pasvorto" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Erarmesaĝo el servilo POP3:%s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Ni ne havas pozitivan respondon el servilo POP3" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Via pop-servilo ŝajne ne akceptas protokolon apop (neniu tempindiko estis liverata)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Problemo kun crypto, kiu devus esti detektata en agord-momento" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Nekonata modifilo \"%s\"" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Ne eblas difini la modifilon \"%s\" al \"%s\"" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Ne eblas trovi la indikitan fenestraĵon (\"%s\") ene de la strukturo xml (\"%s\")" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "neniu retmesaĝo" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Ne eblas konstrui la interfacon.\n" "\n" "Nomo: %s\n" "Vojo: %s\n" "\n" "Bonvolu certigi ke la pako estas ĝuste instalita." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect postulas funkciantan gmodule" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Ne eblis trovi la signal-traktilon '%s'." #: src/ui-applet.cc:217 msgid " unknown" msgstr " nekonata" #: src/ui-applet.cc:222 msgid " error" msgstr " eraro" #: src/ui-applet.cc:231 msgid " checking..." msgstr " kontrolado..." #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Poŝtskatolo" #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Tipo" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Stato" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Sekureco" #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Neniu poŝtskatolo elektita" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Modifilo" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Valoro" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Ek" #: src/ui-preferences.cc:615 ui/preferences.glade:2176 msgid "_Stop" msgstr "_Halti" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Navigi por nova poŝta bildo" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Bonvolu enmeti vian uzantnomon kaj pasvorton por la poŝtskatolo '%s'" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Ne eblis kontroli la identon de %s kiel fidindan retejon.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Aŭ la reteja atestilo estas nekompleta aŭ vi estas konektita al retejo ŝajniganta esti %s, eble por havigi vian pasvorton" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Aŭtomate detekti" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Dosiero aŭ Dosierujo" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Uzanto/Pas" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Ĉifrita Uzanto/Pas (apop)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL kun atestilo" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Navigi por dosiero aŭ dosierujo" #: src/ui-properties.cc:323 ui/properties.glade:616 msgid "Browse for a certificate file" msgstr "Navigi por atestila dosiero" #: src/ui-popup.cc:195 msgid "From" msgstr "De" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Temo" #: src/ui-popup.cc:207 msgid "Date" msgstr "Dato" #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Vi ĵus trovis nekonatan internan eraron. Bonvolu sendi detalan raporton pri programeraron al \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Pli da informo:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Informo" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade:79 msgid "Mark mailboxes read" msgstr "Mark poŝtskatolojn legitaj" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Preferoj..." #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Lanĉi komandon" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Retpoŝt-atentiga programo" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade:7 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade:6 msgid "tooltip" msgstr "ŝpruchelpilo" #: ui/applet-gtk.glade:64 msgid "Start command" msgstr "Ekig-komando" #: ui/applet-gtk.glade:94 msgid "About" msgstr "Pri" #: ui/applet-gtk.glade:114 msgid "_Quit" msgstr "_Eliri" #: ui/applet-gtk.glade:131 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff estas retpoŝt-atentiga programo." #: ui/applet-gtk.glade:133 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Gnubiff estas parto de la projekto GNU.\n" "Ĝi estas lanĉata sub la egido de GNU.\n" "\n" "Tiu ĉi programo estas libera programaro: vi povas redisdoni ĝin kaj/aŭ modifi ĝin sub la kondiĉoj de la Ĝenerala Publika Permesilo GNU, kiel eldonite de la Free Software Foundation, aŭ versio 3 de la Permesilo, aŭ (laŭ via elekto) iu ajn posta versio.\n" "\n" "Tiu ĉi programo estas distribuita esperante ke ĝi estu utila, sed SEN IU AJN GARANTIO; sen eĉ implicita garantio pri VENDEBLECO aŭ TAŬGECO POR IU SPECIFA APLIKO. Konsultu la GNU-an Ĝeneralan Publikan Permesilon por pli da detaloj.\n" "\n" "Vi devus ricevi kopion de la GNU-a Ĝenerala Publika Permesilo kune kun tiu ĉi programo. Se ne, konsultu http://www.gnu.org/licenses/.\n" "\n" "Por escepto de la GNU-a Ĝenerala Publika Permesilo por disdono de gnubiff ligita al la biblioteko OpenSSL, konsultu la dosieron README." #: ui/preferences.glade:6 msgid "gnubiff preferences" msgstr "preferoj de gnubiff" #: ui/preferences.glade:49 msgid "_Restrict collected mail to" msgstr "_Limigi kolektitan retpoŝton al" #: ui/preferences.glade:76 msgid "mail(s)" msgstr "retpoŝto" #: ui/preferences.glade:107 msgid "The command to run when the icon is double-clicked" msgstr "La lanĉota komando kiam la piktogramo estas duoble-klakita" #: ui/preferences.glade:122 msgid "The command to run when new mail arrives" msgstr "La lanĉota komando kiam nova retpoŝto alvenas" #: ui/preferences.glade:137 msgid "When _new mail:" msgstr "Kiam _nova retpoŝto:" #: ui/preferences.glade:199 msgid "Commands" msgstr "Komandoj" #: ui/preferences.glade:219 msgid "Mailboxes" msgstr "Poŝtskatoloj" #: ui/preferences.glade:236 msgid "General" msgstr "Ĝenerala" #: ui/preferences.glade:249 msgid "When _double-clicked:" msgstr "Kiam _duoble-klakite:" #: ui/preferences.glade:322 msgid "Mailboxes" msgstr "Poŝtskatoloj" #: ui/preferences.glade:367 ui/preferences.glade:751 msgid "Whether to use window manager decoration" msgstr "Ĉu uzi fenestro-administrilan dekoracion" #: ui/preferences.glade:368 ui/preferences.glade:752 msgid "Use _decoration" msgstr "Uzi _dekoracion" #: ui/preferences.glade:386 ui/preferences.glade:770 msgid "The font to use to display information" msgstr "La uzota litertipo por montri informon" #: ui/preferences.glade:403 ui/preferences.glade:860 msgid "_Font:" msgstr "_Tiparo:" #: ui/preferences.glade:424 msgid "When no mail" msgstr "Kiam neniu retpoŝto" #: ui/preferences.glade:445 msgid "When new mail" msgstr "Kiam nova retpoŝto" #: ui/preferences.glade:462 ui/preferences.glade:807 msgid "Layout" msgstr "Aranĝo" #: ui/preferences.glade:475 msgid "Whether to display an image" msgstr "Ĉu montri bildon" #: ui/preferences.glade:476 msgid "Show i_mage:" msgstr "Montri _bildon:" #: ui/preferences.glade:495 ui/preferences.glade:535 msgid "Whether to display a text" msgstr "Ĉu montri tekston" #: ui/preferences.glade:496 msgid "Show t_ext:" msgstr "Montri t_ekston:" #: ui/preferences.glade:515 msgid "Whether to show an image" msgstr "Ĉu montri bildon" #: ui/preferences.glade:516 msgid "Show _image:" msgstr "Montri b_ildon:" #: ui/preferences.glade:536 msgid "Show _text:" msgstr "Montri _tekston:" #: ui/preferences.glade:555 ui/preferences.glade:840 msgid "Whether to use geometry" msgstr "Ĉu uzi geometrion" #: ui/preferences.glade:556 ui/preferences.glade:841 msgid "Use _geometry:" msgstr "Uzi _geometrion:" #: ui/preferences.glade:575 msgid "Applet geometry" msgstr "Aplikaĵeta geometrio" #: ui/preferences.glade:590 ui/preferences.glade:639 msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Teksto por montri (%d kaj %D estas la nombro da novaj mesaĝoj, %d estas nulo-plenigitaj). Pango-markaĵo povas esti uzata." #: ui/preferences.glade:605 ui/preferences.glade:654 msgid "Browse for an image file" msgstr "Navigi por bildo-dosieron" #: ui/preferences.glade:606 msgid "B_rowse..." msgstr "_Navigi..." #: ui/preferences.glade:624 ui/preferences.glade:673 msgid "Image filename" msgstr "Bilda dosiernomo" #: ui/preferences.glade:655 ui/properties.glade:295 msgid "_Browse..." msgstr "_Navigi..." #: ui/preferences.glade:694 msgid "Applet or Biff" msgstr "Aplikaĵeto aŭ Biff" #: ui/preferences.glade:791 msgid "Headers" msgstr "Kaplinioj" #: ui/preferences.glade:820 msgid "Whether to display the popup window" msgstr "Kie montri la ŝprucfenestron" #: ui/preferences.glade:821 msgid "_Display for" msgstr "_Montri por" #: ui/preferences.glade:877 msgid "header(s)" msgstr "kaplinio(j)" #: ui/preferences.glade:892 msgid "Maximum number of headers to display" msgstr "Maksimuma nombro da kaplinioj por montri" #: ui/preferences.glade:909 msgid "Whether to restrict number of displayed headers" msgstr "Ĉu limigi la nombron da montritaj kaplinioj" #: ui/preferences.glade:910 msgid "_Restrict number to" msgstr "_Limigi nombron al" #: ui/preferences.glade:929 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[send maks grando]:[temo maks grando]:[dato maks grando]" #: ui/preferences.glade:944 msgid "Whether to use format for header" msgstr "Ĉu uzi formon por kaplinio" #: ui/preferences.glade:945 msgid "_Format:" msgstr "_Formo:" #: ui/preferences.glade:964 msgid "Popup geometry" msgstr "Ŝpruca geometrio" #: ui/preferences.glade:979 msgid "Time to display popup window" msgstr "Tempo por montri ŝprucfenestro" #: ui/preferences.glade:996 msgid "second(s)" msgstr "sekundo(j)" #: ui/preferences.glade:1016 ui/popup.glade:7 msgid "Popup" msgstr "Ŝprucfenestro" #: ui/preferences.glade:1062 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "La redakta dialogo por ĉiuj modifiloj kiujn gnubiff uzas interne povas esti ebligataj ĉi tie. Do eblas ŝanĝi la valoron de modifiloj por kiuj ne estas provizitaj gui-fenestraĵo. Mallonga priskribo por ĉiu modifilo estas provizita.\n" "Averto: ŝanĝo de tiuj ĉi modifiloj povas igi ke gnubiff agu malĝuste aŭ povas rezulti en sekurecaj problemoj." #: ui/preferences.glade:1080 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Ĉu montri la langeton por spertuloj. Rimarku: malebligo de tiu ĉi modifilo nur povos esti malfarata per redakto de la agordo-dosiero!" #: ui/preferences.glade:1081 msgid "_Show expert tab" msgstr "_Montri spertulan langeton" #: ui/preferences.glade:1101 msgid "Whether options can be edited in expert mode" msgstr "Ĉu modifiloj povas esti redaktataj en sperta reĝimo" #: ui/preferences.glade:1102 msgid "_Edit options in expert mode" msgstr "R_edakti modifilojn en sperta reĝimo" #: ui/preferences.glade:1121 msgid "Expert editing mode" msgstr "Sperta redakta reĝimo" #: ui/preferences.glade:1155 msgid "List all options." msgstr "Listigi ĉiujn modifilojn." #: ui/preferences.glade:1171 msgid "String to be searched for." msgstr "Serĉota ĉeno." #: ui/preferences.glade:1183 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Serĉi tiujn (montritajn) modifilojn, kiuj enhavas la ĉeno en la teksta enigo." #: ui/preferences.glade:1212 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Listo de modifiloj, iliaj tipo kaj nunaj valoroj. Por redakti modifilon duklaku ĝian valoron." #: ui/preferences.glade:1257 msgid "Expert" msgstr "Sperta" #: ui/preferences.glade:1297 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff estas parto de projekto GNU.\n" " Ĝi estas eldonada sub la egido de GNU." #: ui/preferences.glade:1363 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Programistoj povas esti kontaktataj per gnubiff-devel@lists.sourceforge.net.\n" "Program-misoj devos esti raportataj al gnubiff-bugs@lists.sourceforge.net." #: ui/preferences.glade:1432 msgid "Developers" msgstr "Programistoj" #: ui/preferences.glade:1511 msgid "Maintainers" msgstr "Zorgantoj" #: ui/preferences.glade:1530 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Ĉi tie estas listo de tiuj, kiuj tradukis gnubiff al pluraj lingvoj (tradukintoj de antaŭaj versioj estas markitaj per asterisko):" #: ui/preferences.glade:2048 msgid "Translators" msgstr "Tradukantoj" #: ui/preferences.glade:2065 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Multaj homoj plukontribuis al gnubiff per\n" " - raporto de problemoj\n" " - sugesto de pluraj plibonigoj\n" " - propono de fakta kodumaĵo\n" "Jen listo de tiuj homoj:" #: ui/preferences.glade:2108 msgid "Contributors" msgstr "Kontribuantoj" #: ui/preferences.glade:2130 msgid "Credits" msgstr "Dankoj" #: ui/preferences.glade:2219 msgid "Set to default value" msgstr "Difini al apriora valoro" #: ui/preferences.glade:2234 msgid "Toggle option" msgstr "Alterni modifilon" #: ui/preferences.glade:2249 msgid "Edit option" msgstr "Redakti modifilon" #: ui/properties.glade:7 msgid "Mailbox properties" msgstr "Poŝtskatolaj ecoj" #: ui/properties.glade:52 msgid "_Name:" msgstr "_Nomo:" #: ui/properties.glade:77 msgid "A_ddress:" msgstr "A_dreso:" #: ui/properties.glade:102 msgid "Name of the mailbox" msgstr "Nomo de la poŝtskatolo" #: ui/properties.glade:124 msgid "_Type:" msgstr "_Tipo:" #: ui/properties.glade:174 ui/authentication.glade:52 msgid "_Username:" msgstr "_Uzantonomo:" #: ui/properties.glade:199 msgid "Your username on the mail server" msgstr "Via uzantnomo en la poŝtservilo" #: ui/properties.glade:221 ui/authentication.glade:77 msgid "_Password:" msgstr "_Pasvorto:" #: ui/properties.glade:246 msgid "Your password on the mail server" msgstr "Vi pasvorto en la poŝtservilo" #: ui/properties.glade:274 msgid "file or folder or hostname" msgstr "dosiero aŭ dosierujo aŭ gastigantnomo" #: ui/properties.glade:367 msgid "Connection:" msgstr "Konekto:" #: ui/properties.glade:391 msgid "Connection port to connect to server" msgstr "Konekta porto por konekti al servilo" #: ui/properties.glade:414 msgid "Standard connection port" msgstr "Norma konekta pordo" #: ui/properties.glade:416 msgid "stan_dard" msgstr "nor_ma" #: ui/properties.glade:437 msgid "Other connection port" msgstr "Alia konekta pordo" #: ui/properties.glade:439 msgid "_other" msgstr "_alia" #: ui/properties.glade:540 msgid "Aut_hentication:" msgstr "Aŭte_ntikigo:" #: ui/properties.glade:594 msgid "Certificate filename" msgstr "Atestila dosiernomo" #: ui/properties.glade:618 msgid "Bro_wse..." msgstr "Na_vigi..." #: ui/properties.glade:637 msgid "Cer_tificate:" msgstr "Ates_tilo:" #: ui/properties.glade:692 msgid "minutes" msgstr "minutoj" #: ui/properties.glade:716 msgid "seconds" msgstr "sekundoj" #: ui/properties.glade:739 ui/properties.glade:765 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Kiom da tempo atendi inter kontrolado de poŝto aŭ inter reprovoj kiam la konekto estos perdita" #: ui/properties.glade:791 msgid "Dela_y:" msgstr "Pro_krasto:" #: ui/properties.glade:846 msgid "_Mailbox:" msgstr "_Poŝtskatolo:" #: ui/properties.glade:871 msgid "Mailbox folder" msgstr "Poŝtskatola dosierujo" #: ui/properties.glade:893 msgid "Other mailbox folder" msgstr "Alia poŝtskatola dosierujo" #: ui/properties.glade:895 msgid "othe_r" msgstr "al_ia" #: ui/properties.glade:916 msgid "Standard mailbox folder" msgstr "Norma poŝtskatola dosierujo" #: ui/properties.glade:918 msgid "stand_ard" msgstr "norm_a" #: ui/properties.glade:951 msgid "_Details" msgstr "_Detaloj" #: ui/authentication.glade:7 msgid "Authentication" msgstr "Aŭtentikigo" #: ui/authentication.glade:102 msgid "Your username on the server" msgstr "Via uzantnomo en la servilo" #: ui/authentication.glade:124 msgid "Your password on the server" msgstr "Via pasvorto en la servilo" #: ui/certificate.glade:7 msgid "Cannot certify server" msgstr "Ne eblas atesti servilon" #: ui/certificate.glade:130 msgid "Common Name" msgstr "Komuna nomo" #: ui/certificate.glade:154 msgid "Organization" msgstr "Organizaĵo" #: ui/certificate.glade:178 msgid "Organization Unit" msgstr "Organizaĵa unuo" #: ui/certificate.glade:275 msgid "Issued To" msgstr "Eldonita al" #: ui/certificate.glade:394 msgid "Address" msgstr "Adreso" #: ui/certificate.glade:418 msgid "Country" msgstr "Lando" #: ui/certificate.glade:442 msgid "Locality" msgstr "Loko" #: ui/certificate.glade:540 msgid "State or Province" msgstr "Subŝtato aŭ provinco" #: ui/certificate.glade:570 msgid "Certificate details" msgstr "Detaloj de atestilo" #: ui/certificate.glade:668 msgid "Accept" msgstr "Konsenti" #: ui/popup.glade:61 msgid "mail content" msgstr "retmesaĝa enhavo" #: ui/popup.glade:116 msgid "From" msgstr "De" #: ui/popup.glade:140 msgid "Subject" msgstr "Temo" #: ui/popup.glade:164 msgid "Date" msgstr "Dato" gnubiff-2.2.16/po/fr.po0000644000175000017500000007277312474422124011552 00000000000000# translation of fr.po to Français # French translation of gnubiff # Copyright (C) 2005 Nicolas Rougier # This file is distributed under the same license as the gnubiff package. # Nicolas Rougier , 2004, 2005. # Nicolas Rougier , 2004. # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2006-03-27 11:59+0200\n" "Last-Translator: Rougier \n" "Language-Team: Français \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[L'encodage \"%s\" ne peut être décodé]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Impossible de décoder cette ligne]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "" "[Impossible de convertir le jeu de caractères (fr \"%s\" vers \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Démarrer l'applet gnome depuis la ligne de commande" #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Fichier de configuration à utiliser " #: ../src/gnubiff.cc:98 msgid "file" msgstr "fichier" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Passer l'étape de configuration" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Démarrer gnubiff sans l'interface" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Placer l'icône de gnubiff dans le panneau système" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Afficher la version et sortir" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Options de la ligne de commande" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Options de déboggage" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Fichier de configuration (%s) non trouvé" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "" "Chargement du fichier de configuration à partir d'une nouvelle version de " "gnubiff \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "" "Chargement du fichier de configuration à partir d'une vieille version de " "gnubiff \"%s\"" #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Tentative de conversion des options" #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Tentative de conversion réussie" #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Tentative de conversion réussie pour quelques options. Les options suivantes " "doivent être manuellement converties: %s " #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Impossible d'ouvrir votre fichier de configuration (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Impossible de créer le parser XML pour le fichier de configuration" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Votre fichier de configuration n'as pas de définition de boîte aux lettres (%" "s)" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Format de paramètre illégal dans le fichier de configuration" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Pas de protocole spécifié pour la boîte aux lettres %d" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Impossible de créer le thread: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "Boîte aux lettres %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Impossible de décoder le type de la ligne d'entête]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Impossible de décoder le code de la ligne d'entête]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Message multi-parties mal formé]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Impossible de trouver la première partie du message]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Ce message possède un contenu de type non supporté: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Impossible de trier les mails avec \"%s\"" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Impossible de se connecter à %s via le port %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Impossible de charger le certificat (%s) pour %s" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Impossible d'identifier l'hôte (%s sur le port %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Impossible d'écrire à %s sur le port %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Impossible de lire depuis %s sur le port %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Impossible de régler le délai sur la socket: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Impossible d'ouvrir %s" #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Ce message de possède pas de partie avec un contenu lisible]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Impossible de sélectionner le répertoire %s sur l'hôte %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Impossible de serrer la main à %s sur le port %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "" "[%d] Le serveur n'a pas envoyé la réponse non taggée \"%s\" ni l'acquitement." #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Le serveur n'a pas envoyé la réponse non taggée \"%s\"" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Le serveur a fermé immédiatement la connexion: %s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Erreur interne sur le serveur ou alors erreur inconnue: %s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Mise en garde du serveur: %s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Inpossible d'ouvrir le répertoire (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Mot de passe vide" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Message d'erreur du serveur POP3: %s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Aucune réponse positive du serveur POP3" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Votre serveur ne semble pas accepter le protocol apop (pas de tampon)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problème de cryptographie qui aurait du être détecté durant la " "configuration" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Option inconnue \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Impossible de mettre l'option \"%s\" à \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Impossible de trouver le widget spécifié (\"%s\") dans la structure xml (\"%s" "\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "Aucun courrier" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "gnubiff ne peut pas charger son fichier interface.\n" "\n" "Nom: %s\n" "Chemin: %s\n" "Assurez vous que gnubiff a été installé correctement" #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect requiert la librairie gmodule" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Handler '%s' non trouvé." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr "inconnu" #: ../src/ui-applet.cc:222 msgid " error" msgstr "erreur" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " consultation..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Boîte aux lettres" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Type" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Status" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Sécurité" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Pas de boîte aux lettres séléctionnée" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Option" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Valeur" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "_Démarrer" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Stopper" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Chercher le fichier image" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "" "Entrez votre nom de login et votre mot de passe pour la boîte aux lettres '%" "s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Impossible de vérifier que l'hôte %s est sûr.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "Soit le certificat est incomplet ou bien vous êtes connecté à un site " "prétendant être %s vraisemblablement pour essayer d'obtenir votre mot de " "passe" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Autodetection" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Fichier ou Répertoire" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Utilisateur/Mot de Passe" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Utilisateur/Mot de pass encrypté (apop)" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL avec certificat" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Chercher une fichier ou un répertoire" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Chercher un certificat" #: ../src/ui-popup.cc:195 msgid "From" msgstr "De" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Sujet" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Date" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Vous venez de trouver une erreur interne. Veuillez s'il vous plaît envoyer " "un rapport de bug à \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Information additionelle:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "info" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Marquer le courrier comme étant lu" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Préférences..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Exécuter la commande" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Programme de notification de courrier" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "A propos" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff est un programme de notification de courrier" #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 #, fuzzy msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" "Gnubiff fait partie du projet GNU\n" "Il est distribué sous l'égide de GNU\n" "\n" "Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon " "les termes de la Licence Publique Générale GNU publiée par la Free Software " "Foundation (version 2 ou bien toute autre version ultérieure choisie par " "vous).\n" "\n" "Ce programme est distribué car potentiellement utile, mais SANS AUCUNE " "GARANTIE, ni explicite ni implicite, y compris les garanties de " "commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la " "Licence Publique Générale GNU pour plus de détails.\n" "\n" "Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même " "temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software " "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-" "Unis.\n" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Exécuter la commande" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "_Quitter" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "truc" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Commandes" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Mode éditeur expert" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Général" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Entêtes" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Aspect" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Boîtes aux lettres" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Si nouveau courrier" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Absence de courrier" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" "Ce programme fait partie du projet GNU\n" "il est distribué sous l'égide de GNU." #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Les développeurs peuvent être contactés via gnubiff-devel@lists.sourceforge.net.\n" "Les bogues doivent etre reportés à gnubiff-" "bugs@lists.sourceforge.net" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" "Voici la liste des personnes ayant participé à la traduction de " "gnubiff dans les différents langages (les traducteurs des versions " "précédentes sont marqués d'un astérisque):" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Beaucoup de personnes ont contribué à gnubiff en:\n" " - reportant des problèmes\n" " - suggérant des améliorations\n" " - soumettant du code\n" "Voici une liste de ces personnes:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Géométrie de l'applet" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Appet ou Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "Che_rcher..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Chercher une image" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Contributeurs" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Remerciements" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Développeurs" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Editer l'option" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Expert" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Image" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Liste des options" #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Liste des options, types et valeurs courantes. Pour éditer une option, " "double-cliquez sur sa valeur." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Boîtes aux lettres" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Mainteneurs" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Nombre maximum de courriers à afficher" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Popup" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Géométrie du popup" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "Recherche les options contenant la chaîne spécifiée." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Mettre la valeur par défaut" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Afficher l'_image" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Afficher le _texte" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Afficher l'i_mage" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Afficher le t_exte" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Chaîne à chercher." #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" "Texte à afficher (%d et %D sont les nombres de nouveaux courriers, %d est " "justifié avec des zéros). Le marquage type Pango peut être utilisé." #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Commande à exécuter lorsqu'il y des nouveaux courriers" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Commande à exécuter pour un double-click" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "L'éditeur d'options que gnubiff utilise de façon interne peut être activé " "ici de façon à pouvoir changer certaines options \"cachées\". Une coure " "description de chaque option est fournie. AttentionChanger ces " "options peut provoquer des erreurs ou bien des problèmes de sécurité." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Fonte à utiliser" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Durée d'affichage de la fenêtre popup" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Basculer l'option" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Traducteurs" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Utiliser la _décoration" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Utiliser la _géométrie" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "En cas de _double-click" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "_Nouveau courrier:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Est ce que les options peuvent êtreéditées en mode expert" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Afficher un texte ou non" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Afficher une image ou non" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Afficher la fenêtre des entêtes ou non" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Restreindre le nombre d'entêtes ou non" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Afficher une image ou non" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Afficher le mode expert. Note: Enlever ce mode ne peut se fait qu'en éditant " "le fichier de configuration manuellement." #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Utiliser un format d'entêtes ou non" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Utiliser la géométrie ou non" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Fenêtre des entêtes décorée ou non" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" "[taille max champs expéditeur]:[taille max champs sujet]:[taille max champs " "date]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "_Chercher..." #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "_Affichage" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Editer les options en mode expert" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Fonte:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Format:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Restreindre le nombre de mail collectés à" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Restreindre le nombre à" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "_Afficher le mode expert" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "gnubiff préferences" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "entête(s)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "mèl(s)" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "seconde(s)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Détails" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "A_dresse:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Aut_hentification:" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Che_rcher..." #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tificat:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Fichier certificat" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Port de connexion au serveur" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Connexion:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Déla_i:" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Répertoire de boîtes aux lettres" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Propriété de la boîte aux lettres" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Nom de la boîte aux lettres" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Autre port de connexion" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Autre répertoire" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Port de connexion standard" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Répertoire standard" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "Durée d'attente entre deux vérifications ou deux tentatives en cas d'échec" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Votre mot de passe sur le seveur" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Votre nom d'utilisateur sur le serveur" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Boîte aux lettres:" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "_Nom:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "Mot de _passe" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Type:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Utilisateur:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "_autre:" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "fichier ou répertoire ou hôte" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minutes" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "autre" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "secondes" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "stan_dard" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "stand_ard" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Authentification" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Votre mot de passe sur le seveur" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Votre nom d'utilisateur sur le serveur" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Adresse" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Fait pour" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Accepter" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Ompossible de certifier le serveur" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Détails du certificat" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nom commun" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "Pays" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Ville" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organisation" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Unité de l'organisation" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Etat ou Province" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Date" #: ../ui/popup.glade.h:2 msgid "From" msgstr "De" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Sujet" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "contenu du mèl" #~ msgid "About gnubiff" #~ msgstr "A propos de gnubiff" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "New mail" #~ msgstr "Nouveau courrier" #~ msgid "No mail" #~ msgstr "Aucun courrier" #~ msgid "Applet" #~ msgstr "Applet" #~ msgid "00" #~ msgstr "00" #~ msgid "Text to display" #~ msgstr "Texte à afficher" #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Impossible de trouver le répertoire (%s)" gnubiff-2.2.16/po/nl.po0000644000175000017500000007010512474424636011551 00000000000000# translation of gnubiff-2.2.7.po to Nederlands # Dutch translation of gnubiff. # Copyright (C) 2003, 2004, 2008, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Elros Cyriatan , 2003, 2004. # # msgid "" msgstr "" "Project-Id-Version: gnubiff-2.2.11\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2009-04-05 18:19+0200\n" "PO-Revision-Date: 2009-05-03 21:03+0100\n" "Last-Translator: Erwin Poeze \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[De codering \"%s\" van deze e-mail kan niet worden gedecodeerd]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Deze kopregel kan niet worden gedecodeerd]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Kan tekenset niet van \"%s\" naar \"utf-8\" converteren]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Start gnome-applet vanaf de opdrachtregel" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Het te gebruiken configuratiebestand" #: src/gnubiff.cc:98 msgid "file" msgstr "bestand" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Configuratieproces overslaan" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "gnubiff zonder GUI starten" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Het pictogram van gnubiff in het systeemvak plaatsen" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Versie-informatie tonen en stoppen" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Algemene opdrachtregelopties:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Opties voor het debuggen:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Configuratiebestand (%s) niet gevonden!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Configuratiebestand geladen van nieuwere gnubiff-versie \"%s\"." #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Configuratiebestand geladen van oude gnubiff-versie \"%s\"." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Er wordt geprobeerd alle opties te converteren." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Alle opties zijn geconverteerd." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "De opties zijn deels geconverteerd. De volgende opties moeten handmatig worden omgezet: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Kan uw configuratiebestand (%s) niet openen" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Kan de XML-parser voor het configuratiebestand niet aanmaken" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Geen postvakdefinitie gevonden in uw configuratiebestand (%s)" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Het configuratiebestand bevat een ongeldige parameteropmaak" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Voor postvak %d is geen protocol opgegeven" #: src/mailbox.cc:143 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Kon discussie niet aanmaken: %s" #: src/mailbox.cc:315 #, c-format msgid "mailbox %d" msgstr "postvak %d" #: src/mailbox.cc:640 msgid "" msgstr "" #: src/mailbox.cc:641 msgid "" msgstr "" #: src/mailbox.cc:642 msgid "" msgstr "" #: src/mailbox.cc:696 msgid "[Cannot parse content type header line]" msgstr "[Kan inhoud van 'Content-Type'-regel niet ontleden]" #: src/mailbox.cc:718 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Kan inhoud van 'Content-Transfer-Encoding'-regel niet ontleden]" #: src/mailbox.cc:759 msgid "[Malformed multipart message]" msgstr "[Misvormd meerdelig bericht]" #: src/mailbox.cc:767 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Kan begin van eerste deel niet vinden in meerdelig bericht]" #: src/mailbox.cc:813 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Dit bericht bevat een niet-ondersteund inhoudstype: \"%s/%s\"]" #: src/mailbox.cc:1215 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Fout tijdens het compileren van een reguliere expressie.\n" "Reguliere expressie: %s\n" "Foutmelding: %s" #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Kan e-mails niet sorteren op \"%s\"" #: src/socket.cc:123 src/socket.cc:152 src/socket.cc:180 src/socket.cc:189 #: src/socket.cc:198 src/socket.cc:211 src/socket.cc:241 src/socket.cc:250 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Kan geen verbinding maken met %s op poort %d" #: src/socket.cc:226 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Laden van certificaat (%s) mislukt voor %s" #: src/socket.cc:263 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Kan computer op afstand niet identificeren (%s op poort %d)" #: src/socket.cc:348 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Kan niet schrijven naar %s op poort %d" #: src/socket.cc:419 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Kan niet lezen van %s op poort %d" #: src/socket.cc:442 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "De tijdslimiet voor lezen kan niet worden ingesteld op socket %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Kan %s niet openen." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Dit bericht bevat geen deel met een ondersteund inhoudstype]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Kan map %s op host %s niet selecteren" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Kan geen bevestiging krijgen van %s op poort %d" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Server verstuurt geen ongemarkeerd \"%s\"-antwoord of -bevestiging" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Server verstuurt geen \"%s\"-antwoord zonder tag " #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Server verbreekt onmiddellijk de verbinding: %s." #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Intern serverfalen of onbekende fout: %s" #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Waarschuwing van server: %s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Kan map voor nieuwe e-mails niet openen (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Leeg wachtwoord" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Foutmelding van POP3-server: %s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Er is geen positief antwoord van de POP3-server ontvangen" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Uw POP-server lijkt het APOP-protocol niet te accepteren (geen tijdsstempel gegeven)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Er is een versleutelingsprobleem dat tijdens de configuratie had moeten worden gevonden" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Onbekende optie \"%s\"" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Kan optie \"%s\" niet op \"%s\" instellen" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Kan de aangegeven widget (\"%s\") niet vinden binnen de XML-structuur (\"%s\")" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "geen post" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Kan de interface niet opbouwen.\n" "\n" "Naam: %s\n" "Pad: %s\n" "\n" "Controleer of het pakket juist is geïnstalleerd." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect vereist een werkende gmodule" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Kon signaalverwerker '%s' niet vinden." #: src/ui-applet.cc:217 msgid " unknown" msgstr " onbekend" #: src/ui-applet.cc:222 msgid " error" msgstr " fout" #: src/ui-applet.cc:231 msgid " checking..." msgstr " bezig met controleren..." #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Postvak" #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Soort" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Status" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Beveiliging" #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Geen postvak gekozen" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Optie" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Waarde" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Starten" #: src/ui-preferences.cc:615 ui/preferences.glade:2176 msgid "_Stop" msgstr "_Stoppen" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Bladeren naar afbeelding voor nieuwe post" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Geef uw gebruikersnaam en wachtwoord voor postvak '%s'" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Kan niet vaststellen of %s een vertrouwde site is.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Ofwel het certificaat van de site is onvolledig of u bent verbonden met een site die zich voordoet als %s, mogelijk om uw wachtwoord te verkrijgen" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Automatische detectie" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Bestand of map" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Gebruikersnaam/Wachtwoord" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Versleutelde Gebruikersnaam/Wachtwoord (APOP)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL met certificaat" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Bladeren naar een bestand of map" #: src/ui-properties.cc:323 ui/properties.glade:616 msgid "Browse for a certificate file" msgstr "Bladeren naar een certificaatbestand" #: src/ui-popup.cc:195 msgid "From" msgstr "Van" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Onderwerp" #: src/ui-popup.cc:207 msgid "Date" msgstr "Datum" #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "U heeft zojuist een onbekende, interne fout ontdekt. Het sturen van een gedetailleerd foutenrapport naar \"gnubiff-bugs@lists.sourceforge.net\" wordt op prijs gesteld.\n" "\n" "Aanvullende informatie:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Informatie" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade:79 msgid "Mark mailboxes read" msgstr "Postvakken als gelezen markeren" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Voorkeuren..." #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Opdracht uitvoeren" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Postmeldingsprogramma" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade:7 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade:6 msgid "tooltip" msgstr "werktip" #: ui/applet-gtk.glade:64 msgid "Start command" msgstr "Startopdracht" #: ui/applet-gtk.glade:94 msgid "About" msgstr "Info" #: ui/applet-gtk.glade:114 msgid "_Quit" msgstr "_Afsluiten" #: ui/applet-gtk.glade:131 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff is een postmeldingsprogramma" #: ui/applet-gtk.glade:133 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Gnubiff is onderdeel van het GNU-project.\n" "Het is vrijgegeven onder de bescherming van GNU.\n" "\n" "Dit programma is vrije software, u kunt het herdistribueren en/of aanpassen, onder de voorwaarden van de Free Software Foundation licentieversie 3 of - naar uw voorkeur - iedere nieuwere versie.\n" "Dit programma wordt gedistribueerd in de hoop dat het nuttig zal blijken, maar ZONDER ENIGE GARANTIE, zonder zelfs de impliciete garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU General Public License voor meer details.\n" "\n" "U moet een kopie van de GNU General Public License bij dit programma ontvangen hebben, zo niet kijk dan op http://www.gnu.org/licenses/.\n" "\n" "Een uitzondering op de GNU General Public License voor het distribueren van gnubiff gekoppeld met de OpenSSL-bibliotheek vindt u in het README-bestand." #: ui/preferences.glade:6 msgid "gnubiff preferences" msgstr "gnubiff-voorkeuren" #: ui/preferences.glade:49 msgid "_Restrict collected mail to" msgstr "Verzamelde post _beperken tot" #: ui/preferences.glade:76 msgid "mail(s)" msgstr "stuk(s)" #: ui/preferences.glade:107 msgid "The command to run when the icon is double-clicked" msgstr "De uit te voeren opdracht als het pictogram dubbelgeklikt wordt" #: ui/preferences.glade:122 msgid "The command to run when new mail arrives" msgstr "De uit te voeren opdracht als nieuwe post is aangekomen" #: ui/preferences.glade:137 msgid "When _new mail:" msgstr "Bij _nieuwe post:" #: ui/preferences.glade:199 msgid "Commands" msgstr "Opdrachten" #: ui/preferences.glade:219 msgid "Mailboxes" msgstr "Postvakken" #: ui/preferences.glade:236 msgid "General" msgstr "Algemeen" #: ui/preferences.glade:249 msgid "When _double-clicked:" msgstr "Als _dubbelgeklikt:" #: ui/preferences.glade:322 msgid "Mailboxes" msgstr "Postvakken" #: ui/preferences.glade:367 ui/preferences.glade:751 msgid "Whether to use window manager decoration" msgstr "Of vensterkader gebruikt moet worden" #: ui/preferences.glade:368 ui/preferences.glade:752 msgid "Use _decoration" msgstr "_Vensterkader gebruiken" #: ui/preferences.glade:386 ui/preferences.glade:770 msgid "The font to use to display information" msgstr "Het lettertype om informatie te tonen" #: ui/preferences.glade:403 ui/preferences.glade:860 msgid "_Font:" msgstr "_Lettertype:" #: ui/preferences.glade:424 msgid "When no mail" msgstr "Indien geen post" #: ui/preferences.glade:445 msgid "When new mail" msgstr "Bij nieuwe post" #: ui/preferences.glade:462 ui/preferences.glade:807 msgid "Layout" msgstr "Opmaak" #: ui/preferences.glade:475 msgid "Whether to display an image" msgstr "Of een afbeelding getoond moet worden" #: ui/preferences.glade:476 msgid "Show i_mage:" msgstr "Toon afbeeldin_g:" #: ui/preferences.glade:495 ui/preferences.glade:535 msgid "Whether to display a text" msgstr "Of een tekst getoond moet worden" #: ui/preferences.glade:496 msgid "Show t_ext:" msgstr "Te tonen t_ekst:" #: ui/preferences.glade:515 msgid "Whether to show an image" msgstr "Of een afbeelding getoond moet worden" #: ui/preferences.glade:516 msgid "Show _image:" msgstr "Toon _afbeelding:" #: ui/preferences.glade:536 msgid "Show _text:" msgstr "Te tonen _tekst:" #: ui/preferences.glade:555 ui/preferences.glade:840 msgid "Whether to use geometry" msgstr "Of positie gebruikt moeten worden" #: ui/preferences.glade:556 ui/preferences.glade:841 msgid "Use _geometry:" msgstr "_Positie gebruiken" #: ui/preferences.glade:575 msgid "Applet geometry" msgstr "Applet-positie" #: ui/preferences.glade:590 ui/preferences.glade:639 msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Tekst om weer te geven (%d of %D geeft het aantal nieuwe berichten, %d heeft een voorloopnul). Pango-opmaak mag worden gebruikt." #: ui/preferences.glade:605 ui/preferences.glade:654 msgid "Browse for an image file" msgstr "Bladeren naar afbeeldingsbestand" #: ui/preferences.glade:606 msgid "B_rowse..." msgstr "Bla_deren..." #: ui/preferences.glade:624 ui/preferences.glade:673 msgid "Image filename" msgstr "Bestandsnaam van afbeelding" #: ui/preferences.glade:655 ui/properties.glade:295 msgid "_Browse..." msgstr "_Bladeren..." #: ui/preferences.glade:694 msgid "Applet or Biff" msgstr "Applet of Biff" #: ui/preferences.glade:791 msgid "Headers" msgstr "Berichtkoppen" #: ui/preferences.glade:820 msgid "Whether to display the popup window" msgstr "Of het popup-venster getoond moet worden" #: ui/preferences.glade:821 msgid "_Display for" msgstr "_Weergeven gedurende" #: ui/preferences.glade:877 msgid "header(s)" msgstr "berichtkop(pen)" #: ui/preferences.glade:892 msgid "Maximum number of headers to display" msgstr "Maximum aantal te tonen berichtkoppen" #: ui/preferences.glade:909 msgid "Whether to restrict number of displayed headers" msgstr "Of het aantal getoonde berichtkoppen beperkt moet worden" #: ui/preferences.glade:910 msgid "_Restrict number to" msgstr "Aantal _beperken tot" #: ui/preferences.glade:929 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[max. lengte afzender]:[max. lengte onderwerp]:[max. lengte datum]" #: ui/preferences.glade:944 msgid "Whether to use format for header" msgstr "Of opmaak voor berichtkoppen gebruikt moet worden" #: ui/preferences.glade:945 msgid "_Format:" msgstr "_Opmaak:" #: ui/preferences.glade:964 msgid "Popup geometry" msgstr "Popup-afmetingen" #: ui/preferences.glade:979 msgid "Time to display popup window" msgstr "Tijdsduur waarin popup-venster wordt weergegeven" #: ui/preferences.glade:996 msgid "second(s)" msgstr "seconde(n)" #: ui/preferences.glade:1016 ui/popup.glade:7 msgid "Popup" msgstr "Popup" #: ui/preferences.glade:1062 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "De bewerkingsdialoog voor alle opties die gnubiff intern gebruikt kan hier ingeschakeld worden. Het is dan mogelijk de waarden van opties te veranderen waar geen gui-widget voor bestaan. Van iedere optie is een korte beschrijving beschikbaar.\n" "Waarschuwing: verandering van deze opties kan tot gevolg hebben dat gnubiff niet meer correct werkt of kan leiden tot beveiligingsproblemen." #: ui/preferences.glade:1080 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Of het experttabblad getoond moet worden. Waarschuwing: uitschakelen van deze optie kan alleen ongedaan gemaakt worden door het handmatig bewerken van het configuratiebestand!" #: ui/preferences.glade:1081 msgid "_Show expert tab" msgstr "_Experttabblad tonen" #: ui/preferences.glade:1101 msgid "Whether options can be edited in expert mode" msgstr "Of opties bewerkt kunnen worden in expertmodus" #: ui/preferences.glade:1102 msgid "_Edit options in expert mode" msgstr "_Bewerk opties in expertmodus" #: ui/preferences.glade:1121 msgid "Expert editing mode" msgstr "Expertmodus" #: ui/preferences.glade:1155 msgid "List all options." msgstr "Alle opties tonen." #: ui/preferences.glade:1171 msgid "String to be searched for." msgstr "Te zoeken tekenreeks." #: ui/preferences.glade:1183 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Zoek naar de (getoonde) opties die de tekenreeks in de tekstinvoer bevatten." #: ui/preferences.glade:1212 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Optielijst met hun soort en huidige waarden. Dubbelklik op de waarde om deze te bewerken." #: ui/preferences.glade:1257 msgid "Expert" msgstr "Expert" #: ui/preferences.glade:1297 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" "Gnubiff maakt deel uit van het GNU-project.\n" "Het wordt uitgegeven onder de bescherming van GNU." #: ui/preferences.glade:1363 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Ontwikkelaars kunnen worden benaderd via gnubiff-devel@lists.sourceforge.net.\n" "Fouten kunnen gerapporteerd worden aan gnubiff-bugs@lists.sourceforge.net." #: ui/preferences.glade:1432 msgid "Developers" msgstr "Ontwikkelaars" #: ui/preferences.glade:1511 msgid "Maintainers" msgstr "Onderhouders" #: ui/preferences.glade:1530 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Hier volgt een lijst van mensen die gnubiff in verschillende talen vertaald hebben (vertalers van oudere versies zijn gemarkeerd met een sterretje):" #: ui/preferences.glade:2048 msgid "Translators" msgstr "Vertalers" #: ui/preferences.glade:2065 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Verder hebben velen bijgedragen aan gnubiff door:\n" " - Het rapporteren van problemen;\n" " - Het suggereren van verbeteringen;\n" " - Het indienen van programmacode.\n" "Hier volgt een lijst met deze mensen:" #: ui/preferences.glade:2108 msgid "Contributors" msgstr "Bijdragers" #: ui/preferences.glade:2130 msgid "Credits" msgstr "Dankbetuigingen" #: ui/preferences.glade:2219 msgid "Set to default value" msgstr "Op standaardwaarde instellen" #: ui/preferences.glade:2234 msgid "Toggle option" msgstr "Optie aan/uit" #: ui/preferences.glade:2249 msgid "Edit option" msgstr "Bewerkoptie" #: ui/properties.glade:7 msgid "Mailbox properties" msgstr "Postvakeigenschappen" #: ui/properties.glade:52 msgid "_Name:" msgstr "_Naam:" #: ui/properties.glade:77 msgid "A_ddress:" msgstr "A_dres:" #: ui/properties.glade:102 msgid "Name of the mailbox" msgstr "Naam van het postvak" #: ui/properties.glade:124 msgid "_Type:" msgstr "_Soort:" #: ui/properties.glade:174 ui/authentication.glade:52 msgid "_Username:" msgstr "_Gebruikersnaam:" #: ui/properties.glade:199 msgid "Your username on the mail server" msgstr "Uw gebruikersnaam op de server" #: ui/properties.glade:221 ui/authentication.glade:77 msgid "_Password:" msgstr "_Wachtwoord:" #: ui/properties.glade:246 msgid "Your password on the mail server" msgstr "Uw wachtwoord op de server" #: ui/properties.glade:274 msgid "file or folder or hostname" msgstr "Bestands-, map- of host-naam" #: ui/properties.glade:367 msgid "Connection:" msgstr "Verbinding:" #: ui/properties.glade:391 msgid "Connection port to connect to server" msgstr "Poort om met server te verbinden" #: ui/properties.glade:414 msgid "Standard connection port" msgstr "Standaardverbindingspoort" #: ui/properties.glade:416 msgid "stan_dard" msgstr "s_tandaard" #: ui/properties.glade:437 msgid "Other connection port" msgstr "Andere verbindingspoort" #: ui/properties.glade:439 msgid "_other" msgstr "and_ere" #: ui/properties.glade:540 msgid "Aut_hentication:" msgstr "Aut_hentificatie:" #: ui/properties.glade:594 msgid "Certificate filename" msgstr "Certificaatbestandsnaam" #: ui/properties.glade:618 msgid "Bro_wse..." msgstr "_Bladeren..." #: ui/properties.glade:637 msgid "Cer_tificate:" msgstr "Cer_tificaat:" #: ui/properties.glade:692 msgid "minutes" msgstr "minuten" #: ui/properties.glade:716 msgid "seconds" msgstr "seconden" #: ui/properties.glade:739 ui/properties.glade:765 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "De wachttijd tussen controles op nieuwe post of tussen verbindingspogingen bij een verbroken verbinding" #: ui/properties.glade:791 msgid "Dela_y:" msgstr "_Vertraging:" #: ui/properties.glade:846 msgid "_Mailbox:" msgstr "_Postvak:" #: ui/properties.glade:871 msgid "Mailbox folder" msgstr "Postvakmap" #: ui/properties.glade:893 msgid "Other mailbox folder" msgstr "Andere postvakmap" #: ui/properties.glade:895 msgid "othe_r" msgstr "ande_re" #: ui/properties.glade:916 msgid "Standard mailbox folder" msgstr "Standaardpostvakmap" #: ui/properties.glade:918 msgid "stand_ard" msgstr "stand_aard" #: ui/properties.glade:951 msgid "_Details" msgstr "_Details" #: ui/authentication.glade:7 msgid "Authentication" msgstr "Aanmeldingscontrole" #: ui/authentication.glade:102 msgid "Your username on the server" msgstr "Uw gebruikersnaam op de server" #: ui/authentication.glade:124 msgid "Your password on the server" msgstr "Uw wachtwoord op de server" #: ui/certificate.glade:7 msgid "Cannot certify server" msgstr "Kan server niet certificeren" #: ui/certificate.glade:130 msgid "Common Name" msgstr "Algemene naam" #: ui/certificate.glade:154 msgid "Organization" msgstr "Organisatie" #: ui/certificate.glade:178 msgid "Organization Unit" msgstr "Organisatorische eenheid" #: ui/certificate.glade:275 msgid "Issued To" msgstr "Uitgegeven aan" #: ui/certificate.glade:394 msgid "Address" msgstr "Adres" #: ui/certificate.glade:418 msgid "Country" msgstr "Land" #: ui/certificate.glade:442 msgid "Locality" msgstr "Locatie" #: ui/certificate.glade:540 msgid "State or Province" msgstr "Staat of provincie" #: ui/certificate.glade:570 msgid "Certificate details" msgstr "Certificaatdetails" #: ui/certificate.glade:668 msgid "Accept" msgstr "Accepteren" #: ui/popup.glade:61 msgid "mail content" msgstr "postinhoud" #: ui/popup.glade:116 msgid "From" msgstr "Van" #: ui/popup.glade:140 msgid "Subject" msgstr "Onderwerp" #: ui/popup.glade:164 msgid "Date" msgstr "Datum" gnubiff-2.2.16/po/cs.po0000644000175000017500000006767212474422124011552 00000000000000# Czech translation of gnubiff. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Josef Vybíral , 2005. # # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.1.3\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2005-05-07 13:50+0200\n" "Last-Translator: Josef Vybiral \n" "Language-Team: Czech < >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Kódování znaků \"%s\" v této zprávě nemůže být překódováno]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Nemohu překódovat tuto hlavičku]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Nemohu převést znakové sady (z \"%s\" do \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Spustit applet gnome z příkazové řádky" #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Který konfigurační soubor použít" #: ../src/gnubiff.cc:98 msgid "file" msgstr "soubor" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Přeskočit konfiguraci" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Zobrazit informaci o verzi a skončit" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Obecné volby pro příkazovou řádku:" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Volby pro ladění" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Konfigurační soubor (%s) nebyl nalezen!" #: ../src/biff.cc:596 #, fuzzy, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Načten konfigurační soubor ze staré verze gnubiff \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Načten konfigurační soubor ze staré verze gnubiff \"%s\"." #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Zkouším převést všechna nastavení." #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Úspěšně se podařilo konvertovat všechna nastavení" #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Úspěšně jsem konvertoval některá nastavení. Následující nastavení musí být " "upraveny ručně: %s" #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Nemohu otevřít Váš konfigurační soubor (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Nemohu vytvořit XML parser pro konfigurační soubor" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Ve vašem konfiguračním souboru (%s) nebyly nalezeny žádné definice schránek" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Neplatný formát parametru v konfiguračním souboru" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Pro schránku %d nebyl určen žádný protokol" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Nemohu vytvořit vlákno: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "schránka %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "<žádné datum>" #: ../src/mailbox.cc:645 msgid "" msgstr "<žádný odesílatel>" #: ../src/mailbox.cc:646 msgid "" msgstr "<žádný předmět>" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Nemohu parsovat hlavičku určující typ obsahu]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Nemohu parsovat obsah hlavičky určující kódování obsahu]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Špatně formátovaný mail z více částí]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Nemohu nalézt začátek první části ve zprávě složené z více částí]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Tato zpráva má nepodporovaný typ obsahu: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Nemohu třídit poštu podle \"%s\"" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Nemohu se připojit k %s na portu %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Načtení certifikátu (%s) pro %s selhalo" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Nemohu identifikovat vzdáleného hostitele (%s na portu %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Není možné zapisovat na %s na portu %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Není možné číst z %s na portu %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Nemohu nastavit timeout čtení ze socketu: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Nemohu otevřít %s." #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Tato zpráva nemá žádnou část obsahující podporovaný typ obsahu]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Nebylo možné vybrat složku %s na serveru %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Nebylo možné získat potvrzení od %s na portu %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Server neodeslal neoznačkovanou \"%s\" odpověď nebo potvrzení" #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Server neodeslal neoznačkovanou %s odpověď" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Server okamžitě ukončil spojení: %s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Vnitřní chyba serveru nebo neznámá chyba:%s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Varování ze serveru:%s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Nemohu otevřít adresář s novou poštou (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Prázdné heslo" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Chybová hláška od POP3 server:%s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Neobdržel jsem kladnou odpověď od POP3 serveru" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Vypadá to že váš POP server nepodporuje apop protokol (nedodalčasovou " "značku)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Problém s šifrováním, který mohl být detekován při konfiguraci" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Neznámá volba \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Nemohu odeslat volbu \"%s\" do \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Nemohu nalézt widget (\"%s\") uvnitř xml struktury (\"%s\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "žádné zprávy" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Nemohu vytvořit rozhraní.\n" "\n" "Jméno: %s\n" "Cesta: %s\n" "\n" "Prosím ujistěte se, že byl balíček správně nainstalován." #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect vyžaduje funkční gmodule" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Nemohu nalézt handly signálu '%s'." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr " neznámý" #: ../src/ui-applet.cc:222 msgid " error" msgstr " chyba" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " kontroluji..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Poštovní schránka" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Typ" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Stav" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Bezpečnost" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Nebyla vybrána žádná schránka" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Volba" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Hodnota" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "_Start" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Stop" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Vyhledat obrázek pro novou poštu" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Prosím zadejte vaše přihlašovací jméno a heslo pro schránku '%s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Nebylo možné ověřit identitu %s jako věrohodného serveru.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "Certifikát je nekompletní nebo server na který jste připojeni předstírá že " "je %s, pravděpodobně aby získal vaše heslo" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Autodetekce" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Soubor nebo Složka" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Jméno/Heslo" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Šifrované Jméno/Heslo (apop)" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL s certifikátem" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Vyhledat soubor nebo složku" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Vyhledat soubor s certifikátem" #: ../src/ui-popup.cc:195 msgid "From" msgstr "Od" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Předmět" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Datum" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Právě jste nalezl neznámou chybu. Prosím pošlete detailní oznámení o chyběna " "\"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Další informace:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Označit schránky za přečtené" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Nastavení..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Spustit příkaz" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Program oznamující poštu" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "O programu" #: ../ui/applet-gtk.glade.h:2 #, fuzzy msgid "Gnubiff is a mail notification program." msgstr "Program oznamující poštu" #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Spustit příkaz" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "Ukončit" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "bublinová nápověda" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Příkazy" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Režim expertního nastavení" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Obecné" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Hlavičky" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Rozvržení" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Schránky" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Při nové poště" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Při žádné poště" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff je součástí projektu GNU.\n" " Je vydáván pod záštitou GNU." #: ../ui/preferences.glade.h:11 #, fuzzy msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Chyby mohou být oznamovány na gnubiff-" "bugs@lists.sourceforge.net" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "mnoho lidí přispělo do gnubiff\n" " - oznamováním problémů\n" " - návrhy různých vylepšení\n" " - zasíláním aktuálního kódu\n" "Tady je seznam těchto lidí:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Rozměry appletu" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Applet nebo Okno" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "P_rocházet:" #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Vyhledat soubor s obrázkem" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Přispěvatelé" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Kredity" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Vývojáři" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Upravit volbu" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Expert" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Jméno souboru s obrázkem" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Zobrazit všechny možnosti." #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Seznam voleb, jejich typ a současná hodnota. Volbu upravíte dvojklikem na " "její hodnotu." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Poštovní schránky" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Údržba" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Maximální počet hlaviček k zobrazení" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Vyskakovací okno" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Geometrie vyskakovacího okna" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "Vyhledat ty (zobrazené) volby, obsahující řetězec v textovém záznamu" #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Nastavit na výchozí hodnotu" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Ukázat obrázek:" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Ukázat _text:" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Ukázat obrázek:" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Ukázat t_ext:" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Hledaný řetězec." #: ../ui/preferences.glade.h:44 #, fuzzy, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "Zobrazený text (%d je počet nových zpráv)" #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Příkaz, který se má spustit když příjde nová pošta" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Příkaz, který se má spustit po dvojitém kliknutí na ikonu" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "Dialogové okno pro úpravu všech voleb, které gnubiff interně používá můžete " "povolit zde. Pak bude možné upravit i ty volby pro které neexistuje gui " "rozhraní.Ke každé volbě je připojen krátký popis.\n" "Varování: Změnou těchto nastavení se může gnubiff začít chovat " "nepředvídatelně nebo vytvářet bezpečnostní rizika." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Písmo jakým se zobrazí informace" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Čas zobrazení vyskakovacího okna" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Přepnout volbu" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Překladatelé" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Použít _dekoraci" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Použít _geometrii:" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "Po _dvoj-kliknutí:" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Při _nové poště:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Zda mají být nastavení upravována v expertním módu." #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Zda zobrazit text" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Zda zobrazit obrázek" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Zda zobrazit vyskakovací okno" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Zda omezit počet zobrazených hlaviček" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Zda zobrazit obrázek" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Zda ukázat záložku \"Expertní volby\". Poznámka: Vypnutí této volby je možné " "zvrátit pouze ruční úpravou konfiguračního souboru!" #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Zda formátovat hlavičku" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Zda použít geometrii" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Zda použít dekoraci správce oken" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" "[odesílatel max. velikost]:[předmět max. velikost]:[datum max. velikost]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "Procházet:" #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "Zobrazit pro" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "Upravit volby v expertním módu" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Písmo:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Formát:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "Omezit shromážděnou poštu na" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "Omezit počet na" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "Ukázat záložku pro experty" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "nastavení gnubiff" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "hlavička(y)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "e-mail(y)" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "sekund(a/y)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Detaily" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "A_dresa:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Ověření:" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Prohledat..." #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tifikát:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Soubor certifikátu" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Port pro napojení na server" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Spojení:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Prodleva:" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Složka poštovní schránky" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Vlastnosti poštovní schránky" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Jméno poštovní schránky" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Jiný port pro spojení" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Jiná složka poštovní schránky" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Standardní port pro spojení" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Standardní složka poštovní schránky" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "Doba mezi jednotlivými kontrolami pošty, nebo mezi opakováními při ztraceném " "spojení" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Vaše přihlašovací heslo mail serveru" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Vaše přihlašovací jméno mail serveru" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "Schránka:" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "Jmé_no:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "Heslo:" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Typ:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Uživatelské jméno:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "další" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "soubor, adresář nebo jméno serveru" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minut" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "jiné" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "sekund" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "stan_dard" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "stand_ardní" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Ověření" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Vaše přihlašovací heslo pro server" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Vaše přihlašovací jméno pro server" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Adresa" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Přidělen" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Akceptovat" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Nemohu certifikovat server" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Detaily o certifikátu" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Běžné jméno" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "Země" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Lokalita" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organizace" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Organizační jednotka" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Stát nebo provincie" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Datum" #: ../ui/popup.glade.h:2 msgid "From" msgstr "Od" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Předmět" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "obsah e-mailu" #~ msgid "About gnubiff" #~ msgstr "O gnubiff" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "New mail" #~ msgstr "Nové zprávy" #~ msgid "No mail" #~ msgstr "Žádné zprávy" #~ msgid "Applet" #~ msgstr "Applet" #~ msgid "00" #~ msgstr "00" #~ msgid "Text to display" #~ msgstr "Zobrazený text" #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Nemohu nalézt adresář s novou poštou (%s)" gnubiff-2.2.16/po/hu.po0000644000175000017500000007200312474424636011553 00000000000000# Hungarian translation for gnubiff. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # # Adam Wallner , 2005. # Balázs Úr , 2014. msgid "" msgstr "" "Project-Id-Version: gnubiff 2.2.15\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2014-05-25 22:45+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Lokalize 1.5\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Ennek a levélnek a kódolását „%s” nem ismerem]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Nem tudom dekódolni ezt a fejlécsort]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Nem tudom konvertálni a karakterkódolást (erről: „%s” „utf-8”-ra)]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Gnome kisalkalmazás indítása parancssorból" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Használandó konfigurációs fájl" #: src/gnubiff.cc:98 msgid "file" msgstr "fájl" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "A konfigurációs procedúra kihagyása" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Gnubiff indítása grafikus felület nélkül" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Gnubiff ikont a tálcára." #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "A verzióinformációk kiírása és kilépés" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Általános parancssori opciók:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Hibakeresési opciók:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "A konfigurációs fájl (%s) nem található!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Régi gnubiff („%s” verzió) konfigurációs fájl betöltődött." #. Config file belongs to an older version of gnubiff #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Régi gnubiff („%s” verzió) konfigurációs fájl betöltődött." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Megpróbáljuk konvertálni az összes opciót." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Minden opció sikeresen konvertálva." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Néhány opció sikeresen konvertálva. A következő opciókat kézzel kell frissíteni: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Nem tudom megnyitni a konfigurációs fájlodat (%s)." #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Nem tudok XML feldolgozót készíteni a konfigurációs fájlhoz." #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Nem találtam levélfiók-információt a konfigurációs fájlodban (%s)." #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Nem megfelelő paraméter formátum a beállítófájlban." #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Nincs protokoll megadva a(z) %d. levélfiókhoz." #: src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Nem sikerül szálat készíteni: %s" #: src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "%d. levélfiók" #. Insert default values #: src/mailbox.cc:644 msgid "" msgstr "" #: src/mailbox.cc:645 msgid "" msgstr "" #: src/mailbox.cc:646 msgid "" msgstr "" #: src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Nem sikerül a „content type” fejlécsor feldolgozása]" #: src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Nem sikerül a „content transfer encoding” fejlécsor feldolgozása]" #: src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Hibás többrészes levél]" #: src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[A többrészes üzenet első részének az eleje nem található]" #: src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Ennek az üzenet nem támogatott tartalomtípust tartalmaz: „%s/%s”]" #: src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "A reguláris kifejezés lefordítása közben hiba történt.\n" "Reguláris kifejezés: %s\n" "Hibaüzenet: %s" #. Otherwise: Ignore it and print error message #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Nem lehet csoportosítani a leveleket „%s” szerint." #: src/socket.cc:116 src/socket.cc:175 src/socket.cc:233 src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Nem lehet kapcsolódni ehhez: %s a(z) %d porton." #: src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Nem lehet betölteni a tanúsítványt (%s) ehhez: %s" #: src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Nem sikerül azonosítani a távoli gépet (%s %d porton)" #: src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Nem lehet írni erre: %s a(z) %d porton" #: src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Nem lehet olvasni erről: %s a(z) %d porton" #: src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Nem sikerült beállítani az olvasási időkorlátot a foglalaton: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Nem lehet megnyitni: %s." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Ennek az üzenetnek nincs támogatott tartalomtípussal rendelkező része]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Nem sikerült kiválasztani a(z) %s mappát a(z) %s gépen" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Nem kapok visszaigazolást ettől: %s a(z) %d porton" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] A kiszolgáló nem küldött jelöletlen „%s” választ vagy elfogadást" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] A kiszolgáló nem küldött jelöletlen „%s” választ" #. see RFC 3501 7.1.5 #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] A kiszolgáló azonnal lezárta a kapcsolatot: %s" #. see RFC 3501 7.1.3 #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Belső kiszolgálóhiba vagy ismeretlen hiba: %s" #. see RFC 3501 7.1.2 #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Figyelmeztetés a kiszolgálótól: %s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Nem lehet megnyitni az új email könyvtárat (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] üres jelszó" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Hibaüzenet a POP3 kiszolgálótól: %s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Nem kaptam pozitív választ a POP3 kiszolgálótól" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] A pop kiszolgálója valószínűleg nem támogatja az apop protokollt (nincs időbélyeg átadva)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Hiba a crypto programmal, amelyet beállítási időben kellett volna észlelni" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Ismeretlen „%s” opció" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Nem lehet a(z) „%s\" opciót „%s” értékre állítani" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Nem található a megadott felületi elem („%s”) az xml szerkezeten („%s”) belül" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "nincs levél" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Nem sikerült lefordítani a felületet.\n" "\n" "Név: %s\n" "Útvonal: %s\n" "\n" "Győződjön meg arról, hogy a csomag helyesen van-e telepítve." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "A GUI_connect működő gmodule-t igényel" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Nem található a(z) „%s” szignálkezelő." #: src/ui-applet.cc:217 msgid " unknown" msgstr " ismeretlen" #: src/ui-applet.cc:222 msgid " error" msgstr " hiba" #: src/ui-applet.cc:231 msgid " checking..." msgstr " ellenőrzés…" #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Levélfiók" #. Column: TYPE #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Típus" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Állapot" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Biztonság" #. Selection label #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Nincs levélfiók kiválasztva" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Opció" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Érték" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Indítás" #: src/ui-preferences.cc:615 ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Leállítás" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Új levél kép tallózása" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Adja meg a felhasználónevét és a jelszavát a(z) „%s” levélfiókhoz" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Nem lehet ellenőrizni %s identitását megbízható oldalként.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Vagy az oldal tanúsítványa nem teljes, vagy egy olyan oldalhoz csatlakozott, amely úgy tesz, mintha %s lenne, és valószínűleg a jelszavát akarja megszerezni" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Automatikus felismerés" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Fájl vagy mappa" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Felh./Jelszó" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Titkosított Felh./Jelszó (apop)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL tanúsítvánnyal" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Fájl vagy mappa tallózása" #: src/ui-properties.cc:323 ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Tanúsítványfájl tallózása" #: src/ui-popup.cc:195 msgid "From" msgstr "Feladó" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Tárgy" #: src/ui-popup.cc:207 msgid "Date" msgstr "Dátum" #. Create error message #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Ön egy ismeretlen belső hibát fedezett fel. Kérjük küldjön egy részletes hibajelentést a „gnubiff-bugs@lists.sourceforge.net” címre.\n" "\n" "További információk:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Információ" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Megjelölés olvasottként" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Beállítások…" #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Parancs futtatása" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Email jelző program" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade.h:1 msgid "About" msgstr "Névjegy" #: ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "A gnubiff egy levéljelző program." #. See http://www.gnu.org /licenses/translations.html #: ui/applet-gtk.glade.h:4 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "A Gnubiff a GNU projekt része.\n" "A GNU égisze alatt lett kiadva.\n" "\n" "Ez a program szabad szoftver; terjeszthető illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 3-as, akár (tetszőleges) későbbi változata szerint.\n" "\n" "Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÁGRA vagy VALAMELY CÉLRA VALÓ ALKALMAZHATÓSÁGRA való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz.\n" "\n" "A felhasználónak a programmal együtt meg kell kapnia a GNU General Public License egy példányát; ha mégsem kapta meg, akkor tekintse meg a http://www.gnu.org/licenses/ oldalon.\n" "\n" "Egy kivétel a GNU General Public License alól a gnubiff terjesztése az OpenSSL könyvtárhoz csatolva. Tekintse meg a README fájlt." #: ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Indító parancs" #: ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "_Kilépés" #: ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "buboréksúgó" #: ui/preferences.glade.h:1 msgid "Commands" msgstr "Parancsok" #: ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Szakértői szerkesztési mód " #: ui/preferences.glade.h:3 msgid "General" msgstr "Általános" #: ui/preferences.glade.h:4 msgid "Headers" msgstr "Fejlécek" #: ui/preferences.glade.h:5 msgid "Layout" msgstr "Elrendezés" #: ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Levélfiókok" #: ui/preferences.glade.h:7 msgid "When new mail" msgstr "Új levél esetén" #: ui/preferences.glade.h:8 msgid "When no mail" msgstr "Ha nincs levél" #: ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" "A Gnubiff a GNU project része.\n" " A GNU égisze alatt lett kiadva." #: ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "A fejlesztők elérhetők a gnubiff-devel@lists.sourceforge.net címen.\n" "A hibák a gnubiff-bugs@lists.sourceforge.net címen jelenthetők." #: ui/preferences.glade.h:13 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Ez egy lista azokról az emberekről, akik lefordították a gnubiff-et különböző nyelvekre (csillag jelöli az előző verziók fordítóit):" #: ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Sok további ember vett részt a gnubiff készítésében a következő módon:\n" " - problémák bejelentésével\n" " - különféle fejlesztési tanácsokkal\n" " - a kód terjesztésével\n" "Itt egy lista ezekből az emberekből:" #: ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Kisalkalmazás geometria" #: ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Kisalkalmazás vagy Biff" #: ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "T_allózás..." #: ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Képfájl tallózása" #: ui/preferences.glade.h:23 msgid "Contributors" msgstr "Közreműködők" #: ui/preferences.glade.h:24 msgid "Credits" msgstr "Készítők" #: ui/preferences.glade.h:25 msgid "Developers" msgstr "Fejlesztők" #: ui/preferences.glade.h:26 msgid "Edit option" msgstr "Opció szerkesztése" #: ui/preferences.glade.h:27 msgid "Expert" msgstr "Szakértő" #: ui/preferences.glade.h:28 msgid "Image filename" msgstr "Képfájl neve" #: ui/preferences.glade.h:29 msgid "List all options." msgstr "Az összes opció listázása." #: ui/preferences.glade.h:30 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Az opciók listája, típusa és az aktuális értéke. Szerkesztéshez kattints duplán:" #: ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Levélfiókok" #: ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Karbantartók" #: ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "A megjeleníthető fejlécek maximális száma" #: ui/preferences.glade.h:34 ui/popup.glade.h:4 msgid "Popup" msgstr "Felugró ablakok" #: ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Felugró ablak geometriája" #: ui/preferences.glade.h:36 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Azoknak a (megjelenített) opcióknak a keresése, amik a szövegmezőt tartalmazzák." #: ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Változtatás az alapértelmezettre" #: ui/preferences.glade.h:38 msgid "Show _image:" msgstr "_Kép megjelenítése:" #: ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Szö_veg megjelenítése:" #: ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Ké_p megjelenítése:" #: ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Szöve_g megjelenítése:" #: ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "A keresendő szöveg." #: ui/preferences.glade.h:44 #, no-c-format msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Megjelenítendő szöveg (%d és %D a levelek száma, %d 0-kal kiegészített). Pango jelölőnyelv használható." #: ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "A parancs, ami lefut új levél esetén" #: ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "A parancs, ami lefut, amikor duplán kattint az ikonra" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "A szerkesztő párbeszédablak a gnubiff összes belső használatú beállításaihoz itt engedélyezhető. Minden opcióhoz tartozik egy rövid leírás.\n" "Figyelem: Ezeknek a beállításoknak a szerkesztése nem megfelelő működést okozhat vagy biztonsági problémákat vethet fel." #: ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Az információk megjelenítéséhez használt betűtípus" #: ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "A felugró ablak megjelenítési ideje" #: ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Az opció megváltoztatása" #: ui/preferences.glade.h:53 msgid "Translators" msgstr "Fordítók" #: ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Használjon _dekorációt" #: ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Használjon _geometriát:" #: ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "_Dupla kattintáskor:" #: ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Ha ú_j levél:" #: ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Az opciók szerkeszthetők-e szakértői módban" #: ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Megjelenítsen-e szöveget" #: ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Megjelenítsen-e képet" #: ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Megjelenítse-e a felugró ablakot" #: ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Szabályozza-e a megjelenítendő fejlécek számát" #: ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Megjelenítsen-e képet" #: ui/preferences.glade.h:64 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Megjelenjen-e a szakértői fül. Figyelem: ennek az opciónak a módosítása csak a beállítófájl szerkesztésével vonható vissza!" #: ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Használjon-e formátumot a fejléchez" #: ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Használjon-e geometriát" #: ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Használjon-e ablakkezelő dekorációt" #: ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[Küldő max. hossza]:[Téma max. hossza]:[Dátum max. hossza]" #: ui/preferences.glade.h:69 ui/properties.glade.h:21 msgid "_Browse..." msgstr "_Tallózás..." #: ui/preferences.glade.h:70 msgid "_Display for" msgstr "Megjelenítés ennyi időre:" #: ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "Az opciók sz_erkesztése szakértői módban" #: ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Betűtípus:" #: ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Formátum:" #: ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "Az üzenetek számának korlátozása (db): " #: ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Fejlécek számának korlátozása" #: ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "_Szakértői fül megjelenítése" #: ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "gnubiff beállítások" #: ui/preferences.glade.h:79 msgid "header(s)" msgstr "fejléc(ek)" #: ui/preferences.glade.h:80 msgid "mail(s)" msgstr "levél(ek)" #: ui/preferences.glade.h:81 msgid "second(s)" msgstr "másodperc" #: ui/properties.glade.h:1 msgid "_Details" msgstr "_Részletek" #: ui/properties.glade.h:2 msgid "A_ddress:" msgstr "C_ím:" #: ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Hit_elesítés:" #: ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Tall_ózás..." #: ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "_Tanúsítvány:" #: ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Tanúsítvány fájlnév" #: ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "A port, amivel a kiszolgálóhoz kapcsolódjon" #: ui/properties.glade.h:9 msgid "Connection:" msgstr "Kapcsolódás:" #: ui/properties.glade.h:10 msgid "Dela_y:" msgstr "I_dőköz:" #: ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Levélfiók mappa" #: ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Levélfiók paraméterek" #: ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "A levélfiók neve" #: ui/properties.glade.h:14 msgid "Other connection port" msgstr "Más csatlakozási port" #: ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Más levélfiók mappa" #: ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Szabványos csatlakozási port" #: ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Szabványos levélfiók mappa" #: ui/properties.glade.h:18 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Az az időköz, amennyit a levelek ellenőrzése között vár a program" #: ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "A jelszavad a levélkiszolgálóhoz" #: ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "A felhasználóneved a levélkiszolgálóhoz" #: ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Levélfiók:" #: ui/properties.glade.h:23 msgid "_Name:" msgstr "_Név:" #: ui/properties.glade.h:24 ui/authentication.glade.h:4 msgid "_Password:" msgstr "_Jelszó" #: ui/properties.glade.h:25 msgid "_Type:" msgstr "_Típus" #: ui/properties.glade.h:26 ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Felhasználónév:" #: ui/properties.glade.h:27 msgid "_other" msgstr "m_ás" #: ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "Fájl, mappa vagy hostnév" #: ui/properties.glade.h:29 msgid "minutes" msgstr "perc" #: ui/properties.glade.h:30 msgid "othe_r" msgstr "má_s" #: ui/properties.glade.h:31 msgid "seconds" msgstr "másodperc" #: ui/properties.glade.h:32 msgid "stan_dard" msgstr "szabv_ányos" #: ui/properties.glade.h:33 msgid "stand_ard" msgstr "szab_ványos" #: ui/authentication.glade.h:1 msgid "Authentication" msgstr "Hitelesítés" #: ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "A jelszava a kiszolgálóhoz" #: ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "A felhasználóneve a kiszolgálóhoz" #: ui/certificate.glade.h:1 msgid "Address" msgstr "Cím" #: ui/certificate.glade.h:2 msgid "Issued To" msgstr "Kibocsátó" #: ui/certificate.glade.h:3 msgid "Accept" msgstr "Elfogad" #: ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Nem lehet a kiszolgálót igazolni" #: ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Tanúsítvány részletek" #: ui/certificate.glade.h:6 msgid "Common Name" msgstr "Köznév" #: ui/certificate.glade.h:7 msgid "Country" msgstr "Ország" #: ui/certificate.glade.h:8 msgid "Locality" msgstr "Helység" #: ui/certificate.glade.h:9 msgid "Organization" msgstr "Szervezet" #: ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Szervezeti egység" #: ui/certificate.glade.h:11 msgid "State or Province" msgstr "Állam vagy tartomány" #: ui/popup.glade.h:1 msgid "Date" msgstr "Dátum" #: ui/popup.glade.h:2 msgid "From" msgstr "Feladó" #: ui/popup.glade.h:3 msgid "Subject" msgstr "Tárgy" #: ui/popup.glade.h:5 msgid "mail content" msgstr "levél tartalom" #~ msgid "About gnubiff" #~ msgstr "A gnubiffről" #~ msgid "New mail" #~ msgstr "Új levél" #~ msgid "No mail" #~ msgstr "Nincs levél" #~ msgid "Applet" #~ msgstr "Kisalkalmazás" #~ msgid "Text to display" #~ msgstr "Megjelenítendő szöveg" gnubiff-2.2.16/po/id.po0000644000175000017500000007022712474424636011541 00000000000000# Pesan bahasa Indonesia untuk GNU biff. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Arif E. Nugroho , 2009. # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.2.11\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2009-04-05 18:19+0200\n" "PO-Revision-Date: 2009-11-26 10:00+0700\n" "Last-Translator: Arif E. Nugroho \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Pengkodean \"%s\" dari surat ini tidak dapat diartikan]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Tidak dapat mengartikan baris kepala ini]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Tidak dapat mengubah karakter set (dari \"%s\" ke \"utf-8\")]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Mulai aplet gnome dari baris perintah" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Berkas konfigurasi yang akan digunakan" #: src/gnubiff.cc:98 msgid "file" msgstr "berkas" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Lewatkan proses konfigurasi" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Awali gnubiff tanpa GUI" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Tempatkan icon gnubiff kedalam keranjang sistem" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Tampilkan informasi versi dan keluar" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Pilihan umum baris perintah:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Pilihan untuk penelusuran:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Berkas konfigurasi (%s) tidak ditemukan!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Memuat berkas konfigurasi dari versi gnubiff yang lebih baru \"%s\"." #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Memuat berkas konfigurasi dari versi gnubiff lama \"%s\"." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Mencoba mengubah seluruh pilihan." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Sukses mengubah seluruh pilihan." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Sukses mengubah beberapa pilihan. Pilihan berikut harus diperbarui secara manual: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Tidak dapat membuka berkas konfigurasi anda (%s)" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Tidak dapat membuat parser XML untuk berkas konfigurasi" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Tidak ditemukan definisi kotak surat dalam berkas konfigurasi anda (%s)" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Format parameter tidak legal dalam berkas konfigurasi" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Tidak dispesifikasikan protokol untuk kotak surat %d" #: src/mailbox.cc:143 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Tidak dapat membuat thread: %s" #: src/mailbox.cc:315 #, c-format msgid "mailbox %d" msgstr "kotak surat %d" #: src/mailbox.cc:640 msgid "" msgstr "" #: src/mailbox.cc:641 msgid "" msgstr "" #: src/mailbox.cc:642 msgid "" msgstr "" #: src/mailbox.cc:696 msgid "[Cannot parse content type header line]" msgstr "[Tidak dapat mengambil baris kepala tipe isi]" #: src/mailbox.cc:718 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Tidak dapat mengambil baris kepala pengkodean pengiriman]" #: src/mailbox.cc:759 msgid "[Malformed multipart message]" msgstr "[Pesan banyak bagian salah format]" #: src/mailbox.cc:767 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[TIdak dapat menemukan bagian pertama berawal dalam pesan banyak bagian]" #: src/mailbox.cc:813 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Pesan ini memiliki tipe isi yang tidak didukung: \"%s/%s\"]" #: src/mailbox.cc:1215 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Error ketika mengkompilasi sebuah ekspresi umum.\n" "Ekspresi umum: %s\n" "Pesan kesalahan: %s" #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Tidak dapat mengurutkan surat berdasarkan \"%s\"" #: src/socket.cc:123 src/socket.cc:152 src/socket.cc:180 src/socket.cc:189 #: src/socket.cc:198 src/socket.cc:211 src/socket.cc:241 src/socket.cc:250 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Tidak dapat menghubungi ke %s di port %d" #: src/socket.cc:226 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Gagal memuat sertifikat (%s) untuk %s" #: src/socket.cc:263 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Tidak dapat mengidentifikasikan remote host (%s di port %d)" #: src/socket.cc:348 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Tidak dapat menulis ke %s di port %d" #: src/socket.cc:419 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Tidak dapat membaca dari %s di port %d" #: src/socket.cc:442 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Tidak dapat menset batas waktu pembacaan di soket: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Tidak dapat membuka %s." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Pesan ini tidak memiliki bagian dengan tipe isi yang didukung]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Tidak dapat memilih folder %s di host %s" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Tidak dapat memperoleh persetujuan dari %s di port %d" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Server tidak mengirimkan balasan \"%s\" tidak bertanda atau persetujuan" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Server tidak mengirimkan balasan \"%s\" tidak bertanda" #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Server menutup koneksi secara langsung:%s" #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Kegagalan internal server atau kesalahan tidak diketahui:%s" #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Peringatan dari server:%s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Tidak dapat membuka direktori surat baru (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Kata sandi kosong" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Pesan error dari server POP3:%s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Tidak mendapatkan balasan positif dari server POP3" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Pop server anda kelihatannya tidak menerima protokol apop (tidak ada tanda waktu yang disediakan)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Masalah dengan crypto yang seharusnya terdeteksi pada waktu mengkonfigurasi" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Pilihan \"%s\" tidak diketahui" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Tidak dapat menset pilihan \"%s\" ke \"%s\"" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Tidak dapat menemukan widget yang dispesifikasikan (\"%s\") dalam struktur xml (\"%s\")" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "tidak ada surat" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Tidak dapat membuat antar muka.\n" "\n" "Nama: %s\n" "Jalur: %s\n" "\n" "Mohon pastikan paket telah terpasang dengan benar." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect membutuhkan gmodule bekerja dengan baik" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Tidak dapat menemukan pengendali sinyal '%s'." #: src/ui-applet.cc:217 msgid " unknown" msgstr " tidak diketahui" #: src/ui-applet.cc:222 msgid " error" msgstr " kesalahan" #: src/ui-applet.cc:231 msgid " checking..." msgstr " memeriksa..." #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Kotak surat" #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Tipe" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Keadaan" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Keamanan" #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Tidak ada kotak surat yang dipilih" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Pilihan" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Nilai" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Mulai" #: src/ui-preferences.cc:615 ui/preferences.glade:2176 msgid "_Stop" msgstr "_Henti" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Telusuri untuk gambar surat baru" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Mohon masukan nama pengguna dan kata sandi anda untuk kotak surat '%s'" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Tidak dapat memverifikasi identitas dari %s sebagai situs yang dipercaya.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Baik sertifikat situs yang tidak lengkap atau anda terhubung ke sebuah situs yang menyamar sebagai %s, mungkin untuk memperoleh kata sandi anda" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Otomatis terdeteksi" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Berkas atau Folder" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Nama pengguna/Kata sandi" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Nama pengguna/Kata sandi terenkripsi (apop)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL dengan sertifikat" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Browse untuk sebuah berkas atau folder" #: src/ui-properties.cc:323 ui/properties.glade:616 msgid "Browse for a certificate file" msgstr "Browse untuk sebuah berkas sertifikat" #: src/ui-popup.cc:195 msgid "From" msgstr "Dari" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Subjek" #: src/ui-popup.cc:207 msgid "Date" msgstr "Tanggal" #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Anda telah menemukan sebuah kesalah internal yang tidak diketahui. Mohon kirimkan laporan lengkap bug ke \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Informasi lebih lanjut:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Informasi" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade:79 msgid "Mark mailboxes read" msgstr "Tandai kotak surat terbaca" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Kesukaan..." #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Jalankan perintah" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Aplikasi notifikasi surat" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade:7 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade:6 msgid "tooltip" msgstr "tooltip" #: ui/applet-gtk.glade:64 msgid "Start command" msgstr "Jalankan perintah" #: ui/applet-gtk.glade:94 msgid "About" msgstr "Tentang" #: ui/applet-gtk.glade:114 msgid "_Quit" msgstr "_Keluar" #: ui/applet-gtk.glade:131 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff adalah sebuah aplikasi untuk memberitahu datangnya surat." #: ui/applet-gtk.glade:133 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Gnubiff adalah bagian dari projek GNU.\n" "Aplikasi ini dikeluarkan dibawah aegis dari GNU.\n" "\n" "Aplikasi ini adalah piranti lunak bebas; anda dapat meredistribusikannya dan/atau memodifikasinya dibawah persetujuan dari GNU General Public License seperti yang dipublikasikan oleh Free Software Foundation baik versi 3 dari Lisensi, atau (menurut pilihan anda) versi apapun selanjutnya.\n" "\n" "Aplikasi ini didistribusikan dengan harapan akan berguna, tetapi TANPA GARANSI APAPUN; bahkan tanpa adanya garansi untuk bisa DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat GNU General Public License untuk keterangan lebih lengkap.\n" "\n" "Anda seharusnya telah menerima sebuah salinan dari GNU General Public License bersamaan dengan aplikasi ini. Jika tidak, lihat http://www.gnu.org/licenses/.\n" "\n" "Untuk sebuah pengecualian ke GNU General Public License untuk pendistribusian gnubiff yang dihubungkan ke perpustakaan OpenSSL lihat berkas README." #: ui/preferences.glade:6 msgid "gnubiff preferences" msgstr "kesukaan gnubiff" #: ui/preferences.glade:49 msgid "_Restrict collected mail to" msgstr "_Batasi pengumpulan surat ke" #: ui/preferences.glade:76 msgid "mail(s)" msgstr "surat" #: ui/preferences.glade:107 msgid "The command to run when the icon is double-clicked" msgstr "Perintah yang dijalankan ketika icon di klik dua kali" #: ui/preferences.glade:122 msgid "The command to run when new mail arrives" msgstr "Perintah yang dijalankan ketika surat baru datang" #: ui/preferences.glade:137 msgid "When _new mail:" msgstr "Ketika surat _baru:" #: ui/preferences.glade:199 msgid "Commands" msgstr "Perintah" #: ui/preferences.glade:219 msgid "Mailboxes" msgstr "Kotak surat" #: ui/preferences.glade:236 msgid "General" msgstr "Umum" #: ui/preferences.glade:249 msgid "When _double-clicked:" msgstr "Ketika diklik _dua kali:" #: ui/preferences.glade:322 msgid "Mailboxes" msgstr "Kotak surat" #: ui/preferences.glade:367 ui/preferences.glade:751 msgid "Whether to use window manager decoration" msgstr "Baik menggunakan manajer dekorasi jendela" #: ui/preferences.glade:368 ui/preferences.glade:752 msgid "Use _decoration" msgstr "Gunakan _dekorasi" #: ui/preferences.glade:386 ui/preferences.glade:770 msgid "The font to use to display information" msgstr "Bentuk huruf yang digunakan untuk menampilkan informasi" #: ui/preferences.glade:403 ui/preferences.glade:860 msgid "_Font:" msgstr "_Bentuk huruf:" #: ui/preferences.glade:424 msgid "When no mail" msgstr "Ketika tidak ada surat" #: ui/preferences.glade:445 msgid "When new mail" msgstr "Ketika ada surat baru" #: ui/preferences.glade:462 ui/preferences.glade:807 msgid "Layout" msgstr "Layout" #: ui/preferences.glade:475 msgid "Whether to display an image" msgstr "Apakah menampilkan sebuah gambar" #: ui/preferences.glade:476 msgid "Show i_mage:" msgstr "Tampilkan ga_mbar:" #: ui/preferences.glade:495 ui/preferences.glade:535 msgid "Whether to display a text" msgstr "Apakah menampilkan sebuah teks" #: ui/preferences.glade:496 msgid "Show t_ext:" msgstr "Tampilkan t_eks:" #: ui/preferences.glade:515 msgid "Whether to show an image" msgstr "Apakah menampilkan sebuah gambar" #: ui/preferences.glade:516 msgid "Show _image:" msgstr "Tampilkan _gambar:" #: ui/preferences.glade:536 msgid "Show _text:" msgstr "Tampilkan _teks:" #: ui/preferences.glade:555 ui/preferences.glade:840 msgid "Whether to use geometry" msgstr "Untuk menggunakan geometri" #: ui/preferences.glade:556 ui/preferences.glade:841 msgid "Use _geometry:" msgstr "Gunakan _geometri:" #: ui/preferences.glade:575 msgid "Applet geometry" msgstr "Aplet geometri" #: ui/preferences.glade:590 ui/preferences.glade:639 msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Teks untuk menampilkan (%d dan %D adalah jumlah dari pesan baru, %d diisi dengan nol). Pango markup mungkin telah digunakan." #: ui/preferences.glade:605 ui/preferences.glade:654 msgid "Browse for an image file" msgstr "Browse untuk sebuah berkas gambar" #: ui/preferences.glade:606 msgid "B_rowse..." msgstr "Telusu_ri..." #: ui/preferences.glade:624 ui/preferences.glade:673 msgid "Image filename" msgstr "Nama berkas gambar" #: ui/preferences.glade:655 ui/properties.glade:295 msgid "_Browse..." msgstr "_Telusuri..." #: ui/preferences.glade:694 msgid "Applet or Biff" msgstr "Aplet untuk Biff" #: ui/preferences.glade:791 msgid "Headers" msgstr "Kepala" #: ui/preferences.glade:820 msgid "Whether to display the popup window" msgstr "Apakah akan menampilkan jendela popup" #: ui/preferences.glade:821 msgid "_Display for" msgstr "_Tampilkan untuk" #: ui/preferences.glade:877 msgid "header(s)" msgstr "kepala" #: ui/preferences.glade:892 msgid "Maximum number of headers to display" msgstr "Jumlah maksimal dari kepala untuk ditampilkan" #: ui/preferences.glade:909 msgid "Whether to restrict number of displayed headers" msgstr "Apakah membatasi jumlah dari kepala yang ditampilkan" #: ui/preferences.glade:910 msgid "_Restrict number to" msgstr "_Batasi jumlah ke" #: ui/preferences.glade:929 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[ukuran maksimal pengirim]:[ukuran maksimal subjek]:[ukuran maksimal tanggal]" #: ui/preferences.glade:944 msgid "Whether to use format for header" msgstr "Apakah menggunakan format untuk kepala" #: ui/preferences.glade:945 msgid "_Format:" msgstr "_Format:" #: ui/preferences.glade:964 msgid "Popup geometry" msgstr "Popup geometri" #: ui/preferences.glade:979 msgid "Time to display popup window" msgstr "Waktu untuk menampilkan jendela popup" #: ui/preferences.glade:996 msgid "second(s)" msgstr "detik" #: ui/preferences.glade:1016 ui/popup.glade:7 msgid "Popup" msgstr "Popup" #: ui/preferences.glade:1062 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "Dialog pengubahan untuk seluruh pilihan yang digunakan oleh gnubiff secara internal dapat diaktifkan disini. Jadi ini memungkinkan untuk mengubah nilai dari pilihan dimana tidak ada widget gui yang disediakan. Sebuah deskripsi singkat untuk setiap pilihan disediakan.\n" "Peringatan: Pengubahan pilihan ini mungkin menyebabkan gnubiff untuk beraksi tidak sesuai atau menghasilkan masalah keamanan." #: ui/preferences.glade:1080 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Apakah menampilkan bagian ahli. Catatan: menonaktifkan pilihan ini hanya dapat dikembalikan dengan mengubah berkas konfigurasi secara manual!" #: ui/preferences.glade:1081 msgid "_Show expert tab" msgstr "_Tampilkan bagian untuk ahli" #: ui/preferences.glade:1101 msgid "Whether options can be edited in expert mode" msgstr "Apakah pilihan dapat diubah dalam mode ahli" #: ui/preferences.glade:1102 msgid "_Edit options in expert mode" msgstr "Pilihan _Ubah dalam mode ahli" #: ui/preferences.glade:1121 msgid "Expert editing mode" msgstr "Mode pengubahan ahli" #: ui/preferences.glade:1155 msgid "List all options." msgstr "Tampilkan seluruh pilihan." #: ui/preferences.glade:1171 msgid "String to be searched for." msgstr "Kata yang akan dicari." #: ui/preferences.glade:1183 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Cari untuk pilihan (yang ditampilkan) yang berisi kata dalam masukan kata." #: ui/preferences.glade:1212 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Daftar dari pilihan, tipenya dan nilai sekarang. Untuk mengubah sebuah pilihan klik dua kali di nilainya." #: ui/preferences.glade:1257 msgid "Expert" msgstr "Ahli" #: ui/preferences.glade:1297 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Gnubiff adalah bagian dari projek GNU.\n" " Aplikasi ini dikeluarkan dibawah aegis dari GNU." #: ui/preferences.glade:1363 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Pengembang dapat dihubungi melalui gnubiff-devel@lists.sourceforge.net.\n" "Bugs seharusnya dilaporkan ke gnubif-bugs@lists.sourceforge.net." #: ui/preferences.glade:1432 msgid "Developers" msgstr "Pengembang" #: ui/preferences.glade:1511 msgid "Maintainers" msgstr "Penjaga" #: ui/preferences.glade:1530 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Berikut adalah daftar dari orang orang tersebut, yang telah menerjemahkan gnubiff kedalam bahasa bahasa yang berbeda (penerjemah dari versi sebelumnya ditandai dengan sebuah bintang):" #: ui/preferences.glade:2048 msgid "Translators" msgstr "Penerjemah" #: ui/preferences.glade:2065 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Banyak orang telah berkontribusi lebih lanjut ke gnubiff melalui\n" " - melaporkan masalah\n" " - menyarankan berbagai perbaikan\n" " - mengirimkan kode sebenarnya\n" "Berikut adalah daftar dari orang orang ini:" #: ui/preferences.glade:2108 msgid "Contributors" msgstr "Pengkontribusi" #: ui/preferences.glade:2130 msgid "Credits" msgstr "Kredit" #: ui/preferences.glade:2219 msgid "Set to default value" msgstr "Set nilai baku ke" #: ui/preferences.glade:2234 msgid "Toggle option" msgstr "Ganti pilihan" #: ui/preferences.glade:2249 msgid "Edit option" msgstr "Ubah pilihan" #: ui/properties.glade:7 msgid "Mailbox properties" msgstr "Properti kotak surat" #: ui/properties.glade:52 msgid "_Name:" msgstr "_Nama:" #: ui/properties.glade:77 msgid "A_ddress:" msgstr "_Alamat:" #: ui/properties.glade:102 msgid "Name of the mailbox" msgstr "Nama dari kotak surat" #: ui/properties.glade:124 msgid "_Type:" msgstr "_Tipe:" #: ui/properties.glade:174 ui/authentication.glade:52 msgid "_Username:" msgstr "_Nama pengguna:" #: ui/properties.glade:199 msgid "Your username on the mail server" msgstr "Nama pengguna anda di kotak surat" #: ui/properties.glade:221 ui/authentication.glade:77 msgid "_Password:" msgstr "_Kata sandi:" #: ui/properties.glade:246 msgid "Your password on the mail server" msgstr "Kata sandi anda di server surat" #: ui/properties.glade:274 msgid "file or folder or hostname" msgstr "berkas atau folder atau nama host" #: ui/properties.glade:367 msgid "Connection:" msgstr "Koneksi:" #: ui/properties.glade:391 msgid "Connection port to connect to server" msgstr "Port koneksi untuk menghubungi ke server" #: ui/properties.glade:414 msgid "Standard connection port" msgstr "Port koneksi baku" #: ui/properties.glade:416 msgid "stan_dard" msgstr "ba_ku" #: ui/properties.glade:437 msgid "Other connection port" msgstr "Koneksi port lain" #: ui/properties.glade:439 msgid "_other" msgstr "lain" #: ui/properties.glade:540 msgid "Aut_hentication:" msgstr "Otentifikasi:" #: ui/properties.glade:594 msgid "Certificate filename" msgstr "Nama berkas sertifikat" #: ui/properties.glade:618 msgid "Bro_wse..." msgstr "Telusuri..." #: ui/properties.glade:637 msgid "Cer_tificate:" msgstr "Ser_tifikat:" #: ui/properties.glade:692 msgid "minutes" msgstr "menit" #: ui/properties.glade:716 msgid "seconds" msgstr "detik" #: ui/properties.glade:739 ui/properties.glade:765 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Waktu yang dibutuhkan untuk menunggu diantara pemeriksaan surat atau diantara percobaan ketika koneksi hilang" #: ui/properties.glade:791 msgid "Dela_y:" msgstr "Tunda:" #: ui/properties.glade:846 msgid "_Mailbox:" msgstr "Kotak surat:" #: ui/properties.glade:871 msgid "Mailbox folder" msgstr "Folder kotak surat" #: ui/properties.glade:893 msgid "Other mailbox folder" msgstr "Folder kotak surat lain" #: ui/properties.glade:895 msgid "othe_r" msgstr "lain" #: ui/properties.glade:916 msgid "Standard mailbox folder" msgstr "Folder kotak surat baku" #: ui/properties.glade:918 msgid "stand_ard" msgstr "b_aku" #: ui/properties.glade:951 msgid "_Details" msgstr "_Detil" #: ui/authentication.glade:7 msgid "Authentication" msgstr "Otentifikasi" #: ui/authentication.glade:102 msgid "Your username on the server" msgstr "Nama pengguna ada di server" #: ui/authentication.glade:124 msgid "Your password on the server" msgstr "Kata sandi anda di server" #: ui/certificate.glade:7 msgid "Cannot certify server" msgstr "Tidak dapat memastikan server" #: ui/certificate.glade:130 msgid "Common Name" msgstr "Nama Umum" #: ui/certificate.glade:154 msgid "Organization" msgstr "Organisasi" #: ui/certificate.glade:178 msgid "Organization Unit" msgstr "Satuan Organisasi" #: ui/certificate.glade:275 msgid "Issued To" msgstr "Diberikan Ke" #: ui/certificate.glade:394 msgid "Address" msgstr "Alamat" #: ui/certificate.glade:418 msgid "Country" msgstr "Negara" #: ui/certificate.glade:442 msgid "Locality" msgstr "Lokalitas" #: ui/certificate.glade:540 msgid "State or Province" msgstr "State atau Propinsi" #: ui/certificate.glade:570 msgid "Certificate details" msgstr "Sertifikat detil" #: ui/certificate.glade:668 msgid "Accept" msgstr "Terima" #: ui/popup.glade:61 msgid "mail content" msgstr "isi surat" #: ui/popup.glade:116 msgid "From" msgstr "Dari" #: ui/popup.glade:140 msgid "Subject" msgstr "Subjek" #: ui/popup.glade:164 msgid "Date" msgstr "Tanggal" gnubiff-2.2.16/po/es.po0000644000175000017500000006147012474424635011553 00000000000000# translation of gnubiff-2.0.2.po to Spanish # This file is distributed under the same license as the PACKAGE package. # Copyright (C) 2005 Free Software Foundation, Inc. # Vctor Alonso , 2004, 2005. # msgid "" msgstr "" "Project-Id-Version: gnubiff-2.0.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2004-10-18 12:02+0200\n" "PO-Revision-Date: 2005-01-04 22:49+0000\n" "Last-Translator: Vctor Alonso \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.3.1\n" #: src/gnubiff.cc:70 msgid "configuration file to use" msgstr "fichero de configuracin a utilizar" #: src/gnubiff.cc:70 msgid "file" msgstr "fichero" #: src/gnubiff.cc:71 msgid "skip the configure process" msgstr "saltarse el proceso de configuracin" #: src/gnubiff.cc:174 msgid "" "\n" "This version of gnubiff has been compiled with GNOME support\n" msgstr "" "\n" "Esta versin de gnubiff ha sido compilada con soporte para GNOME\n" #: src/gnubiff.cc:175 src/gnubiff.cc:184 msgid "If you want to use the GTK version, type gnubiff --gtk\n" msgstr "Si desea usar la versin GTK, teclee gnubiff --gtk\n" #: src/gnubiff.cc:176 msgid " then use -c file to specify an alternate configuration file\n" msgstr " entonces use -c fichero para especificar un fichero de configuracin alternativo\n" #: src/gnubiff.cc:177 msgid " and -n to skip configuration process\n" msgstr " y -n para saltarse el proceso de configuracin\n" #: src/gnubiff.cc:178 msgid "If you want to use the GNOME version, use gnome panel\n" msgstr "Si desea usar la versin para GNOME, use el panel gnome\n" #: src/gnubiff.cc:179 msgid "Have a nice day\n" msgstr "Que tenga un buen da\n" #: src/gnubiff.cc:183 msgid "" "\n" "This version of gnubiff has been compiled with GNOME support" msgstr "" "\n" "Esta versin de gnubiff ha sido compilada con soporte para GNOME" #: src/gnubiff.cc:185 msgid "Now I will hang forever...\n" msgstr "Ahora me colgar para siempre...\n" #: src/ui-applet-gnome.cc:358 msgid "Copyright (c) 2000-2004 Nicolas Rougier\n" msgstr "Copyright (c) 2000-2004 Nicolas Rougier\n" #: src/ui-applet-gnome.cc:359 ui/applet-gtk.glade.h:9 msgid "This program is part of the GNU project, released under the aegis of GNU." msgstr "Este programa es parte del proyecto GNU, publicado bajo los trminos de GNU." #: src/biff.cc:153 #, c-format msgid "Configuration file (%s) not found !" msgstr "Fichero de configuracin (%s) no encontrado!" #: src/biff.cc:222 src/mailbox.cc:270 #, c-format msgid "Unable to create lookup thread: %s\n" msgstr "No se puede crear hilo de bsqueda: %s\n" #: src/biff.cc:462 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "No se puede abrir el fichero de configuracin (%s)" #: src/biff.cc:484 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "No se encontr ninguna declaracin de buzn en el fichero de configuracin (%s)" #: src/mailbox.cc:78 #, c-format msgid "mailbox %d" msgstr "buzn %d" #: src/mailbox.cc:153 #, c-format msgid "[%d] Unable to create thread: %s\n" msgstr "[%d] No se puede crear hilo: %s\n" #: src/mailbox.cc:364 src/mailbox.cc:371 msgid "Mailbox format is unknown" msgstr "El formato del buzn es desconocido" #: src/mailbox.cc:399 msgid "" msgstr "" #: src/mailbox.cc:409 msgid "" msgstr "" #: src/mailbox.cc:419 msgid "" msgstr "" #: src/socket.cc:104 src/socket.cc:126 src/socket.cc:141 src/socket.cc:166 #: src/socket.cc:174 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Incapaz de conectar con %s en el puerto %d" #: src/socket.cc:151 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Fall la carga del certificado (%s) para %s" #: src/socket.cc:185 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] No se puede identificar la mquina remota (%s en el puerto %d)" #: src/socket.cc:252 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Incapaz de escribir en %s en el puerto %d" #: src/socket.cc:299 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Incapaz de leer desde %s en el puerto %d" #: src/imap4.cc:100 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Incapaz de obtener confirmacin de %s en el puerto %d" #: src/maildir.cc:83 src/maildir.cc:144 #, c-format msgid "Cannot find new mail directory (%s)" msgstr "No se puede encontrar el directorio de correo nuevo (%s)" #: src/maildir.cc:90 src/maildir.cc:151 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "No se puede abrir el directorio de correo nuevo (%s)" #: src/maildir.cc:177 #, c-format msgid "Cannot open %s." msgstr "No se puede abrir %s." #: src/apop.cc:77 #, c-format msgid "[%d] Empty password" msgstr "[%d] Contrasea vaca" #: src/apop.cc:93 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] El servidor pop parece no aceptar el protocolo apop (no se proporcion marca temporal)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Problema de cifrado que debera haber sido detectado en el momento de la configuarcin" #: src/gui.cc:174 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "No se puede construir la interfaz.\n" "\n" "Nombre: %s\n" "Ruta: %s\n" "\n" "Por favor, asegrese de que el paquete ha sido instalado correctamente." #: src/gui.cc:210 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "No se puede encontrar el elemento especificado (\"%s\") en la estructura xml (\"%s\")" #: src/gui.cc:317 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect requiere que gmodule est funcionando" #: src/gui.cc:324 #, c-format msgid "Could not find signal handler '%s'." msgstr "No se pudo encontrar el manejador de seales '%s'." #: src/ui-applet.cc:165 msgid "error" msgstr "error" #: src/ui-applet.cc:167 msgid "blocked (unsecure)" msgstr "bloqueado (no seguro)" #: src/ui-applet.cc:172 msgid " checking..." msgstr " comprobando..." #: src/ui-applet-gtk.cc:136 msgid "New mail" msgstr "Mensaje nuevo" #: src/ui-applet-gtk.cc:149 msgid "No mail" msgstr "No hay correo" #: src/ui-preferences.cc:141 src/ui-popup.cc:139 msgid "Mailbox" msgstr "Buzn" #: src/ui-preferences.cc:160 msgid "Format" msgstr "Formato" #: src/ui-preferences.cc:169 msgid "Status" msgstr "Estado" #: src/ui-preferences.cc:177 msgid "Poll time" msgstr "Intervalo de consulta" #. Selection label #: src/ui-preferences.cc:194 src/ui-preferences.cc:635 msgid "No mailbox selected" msgstr "No hay ningn buzn seleccionado" #: src/ui-preferences.cc:535 msgid "_Start" msgstr "_Iniciar" #: src/ui-preferences.cc:541 ui/preferences.glade.h:76 msgid "_Stop" msgstr "_Detener" #: src/ui-preferences.cc:551 msgid "Browse for a sound" msgstr "Explorar en busca de un sonido" #: src/ui-preferences.cc:577 ui/preferences.glade.h:16 msgid "Browse for a mail application" msgstr "Explorar en busca de una aplicacin de correo" #: src/ui-preferences.cc:584 src/ui-preferences.cc:597 msgid "Browse for a new mail image" msgstr "Explorar en busca de una imagen para nuevo mensaje" #: src/ui-authentication.cc:88 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Por favor, introduzca su nombre de usuario y contrasea para el buzn '%s'" #: src/ui-certificate.cc:75 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "No se pudo verificar la identidad de %s como un sitio de confianza.\n" #: src/ui-certificate.cc:76 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "O el certificado del sitio est incompleto o est conectado a un sitio que se hace pasar por %s, posiblemente para obtener su contrasea" #: src/ui-properties.cc:170 ui/properties.glade.h:2 msgid "Browse for a location" msgstr "Explorar en busca de una localizacin" #: src/ui-properties.cc:176 msgid "Browse for a certificate" msgstr "Explorar en busca de un certificado" #: src/ui-popup.cc:155 msgid "From" msgstr "De" #: src/ui-popup.cc:163 msgid "Subject" msgstr "Asunto" #: src/ui-popup.cc:171 msgid "Date" msgstr "Fecha" #. Sender #: src/ui-popup.cc:459 msgid "From: " msgstr "De: " #. Subject #: src/ui-popup.cc:468 msgid "Subject: " msgstr "Asunto: " #. Date #: src/ui-popup.cc:477 msgid "Date: " msgstr "Fecha: " #: src/ui-popup.cc:537 src/ui-popup.cc:549 src/ui-popup.cc:558 #: src/ui-popup.cc:565 msgid "* error *" msgstr "* error *" #: src/ui-popup.cc:696 msgid "Error" msgstr "Error" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "About..." msgstr "Acerca de..." #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade.h:6 msgid "Mark email as read" msgstr "Marcar el mensaje como ledo" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Preferencias..." #: src/GNOME_gnubiffApplet.xml.h:4 ui/applet-gtk.glade.h:8 msgid "Start mail application" msgstr "Iniciar la aplicacin de correo" #: ui/applet-gtk.glade.h:1 msgid "00/00" msgstr "00/00" #: ui/applet-gtk.glade.h:2 msgid "(C) 2000-2004 Nicolas Rougier" msgstr "(C) 2000-2004 Nicolas Rougier" #: ui/applet-gtk.glade.h:3 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade.h:4 msgid "About" msgstr "Acerca de" #: ui/applet-gtk.glade.h:5 msgid "About gnubiff" msgstr "Acerca de gnubiff" #: ui/applet-gtk.glade.h:7 msgid "Ok" msgstr "Ok" #: ui/applet-gtk.glade.h:10 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade.h:11 msgid "tooltip" msgstr "Consejo" #: ui/applet-gnome.glade.h:1 msgid "00" msgstr "00" #: ui/applet-gnome.glade.h:2 msgid "Applet" msgstr "Applet" #: ui/preferences.glade.h:2 #, no-c-format msgid "%d" msgstr "%d" #: ui/preferences.glade.h:3 msgid "'Sender' field maximum size" msgstr "tamao mximo del campo 'Remitente'" #: ui/preferences.glade.h:4 msgid "'Subject' field maximum size" msgstr "tamao mximo del campo 'Asunto'" #: ui/preferences.glade.h:5 ui/properties.glade.h:1 #: ui/authentication.glade.h:1 msgid "*" msgstr "*" #: ui/preferences.glade.h:6 msgid "+0+0" msgstr "+0+0" #: ui/preferences.glade.h:7 msgid "-0+0" msgstr "-0+0" #: ui/preferences.glade.h:8 msgid "Biff window" msgstr "Ventana Biff" #: ui/preferences.glade.h:9 msgid "Font" msgstr "Fuente" #: ui/preferences.glade.h:10 msgid "General" msgstr "General" #: ui/preferences.glade.h:11 msgid "Mailboxes" msgstr "Buzones" #: ui/preferences.glade.h:12 msgid "Popup window" msgstr "ventana emergente" #: ui/preferences.glade.h:13 msgid "Popup" msgstr "Emergente" #: ui/preferences.glade.h:14 msgid "Sound" msgstr "Sonido" #: ui/preferences.glade.h:15 msgid "Advanced" msgstr "Avanzado" #: ui/preferences.glade.h:17 msgid "Browse for a soundfile" msgstr "Explorar en busca de un fichero de sonido" #: ui/preferences.glade.h:18 ui/properties.glade.h:4 msgid "Browse..." msgstr "Explorar..." #: ui/preferences.glade.h:19 msgid "Color:" msgstr "Color:" #: ui/preferences.glade.h:20 msgid "Credits" msgstr "Crditos" #: ui/preferences.glade.h:21 msgid "Display header window when new mail has arrived" msgstr "Mostrar ventana con la cabecera cuando llegue un mensaje" #: ui/preferences.glade.h:22 msgid "Display popup window _for" msgstr "Mostrar ventana emergente _durante" #: ui/preferences.glade.h:23 msgid "Display popup window for poptime seconds" msgstr "Mostrar ventana emergente durante unos segundos" #: ui/preferences.glade.h:24 msgid "Do not show any text when new mail" msgstr "No mostrar texto cuando llegue un nuevo mensaje" #: ui/preferences.glade.h:25 msgid "Geometry" msgstr "Geometra" #: ui/preferences.glade.h:26 msgid "Layout" msgstr "Disposicin" #: ui/preferences.glade.h:27 msgid "Let window manager place window" msgstr "Dejar que el gestor de ventanas coloque la ventana" #: ui/preferences.glade.h:28 msgid "Ma_ximum number of email to collect:" msgstr "Nmero m_ximo de mensajes a recoger:" #: ui/preferences.glade.h:29 msgid "Mail a_pplication:" msgstr "A_plicacin de correo" #: ui/preferences.glade.h:30 msgid "Mail application to launch via popup menu." msgstr "Aplicacin de correo a lanzar mediante men emergente." #: ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Buzones" #: ui/preferences.glade.h:32 msgid "Maximum number of displayed headers (you know, if you have a screen with a finite display area...)" msgstr "Nmero mximo de cabeceras a mostrar (ya se sabe, si se tiene una pantalla con un rea de trabajo finita...)" #: ui/preferences.glade.h:33 msgid "Maximum number of email to collect" msgstr "Nmero mximo de mensajes a recoger" #: ui/preferences.glade.h:34 msgid "Maximum number of email to display" msgstr "Nmero mximo de mensajes a mostrar" #: ui/preferences.glade.h:35 msgid "Maximum size of the sender field in popup window" msgstr "Tamao mximo del campo remitente en ventana emergente" #: ui/preferences.glade.h:36 msgid "Never send pass_word in clear" msgstr "No enviar nunca contrasea en claro" #: ui/preferences.glade.h:37 msgid "New mail:" msgstr "Nuevo mensaje:" #: ui/preferences.glade.h:38 msgid "No mail:" msgstr "No hay mensajes:" #: ui/preferences.glade.h:39 msgid "No sound when new mail has arrived" msgstr "No emitir sonido cuando llega un nuevo mensaje" #: ui/preferences.glade.h:40 msgid "Options" msgstr "Opciones" #: ui/preferences.glade.h:41 msgid "Pick a color for applet font" msgstr "Elegir un color para el texto del applet" #: ui/preferences.glade.h:42 msgid "Pick a color for popup font" msgstr "Elegir un color para el texto emergente" #: ui/preferences.glade.h:43 msgid "Pick a font for applet" msgstr "Elegir una fuente para el applet" #: ui/preferences.glade.h:44 msgid "Pick a font for popup" msgstr "Elegir una fuente para el texto emergente" #: ui/preferences.glade.h:45 msgid "Popup window with window manager decorations or not" msgstr "Ventana emergente con o sin decoracin del gestor de ventanas" #: ui/preferences.glade.h:46 msgid "Preferences" msgstr "Preferencias" #: ui/preferences.glade.h:47 msgid "" "Released under the GNU general public license\n" "(c) 2000-2004 Nicolas Rougier\n" "Special thanks to Robert Sowada and Roland Stigge for their help" msgstr "" "Publicado bajo la licencia pblica general GNU\n" "(c) 2000-2004 Nicolas Rougier\n" "Agradecimiento especial a Robert Sowada y Roland Stigge por su ayuda" #: ui/preferences.glade.h:50 msgid "Sound filename to play" msgstr "Fichero de sonido a reproducir" #: ui/preferences.glade.h:52 #, no-c-format msgid "Sound play command (%s is the soundfile, %v is the volume)" msgstr "Instruccin de sonido a ejecutar (%s es el fichero de sonido, %v es el volumen)" #: ui/preferences.glade.h:53 msgid "Sound when new mail has arrived" msgstr "Emitir sonido cuando llega un nuevo mensaje" #: ui/preferences.glade.h:54 msgid "System _beep" msgstr "_Pitido del sistema" #: ui/preferences.glade.h:55 msgid "System beep when new mail has arrived" msgstr "Emitir un pitido del sistema cuando llega un nuevo mensaje" #: ui/preferences.glade.h:56 msgid "Test" msgstr "Comprobar" #: ui/preferences.glade.h:57 msgid "Test sound" msgstr "Comprobar sonido" #: ui/preferences.glade.h:59 #, no-c-format msgid "Text to be displayed when new mail is present, %d is the number of mails. Valid XML must be entered, pango markup may be used." msgstr "Texto a mostrar cuando hay un mensaje nuevo, %d es el nmero de mensajes. Debe introducirse XML correcto, tambin se puede usar markup pango." #: ui/preferences.glade.h:61 #, no-c-format msgid "Text to be displayed when no mail is present, %d is the number of mails. Valid XML must be entered, pango markup may be used." msgstr "Texto a mostrar cuando no hay mensajes, %d es el nmero de mensajes. Debe introducirse XML correcto, tambin se puede usar pango markup." #: ui/preferences.glade.h:62 msgid "Type:" msgstr "Tipo:" #: ui/preferences.glade.h:63 msgid "Use decoration" msgstr "Usar decoracin" #: ui/preferences.glade.h:64 msgid "Use geometry" msgstr "Usar geometra" #: ui/preferences.glade.h:65 msgid "Use image" msgstr "Usar imagen" #: ui/preferences.glade.h:66 msgid "Use of no image implies no applet window for GTK version" msgstr "No usar imagen implica que no habr ventana de applet para la versin GTK" #: ui/preferences.glade.h:67 msgid "Use text" msgstr "Usar texto" #: ui/preferences.glade.h:68 msgid "_Biff:" msgstr "_Biff:" #: ui/preferences.glade.h:69 msgid "_Command:" msgstr "_Orden:" #: ui/preferences.glade.h:70 msgid "_Display date" msgstr "_Mostrar fecha" #: ui/preferences.glade.h:71 msgid "_Display popup window when new mail arrives" msgstr "_Mostrar ventana emergente cuando lleguen nuevos mensajes" #: ui/preferences.glade.h:72 msgid "_File:" msgstr "_Fichero:" #: ui/preferences.glade.h:73 msgid "_No sound" msgstr "S_in sonido" #: ui/preferences.glade.h:74 msgid "_Popup:" msgstr "_Emergente:" #: ui/preferences.glade.h:75 msgid "_Sound" msgstr "_Sonido" #: ui/preferences.glade.h:77 msgid "_Volume:" msgstr "_Volumen:" #: ui/preferences.glade.h:78 msgid "balsa" msgstr "balsa" #: ui/preferences.glade.h:79 msgid "characters" msgstr "caracteres" #: ui/preferences.glade.h:80 msgid "emacs" msgstr "emacs" #: ui/preferences.glade.h:81 msgid "evolution" msgstr "evolution" #: ui/preferences.glade.h:82 msgid "" "gnubiff has originally been written by Nicolas Rougier.\n" "Many people have further contributed to gnubiff by\n" " * reporting problems\n" " * suggesting various improvements\n" " * submitting actual code.\n" "\n" "Here is a list of these people in no particular order:\n" " - Robert Sowada\n" " - Roland Stigge\n" " - Jean-Yves Lefort\n" " - Calum Mackay\n" " - Paul Kuliniewicz\n" " - Erik Sittman\n" " - Dries Verachtert\n" " - Grzegorz Gotawski\n" " - Adam Benjamin\n" " - Theodore Tegos\n" " - Achim Settelmeier\n" " - Barry Skidmore\n" " - Jason Lowdermilk\n" " - Marc-jano Knopp\n" " - Suzan Wassman\n" " - Philippe Berger\n" " - Earl A. Killian\n" " - Christian Probst\n" " - Hans-Ulrich Schaefer\n" " - Josh Parsons\n" " - Michael Moellney\n" " - Dennis Bjorklund\n" " - Craig Agricola\n" " - Bernhard Valenti\n" " - Josh Berdine\n" " - Michel Leunen\n" " - Greg Fenton\n" " - Cai Yu\n" " - Chris Snell\n" " - Reid Rivenburgh\n" " - Neil Muller\n" " - Sascha Ludecke\n" " - Richard Torkar\n" " - Pete Phillips\n" " - Blaise Tarr\n" "\n" "And of course, there are also translators:\n" " - Roland Stigge, Robert Sowada (de)\n" " - Nicolas Lichtmaier (es)\n" " - Elros Cyriatan (nl)\n" " - Michel Robitaille (fr)\n" " - Eugen Hoanca (ro)\n" " - David Smeringe (sv)\n" "\n" "\n" "If you like this software, you can send me a post-card to:\n" " Nicolas Rougier\n" " Campus Scientifique, B.P. 239\n" " F-54506 Vandoeuvre-Les-Nancy Cedex\n" " FRANCE" msgstr "" "gnubiff ha sido escrito originalmente por Nicolas Rougier.\n" "Adems, muchas personas han contribuido a gnubiff\n" " * avisando de problemas\n" " * sugiriendo varias mejoras\n" " * enviando cdigo efectivo.\n" "\n" "Esta es una lista de esas personas sin ningn orden particular:\n" " - Robert Sowada\n" " - Roland Stigge\n" " - Jean-Yves Lefort\n" " - Calum Mackay\n" " - Paul Kuliniewicz\n" " - Erik Sittman\n" " - Dries Verachtert\n" " - Grzegorz Gotawski\n" " - Adam Benjamin\n" " - Theodore Tegos\n" " - Achim Settelmeier\n" " - Barry Skidmore\n" " - Jason Lowdermilk\n" " - Marc-jano Knopp\n" " - Suzan Wassman\n" " - Philippe Berger\n" " - Earl A. Killian\n" " - Christian Probst\n" " - Hans-Ulrich Schaefer\n" " - Josh Parsons\n" " - Michael Moellney\n" " - Dennis Bjorklund\n" " - Craig Agricola\n" " - Bernhard Valenti\n" " - Josh Berdine\n" " - Michel Leunen\n" " - Greg Fenton\n" " - Cai Yu\n" " - Chris Snell\n" " - Reid Rivenburgh\n" " - Neil Muller\n" " - Sascha Ludecke\n" " - Richard Torkar\n" " - Pete Phillips\n" " - Blaise Tarr\n" "\n" "Y por supuesto, tambin estn los traductores:\n" " - Roland Stigge, Robert Sowada (de)\n" " - Nicolas Lichtmaier (es)\n" " - Vctor Alonso (es)\n" " - Elros Cyriatan (nl)\n" " - Michel Robitaille (fr)\n" " - Eugen Hoanca (ro)\n" " - David Smeringe (sv)\n" "\n" "\n" "Si le gusta este software, puede enviarme una postal a:\n" " Nicolas Rougier\n" " Campus Scientifique, B.P. 239\n" " F-54506 Vandoeuvre-Les-Nancy Cedex\n" " FRANCE" #: ui/preferences.glade.h:139 msgid "kmail" msgstr "kmail" #: ui/preferences.glade.h:140 msgid "mozilla -mail" msgstr "mozilla -mail" #: ui/preferences.glade.h:141 msgid "netscape -mail" msgstr "netscape -mail" #: ui/preferences.glade.h:143 #, no-c-format msgid "play %s -v %v" msgstr "reproducir %s -v %v" #: ui/preferences.glade.h:144 msgid "pop3 and imap4 without ssl send passwords in clear. Checking this option prevents gnubiff from using them." msgstr "pop3 y imap4 sin ssl enva las contraseas en claro. Marcando esta opcin evita que gnubiff las use." #: ui/preferences.glade.h:145 ui/properties.glade.h:28 msgid "seconds" msgstr "segundos" #: ui/preferences.glade.h:146 msgid "thunderbird" msgstr "thunderbird" #: ui/preferences.glade.h:147 msgid "xemacs " msgstr "xemacs " #: ui/properties.glade.h:3 msgid "Browse for the certificate" msgstr "Explorar en busca del certificado" #: ui/properties.glade.h:5 msgid "Certificate:" msgstr "Certificado:" #: ui/properties.glade.h:6 msgid "Details" msgstr "Detalles" #: ui/properties.glade.h:7 msgid "Folder to check on the IMAP4 server" msgstr "Directorio donde buscar en el servidor IMAP4" #: ui/properties.glade.h:8 msgid "Folder:" msgstr "Directorio:" #: ui/properties.glade.h:9 msgid "Mailbox properties" msgstr "Propiedades del buzn" #: ui/properties.glade.h:10 msgid "N_ame:" msgstr "N_ombre" #: ui/properties.glade.h:11 msgid "Name of mailbox" msgstr "Nombre del buzn" #: ui/properties.glade.h:12 msgid "P_ort:" msgstr "P_uerto:" #: ui/properties.glade.h:13 msgid "Port to connect (usually POP3: 110, IMAP4: 143, POP3 over SSL: 995, IMAP4 over SSL: 993)" msgstr "Puerto con el que conectar (normalmente POP3: 110, IMAP: 143, POP3 a travs de SSL: 995, IMAP4 a travs de SSL: 993)" #: ui/properties.glade.h:14 msgid "Server certificate, leave blank if you do not want to use one" msgstr "Certificado de servidor, dejar en blanco si no desea utilizar uno" #: ui/properties.glade.h:15 msgid "The hostname or IP address of the server" msgstr "El nombre de mquina o direccin IP del servidor" #: ui/properties.glade.h:16 msgid "Time in seconds between each check" msgstr "Tiempo en segundos entre cada comprobacin" #: ui/properties.glade.h:17 msgid "Use SSL encryption" msgstr "Usar cifrado SSL" #: ui/properties.glade.h:18 ui/authentication.glade.h:3 msgid "Your password on the server" msgstr "Su contrasea en el servidor" #: ui/properties.glade.h:19 ui/authentication.glade.h:4 msgid "Your username on the server" msgstr "Su nombre de usuario en el servidor" #: ui/properties.glade.h:20 msgid "_Delay between checks:" msgstr "_Intervalo entre comprobaciones:" #: ui/properties.glade.h:21 msgid "_File or folder" msgstr "_Fichero o directorio" #: ui/properties.glade.h:22 msgid "_Hostname:" msgstr "_Nombre de mquina:" #: ui/properties.glade.h:23 msgid "_Location:" msgstr "_lugar:" #: ui/properties.glade.h:24 msgid "_Network" msgstr "_Red" #: ui/properties.glade.h:25 ui/authentication.glade.h:5 msgid "_Password:" msgstr "_Contrasea:" #: ui/properties.glade.h:26 ui/authentication.glade.h:6 msgid "_Username:" msgstr "_Nombre de usuario:" #: ui/properties.glade.h:27 msgid "file or folder name" msgstr "nombre de fichero o directorio" #: ui/authentication.glade.h:2 msgid "Authentication" msgstr "Autenticacin" #: ui/certificate.glade.h:1 msgid "Address" msgstr "Direccin" #: ui/certificate.glade.h:2 msgid "Issued To" msgstr "Enviado a" #: ui/certificate.glade.h:3 msgid "Accept" msgstr "Aceptar" #: ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "No se puede certificar el servidor" #: ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Detalles del certificado" #: ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nombre comn" #: ui/certificate.glade.h:7 msgid "Country" msgstr "Pas" #: ui/certificate.glade.h:8 msgid "Locality" msgstr "Localidad" #: ui/certificate.glade.h:9 msgid "Organization" msgstr "Organizacin" #: ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Unidad de organizacin" #: ui/certificate.glade.h:11 msgid "State or Province" msgstr "Estado o provincia" #: ui/popup.glade.h:1 msgid "Popup" msgstr "Emergente" #: ui/popup.glade.h:2 msgid "mail content" msgstr "contenido del correo" gnubiff-2.2.16/po/sr.po0000664000175000017500000010321512474424326011561 00000000000000# Serbian translation of gnubiff # Copyright (C) 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Мирослав Николић , 2013. msgid "" msgstr "" "Project-Id-Version: gnubiff-2.2.11\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2009-04-05 18:19+0200\n" "PO-Revision-Date: 2013-11-17 12:39+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Кодирање „%s“ ове поште не може бити декодирано]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Не могу да декодирам овај ред заглавља]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Не могу д претворим скупове знакова (из „%s“ у „utf-8“)]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Покреће гномово програмче са линије наредби" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Датотека подешавања за коришћење" #: src/gnubiff.cc:98 msgid "file" msgstr "датотека" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Прескаче поступак подешавања" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Покреће гнубифа без сучеља" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Поставља иконицу гнубифа у системску касету" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Исписује податке о издању и излази" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Опште опције линије наредби:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Опције за прочишћавање:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Нисам пронашао датотеку са подешавањима (%s)!" #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Учитао сам датотеку подешавања из новијег издања гнубифа „%s“." #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Учитао сам датотеку подешавања из старијег издања гнубифа „%s“." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Покушавам да претворим све опције." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Успешно сам претворио све опције." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Успешно сам претворио неке опције. Следеће опције морају бити псвежене ручно: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Не могу да отворим вашу датотеку подешавања (%s)" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Не могу да створим ИксМЛ обрађивача за датотеку подешавања" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Нисам пронашао ниједну одредницу сандучета у вашој датотеци подешавања (%s)" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Недозвољени запис параметра у датотеци подешавања" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Није наведен протокол за сандуче „%d“" #: src/mailbox.cc:143 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Не могу да направим нит: %s" #: src/mailbox.cc:315 #, c-format msgid "mailbox %d" msgstr "сандуче „%d“" #: src/mailbox.cc:640 msgid "" msgstr "<нема датума>" #: src/mailbox.cc:641 msgid "" msgstr "<нема пошиљаоца>" #: src/mailbox.cc:642 msgid "" msgstr "<нема наслова>" #: src/mailbox.cc:696 msgid "[Cannot parse content type header line]" msgstr "[Не могу да обрадим ред заглавља врсте садржаја]" #: src/mailbox.cc:718 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Не могу да обрадим ред заглавља кодирања преноса садржаја]" #: src/mailbox.cc:759 msgid "[Malformed multipart message]" msgstr "[Лоша порука из више делова]" #: src/mailbox.cc:767 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Не могу да пронађем почетак првог дела у поруци из више делова]" #: src/mailbox.cc:813 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Ова порука има неподржану врсту садржаја: „%s/%s“]" #: src/mailbox.cc:1215 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Грешка приликом превођења регуларног израза.\n" "Регуларни израз: %s\n" "Грешка: %s" #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Не могу да поређам пошту по „%s“" #: src/socket.cc:123 src/socket.cc:152 src/socket.cc:180 src/socket.cc:189 #: src/socket.cc:198 src/socket.cc:211 src/socket.cc:241 src/socket.cc:250 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Не могу да се повежем на „%s“ на прикључнику %d" #: src/socket.cc:226 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Нисам успео да учитам уверење (%s) за %s" #: src/socket.cc:263 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Не могу да препознам удаљеног домаћина („%sд на прикључнику %d)" #: src/socket.cc:348 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Не могу да пишем на „%s“ на прикључнику %d" #: src/socket.cc:419 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Не могу да читам са „%s“ на прикључнику %d" #: src/socket.cc:442 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Не могу да подесим време истека за читање на прикључници: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Не могу да отворим „%s“." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Ова порука нема део са подржаном врстом садржаја]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Не могу да изаберем фасциклу „%s“ на домаћину %s" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Не могу да добавим потврду од „%s“ на прикључнику %d" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Сервер не шаље неозначени „%s“ одговор или потврду" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Сервер не шаље неозначен одговор „%s“" #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Сервер затвара везу одмах: %s" #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Унутрашњи неуспех сервера или непозната грешка: %s" #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Упозорење са сервера: %s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Не могу да отворим директоријум нове поште (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Празна лозинка" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Порука грешке са ПОП3 сервера:%s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Нисам добио позитиван одговор са ПОП3 сервера" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Ваш поп сервер не изгледа да прихвата апоп протокол (није достављена ознака времена)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Проблем са шифрером који треба да буде откривен у време подешавања" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Непозната опција „%s“" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Не могу да подесим опцију „%s“ на „%s“" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Не могу да пронађем наведени елемент („%s“) унутар иксмл структуре („%s“)" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "нема поште" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Не могу да изградим сучеље.\n" "\n" "Назив: %s\n" "Путања: %s\n" "\n" "Уверите се да је пакет исправно инсталиран." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "„GUI_connect“ захтева радни гмодул" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Не могу да пронађем руковаоца сигнала „%s“." #: src/ui-applet.cc:217 msgid " unknown" msgstr " непознато" #: src/ui-applet.cc:222 msgid " error" msgstr " грешка" #: src/ui-applet.cc:231 msgid " checking..." msgstr " проверавам..." #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Сандуче" #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Врста" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Стање" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Безбедност" #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Није изабрано ниједно сандуче" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Опције" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Вредност" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Покрени" #: src/ui-preferences.cc:615 ui/preferences.glade:2176 msgid "_Stop" msgstr "_Заустави" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Потражи слику нове поште" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Унесите ваше корисничко име и лозинку за сандуче „%s“" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Не могу да потврдим идентитет „%s“ као сајт од поверења.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Или је уверење сајта непотпуно или сте повезани на сајт који се претвара да је „%s“, вероватно да сазна вашу лозинку" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Сам препознај" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Датотека или фасцикла" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Корисник/лозинка" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Шифровани корисник/лозинка (апоп)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "ССЛ са уверењем" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Потражите датотеку или фасциклу" #: src/ui-properties.cc:323 ui/properties.glade:616 msgid "Browse for a certificate file" msgstr "Потражите датотеку уверења" #: src/ui-popup.cc:195 msgid "From" msgstr "Шаље" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Тема" #: src/ui-popup.cc:207 msgid "Date" msgstr "Датум" #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Управо сте пронашли непознату унутрашњу грешку. Пошаљите опширан извештај о грешци на „gnubiff-bugs@lists.sourceforge.net“.\n" "\n" "Додатни подаци:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Подаци" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade:79 msgid "Mark mailboxes read" msgstr "Означи сандучиће прочитаним" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Поставке..." #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Изврши наредбу" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Програм за обавештавање о пошти" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade:7 msgid "gnubiff" msgstr "гнубиф" #: ui/applet-gtk.glade:6 msgid "tooltip" msgstr "облачић" #: ui/applet-gtk.glade:64 msgid "Start command" msgstr "Наредба покретања" #: ui/applet-gtk.glade:94 msgid "About" msgstr "О програму" #: ui/applet-gtk.glade:114 msgid "_Quit" msgstr "_Изађи" #: ui/applet-gtk.glade:131 msgid "Gnubiff is a mail notification program." msgstr "Гнубиф је програм за обавештавање о пошти." #: ui/applet-gtk.glade:133 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Гнубиф је део Гнуовог пројекта.\n" "Издат је под покровитељством Гнуа.\n" "\n" "Овај програм је слободан софтвер; можете га прослеђивати и/или мењати под условима Гнуове опште јавне лиценце коју је објавила Задужбина слободног софтвера; издања 3 лиценце или (по вашем избору) било којег новијег издањa .\n" "\n" "Овај програм се расподељује у нади да ће бити користан, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ; чак и без примењене гаранције ТРЖИШНЕ ВРЕДНОСТИ или ПРИЛАГОЂЕНОСТИ ОДРЕЂЕНОЈ НАМЕНИ. Погледајте Гнуову општу јавну лиценцу за више појединости.\n" "\n" "Требали сте да примите примерак Гнуове опште јавне лиценце уз овај програм. Ако нисте, погледајте „http://www.gnu.org/licenses/“.\n" "\n" "За изузетак од Гнуове опште јавне лиценце за расподелу гнубифа повезан са ОпенССЛ библиотеком погледајте датотеку „README“." #: ui/preferences.glade:6 msgid "gnubiff preferences" msgstr "Поставке гнубифа" #: ui/preferences.glade:49 msgid "_Restrict collected mail to" msgstr "_Ограничи прикупљену пошту на" #: ui/preferences.glade:76 msgid "mail(s)" msgstr "пошта" #: ui/preferences.glade:107 msgid "The command to run when the icon is double-clicked" msgstr "Наредба која ће бити покренута на два клика на иконицу" #: ui/preferences.glade:122 msgid "The command to run when new mail arrives" msgstr "Наредба за покретање када стигне нова пошта" #: ui/preferences.glade:137 msgid "When _new mail:" msgstr "Када _нова пошта:" #: ui/preferences.glade:199 msgid "Commands" msgstr "Наредбе" #: ui/preferences.glade:219 msgid "Mailboxes" msgstr "Сандучићи" #: ui/preferences.glade:236 msgid "General" msgstr "Опште" #: ui/preferences.glade:249 msgid "When _double-clicked:" msgstr "На _двоклик:" #: ui/preferences.glade:322 msgid "Mailboxes" msgstr "Сандучићи" #: ui/preferences.glade:367 ui/preferences.glade:751 msgid "Whether to use window manager decoration" msgstr "Да ли да користи украс управника прозора" #: ui/preferences.glade:368 ui/preferences.glade:752 msgid "Use _decoration" msgstr "Користи _украс" #: ui/preferences.glade:386 ui/preferences.glade:770 msgid "The font to use to display information" msgstr "Словни лик за приказивање података" #: ui/preferences.glade:403 ui/preferences.glade:860 msgid "_Font:" msgstr "_Словни лик:" #: ui/preferences.glade:424 msgid "When no mail" msgstr "Када нема поште" #: ui/preferences.glade:445 msgid "When new mail" msgstr "Када нова пошта" #: ui/preferences.glade:462 ui/preferences.glade:807 msgid "Layout" msgstr "Изглед" #: ui/preferences.glade:475 msgid "Whether to display an image" msgstr "Да ли да прикаже слику" #: ui/preferences.glade:476 msgid "Show i_mage:" msgstr "Прикажи с_лику:" #: ui/preferences.glade:495 ui/preferences.glade:535 msgid "Whether to display a text" msgstr "Да ли да прикаже текст" #: ui/preferences.glade:496 msgid "Show t_ext:" msgstr "Прикажи т_екст:" #: ui/preferences.glade:515 msgid "Whether to show an image" msgstr "Да ли да прикаже слику" #: ui/preferences.glade:516 msgid "Show _image:" msgstr "Прикажи _слику:" #: ui/preferences.glade:536 msgid "Show _text:" msgstr "Прикажи _текст:" #: ui/preferences.glade:555 ui/preferences.glade:840 msgid "Whether to use geometry" msgstr "Да ли да користи геометрију" #: ui/preferences.glade:556 ui/preferences.glade:841 msgid "Use _geometry:" msgstr "Користи _геометрију:" #: ui/preferences.glade:575 msgid "Applet geometry" msgstr "Геометрија програмчета" #: ui/preferences.glade:590 ui/preferences.glade:639 msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Текст за приказ (%d и %D је број нових порука, %d је попуњен нулом). Може бити коришћено Панго обележавање." #: ui/preferences.glade:605 ui/preferences.glade:654 msgid "Browse for an image file" msgstr "Потражите датотеку слике" #: ui/preferences.glade:606 msgid "B_rowse..." msgstr "Раз_гледај..." #: ui/preferences.glade:624 ui/preferences.glade:673 msgid "Image filename" msgstr "Назив датотеке слике" #: ui/preferences.glade:655 ui/properties.glade:295 msgid "_Browse..." msgstr "_Изабери..." #: ui/preferences.glade:694 msgid "Applet or Biff" msgstr "Програмче или Биф" #: ui/preferences.glade:791 msgid "Headers" msgstr "Заглавља" #: ui/preferences.glade:820 msgid "Whether to display the popup window" msgstr "Да ли да прикаже искачући прозор" #: ui/preferences.glade:821 msgid "_Display for" msgstr "_Прикажи" #: ui/preferences.glade:877 msgid "header(s)" msgstr "заглавља" #: ui/preferences.glade:892 msgid "Maximum number of headers to display" msgstr "Највећи број заглавља за приказивање" #: ui/preferences.glade:909 msgid "Whether to restrict number of displayed headers" msgstr "Да ли да ограничи број приказаних заглавља" #: ui/preferences.glade:910 msgid "_Restrict number to" msgstr "_Ограничи на" #: ui/preferences.glade:929 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[највећа величина пошиљаоца]:[највећа величина теме]:[највећа величина датума]" #: ui/preferences.glade:944 msgid "Whether to use format for header" msgstr "Да ли да користи запис за заглавље" #: ui/preferences.glade:945 msgid "_Format:" msgstr "_Запис:" #: ui/preferences.glade:964 msgid "Popup geometry" msgstr "Геометрија искакања" #: ui/preferences.glade:979 msgid "Time to display popup window" msgstr "Време за приказивање искачућег прозора" #: ui/preferences.glade:996 msgid "second(s)" msgstr "секунде" #: ui/preferences.glade:1016 ui/popup.glade:7 msgid "Popup" msgstr "Искакање" #: ui/preferences.glade:1062 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "Прозорче за уређивање за све опције које гнубиф користи изнутра овде могу бити укључене. Тако да је могуће изменити вредност опција за које нису обезбеђени елементи графичког сучеља. Кратак опис за сваку опцију је обезбеђен.\n" "Упозорење: Мењање ових опција може да доведе до тога да гнубиф не делује исправно или да резултира у безбедносним проблемима." #: ui/preferences.glade:1080 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Да ли да покаже језичак напредног. Напомена: Искључивање ове опције може бити повраћено само ручним уређивањем датотеке подешавања!" #: ui/preferences.glade:1081 msgid "_Show expert tab" msgstr "_Прикажи језичак напредног" #: ui/preferences.glade:1101 msgid "Whether options can be edited in expert mode" msgstr "Да ли опције могу бити уређиване у напредном режиму" #: ui/preferences.glade:1102 msgid "_Edit options in expert mode" msgstr "_Уреди опције у напредном режиму" #: ui/preferences.glade:1121 msgid "Expert editing mode" msgstr "Режим напредног уређивања" #: ui/preferences.glade:1155 msgid "List all options." msgstr "Списак свих могућности." #: ui/preferences.glade:1171 msgid "String to be searched for." msgstr "Које ће ниске бити тражене." #: ui/preferences.glade:1183 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Потражи ове (приказане) опције које садрже ниску у уносу текста." #: ui/preferences.glade:1212 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Списак опција, њихових врста и текућих вредности. Да уредите опцију кликните два пута на њену вредност." #: ui/preferences.glade:1257 msgid "Expert" msgstr "Напредно" #: ui/preferences.glade:1297 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" " Гнубиф је део пројекта Гну.\n" " Издат је под Гнуовим покровитељством." #: ui/preferences.glade:1363 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Програмерима можете да се обратите путем gnubiff-devel@lists.sourceforge.net.\n" "Грешке можете да пријавите на gnubiff-bugs@lists.sourceforge.net." #: ui/preferences.glade:1432 msgid "Developers" msgstr "Програмери" #: ui/preferences.glade:1511 msgid "Maintainers" msgstr "Одржаваоци" #: ui/preferences.glade:1530 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Овде је списак људи који су преводили гнубиф на разне језике (преводиоци претходних издања су означени звездицом):" #: ui/preferences.glade:2048 msgid "Translators" msgstr "Преводиоци" #: ui/preferences.glade:2065 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Много људи је допринело гнубифу\n" " — извештавањем о проблемима\n" " — предлажући разна унапређења\n" " — слањем тренутног кода\n" "Ово је списак тих људи:" #: ui/preferences.glade:2108 msgid "Contributors" msgstr "Доприносиоци" #: ui/preferences.glade:2130 msgid "Credits" msgstr "Заслуге" #: ui/preferences.glade:2219 msgid "Set to default value" msgstr "Постави на основну вредност" #: ui/preferences.glade:2234 msgid "Toggle option" msgstr "Пребаци опцију" #: ui/preferences.glade:2249 msgid "Edit option" msgstr "Уреди опцију" #: ui/properties.glade:7 msgid "Mailbox properties" msgstr "Својства сандучета" #: ui/properties.glade:52 msgid "_Name:" msgstr "_Назив:" #: ui/properties.glade:77 msgid "A_ddress:" msgstr "_Адреса:" #: ui/properties.glade:102 msgid "Name of the mailbox" msgstr "Назив сандучета" #: ui/properties.glade:124 msgid "_Type:" msgstr "_Врста:" #: ui/properties.glade:174 ui/authentication.glade:52 msgid "_Username:" msgstr "_Корисничко име:" #: ui/properties.glade:199 msgid "Your username on the mail server" msgstr "Ваше корисничко име на серверу поште" #: ui/properties.glade:221 ui/authentication.glade:77 msgid "_Password:" msgstr "_Лозинка:" #: ui/properties.glade:246 msgid "Your password on the mail server" msgstr "Ваша лозинка на серверу поште" #: ui/properties.glade:274 msgid "file or folder or hostname" msgstr "датотека или фасцикла или назив домаћина" #: ui/properties.glade:367 msgid "Connection:" msgstr "Веза:" #: ui/properties.glade:391 msgid "Connection port to connect to server" msgstr "Прикључник везе за повезивање на сервер" #: ui/properties.glade:414 msgid "Standard connection port" msgstr "Уобичајени прикључник везе" #: ui/properties.glade:416 msgid "stan_dard" msgstr "_уобичајени" #: ui/properties.glade:437 msgid "Other connection port" msgstr "Други прикључник везе" #: ui/properties.glade:439 msgid "_other" msgstr "_други" #: ui/properties.glade:540 msgid "Aut_hentication:" msgstr "Потврђивање _идентитета:" #: ui/properties.glade:594 msgid "Certificate filename" msgstr "Назив датотеке уверења" #: ui/properties.glade:618 msgid "Bro_wse..." msgstr "_Разгледај..." #: ui/properties.glade:637 msgid "Cer_tificate:" msgstr "_Уверење:" #: ui/properties.glade:692 msgid "minutes" msgstr "минута" #: ui/properties.glade:716 msgid "seconds" msgstr "секунде" #: ui/properties.glade:739 ui/properties.glade:765 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Износ времена за чекање између провера поште или између покушаја повезивања након изгубљене везе" #: ui/properties.glade:791 msgid "Dela_y:" msgstr "_Застој:" #: ui/properties.glade:846 msgid "_Mailbox:" msgstr "_Сандуче:" #: ui/properties.glade:871 msgid "Mailbox folder" msgstr "Фасцикла сандучета" #: ui/properties.glade:893 msgid "Other mailbox folder" msgstr "Друга фасцикла сандучета" #: ui/properties.glade:895 msgid "othe_r" msgstr "дру_га" #: ui/properties.glade:916 msgid "Standard mailbox folder" msgstr "Уобичајена фасцикла сандучета" #: ui/properties.glade:918 msgid "stand_ard" msgstr "уо_бичајена" #: ui/properties.glade:951 msgid "_Details" msgstr "_Појединости" #: ui/authentication.glade:7 msgid "Authentication" msgstr "Потврђивање идентитета" #: ui/authentication.glade:102 msgid "Your username on the server" msgstr "Ваше корисничко име на серверу" #: ui/authentication.glade:124 msgid "Your password on the server" msgstr "Ваша лозинка на серверу" #: ui/certificate.glade:7 msgid "Cannot certify server" msgstr "Не могу да потврдим сервер" #: ui/certificate.glade:130 msgid "Common Name" msgstr "Заједничко име" #: ui/certificate.glade:154 msgid "Organization" msgstr "Удружење" #: ui/certificate.glade:178 msgid "Organization Unit" msgstr "Јединица удружења" #: ui/certificate.glade:275 msgid "Issued To" msgstr "Издато коме" #: ui/certificate.glade:394 msgid "Address" msgstr "Адреса" #: ui/certificate.glade:418 msgid "Country" msgstr "Држава" #: ui/certificate.glade:442 msgid "Locality" msgstr "Место" #: ui/certificate.glade:540 msgid "State or Province" msgstr "Република или покрајина" #: ui/certificate.glade:570 msgid "Certificate details" msgstr "Појединости о уверењу" #: ui/certificate.glade:668 msgid "Accept" msgstr "Прихвати" #: ui/popup.glade:61 msgid "mail content" msgstr "садржај поште" #: ui/popup.glade:116 msgid "From" msgstr "Шаље" #: ui/popup.glade:140 msgid "Subject" msgstr "Тема" #: ui/popup.glade:164 msgid "Date" msgstr "Датум" gnubiff-2.2.16/po/Makefile.in.in0000644000175000017500000001604612474424634013254 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/po/ro.po0000644000175000017500000012256012474422124011551 00000000000000# Mesajele n limba romn pentru pachetul gbiff. # Copyright (C) 2003 Free Software Foundation, Inc. # Acest fiier este distribuit sub aceeai licen ca pachetul gbiff. # Eugen Hoanca , 2003. # msgid "" msgstr "" "Project-Id-Version: gbiff 0.3.0\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2003-09-14 12:53+0300\n" "Last-Translator: Eugen Hoanca \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "" #: ../src/gnubiff.cc:98 #, fuzzy msgid "Configuration file to use" msgstr "fiierul de configurare gbiff2 ce va fi folosit" #: ../src/gnubiff.cc:98 msgid "file" msgstr "fiier" #: ../src/gnubiff.cc:100 #, fuzzy msgid "Skip the configuration process" msgstr "omitere a procesului de configurare" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "" #: ../src/biff.cc:123 #, fuzzy, c-format msgid "Configuration file (%s) not found!" msgstr "fiierul de configurare gbiff2 ce va fi folosit" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "" #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "" #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "" #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "" #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" #: ../src/biff.cc:804 #, fuzzy, c-format msgid "Cannot open your configuration file (%s)" msgstr "Nu se poate ncrca fiierul de configurare (%s).\n" #: ../src/biff.cc:819 #, fuzzy msgid "Cannot create XML parser for config file" msgstr "Nu se poate ncrca fiierul de configurare (%s).\n" #: ../src/biff.cc:836 #, fuzzy, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Nu se poate ncrca fiierul de configurare (%s).\n" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "" #: ../src/mailbox.cc:319 #, fuzzy, c-format msgid "mailbox %d" msgstr "Nici un mail" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 #, fuzzy msgid "" msgstr "Subiect" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "" #: ../src/socket.cc:218 #, fuzzy, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "Nu m pot conecta la server.\n" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "" #: ../src/file.cc:97 #, fuzzy, c-format msgid "Cannot open %s." msgstr "Nu se poate deschide maildir (%s).\n" #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "" #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "" #: ../src/maildir.cc:81 #, fuzzy, c-format msgid "Cannot open new mail directory (%s)" msgstr "Nu se poate deschide maildir (%s).\n" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "" #: ../src/options.cc:720 ../src/gui.cc:273 #, fuzzy, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Nu am putut gsi widgetul specificat (\"%s\") n structura de tree xml" #: ../src/gnubiff_options.cc:140 #, fuzzy msgid "no mail" msgstr "Nici un mail" #: ../src/gui.cc:195 #, fuzzy, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "gbiff2 nu a putut ncrca fiierul su de interfa cu utilizatorul (%s).\n" "V rugm verificai dac gbiff2 a fost instalat corect." #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Nu am putut gsi semnalul '%s'." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr "" #: ../src/ui-applet.cc:222 msgid " error" msgstr "" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr "" #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Mailbox" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "" #: ../src/ui-preferences.cc:355 #, fuzzy msgid "Option" msgstr "Opiuni" #: ../src/ui-preferences.cc:373 #, fuzzy msgid "Value" msgstr "Volum:" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 #, fuzzy msgid "Browse for a new mail image" msgstr "Rsfoire(browse) dup fiier" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "" #: ../src/ui-properties.cc:124 #, fuzzy msgid "File or Folder" msgstr "Mailbox" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "" #: ../src/ui-properties.cc:158 #, fuzzy msgid "SSL with certificate" msgstr "Rsfoire(browse) dup fiier" #: ../src/ui-properties.cc:317 #, fuzzy msgid "Browse for a file or folder" msgstr "Rsfoire(browse) dup fiier" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 #, fuzzy msgid "Browse for a certificate file" msgstr "Rsfoire(browse) dup fiier" #: ../src/ui-popup.cc:195 msgid "From" msgstr "De la" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Subiect" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Data" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 #, fuzzy msgid "Mark mailboxes read" msgstr "Mailbox" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "" #: ../src/GNOME_gnubiffApplet.xml.h:4 #, fuzzy msgid "Run command" msgstr "Cnt" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 #, fuzzy msgid "gnubiff" msgstr "gbiff2" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "" #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" #: ../ui/applet-gtk.glade.h:15 #, fuzzy msgid "Start command" msgstr "Cnt" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "" #: ../ui/preferences.glade.h:1 #, fuzzy msgid "Commands" msgstr "Mailbox" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "" #: ../ui/preferences.glade.h:3 #, fuzzy msgid "General" msgstr "Mailbox" #: ../ui/preferences.glade.h:4 #, fuzzy msgid "Headers" msgstr "Mailbox" #: ../ui/preferences.glade.h:5 #, fuzzy msgid "Layout" msgstr "Aplicaie mail " #: ../ui/preferences.glade.h:6 #, fuzzy msgid "Mailboxes" msgstr "Mailbox" #: ../ui/preferences.glade.h:7 #, fuzzy msgid "When new mail" msgstr "Mailbox" #: ../ui/preferences.glade.h:8 #, fuzzy msgid "When no mail" msgstr "Mailbox" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" #: ../ui/preferences.glade.h:19 #, fuzzy msgid "Applet geometry" msgstr "Geometrie " #: ../ui/preferences.glade.h:20 #, fuzzy msgid "Applet or Biff" msgstr "Applet" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "" #: ../ui/preferences.glade.h:22 #, fuzzy msgid "Browse for an image file" msgstr "Rsfoire(browse) dup fiier" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Credite" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "" #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" #: ../ui/preferences.glade.h:31 #, fuzzy msgid "Mailboxes" msgstr "Mailbox" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "" #: ../ui/preferences.glade.h:33 #, fuzzy msgid "Maximum number of headers to display" msgstr "" "Titlul mailboxului care va fi afiat n panelul gnome i fereastra de popup" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Popup" #: ../ui/preferences.glade.h:35 #, fuzzy msgid "Popup geometry" msgstr "Geometrie " #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "" #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "" #: ../ui/preferences.glade.h:38 #, fuzzy msgid "Show _image:" msgstr "Afieaz titlu" #: ../ui/preferences.glade.h:39 #, fuzzy msgid "Show _text:" msgstr "Afieaz titlu" #: ../ui/preferences.glade.h:40 #, fuzzy msgid "Show i_mage:" msgstr "Afieaz titlu" #: ../ui/preferences.glade.h:41 #, fuzzy msgid "Show t_ext:" msgstr "Afieaz titlu" #: ../ui/preferences.glade.h:42 #, fuzzy msgid "String to be searched for." msgstr "Font pentru corpul popup-ului" #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" #: ../ui/preferences.glade.h:45 #, fuzzy msgid "The command to run when new mail arrives" msgstr "Sunet de cntat cnd a venit mail nou" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "" #: ../ui/preferences.glade.h:51 #, fuzzy msgid "Time to display popup window" msgstr "Durat de afiare a popup-ului (secunde):" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "" #: ../ui/preferences.glade.h:55 #, fuzzy msgid "Use _geometry:" msgstr "Geometrie " #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "" #: ../ui/preferences.glade.h:57 #, fuzzy msgid "When _new mail:" msgstr "Sunete cnd vine mail nou" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "" #: ../ui/preferences.glade.h:59 #, fuzzy msgid "Whether to display a text" msgstr "Afieaz fereastra de popup pentru POPTIME secunde" #: ../ui/preferences.glade.h:60 #, fuzzy msgid "Whether to display an image" msgstr "Afieaz fereastra de popup pentru POPTIME secunde" #: ../ui/preferences.glade.h:61 #, fuzzy msgid "Whether to display the popup window" msgstr "Afieaz fereastra de popup pentru POPTIME secunde" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "" #: ../ui/preferences.glade.h:63 #, fuzzy msgid "Whether to show an image" msgstr "Afieaz fereastra de popup pentru POPTIME secunde" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" #: ../ui/preferences.glade.h:65 #, fuzzy msgid "Whether to use format for header" msgstr "Geometrie " #: ../ui/preferences.glade.h:66 #, fuzzy msgid "Whether to use geometry" msgstr "Geometrie " #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "" #: ../ui/preferences.glade.h:70 #, fuzzy msgid "_Display for" msgstr "Afieaz data n headere sau nu" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "" #: ../ui/preferences.glade.h:72 #, fuzzy msgid "_Font:" msgstr "Fonturi " #: ../ui/preferences.glade.h:73 #, fuzzy msgid "_Format:" msgstr "De la" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "" #: ../ui/preferences.glade.h:80 #, fuzzy msgid "mail(s)" msgstr "Nici un mail" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "" #: ../ui/properties.glade.h:1 #, fuzzy msgid "_Details" msgstr "Mailbox" #: ../ui/properties.glade.h:2 #, fuzzy msgid "A_ddress:" msgstr "Mailbox" #: ../ui/properties.glade.h:3 #, fuzzy msgid "Aut_hentication:" msgstr "Local:" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "" #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "" #: ../ui/properties.glade.h:9 #, fuzzy msgid "Connection:" msgstr "Local:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "" #: ../ui/properties.glade.h:11 #, fuzzy msgid "Mailbox folder" msgstr "Mailbox" #: ../ui/properties.glade.h:12 #, fuzzy msgid "Mailbox properties" msgstr "Configuraie" #: ../ui/properties.glade.h:13 #, fuzzy msgid "Name of the mailbox" msgstr "Mail nou" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "" #: ../ui/properties.glade.h:15 #, fuzzy msgid "Other mailbox folder" msgstr "Nici un mail" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "" #: ../ui/properties.glade.h:22 #, fuzzy msgid "_Mailbox:" msgstr "Mailbox" #: ../ui/properties.glade.h:23 #, fuzzy msgid "_Name:" msgstr "Utilizator:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 #, fuzzy msgid "_Password:" msgstr "Parol:" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 #, fuzzy msgid "_Username:" msgstr "Utilizator:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "" #: ../ui/properties.glade.h:28 #, fuzzy msgid "file or folder or hostname" msgstr "Mailbox" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "" #: ../ui/certificate.glade.h:1 #, fuzzy msgid "Address" msgstr "Mailbox" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "" #: ../ui/certificate.glade.h:4 #, fuzzy msgid "Cannot certify server" msgstr "Nu pot identifica utilizatorul: %s\n" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "" #: ../ui/popup.glade.h:1 #, fuzzy msgid "Date" msgstr "Aplicaie mail " #: ../ui/popup.glade.h:2 #, fuzzy msgid "From" msgstr "Adres / nume fiier:" #: ../ui/popup.glade.h:3 #, fuzzy msgid "Subject" msgstr "Adres / nume fiier:" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "" #, fuzzy #~ msgid "New mail" #~ msgstr "Mail nou" #, fuzzy #~ msgid "No mail" #~ msgstr "Nici un mail" #~ msgid "Applet" #~ msgstr "Applet" #, fuzzy #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Nu se poate deschide maildir (%s).\n" #, fuzzy #~ msgid "Unknown error while parsing config file" #~ msgstr "Probleme n nchiderea fiierului de configurare (%s).\n" #, fuzzy #~ msgid "Whether the window shall appear in pagers" #~ msgstr "Afieaz fereastra de popup pentru POPTIME secunde" #, fuzzy #~ msgid "_Be sticky" #~ msgstr "Persistent(Sticky)" #, fuzzy #~ msgid "date" #~ msgstr "Data" #, fuzzy #~ msgid "from" #~ msgstr "De la" #, fuzzy #~ msgid "subject" #~ msgstr "Subiect" #~ msgid "*" #~ msgstr "*" #, fuzzy #~ msgid "" #~ "gnubiff has originally been written by Nicolas Rougier.\n" #~ "Many people have further contributed to gnubiff by\n" #~ " * reporting problems\n" #~ " * suggesting various improvements\n" #~ " * submitting actual code.\n" #~ "\n" #~ "Here is a list of these people in no particular order:\n" #~ " - Robert Sowada\n" #~ " - Roland Stigge\n" #~ " - Jean-Yves Lefort\n" #~ " - Calum Mackay\n" #~ " - Paul Kuliniewicz\n" #~ " - Erik Sittman\n" #~ " - Dries Verachtert\n" #~ " - Grzegorz Gotawski\n" #~ " - Adam Benjamin\n" #~ " - Theodore Tegos\n" #~ " - Achim Settelmeier\n" #~ " - Barry Skidmore\n" #~ " - Jason Lowdermilk\n" #~ " - Marc-jano Knopp\n" #~ " - Suzan Wassman\n" #~ " - Philippe Berger\n" #~ " - Earl A. Killian\n" #~ " - Christian Probst\n" #~ " - Hans-Ulrich Schaefer\n" #~ " - Josh Parsons\n" #~ " - Michael Moellney\n" #~ " - Dennis Bjorklund\n" #~ " - Craig Agricola\n" #~ " - Bernhard Valenti\n" #~ " - Josh Berdine\n" #~ " - Michel Leunen\n" #~ " - Greg Fenton\n" #~ " - Cai Yu\n" #~ " - Chris Snell\n" #~ " - Reid Rivenburgh\n" #~ " - Neil Muller\n" #~ " - Sascha Ludecke\n" #~ " - Richard Torkar\n" #~ " - Pete Phillips\n" #~ " - Blaise Tarr\n" #~ "\n" #~ "And of course, there are also translators:\n" #~ " - Roland Stigge, Robert Sowada (de)\n" #~ " - Nicolas Lichtmaier (es)\n" #~ " - Elros Cyriatan (nl)\n" #~ " - Michel Robitaille (fr)\n" #~ " - Eugen Hoanca (ro)\n" #~ " - David Smeringe (sv)\n" #~ msgstr "" #~ "gbiff a fost original scris de Nicolas Rougier.\n" #~ "Muli oameni au avut contribuie ulterioar la gbiff prin\n" #~ " raportarea problemelor\n" #~ " sugerarea mbuntirilor variate\n" #~ " trimiterea codului actual.\n" #~ "\n" #~ "Urmeaz o list cu aceti oameni fr a fi ntr-o anumit ordine:\n" #~ " - Jason Lowdermilk\n" #~ " - Marc-jano Knopp\n" #~ " - Suzan Wassman\n" #~ " - Philippe Berger\n" #~ " - Earl A. Killian\n" #~ " - Chistian Probst\n" #~ " - Hans-Ulrich Schaefer\n" #~ " - Josh Parsons\n" #~ " - Michael Moellney\n" #~ " - Dennis Bjorklund\n" #~ " - Craig Agricola\n" #~ " - Bernhard Valenti\n" #~ " - Josh Berdine\n" #~ " - Michel Leunen\n" #~ " - Greg Fenton\n" #~ " - Cai Yu\n" #~ " - Chris Snell\n" #~ " - Reid Rivenburgh\n" #~ " - Neil Muller\n" #~ " - Sascha Ludecke\n" #~ " - Richard Torkar\n" #~ " - Pete Phillips\n" #~ " - Blaise Tarr\n" #, fuzzy #~ msgid " and -n to skip configuration process\n" #~ msgstr "omitere a procesului de configurare" #, fuzzy #~ msgid "Date" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "From" #~ msgstr "Mailbox" #, fuzzy #~ msgid "Subject" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "From: " #~ msgstr "De la" #, fuzzy #~ msgid "Subject: " #~ msgstr "Subiect" #, fuzzy #~ msgid "Date: " #~ msgstr "Data" #, fuzzy #~ msgid "Mailbox format is unknown" #~ msgstr "Format mailbox / protocol" #, fuzzy #~ msgid "Start mail application" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "Browse for a location" #~ msgstr "Rsfoire(browse) dup fiier" #, fuzzy #~ msgid "Browse for a certificate" #~ msgstr "Rsfoire(browse) dup fiier" #, fuzzy #~ msgid "_Popup" #~ msgstr "Popup" #, fuzzy #~ msgid "Type" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Status" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Security" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "in_box" #~ msgstr "Mailbox" #, fuzzy #~ msgid "Browse for a sound" #~ msgstr "Rsfoire(browse) dup fiier" #, fuzzy #~ msgid "Browse for a mail application" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "Browse for a soundfile" #~ msgstr "Rsfoire(browse) dup fiier" #, fuzzy #~ msgid "Display popup window for poptime seconds" #~ msgstr "Afieaz fereastra de popup pentru POPTIME secunde" #, fuzzy #~ msgid "Do not show any text when new mail" #~ msgstr "Nici un sunet cnd vine mail nou" #, fuzzy #~ msgid "Geometry" #~ msgstr "Geometrie " #, fuzzy #~ msgid "Mail a_pplication:" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "Mail application to launch via popup menu." #~ msgstr "Nume aplicaie mail" #, fuzzy #~ msgid "Maximum size of the sender field in popup window" #~ msgstr "Mrime maxim a cmpului 'De la' n popup" #, fuzzy #~ msgid "New mail:" #~ msgstr "Mail nou" #, fuzzy #~ msgid "No mail:" #~ msgstr "Nici un mail" #, fuzzy #~ msgid "No sound when new mail has arrived" #~ msgstr "Sunet de cntat cnd a venit mail nou" #, fuzzy #~ msgid "" #~ "Released under the GNU general public license\n" #~ "(c) 2000-2004 Nicolas Rougier\n" #~ "Special thanks to Robert Sowada and " #~ "Roland Stigge for their help" #~ msgstr "" #~ "Produs sub licena public general GNU.\n" #~ "Verific mailul periodic.\n" #~ " Afieaz headerele cnd este primit mail nou." #, fuzzy #~ msgid "Sound when new mail has arrived" #~ msgstr "Sunet de cntat cnd a venit mail nou" #, fuzzy #~ msgid "System _beep" #~ msgstr "Beep de sistem" #, fuzzy #~ msgid "System beep when new mail has arrived" #~ msgstr "Beep de sistem cnd vine mail nou" #, fuzzy #~ msgid "_Biff:" #~ msgstr "Biff" #, fuzzy #~ msgid "_Display popup window when new mail arrives" #~ msgstr "Sunet de cntat cnd a venit mail nou" #, fuzzy #~ msgid "_File:" #~ msgstr "Titlu:" #, fuzzy #~ msgid "_No sound" #~ msgstr "Nici un sunet" #, fuzzy #~ msgid "_Sound" #~ msgstr "Sunete " #, fuzzy #~ msgid "mozilla -mail" #~ msgstr "Nici un mail" #, fuzzy #~ msgid "netscape -mail" #~ msgstr "Mail necitit" #, fuzzy #~ msgid "Folder:" #~ msgstr "Titlu:" #, fuzzy #~ msgid "_Network" #~ msgstr "Reea:" #, fuzzy #~ msgid "Poll time" #~ msgstr "Titlu popup" #~ msgid "%02x" #~ msgstr "%02x" #, fuzzy #~ msgid "" #~ "Released under the GNU general public license.\n" #~ "Mail notification program." #~ msgstr "" #~ "Produs sub licena public general GNU.\n" #~ "Verific mailul periodic.\n" #~ " Afieaz headerele cnd este primit mail nou." #, fuzzy #~ msgid "Maximum s_ender size (character):" #~ msgstr "Mrime 'Subiect'" #, fuzzy #~ msgid "Maximum s_ubject size (character):" #~ msgstr "Mrime 'Subiect'" #, fuzzy #~ msgid "Maximum si_ze (line):" #~ msgstr "Mrime 'Subiect'" #, fuzzy #~ msgid "_Pop time:" #~ msgstr "Titlu popup" #, fuzzy #~ msgid "Maximum displayed _headers:" #~ msgstr "Mrime 'Subiect'" #, fuzzy #~ msgid "Mailbox configuration" #~ msgstr "Configuraie" #~ msgid " ... " #~ msgstr " ... " #, fuzzy #~ msgid "Applet (GTK only)" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "Sound file" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "Address / filename" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Folder" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Local" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Mail application" #~ msgstr "Aplicaie mail " #, fuzzy #~ msgid "Network" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Password" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Poll time (s)" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Pop time(s)" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Server certificate" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "character(s)" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Address of your mailbox" #~ msgstr "Adres mailbox" #, fuzzy #~ msgid "Check for new mail every polltime seconds" #~ msgstr "Verific mail la fiecare POLLTIME secunde" #, fuzzy #~ msgid "Create a new mailbox" #~ msgstr "Mail nou" #~ msgid "Decorated" #~ msgstr "Decorat" #, fuzzy #~ msgid "Do not show any text when no mail" #~ msgstr "Imagine utilizabil cnd nu este mail" #, fuzzy #~ msgid "Image or animation to use when new mail has arrived" #~ msgstr "Sunet de cntat cnd a venit mail nou" #, fuzzy #~ msgid "Image or animation to use when no new mail available" #~ msgstr "Imagine utilizabil cnd vine mail nou" #, fuzzy #~ msgid "Maximum size of subject field in popup window" #~ msgstr "Mrime maxim a cmpului 'Subiect' din popup" #~ msgid "Play selected sound" #~ msgstr "Cnt sunetul selectat" #~ msgid "Popup " #~ msgstr "Popup " #, fuzzy #~ msgid "Previous mailbox" #~ msgstr "Adres mailbox" #, fuzzy #~ msgid "Sanity " #~ msgstr "Sunete " #~ msgid "Show date in headers or not" #~ msgstr "Afieaz data n headere sau nu" #~ msgid "Sounds " #~ msgstr "Sunete " #~ msgid "Timing " #~ msgstr "Msurare a timpului(Timing)" #, fuzzy #~ msgid "Use popup" #~ msgstr "Afieaz popup" #, fuzzy #~ msgid "User mail account name " #~ msgstr "Nume cont utilizator" #, fuzzy #~ msgid "User mail account password" #~ msgstr "Parol cont utilizator" #~ msgid "apop" #~ msgstr "apop" #~ msgid "imap4" #~ msgstr "imap4" #~ msgid "mail.wav" #~ msgstr "mail.wav" #~ msgid "maildir" #~ msgstr "maildir" #~ msgid "mh" #~ msgstr "mh" #~ msgid "pop3" #~ msgstr "pop3" #~ msgid "debug output" #~ msgstr "output de debug" #, fuzzy #~ msgid "mail: " #~ msgstr "Nici un mail" #, fuzzy #~ msgid "mail: ++" #~ msgstr "Nici un mail" #, fuzzy #~ msgid "Options" #~ msgstr "Adres / nume fiier:" #~ msgid "Title" #~ msgstr "Titlu" #, fuzzy #~ msgid "Show applet" #~ msgstr "Afieaz data" #, fuzzy #~ msgid "Mail" #~ msgstr "Mailbox" #~ msgid "Look " #~ msgstr "nfiare " #, fuzzy #~ msgid "Font to be used for title" #~ msgstr "Font pentru tiltul popup-ului" #, fuzzy #~ msgid "Sans 8" #~ msgstr "Sunete " #, fuzzy #~ msgid "Show title or not" #~ msgstr "Afieaz titlu n popup sau nu" #, fuzzy #~ msgid "Match all rules" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Match any of the rules" #~ msgstr "Adres / nume fiier:" #, fuzzy #~ msgid "Sender" #~ msgstr "Suspendare" #~ msgid "Mailbox addressing information " #~ msgstr "Informaie de adresare mailbox " #~ msgid "Maximum size of the 'From' field in popup" #~ msgstr "Mrime maxim a cmpului 'De la' n popup" #, fuzzy #~ msgid "Font to b used for title" #~ msgstr "Font pentru tiltul popup-ului" #~ msgid "Cannot open mailfile \"%s\" (%s).\n" #~ msgstr "Nu s-a putut deschide fiierul de mail \"%s\" (%s).\n" #~ msgid "Cannot open %s mailfile (%s).\n" #~ msgstr "Nu s-a putut deschide fiierul de mail %s (%s).\n" #~ msgid "Problem while closing %s mailfile (%s).\n" #~ msgstr "Problem aprut n timpul nchiderii fiierului de mail %s (%s).\n" #~ msgid "Cannot open maildir \"%s\" (%s).\n" #~ msgstr "Nu se poate deschide maildir \"%s\" (%s).\n" #~ msgid "Cannot open MH sequences file : %s (%s).\n" #~ msgstr "Nu se poate deschide fiierul de secvene MH : %s (%s).\n" #~ msgid "Cannot initiate authorization state: %s\n" #~ msgstr "Nu se poate iniia starea de autorizare: %s\n" #~ msgid "Malloc of %d bytes failed\n" #~ msgstr "Malloc a %d octei euat\n" #~ msgid "Server does not support APOP: %s\n" #~ msgstr "Server nu suport APOP: %s\n" #~ msgid "Cannot authenticate user: %s\n" #~ msgstr "Nu pot autentifica utilizatorul: %s\n" #~ msgid "Cannot retrieve unique-id listings: %s\n" #~ msgstr "Nu pot recupera listingurile de id-uri unice: %s\n" #~ msgid "Cannot get message number: %s\n" #~ msgstr "Nu pot gsi numrul de mesaj: %s\n" #~ msgid "Entering IMAP4_checkmail\n" #~ msgstr "Se intr n IMAP4_checkmail\n" #~ msgid "Connnection to server established\n" #~ msgstr "Conexiunea la server stabilit\n" #~ msgid "Authorization state initiated\n" #~ msgstr "Starea de autorizare iniiat\n" #~ msgid "User identification completed\n" #~ msgstr "Identificarea utilizatorului finalizat\n" #~ msgid "Cannot select INBOX : %s\n" #~ msgstr "Nu se poate selecta INBOX: %s\n" #~ msgid "INBOX list retrieved and parsed\n" #~ msgstr "Lista INBOX adus i analizat\n" #~ msgid "Exiting IMAP4_checkmail\n" #~ msgstr "Se iese din IMAP4_checkmail\n" #~ msgid "Entering IMAP4_getheaders\n" #~ msgstr "Se intr n IMAP4_getheaders\n" #~ msgid "Connection to server established\n" #~ msgstr "Conexiunea la server stabilit\n" #~ msgid "Mailbox succesfully selected, found %d unread mail.\n" #~ msgstr "Mailbox selectat cu succes, s-a gsit %d mail necitit.\n" #~ msgid "Exiting IMAP4_getheaders\n" #~ msgstr "Se iese din IMAP4_getheaders\n" #~ msgid "" #~ "The protocol type or the specified protocol is not supported within this " #~ "domain.\n" #~ msgstr "" #~ "Tipul de protocol sau protocolul specificat nu este suportat n acest " #~ "domeniu.\n" #~ msgid "Not enough kernel memory to allocate a new socket structure.\n" #~ msgstr "" #~ "Nu exist suficient memorie a kernelului pentru a aloca o structur nou " #~ "de socket.\n" #~ msgid "Process file table overflow.\n" #~ msgstr "Procesul tabelei de fiiere suprasolicitat(overflow).\n" #~ msgid "" #~ "Permission to create a socket of the specified type and/or protocol is " #~ "denied.\n" #~ msgstr "" #~ "Permisiunea de a crea un socket de tipul specificat i/sau protocol este " #~ "respins.\n" #~ msgid "" #~ "Insufficient memory is available. The socket cannot be created until " #~ "sufficient resources are freed.\n" #~ msgstr "" #~ "Nu este suficient memorie disponibil. Socketul nu poate fi creat pn " #~ "nu sunt eliberate suficiente resurse.\n" #~ msgid "Unknown protocol, or protocol family not available.\n" #~ msgstr "Protocol necunoscut, sau familie de protocoale nedisponibil..\n" #~ msgid "Unknown socket error.\n" #~ msgstr "Eroare de socket necunoscut.\n" #~ msgid "The specified host is unknown.\n" #~ msgstr "Hostul specificat este necunoscut.\n" #~ msgid "The requested name is valid but does not have an IP address.\n" #~ msgstr "Numele cerut este valid dar nu are o adres IP.\n" #~ msgid "A non-recoverable name server error occurred.\n" #~ msgstr "S-a produs o eroare ireparabil de name-server.\n" #~ msgid "" #~ "A temporary error occurred on an authoritative name server. Try again " #~ "later.\n" #~ msgstr "" #~ "S-a produs o eroare temporar pe un name server autoritar. ncercai mai " #~ "trziu.\n" #~ msgid "Unknown gethostbyname error.\n" #~ msgstr "Eroare gethostbyname necunoscut.\n" #~ msgid "The file descriptor is not a valid index in the descriptor table.\n" #~ msgstr "" #~ "Descriptorul de fiier nu este un index valid n tabela de descriptori.\n" #~ msgid "The socket structure address is outside the user's address space.\n" #~ msgstr "" #~ "Adresa structurii de socket este n afara spaiului de adres al " #~ "utilizatorului.\n" #~ msgid "The file descriptor is not associated with a socket.\n" #~ msgstr "Descriptorul de fiier nu este asociat cu un socket.\n" #~ msgid "The socket is already connected.\n" #~ msgstr "Socketul este deja conectat.\n" #~ msgid "No one listening on the remote address.\n" #~ msgstr "Nu ascult nimeni la adresa cealalt(remote).\n" #~ msgid "Timeout while attempting connection.\n" #~ msgstr "Timeout n ncercarea de a stabili conexiunea.\n" #~ msgid "Network is unreachable.\n" #~ msgstr "Reeaua este de negsit.\n" #~ msgid "Local address is already in use.\n" #~ msgstr "Adresa local este deja n folosin.\n" #~ msgid "" #~ "The socket is non-blocking and the connection cannot be completed " #~ "immediately.\n" #~ msgstr "" #~ "Socketul este non-blocking i conexiunea nu poate fi finalizat imediat.\n" #~ msgid "" #~ "The socket is non-blocking and a previous connection attempt has not yet " #~ "been completed.\n" #~ msgstr "" #~ "Socketul este non-blocking i o ncercare de conexiune anterioar nu a " #~ "fost nc finalizat.\n" #~ msgid "" #~ "No more free local ports or insufficient entries in the routing cache.\n" #~ msgstr "" #~ "Nu mai sunt destule porturi locale sau nu sunt suficiente intrri n " #~ "cache-ul de intrri.\n" #~ msgid "" #~ "The passed address didn't have the correct address family in its " #~ "sa_family field.\n" #~ msgstr "" #~ "Adresa furnizat nu are familia de adrese corect n cmpul su " #~ "sa_family.\n" #~ msgid "Connection request failed because of a local firewall rule.\n" #~ msgstr "" #~ "Cererea de conexiune a euat datorit unei reguli locale de firewall.\n" #~ msgid "Unknown connect error.\n" #~ msgstr "Eroare de conectare necunoscut.\n" #~ msgid "Problem occured while writing to the socket.\n" #~ msgstr "Problem produs n timpul scrierii n socket.\n" #~ msgid "Buffer overflow.\n" #~ msgstr "Buffer suprasolicitat(overflow).\n" #~ msgid "Select Font" #~ msgstr "Selecie Font" #~ msgid "abcdefghijk ABCDEFGHIJK" #~ msgstr "abcdefghijk ABCDEFGHIJK" #~ msgid "Select File" #~ msgstr "Selectare Fiier" #~ msgid "Time between polls (seconds):" #~ msgstr "Interval ntre verificri (secunde):" #~ msgid "Popup decorated or not" #~ msgstr "Popup decorat sau nu" #~ msgid "Sticky popup or not" #~ msgstr "Popup persistent(sticky) sau nu" #~ msgid "Popup geometry ({+-}{+-})" #~ msgstr "Geometrie popup ({+-}{+-})" #~ msgid "Biff geometry ({+-}{+-})" #~ msgstr "Geometrie biff ({+-}{+-})" #~ msgid "Biff decorated or not" #~ msgstr "Biff decorat sau nu" #~ msgid "Sticky biff or not" #~ msgstr "Biff persistent(sticky) sau nu" #~ msgid "Show popup when new mail or not" #~ msgstr "Afieaz popup n cazul mailului nou sau nu" #~ msgid "Show read mail or not" #~ msgstr "Afieaz cititrea mailului sau nu" #~ msgid "Show read mail" #~ msgstr "Afieaz citirea mailului" #~ msgid "'From' size" #~ msgstr "Mrime 'De la'" #~ msgid "Sound file:" #~ msgstr "Fiierul de sunete:" #~ msgid "Popup body" #~ msgstr "Corp popup" #~ msgid " ABC - abc - 123 " #~ msgstr " ABC - abc - 123 " #~ msgid "Font for applet (GNOME) or biff window (GTK)" #~ msgstr "Font pentru applet (GNOME) sau fereastr biff (GTK)" #~ msgid "Popup colors " #~ msgstr "Culori popup " #~ msgid "Color of unread mail in popup" #~ msgstr "Culoarea mailului necitit n popup" #~ msgid "Color of read mail in popup" #~ msgstr "Culoarea mailului citit n popup" #~ msgid "Read mail" #~ msgstr "Mail citit" #~ msgid "Look & Feel" #~ msgstr "nfisare & Comportament" #~ msgid "Select Color" #~ msgstr "Selectare Culoare" #~ msgid "Unread: 00" #~ msgstr "Necitite: 00" gnubiff-2.2.16/po/LINGUAS0000644000175000017500000000014012474424634011613 00000000000000# Set of available languages. cs de eo es fi fr fr_CA fr_FR hu id it nl pt pt_BR ro rw sr sv vi gnubiff-2.2.16/po/vi.po0000644000175000017500000007376312474424637011574 00000000000000# Vietnamese translation for GNUBiff. # Copyright © 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubiff package. # Clytie Siddall , 2005-2009. # Trần Ngọc Quân , 2013. # msgid "" msgstr "" "Project-Id-Version: gnubiff 2.2.15\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2013-12-18 15:07+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: LocFactoryEditor 1.8\n" #: src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[Không thể giải mã bảng mã “%s” của thư này]" #: src/decoding.cc:135 src/decoding.cc:142 src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Không thể giải mã phần đầu này]" #: src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "[Không thể chuyển đổi bộ ký tự (từ “%s” sang “utf-8”)]" #: src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Khởi chạy tiểu ứng dụng GNOME từ dòng lệnh" #: src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Tập tin cấu hình cần dùng" #: src/gnubiff.cc:98 msgid "file" msgstr "tập tin" #: src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Bỏ qua tiến trình cấu hình" #: src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Khởi chạy gnubiff không có giao diện người dùng đồ họa" #: src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Để biểu tượng của gnubiff trên khay hệ thống" #: src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "In ra thông tin phiên bản rồi thoát" #: src/gnubiff.cc:112 msgid "General command line options:" msgstr "Các tùy chọn dòng lệnh chung:" #: src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Tùy chọn gỡ lỗi:" #: src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Không tìm thấy tập tin cấu hình (%s)." #: src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "Đả tải tập tin cấu hình từ phiên bản gnubiff mới hơn “%s”." #. Config file belongs to an older version of gnubiff #: src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "Đã tải tập tin cấu hình từ phiên bản gnubiff cũ “%s”." #: src/biff.cc:606 msgid "Trying to convert all options." msgstr "Đang cố gắng chuyển đổi tất cả các tùy chọn..." #: src/biff.cc:650 msgid "Successfully converted all options." msgstr "Mọi tùy chọn đã được chuyển đổi." #: src/biff.cc:653 #, c-format msgid "Successfully converted some options. The following options must be updated manually: %s." msgstr "Một số tùy chọn đã được chuyển đổi. Phải tự cập nhật những tùy chọn theo đây: %s." #: src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Không thể mở tập tin cấu hình (%s) của bạn" #: src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Không thể tạo bộ phân tích ngữ pháp XML cho tập tin cấu hình" #: src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "Không tìm thấy phần định nghĩa hộp thư trong tập tin cấu hình (%s) của bạn" #: src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Gặp dạng thức tham số bất hợp lệ trong tập tin cấu hình" #: src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Chưa ghi rõ giao thức cho hộp thư %d" #: src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Không thể tạo tuyến trình: %s" #: src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "hộp thư %d" #. Insert default values #: src/mailbox.cc:644 msgid "" msgstr "" #: src/mailbox.cc:645 msgid "" msgstr "" #: src/mailbox.cc:646 msgid "" msgstr "" #: src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Không thể phân tách dòng đầu kiểu nội dụng]" #: src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Không thể phân tách dòng đầu bảng mã truyền nội dụng]" #: src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Thư đa phần có dạng thức sai]" #: src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Không tìm thấy đầu của phần thứ nhất trong thư đa phần]" #: src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Thư này có kiểu nội dng không được hỗ trợ: “%s/%s”]" #: src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" "Gặp lỗi khi biên dịch biểu thức chính quy.\n" "Biểu thức chính quy: %s\n" "Thông điệp lỗi: %s" #. Otherwise: Ignore it and print error message #: src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Không thể sắp xếp thư theo “%s”" #: src/socket.cc:116 src/socket.cc:175 src/socket.cc:233 src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Không thể kết nối đến %s qua cổng %d" #: src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Việc tải chứng nhận (%s) cho %s bị lỗi" #: src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Không thể nhận diện máy ở xa (%s qua cổng %d)" #: src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Không thể ghi vào %s qua cổng %d" #: src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Không thể đọc từ %s qua cổng %d" #: src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Không thể đặt thời hạn đọc trên ổ cắm: %s" #: src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Không thể mở %s." #: src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Thư này không có phần có kiểu nội dụng đã hỗ trợ]" #: src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Không thể chọn thư mục %s trên máy %s" #: src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Không nhận được đáp ứng từ %s qua cổng %d" #: src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "[%d] Máy phục vụ không gửi đáp ứng hay lời xác nhận “%s” không có thể" #: src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Máy phục vụ không gửi đáp ứng “%s” không có thẻ" #. see RFC 3501 7.1.5 #: src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Máy phục vụ đóng kết nối ngay:%s" #. see RFC 3501 7.1.3 #: src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Máy phục vụ bị lỗi nội bộ hoặc gặp lỗi không rõ :%s" #. see RFC 3501 7.1.2 #: src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Cảnh báo từ máy phục vụ :%s" #: src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Không thể mở thư mục thư mới (%s)" #: src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Mật khẩu trống" #: src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Thông báo lỗi từ máy phục vụ POP3:%s" #: src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Chưa nhận đáp ứng dương từ máy phục vụ POP3" #: src/apop.cc:101 #, c-format msgid "[%d] Your pop server does not seem to accept apop protocol (no timestamp provided)" msgstr "[%d] Hình như máy phục vụ POP của bạn không chấp nhận giao thức APOP (không ghi giờ)" #: src/apop.cc:122 #, c-format msgid "[%d] Problem with crypto that should have been detected at configure time" msgstr "[%d] Gặp trục trặc với mật mã cái mà không đươc phát hiện vào lúc cấu hình" #: src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Không biết tùy chọn “%s”" #: src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Không thể đặt tùy chọn “%s” thành “%s”" #: src/options.cc:720 src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "Không tìm thấy điều khiển (widget) đã chỉ ra (“%s”) bên trong cấu trúc XML (“%s”)" #: src/gnubiff_options.cc:140 msgid "no mail" msgstr "không có thư mới" #: src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "Không thể xây dựng giao diện.\n" "\n" "Tên: %s\n" "Đường dẫn: %s\n" "\n" "Hãy kiểm tra lại xem gói đã được cài đặt đúng." #: src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "Tùy chọn GUI_connect cần đến mô-đun gmodule hoạt động" #: src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Không tìm thấy bộ quản lý tín hiệu “%s”." #: src/ui-applet.cc:217 msgid " unknown" msgstr " không rõ" #: src/ui-applet.cc:222 msgid " error" msgstr " lỗi" #: src/ui-applet.cc:231 msgid " checking..." msgstr " đang kiểm tra..." #: src/ui-preferences.cc:267 src/ui-popup.cc:183 msgid "Mailbox" msgstr "Hộp thư" #. Column: TYPE #: src/ui-preferences.cc:281 src/ui-preferences.cc:363 msgid "Type" msgstr "Kiểu" #: src/ui-preferences.cc:300 msgid "Status" msgstr "Trạng thái" #: src/ui-preferences.cc:315 msgid "Security" msgstr "Bảo mật" #. Selection label #: src/ui-preferences.cc:327 src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Chưa chọn hộp thư" #: src/ui-preferences.cc:355 msgid "Option" msgstr "Tùy chọn" #: src/ui-preferences.cc:373 msgid "Value" msgstr "Giá trị" #: src/ui-preferences.cc:609 msgid "_Start" msgstr "_Chạy" #: src/ui-preferences.cc:615 ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Ngừng" #: src/ui-preferences.cc:626 src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Duyệt tìm ảnh thư mới" #: src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "Hãy nhập tên người dùng và mật khẩu cho hộp thư “%s”" #: src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Không thể kiểm chứng %s là nơi Mạng đáng tin.\n" #: src/ui-certificate.cc:74 #, c-format msgid "Either site's certificate is incomplete or you're connected to a site pretending to be %s, possibly to obtain your password" msgstr "Hoặc chứng nhận của nơi Mạng này chưa hoàn thành, hoặc bạn đã kết nối đến một nơi khác làm ra vẻ là %s, có lẽ để lấy mật khẩu của bạn" #: src/ui-properties.cc:123 src/ui-properties.cc:150 msgid "Autodetect" msgstr "Tự động phát hiện" #: src/ui-properties.cc:124 msgid "File or Folder" msgstr "Tập tin hay Thư mục" #: src/ui-properties.cc:152 msgid "User/Pass" msgstr "Tài khoản/Mật khẩu" #: src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Tài khoản /Mật khẩu mật mã (APOP)" #: src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL với chứng nhận" #: src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Duyệt tìm tập tin hay thư mục" #: src/ui-properties.cc:323 ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Duyệt tìm tập tin chứng nhận" #: src/ui-popup.cc:195 msgid "From" msgstr "Từ" #: src/ui-popup.cc:201 msgid "Subject" msgstr "Chủ đề" #: src/ui-popup.cc:207 msgid "Date" msgstr "Ngày" #. Create error message #: src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Bạn mới tìm thấy một lỗi nội bộ chưa được biết. Vui lòng gửi báo cáo lỗi chi tiết cho .\n" "\n" "Thông tin thêm:\n" #: src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "Thông tin" #: src/GNOME_gnubiffApplet.xml.h:2 ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Đánh dấu các hộp thư đã đọc" #: src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Tùy thích..." #: src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Chạy lệnh" #: src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Chương trình thông báo thư" #: src/GNOME_gnubiffApplet.server.in.h:2 ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ui/applet-gtk.glade.h:1 msgid "About" msgstr "Giới thiệu" #: ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff là một chương trình thông báo thư." #. See http://www.gnu.org /licenses/translations.html #: ui/applet-gtk.glade.h:4 msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file." msgstr "" "Gnubiff thuộc về dự án GNU.\n" "Nó được phát hành dưới sự bảo hộ của GNU.\n" "\n" "Chương trình này là phần mềm tự do; bạn có thể phát hành lại nó và/hoặc sửa đổi nó với điều kiện của Giấy Phép Công Cộng GNU như được xuất bản bởi Tổ Chức Phần Mềm Tự Do; hoặc phiên bản 3 của Giấy Phép này, hoặc (tùy chọn) bất kỳ phiên bản sau nào.\n" "\n" "Chương trình này được phát hành vì mong muốn nó có ích, nhưng KHÔNG CÓ BẢO HÀNH GÌ CẢ, THẬM CHÍ KHÔNG CÓ BẢO ĐẢM ĐƯỢC NGỤ Ý KHẢ NĂNG BÁN HAY KHẢ NĂNG LÀM ĐƯỢC VIỆC DỨT KHOÁT. Xem Giấy Phép Công Cộng GNU để biết thêm chi tiết.\n" "\n" "Bạn đã nhận một bản sao của Giấy Phép Công Cộng GNU cùng với chương trình này; nếu không, xem http://www.gnu.org/licenses/.\n" "\n" "Đối với một ngoại lệ của Giấy Phép Công Cộng GNU để phát hành gnubiff được liên kết đến thư viện OpenSSL, xem tập tin Đọc Đi README." #: ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Khởi chạy lệnh" #: ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "T_hoát" #: ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "mẹo công cụ" #: ui/preferences.glade.h:1 msgid "Commands" msgstr "Lệnh" #: ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Chế độ hiệu chỉnh cấp cao" #: ui/preferences.glade.h:3 msgid "General" msgstr "Chung" #: ui/preferences.glade.h:4 msgid "Headers" msgstr "Dòng đầu" #: ui/preferences.glade.h:5 msgid "Layout" msgstr "Bố trí" #: ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Hộp thư" #: ui/preferences.glade.h:7 msgid "When new mail" msgstr "Khi nhận thư mới" #: ui/preferences.glade.h:8 msgid "When no mail" msgstr "Khi không có thư" #: ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" "Gnubiff thuộc về dự án GNU\n" "nên được phát hành dưới sự bảo hộ của GNU." #: ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-bugs@lists.sourceforge.net." msgstr "" "Có thể liên lạc với nhà phát triển Gnubiff trong hộp thư chung gnubiff-devel@lists.sourceforge.net.\n" "Vui lòng báo cáo lỗi cho gnubiff-bugs@lists.sourceforge.net" #: ui/preferences.glade.h:13 msgid "Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):" msgstr "Đây là danh sách những người đã dịch gnubiff sang ngôn ngữ khác (người đã dịch phiên bản trước có nhãn dấu sao *):" #: ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Có nhiều người đã đóng góp cùng dự án gnubiff bởi\n" " • thông báo lỗi\n" " • góp ý cách cải tiến khác nhau\n" " • tạo mã nguồn thật\n" "Đây là danh sách những người này:" #: ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Dạng hình tiểu ứng dụng" #: ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Tiểu ứng dụng hoặc Biff" #: ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "_Duyệt..." #: ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Duyệt tìm tập tin ảnh" #: ui/preferences.glade.h:23 msgid "Contributors" msgstr "Người đóng góp" #: ui/preferences.glade.h:24 msgid "Credits" msgstr "Công trạng" #: ui/preferences.glade.h:25 msgid "Developers" msgstr "Nhà phát triển" #: ui/preferences.glade.h:26 msgid "Edit option" msgstr "Sửa tùy chọn" #: ui/preferences.glade.h:27 msgid "Expert" msgstr "Cấp cao" #: ui/preferences.glade.h:28 msgid "Image filename" msgstr "Tên tập tin ảnh" #: ui/preferences.glade.h:29 msgid "List all options." msgstr "Liệt kê mọi tùy chọn." #: ui/preferences.glade.h:30 msgid "List of options, their type and current values. To edit an option doubleclick on its value." msgstr "Danh sách các tùy chọn, kiểu và giá trị hiện thời của chúng. Để hiệu chỉnh tùy chọn nào, hãy nhắp đôi vào giá trị của nó." #: ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Hộp thư" #: ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Người bảo trì" #: ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Số dòng đầu tối đa cần hiển thị" #: ui/preferences.glade.h:34 ui/popup.glade.h:4 msgid "Popup" msgstr "Bật lên" #: ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Dạng hình bật lên" #: ui/preferences.glade.h:36 msgid "Search for those (displayed) options that contain the string in the text entry." msgstr "Tìm kiếm những tùy chọn (đã hiển thị) chứa chuỗi nảu trong mục nhập đoạn." #: ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Đặt về gia trị mặc định" #: ui/preferences.glade.h:38 msgid "Show _image:" msgstr "H_Iện ảnh:" #: ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Hiện c&hữ:" #: ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Hiện ả_nh:" #: ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Hiện &chữ:" #: ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Chuỗi cần tìm kiếm." #: ui/preferences.glade.h:44 #, no-c-format msgid "Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used." msgstr "Đoạn cần hiển thị (%d và %D là số thư mới, %d đã đệm số không). Có thể sử dụng mã định dạng Pango." #: ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Lệnh cần chạy khi nhận thư mới" #: ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Lệnh cần chạy khi biểu tượng được bấm đúp chuột" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly or result in security problems." msgstr "" "Ở đây có thể bật hộp thoại hiệu chỉnh các tùy chọn nội bộ của gnubiff. Vì vậy có thể thay đổi giá trị của tùy chọn không được điều khiển bởi ô điều khiển giao diện người dùng đồ họa. Mô tả ngắn về mỗi tùy chọn đã được cung cấp.\n" "Cảnh báo : việc thay đổi những tùy chọn này có thể gây ra gnubiff hoạt động không đúng, hoặc gây ra vấn đề bảo mật." #: ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Phông chữ cần dùng để hiển thị thông tin" #: ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Thời gian hiển thị cửa sổ bật lên" #: ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Bật/tắt tùy chọn" #: ui/preferences.glade.h:53 msgid "Translators" msgstr "Dịch giả" #: ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "T_rang trí" #: ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Dùng dạng _hình:" #: ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "Khi bấm đú&p chuột:" #: ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "Khi nhận thư _mới:" #: ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Bật/tắt hiệu chỉnh tùy chọn trong chế độ cấp cao" #: ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Bật/tắt hiển thị đoạn văn" #: ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Có trình bày ảnh không?" #: ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Bật/tắt hiển thị cửa sổ bật lên" #: ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Bật/tắt hạn chế số dòng đầu đã hiển thị" #: ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Bật/tắt hiển thị ảnh" #: ui/preferences.glade.h:64 msgid "Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually!" msgstr "Bật/tắt hiển thị thanh nhỏ cấp cao. Ghi chú: sau khi tắt tùy chọn này, có thể bật lại chỉ bằng cách tự hiệu chỉnh tập tin cấu hình!" #: ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Định dang dòng đầu thư không?" #: ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Bật/tắt dùng dạng hình" #: ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Bật/tắt trang trí kiểu bộ quản lý cửa sổ" #: ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "[cỡ người gửi tối đa]:[cỡ chủ đề tối đa]:[cỡ ngày tối đa]" #: ui/preferences.glade.h:69 ui/properties.glade.h:21 msgid "_Browse..." msgstr "_Duyệt..." #: ui/preferences.glade.h:70 msgid "_Display for" msgstr "_Hiển thị trong" #: ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Hiệu chỉnh tùy chọn trong chế độ cấp cao" #: ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Phông chữ:" #: ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Dạng thức:" #: ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Hạn chế thư đã tập hợp" #: ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Hạn chế số lượng:" #: ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "_Hiện thanh cấp cao" #: ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "tùy thích gnubiff" #: ui/preferences.glade.h:79 msgid "header(s)" msgstr "phần đầu" #: ui/preferences.glade.h:80 msgid "mail(s)" msgstr "thư" #: ui/preferences.glade.h:81 msgid "second(s)" msgstr "giây" #: ui/properties.glade.h:1 msgid "_Details" msgstr "_Chi tiết" #: ui/properties.glade.h:2 msgid "A_ddress:" msgstr "_Địa chỉ:" #: ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "_Xác thức:" #: ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "_Duyệt..." #: ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "_Chứng nhận:" #: ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Tên tập tin chứng nhận" #: ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Cổng để kết nối đến máy phục vụ" #: ui/properties.glade.h:9 msgid "Connection:" msgstr "Kết nối:" #: ui/properties.glade.h:10 msgid "Dela_y:" msgstr "T_rễ:" #: ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Thư mục hộp thư" #: ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Thuộc tính hộp thư" #: ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Tên hộp thư" #: ui/properties.glade.h:14 msgid "Other connection port" msgstr "Cổng kết nối khác" #: ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Thư mục hộp thư khác" #: ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Cổng kết nối chuẩn" #: ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Thư mục hộp thư chuẩn" #: ui/properties.glade.h:18 msgid "The amount of time to wait between mail checks or between retries when connection is lost" msgstr "Thời gian giữa hai lần kiểm tra có thư mới, hay giữa hai lần thử lại khi kết nối bị ngắt" #: ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Mật khẩu của bạn trên máy phục vụ thư này" #: ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Tên tài khoản của bạn trên máy phục vụ thư này" #: ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Hộp thư:" #: ui/properties.glade.h:23 msgid "_Name:" msgstr "Tê_n:" #: ui/properties.glade.h:24 ui/authentication.glade.h:4 msgid "_Password:" msgstr "_Mật khẩu:" #: ui/properties.glade.h:25 msgid "_Type:" msgstr "_Kiểu:" #: ui/properties.glade.h:26 ui/authentication.glade.h:5 msgid "_Username:" msgstr "Tài khoả&n:" #: ui/properties.glade.h:27 msgid "_other" msgstr "_khác" #: ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "tập tin, thư mục hay tên máy" #: ui/properties.glade.h:29 msgid "minutes" msgstr "phút" #: ui/properties.glade.h:30 msgid "othe_r" msgstr "k_hác" #: ui/properties.glade.h:31 msgid "seconds" msgstr "giây" #: ui/properties.glade.h:32 msgid "stan_dard" msgstr "_chuẩn" #: ui/properties.glade.h:33 msgid "stand_ard" msgstr "c_huẩn" #: ui/authentication.glade.h:1 msgid "Authentication" msgstr "Xác thực" #: ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Mật khẩu của bạn trên máy phục vụ" #: ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Tên người dùng của bạn trên máy phục vụ" #: ui/certificate.glade.h:1 msgid "Address" msgstr "Địa chỉ" #: ui/certificate.glade.h:2 msgid "Issued To" msgstr "Đã phát hành cho" #: ui/certificate.glade.h:3 msgid "Accept" msgstr "Chấp nhận" #: ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Không thể thị thức máy phục vụ" #: ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Chi tiết chứng nhận" #: ui/certificate.glade.h:6 msgid "Common Name" msgstr "Tên chung" #: ui/certificate.glade.h:7 msgid "Country" msgstr "Quốc gia" #: ui/certificate.glade.h:8 msgid "Locality" msgstr "Miền" #: ui/certificate.glade.h:9 msgid "Organization" msgstr "Tổ chức" #: ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Đơn vị tổ chức" #: ui/certificate.glade.h:11 msgid "State or Province" msgstr "Tiểu bang hay Tỉnh" #: ui/popup.glade.h:1 msgid "Date" msgstr "Ngày" #: ui/popup.glade.h:2 msgid "From" msgstr "Từ" #: ui/popup.glade.h:3 msgid "Subject" msgstr "Chủ đề" #: ui/popup.glade.h:5 msgid "mail content" msgstr "nội dung thư" gnubiff-2.2.16/po/fr_FR.po0000644000175000017500000007277312474422124012141 00000000000000# translation of fr.po to Français # French translation of gnubiff # Copyright (C) 2005 Nicolas Rougier # This file is distributed under the same license as the gnubiff package. # Nicolas Rougier , 2004, 2005. # Nicolas Rougier , 2004. # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: gnubiff-bugs@lists.sourceforge.net\n" "POT-Creation-Date: 2010-02-07 17:01+0100\n" "PO-Revision-Date: 2006-03-27 11:59+0200\n" "Last-Translator: Rougier \n" "Language-Team: Français \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/decoding.cc:89 #, c-format msgid "[The encoding \"%s\" of this mail can't be decoded]" msgstr "[L'encodage \"%s\" ne peut être décodé]" #: ../src/decoding.cc:135 ../src/decoding.cc:142 ../src/decoding.cc:147 msgid "[Cannot decode this header line]" msgstr "[Impossible de décoder cette ligne]" #: ../src/decoding.cc:744 #, c-format msgid "[Cannot convert character sets (from \"%s\" to \"utf-8\")]" msgstr "" "[Impossible de convertir le jeu de caractères (fr \"%s\" vers \"utf-8\")]" #: ../src/gnubiff.cc:91 msgid "Start gnome applet from command line" msgstr "Démarrer l'applet gnome depuis la ligne de commande" #: ../src/gnubiff.cc:98 msgid "Configuration file to use" msgstr "Fichier de configuration à utiliser " #: ../src/gnubiff.cc:98 msgid "file" msgstr "fichier" #: ../src/gnubiff.cc:100 msgid "Skip the configuration process" msgstr "Passer l'étape de configuration" #: ../src/gnubiff.cc:102 msgid "Start gnubiff without GUI" msgstr "Démarrer gnubiff sans l'interface" #: ../src/gnubiff.cc:104 msgid "Put gnubiff's icon into the system tray" msgstr "Placer l'icône de gnubiff dans le panneau système" #: ../src/gnubiff.cc:106 msgid "Print version information and exit" msgstr "Afficher la version et sortir" #: ../src/gnubiff.cc:112 msgid "General command line options:" msgstr "Options de la ligne de commande" #: ../src/gnubiff.cc:115 msgid "Options for debugging:" msgstr "Options de déboggage" #: ../src/biff.cc:123 #, c-format msgid "Configuration file (%s) not found!" msgstr "Fichier de configuration (%s) non trouvé" #: ../src/biff.cc:596 #, c-format msgid "Loaded config file from newer gnubiff version \"%s\"." msgstr "" "Chargement du fichier de configuration à partir d'une nouvelle version de " "gnubiff \"%s\"." #. Config file belongs to an older version of gnubiff #: ../src/biff.cc:604 #, c-format msgid "Loaded config file from old gnubiff version \"%s\"." msgstr "" "Chargement du fichier de configuration à partir d'une vieille version de " "gnubiff \"%s\"" #: ../src/biff.cc:606 msgid "Trying to convert all options." msgstr "Tentative de conversion des options" #: ../src/biff.cc:650 msgid "Successfully converted all options." msgstr "Tentative de conversion réussie" #: ../src/biff.cc:653 #, c-format msgid "" "Successfully converted some options. The following options must be updated " "manually: %s." msgstr "" "Tentative de conversion réussie pour quelques options. Les options suivantes " "doivent être manuellement converties: %s " #: ../src/biff.cc:804 #, c-format msgid "Cannot open your configuration file (%s)" msgstr "Impossible d'ouvrir votre fichier de configuration (%s)" #: ../src/biff.cc:819 msgid "Cannot create XML parser for config file" msgstr "Impossible de créer le parser XML pour le fichier de configuration" #: ../src/biff.cc:836 #, c-format msgid "Found no mailbox definition in your configuration file (%s)" msgstr "" "Votre fichier de configuration n'as pas de définition de boîte aux lettres (%" "s)" #: ../src/biff.cc:883 msgid "Illegal parameter format in config file" msgstr "Format de paramètre illégal dans le fichier de configuration" #: ../src/biff.cc:912 #, c-format msgid "No protocol specified for mailbox %d" msgstr "Pas de protocole spécifié pour la boîte aux lettres %d" #: ../src/mailbox.cc:146 #, c-format msgid "[%d] Unable to create thread: %s" msgstr "[%d] Impossible de créer le thread: %s" #: ../src/mailbox.cc:319 #, c-format msgid "mailbox %d" msgstr "Boîte aux lettres %d" #. Insert default values #: ../src/mailbox.cc:644 msgid "" msgstr "" #: ../src/mailbox.cc:645 msgid "" msgstr "" #: ../src/mailbox.cc:646 msgid "" msgstr "" #: ../src/mailbox.cc:700 msgid "[Cannot parse content type header line]" msgstr "[Impossible de décoder le type de la ligne d'entête]" #: ../src/mailbox.cc:722 msgid "[Cannot parse content transfer encoding header line]" msgstr "[Impossible de décoder le code de la ligne d'entête]" #: ../src/mailbox.cc:763 msgid "[Malformed multipart message]" msgstr "[Message multi-parties mal formé]" #: ../src/mailbox.cc:771 msgid "[Can't find first part's beginning in the multipart message]" msgstr "[Impossible de trouver la première partie du message]" #: ../src/mailbox.cc:817 #, c-format msgid "[This message has an unsupported content type: \"%s/%s\"]" msgstr "[Ce message possède un contenu de type non supporté: \"%s/%s\"]" #: ../src/mailbox.cc:1219 #, c-format msgid "" "Error when compiling a regular expression.\n" "Regular expression: %s\n" "Error message: %s" msgstr "" #. Otherwise: Ignore it and print error message #: ../src/header.cc:147 #, c-format msgid "Can't sort mails by \"%s\"" msgstr "Impossible de trier les mails avec \"%s\"" #: ../src/socket.cc:116 ../src/socket.cc:175 ../src/socket.cc:233 #: ../src/socket.cc:242 #, c-format msgid "[%d] Unable to connect to %s on port %d" msgstr "[%d] Impossible de se connecter à %s via le port %d" #: ../src/socket.cc:218 #, c-format msgid "[%d] Failed to load certificate (%s) for %s" msgstr "[%d] Impossible de charger le certificat (%s) pour %s" #: ../src/socket.cc:255 #, c-format msgid "[%d] Cannot identify remote host (%s on port %d)" msgstr "[%d] Impossible d'identifier l'hôte (%s sur le port %d)" #: ../src/socket.cc:340 #, c-format msgid "[%d] Unable to write to %s on port %d" msgstr "[%d] Impossible d'écrire à %s sur le port %d" #: ../src/socket.cc:411 #, c-format msgid "[%d] Unable to read from %s on port %d" msgstr "[%d] Impossible de lire depuis %s sur le port %d" #: ../src/socket.cc:434 #, c-format msgid "Could not set read timeout on socket: %s" msgstr "Impossible de régler le délai sur la socket: %s" #: ../src/file.cc:97 #, c-format msgid "Cannot open %s." msgstr "Impossible d'ouvrir %s" #: ../src/imap4.cc:459 msgid "[This message has no part with a supported content type]" msgstr "[Ce message de possède pas de partie avec un contenu lisible]" #: ../src/imap4.cc:822 #, c-format msgid "[%d] Unable to select folder %s on host %s" msgstr "[%d] Impossible de sélectionner le répertoire %s sur l'hôte %s" #: ../src/imap4.cc:910 #, c-format msgid "[%d] Unable to get acknowledgment from %s on port %d" msgstr "[%d] Impossible de serrer la main à %s sur le port %d" #: ../src/imap4.cc:969 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response or acknowledgment" msgstr "" "[%d] Le serveur n'a pas envoyé la réponse non taggée \"%s\" ni l'acquitement." #: ../src/imap4.cc:1022 #, c-format msgid "[%d] Server doesn't send untagged \"%s\" response" msgstr "[%d] Le serveur n'a pas envoyé la réponse non taggée \"%s\"" #. see RFC 3501 7.1.5 #: ../src/imap4.cc:1578 #, c-format msgid "[%d] Server closes connection immediately:%s" msgstr "[%d] Le serveur a fermé immédiatement la connexion: %s" #. see RFC 3501 7.1.3 #: ../src/imap4.cc:1583 #, c-format msgid "[%d] Internal server failure or unknown error:%s" msgstr "[%d] Erreur interne sur le serveur ou alors erreur inconnue: %s" #. see RFC 3501 7.1.2 #: ../src/imap4.cc:1588 #, c-format msgid "[%d] Warning from server:%s" msgstr "[%d] Mise en garde du serveur: %s" #: ../src/maildir.cc:81 #, c-format msgid "Cannot open new mail directory (%s)" msgstr "Inpossible d'ouvrir le répertoire (%s)" #: ../src/pop.cc:150 #, c-format msgid "[%d] Empty password" msgstr "[%d] Mot de passe vide" #: ../src/pop.cc:509 #, c-format msgid "[%d] Error message from POP3 server:%s" msgstr "[%d] Message d'erreur du serveur POP3: %s" #: ../src/pop.cc:516 #, c-format msgid "[%d] Did not get a positive response from POP3 server" msgstr "[%d] Aucune réponse positive du serveur POP3" #: ../src/apop.cc:101 #, c-format msgid "" "[%d] Your pop server does not seem to accept apop protocol (no timestamp " "provided)" msgstr "" "[%d] Votre serveur ne semble pas accepter le protocol apop (pas de tampon)" #: ../src/apop.cc:122 #, c-format msgid "" "[%d] Problem with crypto that should have been detected at configure time" msgstr "" "[%d] Problème de cryptographie qui aurait du être détecté durant la " "configuration" #: ../src/options.cc:559 #, c-format msgid "Unknown option \"%s\"" msgstr "Option inconnue \"%s\"" #: ../src/options.cc:566 #, c-format msgid "Cannot set option \"%s\" to \"%s\"" msgstr "Impossible de mettre l'option \"%s\" à \"%s\"" #: ../src/options.cc:720 ../src/gui.cc:273 #, c-format msgid "Cannot find the specified widget (\"%s\") within xml structure (\"%s\")" msgstr "" "Impossible de trouver le widget spécifié (\"%s\") dans la structure xml (\"%s" "\")" #: ../src/gnubiff_options.cc:140 msgid "no mail" msgstr "Aucun courrier" #: ../src/gui.cc:195 #, c-format msgid "" "Cannot build the interface.\n" "\n" "Name: %s\n" "Path: %s\n" "\n" "Please make sure package has been installed correctly." msgstr "" "gnubiff ne peut pas charger son fichier interface.\n" "\n" "Nom: %s\n" "Chemin: %s\n" "Assurez vous que gnubiff a été installé correctement" #: ../src/gui.cc:381 msgid "GUI_connect requires working gmodule" msgstr "GUI_connect requiert la librairie gmodule" #: ../src/gui.cc:388 #, c-format msgid "Could not find signal handler '%s'." msgstr "Handler '%s' non trouvé." #: ../src/ui-applet.cc:217 msgid " unknown" msgstr "inconnu" #: ../src/ui-applet.cc:222 msgid " error" msgstr "erreur" #: ../src/ui-applet.cc:231 msgid " checking..." msgstr " consultation..." #: ../src/ui-preferences.cc:267 ../src/ui-popup.cc:183 msgid "Mailbox" msgstr "Boîte aux lettres" #. Column: TYPE #: ../src/ui-preferences.cc:281 ../src/ui-preferences.cc:363 msgid "Type" msgstr "Type" #: ../src/ui-preferences.cc:300 msgid "Status" msgstr "Status" #: ../src/ui-preferences.cc:315 msgid "Security" msgstr "Sécurité" #. Selection label #: ../src/ui-preferences.cc:327 ../src/ui-preferences.cc:686 msgid "No mailbox selected" msgstr "Pas de boîte aux lettres séléctionnée" #: ../src/ui-preferences.cc:355 msgid "Option" msgstr "Option" #: ../src/ui-preferences.cc:373 msgid "Value" msgstr "Valeur" #: ../src/ui-preferences.cc:609 msgid "_Start" msgstr "_Démarrer" #: ../src/ui-preferences.cc:615 ../ui/preferences.glade.h:77 msgid "_Stop" msgstr "_Stopper" #: ../src/ui-preferences.cc:626 ../src/ui-preferences.cc:633 msgid "Browse for a new mail image" msgstr "Chercher le fichier image" #: ../src/ui-authentication.cc:86 #, c-format msgid "Please enter your username and password for mailbox '%s'" msgstr "" "Entrez votre nom de login et votre mot de passe pour la boîte aux lettres '%" "s'" #: ../src/ui-certificate.cc:73 #, c-format msgid "Unable to verify the identity of %s as a trusted site.\n" msgstr "Impossible de vérifier que l'hôte %s est sûr.\n" #: ../src/ui-certificate.cc:74 #, c-format msgid "" "Either site's certificate is incomplete or you're connected to a site " "pretending to be %s, possibly to obtain your password" msgstr "" "Soit le certificat est incomplet ou bien vous êtes connecté à un site " "prétendant être %s vraisemblablement pour essayer d'obtenir votre mot de " "passe" #: ../src/ui-properties.cc:123 ../src/ui-properties.cc:150 msgid "Autodetect" msgstr "Autodetection" #: ../src/ui-properties.cc:124 msgid "File or Folder" msgstr "Fichier ou Répertoire" #: ../src/ui-properties.cc:152 msgid "User/Pass" msgstr "Utilisateur/Mot de Passe" #: ../src/ui-properties.cc:154 msgid "Encrypted User/Pass (apop)" msgstr "Utilisateur/Mot de pass encrypté (apop)" #: ../src/ui-properties.cc:158 msgid "SSL with certificate" msgstr "SSL avec certificat" #: ../src/ui-properties.cc:317 msgid "Browse for a file or folder" msgstr "Chercher une fichier ou un répertoire" #: ../src/ui-properties.cc:323 ../ui/properties.glade.h:5 msgid "Browse for a certificate file" msgstr "Chercher un certificat" #: ../src/ui-popup.cc:195 msgid "From" msgstr "De" #: ../src/ui-popup.cc:201 msgid "Subject" msgstr "Sujet" #: ../src/ui-popup.cc:207 msgid "Date" msgstr "Date" #. Create error message #: ../src/support.cc:321 msgid "" "You just found an unknown internal error. Please send a detailed bug report " "to \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Additional information:\n" msgstr "" "Vous venez de trouver une erreur interne. Veuillez s'il vous plaît envoyer " "un rapport de bug à \"gnubiff-bugs@lists.sourceforge.net\".\n" "\n" "Information additionelle:\n" #: ../src/GNOME_gnubiffApplet.xml.h:1 msgid "Info" msgstr "info" #: ../src/GNOME_gnubiffApplet.xml.h:2 ../ui/applet-gtk.glade.h:14 msgid "Mark mailboxes read" msgstr "Marquer le courrier comme étant lu" #: ../src/GNOME_gnubiffApplet.xml.h:3 msgid "Preferences..." msgstr "Préférences..." #: ../src/GNOME_gnubiffApplet.xml.h:4 msgid "Run command" msgstr "Exécuter la commande" #: ../src/GNOME_gnubiffApplet.server.in.h:1 msgid "Mail notification program" msgstr "Programme de notification de courrier" #: ../src/GNOME_gnubiffApplet.server.in.h:2 ../ui/applet-gtk.glade.h:17 msgid "gnubiff" msgstr "gnubiff" #: ../ui/applet-gtk.glade.h:1 msgid "About" msgstr "A propos" #: ../ui/applet-gtk.glade.h:2 msgid "Gnubiff is a mail notification program." msgstr "Gnubiff est un programme de notification de courrier" #. See http://www.gnu.org /licenses/translations.html #: ../ui/applet-gtk.glade.h:4 #, fuzzy msgid "" "Gnubiff is part of the GNU project.\n" "It is released under the aegis of GNU.\n" "\n" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see http://www.gnu.org/licenses/.\n" "\n" "For an exception to the GNU General Public License for distributing gnubiff " "linked to the OpenSSL library see the README file." msgstr "" "Gnubiff fait partie du projet GNU\n" "Il est distribué sous l'égide de GNU\n" "\n" "Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon " "les termes de la Licence Publique Générale GNU publiée par la Free Software " "Foundation (version 2 ou bien toute autre version ultérieure choisie par " "vous).\n" "\n" "Ce programme est distribué car potentiellement utile, mais SANS AUCUNE " "GARANTIE, ni explicite ni implicite, y compris les garanties de " "commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la " "Licence Publique Générale GNU pour plus de détails.\n" "\n" "Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même " "temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software " "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-" "Unis.\n" #: ../ui/applet-gtk.glade.h:15 msgid "Start command" msgstr "Exécuter la commande" #: ../ui/applet-gtk.glade.h:16 msgid "_Quit" msgstr "_Quitter" #: ../ui/applet-gtk.glade.h:18 msgid "tooltip" msgstr "truc" #: ../ui/preferences.glade.h:1 msgid "Commands" msgstr "Commandes" #: ../ui/preferences.glade.h:2 msgid "Expert editing mode" msgstr "Mode éditeur expert" #: ../ui/preferences.glade.h:3 msgid "General" msgstr "Général" #: ../ui/preferences.glade.h:4 msgid "Headers" msgstr "Entêtes" #: ../ui/preferences.glade.h:5 msgid "Layout" msgstr "Aspect" #: ../ui/preferences.glade.h:6 msgid "Mailboxes" msgstr "Boîtes aux lettres" #: ../ui/preferences.glade.h:7 msgid "When new mail" msgstr "Si nouveau courrier" #: ../ui/preferences.glade.h:8 msgid "When no mail" msgstr "Absence de courrier" #: ../ui/preferences.glade.h:9 msgid "" " Gnubiff is part of the GNU project.\n" " It is released under the aegis of GNU." msgstr "" "Ce programme fait partie du projet GNU\n" "il est distribué sous l'égide de GNU." #: ../ui/preferences.glade.h:11 msgid "" "Developers can be contacted via gnubiff-" "devel@lists.sourceforge.net.\n" "Bugs should be reported to gnubiff-" "bugs@lists.sourceforge.net." msgstr "" "Les développeurs peuvent être contactés via gnubiff-devel@lists.sourceforge.net.\n" "Les bogues doivent etre reportés à gnubiff-" "bugs@lists.sourceforge.net" #: ../ui/preferences.glade.h:13 msgid "" "Here is a list of those people, which translated gnubiff into " "different languages (translators of previous versions are marked with an " "asterisk):" msgstr "" "Voici la liste des personnes ayant participé à la traduction de " "gnubiff dans les différents langages (les traducteurs des versions " "précédentes sont marqués d'un astérisque):" #: ../ui/preferences.glade.h:14 msgid "" "Many people have further contributed to gnubiff by\n" " - reporting problems\n" " - suggesting various improvements\n" " - submitting actual code\n" "Here is a list of these people:" msgstr "" "Beaucoup de personnes ont contribué à gnubiff en:\n" " - reportant des problèmes\n" " - suggérant des améliorations\n" " - soumettant du code\n" "Voici une liste de ces personnes:" #: ../ui/preferences.glade.h:19 msgid "Applet geometry" msgstr "Géométrie de l'applet" #: ../ui/preferences.glade.h:20 msgid "Applet or Biff" msgstr "Appet ou Biff" #: ../ui/preferences.glade.h:21 msgid "B_rowse..." msgstr "Che_rcher..." #: ../ui/preferences.glade.h:22 msgid "Browse for an image file" msgstr "Chercher une image" #: ../ui/preferences.glade.h:23 msgid "Contributors" msgstr "Contributeurs" #: ../ui/preferences.glade.h:24 msgid "Credits" msgstr "Remerciements" #: ../ui/preferences.glade.h:25 msgid "Developers" msgstr "Développeurs" #: ../ui/preferences.glade.h:26 msgid "Edit option" msgstr "Editer l'option" #: ../ui/preferences.glade.h:27 msgid "Expert" msgstr "Expert" #: ../ui/preferences.glade.h:28 msgid "Image filename" msgstr "Image" #: ../ui/preferences.glade.h:29 msgid "List all options." msgstr "Liste des options" #: ../ui/preferences.glade.h:30 msgid "" "List of options, their type and current values. To edit an option " "doubleclick on its value." msgstr "" "Liste des options, types et valeurs courantes. Pour éditer une option, " "double-cliquez sur sa valeur." #: ../ui/preferences.glade.h:31 msgid "Mailboxes" msgstr "Boîtes aux lettres" #: ../ui/preferences.glade.h:32 msgid "Maintainers" msgstr "Mainteneurs" #: ../ui/preferences.glade.h:33 msgid "Maximum number of headers to display" msgstr "Nombre maximum de courriers à afficher" #: ../ui/preferences.glade.h:34 ../ui/popup.glade.h:4 msgid "Popup" msgstr "Popup" #: ../ui/preferences.glade.h:35 msgid "Popup geometry" msgstr "Géométrie du popup" #: ../ui/preferences.glade.h:36 msgid "" "Search for those (displayed) options that contain the string in the text " "entry." msgstr "Recherche les options contenant la chaîne spécifiée." #: ../ui/preferences.glade.h:37 msgid "Set to default value" msgstr "Mettre la valeur par défaut" #: ../ui/preferences.glade.h:38 msgid "Show _image:" msgstr "Afficher l'_image" #: ../ui/preferences.glade.h:39 msgid "Show _text:" msgstr "Afficher le _texte" #: ../ui/preferences.glade.h:40 msgid "Show i_mage:" msgstr "Afficher l'i_mage" #: ../ui/preferences.glade.h:41 msgid "Show t_ext:" msgstr "Afficher le t_exte" #: ../ui/preferences.glade.h:42 msgid "String to be searched for." msgstr "Chaîne à chercher." #: ../ui/preferences.glade.h:44 #, no-c-format msgid "" "Text to display (%d and %D is the number of new messages, %d is zero " "padded). Pango markup may be used." msgstr "" "Texte à afficher (%d et %D sont les nombres de nouveaux courriers, %d est " "justifié avec des zéros). Le marquage type Pango peut être utilisé." #: ../ui/preferences.glade.h:45 msgid "The command to run when new mail arrives" msgstr "Commande à exécuter lorsqu'il y des nouveaux courriers" #: ../ui/preferences.glade.h:46 msgid "The command to run when the icon is double-clicked" msgstr "Commande à exécuter pour un double-click" #. The option's descriptions are in English only! This may be included in a translation of this text. #: ../ui/preferences.glade.h:48 msgid "" "The editing dialog for all options that gnubiff uses internally can be " "enabled here. So it is possible to change the value of options for which no " "gui widgets are provided. A short description for each option is provided.\n" "Warning: Changing these options may cause gnubiff to act not properly " "or result in security problems." msgstr "" "L'éditeur d'options que gnubiff utilise de façon interne peut être activé " "ici de façon à pouvoir changer certaines options \"cachées\". Une coure " "description de chaque option est fournie. AttentionChanger ces " "options peut provoquer des erreurs ou bien des problèmes de sécurité." #: ../ui/preferences.glade.h:50 msgid "The font to use to display information" msgstr "Fonte à utiliser" #: ../ui/preferences.glade.h:51 msgid "Time to display popup window" msgstr "Durée d'affichage de la fenêtre popup" #: ../ui/preferences.glade.h:52 msgid "Toggle option" msgstr "Basculer l'option" #: ../ui/preferences.glade.h:53 msgid "Translators" msgstr "Traducteurs" #: ../ui/preferences.glade.h:54 msgid "Use _decoration" msgstr "Utiliser la _décoration" #: ../ui/preferences.glade.h:55 msgid "Use _geometry:" msgstr "Utiliser la _géométrie" #: ../ui/preferences.glade.h:56 msgid "When _double-clicked:" msgstr "En cas de _double-click" #: ../ui/preferences.glade.h:57 msgid "When _new mail:" msgstr "_Nouveau courrier:" #: ../ui/preferences.glade.h:58 msgid "Whether options can be edited in expert mode" msgstr "Est ce que les options peuvent êtreéditées en mode expert" #: ../ui/preferences.glade.h:59 msgid "Whether to display a text" msgstr "Afficher un texte ou non" #: ../ui/preferences.glade.h:60 msgid "Whether to display an image" msgstr "Afficher une image ou non" #: ../ui/preferences.glade.h:61 msgid "Whether to display the popup window" msgstr "Afficher la fenêtre des entêtes ou non" #: ../ui/preferences.glade.h:62 msgid "Whether to restrict number of displayed headers" msgstr "Restreindre le nombre d'entêtes ou non" #: ../ui/preferences.glade.h:63 msgid "Whether to show an image" msgstr "Afficher une image ou non" #: ../ui/preferences.glade.h:64 msgid "" "Whether to show the expert tab. Note: Disabling this option can only be " "reversed by editing the config file manually!" msgstr "" "Afficher le mode expert. Note: Enlever ce mode ne peut se fait qu'en éditant " "le fichier de configuration manuellement." #: ../ui/preferences.glade.h:65 msgid "Whether to use format for header" msgstr "Utiliser un format d'entêtes ou non" #: ../ui/preferences.glade.h:66 msgid "Whether to use geometry" msgstr "Utiliser la géométrie ou non" #: ../ui/preferences.glade.h:67 msgid "Whether to use window manager decoration" msgstr "Fenêtre des entêtes décorée ou non" #: ../ui/preferences.glade.h:68 msgid "[sender max size]:[subject max size]:[date max size]" msgstr "" "[taille max champs expéditeur]:[taille max champs sujet]:[taille max champs " "date]" #: ../ui/preferences.glade.h:69 ../ui/properties.glade.h:21 msgid "_Browse..." msgstr "_Chercher..." #: ../ui/preferences.glade.h:70 msgid "_Display for" msgstr "_Affichage" #: ../ui/preferences.glade.h:71 msgid "_Edit options in expert mode" msgstr "_Editer les options en mode expert" #: ../ui/preferences.glade.h:72 msgid "_Font:" msgstr "_Fonte:" #: ../ui/preferences.glade.h:73 msgid "_Format:" msgstr "_Format:" #: ../ui/preferences.glade.h:74 msgid "_Restrict collected mail to" msgstr "_Restreindre le nombre de mail collectés à" #: ../ui/preferences.glade.h:75 msgid "_Restrict number to" msgstr "_Restreindre le nombre à" #: ../ui/preferences.glade.h:76 msgid "_Show expert tab" msgstr "_Afficher le mode expert" #: ../ui/preferences.glade.h:78 msgid "gnubiff preferences" msgstr "gnubiff préferences" #: ../ui/preferences.glade.h:79 msgid "header(s)" msgstr "entête(s)" #: ../ui/preferences.glade.h:80 msgid "mail(s)" msgstr "mèl(s)" #: ../ui/preferences.glade.h:81 msgid "second(s)" msgstr "seconde(s)" #: ../ui/properties.glade.h:1 msgid "_Details" msgstr "_Détails" #: ../ui/properties.glade.h:2 msgid "A_ddress:" msgstr "A_dresse:" #: ../ui/properties.glade.h:3 msgid "Aut_hentication:" msgstr "Aut_hentification:" #: ../ui/properties.glade.h:4 msgid "Bro_wse..." msgstr "Che_rcher..." #: ../ui/properties.glade.h:6 msgid "Cer_tificate:" msgstr "Cer_tificat:" #: ../ui/properties.glade.h:7 msgid "Certificate filename" msgstr "Fichier certificat" #: ../ui/properties.glade.h:8 msgid "Connection port to connect to server" msgstr "Port de connexion au serveur" #: ../ui/properties.glade.h:9 msgid "Connection:" msgstr "Connexion:" #: ../ui/properties.glade.h:10 msgid "Dela_y:" msgstr "Déla_i:" #: ../ui/properties.glade.h:11 msgid "Mailbox folder" msgstr "Répertoire de boîtes aux lettres" #: ../ui/properties.glade.h:12 msgid "Mailbox properties" msgstr "Propriété de la boîte aux lettres" #: ../ui/properties.glade.h:13 msgid "Name of the mailbox" msgstr "Nom de la boîte aux lettres" #: ../ui/properties.glade.h:14 msgid "Other connection port" msgstr "Autre port de connexion" #: ../ui/properties.glade.h:15 msgid "Other mailbox folder" msgstr "Autre répertoire" #: ../ui/properties.glade.h:16 msgid "Standard connection port" msgstr "Port de connexion standard" #: ../ui/properties.glade.h:17 msgid "Standard mailbox folder" msgstr "Répertoire standard" #: ../ui/properties.glade.h:18 msgid "" "The amount of time to wait between mail checks or between retries when " "connection is lost" msgstr "" "Durée d'attente entre deux vérifications ou deux tentatives en cas d'échec" #: ../ui/properties.glade.h:19 msgid "Your password on the mail server" msgstr "Votre mot de passe sur le seveur" #: ../ui/properties.glade.h:20 msgid "Your username on the mail server" msgstr "Votre nom d'utilisateur sur le serveur" #: ../ui/properties.glade.h:22 msgid "_Mailbox:" msgstr "_Boîte aux lettres:" #: ../ui/properties.glade.h:23 msgid "_Name:" msgstr "_Nom:" #: ../ui/properties.glade.h:24 ../ui/authentication.glade.h:4 msgid "_Password:" msgstr "Mot de _passe" #: ../ui/properties.glade.h:25 msgid "_Type:" msgstr "_Type:" #: ../ui/properties.glade.h:26 ../ui/authentication.glade.h:5 msgid "_Username:" msgstr "_Utilisateur:" #: ../ui/properties.glade.h:27 msgid "_other" msgstr "_autre:" #: ../ui/properties.glade.h:28 msgid "file or folder or hostname" msgstr "fichier ou répertoire ou hôte" #: ../ui/properties.glade.h:29 msgid "minutes" msgstr "minutes" #: ../ui/properties.glade.h:30 msgid "othe_r" msgstr "autre" #: ../ui/properties.glade.h:31 msgid "seconds" msgstr "secondes" #: ../ui/properties.glade.h:32 msgid "stan_dard" msgstr "stan_dard" #: ../ui/properties.glade.h:33 msgid "stand_ard" msgstr "stand_ard" #: ../ui/authentication.glade.h:1 msgid "Authentication" msgstr "Authentification" #: ../ui/authentication.glade.h:2 msgid "Your password on the server" msgstr "Votre mot de passe sur le seveur" #: ../ui/authentication.glade.h:3 msgid "Your username on the server" msgstr "Votre nom d'utilisateur sur le serveur" #: ../ui/certificate.glade.h:1 msgid "Address" msgstr "Adresse" #: ../ui/certificate.glade.h:2 msgid "Issued To" msgstr "Fait pour" #: ../ui/certificate.glade.h:3 msgid "Accept" msgstr "Accepter" #: ../ui/certificate.glade.h:4 msgid "Cannot certify server" msgstr "Ompossible de certifier le serveur" #: ../ui/certificate.glade.h:5 msgid "Certificate details" msgstr "Détails du certificat" #: ../ui/certificate.glade.h:6 msgid "Common Name" msgstr "Nom commun" #: ../ui/certificate.glade.h:7 msgid "Country" msgstr "Pays" #: ../ui/certificate.glade.h:8 msgid "Locality" msgstr "Ville" #: ../ui/certificate.glade.h:9 msgid "Organization" msgstr "Organisation" #: ../ui/certificate.glade.h:10 msgid "Organization Unit" msgstr "Unité de l'organisation" #: ../ui/certificate.glade.h:11 msgid "State or Province" msgstr "Etat ou Province" #: ../ui/popup.glade.h:1 msgid "Date" msgstr "Date" #: ../ui/popup.glade.h:2 msgid "From" msgstr "De" #: ../ui/popup.glade.h:3 msgid "Subject" msgstr "Sujet" #: ../ui/popup.glade.h:5 msgid "mail content" msgstr "contenu du mèl" #~ msgid "About gnubiff" #~ msgstr "A propos de gnubiff" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "New mail" #~ msgstr "Nouveau courrier" #~ msgid "No mail" #~ msgstr "Aucun courrier" #~ msgid "Applet" #~ msgstr "Applet" #~ msgid "00" #~ msgstr "00" #~ msgid "Text to display" #~ msgstr "Texte à afficher" #~ msgid "Cannot find new mail directory (%s)" #~ msgstr "Impossible de trouver le répertoire (%s)" gnubiff-2.2.16/Makefile.am0000644000175000017500000000054712474422124012207 00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = src po doc ui art sound man1 EXTRA_DIST = \ config/intltool-update.in \ config/intltool-extract.in \ config/intltool-merge.in \ config/gnubiff.spec.in \ THANKS \ LICENSE DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update \ po/.intltool-merge-cache gnubiff-2.2.16/INSTALL0000644000175000017500000002203012474422124011173 00000000000000Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gnubiff-2.2.16/LICENSE0000644000175000017500000010451312474422124011156 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS 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 state 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) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . gnubiff-2.2.16/THANKS0000644000175000017500000000305612474422124011064 00000000000000gnubiff THANKS file Authors: -------- gnubiff has originally been written by Nicolas Rougier Developers: ----------- Nicolas Rougier Robert Sowada Maintainers: ------------ Tim Bishop Roland Stigge Translators: ------------ Wallner Adam (hu) Victor Alonso (es) Elros Cyriatan (nl) Stefano Fabri (it) Gunther Furtado (pt_BR) Nicols Lichtmaler (es) Arif E. Nugroho (id) Daniel Nylander (sv) Erwin Poeze (nl) Michel Robitaille (fr) Nicolas Rougier (fr) Clytie Siddall (vi) David Smeringe (sv) Robert Sowada (de) Roland Stigge (de) Josef Vybiral (cs) Various contributors: --------------------- Wallner Adam Fabian Affolter Craig Agricola Adam Benjamin Josh Berdine Philippe Berger Wade Berrier Dennis Bjorklund Jan Blunck Sebastian Breier Alexis S. L. Carvalho Eric Cooper Felipe Csaszar John Ellson Nicolas Evrard Greg Fenton Byron Foster Grzegorz Gotawski Bilal Hawa Ryan Hayle Jonathan Hitchcock Samuel Hym Satou Kazuhito Chris Kemp Earl Killian Andre Klitzing Marc-Jano Knopp Paul Kuliniewicz Jean-Yves Lefort Michel Leunen Jason Lowdermilk Sascha Ludecke Calum Mackay Julio Mendoza Martin Michlmayr Michael Moellney Sophie Morel David Mosberger Neil Muller Eugene Ossintsev Jan Outrata Josh Parsons Pete Phillips Christian Probst Jakub Raczkowski Reid Rivenburgh Hans-Ulrich Schaefer Andy Schofield Achim Settelmeier Phil Shapiro Clytie Siddall Antoine Sirinelli Erik Sittman Barry Skidmore Chris Snell Blaise Tarr Theodore Tegos Iulian Tocu Richard Torkar Bernhard Valenti Frederik Vanderstraeten Dries Verachtert Hubert Verstraete Maik Wachsmuth Suzan Wassman Cai Yu gnubiff-2.2.16/ui/0000775000175000017500000000000012474430471010650 500000000000000gnubiff-2.2.16/ui/certificate.ui0000644000175000017500000012322512474422124013410 00000000000000 Cannot certify server GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False False False gnubiff.png True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True 0.5 0.5 1 1 12 12 12 12 True False 12 True 2 2 False 6 12 True False False GTK_JUSTIFY_LEFT True False 0 0.5 0 0 1 2 0 1 fill True gtk-dialog-warning 6 0.5 0 0 0 0 1 0 2 fill True True False 0 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 16 0 True 8 4 False 6 0 True Common Name False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 1 2 1 2 fill True Organization False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 1 2 2 3 fill True Organization Unit False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 1 2 3 4 fill 20 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 4 fill 20 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 2 3 1 4 fill True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 3 4 1 2 True <b>Issued To</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 4 0 1 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 3 4 2 3 fill True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 3 4 3 4 fill True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 3 4 5 6 fill True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 3 4 6 7 fill True <b>Address</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 4 4 5 fill True Country False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 1 2 5 6 fill True Locality False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 1 2 7 8 fill 20 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 2 3 5 8 fill fill 20 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 5 8 fill fill True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 3 4 7 8 fill True State or Province False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 1 2 6 7 fill True Certificate details False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 1 2 1 2 0 True True True GTK_BUTTONBOX_END 12 True True True gtk-cancel True GTK_RELIEF_NORMAL True True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-ok 4 0.5 0.5 0 0 0 False False True Accept True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False True gnubiff-2.2.16/ui/popup.ui0000644000175000017500000002536312474422124012275 00000000000000 aaaaa gtk-close menu_message_hide Hide popup gtk-delete menu_message_delete Delete this message gtk-undelete menu_message_undelete Undelete this message Popup False gnubiff.png True 3 0 True True GTK_POLICY_NEVER GTK_POLICY_NEVER True True GDK_BUTTON_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK False False mail content False GTK_WIN_POS_MOUSE gnubiff.png GDK_WINDOW_TYPE_HINT_DIALOG True 3 0 True True 1 True 1 True 3 2 12 True 0 <small><b>From</b></small> True GTK_FILL True 0 <small><b>Subject</b></small> True 1 2 GTK_FILL True 0 <small><b>Date</b></small> True 2 3 GTK_FILL True 0 from True 1 2 True 0 subject True 1 2 1 2 True 0 date True 1 2 2 3 512 True True False GTK_WRAP_WORD 2 False False textbuffer1 1 gnubiff-2.2.16/ui/gnubiff.desktop.in0000644000175000017500000000042712474422124014205 00000000000000# see http://standards.freedesktop.org/desktop-entry-spec/latest/ [Desktop Entry] Type=Application Version=1.0 Name=Gnubiff _GenericName=Mail notification program _Comment=Gnubiff is a mail notification program. Icon=gnubiff Exec=gnubiff Terminal=false Categories=Network;Email; gnubiff-2.2.16/ui/applet-gtk.ui0000644000175000017500000001443412474422124013177 00000000000000 gtk-preferences menu_preferences gtk-execute menu_start_command Start command gtk-remove menu_mark_mails Mark mailboxes read gtk-dialog-info menu_about About gtk-quit menu_quit _Quit tooltip gnubiff False gnubiff.png True True 0 GTK_SHADOW_ETCHED_OUT 64 64 True 64 64 True tux-awake.png 64 64 True 1 00/00 GDK_WINDOW_TYPE_HINT_NORMAL © 2000-2011 Nicolas Rougier © 2004-2011 Robert Sowada Gnubiff is a mail notification program. http://gnubiff.sourceforge.net/ Gnubiff is part of the GNU project. It is released under the aegis of GNU. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. For an exception to the GNU General Public License for distributing gnubiff linked to the OpenSSL library see the README file. tux-big.png True False GTK_PACK_END gnubiff-2.2.16/ui/Makefile.am0000664000175000017500000000046612474422124012626 00000000000000desktopdir = $(datadir)/applications desktop_in_files = gnubiff.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ uidir = $(pkgdatadir) dist_ui_DATA = $(wildcard *.ui) EXTRA_DIST = gnubiff.desktop.in CLEANFILES = $(desktop_DATA) gnubiff-2.2.16/ui/Makefile.in0000664000175000017500000003443712474430241012643 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ui DIST_COMMON = $(dist_ui_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(uidir)" DATA = $(desktop_DATA) $(dist_ui_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ desktopdir = $(datadir)/applications desktop_in_files = gnubiff.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) uidir = $(pkgdatadir) dist_ui_DATA = $(wildcard *.ui) EXTRA_DIST = gnubiff.desktop.in CLEANFILES = $(desktop_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) install-dist_uiDATA: $(dist_ui_DATA) @$(NORMAL_INSTALL) @list='$(dist_ui_DATA)'; test -n "$(uidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(uidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(uidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \ done uninstall-dist_uiDATA: @$(NORMAL_UNINSTALL) @list='$(dist_ui_DATA)'; test -n "$(uidir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(uidir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(uidir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-desktopDATA install-dist_uiDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-desktopDATA uninstall-dist_uiDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-desktopDATA install-dist_uiDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-desktopDATA uninstall-dist_uiDATA @INTLTOOL_DESKTOP_RULE@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/ui/properties.ui0000644000175000017500000020301112474422124013312 00000000000000 65535 0 10 1 10 0 1440 0 10 1 10 0 59 0 10 1 10 5 Mailbox properties GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER_ON_PARENT False False False gnubiff.png True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True 0.5 0.5 1 1 12 12 12 12 True False 12 True 6 2 False 6 12 True _Name: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 name_entry 0 1 0 1 fill True A_ddress: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 address_entry 0 1 2 3 fill True Name of the mailbox True True True 0 True * False 1 2 0 1 True _Type: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 fill True 0.5 0.5 1 1 0 0 0 0 1 2 1 2 fill fill True _Username: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 username_entry 0 1 3 4 fill True Your username on the mail server True True True 0 True * False 1 2 3 4 True _Password: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 password_entry 0 1 4 5 fill True Your password on the mail server True True False 0 True * False 1 2 4 5 True False 12 True file or folder or hostname True True True 0 True * False 0 True True True True _Browse... True GTK_RELIEF_NORMAL True 0 False False 1 2 2 3 fill fill True 0.5 0.5 1 1 6 0 0 0 True True False 0 True False 0 True 0.5 0.5 1 1 6 0 0 0 True 2 3 False 6 12 True Connection: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill fill True Connection port to connect to server True 1 0 False GTK_UPDATE_ALWAYS False False adjustment1 2 3 1 2 fill True Standard connection port True stan_dard True GTK_RELIEF_NORMAL True True False True 1 2 0 1 True Other connection port True _other True GTK_RELIEF_NORMAL True False False True standard_port_radio 1 2 1 2 True (0) False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 2 3 0 1 fill 0 False False True 0.5 0.5 1 1 6 0 0 0 True 1 2 False 6 12 True 0.5 0.5 1 1 0 0 0 0 1 2 0 1 fill True Aut_hentication: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill fill 0 True True True 0.5 0.5 1 1 6 0 0 0 True 1 3 False 6 12 True Certificate filename True True True 0 True * False 1 2 0 1 True Browse for a certificate file True Bro_wse... True GTK_RELIEF_NORMAL True 2 3 0 1 fill fill True Cer_tificate: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 certificate_entry 0 1 0 1 fill fill 0 True True True 0.5 0.5 1 1 6 0 0 0 True 1 5 False 6 12 True minutes True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 seconds_spin 2 3 0 1 True seconds False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 4 5 0 1 True The amount of time to wait between mail checks or between retries when connection is lost True 1 0 False GTK_UPDATE_ALWAYS False False adjustment2 1 2 0 1 fill True The amount of time to wait between mail checks or between retries when connection is lost True 1 0 False GTK_UPDATE_ALWAYS False False adjustment3 3 4 0 1 fill True Dela_y: True True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 minutes_spin 0 1 0 1 fill fill 0 True True True 0.5 0.5 1 1 6 0 0 0 True 2 3 False 6 12 True _Mailbox: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 standard_mailbox_radio 0 1 0 1 fill fill True Mailbox folder True True True 0 True * False 2 3 1 2 True Other mailbox folder True othe_r True GTK_RELIEF_NORMAL True False False True 1 2 1 2 True Standard mailbox folder True stand_ard True GTK_RELIEF_NORMAL True True False True other_mailbox_radio 1 2 0 1 0 True True True <b>_Details</b> True True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 2 5 6 fill 0 True True True 0.5 0.5 1 1 6 0 0 0 True GTK_BUTTONBOX_END 12 True True True gtk-cancel True GTK_RELIEF_NORMAL True True True True gtk-apply True GTK_RELIEF_NORMAL True True True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True gnubiff-2.2.16/ui/authentication.ui0000644000175000017500000002706012474422124014145 00000000000000 Authentication GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False gnubiff.png True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True 0.5 0.5 1 1 12 12 12 12 True False 12 True 3 3 False 6 12 True _Username: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 username_entry 1 2 1 2 fill True _Password: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 password_entry 1 2 2 3 fill True Your username on the server True True True 0 True * False 2 3 1 2 True Your password on the server True True False 0 True * False 2 3 2 3 True False False GTK_JUSTIFY_LEFT True False 0 0.5 0 0 1 3 0 1 fill True gtk-dialog-authentication 6 0.5 0 0 0 0 1 0 3 fill 0 False True True GTK_BUTTONBOX_END 12 True True True gtk-cancel True GTK_RELIEF_NORMAL True True True True gtk-ok True GTK_RELIEF_NORMAL True 0 False False gnubiff-2.2.16/ui/preferences.ui0000644000175000017500000047622412474422124013441 00000000000000 10000 1 10 1 10 100 100 0 10 1 10 50 100 0 10 1 10 5 Wallner Ádám, Fabian Affolter, Craig Agricola, Adam Benjamin, Josh Berdine, Philippe Berger, Wade Berrier, Dennis Bjorklund, Jan Blunck, Sebastian Breier, Alexis S. L. Carvalho, Eric Cooper, Felipe Csaszar, Tomáš Dohnal, John Ellson, Nicolas Évrard, Greg Fenton, Byron Foster, Grzegorz Gotawski, Bilal Hawa, Ryan Hayle, Jonathan Hitchcock, Samuel Hym, Satou Kazuhito, Chris Kemp, Earl Killian, André Klitzing, Marc-Jano Knopp, Ray Kohler, Paul Kuliniewicz, Jean-Yves Lefort, Michel Leunen, Bogdan Lisovich, Jason Lowdermilk, Sascha Ludecke, Calum Mackay, Julio Mendoza, Martin Michlmayr, Michael Moellney, Sophie Morel, David Mosberger, Neil Muller, Eugene Ossintsev, Jan Outrata, Josh Parsons, Pete Phillips, Christian Probst, Jakub Raczkowski, Reid Rivenburgh, Hans-Ulrich Schaefer, Andy Schofield, Achim Settelmeier, Phil Shapiro, Clytie Siddall, Antoine Sirinelli, Erik Sittman, Barry Skidmore, Chris Snell, Blaise Tarr, Theodore Tegos, Iulian Tocu, Richard Torkar, Bernhard Valenti, Jonathan Velleuer, Frederik Vanderstraeten, Dries Verachtert, Hubert Verstraete, Maik Wachsmuth, Suzan Wassman, Cai Yu, Bas Zoetekouw gtk-revert-to-saved menu_option_settodefaultvalue Set to default value gtk-edit menu_option_toggleoption Toggle option gtk-edit menu_option_editoption Edit option gnubiff preferences False GTK_WIN_POS_CENTER gnubiff.png True True 12 12 12 True True False True 12 12 12 12 True 9 4 12 6 True 12 True True _Restrict collected mail to True True False False True True adjustment1 1 False 1 True 0 messages 2 1 4 1 2 GTK_FILL 4 True 0 9 GTK_FILL GTK_FILL True True The command to run when the icon is double-clicked * 2 4 8 9 True True The command to run when new mail arrives * 2 4 7 8 True True When _new mail: True True 1 2 7 8 GTK_FILL True True GTK_POLICY_NEVER GTK_POLICY_AUTOMATIC GTK_SHADOW_IN 100 True True GDK_BUTTON_PRESS_MASK 1 4 3 4 GTK_EXPAND | GTK_SHRINK | GTK_FILL GTK_EXPAND | GTK_SHRINK | GTK_FILL True 1 4 4 5 GTK_FILL True 12 True 0 <b>Commands</b> True 4 6 7 True 12 True 0 <b>Mailboxes</b> True 4 2 3 GTK_FILL GTK_FILL True 0 <b>General</b> True 4 GTK_FILL True True When _double-clicked: True True 1 2 8 9 GTK_FILL True True True True gtk-add True True True True gtk-remove True 1 True True True gtk-properties True 2 1 4 5 6 GTK_SHRINK | GTK_FILL True Mailboxes True Notebook False True 12 12 12 12 True 13 4 12 6 20 True True Whether to appear on all desktops Be _sticky True True 1 2 5 6 GTK_FILL True 0 11 13 GTK_FILL True 0 8 10 GTK_FILL True 0 5 7 GTK_FILL True 0 1 4 GTK_FILL 20 True True Whether to be always kept above all other windows _Keep above True True 1 2 6 7 GTK_FILL 20 True True Whether to appear in pagers Appear in _pagers True True 2 4 5 6 GTK_FILL True True Whether to use window manager decoration Use _decoration True True 1 4 2 3 GTK_FILL True True The font to use to display information True True 2 4 3 4 GTK_FILL True 0 _Font: True applet_font_button 1 2 3 4 GTK_FILL True 0 <b>Behavior</b> True 4 4 5 GTK_FILL True 12 True 0 <b>When no mail</b> True 4 10 11 GTK_FILL GTK_FILL True 12 True 0 <b>When new mail</b> True 4 7 8 GTK_FILL GTK_FILL True 0 <b>Layout</b> True 4 GTK_FILL True True Whether to display an image Show i_mage: True True 1 2 12 13 GTK_FILL True True Whether to display a text Show t_ext: True True 1 2 11 12 GTK_FILL True True Whether to show an image Show _image: True True 1 2 9 10 GTK_FILL True True Whether to display a text Show _text: True True 1 2 8 9 GTK_FILL True True Whether to use geometry Use _geometry: True True 1 2 1 2 GTK_FILL True True Applet geometry * 2 4 1 2 True True Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used. * 2 4 11 12 True True Browse for an image file B_rowse... True 3 4 12 13 GTK_FILL True True Image filename * 2 3 12 13 True True Text to display (%d and %D is the number of new messages, %d is zero padded). Pango markup may be used. * 2 4 8 9 True True Browse for an image file _Browse... True 3 4 9 10 GTK_FILL True True Image filename * 2 3 9 10 20 True True Whether to appear in pagers Appear in _taskbar True True 2 4 6 7 GTK_FILL True Applet True Notebook 1 False True 12 12 12 12 True 12 4 12 6 20 True True Whether to appear in pagers Appear in _pagers True True 2 4 6 7 GTK_FILL True True The font to use to display information True True 2 4 4 5 GTK_FILL 20 True True Whether to use window manager decoration Use _decoration True True 1 4 3 4 GTK_FILL True 0 _Font: True popup_font_button 1 2 4 5 GTK_FILL True True Whether to display the popup window _Display for True True 1 2 1 2 GTK_FILL GTK_FILL 4 True 0 6 8 GTK_FILL 4 True 0 1 5 GTK_FILL True 0 <b>Behavior</b> True 4 5 6 GTK_FILL 20 True True Whether to be always kept above all other windows _Keep above True True 1 2 7 8 GTK_FILL GTK_SHRINK 20 True True Whether to appear on all desktops Be _sticky True True 1 2 6 7 GTK_FILL True 12 True 0 <b>Headers</b> True 4 9 10 GTK_FILL True 0 <b>Layout</b> True 4 GTK_FILL GTK_FILL True True Whether to use geometry Use _geometry: True True 1 2 2 3 GTK_FILL GTK_FILL True 0 headers 3 4 10 11 GTK_FILL True True Maximum number of headers to display adjustment2 1 2 3 10 11 GTK_FILL True True Whether to restrict number of displayed headers _Restrict number to True True 1 2 10 11 GTK_FILL True True [sender max size]:[subject max size]:[date max size] * 2 4 11 12 True True Whether to use format for header _Format: True True 1 2 11 12 GTK_FILL True True Popup geometry * 2 4 2 3 True True Time to display popup window adjustment3 1 2 3 1 2 True 0 seconds 3 4 1 2 20 True True Whether to accept keyboard focus _Accept focus True True 1 4 8 9 GTK_FILL 4 True 0 10 11 GTK_FILL 4 True 0 11 12 GTK_FILL 4 True 0 8 9 GTK_FILL 20 True True Whether to appear in pagers Appear in _taskbar True True 2 4 7 8 GTK_FILL True Popup True Notebook 2 False True True True 12 12 12 12 True 4 2 12 6 12 True 0 1 4 GTK_FILL GTK_FILL True The editing dialog for all options that gnubiff uses internally can be enabled here. So it is possible to change the value of options for which no gui widgets are provided. A short description for each option is provided. <b>Warning:</b> Changing these options may cause gnubiff to act not properly or result in security problems. True True 1 2 1 2 GTK_FILL True True Whether to show the expert tab. Note: Disabling this option can only be reversed by editing the config file manually! _Show expert tab GTK_RELIEF_NONE True True 1 2 3 4 GTK_FILL True True Whether options can be edited in expert mode _Edit options in expert mode True True 1 2 2 3 GTK_FILL True 0 <b>Expert editing mode</b> True 2 GTK_FILL True 12 12 12 12 True 6 True 12 True True List all options. 2 gtk-new True False False True True String to be searched for. * 1 True True Search for those (displayed) options that contain the string in the text entry. 2 gtk-find True False False 2 False True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN True True List of options, their type and current values. To edit an option doubleclick on its value. 1 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN True True False GTK_WRAP_WORD 2 1 True Expert True 3 False True 12 24 True 1 2 True True 0 1 <span font_desc="24"><b>Gnubiff %v %c</b></span> True False False True 0 1 <small> Gnubiff is part of the GNU project. It is released under the aegis of GNU.</small> True False False 1 True 0 1 <small> © 2000-2011 Nicolas Rougier © 2004-2011 Robert Sowada</small> True False False 2 GTK_FILL True tux-big.png 1 2 GTK_FILL False True True True 12 3 2 12 3 True True 0 1 <small>Developers can be contacted via <span foreground="blue">gnubiff-devel@lists.sourceforge.net</span>.</small> <small>Bugs should be reported to <span foreground="blue">gnubiff-bugs@lists.sourceforge.net</span>.</small> True 2 2 3 True 1 <span foreground="blue" size="small">(rougier@loria.fr)</span> True 1 2 True 0 Nicolas Rougier True True 1 <span foreground="blue" size="small">(sowadart@gmx.de)</span> True 1 2 1 2 True 0 Robert Sowada True 1 2 True Developers True False True 12 2 2 12 3 True True 1 <span foreground="blue" size="small">(stigge@antcom.de)</span> True 1 2 1 2 True 1 <span foreground="blue" size="small">(tim@bishnet.net)</span> True 1 2 True 0 Tim Bishop <small><i>(FreeBSD)</i></small> True GTK_FILL True 0 Roland Stigge <small><i>(Debian)</i></small> True 1 2 GTK_FILL True Maintainers True 1 False True True True 5 <small>Here is a list of those people, which translated gnubiff into different languages (translators of previous versions are marked with an asterisk):</small> True True False False False False True True GTK_POLICY_NEVER True True 2 15 2 4 True True 1 <span foreground="blue" size="small">po@danielnylander.se</span> True True 1 2 7 8 GTK_FILL True True 1 <span foreground="blue" size="small">niqueco@hotmail.com</span> True True 1 2 5 6 GTK_FILL True 0 Daniel Nylander <small><i>(sv)</i></small> True 7 8 GTK_FILL True True 1 <span foreground="blue" size="small">furtadog@uol.com.br</span> True True 1 2 4 5 GTK_FILL True 0 Gunther Furtado <small><i>(pt_BR)</i></small> True 4 5 GTK_FILL True 0 Nicolas Lichtmaler <small><i>(es)</i></small> True 5 6 GTK_FILL True True 1 <span foreground="blue" size="small">bluefuture@email.it</span> True True 1 2 3 4 True 0 Stefano Fabri <small><i>(it)</i></small> True 3 4 True 0 Elros Cyriatan <small><i>(nl, *)</i></small> True 2 3 True True 1 <span foreground="blue" size="small">cyriatan@fastmail.fm</span> True True 1 2 2 3 True True 1 <span foreground="blue" size="small">vmalonso@telefonica.net</span> True True 1 2 1 2 True 0 Víctor Alonso <small><i>(es, *)</i></small> True 1 2 True True 1 <span foreground="blue" size="small">Wallner.Adam@hktv.hu</span> True True 1 2 True 0 Wallner Ádám <small><i>(hu)</i></small> True True 0 Josef Vybíral <small><i>(cs)</i></small> True 15 16 GTK_FILL True 0 Roland Stigge <small><i>(de, *)</i></small> True 14 15 GTK_FILL True 0 Robert Sowada <small><i>(de)</i></small> True 13 14 GTK_FILL True 0 David Smeringe <small><i>(sv, *)</i></small> True 12 13 GTK_FILL True 0 Clytie Siddall <small><i>(vi)</i></small> True 11 12 GTK_FILL True 0 Nicolas Rougier <small><i>(fr_FR)</i></small> True 10 11 GTK_FILL True 0 Michel Robitaille <small><i>(fr_CA, *)</i></small> True 9 10 GTK_FILL True True 1 <span foreground="blue" size="small">w.e.b@centrum.cz</span> True True 1 2 15 16 GTK_FILL True True 1 <span foreground="blue" size="small">stigge@antcom.de</span> True True 1 2 14 15 GTK_FILL True True 1 <span foreground="blue" size="small">sowadart@gmx.de</span> True True 1 2 13 14 GTK_FILL True True 1 <span foreground="blue" size="small">david.smeringe@telia.com</span> True True 1 2 12 13 GTK_FILL True True 1 <span foreground="blue" size="small">clytie@riverland.net.au</span> True True 1 2 11 12 GTK_FILL True True 1 <span foreground="blue" size="small">rougier@loria.fr</span> True True 1 2 10 11 GTK_FILL True True 1 <span foreground="blue" size="small">robitail@iro.umontreal.ca</span> True True 1 2 9 10 GTK_FILL True 0 Erwin Poeze <small><i>(nl)</i></small> True 8 9 GTK_FILL True True 1 <span foreground="blue" size="small">erwin.poeze@gmail.com</span> True True 1 2 8 9 GTK_FILL True 0 Arif E. Nugroho <small><i>(id)</i></small> True 6 7 GTK_FILL True True 1 <span foreground="blue" size="small">arif_endro@yahoo.com</span> True True 1 2 6 7 GTK_FILL 1 True Translators 2 False True 12 12 True 0 <small>Many people have further contributed to gnubiff by - reporting problems - suggesting various improvements - submitting actual code Here is a list of these people:</small> True False False True True GTK_POLICY_NEVER GTK_SHADOW_IN True True False GTK_WRAP_WORD 6 6 False textbuffer1 1 True Contributors True 3 False 1 True Credits True 4 False True 12 True True True True 0 0 True 2 True gtk-stop False False True _Stop True False False 1 True True True gtk-close True 1 False False 1 gnubiff-2.2.16/sound/0000775000175000017500000000000012474430471011363 500000000000000gnubiff-2.2.16/sound/mail.wav0000644000175000017500000003766612474422124012760 00000000000000RIFF?WAVEfmt ,,data?~~}{|{zzz|~~|{{|xtvvxwwxtupqonkinnmoorx}|wrojmmjcdjgdabcinjlorvy|}}tljg[VRJGSbov|~~~{nkuzun||zts}uk`WQE=ACHZlrypR=?ID:8GK72GZVUgwֽ{hXI2$%(,,+=TlѺybMIB60>@;BMVX`js}}}ɾ¹kB/0a߹V!F|ƪ~R(#*BfʷuK 7V̭_F9,.?Y|tZ>&  .Gkݺa,6lۼ_2 "5ZѩvaG2'$ 9_Լ~W4%Lqӿ`9+ 3KiЯw[J:<*  -Gx˻{Q8/ D{ٰp?  8jƞuR;:mү^@& +=Ycdyɤq\D64. .9OkǽxZ;-%-:L]lũqXB.  $:Pf²y{{uvrlcZ[^b`berzndils|zurhbfedhny~m`WUXY\beemvre[MC=::9=DMQT`szo`RJEGF;5XƉYSw[K@:~Ǎ/nɍEs7pi`lz\`ysdg}ldxxj_[n\mIzmsbtYpq|baj\kvg_||pjtuzxvzrz}`smRylKlkEZ2Hƶm4Que|mXO7|gϛ0>ܫ](@73̏*Bʹ>Bs5Sʂ<!qsRlJAyW?٣e5D̓|S.9Xyʍh~bAfHgnh?uqZ{d^ƤiUzd?TǭeWlLoeMumZkjezxtyvpmrrifmz|j]drxqluxwwxstxpgilpz}tkfgkmoyzz~}~|~~~~yyxwvxz{zzxspuwvuvtwz{zuu{}zw{xxz~vx~}|\+3:V}NcΔZݶX\N5P6`Tťw2'^rP̴d]鰕a4%>psEvN(9)'w¤H3Xr'\[f(CzO~ASѺēWiӇHIaFNԩ_Ll}kޭէoSXRA?P{ȴdLSWOPNORWeqRCCA=DTvjipa2LŴeIGFBJ[`Rfvz׿kZPICBABFP\fsrj{v}fSC0"6Plpkpwqkkbemp{vzҝu6DӢXPd9 T;fZXÕK'5M 2}sXʲ~:3lo~5+gDZmQ.$5ɯH?yLpօ>/SҴ\Qi3j]JfmVV54rb?VaEZN;j¨lRWzvbiuujy~xpuڶpZ^ynp{zt|j`^bimghmklputipvm~s_etlZOP[t|stukvyngjx|z||{~}xvvu|xsswwsnhhpxwstuwz}zupnqrrswxx{x}~~}}zxxwz{ywvqortvtsrx|ztuxvxyy|}~~~~y}~}|zz~}}}~}{yyy|{{{{yxxxupooqrqlpqqppomlnlnqvvtwyz}}}}|zz{zzwrstsqnnnqsuyyuuxwurrqsusstty~|wstwvtrosvvutwyzzxx~}~{}~~}~{zz{{|~zjdqʩb7\gnaOq?A/xc9Э}}jLmȃWFuesV.CƊLIŠ9IŞ_Mjc`U./[i^avc\n`lkYfupyzsy}lsŷw[O_w}rfr{eU`{nemxfI?FZu}nlrsoz{}{kjw{{z}|nmwxos~xtqrv{{tvxwuplgkrrpsy~~}yx~~|yy{yw{|}~ypovyytoov|{vvyz}|{~y|}xx}~~~}|~~zy{|{}|{{z|~~~}{{}|zyy{zzzzzzzz{wwywutstvxyz{~||{vuwuurttstttsuxyxvuvvvvutw{xwyz||{wwz~}z{{~~~|||yyzzxxxxwvvwvtuvxvtstusuuvvwwvz|z|}{z|{||{ytjcyܝA5ΡgXpkvot{/wpljSnYWh~_X{|YinVvm;WWOsUflifv|kxh\p}lq||i[TWio`atkYWh|xgdp{~fMIdx~z|~~}uopywtxytmd`egedccgjorsmhgnsommqz{wvz~{|zvsv~tnzxtt{x{xtyojq||vrr}~wv{}}~{{~|{~~||~~}zxuuzywurrtutsssw{zyxtuyzwwxvwyyvtvxyyzyyzz}}}{{}~~}}~~~~~|||}zzy{yy{{yyz{z{yz|}||}||}|}}yyzzyxux{|yy{}||}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~{v_[sq~s{ql|lSuotyjo~jRmwjjki~u~yrw}~tz\t}Yela|fottub{|qv{kk{|nq|{zrf^^fmhfrtfdn}tloxt`Zk}z|~zrsx~|{zxqjijkhiihmsvy}wsrwzyxvw|~~~}|vnt~~{tpnt}}wuqot{{wy{vrwypmnsvwtqty{xtxy{}~}~~~~|zwyz{yyvvuxwuuvxzzzxux|||yxvyyyxwz~||||{|z~|||}}}~~}}~}~~|~||~||}}|}{{}{{{yy~~||~~~~|}}~~~|}~}zzzyzxuuy{yz||}}}~}~~~}}}{|~|}|z|}z{|{{z{z|{{zzxwxxpdqҲc1Ng^nfKPnL]rnlnn]pVE_q[zcUwxVul_idpqxr|o~jgxsuuy|xtrs}}~{oa`inllnutgfo|uhkw~}qdfry~yut{~{|~}utv}uqqsqokjnw{yzzyvvy||||}{~~|{~~}xy{|~~{|vvz{xwwxxyxvvvw{||{z{|{}}|z|}~~~~||~~}~}|||||{yzzxz{zyyzzz{{vw|{}~|{}}~~}~}}}|}~~}~}~}~~~~}}}~||}}|{}|{|}||||||zzzzz{{yzyxzyxyxyyvxxwvvuvuuutuuvwvxyyy{|}~~~}~~~|~~~~~~|}~}{}|{|~|||||~~~}|{|~{tiqֻo9OnbnrRW{T`srnse\q{sLKh~[Y~RU{\RVn{lajprvry}o|gl{vtx~}|z{}tnkpvsqt{}nmtzmn{~xqs}{wx~}||{||wrpt~|{}~|wokmlkhdempsutppqtxwwwx|~~|}||}zy~~}|}~}}|||}|{{|zz{zxxxyyzyxyvxxxxuvyyyyxxy|zy|yyxyxyxwzyxyxxxy{y|z}}~|}~~~}~~~~}~}||}|~|z|}zzzz{|{y||||~~~~~~}|||{{|~~{|{|{{{|{}z||}}~|||}{|||z{{{||~}~}||{|}|zvpq`JmlfsYka{l{r~|nx}yuPSt|[e|S_[afvr\hsxw~o}|em|zqmtyyzywwtqvz{y~yokiikomoqsz}lgr{}xmmv|xuz}y{~}wuw~|vuvvrnlpvyzywuvz{zyy}|~{utuxytqsz|wxz~zxvz}}wrty}{xvsvx{{{||~~~~}~}~{|||zyyz|}{}||}|}}|}|||~|}~|~}|}|{yyxxzzyzzy{}}|z{|zz|}}|}|||}|~|z{{{}{{{{z{{{zzzzy{|}}~~}~~~}}~~~~~~~||~||{zzz{zyz{ywxpiŘZ>eiet`^^{`su~rz{{ihvsUWqxcqy\f_jwflhrw~||xu{kyxrmv~~~|}vvxxx|~~}urrnlotvrsu~~onx|vpry}{w|{vqsz}zyxwuusomnqu}}zyyz|vrpqsnijovwvutsuzz{{z{~~{yz{|{xty~||{}xxz~~zuwz{||{{~}||~}}zwyyyzywvwx{|{yyyzzz{xxxy{yyy{|}}~~}}}|~}|||{zz{zyzzzx{zy|}||{{}}}~}~~|~~~}~~||ywweNktr|wprlz~}~z}mn}~ndh}wtviwxlos~vorts}{{v{wmz}ztoms}}|{{|tvz{}||utusnpvxxwwutz~ysw{~||~}xy{~~~|||zwtssx|||z{}~zstuwrnoqvxyutuwx{yxvy||}~}|~~{z~~zz}{~ytutswxtrtx~yv||{|z}~}}||~||}|{z{y{~~~}z{zz{zzy{z|}||z}}}~~~~~}~~}~}}~}||~}~}~~}~~~~~~~}}~~}}|||~~~}~~~}~~}~~}~|~~|}~||~}~}~~~}}}||~|||y|zzyxzwwwuwuspkhH@t{imzqn|msaww|tp~bj|thhzynvturz{|}wx}zz{su}|}zux|}{||xwwvtsqvyxxw~xuy{zwsty{~}|yx{|}||~}|{xvxz~|~|yxyywtwz}~}zxy{|}{{{|~~|ywxxzzyx{}{x~|{y|||}~{z}{ywvxy~}||}~~}||}~|}||~}}~}~~~|}zz||z{zz{zz|z{z|{zzzzz{z{|x{zzyzxxwwwuvuvvvwxxwyxyzzzz{|~}}~~~~~}~~|~~~}{zyxtq{fE`zr{sxx|mcv~ro~`fy{lfszwqn|vttjtqwxunkvtuy|xr|~}zupv~yy{vz~|z{yzzyvtx}}{{}||zxx{~|}zz|~|}|zwuwvwxz|z{{|}~|wvuvvsttwy{zywww{{{zzy{}~}{zzz{|{}|}}|}}~|~~~}}{zy{}~|}|~~|}~}|}|~|{{|}{{yz|||~|~|}~}}}||~{}}}zz|{||}|||}~~~~}~{~}~~~~~~}||}{}}{}{{{yzz{yyxzyy{xxxxvrpvkK_zsxvv{qh~ts}dnz~ply~zwv~}yzx{}ss{}{~vt}}x|vu|}zvy~wuuwvsqqvwyuux|zttxvrstuvw{|{z|}{vw|~~~~|~~~{zx{}~|{{{{ywz}~}z|{~|~}~~}}~{zywwwvxzy{}|{z}}}~|z{~}|||~}||xwvz|}~}}~~}~~~~}}}|~~}~~}~}}|{|||{{yzzyzy{zxyxwzyzyyzzzxyyyyxwuxxyvvxvyxx{zzz{~~~~~~~z|{xyhSk{wy~tv~mqxryvfs}w~sjq~|uzvrw|{w}vxtw~|tnlyvy}y}zv~~||{{|}{|}}{yx|~|}|||~~|}~}|~}zvxwwxyxzz|{z{}~~yvuvuttsuwvwvuttwvwuvvvyz}}~}}~}}{{zzxwyz{}}||}~|~~~|z}~~~~}}|{zzyzz{{~|{|{z{z}zwzzzzyxx{{z||y}|~}}|{~~}~~~}~~~}|}}~~}~~~~}}~~}|}|}|||yzz{{{{{||}|}~~~~~~~~}}~||~}{|{|{z{|y{{|z|z{xzz{yvw{c^t}xx{v{zrz{tu~tu{z{{|y}{ut}}}{{zx|~z~~|~}yz|xy{yxuvwyzwvw}{{{zxxxxxy|~~~|{}}||}|z~}zzzzzz{}~}~~~|}|zyyxvw{z{z{yz|~}}|zz}|{xxz|{xwxyxxvuuvxyy{|}}~~~~}~~~~~~~~}}}}{||{|}{|||}||||{||}|{{|{|{z{{{z{{y|z{zyz{{zz|}~~~~~}}~~}|{||zgnubiff-2.2.16/sound/Makefile.am0000644000175000017500000000011612474422124013327 00000000000000sounddir = $(pkgdatadir) dist_sound_DATA = \ mail.wav \ coin.wav gnubiff-2.2.16/sound/Makefile.in0000664000175000017500000003230012474430241013341 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = sound DIST_COMMON = $(dist_sound_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(sounddir)" DATA = $(dist_sound_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ sounddir = $(pkgdatadir) dist_sound_DATA = \ mail.wav \ coin.wav all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sound/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sound/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_soundDATA: $(dist_sound_DATA) @$(NORMAL_INSTALL) @list='$(dist_sound_DATA)'; test -n "$(sounddir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sounddir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sounddir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sounddir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sounddir)" || exit $$?; \ done uninstall-dist_soundDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sound_DATA)'; test -n "$(sounddir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sounddir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(sounddir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_soundDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_soundDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_soundDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-dist_soundDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/sound/coin.wav0000644000175000017500000000376012474422124012752 00000000000000RIFFWAVEfmt w+w+data{{|}~~ysnkklosuwwvskeba`bhnsx}|yxxy~zbVW]nx`SORartjcbfouxyvpjeacgjmooljfddekrzˠi@7?f}U.#$Al~tptrqxo\F514F[irphZPNNZiyl+0iÚtU<18Jj~jhsrmnz`UOLOVXURJECGLSWZ]^[_dn}~=!@wϥ{hZH>EXemh\Tcpkro^SLLMOUXXTRNOU[^do|i.sxScx|r_>-,GnmgtqZ\iup^OGKT[`aWKO_r|b1مKZoD5\kIZwee{}U[~YGHYknaYXSQ`vː:nRGːY6$+TzVGmpeplPO]qymaZYdlrvyvtד91~SnӧlH:@[uZB>cZIaupzbJSv{RAG[p{skmu~Š/#ߛ]Jef7GMW}xM8EpC)WzlgsthdpxqaZ]diquv~ʏ7"ߚ[QwҾzEBYjYIXfgZ_}on|rdy~tr~}pm~{wrwxlll_{xy~feYkt{xzzrv{ty~wt{~|xruxidj{zhcrxtuhkirwz|vsjs|y~vy}{}~zwrtuojv}wnqutv}qpdz~cx|wy}uqmkx}yyy~zzy{{yuoqy}ytlo{vgkw{wyzxv}yysjid{zxxx{yuwupt{~z|zx~|urrx~yrpw~zruvtx}}{z}~qennxywuz{}y}~~~xrv||yvvz~~yu||}~||{z~~yx}{zz|}}|{{~xrqwy~~tt|zy}yvgnubiff-2.2.16/ABOUT-NLS0000644000175000017500000020610512474422124011400 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. 1.1 Quick configuration advice ============================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. 1.2 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the included GNU `gettext' library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will, respectively, bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might not be desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.3 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your country by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.4 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skill are praised more than programming skill, here. 1.5 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of May 2005. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB +-------------------------------------------------+ GNUnet | | a2ps | [] [] [] [] [] | aegis | () | ant-phone | () | anubis | [] | ap-utils | | aspell | [] [] [] [] | bash | [] [] | batchelor | [] | bfd | | bibshelf | [] | binutils | [] | bison | [] [] | bluez-pin | [] [] [] [] | clisp | [] [] | console-tools | [] [] | coreutils | [] [] [] [] | cpio | | cpplib | [] [] [] | darkstat | [] () [] | dialog | [] [] [] [] [] [] | diffutils | [] [] [] [] [] | doodle | [] | e2fsprogs | [] [] | enscript | [] [] [] [] | error | [] [] [] [] | fetchmail | [] [] () [] | fileutils | [] [] | findutils | [] [] [] | flex | [] [] [] | fslint | [] | gas | | gawk | [] [] [] | gbiff | [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] | gimp-print | [] [] [] [] | gip | | gliv | [] | glunarclock | | gmult | [] [] | gnubiff | () | gnucash | [] () () [] | gnucash-glossary | [] () | gpe-aerial | [] [] | gpe-beam | [] [] | gpe-calendar | [] [] | gpe-clock | [] [] | gpe-conf | [] [] | gpe-contacts | | gpe-edit | [] | gpe-go | [] | gpe-login | [] [] | gpe-ownerinfo | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] | gpe-taskmanager | [] [] | gpe-timesheet | [] | gpe-today | [] [] | gpe-todo | [] [] | gphoto2 | [] [] [] [] | gprof | [] [] | gpsdrive | () () | gramadoir | [] [] | grep | [] [] [] [] [] [] | gretl | | gsasl | [] | gss | | gst-plugins | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () | gtkspell | [] [] [] | hello | [] [] [] [] | id-utils | [] [] | impost | | indent | [] [] | iso_3166 | | iso_3166_1 | [] [] [] [] [] | iso_3166_2 | | iso_3166_3 | [] | iso_4217 | | iso_639 | | jpilot | [] | jtag | | jwhois | | kbd | [] [] [] [] | latrine | () | ld | [] | libc | [] [] [] [] [] | libextractor | | libgpewidget | [] [] [] | libgphoto2 | [] | libgphoto2_port | [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | | lifelines | [] () | lilypond | [] | lingoteach | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailutils | [] | make | [] [] | man-db | [] () [] [] | minicom | [] [] | mysecretdiary | [] [] | nano | [] () [] | nano_1_0 | [] () [] [] | opcodes | [] | parted | [] [] [] [] | psmisc | | ptx | [] [] [] | pwdutils | | python | | radius | [] | recode | [] [] [] [] [] | rpm | [] [] | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] | sh-utils | [] [] | shared-mime-info | [] [] | sharutils | [] [] [] [] [] | silky | | skencil | [] () | sketch | [] () | solfege | [] | soundtracker | [] [] | sp | [] | stardict | [] | tar | | texinfo | [] [] | textutils | [] [] [] | tin | () () | tp-robot | [] | tuxpaint | [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] [] | vorbis-tools | [] [] [] [] | wastesedge | () | wdiff | [] [] [] [] | wget | | xchat | [] [] [] [] [] | xkeyboard-config | | xpad | | +-------------------------------------------------+ af am ar az be bg bs ca cs cy da de el en en_GB 10 0 0 2 7 5 0 40 43 2 51 91 19 1 14 eo es et eu fa fi fr ga gl he hi hr hu id is +-----------------------------------------------+ GNUnet | | a2ps | [] [] [] | aegis | | ant-phone | [] | anubis | [] | ap-utils | [] | aspell | [] [] | bash | [] [] [] [] | batchelor | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] | clisp | [] [] | console-tools | | coreutils | [] [] [] [] [] | cpio | [] [] | cpplib | [] [] | darkstat | [] () [] [] [] | dialog | [] [] [] [] [] [] [] | diffutils | [] [] [] [] [] [] [] [] [] | doodle | [] | e2fsprogs | [] [] | enscript | [] [] | error | [] [] [] [] [] | fetchmail | [] | fileutils | [] [] [] [] [] | findutils | [] [] [] [] | flex | [] [] [] | fslint | [] | gas | [] [] | gawk | [] [] [] [] | gbiff | [] | gcal | [] [] | gcc | [] | gettext-examples | [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] | gimp-print | [] [] | gip | [] [] [] | gliv | () | glunarclock | [] [] [] | gmult | [] [] | gnubiff | () | gnucash | [] () | gnucash-glossary | [] | gpe-aerial | [] [] | gpe-beam | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] | gpe-conf | [] | gpe-contacts | [] | gpe-edit | [] [] | gpe-go | [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] | gpe-taskmanager | [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] | gprof | [] [] [] | gpsdrive | () () [] | gramadoir | [] [] | grep | [] [] [] [] [] [] [] [] [] [] [] | gretl | [] [] | gsasl | [] [] [] | gss | [] | gst-plugins | [] [] | gstreamer | | gtick | [] [] [] [] | gtkspell | [] [] [] [] [] | hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] | impost | [] [] | indent | [] [] [] [] [] [] [] [] [] [] | iso_3166 | [] [] [] | iso_3166_1 | [] [] [] [] [] [] [] | iso_3166_2 | [] | iso_3166_3 | [] | iso_4217 | [] [] [] | iso_639 | [] [] [] [] | jpilot | [] [] | jtag | [] | jwhois | [] [] [] [] | kbd | [] [] | latrine | [] [] | ld | [] [] | libc | [] [] [] [] [] | libextractor | | libgpewidget | [] [] [] [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] | libgsasl | [] [] | libiconv | [] [] [] [] [] [] [] [] [] [] | libidn | [] [] | lifelines | () | lilypond | | lingoteach | [] [] | lynx | [] [] | m4 | [] [] [] [] | mailutils | [] [] | make | [] [] [] [] [] [] [] | man-db | () | minicom | [] [] [] [] | mysecretdiary | [] [] [] | nano | [] [] () [] | nano_1_0 | [] [] [] [] | opcodes | [] [] [] | parted | [] [] [] | psmisc | [] | ptx | [] [] [] [] [] [] [] [] [] | pwdutils | | python | | radius | [] [] | recode | [] [] [] [] [] [] [] | rpm | [] | screem | | scrollkeeper | [] [] [] | sed | [] [] [] [] [] [] | sh-utils | [] [] [] [] [] [] | shared-mime-info | [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] | silky | [] | skencil | [] [] | sketch | [] [] | solfege | | soundtracker | [] [] | sp | [] | stardict | [] | tar | [] [] [] [] | texinfo | [] [] [] | textutils | [] [] [] [] [] | tin | [] () | tp-robot | [] [] | tuxpaint | [] [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux | [] [] [] [] [] | vorbis-tools | [] [] | wastesedge | () | wdiff | [] [] [] [] [] [] [] | wget | [] [] [] [] | xchat | [] [] [] [] [] | xkeyboard-config | | xpad | [] [] [] | +-----------------------------------------------+ eo es et eu fa fi fr ga gl he hi hr hu id is 15 85 21 15 2 35 115 45 16 8 1 6 40 27 1 it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso +--------------------------------------------------+ GNUnet | | a2ps | () () [] [] () | aegis | () | ant-phone | [] | anubis | [] [] [] | ap-utils | | aspell | [] [] | bash | [] | batchelor | [] | bfd | | bibshelf | [] | binutils | | bison | [] [] [] [] | bluez-pin | [] [] | clisp | [] | console-tools | | coreutils | [] [] | cpio | | cpplib | [] | darkstat | [] [] | dialog | [] [] | diffutils | [] [] [] [] | doodle | [] | e2fsprogs | [] | enscript | [] | error | [] | fetchmail | [] [] | fileutils | [] [] [] | findutils | [] [] | flex | [] [] | fslint | [] | gas | | gawk | [] [] | gbiff | [] | gcal | | gcc | | gettext-examples | [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gimp-print | [] [] | gip | [] | gliv | [] | glunarclock | [] [] | gmult | [] [] | gnubiff | () | gnucash | [] () () [] | gnucash-glossary | [] [] | gpe-aerial | [] | gpe-beam | [] | gpe-calendar | [] | gpe-clock | [] | gpe-conf | [] | gpe-contacts | | gpe-edit | [] | gpe-go | [] | gpe-login | [] | gpe-ownerinfo | [] | gpe-sketchbook | [] | gpe-su | [] | gpe-taskmanager | [] [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | [] | gphoto2 | [] [] [] | gprof | | gpsdrive | () () () () | gramadoir | () | grep | [] [] [] [] | gretl | [] | gsasl | [] | gss | | gst-plugins | [] [] | gstreamer | [] [] | gtick | [] [] | gtkspell | [] [] [] | hello | [] [] [] [] [] [] [] [] [] | id-utils | [] [] | impost | | indent | [] [] [] | iso_3166 | [] | iso_3166_1 | [] [] | iso_3166_2 | [] | iso_3166_3 | [] | iso_4217 | [] [] [] | iso_639 | [] [] [] | jpilot | () () () | jtag | | jwhois | [] [] | kbd | [] | latrine | [] [] | ld | | libc | [] [] [] [] [] | libextractor | | libgpewidget | [] | libgphoto2 | [] [] | libgphoto2_port | [] [] | libgsasl | [] | libiconv | [] [] | libidn | [] | lifelines | [] | lilypond | | lingoteach | [] [] | lynx | [] [] [] | m4 | [] [] | mailutils | | make | [] [] [] | man-db | () | minicom | [] | mysecretdiary | [] | nano | [] [] [] | nano_1_0 | [] [] [] [] | opcodes | [] | parted | [] [] [] [] | psmisc | [] [] [] | ptx | [] [] [] | pwdutils | | python | | radius | | recode | [] [] | rpm | [] [] | screem | [] | scrollkeeper | [] [] [] | sed | [] [] | sh-utils | [] [] [] | shared-mime-info | [] [] [] [] | sharutils | [] [] [] | silky | [] | skencil | | sketch | | solfege | [] [] [] | soundtracker | [] | sp | () | stardict | [] [] | tar | [] [] [] | texinfo | [] [] [] | textutils | [] [] [] | tin | | tp-robot | [] | tuxpaint | [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] | vorbis-tools | [] | wastesedge | [] | wdiff | [] [] [] | wget | [] | xchat | [] [] [] [] [] | xkeyboard-config | [] | xpad | [] | +--------------------------------------------------+ it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso 46 35 11 2 1 1 2 2 3 11 0 15 96 7 5 0 or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv +----------------------------------------------+ GNUnet | | a2ps | () [] [] [] [] [] [] | aegis | () () | ant-phone | [] | anubis | [] [] [] | ap-utils | () | aspell | [] [] | bash | [] [] [] | batchelor | [] | bfd | | bibshelf | | binutils | [] [] | bison | [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | clisp | [] | console-tools | [] | coreutils | [] [] [] [] | cpio | [] [] | cpplib | | darkstat | [] [] [] [] [] [] | dialog | [] [] [] [] [] [] [] | diffutils | [] [] [] [] [] [] | doodle | [] | e2fsprogs | [] [] | enscript | [] [] [] [] | error | [] [] [] | fetchmail | [] [] [] [] | fileutils | [] [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] [] [] | fslint | [] [] [] | gas | | gawk | [] [] [] [] | gbiff | [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] [] | gimp-print | [] [] | gip | [] [] [] | gliv | [] [] [] | glunarclock | [] [] [] [] [] [] | gmult | [] [] [] [] | gnubiff | () [] | gnucash | () [] [] [] [] | gnucash-glossary | [] [] [] | gpe-aerial | [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] | gpe-calendar | [] [] [] [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] [] [] [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] [] [] [] | gphoto2 | [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] | grep | [] [] [] [] [] [] [] | gretl | [] | gsasl | [] [] [] [] [] | gss | [] [] [] | gst-plugins | [] [] [] [] | gstreamer | [] [] [] [] | gtick | [] [] [] | gtkspell | [] [] [] [] [] [] | hello | [] [] [] [] [] [] [] | id-utils | [] [] [] [] | impost | | indent | [] [] [] [] [] [] | iso_3166 | [] [] [] [] [] | iso_3166_1 | [] [] [] [] | iso_3166_2 | | iso_3166_3 | [] [] [] | iso_4217 | [] [] | iso_639 | [] [] [] | jpilot | | jtag | [] | jwhois | [] [] [] () () | kbd | [] [] [] | latrine | [] [] | ld | [] | libc | [] [] [] [] [] | libextractor | [] | libgpewidget | [] [] [] [] [] [] | libgphoto2 | [] [] | libgphoto2_port | [] | libgsasl | [] [] [] | libiconv | [] [] [] [] [] [] [] [] [] [] | libidn | [] () | lifelines | [] [] | lilypond | | lingoteach | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailutils | [] [] [] | make | [] [] [] [] | man-db | [] [] | minicom | [] [] [] [] | mysecretdiary | [] [] [] [] | nano | [] [] [] | nano_1_0 | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | psmisc | [] [] | ptx | [] [] [] [] [] [] | pwdutils | [] | python | | radius | [] [] | recode | [] [] [] [] [] [] | rpm | [] [] [] [] | screem | | scrollkeeper | [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sh-utils | [] [] [] | shared-mime-info | [] [] [] [] [] [] | sharutils | [] [] [] | silky | [] | skencil | [] [] [] | sketch | [] [] [] | solfege | | soundtracker | [] [] | sp | | stardict | [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | textutils | [] [] [] | tin | | tp-robot | [] | tuxpaint | [] [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] | vorbis-tools | [] [] | wastesedge | | wdiff | [] [] [] [] [] [] | wget | | xchat | [] [] [] [] [] [] [] | xkeyboard-config | | xpad | | +----------------------------------------------+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv 1 3 47 29 57 6 78 73 5 44 12 12 50 85 ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu +-----------------------------------------------+ GNUnet | | 0 a2ps | [] [] [] | 19 aegis | | 0 ant-phone | [] [] | 5 anubis | [] [] [] | 11 ap-utils | () [] | 2 aspell | [] [] [] | 13 bash | [] | 11 batchelor | [] [] | 7 bfd | | 1 bibshelf | [] | 5 binutils | [] | 6 bison | [] [] | 18 bluez-pin | [] [] [] [] [] | 25 clisp | | 7 console-tools | [] [] | 5 coreutils | [] [] | 17 cpio | [] [] [] | 7 cpplib | [] [] | 8 darkstat | [] () () | 15 dialog | [] [] [] | 25 diffutils | [] [] [] [] | 28 doodle | [] | 5 e2fsprogs | [] | 8 enscript | [] | 12 error | [] [] [] | 16 fetchmail | [] | 12 fileutils | [] [] [] | 18 findutils | [] [] | 17 flex | [] [] | 15 fslint | [] | 7 gas | [] | 3 gawk | [] | 14 gbiff | [] | 5 gcal | [] | 5 gcc | [] [] | 4 gettext-examples | [] [] [] [] [] | 21 gettext-runtime | [] [] [] [] [] | 25 gettext-tools | [] [] [] [] [] | 19 gimp-print | [] | 11 gip | [] | 8 gliv | [] [] | 7 glunarclock | [] [] | 13 gmult | [] [] [] | 13 gnubiff | [] | 3 gnucash | () [] | 10 gnucash-glossary | [] [] | 9 gpe-aerial | [] [] | 13 gpe-beam | [] [] | 13 gpe-calendar | [] [] [] [] | 18 gpe-clock | [] [] [] [] | 17 gpe-conf | [] [] | 12 gpe-contacts | [] [] | 7 gpe-edit | [] [] [] [] | 15 gpe-go | [] [] | 11 gpe-login | [] [] [] [] [] | 18 gpe-ownerinfo | [] [] [] [] | 19 gpe-sketchbook | [] [] | 14 gpe-su | [] [] [] | 16 gpe-taskmanager | [] [] [] | 17 gpe-timesheet | [] [] [] [] | 17 gpe-today | [] [] [] [] [] | 19 gpe-todo | [] [] [] | 17 gphoto2 | [] [] [] | 18 gprof | [] [] | 10 gpsdrive | | 3 gramadoir | [] | 6 grep | [] [] [] [] | 32 gretl | | 4 gsasl | [] [] | 12 gss | [] | 5 gst-plugins | [] [] [] | 17 gstreamer | [] [] [] [] | 15 gtick | [] | 11 gtkspell | [] [] [] [] | 21 hello | [] [] [] [] | 37 id-utils | [] [] | 13 impost | [] | 3 indent | [] [] [] [] | 25 iso_3166 | [] [] [] | 12 iso_3166_1 | [] [] | 20 iso_3166_2 | | 2 iso_3166_3 | [] [] | 8 iso_4217 | [] [] | 10 iso_639 | [] [] | 12 jpilot | [] [] [] | 6 jtag | | 2 jwhois | [] [] [] | 12 kbd | [] [] | 12 latrine | [] [] | 8 ld | [] | 5 libc | [] [] | 22 libextractor | | 1 libgpewidget | [] [] | 17 libgphoto2 | [] | 9 libgphoto2_port | | 5 libgsasl | [] | 7 libiconv | [] [] [] [] [] | 32 libidn | [] [] | 6 lifelines | | 4 lilypond | | 1 lingoteach | [] | 6 lynx | [] [] [] | 15 m4 | [] [] | 17 mailutils | [] | 7 make | [] [] | 18 man-db | | 5 minicom | | 11 mysecretdiary | [] [] | 12 nano | [] [] | 13 nano_1_0 | [] [] [] | 18 opcodes | [] [] | 9 parted | [] [] [] | 18 psmisc | [] | 7 ptx | [] [] | 23 pwdutils | | 1 python | | 0 radius | [] | 6 recode | [] [] | 22 rpm | [] [] | 11 screem | | 1 scrollkeeper | [] [] [] | 24 sed | [] [] [] | 21 sh-utils | [] | 15 shared-mime-info | [] [] [] | 21 sharutils | [] [] [] | 20 silky | | 3 skencil | | 6 sketch | | 6 solfege | | 4 soundtracker | [] | 8 sp | [] | 3 stardict | [] [] [] [] | 10 tar | [] [] [] [] | 15 texinfo | [] [] | 14 textutils | [] [] [] | 17 tin | | 1 tp-robot | [] [] [] | 8 tuxpaint | [] [] [] [] | 34 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux | [] [] [] | 18 vorbis-tools | [] | 10 wastesedge | | 1 wdiff | [] [] | 22 wget | [] [] | 7 xchat | [] [] [] [] | 26 xkeyboard-config | [] | 2 xpad | [] | 5 +-----------------------------------------------+ 73 teams ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu 149 domains 0 0 0 1 77 30 0 92 16 0 42 32 0 1746 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If May 2005 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. 1.6 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `translation@iro.umontreal.ca' to make the `.pot' files available to the translation teams. gnubiff-2.2.16/TODO0000644000175000017500000000220612474422124010635 00000000000000 Version 2.2.x: -------------- To do: - Uniformize functions comments (I really liked your way of commenting functions Robert so I will try to do that for remaining sources) - Cleanup Mailbox::parse() - Cleanup Options::update_gui() - Fix bugs ;-) Version 2.x.0: -------------- * Summary instead of immediate notification (see RFE on sourceforge) * Make error handling when reading/parsing mail more consistent. At the moment sometimes no warning is printed, always a warning is printed or a warning is printed in debug mode. Perhabs (new option?) print the error message in the tooltip? (this could be done by giving the message as parameters to the exceptions) * Shall some options removed from the GUI, added to the GUI (e.g. imap idling) * Tooltips: Write where pango-markup can be used, explain standard port number * Only one FAM call for all local mailboxes. Still parse mails in multiple threads * Substitute gtk_window_present() in ui-popup.cc by something that isn't system dependent and does not steal the keyboard focus * HTML mails? * Bug in Mailbox::mark_messages_as_read * Cleanup of src/gnubiff.cc * See RFEs on sourceforge gnubiff-2.2.16/configure.ac0000644000175000017500000002616512474427470012456 00000000000000# gnubiff -- a mail notification program # Copyright (C) 2000-2012 Nicolas Rougier, 2004-2015 Robert Sowada # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Process this file with autoconf to produce a configure script. ###################################################################### # Initialization # ###################################################################### # gnubiff version numbering scheme: # gnubiff uses the "major level", "minor level" & "patch level" # version numbering scheme # # - First number is the major number and it signifies major changes or # rewrites. # - The second number is the minor number and it represents added or # tweaked functionality on top of a largely coherent structure. # - The third number is the patch number and it usually will only # refer to releases fixing bugs # # Current version is 2.2.16 AC_PREREQ(2.59) AC_INIT([gnubiff],[2.2.16],[gnubiff-bugs@lists.sourceforge.net]) AC_CONFIG_AUX_DIR(config) AC_CONFIG_HEADERS([config/config.h]) AC_CONFIG_SRCDIR([src/gnubiff.cc]) AM_INIT_AUTOMAKE AM_MAINTAINER_MODE ###################################################################### # Configure Options # ###################################################################### dnl syntaxt: AC_ARG_WITH (package, help-string, [action-if-given], [action-if-not-given]) dnl If the user gave configure the option `--with-package' or dnl `--without-package', run shell commands action-if-given. If neither dnl option was given, run shell commands action-if-not-given. The name dnl package indicates another software package that this program should dnl work with. It should consist only of alphanumeric characters and dnl dashes. AC_ARG_ENABLE(fam, [ --disable-fam disable the use of FAM (autodetect)], OPT_USEFAM="$enableval", OPT_USEFAM="yes") AC_ARG_ENABLE(gnome, [ --disable-gnome disable the use of gnome (default: enable)], OPT_USEGNOME="$enableval", OPT_USEGNOME="yes") ###################################################################### # Checks for programs # ###################################################################### AC_PROG_CXX AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET ###################################################################### # Checks for libraries # ###################################################################### dnl LIBPOPT (for parsing options) AC_CHECK_LIB([popt],[main], , AC_MSG_ERROR([ Cannot find popt library Please consider installing it before installing gnubiff ]) ) dnl From pkg.m4: dnl # Note that if there is a possibility the first call to dnl # PKG_CHECK_MODULES might not happen, you should be sure to dnl # include an explicit call to PKG_PROG_PKG_CONFIG in your dnl # configure.ac PKG_PROG_PKG_CONFIG dnl LIBFAM, LIBGAMIN (for monitoring files) if test "x$OPT_USEFAM" = "xyes"; then AC_CHECK_LIB([fam], [main], [FAM_LIBS="-lfam" AC_DEFINE([HAVE_LIBFAM], [1], [libfam]) ]) if test -z "$FAM_LIBS" ; then PKG_CHECK_MODULES(FAM, gamin >= 0.1.0) fi if test -z "$FAM_LIBS" ; then AC_MSG_ERROR([Cannot find FAM library]) fi fi AC_SUBST(FAM_CFLAGS) AC_SUBST(FAM_LIBS) dnl LIBSSL (for network security) AC_CHECK_LIB([ssl],[main]) dnl LIBCRYPTO, LIBSSL (for MD5 hash algorithm) AC_CHECK_LIB(crypto, MD5_Init, [ AC_DEFINE(HAVE_CRYPTO, 1, Define to 1 if you have crypto base functions) LIBS="$LIBS -lcrypto"], [ AC_CHECK_LIB(ssl, MD5_init, AC_DEFINE(HAVE_CRYPTO, 1, Define to 1 if you have crypto base functions))]) dnl LIBSSL (for AES encryption/decryption) AC_CHECK_LIB(ssl, AES_encrypt, AC_DEFINE_UNQUOTED(HAVE_AES, 1, Define to 1 if AES encryption is available), [ AC_CHECK_LIB(crypto, AES_encrypt, AC_DEFINE_UNQUOTED(HAVE_AES, 1))]) dnl GLIB, GTK, ... GTK_REQUIRED="gtk+-3.0 >= 3.0.0" GMODULE_REQUIRED="gmodule-export-2.0 >= 2.4" X11="xproto x11" PKG_CHECK_MODULES(GNUBIFF_DEP, [ $GTK_REQUIRED $GMODULE_REQUIRED $X11 ]) AC_SUBST(GNUBIFF_DEP_CFLAGS) AC_SUBST(GNUBIFF_DEP_LIBS) ###################################################################### # Checks for header files # ###################################################################### AC_HEADER_STDC AC_HEADER_DIRENT AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h utime.h regex.h]) if test "x$OPT_USEFAM" = "xyes"; then AC_CHECK_HEADERS([fam.h], [], [AC_MSG_ERROR([Cannot find fam (File Alteration Monitor) library header file fam.h])]) fi ###################################################################### # Checks for typedefs, structures, and compiler characteristics # ###################################################################### AC_C_CONST ###################################################################### # Checks for library functions # ###################################################################### AC_FUNC_CLOSEDIR_VOID AC_FUNC_MALLOC AC_FUNC_STAT AC_FUNC_UTIME_NULL AC_CHECK_FUNCS([gethostbyname memset socket strchr strerror strrchr strstr utime bind_textdomain_codeset]) ###################################################################### # Internationalization # ###################################################################### GETTEXT_PACKAGE=gnubiff AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The prefix for our gettext translation domains.]) AC_PROG_INTLTOOL #AM_GLIB_GNU_GETTEXT AM_GNU_GETTEXT([external]) ###################################################################### # GNOME support # ###################################################################### if test "$OPT_USEGNOME" = "yes"; then PKG_CHECK_MODULES(GNOME_DEP, [ libpanelapplet-4.0 ], [ AC_SUBST(GNOME_DEP_CFLAGS) AC_SUBST(GNOME_DEP_LIBS) AH_TEMPLATE([USE_GNOME]) AC_DEFINE(USE_GNOME) AC_PATH_PROG(GCONFTOOL, gconftool-2, no) ]) if test "x$GCONFTOOL" = "xno"; then AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf]) fi fi AM_CONDITIONAL(USE_GNOME, test $OPT_USEGNOME = yes, Define to 1 if you want to have GNOME support) ###################################################################### # Save password option # ###################################################################### AC_ARG_WITH(password, [ --with-password Save password within configuration file (UNSECURE)], password=$withval, password=no) if test "$password" = yes; then AH_TEMPLATE([USE_PASSWORD]) AC_DEFINE(USE_PASSWORD) AC_ARG_WITH(password-string, [ --with-password-string String to use to encrypt password (HIGHLY RECOMMENDED)], pstring=$withval, pstring="") AH_TEMPLATE([PASSWORD_STRING]) if test "x$pstring" = "x"; then AC_DEFINE_UNQUOTED(PASSWORD_STRING, "FEDCBA9876543210") else AC_DEFINE_UNQUOTED(PASSWORD_STRING, "$withval") fi fi AM_CONDITIONAL(USE_PASSWORD, test "$password" = yes) AM_CONDITIONAL(PASSWORD_STRING, test "$password" = yes) ###################################################################### # expert tab default # ###################################################################### AC_ARG_ENABLE(expert, [ --disable-expert disable showing expert tab as default, [default=yes]], AC_DEFINE(EXPERT_SHOW_NO_TAB, 1, [Define to 1 to disable showing expert tab as default.]) expert="$enableval", expert="yes") ###################################################################### # debug support # ###################################################################### AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]], AC_DEFINE(DEBUG, 1, [Define to 1 to enable debugging code.]),) AC_CHECK_FILE("CVS", [AC_DEFINE(IS_CVS_VERSION, 1, [Is a CVS version being used?])], [AC_DEFINE(IS_CVS_VERSION, 0, [Is a CVS version being used?])]) ################## # configure output ################## AC_CONFIG_FILES([ Makefile src/Makefile po/Makefile.in ui/Makefile art/Makefile sound/Makefile doc/Makefile man1/Makefile config/gnubiff.spec ]) AC_OUTPUT dnl file permissions in config subdirectory chmod +x config/mkinstalldirs config/ltmain.sh config/depcomp config/missing config/config.guess config/config.sub config/install-sh config/mdate-sh echo "--------------------------------------------------------------------------------" if test "$password" = yes; then echo " Password saving : yes" echo " Password string : $pstring" if test "x$pstring" = "x"; then echo " WARNING: You've not defined a string to encrypt passwords (this can be done" echo " (with the option --with-password-string). The default string will" echo " be used but it is less secure than using your own." fi fi if test "$password" = no; then echo " Password saving : no" echo " If you want gnubiff to save password within configuration file, use" echo " ./configure --with-password [--with-password-string=\"any string you like...]\"." echo " But be careful, it is highly unsecure, you've been warned!" fi echo " FAM support : $OPT_USEFAM" echo " Gnome support : $OPT_USEGNOME" #if test "$OPT_USEGNOME" = "yes"; then # if test "$prefix" != "`$PKG_CONFIG --variable=libpanel_applet_dir libpanelapplet-4.0`"; then # echo " NOTE: The installation directory for gnubiff is currently set to" # echo " \"$prefix\"," # echo " the default installation directory for gnome panel applications is" # echo " \""`pkg-config libpanelapplet-2.0 --variable=prefix`"\"." # echo " It may be necessary to add the path" # echo " \"$prefix/lib/bonobo/servers/\"" # echo " to the file \"/etc/bonobo-activation/bonobo-activation-config.xml\"" # echo " (root privileges needed) or to execute" # echo " \"activation-client --add-path=$prefix/lib/bonobo/servers/\"" # echo " (no root privileges needed) before gnubiff can be added to the panel." # fi #fi echo " Expert tab : $expert" echo "" echo " Just type 'make' and then 'make install' to install gnubiff" echo "--------------------------------------------------------------------------------" echo "" gnubiff-2.2.16/Makefile.in0000664000175000017500000006153212474430241012222 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/config/config.h.in \ $(top_srcdir)/config/gnubiff.spec.in $(top_srcdir)/configure \ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO \ config/config.guess config/config.rpath config/config.sub \ config/depcomp config/install-sh config/ltmain.sh \ config/mdate-sh config/missing config/mkinstalldirs \ config/texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = config/gnubiff.spec CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src po doc ui art sound man1 EXTRA_DIST = \ config/intltool-update.in \ config/intltool-extract.in \ config/intltool-merge.in \ config/gnubiff.spec.in \ THANKS \ LICENSE DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update \ po/.intltool-merge-cache all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config/config.h: config/stamp-h1 @if test ! -f $@; then rm -f config/stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) config/stamp-h1; else :; fi config/stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status @rm -f config/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config/config.h $(top_srcdir)/config/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f config/stamp-h1 touch $@ distclean-hdr: -rm -f config/config.h config/stamp-h1 config/gnubiff.spec: $(top_builddir)/config.status $(top_srcdir)/config/gnubiff.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/man1/0000775000175000017500000000000012474430471011067 500000000000000gnubiff-2.2.16/man1/Makefile.am0000644000175000017500000000005512474422124013035 00000000000000man_MANS = gnubiff.1 EXTRA_DIST = gnubiff.1 gnubiff-2.2.16/man1/Makefile.in0000664000175000017500000003526512474430241013062 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man1 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FAM_CFLAGS = @FAM_CFLAGS@ FAM_LIBS = @FAM_LIBS@ GCONFTOOL = @GCONFTOOL@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNOME_DEP_CFLAGS = @GNOME_DEP_CFLAGS@ GNOME_DEP_LIBS = @GNOME_DEP_LIBS@ GNUBIFF_DEP_CFLAGS = @GNUBIFF_DEP_CFLAGS@ GNUBIFF_DEP_LIBS = @GNUBIFF_DEP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = gnubiff.1 EXTRA_DIST = gnubiff.1 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man1/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-man uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubiff-2.2.16/man1/gnubiff.10000644000175000017500000000334112474422124012504 00000000000000.TH gnubiff 1 "7 February 2010" "Version 2.2.14" "gnubiff Manual Pages" .SH NAME gnubiff \- a mail notification program supporting GTK+ and GNOME .SH SYNOPSIS .B gnubiff .RI [ options ] .SH DESCRIPTION gnubiff is a mail notification program that checks for mail, displays headers when new mail has arrived and allow to read first lines of new messages. It relies on the GNOME and GTK libraries but can be compiled and used with or without GNOME support. Supported protocols are pop3, apop, imap4, mh, qmail and mailfile. Furthermore, gnubiff is fully configurable with a lot of options like polltime, poptime, sounds, mail reader, mailbox names, etc. and can also filter spam. Note that gnubiff is not a mail reader even if it offers the possibility of reading very first lines of new messages. If you send some requests for specific features to be implemented, keep that in mind! .SH OPTIONS gnubiff accepts the following command line options: .TP .BI "\-c " filename, " \-\-config " filename Use the specified file as configuration file (default is ~/.gnubiffrc) .TP .B \-n, \-\-noconfigure Skip the configure process .TP .B \-\-nogui Start gnubiff without GUI .TP .B \-\-systemtray Start gnubiff in the system tray .TP .B \-?, \-\-help Show summary of options .TP .B \-v, \-\-version Print version information .SH FILES .TP .I ~/.gnubiffrc user specific options file .SH "SEE ALSO" More documentation about gnubiff can be found in the info pages with the command .B "info gnubiff" .SH BUGS None known. .SH AUTHORS gnubiff was developed by Nicolas Rougier and is currently maintained by Robert Sowada . This manpage was written by Roland Stigge for Debian. It can be used elsewhere, of course. gnubiff-2.2.16/README0000644000175000017500000000316012474422124011025 00000000000000Welcome to gnubiff. This program is part of the GNU project, released under the aegis of GNU. LICENSE ======= This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (file LICENSE). If not, see http://www.gnu.org/licenses/. In addition, as a special exception, the copyright holders give permission to link the code of portions of this program with the OpenSSL library under certain conditions as described in each individual source file, and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify file(s) with this exception, you may extend this exception to your version of the file(s), but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you delete this exception statement from all source files in the program, then also delete it here. INSTALLATION ============ For documentation, please see the files in the doc subdirectory. For building and installation instructions please see the INSTALL file. Homepage: http://gnubiff.sourceforge.netgnubiff-2.2.16/NEWS0000644000175000017500000005657512474427470010677 00000000000000gnubiff -- History of visible changes. Copyright (C) 2000-2012 Nicolas Rougier , 2004-2015 Robert Sowada See the end for copying conditions. Please send gnubiff bug reports to gnubiff-bugs@lists.sourceforge.net Version 2.2.16 This is a minor feature release. Changes: * Updated translations * Added Esperanto translation (thanks to Felipe Castro) * Added Finnish translation (thanks to Jorma Karvonen) * Added Serbian translation (thanks to Miroslav Nikolic) Version 2.2.15 This is a minor bugfix release. Changes: * Added some missing files * Fixed some smaller bugs Version 2.2.14 This is a minor feature release. Changes: * Migrated to GTK3 and Gnome3 Version 2.2.13 This is a minor feature release. Changes: * Updated Vietnamese translation (thanks to Clytie Siddall) * Updated Dutch translation (thanks to Erwin Poeze) * Updated Swedish translation (thanks to Daniel Nylander) * Added Indonesian translation (thanks to Arif E. Nugroho) * Fixed a bug (restarting looking for mail after connection failures) * Support for IPv6 Version 2.2.12 This is a minor bugfix release. Changes: * Fixed some compiler warnings/problems * Added .desktop file (thanks to Fabian Affolter) Version 2.2.11 This is a minor bugfix release. Changes: * Fixed some compiler warnings/problems * Fixed a bug when filtering messages Version 2.2.10 This is a minor bugfix release. Changes: * Fixed a bug when using IMAP4 * Fixed some message header parsing bugs * Updated Dutch translation (thanks to Erwin Poeze) Version 2.2.9 This is a minor bugfix release. Changes: * Fixed some bugs when using IMAP4 * Fixed a bug when using gnubiff in the system tray without image * Updated German translation * GPL exception for distributing gnubiff linked to OpenSSL (see README file for details) Version 2.2.8 This is a minor feature release. Changes: * Upgraded license to GPL version 3 * Updated Swedish translation (thanks to Daniel Nylander) * Updated Vietnamese translation (thanks to Clytie Siddall) * Updated German translation Version 2.2.7 This is a minor feature release. Changes: * Showing/Hiding popup via SIGUSR signals * Options for showing/hiding popup/applet in the taskbar * Several small bugfixes Version 2.2.6 This is a minor feature release. Changes: * Updated Swedish translation (thanks to Daniel Nylander) * A small bugfix Version 2.2.5 This is a minor bugfix release. Changes: * Fixed some bugs Version 2.2.4 This is a minor bugfix release. Changes: * Some bug fixes * Portuguese translation now available (thanks to Gunther Furtado) Version 2.2.3 This is a minor bugfix release. Changes: * Passwords longer than 15 characters are now handled properly * Compiling without fam.h is now possible * Some other bug fixes Version 2.2.2 This is a minor feature release. Changes: * Some bug fixes * Updated Hungarian translation (thanks to Wallner Adam) * Updated Vietnamese translation (thanks to Clytie Siddall) * Options for filtering messages via regular expressions Version 2.2.1 This is a minor feature release. Changes: * Some bug fixes * It is now possible to compile gnubiff without support for FAM * New option for not showing the preferences dialog at startup as default * Updated Vietnamese translation (thanks to Clytie Siddall) Version 2.2.0 This is a major feature release. Changes: * Lots of bugfixes and code cleanups * gnubiff applet can be put in the system tray * gnubiff can be run without GUI or X * USR1 and USR2 signals are now monitored * Saved passwords are now encrypted via AES * Decoding of base64 encoded message bodies * About dialog for Gnome version Version 2.1.9 This is a minor bugfix release. Changes: * Better detection of FAM/GAMIN at configuration time * FAM can be disabled for monitoring mailboxes (and polling be used instead) * Some additional FAM bugfixes * Some other small bugfixes Version 2.1.8 This is a minor bugfix release. Changes: * Updated Italian translation (thanks to Stefano Fabri) * Added Hungarian translation (thanks to Wallner Adam) * Some small bugfixes Version 2.1.7 This is a minor bugfix release. Changes: * Fixed a bug that prevented 2.1.6 to be installed on certain systems Version 2.1.6 This is a minor bugfix release. Changes: * The gnome version of gnubiff can now be installed to any directory by any user Version 2.1.5 This is a minor bugfix release. Changes: * Fixed some FAM and GAMIN related problems * Fixed problems when displaying non ASCII characters when using non UTF-8 locales * Some other bugfixes Version 2.1.4 This is a major bugfix release. Changes: * Support for mh mailboxes as used by Sylpheed * Handling of mh protocols optimized * Czech translation (thanks to Josef Vybiral) * Compliance with RFC 2047 * Race conditions in FAM code fixed * Various other bugfixes Version 2.1.3 This is a major bugfix release. Changes: * Maildir protocol fixed (thanks to Alexis S. L. Carvalho) * Mh protocol fixed * Fixes for 64 bit systems (thanks to David Mosberger) * Various other bugfixes Note: The default behavior when using file protocol has changed. The access time of the mail file is no longer reset by default. This can be changed by setting the option "file_restore_atime" to true. Version 2.1.2 This is a major bugfix release. Changes: * Many bug fixes * Improved displaying of messages * Vietnamese translation available Version 2.1.1 Major bugfix release. Many thanks to Byron Foster and Calum Mackay for their help in creating this release. Changes: * Many bug fixes * Review of network code * Applet and Popup window can be set to be sticky, kept above all other windows and not appear in pagers * Idling can be disabled (IMAP4) * Mails are now only fetched once per session * Out of the box support for FreeBSD (thanks to Tim Bishop) * Expert editing mode for all options provided by gnubiff (including internal options) * Sorting order of headers in popup can be configured Version 2.1.0 * Nicolas Rougier - New & simpler interface - Support of the IDLE state for imap4 (no more polling) - Support of the FAM (File Alteration Monitor) (no more polling for file/folder protocols) - Better detection of mailbox format - Bugfix: IMAP4 idle state test to avoid checking twice - Bugfix: Popup was shown on exiting preferences - Put back credits - Updated French translations - Fix a bug with IMAP4 idle feature (not recognizing the BYE command) - Added a TODO file to keep track of features/bugs to be implemented/fixed - Bugfix: Testing of "\"text\" \"plain\"" in imap4 parsing was wrong (some servers answer using upper cases letter) - Modified credits apperance in the preferences panel (and remove the about menu from gnome applet popup menu) - Bugfix: socket was closed twice when lock was lost in IDLE state - Bugfix: modify the configure script to have errors if popt or fam libraries not present - Sorted the contributors list - Feature: When adding a mailbox and if one is selected, the new mailbox is copied from the selected one - Feature: If password is empty, gnubiff try to find by looking at other mailboxes and matching (address/username) - Updated THANKS file - Bugfix: display last received mail for each mailbox (up to popup_size) - Bugfix: Take popup_use_size_ into account - Bugfix: Use of the decoded charset for imap4 - Bugfix: Added a lock for the ui-authentification/ui-certificate access - Bugfix: Fix a problem with certificate (not taking the HAVE_LIBSSL flag into account) - Bugfix: Bad line fixed in apop. - Bugfix: lock for ui-authentification access was not used in imap4 - Bugfix: Newly created mailboxes were not created properly * Robert Sowada (adapted by Nicolas Rougier from v2.0.3 to v2.1.0) - Gnome version can determine itself if in standalone mode or panel mode - Removed "--gtk" option, added "--applet" option in debug mode instead - Added "--version" option to all versions of gnubiff - "--help" option handled by "poptPrintHelp" in all versions of gnubiff - Removed messages that are no longer necessary - Bugfix: Using in password entry - Bugfix: return value of main - Output of "--help" restructured - Update of man page (command line options, version, date) - Bugfix: Failure of select command (IMAP) - Bugfix: Failure of opening connection (IMAP) - Security Bugfix: DoS attacks by sending unterminated lines anticipated (if SSL is used, this was fixed for non-SSL connections in 2.0.2) - Bugfix: Handling network writing/reading errors - Bugfix/Feature: Support for international Mailbox names for IMAP - Security Bugfix: DoS attacks by sending a unterminated response to the SELECT, SEARCH, FETCH (IMAP) and TOP (POP3) commands anticipated - Bugfix: User set value for maximum number of mail to be collected is now respected (IMAP) - Bugfix: Fetching mails is no longer stopped if certain strings are in mail or mail header (IMAP) - Bugfix: First lines of email content are now displayed (IMAP) - Bugfix: Displaying mails that do not end with a newline (IMAP) - Feature: Only get first "text/plain" part of mail, not the whole mail; don't get the whole part if it is very long (IMAP) - Feature: Message if there is no "text/plain" part (IMAP) - Bugfix: Creating different tags for different commands (IMAP) * Robert Sowada - Updated german translation - Various small changes in GUI - Updated "text" "plain" fix of Nicolas to make it safe for future extensions - Get encoding and character set of "text" "plain" part (IMAP4) - Updated intltool utilities to version 0.32.1 - Ported local and distant mailbox detection code from 2.0.3 to 2.1.0 - Decoding of quotedprintable encoded mails (IMAP4) - Error message for mails in unknown enoding (IMAP4) - Bugfix: base64 decoding now rejects invalid encoded strings - New source files for decoding and converting - Separated q-encoding and quoted printable encoding - Number of lines (of mail body) to be read is now a constant - Bugfix: Setting file permissions of scripts in configure script (fixes bug #1083485) - Marked strings for translation (GNOME menu entries) - Bugfix: DoS attacks in IDLE command (IMAP4) - Bugfix: Hanging of local mailboxes - Ported saving to configuration file code from 2.0.2 to 2.1.0 - Ported mh protocol fixes from 2.0.2 to 2.1.0 - Ported maildir protocol fixes from 2.0.2 to 2.1.0 - Ported substituting of "%d" from 2.0.2 to 2.1.0 - Bugfix: Selecting "File or Folder" or "Autodetect" in properties dialog - Bugfix: Segfaults when all mails are read while popup is present - Bugfixes in local mailbox detection; local mailboxes are identified immediately - Feature: Use of relative paths allowed (when not using autodetection) Version 2.0.3 * Roland Stigge: - Updated man page (section 1, "GTK+") * Robert Sowada: - Changed version to 2.0.3 - Various small changes and bugfixes - Updated german translation, updated po files - Gnome version can determine itself if in standalone mode or panel mode - Removed "--gtk" option, added "--applet" option in debug mode instead - Added "--version" option to all versions of gnubiff - "--help" option handled by "poptPrintHelp" in all versions of gnubiff - Removed messages that are no longer necessary - Bugfix: return value of main - Output of "--help" restructured - Code for saving the configuration file cleaned up - Bugfix: Autodetection of IMAP - Bugfix: Failure of select command (IMAP) - Bugfix: Failure of opening connection (IMAP) - Security Bugfix: DoS attacks by sending unterminated lines anticipated (if SSL is used, this was fixed for non-SSL connections in 2.0.2) - Bugfix: Handling network writing/reading errors - Bugfix/Feature: Support for international Mailbox names for IMAP - Security Bugfix: DoS attacks by sending a unterminated response to the SELECT, SEARCH, FETCH (IMAP) and TOP (POP3) commands anticipated - Bugfix: User set value for maximum number of mail to be collected is now respected (IMAP) - Bugfix: Fetching mails is no longer stopped if certain strings are in mail or mail header (IMAP) - Bugfix: First lines of email content are now displayed (IMAP) - Bugfix: Displaying mails that do not end with a newline (IMAP) - Feature: Only get first "text/plain" part of mail, not the whole mail; don't get the whole part if it is very long (IMAP) - Feature: Message if there is no "text/plain" part (IMAP) - Bugfix: Setting always status to MAILBOX_ERROR if an error occurs (POP3 & IMAP) - Bugfixes in displaying first lines of mails - Bugfix: Creating different tags for different commands (IMAP) - Update of man page (command line options, version, date) - Bugfix: Handling of text lines beginning with a dot (IMAP & POP3) - Bugfix: Deleting of mailboxes when detecting mailbox format - Bugfix: Updating when connection for mailbox detection fails - Bugfix: Using in password entry * Nicolas Rougier: - Updated french translations Version 2.0.2 * Some cosmetic fixes * Bug fix in IMAP4 protocol * Bug fix in APOP+SSL protocol handling * Bug fix in seen mail handling being reset after error * Bug fix in image choosing for preferences panel * Bug fix when panel is vertically oriented * Bug fix in applet or biff font to be always bold * Bug fix when asking for password or certificate * Bug fix in apop.cc (debug message) * Mail count added in gtk applet window title * Nicolas Rougier - Some fixes for FreeBSD - Imap4 bug when copying from another mailbox (folder_ was set to "INBOX") * Roland Stigge: - updated po/{nl,de}.po - finally fixed g++-3.4 compile error (Debian bug #271288) * Robert Sowada: - Various small changes - Bugfix: User can no longer make config file invalid by using XML sensitive characters in strings - Bugfixes in setting file permissions - File permissions are only set when creating a new config file. So the user is able to change to less restrictive permissions if he/she wants to do this - Bugfix in detection of animation information (via filename) - Bugfixes in detection of local mailbox format - Bugfix in mh protocol - Bugfixes in handling of sound filename - Bugfixes in string handling - Bugfix in "new mail" and "no mail" tooltips - Security Bugfix: DoS attacks by sending unterminated lines anticipated Version 2.0.1 * Small buf fix that prevented GTK+ version to be compiled Version 2.0.0 * gnubiff now officially part of the GNU project * Complete redesign of interface inspired by MailNotification by Jean-Yves Lefort. * Automatic detection of mailbox format * New option to tell gnubiff to never send passwords in clear * Better handling of SSL certificate * Various small bugfixes * Security fix in possible buffer overflow (pop3.c) * Security fix in pop3 (infinite uidl list would block gnubiff and ultimately crashes it) * Bugfix in geometry handling (was not saved properly) * Bugfix in pop3 protocol to really get only most recent headers * Bugfix in apop protocol which was really broken * Bugfix in imap4 to handle server panic * Bugfix in utf8 translation * Added hidden files in gtk_file_chooser's Version 1.4.0 * gnubiff now requires glib/gdk/gtk/libglade 2.4 * Use of file chooser instead of file selector * PNG simple animation support * Preview added when selecting images * Image/animation resizing with panel for GNOME version * Read mails are saved in configuration file * User can now choose text to be displayed when new mail and when no mail * Possibility to choose command to play sound * Possibility to choose popup background color (to make it flashy) * Possibility to hide image or/and text when no mail and when new mail * File protocol has been improved to speedup things * Security fix: table used for password encryption is now configurable using the --with-password-string making your .gnubiffrc dependent on your gnubiff executable (far more secure than previously but still very unsecure). * Configure script has been changed to auto-detect gnome * Bug fix for automatic check at startup * Bug fix in IMAP4 protocol with user/password/folder fields * Bug fix in maildir protocol with the static mtime field * Bug fix in file protocol with the static mtime field * Bug fix with mail read and popup preview * Bug fix with multi mailboxes and polltime * Bug fix in creating a default configuration file from void * Bug fix when no mailbox defined in confiration file * Bug fix with gethostbyname which is no thread safe on some platform * --enable-debug option added to configure Version 1.2.0 * Real multi-mailbox support * Mouse button clicks are now different * Bug fix in displaying headers * GTK version got now a popup menu * New possibility of marking "mail as seen" Version 1.0.10 * gnubiff becomes multithreaded (so it won't hang while checking for mail) * Bug fix in playing soundfile with space in name * Spam tagged email are not displayed (X-Spam-Flag: YES) * Fix a bug when no connection or when server is unreachable * Added a "max collected header" option. * Various translation fixes Version 1.0.9 * Multi mailbox with GNOME * Small typo fixes * Rewrite of decode64 function * Fix a bug for handling bad formatted email Version 1.0.8 * Fix in password saving * Fix in imap4 protocol Version 1.0.7 * Fix a bug in playing sound in setup * Fix a bug with forbidden characters in password * Fix a bug with Pop protocols and null password Version 1.0.6 * Fix a bug with saved options for popup geometry * Added a configure option to save password within configuration file * Fixed a bug in imap4 protocol (prevents gnubiff from stalling) Version 1.0.5 * Fix a bug when consulting email and closing popup window * Fix a bug with the about window (GNOME version) * Fix a bug in mail file protocol * Added a --gtk version to the gnome version Version 1.0.4 * Fix a bug when consulting environment variables * Take the UW-IMAP mailbox state mail into account * Fix a bug in maildir Version 1.0.3 * Fix mailfile protocol Version 1.0.2 * Use of a certificate for SSL authentication * Window placement can now be done by window manager Version 1.0.1 * Complete rewrite of gbiff2 that becomes officially gnubiff and to be part ot the GNU project * SSL support added - Achim Settelmeier * Possibility to read mail (first 10 lines) * All protocols fixed (hopefully) ------------------------------------------------------- gbiff2 package - development stopped ------------------------------------------------------- Version 0.4.0 * Hide 'Quit' button in configuration for GNOME version * Display title and read mail now also affect biff and applet * Fix IMAP4 protocol again (hope it'll be the last) * gbiff2 now support animations ! Version 0.3.0 * Add man page * Add German translation * Fix French translation * More cleanup with 'make distclean' * Modified configure.ac script * Bugfix in IMAP4 protocol * Bugfix to handle cases when mail number > MAX_HEADERS (100) Version 0.2.0 * Fix bug with image filenames * Fix bug in popup delete_event_handler * Fix window positionning * Add a 'smart update' buttons for geometry automatic update * Remove schemas file from GNOME version Version 0.1.0 * Alpha release * GNOME 2.0 support * GTK 2.0 support * Use of a config file ------------------------------------------------------- gbiff package - development stopped ------------------------------------------------------- Version 3.2 * Configure change to include orbit headers properly Version 3.1 * Popup window has decorations back * Added support for apop protocol - Earl A. Killian * Bug fix in GTK style management - Philippe Berger * Bug fix in IMAP4 (yes, again !) * Bug fix with missing logo.xpm file in RPM distributions * Bug fix in mail application saving * Bug fix in pixmap handling * Bug fix in window management Version 3.0 * Bug corrected in RPM packages - Dennis Bjorklund * Major interface change - Josh Parsons * Bug fix in window positioning * gbiff now only displays new mails (use of 'Status:' field) * You can now launch a mail application by a double-click * Bug fix in buffer overflow in IMAP4 protocol Version 2.6 * Bug corrected in MH protocol when only one mail * File last access time fixed in FILE protocol (mutt) * Dynamic ports for POP3 and IMAP4 protocols (omnibiff, ssh) * Suspend button for stopping automatic check * --user option - Craig B. Agricola * Memory leaks fixed - Craig B. Agricola Version 2.5 * Added support for imap4 - Cai Yu * Minor bugfixes - Cai Yu * Web page documentation Greg Fenton * Base64 decoding support -> parse_base64 by Michel Leunen * Minor bugfix in file descriptors handling * Internationalization: French added Version 2.4a * Major bugfix in mh-style maildirs * Minor bugfix in pop3 protocol - Blaise Tarr * Minor bugfix in font selection - Blaise Tarr * Minor bugfix in memory leaks Version 2.4 * Added Support for mh-style maildirs * Minor bugfix in qmail-style * RPM packaging - Richard Torkar Version 2.3 * Gnome session management - Neil Muller * --disable-gnome flag in configure script, allows to use gbiff without gnome * Minor bug fixes Version 2.2 * Bug fixes - Neil Muller * Added Support for qmail-style maildirs - Neil Muller * Bug fixes for buffer overflow * Added support for gnome panel size and orientation Version 2.1 * Added support fo POP3 protocol Version 2.0 * Gnome dockable version Version 1.0 * Fix remaining bugs Version 0.4 * New handling of mouse button events: - keeping mouse button pressed makes headers to remain popped. - keeping mouse in popup makes headers to remain popped. * Max length option for 'From' and 'Subject' fields * New field (number) in popup window * Possibility of sorting headers by number, sender, subject or date by clicking titles. Version 0.3 * popup_geometry bug fixed * you can now play .au or .wav sound files when new mail (requires a play program) * you can now choose the main window background color Version 0.2 * Display date of messages * Possibility of choosing what has to be displayed in popup window * Presentation in list format * Several bug fixes Version 0.1 * Check for mail and popup a window with sender and subject information * Click on main window to force mail check. * When headers are popped, click on them or in main window to hide them. * Display unread mail number at any time ------------------------------------------------------- Copying information: Copyright (C) 2000-2005, Nicolas Rougier Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. gnubiff-2.2.16/aclocal.m40000664000175000017500000043526012474430241012020 00000000000000# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # gettext.m4 serial 63 (gettext-0.18) dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) # iconv.m4 serial 11 (gettext-0.18.1) dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) fi ]) # intlmacosx.m4 serial 3 (gettext-0.18) dnl Copyright (C) 2004-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include ], [CFPreferencesCopyAppValue(NULL, NULL)], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # lib-ld.m4 serial 4 (gettext-0.18) dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) # lib-link.m4 serial 21 (gettext-0.18) dnl Copyright (C) 2001-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) # lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # po.m4 serial 17 (gettext-0.18) dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR