crack-attack-1.1.14/0000755000175000001440000000000010241200262013647 5ustar webbsteruserscrack-attack-1.1.14/doc/0000755000175000001440000000000010241200525014416 5ustar webbsteruserscrack-attack-1.1.14/doc/cube_icon.ico0000644000175000001440000005372610232375751017073 0ustar webbsterusers00f h00 %  B hnS(0`  ` ``` ` ` ``@`@@ `@ `@ @ @ ` @ ` @@ @ `@@ @@`@````@` @` ``@`( 0((8((@hh8(8H88 H@8xxxx(00`Xhh0( 8@8HHXXHXX0 0880`X`h(8h8((0``hppp @Ph08@ @(8((088@8H8@@PHXHPHXPPP`Pph`h 88(Hx8XX(((0(0(H0888X8@8H@HHPHXHXPhXxx(((0(0(8@XX8((08 X(@ @ 8@` H(@( (0(0(80H080(008p0800808P8@80(8Hx8H@PP`XPXX`h`h`phphIIIJAACQQAAIIAAAAQQQAAAAAAAKAAAAAAAAAAAAIIIJAKCQQAAJAKQCCCCQQAAAAAACCQQKKKKKAAAAIIJAQCCMCCKKCCCCCCCCQKKQQCCCCCCCEECCCKAAIIAAKQCC CCCCF CCCCCECCC CCCC CCECAAAIIAAAAKCC BBB FFHHHHFFFFF ggg BBBB CCKJJJAAAAQC BBBBwBHFHXcccccXHHGGBBBBBBBBBB CCKAAAACC BBBGG]]]]GXc[ZZZ[[jjYYYGGGGBBwBB CQAAIIAK BB]G]x]]]]Gd\ZZ[jYYxxGGBF CQQPIIAC G]]]]x]GGY[[z55n59ZZYX^AAPIIJCFG]]]]GGGzZntSNnnƿdzzi^QAIIJEFBwwwwwBH[\t|T}bSsnnVdzkiAJEF BgvvFyz\rVSTRo}oLSɅ`emAAAAAEECMQ*Cye_ToofoT|LLtVVl/AQAAKKKQ֎%Ay\\\VNTRso_TottsVSr5^AQQQAA֎Py\rVLtUassRUu~~VÃz/EMQCCMAҬ-\eVNOa~uu̇as~ĝſAQA^APDҭkZ\eLUT}u_LSu}affss_9ÿAQJAqԦ㌩֯klm`~OoTsNSLfTo}NbhKAAAq׌ky\ebWR}NS_LTfWRuOb5k/AJAqP蒲ZlVUTa}RSt_SafTfWpONL5mkhAqqAD׀yreWWfW}tb__oToWfURbzD%/lmRWUfTLNLSoWUΈTSriJDD`ufUWfObN_N|opOUfT|ǚADD%$rbOpWfN|L_S_RLRpWURhDDﬨyVnOWWTbNLsb_LRpWUT~d^D$㨀\UUWU}uLRtNL_uUfdiKPPDخ肖\NUUNOR|NL_̣~dKADD׀䒖ldV`LUWWT}pOsS __~pKKPDҬ$l_~WURauottL_`_LNuzkKAAPD㌩$䂓mduΊUOWOfORSb_VN`zihKA߂zdrS}TOTOOT|bS`nn-iKJDѨ+leVNWUORTR|NL_V{-hKD ۵rsRUΊWOORaRsN`SS{m-hKDDѨ+l{`S|OWUUOpOOu~NLŠ`n{iKAP֎ܰ\{tLUUppO9955emhKAAԎ%%6*遙zNNb͉OObzdmkhAQAQԎҭ *F粕59ÿeVmm\ZZZyiEAPIAKCQզҎ*B/c촻ZZZZ[[[[[cEEAAIAECCMQPPv GG YYYjjjc[cXXXHHXcXXC^AA^EF vCvCgBwBBBGBGGYGYGYYBGBBHYG HBBHBGFFC^AAACFFFF BBwBwBgBGGBGGGGGGGGBBBBGGGBBBBBBB CKAADDAQCFFF HBwBwBBBBGBGGGHGHHHBBBBBGBBBBBBBB CCKAADDACCFFXHBBBBBHBBHBHHHHHHHH BBBBBBBBB CKAADAACEEEE v BBB CCCAAAAKKhEMMMCFFCCCCCMMMCCCCCCCCCCCCCCCCCCCAAAJJPPAAEEAAAAQQ^MAAAAAAAAAAAAAAAAAAAAAIDEKAAAAAAPPAAAAJDDDJJJII( @ ` ```` `` ` `@ @ `@ @ @ @`@@` ` @@ @ @@(0 (((@88H@(08@(@8xx XX`Xxp (8 0088@8H@@@HHPHXXh``hhhphphxpppxx (088(0H88X`8 0@8 0(8(8(H080@0(808088H8P8088PHHH`P`XPXhhx ((( 08808HHHP ((0XXhxx  0(088@X``xx(8 0@HPhh 0 @ 888 @X X p  0 @ (   ((0( ( (((@(8@((H(HH(@h((p(((0(0((0(0(0@x080(000(0(808H888@8088888@8X@P@H@@HXH..5(((((((?((((((((((((.((**?((?***?((((*?,,,,,(((?****************,(..((**)))/00222/0)))))))*,(((*))-99-{{A~{@x----9)*((.*))99999x~^II[[A@oS*(>..*)999r-@Y]KJdd!^yq(57)kkk0{YHCJ433cKa^]GW((,*?QBYcDD1JCZ((?(>?XV JDLJ;M4331;a^[Q?**(+ƲVX ODf;1MffLM;K[y(5,>TB 1hDL1C13N331[y((sB eihD3Jb3NND4^UF(>(mt M6N411bC3D=8=e^UF(+mtT]<884<1J`6N3!:}>+nvBZa6j=+?PrS0@@@A~@{2222227,((*/l))))))-----)))-)))))/*((+(///))))))))--00)))))))))*(((*7//))0)))))*((((,,?**/***EE************((+s,,(((>?(((((((((+q5.( @   !$+()*++,($))3 7J 0I1A+>%9#/..  #;44(gh,GA3,#}qkXY/*.n59gf,LH@+z }nsH H 2 )q)28VS%F/0 |ww#M E5 q 0r--3GDB,"~z.(I ? " g +o(,1?<<(6HH C  g q& +@;}}3 ~'7%C < N #s DAt s%##B7  )>%E?m nci<;312 B*d \|}f `YFJ ;"%/30=&P?G7?"810)     WWҳäfvwxyz{|}~ghijklmnopqrstu XYZ[\]^_`abcdefIJKLMNOPQRSTUVW:;<=>?@ABCDEFGH*+,-./0123456789 !"#$!%&'()    (0` %                              "$%'% #%& % % " ! ""%''" "#%&%%!  #%)+-/,%#( +/210-*(( + ./,(((**++*&! !((,/023320-29!B,H5I5D3E4>-9#77994 41 01000/*%!   &+124556663? =#A+J7Y H` Ra T^R]SVJL=H7J4J1H*A"@";;99 8 63.($  #-4478:23< 36:8#S @cT]Ry 1|rm(`$L; *!!   !*244.1(1 %I-9"P?K>lb`[qp+~ 1/ +fip mrkf\wl`T^UO H>:=:   #%%+" ( ) 9%@0]QKBZThg~ 0%~&%( %x1sqw sgbk ibbX ZRV-/()8"5     ?D50*:-;1P GQKh ebdx}:&  2 +6!& defiX]GNLPL!L      2/QVr='5 1$70GAJDD?bbeg&#%$ : rt+ ie_bTXz,NQ30/'  $8UC~4Gz7$ *!4/P NHCPMZZikA+ *B#.% }*ki+^ ^XTN"G   6S,}(/})3o))$!@=C?A>OMh fkk'8#& ,1~- >+, |nf.|zw$sRL2(<,  1Z d#!4q/!"'-@;D>hgts08<9'!&~{x *+3' 290(#}Y RB :B9   4=ebu}>r< (*22,D;GEhicbkj$B&$,}| wt+1%-7   BQTn *"N|M0":&,/*81?>SThgnmF;:/<.|zyv~|nl# 9T52?'1{vb ]9593  9 X Ydw6,'R'',-!D J)&@9JIWYdd&)8?.+ * nm~{ 97t.,;6??a aba| z21<53;/&z{%~}E7e>,8' 3UPC=:6  !YZE`:.$I')(25<*.+'>:RQZ[`a39FP82& -sr|z) + Eg61,@% omxt|.@42 *aWND#  7VbU~ C:IiJ!'#,;ACAGDONa`~%7N3A8C@'8)) nhxt#B#,^ TI >," 6R j c~@;6Y7*3=CKIKE\[fewuW<C 1;/7LJWQUSccvu&;a372@(B,0 us{yppwv(>zc[B:=5 ( `ey OOE)65?Y V^W_]bd8#OXET=5>635(1omnnmowyjl-x u1c]OH 9 bk!TWA &2IT] Z`Y[Yr r~|O@Q1#9^5*64, / 0x{nqloqqxvc_OK!  ,Af38ann]`IOAB@G49/9&)~ f i\_U XF G8 4  ,(Z!t;7QLyLo==8)9%7(L E^[a`"/+C5`<@:<380/.43pk8`Wx(o[ S] VY VPNID<7-$ 5 <^B5Gz6iyPD7'"> &2#G <] R{$tlf:rn/wvo pkjgfdc`^b _[XZUPKV QE>I@F:G8B2F79+F:B68.0%!  # ..429%&S%2.; &E/D0W BV CW FY ITETETEQDKSGk f&"~}ie\Oa LQ9L5P>4&#), ' &%0G 6RF]Wtt!${ s op je `VV<>))  &0 :;2$C:PH][~ ! |zfhW]O V>>:Bv/,M 5-HEID\\ %urmode>9 =n5.C 63C?KIa`7"! |)b\< 1#    %] t'%?99B9NMaa.zx&3'h`= 3  5 Xr.*&D%33@7KKcb7,xv%%(44!ngA : E Y v,&)@+*-,;4SUcc$?+(zw|z0I82!qk>8OT x7-(9-)24 594PPkk(77'&us#FX>(zE@[F~ 9/(4008,,=9TUml/@;1% ~/R<-ytB< 0%o$J =3087$,0/A=XWqn3C4.%&"zy0A1"zpG >:eZ B:377#,>>GC[Z~8G:74)( |wr*5zoH = /a k94!&$*3CEPK_^xv9L45&18 |ur /)vmK A!1h w;:'4IK\V``=QD12;+$  }oonq&ysG@ 3`*, uxsy`h` eHJ$T &-*-1(UXag}yK?]aSGC>8(&$x|^fT Z: 9 C %|FAg_7A'0C:XV}~+6FPA>73.5)(xs jib] YSQD@-%  .T@d+JD*/: $C3^Qnbrhqja\]XVQSLPIIAF>>4>0=+<*9)<-/"    # 5 0 ) 6<8? A"B%@";<B "42*,,+ +$   --)(..-1001-+-+0 (((('" " "'.-)(+-,/,+**('-/,)('$   !%%$%%%#$"#""!!(*'$"!          (  @       %/30=&P?G7?"810)312 B*d \|}f `YFJ ;" )>%E?m nci<; N #s DAt s%##B7   g q& +@;}}3 ~'7%C < " g +o(,1?<<(6HH C5 q 0r--3GDB,"~z.(I ?2 )q)28VS%F/0 |ww#M E.n59gf,LH@+z }nsH H  #;44(gh,GA3,#}qkXY/*))3 7J 0I1A+>%9#/.. !$+()*+(+,($   crack-attack-1.1.14/doc/cube_icon.jpg0000644000175000001440000000212610232375751017065 0ustar webbsterusersJFIFHHExifMM*C  !"$"$C00"2!1AQ"2aqR%r(!1A"Q ?PUP  աZS1IlMmJLU.ĕ))_ccY>q_ Щ/RA 8GvN{VpNDH w> Yis:?85ک>wt->kL)`WtM)?g_h8jA:f>. /x"-9z}&DV\=EeS/4[p'$TL!* &\-¼Մ@*]+kUH/ g1M<$~8t{0CXֶ Dܛ_6u) ʽ*I1x "$SJGەq3 pUJBL\;o&&) $g*K-QDG$Ȟi٦ $?keftusBRG7UFz^3PR@>-{K3@2<敥h{b2ϟͪi_J[R$; !dlKsnt{<`lGdؚECIR}CUoI?. g #330000", ", g #006600", "' g #339900", ") g #009900", "! g #663366", "~ g #990066", "{ g #993399", "] g #990099", "^ g #663399", "/ g #660099", "( g #336600", "_ g #00CC33", ": g #33CC33", "< g #33FF33", "[ g #009933", "} g #CC33CC", "| g #CC66CC", "1 g #CC3399", "2 g #00CC00", "3 g #FF66FF", "4 g #FF66CC", "5 g #CC33FF", "6 g #9933CC", "7 g #CC66FF", "8 g #FF33FF", "9 g #9900CC", "0 g #FF33CC", "a g #339933", "b g #336633", "c g #006633", "d g #993366", "e g #CC00CC", "f g #CC0099", " ", " .+@@#@#@@#@#@@#@#@++++++++++++++++++. ", " +++++++++++++++++@$@+@++@+@++@+@++@+@++++ ", " +++@+@@+@@+@@+@@+@+@+@++@+@++@+@++@+@++@+++ ", " ++@++@+@+@+@+@+@+@+@+@+@@+@+@@+@+@@+@+@@+@+++ ", " ++@+@+@@@@@@@@@@@@@@@@@+@@@@+@@@@+@@@@@+@+@++ ", " ++@+@+@@+@@@+@@@+@@@@@@@@@@@@@@@@@@@@+@@+@+@+++", " +@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+@+", " +++@@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@++", " +@+@+@@@@@@@%@@%@@@@&@&@&&@&@#&@&@@@@@@@@+@+@++", " ++@+@@@@###@*@&&&=-;=;-;&&&&&&&&&&&&&&+&@>@@+@+", " ++@+.$,')',@&&;=!~{]^/~/======&=&&&&&&&&&&&+@++", " +@+#,(_:<[.&&-==]{{}}|}}}}1{{{{{{]^~!====&&&+@+", " ++$$,)22:+&&&===^]}}}3334|5|}}1}{{{{]{]====&@++", " +@$$,)):2&&&&===]~64}}|7}|}}}}6{{]{]^=!/====+++", " ++$,,))2:+&&&====]{37}}48|}|61{}{{]{~]~=====+@+", " +@$$,)):2&&&;-==={{84}}}|}}}16{{]{]^=/====]=+++", " ++$,,))2:.&&&====]9|8|}6}|}6161]{]{~]===]]==+@+", " +@$,,,)):.&&&==;={{070|}{}}16{{{]{=/==={]{==+++", " ++$,,,)a2.&&&-;-=~{545}}}{}61]{]^~/~==]{{]~-$@+", " +@$,,,,)2b&&;-&==/]|}|}}{{{}6{]{]!]=={{}]{==+++", " ++$,,$))2b=&-;&-=~{}8}}}}}{]}{]{=]=={]}{{]=-$@+", " +@*),$,)2b=&&&&;=/{}|}}}{{]{]1{]==/]1}}{]{==+++", " ++@),$,)2b=&&&&-==]}}}}{}{{{]{]{=]~6}}}6{]=-$@+", " ++&,,$,)a,==&+&;=={}}|}6{]{]=/]{]{{}3}}{{]=;@++", " +@+,,$,)_(==&&&&==~6}}1}1{{/{~=]]}}3}}}{]{=&#++", " ++@$,,,,2c;-.+&&=={{}}6{]{]d/==]{}}3}|{{]{==+@+", " +++.,,,))'-;&@&&===}}}1}{]{/~==]{]}|}}}{{]=&$++", " +@+$$,,,))&-&&&&==/{}6{9{]]!/~{6e{{}}}}{]!=-@++", " +@+.$,,))a&&&&&&-=~{}1}{{]d]=]{f{}]{{{}{{]=;$@+", " ++@+$,,,))&&&&&&==={}9{]]{/=]{9}{]{]{{{{]!=-@++", " ++@+$,,)))>&&;&&;==]}6f{{=]]{f{{f6]{]={{{]=&#++", " +@+@+$,)))@&&-&&-=={1{9{]{]{]6]}]{]{]^={]!=&#++", " ++@+@#$,))#+&&=&;==]9}]{]~^]{}{]{]{]d]!=!]=.+@+", " ++@+@@@$,)#@&&&-&=={{]{]{/]1]]{]{]]^]=]=&!=&#++", " ++@+@@@&@,#+&&&=&===}]{]~]19{6{]{]d]!]===&=.@++", " +@+@@@@@@%@@+&&=&==]{]{/{{]{f]]{]/{=]=====&&#++", " +++@+@@@%@@%@&&=&==={]]]{f6]{]{]d/~/=~===-&>>@+", " +@+@@@@@@@%@@#@&=;-~]]!]6]{]{]/d/====&-&.&>&@++", " +++@+@@@@@@@%@@>&-==]^f{]]{====&&&&@@@@#@#@+@++", " +@+@@@@@@@@%@@@&&&&=====;&&&&>@@&@@@@@@@+@+@+@+", " ++@++@+@@@@@@@@@@@&&&&&@&@@@@@@@@@@@@@@@@@@+@++", " +++@@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+@++++", " +@+@+@+@+@@@@@@@@+@@+@+@@+@@@@+@@@+@@+@@+@+@+ ", " ++++@+@+@++@++@+@+@+@+@+@+@++@@++@+@+@+@+@+++ ", " +++@+@+@+@+@+@++@++@+@+@+@+@+++@+@+@+@+@+++ ", " ++++@+@++@++@+@+@++@+++@++@+@+@++@++@++++ ", " +++++++++++++++++++++++++++++++++++++ "}; crack-attack-1.1.14/doc/extreme_icon.xpm0000644000175000001440000000730610132356545017650 0ustar webbsterusers/* XPM */ static char * crack_attack_extremeicon_xpm[] = { "48 48 81 1", " g None", ". g #333333", "+ g #000000", "@ g #666666", "# g #663366", "$ g #336633", "% g #003300", "& g #006600", "* g #00CC00", "= g #660033", "- g #660099", "; g #CC33CC", "> g #CC66CC", ", g #993399", "' g #990099", ") g #660066", "! g #330033", "~ g #009900", "{ g #339933", "] g #663399", "^ g #CC3399", "/ g #9933CC", "( g #993366", "_ g #330066", ": g #9900CC", "< g #000033", "[ g #003333", "} g #990066", "| g #330000", "1 g #000066", "2 g #660000", "3 g #003399", "4 g #990000", "5 g #993333", "6 g #330099", "7 g #663300", "8 g #993300", "9 g #CC0033", "0 g #CC3333", "a g #CC0000", "b g #FF6633", "c g #CC3366", "d g #FF3333", "e g #CC6633", "f g #CC6666", "g g #FF3300", "h g #FF6666", "i g #CC9999", "j g #FF6699", "k g #FF9999", "l g #FFCCCC", "m g #FFCC99", "n g #CC3300", "o g #FF0000", "p g #FF9966", "q g #663333", "r g #336666", "s g #999999", "t g #9999CC", "u g #CCCCCC", "v g #CCCCFF", "w g #666699", "x g #CC99CC", "y g #333366", "z g #666633", "A g #FFFFFF", "B g #FFCCFF", "C g #CCFFFF", "D g #99CCCC", "E g #9999FF", "F g #99CCFF", "G g #CC99FF", "H g #6666CC", "I g #333300", "J g #9966CC", "K g #6699CC", "L g #333399", "M g #6666FF", "N g #9966FF", "O g #6699FF", "P g #669966", " .++++++++++++++++++++++++++++++++++++. ", " .++++++++++++++++++++++++++++++++++++++++. ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " .+++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++..+...+...+...+.+++++++.+...+...+.+.++++ ", ".++++...@@@.@@@#$@@.@...+++++..@@.@@@.@@@..++++.", "+++++.@@@@.@$$#@###.#...++++..@@@....@.@@@..++++", "++++..@@@+%&*.=-;>;;,,'))!++.@@@+++++++.@@..++++", "+++++..@@@.~~!));;>;,,'))!+++.@@.+++++.@@@.+++++", "++++++!..@$~{!))>;;;,')]'!++++.@@++++.@@..++++++", "+++++++++..&~.!);;,,'),^-!++++.@.+++.@..++++++++", "++++++++++$&~#!);;,,',;/(!++++.@.++@@..+++++++++", "++++++++++%&{.!_,;,');;;)!+++.@@++.@..++++++++++", "+++++++++++&~.!=,,''',,,#!++.@@++.@..+++++++++++", "+++++++++++%~.!_'^',,:',)!+..@.++@@.++++++++++++", "+++++++++<<<[[!!',',',}))!+|.||||..|++++++++++++", "++++++<11<1<1 Crack Attack!


A free OpenGL game for Linux and Windows

based on the Super Nintendo classic
Tetris Attack

by Daniel Nelson

version 1.1.8

Version française





Download, Installation, and Running | Requirements | Screen Shots | Wallpaper
Game Play | Advanced Features | Final Notes | Contact



Download, Installation, and Running

Linux

Linux download, installation, and running instructions.


Windows

Windows download and installation instructions.


Requirements

  • Linux or Windows
  • OpenGL - Standard with all modern Windows versions.
  • 3D Graphics Hardware Support - The game is unplayable with out it. That is, unless it's the year 2010 or higher.
  • Screen Shots

    Here are a few quick screen shots so you have some idea what you're getting yourself into.

    Wallpaper

    You know you need lame Crack Attack! wallpaper. Right click on the links to download.


    1280x1024 standard wallpaper
    1152x864 standard wallpaper

    1280x1024 X-treme wallpaper
    1152x864 X-treme wallpaper


    Game Play

    Screen Description

    First a quick overview of the game screen.

    1. Crack Attack! logo.

    2. Your opponent's level lights. These indicate the height of your opponent's stack. When the red reaches the top and they start flashing, he's in trouble!

    3. Your level lights. These correspond to the height of your stack. When your stack reaches the top of the screen, these lights flash to warn you of your impending doom. You've got seven seconds to reduce your stack or you lose. If nothing else, just eliminate some blocks. Time during which blocks are disappearing or garbage is shattering do not count towards these seven seconds.

    4. Players' names.

    5. Your star collection. When you win a game, you get a happy yellow star. Once you earn two, you win the match! In this case the player won the first game, lost the second, and the third star is being contested.

    6. The clock keeps track of how long the current game has taken. In solo mode the clock is replaced by your score.

    7. The four orange blocks have been eliminated and are disappearing. Any time three or more of the same color blocks are in a row, they eliminate. In this case, since the elimination is more than the minimum size of three, a '4' appeared to let the player know he was doing a good job. The rectangular-ish white thing is your cursor. You control it with the arrow keys and use it to manipulate the colored blocks in your stack.

    8. These are the blocks in your stack. You can use your cursor to swap blocks which are side-by-side in order to put blocks of like color into a row, which causes them to eliminate. And you'd better be quick about it, because your stack will creep up from the bottom and once it reaches to top of the screen, you loose.

    9. This is a piece of garbage in your stack. When your opponent does something clever, for example eliminating four blocks at once, garbage will fall from above, cluttering your stack. You can shatter garbage into normal blocks by causing a bordering elimination.

    Play Control

    Play control is very simple.
    Arrow Keys

    Move your cursor. Also, in solo mode, rotates the Hall of Fame.

    Space Bar

    Swap the blocks your cursor surrounds.

    Enter

    Advance your stack upwards one row.

    P | p

    Pause the game. During online play, either player is able to unpause a paused game.

    Esc

    Concede the current match or exit Crack Attack! after a match.


    Game Play

    The Basics

    Slowly, your stack of blocks grows from the bottom, and you've got to make sure it never reaches the top. Because, once it does, you lose! To eliminate blocks from the stack, line up at least three of one color, horizontally or vertically. Once you do, those blocks disappear, and put off slightly your inevitable demise.

    To add to the excitement, chunks of red garbage will fall from above. It is impossible to eliminate this garbage directly. However, if you eliminate any blocks which are touching the garbage, the garbage will shatter into normal, run-of-the-mill blocks.

    Throughout the game your stack of blocks will slowly grow from below, initially quite slowly but always faster and faster. When the stack reaches the top it will pause and you have seven seconds to save yourself. It is possible, however, to get a momentary repose from your stack's assent. When you eliminate a block or cause garbage to shatter, the growth of your stack will pause. Even if your stack has reached the top and you're about to lose, you will be given a little more time to save yourself. Time during which a block is disappearing or a chunk of garbage is shattering does not count towards your seven seconds.

    Multiple Eliminations

    So, what is it that causes this garbage? Well, the garbage is your opponent's way of sticking it to you; and, conversely, your way of sticking it to him. While any old slod can eliminate a ho-hum three blocks, a true master will eliminate four, five, or even more blocks at one time. And when he does, not only will he be rewarded with a little light show, but garbage will come raining down onto his opponent's stack! Just remember, the bigger the elimination, the bigger the downpour.

    Combos

    Beyond the multiple elimination method, there is yet another technique to generate troublesome garbage. I speak of the dreaded combo. Whenever you eliminate blocks, it's likely to cause other blocks to fall, either simply because they were above the eliminated blocks, or because you have freed them from a piece of overhanging garbage. If, when these blocks fall, they cause a second elimination, you've got yourself a combo. If you're good enough to keep the combo rolling, your combo multiplier will increment for each elimination. And, when the combo is finally complete, a massive chunk of garbage will descend upon your opponent, it's size proportional to your final multiplier.

    Solo Mode

    Solo play works a little differently. Instead of trying to last longer than an opponent, now you're attempting to rack up as many points as possible before you die. The number of points you get for an elimination depends on how fancy it is.

    EliminationValue
    3 blocks2 point
    4 blocks4 points
    5 blocks5 points
    N blocksN points
    ......

    When you get a combo, all of the points you earned in the eliminations which made up that combo are multiplied by the combo's highest multiplier. So, for example, if you work up to a x5 combo, then all of the eliminations in that combo will be worth five times the points.

    But watch out! Eliminations generate garbage in solo mode too. Except the garbage falls on you! So, its a tradeoff between points and garbage.

    Once the game is over, if your score is within the top thirty scores ever, you win and your name is added to the Hall of Fame! If you manage to get the number one spot, you're in for an extra special treat. Use the arrow keys when viewing the Hall of Fame in order to check out the other scores.

    Gray Block

    While there is little more to say about the five standard colored blocks, there is an additional color of block, more rare than the others, the gray block. Even the elimination of just three gray blocks generates garbage, and this is no ordinary garbage. Normally when a piece of garbage shatters, the effect propagates on, destroying all garbage that it is in contact with. Often just one well placed elimination by your opponent can shatter all of your hard earned garbage. Well, gray garbage stops shattering propagation like a firewall and can only be destroyed by an elimination in direct contact with it.

    In solo mode a gray elimination generates three times the points! Because gray blocks are worth so many points, it's a good idea to try and work them into a combo multiplier.

    EliminationValue
    3 gray blocks6 points
    4 gray blocks12 points
    5 gray blocks15 points
    N gray blocks3N points

    X-treme Play Mode

    For those who have mastered the art of Crack Attack! and hunger for something more, we offer Crack Attack! X-treme!!! In Crack Attack! X-treme long lost block types, thought by some to be extinct, have resurfaced. Gone is the ho-hum, work-a-day world of the lone gray special block type. Replacing it is a cavalcade of color: over eight special block types!

    Use the -X command-line option to access X-treme play mode. One should note that normal play mode is the true test of one's Crack Attack! skill. While normal play mode can be likened to chess, X-treme play mode is more akin to winging a super ball as hard as you can in a small room, and seeing who gets hit first. It's fun, just a bit random.

    In Crack Attack! X-treme no block can be trusted and nothing is as it seems!

    Wild Block

    This crazy block can't decide which color it wants to be! Slowly it shifts though the spectrum, hoping to cause an unexpected match.

    Special Orange Block

    This baby lays out a hunk of garbage taller than it is wide, guaranteed to add height to your opponent's stack, and quick!

    Special Yellow Block

    Knock your opponent flat with this block's diseased garbage! All his controls will be reversed until he can figure out a way to shatter the garbage and cure himself.

    Special Green Block

    Special green blocks generate poisoned garbage which blinds your opponent! Well, sort of. Actually, it will cause his cursor to flicker and then disappear. The cursor will remain nearly invisible until the poisoned garbage is shattered.

    Special Blue Block

    When you cause the blue garbage generated by this special block to shatter, instead of turning into blocks, it becomes normal garbage. What a pain!

    Special Purple Block

    Forget those big, easy-to-shatter chunks of connected garbage. Any elimination with this block causes a veritable downpour of miniature purple garbage onto your opponent's stack. That stuff has a nasty habit of getting into all the wrong places.

    Gray Block

    This old guy's still along for the ride. You'll need him to help eliminate his relatives.

    Ancient Ancestors of the Gray Block

    There are rumored to be even more rare and powerful block colors, lost relatives of the gray block. Legend speaks of a black block and a white block, one which generates obsidian garbage that is nigh impossible to shatter and the other which generates pearl garbage and has dominion over the sun itself!

    Point Values

    In solo mode many of the X-treme blocks are worth bonus points. But are the points worth their deadly garbage!? You must decide. It's always a good idea to try and work any special block eliminations into a combo. That way the special blocks' bonus points will be multiplied by the combo's multiplier.

    Special BlockValue
    special orange10 points
    special yellow15 points
    special green8 points
    special blue5 points
    special purple5 points
    black? points
    white? points

    Advanced Features

    Personal Garbage Image

    Crack Attack! is fully customizable!

    That is a big lie. However, you can get it to use your own personal giant garbage image. Often, whenever you lay a really serious piece of garbage down on your opponent, it will have some sort of inspirational message on it. Normally, Crack Attack! chooses an image at random from its little stock pile. However, if you specify your own personal image, Crack Attack! will use it more often than not. During online play your image will be placed on any giant pieces of garbage which fall on your opponent. With solo play the image will be used on garbage you send to yourself. Just think of the possibilities! You can communicate your views on your opponent's intelligence, at the same time as you play a rousing game of Crack Attack! You could propose to your girlfriend, assuming she's enough of a loser to play Crack Attack! The list goes on.

    A personal garbage image must be 128x128 or smaller. Save the image as an uncompressed TGA with alpha channel. Name the image file garbage_flavor_my.tga. If you are running Linux, put the file in the directory .crack-attack/ which is located in your home directory. If you are running Windows, put the file in the directory localdata which is located in Crack Attack!'s application directory. Remember, do NOT use RLE compression when saving. Why? Because I'm too lazy to code up an uncompressor but too proud to use someone else's. Plus, your hard drive is huge. If you're really hard up for space, maybe you could delete a few of those LEXX episodes. When creating a personal garbage image, use a transparent background and keep in mind that that transparent background will become red once the image is placed on the garbage.

    As you play against a multitude of opponents, Crack Attack! will accumulate a set of garbage images and will use them from time to time. If you manage to obtain a garbage image which is of particularly bad taste and you'd like to be rid of it, find its file. Under Linux it will be found in the directory .crack-attack/ located in your home directory. Under Windows it will be found in the directory localdata located in Crack Attack!'s application directory. The file will be among the files named garbage_flavor_###.tga. Simply delete it.

    Final Notes

    Potential Improvements

    Believe it or not, there are improvements which could be made to Crack Attack!
    • Improved Socket Code

      Crack Attack!'s socket code was written based on my experience with parallel scientific simulation code. And no one has ever accused a piece of academic simulation code of being nimble. That is, my socket use is perhaps a bit naive, and I doubt it deals as effectively as it might with such things as not having a direct and dedicated connection. Much to my surprise, games have been successfully played between opponents on opposite coasts. None the less, there is still much for me to learn when it comes to writing robust, time-critical socket code. Until then, your best bet is to stay inside your LAN.

    • Triangle Strips

      I'm lazy and thus never got around to triangle stripping the basic block. As it is the block has over five hundred vertices. That's almost embarrassing.

    • Windows Version

      Done!

    • Sound

      I'm only one man!!! I don't have the time or the tools right now.

    • Chat

      Want to chat during a game? Go download AIM.

    • Money

      Someday someone will pay me to do this kind of crap. And I'll have an artist!

    Thanks to...

    Colin Walters | Wade Lutgen, friend and co-conspirator | Roland Peetz, play tester | Greg Kilcup, my infinitely patient graduate studies professor | Andy Colebourne, creator of AC3D - used to model the basic block | Mark Kilgard, creator of GLUT | the GIMP team | Nullsoft, creators of NSIS - an excellent and free utility for creating Windows install scripts | Mark Wilde | Mom

    GNU General Public License

    Copyright (C) 2002 Daniel Richard Nelson

    174 W. 18th Ave.
    Columbus, OH 43210 USA
    nelson@aluminumangel.org
    aluminumangel.org

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

    The GNU General Public License can be found online at http://www.gnu.org/copyleft/gpl.html. Additionally, a copy can be obtained by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

    Disclaimer

    It is important to realize that the name of Crack Attack! X-treme play mode is meant to be humorous, and thus should not itself be the subject of derision. Thank you.

    Contact

    Direct comments, questions, praise, flames, and job offers to nelson@aluminumangel.org. Visit my homepage at aluminumangel.org.

    crack-attack-1.1.14/doc/tn_screen_shot_0.jpg0000644000175000001440000001000510132356545020365 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222":!1A"Qaq#2br5BERS-!1AQaq"#$R ?P,R63Y\t3Z Dv*0W:s:& H)e:II,d(8ވBS*/N_{s!)_Gr;SifU)P@)@ R)@ R'fKS8u Ti$yW6J I$Ďm2+[`ga lgSRp%w R ֭[d֣;ҭ<KZd|"%Rh~r9 CхjR_g<3oy'֮2x+`FTqԎikVs7^C5Edw4pL˻GG+qmңWTHkŽHpcI֪Ups2p R~qթ5~ t^vM)Jhb)JP)JP&a-#GHQ5!ifMd# 8J傼؎+=[ͱf9k;oXJ hKϠ5t2Y4('/S#[2[XwW㧮*Rbn[ƷL֑z]JSyXRzlkzh!@Rвovϴ;b8= oJV1j3$xԗR]BGy(;š%é~KE5Ǚ"[Ie,(.mV˃8ЅuKHAJ(DO|WQǶ 78qu H\~#;5!EI{ԧEHJe6a?]^$'*l]FcΊBUIoAljxEۃ,9uj_‚NAAz)J̑JR(JR7{ظ uZ$`ecYqm b+rrz՛*p$`ڇDu[<Zչ>WcE :r[V^oJ''&Wi,,܈n!}`NOA׭GүBA.[Ҽ's=zMi;wu*sJR+6҅(@F{mXR$# '`NH mYԕŁ+S OG}Ž:t`. v_\DRTU$zUs Ga6u:<{֪>$ s(ה7:{ Dc[P.!Kuz+^֪RRrkm*+J}LϏ^F|'B݋䶶ܿ~c^O;%'1 4p-ՁF3ޡ0n? 急xV\ԥXxW WY8||? ?}t uzT`Y]T[`"$hc+(hZV{߳{VmԆ@ZBr<3o3oՅJJWGQIW-GSWjt?mNez̷ZXJb^RNF }{WNB}!i06\+R 59suWw[H#kZd@.H V@Ǘ֨<[1T@oFPrp1hD|7-l1\&}f<46ʋi(ʳGS/,ku5m4l9Wq~cQ E#Jhy:,\VDէJԜLZYudt^ 'H>Y*Jk"$7M#@PrrjUKS6[D(RRqz)R(n^WÐrT-:S8tnP)ŭ )E@t+ !!jglW;;ۯkq nJq7 XxLb Kh:5`n<rﶵZ*ҖJqxsi7 J+'`ܙiZd84`%5ӫ ._/˔VyN+_|w>ٌmYW9r%|*VV6tieE{o>uZ:z8&!m$渟Oo N<[i [8JR2IRAl84=Veّ GC.?ű8G/Ni9ڤ,9wUG@F[ϥQNSLnuFGFs;f*B)JP)7K3x zSeZtFF*SH5tJv,1mTWaaptYh% JB|˴VҖK@X B\(թRDhwkLt2›uZպE1$$mjAARTx}6JN; ^f^:aJ̻'tK\'2l}%x}dr e&e磣򕍸q-\WIR!#]e-ElC+OIUUΰʚXeCVUvG;6*EVEPQE!QEEQB+EM8Q] Z$GKLK' K6Rn$FIbd83iyN:X ^; g߇o6ԕO5^~Ī;K'ӡKD.[Ҽ' >]zMm<y!q+نs{jV3zkѸM QJe ]`lCpΙma,8AVšG#޽[D91iYoy[Dζ$ wڶI|u頧c4>|+j畲>7s*[vJہ%iP)iDVLrqmqxC*%#Wa,p .E$Ɂ%Rr}9oy?-NXvVu-%- m[V$6T.BD>Oh D@N8\- !X ޢ(NM.ስK|d{lfL(gk}=wj+@IYVzɪ;ZAee{4l9Wq0_xVk@-b{$y▭;V88ȬnϔۍnAK%@+v™@-pD܂[IYRPج2KA'"LwuwXgu+6a4㌏jnEqˁoa)AlM>m%-+;Qu u KO`0qQEsNY81Db{}/2`hJ@AC|>u>}TGc!NE7H* 5%.m=umCq1&/?pP8mdPH!|zvGP ֽ7|v1ƷB-+jm/np#>a_`Kb<) Jo ι%tMj \FmN$|: &NΩLvP#6}HX q*=јR! 0ӗz'~Qiy ++)NF0;JL Reͩh$ggM$MyQ/-e>}ҝR:Sזf-RќԖvk"[Ie,(.鷎yTKv-sZB P@}Fz$|FfIˌbG QdgJz^/HdMvX#x\7Us̸UoV;< D)Jq.YܝA<:]C",|6YFr)p:L xUӾ6vN\},ŀ$r#Mv "G^㸂 )$̴7y!J9x~MQcns+UC2K+[ V`<2r"N \Nj TԜۤ5^mw)JZI'&gXgڢ20pk=*(U)[ F^ǐP#LiHNu\ -@=ˆyC9ǹ\)QԨI =Bq*RRri3* u=K3m\ K߳G'ۥ*MmQ>&gƎXPN ۿ#?)})QDOR[pcoUJijIZ#RFN8t[\HH{Ouvk 񓧢d2w!Kҫ\yT$69 YҺz/G[,ݖIS4 \?vk1Ao+-$szu.~KQ5(G mI0cKVAZFk0u29(:[m ZDd֧[Y nlmҢZ2 h3Q !͌R]h+bҴjCF #VХ %|;W{ R_<) #.]/?!b̀0מ\ ^uaІ\G#q} D9R~)kځm|U= Q>=X$&.al]0 R0T皣j'pm˃m>Ub]KV$)nJBYQB0j*sVӍII5 mmb@xXWs6ӏ8B}jA` Ueqj VF(QQNk~en!SKz%7QPa8vAJ3Jgo̺@2*)@q y(VF9`Du`.Xu6,5~VN"!9\3jR;Z(/qP7YwO)i(uJmy>ҼDYm,_!CTj0C(xHE4MIJFI<4lL2,(6S1[-9)RʈםH + YfDnJup%9. Ƕ)rVߧ<{S =]7Ql$yr~'jOc+x%畝ٳqٜhT("(nw++e0CXHjcn34)mxVۍ拄G~ ,- ̎8LjC[G@q.rj[iKRIh<$6HK1IJG)szK+B".6RV%8cKkKd[*B㚬~ٗRq P/3/rr|uJAfp2UQ_.,cV~rv~ռr; Fwg~TU皪 [’<5;|ՔkE+6FVs$0uft)K)xWi.ʘ\uIȭSu0P*9ɨμ Rhueh) I)PAI9<(Y+crack-attack-1.1.14/doc/tn_screen_shot_3.jpg0000644000175000001440000001036410132356545020400 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"@ !1AQa"2q#Bb3ET%45DR/!1QAaq#BR ?Xmff9 Q}A8DvR0qYӜy*" B(_AK)ԲHS#W9W7z %Gtpڼ U EQEBQE!QEEQBEPb}".0p BNT~<U_T&vd 1#L )qX5dYɦp%w R ֽ[d,gm( G"Z!ֈwS(ӐL$>ඌ,cVjemQbB?Xʗ}jc'f I?0H V,ь>E|? B6 R/3.=V4ぷq^m%JlM[/1oj+`.)XxO[nuT׌Мl}>aNR7#kP(/6("((B(Z/rl)X":\ Y##E.'$3L-,_yȊ$| is4'S 袊*REPQEH]!"His8II$`絢ܝ \XjZdnp[tj.(>Y4`%jj,ZkŞC钣9"e0JVlh,7 v*?"Ci?~ݗ y*'Im)FRЅe=COVucbV!J z_Πkh$2b 8xhƭzjv\ԢqY3e):LHifhXRJŲݓan%K%j3rR 'iKr4-Z-ŸKZ|sOd:;d찕) JT8 $Sֻ_crack-attack-1.1.14/doc/tn_screen_shot_4.jpg0000644000175000001440000001140710132356545020400 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"<!1"AQaq#2DbB%3RS.!1AQaq"2B# ?P,R63Y\t3Z x)a8pvu3B*LX/Ce Y$ +_.B9Oo]RJ+c9۩‡k E)(*"((B((&vk1qp_B  ʏ-#*bF W *LH \Vxfu4Vu[*CrBaݻ1=ig)-_@M2>Q)@®Q!vH}cmX*OΙy'֮2tVOy QR!m3ۘXVu3H5dzݐRKHC#>Ԗvki"[Ie,(.鷎yTKv-sZB P@}Fz$|q]FfIˌbG iGŠ,,O\e )8灁ӣc6,n6ITKX.*aĺgrw@9Slrm:KVrI>u#Rm`4#dܾuCjNO?sO&!=mWX[ӦDl51W8+ԳG3-~ֵLGVp c#/5UAWֽz?imBPkq!_Lz)++44kr% "qwQ ]۳yWwUTurvUgoTbmZ8H*)=Afy/0u')ZRA"I$yr[kn&"e-c9*ڑNkbUlR?_=i}z$LHl-+z0O'U(e]qp?TM{ۻQ##f[*ZB95Ll~)\{ir 61'=q^ƖxVk@-brz$xҖ;V88))6޺,.KW52}ZH ɹv Ͻ-''&_t bwmŴIB%%'Gb) I‡ .8v*R2;ڛtJZTL:mxd"Pd(FrzqךVÛNz}EaV?owͿ [m2BU^oýQlYݷ H[X#XIYF,v4jm1b25E(+:8mv2{iӹ瓊{ŃAe O${YL 싉/{|Q| _*u3)zR Q%NiMݵg<̆)Zsp_*AyʮzҹJ|4g g?޵jKtcu$6SW{!.KXo-/$WCoDK{p֨ %*Ǟ*4ܝQdmΘ8ZN*E)ABy`*gO\-{"H}i xe=SCUQpfsFħV}< dwrwHZ3m8m)n()H'V$pF 0^W2 aiP5GrRs] o!饽vAmRU(v s tG3f] HL 8+g#via8gtemE0Oڂ[l I=3?08<\q 0$~6Hh Ay")>:yAe$确G]NCeCjn[JTdv,3Fs|+5u9.-ܭ(i^RV6GZoXb)M3*lm`E̅NMAvgM+iYRO`nRG#GZ˦clm\#DcG2$=ie2 zfMo{pvҐǵ"3 #GZAOf; in + ^i" fa רns2d断qO1M'$2  ֹfcw8B"\"o c^SSÎ78l iʓM2U(HrZC(m6B׌kD3L5+LpZj6D-x9˸ȤiߕnٗfDnJu 7{woc{yMTtr[ |\QI8⯪b۷+ٳqٜhT("(ݒźއ`/%.)V+7p|z U=̈́4@8櫕ī"PL$Gi1e)QSA}G iR'6W/rNHJ^J[JuH%B{uK -i)98I5H:+kC zdǺH.yJJ:4%$$`uky]yHV01Zdv KBku*sO l+`<ڨʶJ0~SJN(Ҷ=xRO8'*d `$FӋ!(rHR.iqMxV-ަDBhGP}oW<AuX%JBJT:pExI''E_crack-attack-1.1.14/doc/tn_screen_shot_5.jpg0000644000175000001440000001200110132356545020370 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"9!1AQa"q#2RBb3CSr-!1AQaq2"# ?P,R63Y\t3Z DvR0q^=kʳB*LX/Ce Y$ )+_Aec!Az>x|]rQ[aN*ri;- Xչڙ|9TFXlK>q]3O Q$yi^#puj $̻t~ i*Sd$rkŽHpcI?UnB]S]8dd5}}*ESK͢((B((&Vԛ3q0H##E.'$3L-,_yIL$|i@iyN8ݏ/%}u"T}wtrc7-0-Zʒ )끕+Ql('ftLi@8F7s'w=@wTR:v52fkPڛ”FFcS]?$:bu*ZT܏؎nbǒuՅ z@Y*%G!c# zw7M3jYcCӟ)SRZ/ٮ=JK)aEiwWv|9ѝGhB:% W O83lnp%;+2<ah4!EI{ԧEHJׅ6a?}NtyJ]FcΊBUIo'e^#&K2.`hGsR_C(o%`1-jE߰ZB=ͩ fLq) S&_a JǩW[Rc -hd$}*u lL05N>\s䪬“!m2)$VR&fbZcqƔ0H5 r /`ru s[8U٧?68Oz2ڐE Vnaq<(;nK785]DMp #;>c4qRdekBvQJIiRJTRFaAQZ& 9wL-V+n&c+RF@E'qYK:IV}dI'$jsk"[Pkn&"e-7*;1Mm|dyjIYsoAJMa|C钣9"&gG,('Diב>ԨqP*+ɿkw V8}EXWԎi 6\ u@j#I0n?R@)_06EXzW WY8|kl~m~t uR=vZdJDA/jgt͆=|z^m ZhەӾ")A RTW9I\:ѵK8"9eC 87 d +SvBx+!ǔ6Lgtbe!->pi E Ǜe%ձARNG(F9GzK\jzfON[= {[V0NS![;JPRqw攓EԚtifϦguzAWV\n1<(DgL\| r7N #]K`0/hK6AUf$#G8WՐVNhy:,\Vd'RէJԜQ[&kex6:J fP/ \)!nAJ֖R/N{qmP IIǡ)R(n^Tʔ *TZT֐8+ !!jglVJYmҌÄA|dxkr;S@2%ḧ́Q w)ATlo F#ޖj&A)hP}eVvw qr9JҖ [Sȗ(12K.</owSmwi#;Tj%eex!}lՖ4< P}Jom `| xŎXL 0cH ߊ0 Dy:IJ%Ceq"2f4T J5N.es26/G(c,:ޔ9# |7:V%/R'*M~^ebcCRoj' 㟉J9^6AY# $PU'D%S=+THn`~}{C$dW[52ħI)ʉT\Y\ì'+X$R e&mq--%)$ ĂAl84>= @QԢ9sir[d)%RaQd=Qv3.$L cBJ3ia8g*nmh֔PKm)'9A+@8Y)v0Maj9qOk\"Sķ<ZEB+|3azyAe$߃\%X%XmNIQfjߊ$\,CN2Ҡpr|A7,q,N`{U2X+v3!wZI'z].%umGh԰`Rtw"^ei%)@ۗs ! jV-s"|ni‘-Hx){mJґoD0JR*?޹ӊ.2! /MEqp:@j괮3h53@v + w_P0s|U H4d()XNig+y j*H<U{kD)o8Rs9:\;q[Kl+2ȐM݉N!SlN>ӭZnvS =]7Ql$zr~'JOAW]ۼ1mǟZhtg:sk(,EPQE!k{i1!sUJ6 zViZE!ۂwRKC  *m. ǰf R2N8/S%-:!?/`.KkX)ZJNGWkiD/u]6ö6]&5J%m4_&@5.t$+ YwpR qq{>[N qt+'WR:-:%u0V2 *a`=xRO6Ѝ)laZ'I >*Lµ6wB7[oJ{-@X%JBJT8 NN+%6crack-attack-1.1.14/doc/tn_screen_shot_6.jpg0000644000175000001440000001111110132356545020372 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"> !1A"Qaq#2DTbBRSr0!1AQaq"R2C ?P,R63Y\t3Z Dv)a8ptuYPHE&,!岐Ru,JdxJ""WàZ>J/u$>Ñ-(vuhA(B(("((BgfKS8u R0H(1(LVbGn6R3ՐigSL5gUJ7$(aZ9*;,JŶ#-D i]X䶌,cVjes6(!Hʗ}j'f I>$`%GH V-h=ǿzTe&e磣蕍86KWTHkŽHpcIUn*B]S\8d+du)|>漕I+Rh(B(("( &a-#GH4ͥGM2m4'),owLmPb9koXJ hKϠ5>aL\ ZaGI>xmS#[2[XwW㧮*nN-)%pkzdiץԡ7(ǯƧ\$:bu*ZT܎°lGg1amcZ|Zuj†< o*%G!cБF{=r6oZĵ,1!~KE5Ǚ"[Ie,(.mTKq \DPA_Q.3lnp%;+2<ahw4B,,O\e )m~֝ActyJ]FcΊBUIo1[le#9's[8d]2Џ[||(*ΎMd32\HV3s6>>t8[gJLA=b3oMrc o#Kn"^p63meJ *dR+骷BNC6qBc ԫ?WnmX>U>!ql@鿭>H特<89/,kwxL~R_:iBXm (Ʒ;nI&T KsߛhF>_dv{x͏*#~C(oVJrqh9;jd Wg$|CLd6v9@dY8zvo#dZ^RVlgRrE$B+Y$I=Mnכ%P-b.RP!< x@GsnʶI.7P 6~뚁Vi^LnGn?4QEdQE!x&{Qm\DugSs$ޫSˬ&t[ l,1)l8)'8>66p2n\xZZBUlp)kMmRjoKO[&Z29H-%.^,'a*S%: g=KUgһ|G^u~An=7+?ǘ_3Q}q\X.M)S'm WXs%MN8QTGq{7"8 O>tpm9m*g\y$ (sںS\Q?K~N%:RH,fm2 ["Jڂ-Zc93\$N7>YibJPU6b!tQ3jm:FEv4Ynӧ.%iFdԋ(cwLDqEdtgMbUlR>UTLHl-+z0N;L}mee#IKV (% {?\g3Q[hJ ޙ:l˖ɥ/euƺ:o2t6-V. 3 DzTD;rjJ敛Z/ҏkJZ,!eYn~_bxzWUr9,W*xU~vtR J3٨4T`%ɬV%p$g^PNq{V TA65*u)nOP`+t?mEQ*QQNM[{I8b*[[#d6eq@z9{ot]魾'$ !Zug{JTv8f6~h\+)G2.$JD*XrO2@bjTJ*Ŝ65NfNV9GO-ОQ^;GN5~J.V eXW=vo ٣΂BڼIRr=0zR%Нsy ҐwW_EY)[uĺA޸Z4&9Z5(RjQY.Av[)ِlfjBl\FAIǮiɸaG1gEwYumy@$ FG$.fjT+b=@N+ι3MÐUq?W뎊4d`2ZAh΋+#jӥjNss6Eex6:J fP/ \)!nAJ-''&_uG1;Y!Ŷ5*qP,(cRRJ9*R2<_ҭҧ'8΄HqY4۪iA|V0w9nJ2ڍppǎœ)УIy1aJeP!-)˫xcR |p fD rR@WABp #*Aq$daӀմO3?0`qώ%JRps9*2@0#@HִQAq"]wϖ)HKuE =ZUw;s+[J!a尮`|4Ot#2:UgD[I)=JZO2lH}kOj.R˥zcj\-+m+B8$ c>`(1Ϣ\59S8rGb#\0j32i.:%'[mO⥹P}qz{S$A)حxSN's֪ٮΝuYqZwB"V@6~xaƻ 7Mtsq'eT()$CWrw5\Vc; cMJcrack-attack-1.1.14/doc/tn_screen_shot_7.jpg0000644000175000001440000001071110132356545020400 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"<!1AQa"q#2Rb3B$Sr.!1"AQaq#2$ ?]7=.)bقNn$g XO)#v853Dx<* »jdzKXuaqEzv1ϛD4麤&7I*U%9W <` Jb,櫢b,R O/ڧWT-[ʟ?~~G+\VQ~<j#T+pڨGM9j]?u& IRAfQTR]|*I'Vsz=T鶛WNuej.XHFݐ'4i]w7Q݆- c c8zPq;V' uOmvXyWem|$< cw'eΟ.#9g}뱹讙iԟ0;)Fﵲ={{/sb0tbkouyOlmnԵfK4d(kfO0c$2frS>,^3H W07*e:oQrc\Ml2ZԮ󀑐Fw |վ:tSx#*Udod@ ӱ[#SiFFlŎM)$UKLc<ӈ\#]~A@ a2?")c6f2sLXtY 7wV~Cus>sҎ%u]ݓ?AԵ[;W;r<]#9{:M!vőKO4a@%B͸'MzJO:_ % @$v3s't-h^њwTR;mIʩG dn tq%ĩakj0]vYH'P78x[{_|C!wn zAYVoaW25HL$}ᑟ>yAF&}SxQS7vJ\pty4!Z G֮Ԍ5$+4^N:uW<ˉ%pHZaZY_ܻ y GZzn5~-kt"K(4{bvu\]l̜zG׵*=怉0㎛~ԩR2*T[]HT{ףtofnP>g@ϰUt4Qɯ|ndϮ@DmLmin|k=.POuhhj8Ju~[q%# FxVtΑM=AQA$e+Θg YA||8ӬņWo:Us@C$$OXa4w`1 OiV7&%H ,dM9*0N0b%'j2A6 a'zqm<h,FFmͰ \?] rCr"Xl$ > ]9&-tUvF*ˊEX/#Sn\h߉42s.]dF.lwҶ uA.[K/t=E&.2>4sc93t Bwzg_r5 IctDuմDhv߮;Peek-ܰC)̋m#{Pd#lTeg"\+'ڣ>^~Ձe9>/OwDdә#0O'Fǔz*f@Qiaw!KKifaع| V!X ;΅bY׏^q?O-ۘotwq##J鮟2 emߑjTx8"L'}b1Jv`/եXC,Dv9x5~մqRmY%&"Ƞ:ЃO[hRO(Ta?]޿c Z߁L`Hq׿wJiYj LPDdпq 4/4-R˧O*XE1}8WU:UigWje̱G %6+2}8u84d"Bp>f^EWvv+1BEso52(9=uM`-ҝm]'5n 5gp[QӍ⟻lfZb)^omq6yҖv\.+#L&a_ikJea]ťwx ˟-''&b1XW; 3: 1ڊEK1c9=q4@یJmfd|6rkYCA{tuE_xhhВ=f0M A 4"x`H\4(i*@ ˄ gsK/_ĺfϥQJF[i QSh 2K\k`XXnU\Ѣ2[xʲAMuR$#N |V`Sw!u8pzHM Y{י,I֦8E$gTd+R8#iZޡcpc L= s= rh 4Dm1\a5;ozTq;S=?A,./-Z Tl,#IjZl|Lacl$9R1@6RD֑i<JٽysP+!e(hp('Pee$CtrlNUIe%xc+SUq.q[r`HLA`] $UܠmkoQ[urBK{72T8TJͬF$EUdp ڪiJeyU[-A:>XUݑevA.شQ$n3pNԩ W?8b>珥0;nfխ'.N\˵#)Nuf9۞3ZԩLJ+,J+,lrGcE &5H'!Ns4D!f?t ZeAM@C}N;aPD&ג£b21e2gٻ?SYMj|k:8Q#9'ʗ_2(`Z$MMJYQY)*ñV $jT!+crack-attack-1.1.14/doc/tn_screen_shot_8.jpg0000644000175000001440000001117410132356545020405 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"? !1AQaq"#23BrERSTb0!1AQa"q#2B ?()w|:BT_}-dNQ:zXF+λ#3C[wd8) {JaKK\)Io'\ףSKJ,9]+뚓ǵ V6TYErڊFj U E$^ɴáąc#>c5 EPQE!QEEQB;5]B8K WA9Q`_(4_4&vd 1#l )qXn4'9})]Tl5w%Y Ӿzt?Vۯ'ۋƑJP*9 C hV7rx_G:fߪ"y'֫7 T76BR:ϭV<ьmo<; CYx#NKQRc NA\\e<8a=cDfAi.?JЕm[,N`8{ O l9_lqyGs]ʎuY[R{]tQM/6("((B(Z/Rl)X":\yd\NI=3L-,_yIL$|isnr4'+C@m۲l+=-ljgnss AqaIQXCΆK!Նw[cX[yE(i`?];Y5>Bl\?m +^x q^gnCH+z2¶$; ݕMETeqᱛj 7Jq$X.*aĺgrw@9HZܤ6q pRw(A@00"(Ԣ((B([ pAᱹe H$`⹲KIVGb[P PH|y+x{' s\[.VGjen[[$ȗtnͨRJ˜yGJTzG<z+:2tEvY%%N yNqUUVYTg=kg5ƕBws/tk-PQZmpd(%KFjvrR +n4|C\wRQUzKH#IyKgXH H9Y Sp@#nT({1]j3>8.a߸^oEz GQB'?YƁYO`aFBj3nyK~bT0C@H<rIv[| P@;Na>,@p ndq:ZL:Mӻo:WeEH<>WcE :r[VsJNNMUeKPwLsl+s 1JXJ۹~OΗQWQoZPJ;uujrڧ7 Hӎ@Q&csH>ʲ][k_V=QSmsISV vPMħ-HIAʯ_";f^fr[*HZ=uxXԖ'VOm %1u(rN:##k 5A/ϕGw6S]ܷmqJ )(N,q5i\2[W.kkc+q*oa=$/3S0m-0=z'4kŧƓ@]V:/ WX%Le,nIq9:z+%|@:cW7T| ;8翭3' d dqc18 ))QMmQ>&gƌXPN ۿ#?)})QUW^VܿTQTzOLRHٜb*Y`Ȉ~%vǖ*IV+-C44s2JJ'sӮk>mtnDǹ: Vikn0ܒK6!͸u&zTu4 snMm^Ή\hn]mmz@Cہ*t؅jۏD{iEޑ >Bׁ{SC9N= "KJR$@c1sɫ^Bׅz6尾DZbωSaHHC=sRYܺ4epRV]shI+ۦ,s{ҖkسZKIJ*U VZUL2sw8<dsF4ʈbȉr/Wyfē` }܄@ϖ:T椶 UG*ەf4R/JE$!i%;# ǞSH Z+p :r\YX#~9C 0{tYlm\mbO6z㢽-Yj)LqwZ3•iڵ'9(+RM!cmt^ ҽh>Yk",'&2Tn}i995"80sC Rps5-AYGqJ󀑓3:u|[uEҧTL V66miCIJꦰ=wOݚU-6JJHIRrA8 <-Cod[RRG_L-C1nԇRJNG@v'>xqԺgOجtrm3c(PH'8\3zgmq?UQʒ%8S{К?K]4˔!.x˫="Kazpj6,M ʲGqDS#/&3:i59{v64= a-8Y#ʠ~oQ/w߄<>YwNĊH꒽ZI'+j=-?15831}>)"3m8m)n()H'W8#گ +T{(y^EG9w ;Jn-IT*:p11֕gat&dRLr[BFr7`iY8gui5im+Ua@A4sHd-$p}>4V{Y-i;-$zGoʾOĶPEDc$EB*O+diO DaVZF"D7$6kD忡z&1\ok}8 7nTirRB{c/NpucOO8>Z1Rs{*skQk ,#/4>sik.i] ;wB]q*5MϹECI[(,$n;9ڋ:Ά͙) ^ }tnEK*-F389jg)1W.~SFcoZ50Y2e- !YKg|W q2FRK;n}J1gdڨK)`(ǧss)yNmi-/ì'b3)>#t9c,q&psRڙ܀l,A\{Evdƒ= x./)itYfDo Jup%97{woc{yMTtr[ |\QIq&*ݻ_wffs$!?kڶM_}=xcw kPNIS9Cc<'(+ g #CC33CC", ", g #663366", "' g #00CC00", ") g #009933", "! g #CC33FF", "~ g #FF66CC", "{ g #CC66CC", "] g #009900", "^ g #006633", "/ g #339933", "( g #000066", "_ g #9933CC", ": g #CC3399", "< g #9900CC", "[ g #330000", "} g #660033", "| g #660099", "1 g #990066", "2 g #330066", "3 g #660000", "4 g #000099", "5 g #990000", "6 g #663300", "7 g #990033", "8 g #993300", "9 g #993333", "0 g #CC3333", "a g #CC0033", "b g #CC3300", "c g #CC0000", "d g #FF3333", "e g #CC3366", "f g #CC6633", "g g #FF6666", "h g #FF0000", "i g #FF3300", "j g #CC6666", "k g #FF9966", "l g #FF9999", "m g #FFCCCC", "n g #FF99CC", "o g #FF3366", "p g #CC9999", "q g #FF6633", "r g #FFCC99", "s g #9999CC", "t g #666666", "u g #003366", "v g #333366", "w g #333399", "x g #CCCCCC", "y g #CCCCFF", "z g #669999", "A g #CC99CC", "B g #FFFFFF", "C g #999999", "D g #99CCCC", "E g #FFCCFF", "F g #CCFFFF", "G g #666699", "H g #996699", "I g #CC99FF", "J g #99CCFF", "K g #9999FF", "L g #6666CC", "M g #9966CC", "N g #6699FF", "O g #6666FF", "P g #663399", "Q g #9966FF", "R g #336699", " ", " .+++++++++++++++++++++++++++++++++++. ", " ++++@++@+@++@+@++@+@++@+@++@+@++@+@++@+++ ", " +++@++@@+@+@@+@+@@+@+@@+@+@@+@+@@+@+@@++@++ ", " ++@+@+@+@@+@@+@+@+@+@+@+@+@+@+@+@+@+@+@+@++++ ", " +@+@+@@@+@@#$@%%%@+@+@+@@@@@@@@@@@@@@+@@+@+@+ ", " .++@+@+@@@#&*.=-;>;;;=,=%@@@+@@@+@@@@@@@+@@++++", " +@+@+@@@@@$')%=;!~{>;;-==@@@@@@@@@@@@@@@@@+@+@+", " ++@+@@+@@@#]*%=={>>>;-=;=@@@@@@@@@@@@@@@@+@@+@+", " +@+@+@@@@@^&/%%;>>;;-=-;=@(@(@(@(@(@@@@@@@@+@++", " ++@+@@@@@@^&/%%=>>;-;;>;=@@(@(@(@(@(@@@@@@@+@++", " +@+@@@@@(@#&),%=_>;=->>;=(((@(@(@(@(@(@@@@@@+@+", " ++@+@@@@@(@&*%%=:;--;;>;=@((((((((@(@(@@@@+@@++", " ++@+@@@@(@@#].%=-;-;<-,-=(((@(@(@((((@(@@@@+@++", " +@+@@@@@@@(###%=;--;-;-=%@%%+%[[%%%@@(@@@@@@+@+", " +@+@+@@@(@(@(@%}|;-;1==2}[3[3[3[3[33%@(@@@@+@++", " ++@+@@(42%%%[[3%==}}}3333535678}5855}(@@@@@@+@+", " +@+@@+(463335555555859090909080000ab7@(@@@+@@++", " ++@+@@(230cba0000de0f00000g070ddbhbi}(@@@@@@+@+", " ++@+@@@(50gggggggjkllj000jk0c0ddcddc%@(@@@@+@++", " +@+@@@@(30ggglmmmjmnllj00go0bdidc0h82@@@@@@@+@+", " ++@+@@@(30ggpmmmmgmlllgaqdddcdab7i0c@((@@@@+@++", " ++@+@@@(}cjlmmmmljllkg00dd0dbdiabcc3(@@@@@@@+@+", " ++@+@@@@}50rmmlllglgoq0ddcid5cbb3%2@(@(@@@@+@++", " +@+@@@@@[5jnrlllj0gqddd0d0b53}%((((((@@@@@@@+@+", " +@+@+@@@%5jllllgb0ddddbc5}}2(((((((@(@(@@@@+@++", " ++@+@@@@@30klggdd0d0b9}2((4(4(4((((((@(@@@@@+@+", " +@+@@@@@(370ggqd057}2((4(4((4(((((((@(@@@@@+@++", " ++@+@@+@@}5bcb772((4(4((4(4((4((((((@(@@@@@@+@+", " ++@+..st@@}5}(uu(((vvwtsw(((4(((((@(@(@@@+++@++", " +@+@xxyxv(@zAxyxsxyysxxBs(4(((wCC(tv(@@CyxC.+@+", " ++++DyEyC@vyFyyxyyyBsyyyyC(4(CyyssyCGt@syyyG+++", " +@@+HyyyyG.IyyyyyyyysCyyyyv(GyyyxyysyC+CyyyG+@+", " +++@+syJysvJsysCKxKsGvKyyKs@syyKsyKxKv@Gyyyt+++", " +@@+vKssKKGvsKG(vKyv@GKssKKvKKGtGKKKsG+GKKs@+@+", " ++++GKKKKKs@sKL@(sKL@LKsKKKsKs((vKKKKKLvKKG+@++", " +@@+GKKsKKMvLKs((sKL@sKKKKKMNKLvvKKGsKs@Gsv+@++", " ++++LKOPONL@LKL(@LQL(LNOPLNLLQKL@LKwvLw+vLw@+@+", " +@+@vLORGOv@vwOv@vLL@wLOvLL@vLOL@Gw@@(@+LOO.+++", " +@+@+@vv2v@@@@v@(@@v(@@wvwv@@vww@(@@@@@@vLL.+@+", " ++@+@++@@@@@(@@@@@@@@@@@@@@@(@@@@@@(@@@@@@@@+++", " +@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+@+@+", " .++@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+++", " ++@+@@+@+@@+@@@@@@@@@@@@@@@+@@+@@@@@+@@++@+@+ ", " +++@+@+@@+@@+@+@+@+@+@+@+@+@@+@@+@+@@+@+@+@++ ", " ++@++@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+++ ", " +++@++@+@+@+@+@+@++@+@+@+@+@++@++@++@++++ ", " .++++++++++++++++++++++++++++++++++++ "}; crack-attack-1.1.14/doc/screen_explanation.jpg0000644000175000001440000006212610132356545021025 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"L !1AQa"2qBRb#3CSr%DT$45&6sc8!1AQ"a2Rq#B$34CS ?r @""" """ """ """ """ """ """焀U)7""BXg=99ŪKV$+'75d ;u oEzcьV g5ۇcµ?kڹx] ,g`.\kƶUppP c{XƗ9djwh,F88E#p1G-WKDDD@DDD@DDD@DDD@DDD@DDD@DDO0u$(IU#Aߕ8IFYk!Ȥ 57}K]k+1_msXFF}qd\d0&H]ǗڳjZMY}d$;uc]^{:""D@Ϧ&E .c `V\y4N3ʈSzOK\u M_kVOWݕg `VmzXdqFеϛ `7 qcnSs8®VۜSzX%Oء^jKY$/=2(UY r["F}nǜ{zerQq8J ?Z1.q8 U塵 M~[IE,͆>sK4UH19i {@J>G38ʹ,Ȉ""" """ """ """ ""ti{կ-sx FE"v/W,r YlG.>8PH:f_*/𱮏n}sϧE#X?P > |m[ˡ45k 2 drD.>u{QGKi{X3A܆O<bKCDt軯دs ".A`R]MuTP)S `.#Fܘ/M]MlΚYq|.'W"D]o=Rv5>kWr pa9¾eYI@.ExQDW5%DW^;:6<9;sQm񸜏@iOzaH ݃p PM./;05{%[{cX浼#+jYvGUZyo=DE.,7c'5x_#2kL s\}+Rs'd7L" """ """ """ """ """ åli%Gvf2x'n L+ήx`k8s}ϐs}a_I[vV46=S^tӌv<3]SњAW3-`6 ;55{e/8KFNoV{ZiR7K}mI=p;wʿٖpW[je?;X>$OKUx- sLMx- in 5 &js| t^-TuK.UX#p3sXʈŤrE`̴AMOtlt۝gl+jmD ydw0BYi-:Z:vjZ84x77cEv EZ4ߓI[ɳLx'ey5ґJVh)@p>wo_M,T2` k0XUCπw YCGU4U5Ul/ӂn'P,]6)&!ssFUKrURCL;,N̶ymuQw=dޕ2|Ay&-Ҧ8D&1qc$F9-oCWl*b#ho |ӅhZ[.+ -o્_HIA%]Kvo rA>->Ai  s2}K㛋-ήF=Rx Ȉ$""" """ """ """ p3ny+jU9;& [V2VґS|n,>!_,yu;8g* Kme;9gh_Ȃ9~~U~WnY)舸D@A'-AuUCm$,lIP4 aW4iklQ@zį:P=WKkTK׏< קuA)o,׶=1<-`uLǴlL 磌&>bN4!oT jm XygՁ~Pܮ:*ʧ jWG\n=HLNV=}P|VCEi] O $bagʴ5F2`?QEGk\WMlUnXp?r*s!ɑ:V?/دU _ &)! :93ws>XaHfaczڛQd2&5Lɞ'|xhQ&cku="7cS;+Y.7:i܉w0|7T[ɮY_\RVqo=y#*M;{Jlqj\qTU3iA{wsUAI[DDD@DDD@DDD@DDD@DDEntMODVT6P<״0 gIzUI9,[N%dwo9T֓$/9:algطQWA"$w⎥frcv>ŕz'1j)4NAA"j-PFrNj MU~tMx፣`wRT896[;d7/r}[lvhh\TB"9s 1MTкnښFpK=GW[NdZy:)vv#Wk˥[}ll{Z[+v;w 󮱺m.w,*Wsyr~j=ifeE|s޺v‰]6+SC$c k\@@]US5Q/ Nz2[飙98=`K #%l j{i FzjYIá'h=2.p6;)Xɏדyw ._[uiKo=QdH'ad= Ue撒zW>ŗh䳳-{1 ->FJ#|1>kpq*D Mۺ#O6<0s{Ӡ(h%T>##fGӀ ~ %C}?*k499.Ɲ]j(rV2f9]Gm$zG3 "gF$Q+\؃;>& X(7`͆<0\C9;]q=dzvnQnվx ZTLA{<(.DDD@DDGAok;h?# ՜uSGOfV8]fYR.,%<U)R:,z7J1ˑyi{Vp{ V]\sR?-pBFId7U)8IcѼL.08c'8]pRYS%5,K:Tv>hDEp" """ .CI8\)[M[X0͛c4^ ()vtokCDjS- ̅ ;vu3QN $Χ./9!dd]Jȣa|!kFI' ;~W5-Z/, MO-v_ 6*TOd3zѫ ;^5ΎS-qÏ˪ P""" """ = ߶aMh+y ܶ}Uoe!9+WRHp93YiAv[~smRa2~k>u[=&r᜾Cߝߧ\v~dbӓ .8T/mWߧQsM0:O:*6.|=IBnVM|=IgݪmL{ד=Tl~^_(H#5e뢯,>+cM-:I!oL""" ""6*؜P$@\vvyc^-ȍ̘{U'6D/FyUPKU 2,SN^7b wϱjK>R,,~N^]ϩ'«c]>Ю"D@DDvGE {T@d|o6v 4`c`1ܕԀ415m-϶@DE'a}-.)| syD@DDD@DDeCT rE),V;}e\K?}eˉ>i}dk>D{eY-gX(햒P'9qԚVJ9 -<V7- -ԯDZz84rxFJ0 >M3R--ELg-u|]Vpk=!'7:&D񌼍ܵ3"9uV^""6" "+L z;9kZ0~'%xY, rQm/!i(i i17+.d1Zd߳-8o )RU> }pz{VM5-͘q>#%RjZis$opkA+Ȃ `]heKNTT5tS0!aU +sŗ1?$Kt2BP['VNi#8. ˞p6s&0Zͮ SwsMmv'Ic>))e-&OYNew|>Üqcl&l]-g - +KFC_{p0U^"d|{"<IT H贷s] 饏M#'X]&cF4BZa$zdU4Z*̜e#NO湎-p!b.֤*`FK;߿ UTdDX" """ ""Fc>n`͞-ϴx-"f @ၒ|/["*Kpd-e=޵l&aP!fxFn=E9BG; vz.ϭmB@ck 褟ꈋxD@DDx 99 r\nA}K; =qcm˪EOqO"+lԏ'63-|e%[M3jWO4e׾ZC,-2x;ǹ@A#%.*OlDE%aD@h|R6HZ:<I /\^>'q0wb"7ݑfcs.K6%鄤'pGv;:(/RL_RflO900KEeEWm+04xtTN&9YtemC'|B^d;:(/Pf\rn0np8Fycuy#ɞ#fֆ2"ŶB"(4 wq-tK,/}8s'njz-|.>wq-7j*4դgGGvdhwrpCLZ?1r4TJ1->pܾ^QlOi^{̏8]}_D -g&i[76)Gׅܜ.>IҶol]Nb{B'~d|NwrVMk?F(=gFSV2G¦׏ll7g8sPKI+;&fh i3J>F4!jۧ\svyA+]m4ٕ.<3T|bogCR:*S+w69 q<~1=\pÈUFt ", " "  kw˩:Cdgg]G_(k|ÙSehv+3X+ǓXC/pdt.'pF밑cXY mhr~k%6jnŐ %u&n8[)ps>m,+0\NJ,%\s" """ """ ""Dvio?N-,?iJq?ϠivҼ3g]i]Y@W 1hvye Z9%u(J(%t%rJJ$jy쑟v-4ɹԠu8Jjt[/e8̎sV<ָ#zlWvy~!UUSIMhWRYh)(Or2_}@$""ӺXd)*w{=E%%YU[kK t_Q>%`RZrG"! 9ʺ3tc &[k;f9tHo5s7sq*=qݍ "iD@DDD@CZ-ʊ n.xiF;i$I[-m6 $c\1Vo^2R䮶_keC>cRk7 \:9a#Wր[ls*eP/'r>=0ׄmN~'oT@^K9k#y V]&k#pi;҆UIG%՛T\5,|U-dqt_Jio :b*ɃK7|C*Kaպ:iU4bY}lrn(h*陹fy8V &ܾf38Y4p>Yx5=K{|яRgd}06G7We3R#gtUیľ7A s >Ai i 8v $`E1h^|RxGk'j 8pHտyB:J7mܷ!jcGjy⊱TͰ:jh)*_[C {]oP+Z%DU,=gL,^%l`47a+Yupǥ~ &# (krLW-0do1;Myn'Qd1{I%㡕p*đ)-{N<SH#8x-wt 3. 0$KvruZk\cǴ8 p'""W!k,ӾlCHawrZU}䆣@ cWY8iӋYR&cњuk% !Y њ|~_;P^($#$o⼗2,3c&.M$5r^RSrь} ;#h+R u7܉غ-eV&j"̐;/igFrRi{0\}3Qæz;"g1Τ܁B> )I6sC˧m-%a,I4lq#JV j+l 8'pY/-E;Om2% . MEO$< ck ZԳ[Jz@pGbу콗 ]9kn >.mF<"O[.tOu9/ (W@[埝A7IA7l灎kΟ&6;{D00W+㲴~s_˽[j$̧vv RQgc:L"AxH]+Y.qd0D&xn q߮Ω?&1cZiՍ(ڿPMTO;F.Ҽu,,#^XDE$TplgCƭߓӝGϨpc3[\3=>eoi+\˽6d@JW)nCW(/ڒӂH#ZWdq'-_0?شƿHF>"j3+??%esK^X㢨X.r~;]5*8Q't$t1'L1@F=3Y' 0n5 /={j!egz={CŪgMswg}HQMMv#o>xcX>)'gO}/b6350_<-,5,Ya ʊ;[#0lP?'SA<;Wl:ep8AcK}h77}JX9 >GN!`nYV6&3 h/4,#Ŧ&q yCس{vZf?-CLeXD@Lg"y3*b9wjsƗNsY(ɶA'pwhq9u4nvfhN1$RS|0Зf[GH""i(R[i6}X)a;¦Z~ ~KJ].$,J"" """OFK$(*.s6 A$?47>ଚlaqi[>9KrI c깚uqb?r4K 5H9AI9%nޛm173-34/08[F>h]D|F8 QGRʬJ:Y1i$q ժH'#ⳳUM$yܹ܆X ~撷=5fJlOcև=]%|RkO$;F90Tsk|*&ME3Dlh{XyIZ餱N&whCْ n7+e(qױ[n w^Rjjr2Jw⽛Ei(wׇTje9JVT9.w;1[m:&fǯ%5yY$A=D=-}(i̼jz?>orح4,T>1c',pCg 9CSSI 7_.7t}u؂׺r:---X Nd;5^mF xbS{ M9}.'fMk/\#zI,R"{i=BS T-?ohT,rg>{+ȍݴay8X@dӽoᇁ˟T'k-;^f\D79*I.sZȨ6=V}:z e=-c֫! }iCY.-KD8O*rɨ3{bUƋ*kU)6;s[U'Ddi]ru]t.q9J7Q0Yum n[7}5C%ƸW0KK#rz{7 vHO@*E^e4O / e{@@rV  wPxlZGR AR"zI8G nd;|쎥Ud&R.L(OSٵz蚎 &3S*;Zڟ-~\|˕]HdTu#'s8<$pYG))裒Ben;ֲmt4qYKTx=܀ZZ_>hѼ8lBjywGnha^WJrSN>x[=W R֚gܫ4^N 'Y0 l;\k.?[ s,h %F N1]iyIpq +h+~}l^ܿ=d}n+)7~> Ex>9i'3BE_&%|CPtYDEa]- xhciwsqc}4ŮpAB" "":BۅȀ/!dN]rOHi 挞y' i}ښ32ABB!eSA@kf?rٮ)çC*﫪TiZK1౪1qm m\`̟rSTZ.b~ܽ9q0{2QSđ<9ԭѺhlp<+*Pʕ,$1 8VZ袥};{$줐qNcOSd)O5Z**^I$bx',3PH*`d(Β6Z5ŧߦ} L]dZ)V,H`" fteccNYxvynC[UmZZ(#ZlN | 'a*i#**Fy>Lf~MuSw#\C{*m#kjBYIe6t%6 qZDmvՑ|>zFe,+~< Rbֻu/n<#;up7"HH٣ '*mVypkITK~hrK) M>y07YGMa Q+u%hQE㗎=`DYN; '6F"զ{ *(x#vwRV`_]TEDY ʗ߳ay>p zqϹs~=lF~L۝Ds8sB^&kr N5+XLu%#>: ej:s<ޒg/6_NTP3{JݢD@hIl]ᑙv݋lߎ-/ ǿ0 최^d#y] yT#%/]K-j.dPS$u=UֶUieI+yuQM\+'دYOW gUYqf9$@"Hd@,emUK,͞s %EDD +)Y|U JY[9^@粮عC7x}ӨZVo]v01wj]Ikv`$`nǯAFW'fɾXU\vYU^s" dk AVW+-lϨF r <{aూM;bF-Է8mUP$ptΔ)iӷk)%8lQlX֛󱑰?k3\$nEz>(ygُA"E)EZ[:sZPjmwv8W'gϧB8婒GcN ^#Q_¶ TTuje\hQDܽs+OmRt4y| S3qi8y G%e& ܉l;֑ -Tcpi8܌ nyTvsn2"LS4-KikNweG+84( qtN }W{ښ=71&i*x?Ҙ18bo6& s'H61c6Yf̉kƢׯ)LU E0OH)˜F~c|+ h)i剤2H籸sן%Vۦp٨(Y8Ŏ 0=UTLDm ee( zK朆w,x *)\EVZOĭ5Nta&d&1U#w 0'Ei5M<ܺ%rnZQf !#UW[-K0}etvd]Ll|bUXyGfz,q_tF""8aD@DDD@fZm]vN$4e}d'k=Ki_W&\} @.n_h.logd='8[]lSth%CIP:{I'=fUnuTHr<=`ZV(ڊT˥ڐ d$ִ4n3UdD@DD+뫠cL c34seNiy8#}`2Y7'ZP!n@$jKw><4(ֱ` ۘU~P[`!=cwgNYgRzC3Ѹ|53wy!d7O*ˆ-THy<ҟ!,Pݍ==kd\mlt#\ku;1K_sUb/]O\si TZJJsM]3F=Ct yP?r1ӗ5jƫayE>k}{̩H R!KlwpwX)O'g0xR۬Y1xOnA rX)`'SkOC^:_3\zISd܉; Qt>Tu_>P[\uux!3ЉOs<:67>*#oIOzMӬtN Ȍ Y)2tVڷOWfhs{˱/A)N8*-wGԻ<,)Z~=wƖUWt3qc0䒲,8Jo{c׽78Ecm|XO=x)qRڱZvZO|n$8w:S/y6 IA\і.0 ESv=hoXId8g>(&uD~?bu3ZidNa#960 rܵ.::ܺ> [yi 7]/' Lp7{RGVOxFK]]+n-i=cK,p=b}Y [QvZ`"+-ls@<(o &u|/ԍnw{;u .f@Agj-)p&eډرE9؞KnZјY 7q.|mkm_5 < -ܵu¹Zy\paz"-M-®6wD$fE '3b\=qs2NI\")1""" """ ""m50\v1BDdN-4o;+-:bL]% Đo/h.UvʆI3{{)4%TJ渃LN/tz.Xej,UF o+NjgT>g_ww,Sj/ucnZF<黠=[()w0겚bϣggZj|0UNOE07ov 3y4-xUrFTT8ո|)Ӝy=r[+m 1y|A6C}uP3̀,'UCsC]5=;4o^ ß~彧Xmx-.;At" s<^>%e}Ҭ4?*[F 9jlRֆr{7VMݸ#4AkpAUJ!6Oҷ<Ȭ{pL6k Yny9*'s8m)Cl"iݥQ泻H46 ͩtu 捸޵pAE&+՘Ké6NA-'n_tw-ʌ\%;qlwJrqO""" """ """ "/Hc2?RIK/A;n[G!WmL,TN\]8I''eܩWeԱ2wWC9rnq47$nUQSD#Frp@ptd)O(՚Sj%|x|9ET+/ i`Q]U=8{[j] oI'ǭ4'IFX\#sC8IGнb-k@W{Stw,w9^.0UjjNES~c=&e<4v14g1=U 18kXрPvbf^)Aic'J\z]ij״KIs(0W[sOS)A>GID<y lQ?ʪclQ1s. uT.=yX{L4 YM,м;[50xc[SUQ0TYoR?י=V[˗)uK >ATa]͞vn qGN%ޗ,MqKxd5™ %a XOĩ7_JȆleg:w)tEoIYT².HpX-$4j{ƈDZw(/""" """ """ ""lLqS)g,+Ew2wȴ7X<4cEwLm1D"y3)+[Mc.$S/h?%{0'[gzu?u#t+\;RRvBd.lcE"OwrL~?Q'+p(Q$Ԏv;ǹFVʮٱvc# p6gšYFD OHdEUE*yeڭ EL\ޣPz SvƤ3'<9V&kA0*1=q%NKiXOE&|Dy%,|%û,jLUFsY(؇&)53y l&!VI15aQ䑁rXHuDDD@crack-attack-1.1.14/doc/crack-attack.60000644000175000001440000000612610236151165017053 0ustar webbsterusers.TH crack-attack 6 .\" auto-generated from crack-attack.xml by docbook2manxml $Revision: 1.3 $ .SH NAME crack-attack \- multiplayer OpenGL puzzle game like "Tetris Attack" .SH SYNOPSIS \fBcrack-attack\fR { { [\fB--server \fIPORT\fB\fR] | [\fB--wait\fR] } { [\fBSERVER\fR] | [\fBPORT\fR] } { [\fB--solo\fR] [ [\fB\fI--easy\fB\fR] | [\fB\fI--medium\fB\fR] | [\fB\fI--hard\fB\fR] ] } } [\fB--name \fINAME\fB\fR] [\fB-X\fR] .SH DESCRIPTION Crack Attack is roughly based on the Super Nintendo game "Tetris Attack"\&. Slowly, your stack of colored blocks grows from the bottom, and you\&'ve got to make sure it never reaches the top\&. If it does, you lose\&. To eliminate blocks from the stack, line up at least three of one color, horizontally or vertically\&. Once you do, those blocks disappear, and put off slightly your inevitable demise\&. .PP Crack Attack essentially requires hardware acceleration\&. For XFree users, this means you want DRI\&. .SH OPTIONS .TP \fBsolo\fR Creates a solo game versus yourself\&. The goal is to gain as many points as possible\&. If an AI level is specified, then the game is played versus a computer and the goal is to defeat the computer player in as little time as possible\&. .SH COPYRIGHT Copyright 2000 Daniel Nelson .PP Copyright 2005 Andrew Sayman .PP An attempt at a complete list of copyright holders is included with the source distribution of this software in the file COPYRIGHT .PP This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version\&. .PP This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\&. See the GNU General Public License for more details\&. .PP The GNU General Public License can be found online at http://www\&.gnu\&.org/copyleft/gpl\&.html\&. Additionally, a copy can be obtained by writing to the Free Software Foundation, Inc\&., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA\&. .SH DISCLAIMER It is important to realize that the name of Crack Attack! X-treme play mode is meant to be humorous, and thus should not itself be the subject of derision\&. Thank you\&. .SH AUTHOR Direct any comments or questions to Andrew Sayman via the Crack Attack! home page: https://savannah\&.nongnu\&.org/projects/crack-attack .PP This manual page was written by Colin Walters for the Debian GNU/Linux system (but may be used by others)\&. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1\&.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts\&. .PP A copy of Version 1\&.2 of the Free Documentation License is included in the file debian/copyright in the crack-attack source package\&. This file is also available in the Debian package as /usr/share/doc/crack-attack/copyright\&. crack-attack-1.1.14/doc/crack-attack.xml0000644000175000001440000001365110236151165017507 0ustar webbsterusers Colin"> Walters"> January 03, 2003"> 6"> walters@debian.org"> GNU"> ]> crack-attack 6 crack-attack multiplayer OpenGL puzzle game like "Tetris Attack" &dhpackage; --server PORT --wait SERVER PORT --solo --easy --medium --hard --name NAME -X Description &package; is roughly based on the Super Nintendo game "Tetris Attack". Slowly, your stack of colored blocks grows from the bottom, and you've got to make sure it never reaches the top. If it does, you lose. To eliminate blocks from the stack, line up at least three of one color, horizontally or vertically. Once you do, those blocks disappear, and put off slightly your inevitable demise. Crack Attack essentially requires hardware acceleration. For XFree users, this means you want DRI. Options Creates a solo game versus yourself. The goal is to gain as many points as possible. If an AI level is specified, then the game is played versus a computer and the goal is to defeat the computer player in as little time as possible. Copyright Copyright © 2000 Daniel Nelson Copyright © 2005 Andrew Sayman An attempt at a complete list of copyright holders is included with the source distribution of this software in the file COPYRIGHT This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. The GNU General Public License can be found online at http://www.gnu.org/copyleft/gpl.html. Additionally, a copy can be obtained by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Disclaimer It is important to realize that the name of Crack Attack! X-treme play mode is meant to be humorous, and thus should not itself be the subject of derision. Thank you. Author Direct any comments or questions to Andrew Sayman via the Crack Attack! home page: https://savannah.nongnu.org/projects/crack-attack This manual page was written by &dhusername; &dhemail; for the &debian; system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of Version 1.2 of the Free Documentation License is included in the file debian/copyright in the crack-attack source package. This file is also available in the Debian package as /usr/share/doc/crack-attack/copyright. crack-attack-1.1.14/doc/logo_big.jpg0000644000175000001440000015100210132356545016715 0ustar webbsterusersJFIFCCgg"  T!1AQ "aq #2BS$R3&Cbc%46DrETXd  H!1AQa"q2B#Rb$3r %s&4C5Dce ? 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 }iǔ̀JTMp0e,9U04?TL\PZi#pIG<|N}/I QuT Csq$z:yBgjqU"&u!T%)0/ `L<龝Z3 Ȩ(i^i<kE䖰)U|he9wRPtJt]wVg٥|9f]IIFO*#Du%{ 2Jzf:+]v n!:k%M,nwXcƜVB@Q:_hl Aݭz|èaP&;rLzCbd!,KδjBLH]ETv)u8>[w\l]螡\-h'Z†iUYs#`3lq? <<꾮2ޥ˥3:Jy벺ve5Iw,"ycۺK4j-N֐4Z]63Al.lVMtV B%qe6hdSN$\ ~n9Cd!)QH !B6-CۡJ2m- !-(6`{%=e5y i3 lZߋ{^YWyJ+5 XKp6:[xw-8<}owSa&%QRT=-V/TfZ=@*3R6 $J@}7q) RW )ۛz~ϋL{T63{#D'M>Rmf*ڣaǡP6?m{wŤ{<<fJ Zi # :eA[ aw/-φ*DzZk{m>_72ٷSQv6#xէ\Tj PLĩ6e-kPoq%BgOn\p+#fmn~xMe$̲O<_b|ު-(lV}g?aY*q馽89 m"?Ϟ=@!@v>/>:zj,<-\t?pG9At&!U no`;kzU:pqV/mm~8|zscO_E=P"oryp֬{⿗KXŪ[Ŏۓ{۵)9j[2P<Z)J~%)IQT@!JBJ$AE'gH6+G0._G*rBG~beME;lIBxRZv۔N1U>gQQ F!67O*@IzÜ㣣 ,гFOH؈U\{ 0saa a0a`aa a0a`aa a0a`a;:29N#o Ƒ$($O<ρqnQΠy|ß&Q"eAd8mxvF,ul;&b,ehi/  zQDX< [lfKGꂗGjXp66_8(5f2BYI7֜":)pHR+T.'*ׄf% !ԙ$X0 `n=xHfoCf_COmVu pf0 C RRY@(@&~㗆E N+-OULk^Q~k10TYM=g;S XJGӌI E?Eqh*,o?`}<"x֔fI[) Q _o;mV aiߌ~=cFk#b~t9;iVҵxm{Xn> *vM*2΁.Zqͪ)U"um 8C?IxB|"ĀqE;7G8<5i'϶,FUF+9P6"}c#+֢x]JpWeۿvdNٽ(3޵!!ɥ-n)Ɛ!)q4귧r׹֪$D9mWYCcQ,@SgR.۬HnZq (ٺyVeU妕5N)O1񬶝i旰6[; ^婴B{hsk!mm6}A!19x/db/ 3 kssGЋߞqbjͫrm/pGnýSf&Tw|hRSyB{G$XH3 h|1x1s_5LT q~-oRڭrUDc{<\p|,v` 9w-oQ8q ”\677m_,fa\dXϒ L_o\V0SOrw,l1bshJ+o+$6=`%g~6uC5L(RSC W7*v[ܤ@vf]Lh0wvkX vYFjWN-fYd"8Tp4&:vp%˛(w`+ROͱhTC;Iq~h 9uA׻=%ܒ gƩuu$uH{+E!w⾂8B"4%KUf+}Q_#n5Jvm1j:HR`R*?( N쉚>+B[]ا0w %Tn{NV##=qzy%$PK, nK+U%{*eM2VdK&oC?2NpE8o5td:Җ]FF̓N8%U7BZamɽqR]yI7^׿=Π7 ]>siu;(H[Np;\iġi<R E5%gxˎ־#nk[Ʋ=7ķ!Ǹ$q=8{sܝ,\E͏KEJJQxxC J\ EmȤDJlDJT gkak-> ŢB/)6 ׆Ȱn =!a,e)P .Gy

    g@/*u(.Ķ͈rck_8G?1ObQ`-c\ŒƢىCor 1vn2-a͸6k15yv߁ɿl"ޟu3-I%ݾx_nU <~>X=_,NlQ}EͩU.]w7$oa߷x&\wV̆\eԨHUIқpHZ[5To( wc3nJB͒̐ 03 bP{ko[>3i\$8:7 pE,vQ;RhORj%&/) )* _}5ҺdDC}]*ZʾB r/G4Mv%DlnIQ%);؛z}/Em/[@gM,Z ߋl;rU=nmXز#D-۱׹|0!SQ10fvv5VZao?BFqk4_l"ݸksef-QqHH>h68b~qN &XЕ9=X%)K#(߸o\Y 'hGR̄nqQ%c6#G,P?@ے|j{JYqka܋b;檇|u9P>]8yA^7}7[/7J $$-߿Ӷ?y(nRҌPb[Ê Av-n~>lATɩ},3ܛ\XO  V ćOSgHJlɲoCA#t4Bz5ԝKǹBy~_3d0uO}ȤhN]vJ7"O  NaRX…6?NOn,~qrl~>DTjnD,}G~pQ2ƾX7[7[XZ=YUQqykةn'~;{bȺRӚiU'"J&qkJB%*QMgJ:Qi֫av')GcQaB’.ry32~X_|Z!h墒]!t{0%ضYP&bc{j A,j , O#%I jjo3"uxno0FܨHaĸpRMŊon1Ru*$ @I=0) y\ؒ;O _WīgYj5F`ELځWks{-#V!U!֧=T`(}ctŀ 1RFT0eՓ!'gڦXLW}wn M,[U9uJ "OrCrTR,x*.$~<~e0ldEm!N3!+ie-iJP#Eҫurr1U)4G'u۬6r :ÆwPRA}J 4 ;}ߪmcqP˚6BByH(P!M*&P6#:z{ާiUH1AVm7K]מ*{k;ůͯ\L *2#X@'|9c#VPmJ{x* ,\P$;ঊPnA.y?KO(RosE\}?.QE_8y#|9f >;^݀ߟQ(r@T6U)Rp/S?ڣM'Cqݾ*]ǝo*χ:W~_u5QZRHjE p~x`ˍUTS$If`w2! R23!y~z2ZJ+o!(y|Pw-m%J@^]rU&1&4yjG]KMv|EB Jmhq$ZP rHϒT~I ;}>MO: Ae*n.A |_Nx" TNHӨդ VJU6:8<~nٖJ1S.M"׺޾@HM$ ؜T87MS[m>P7*Vְ%K MiQUݮLTZMȁ$X1[cfF"ڜvoRmv$n w945%@ƃ 3.֌V$؂y.Iin*\޷M?Vw>< W76$/mqM&7>m?M|YLP[(@M@PPa+Hj&0ZN&q=xB7?Kb (=G=O{1ḨkXO¼ Ķʆ?_{}g"B q듻u - ~ b )e7~ h?a|`$鼗{-=m ;YBhO׎GyRBH#kn(w:Òs~y 7n ӛ%2CB>7-;U>ۍGr^`GRŭ,nE$rr-_zZ#}G~HpY?.Kg{ n1cm~@װ>jC\h[w3'P֭;6oman75tTEom۝xD 4& vII1KJӼ-L TûxϥlJ <87-|c|>JA>O"ꊄ ,-]?[Q0oَe PSȯai9 %E 1%2{Vr/pH"8:]!ڻ ou-T6O ܨnötu`:]mn66'l@KӹKfFeX2aa a0a`a/V ȤQR-X*eQ{okEQ3 I`ܕ "jH|ED>-M|{xM~oǧَɬՅ{_,V ,X~pES jNa]|5ݢvħZ}jPakxְyEDr_%Do.V?Lv-d۷_LG`z%UeuESHŧi䛱bM~ӗa 1Z K2z?TMa.~o׿ck'́~oMքmo{;ܻ㽹mw8R8dQSJQ>$GWۛJZ*H%WI+q|Z)sQBv(XZ)7@%=#>ǜ}ɔ _qpG *c >!󾏚('ڹJgd6Pk:OkowPqr:DѝB/Ly!#H(R'&YnJ@MDvKee !^qJQ 6pxCmf؁G|R4-KwƑJanxinН*PyUնMdFGZCABBR|wPY<繿S-8.n d)aH7b6Ù<7OQ[J^ZlzTSHeXJP ޢ[}V4]KE-ө1%E^)#;D$ ܋w ?U Oayi[vwrnEyj3vK0HQґ %cH9ί!ֲm{ߵ|ZucC$)4 m=udC+g|/:5,'Ii'!UUl~PVU7W\x3 :Ε)-tcN XeMَQ&`" n㙪Rp7<|#{}yZӖh&n==[uxY-6az)rG6PӶ6"oޕ晏Q2fk*JQ6)kB_en;.x^V|v'+2RBRv>u6knژP Q4Z*]M }}~vhQ skM8/W^%]Fs>X~PvMFVSIGVZ'bnK566[J.4Tm]RoȦYpDJ/n;)5Ǎe$y7y/kZkYvM6h<}VU˱E+ sumȵ߹?wٸ$oa'=q `_MLE`;=<&_j0D1G?zmA":\[sϯsٝ|//#b^Ӯ>jXk-R2mdܟ>l%׾+sձJ@nҮTNl $,זBoD$u5T{5L  0AAP~Im<oF4.$,Kw w\y=-9DqEcjO6!;I̗$Lެ,DxWBD$vorGbt; 9Ne OQ꜒kqNlqa*. yX_Hd M=-9bV)~`h P)=MCCQ4]sBĆDRJ{ TݹWK]9~N=O̰ Dx"[Lu '$?.Dx,7y`^׹ (Ʈ2!$i*DĪ<C/4vA) I.py1ߋ?az^PMEL[RŶ'-Y '2LdXr%)<Weea8aŰ 0Z 0 0 0 0 0` &4?CRmS0lIĕ8ԢD6vϘvȫpG<}=Ȫ y7[ .lJ q߀n}/{|fE+gz*T/TG@ymug7<3Ws6Hcʰ 8ۃ}JWemn9ۜO;˱T2EPoA{b d'r<;;tĚD|HRT kwަL0rSTD#˙ `FKc'MԙnU@խ3'b雔 R*;@6# ̃~?P/㌟/KJ HJFE2=̨#F㿜#SfeI}ȶ۷¼2yi#)%[sqk~md3\W"2;yw6RSJ?v2NJF'۝}8t xůc*zFooA?Ԝ+?Fd`mG[='ʚV"%@}a?LvimY ,Gv_zӴkBW3EG}mHE:Zl}M^$ڑEI/sqkQ6\M}Ǖ ߰1ʪyFnlb=6m|W9vWΕ~[ː2Sh첐\KiRRi][NZ!%VQ]|"#y(4SdY[Dzx]}=8zJ re 26”t<.$|㘜V[PNy;l~MYSe|XېWP[,h%V v@[akớg?g(p?xlHnpH.3M  i*  dlZkU6\HS`C`ThYZ+R,(N-aq CB'Eʿh>ݮF(fLŖ㍬eI'w' )X}2)::qtw=̨$a9=$ۓn'|ɕY5&ʠ.:N͙Ƴ}ۇg!V$n ezUanOiۃgc#UF *+MR$nH*I /),BTr?f\Z8sZ݄^\+ˉMrO|d~W8҆jk܁k}iƣ}쮠E.և3U %V[Bd>iw(%^^鵷ӌZ}0r)l ԂNY5()1Rbb7) P eU\ ,nı;`x⃩<|;QwQJGOOOM@!Pv# 0@a0a`aa zq4ĩԬSw)2RRVM.H&܋sȒ%GWcOBq~%JeJ]}TT. 7I"=|VxJA=}N'ꬶ/47kp@e Al1[jnś}ChIUlv<.nRR#V2QBeCqWuA{-f8FLߐ{_;y- m*\U6,.H$oϥBU Dˏ/_^㜿8:O-r:8#FTd1F$JX+{+%vJ0pt*&Aߵ#9<ˏ-pB\ewI Y[B\^+c'%b`%ԅUnǗF0 rKwEyyc5Yf $[A'=nc G&K $> W4̩(|jQ<%5 \\ oH ?Q%, SA?[Kc {Xsہlڭ|-vO[ YB $R '#rpXCaeQ7$'N=.M@߿nD!0,8\ߞ>iNAb=+-FvC[r)⅖$9mH68t1_*h$ϙ_~ 5@ L; ZmP|56>Kϟ/Qju\W.Xjd-KF) #$YWtxMr頹6-H)ŞHCh@($q afW+9^ykpJuնHOAa5R?@ ߹m'CJB/a7B2\s?1;Q#!cmm! 𐟖ֽk YIU/~'s\!;\P+*JOqo3ŸlYv^NJE\=u(-J|;$f)'jاH-'oSan+r@Wo{{F iP$u0 !dwKCH6 q=m,C*"P8Nqk8Les\oeju`.l~r/8kC麾[9c~~S~/8˭HZ M v؁r zȇy~7H6nmrv\Е)-(&KC9Gי8mDֵ _P;P};OeF C} w)L!,KMBxH>w"=Լ &@,8i⠝(;¦6_Sy^m#6\Pqj+,HljdW|$-@kiK 0Ûݔ{PEȱ|}J/ӷ=E6e_M^ɓu <ǚbBʵT+7/7F bݙ Dp@BՏk ?xm/jb؎P<~}?Ypn;>K96!~8nݸbD-uKΧn 0e 5r@؋-􋁎 gf|&m&'XmP o}qaDmz#i2Ea.ex*+BHU{yw<|8Qպ\O7-6rcoqR?i)SdkVز3pwC;[yT끦S(!)% w$nf2aҗKލPsvd&[-?K;oi*_\ۉK'roqKu;JogFFUwIv46fiŒIJmHa}eԅEoe˩ n;=ǥ)i`/w$$9*XXq67C1 K\v$I'rNUQ6Wؑ繿ɰj (aߛsœgnG6ۍ.pz|_;m~{x8Wg,dRY*hX{(C_9r/)2:$DHNMb1k}#([5JQ'CJ~½/ȷCSKiԩ̷H @C(+A  P$^IGUECH< _k .-.H6SLb7+yHmu*܏vC*5InI6W<\}n<_qr7[k"E6>-GT S΁{(D.[Z[$8.6DyێmTא7&m7'id$[G'KO0 ;o[~uT̀xR/{۞ݱCU+h+Jo}ǂIvV:aG$.}=<^j\גsn뉇!cەk\ǘr8- eлAAB{_p~wƴ㙩~V!0%>n>#hSq!iո; {;\kHt-IEjeOy*aS*<4TGniVf^sc¬I6 9=8=%ҲQ@GU,mب{`ľG%\TIh)#CoOaKIJH6ؕU‰qCr!Bg'võiۨ3JĤSce(mܭd&ܵj ͱOynSQ*ٵy{mo6<ېO˒+rynn \oސPIȿ6#qW#ok \-Gz*L8#wKKY$-IFXq/3([ͦ]TB@X{cOZi3lX9Xbr3b5eăk@㋋y~o3ɷJ IWlE{[qɔAmk`?dskqA ێ}`9Ƙ- H"&Ns=qhuQ$R5HLfT7L vBZTû@I%žG|c_4>l̦5z&{)d%!`*)BR)!*?ܓO ˵\a5.;%%֟BTx\ZH;I1鬺IL[:Iʁ% [oaJ ,8ybݟ%.T_)Վb"E KlI:"폸_?ukS eɌ\rt. R[:C<Ɵ^RUNTvMDTV܀!n6jbC61sS*^ZU6 ޻-Nxlj+R@$ǢzZ2J%X i) 5R u1I ($x$ʺ6l)̩ϲŪ×JF1=r^rL%E} {,1e* 5 Sd@( r)]ˊ4F?*Vjk*MrFey aɍl0 0 0` 0 0 1W产U⒘"+wڇ Z!T)+I)RTb v lAWK]K!$^Rh$Y#aK8YX]X#c1) ZxU ^ʱJ7zw2 ڐH>xs0`^BLS.-i %$IPKP-7QQ2N*$.?t}s2u-N'ɒ9Uir)=7  \OQءRwG H` ֐TH\rxU{Ob9`b{: ,_n;(H$Vh r@$߱-%)4傢9ka{!\ۿalǚr]-N6SL9 KZRRSk{rqOhc4r_Q/*{9&WW 4U;rJ)d]1dz}gU# KZԛ)IJw+^SuY``~w"@ H>wv$s{㦛X=P#G' q1:RM8b5Pno۱MBk*'kzXroF|I zaǨF_M1ll>~LڢUJ$ؑkm{bW@g-rx#/ǡ(YjIޫA+6罽1@TxHn/ӷSX5ÿ76>OM ^؎Xs'ex~ڛird'y[BԔ+nS$OGF)hJ.{>_Q ~6e)*RUpoE$$\߹5HYLi[ x)e欀x$w>v.`8Vk\6UđO$mn:PyEt*m`>g=s(Mώ%;^܋obql%+!\_5n{ՌֿR66ޤ*}iR r>+q]XmB-E8Pރg^y ;X۰s5,QLW`R[K[Pw\ۄ R[{[ jɕ٭uL)SB6+G e6IBI#r{ChKPi m)! 8sb~nɞS8pJI}He ݿ]̐{2J#l#_1bG{ØfeԭS,hPI.. :U bRt])A*CʔI[RPчDfH.161=&S,%(DX^4P!JZ:ƪ%)[@E%[PʌE H ss3}rYQS(}і#,]mJ$I>TW!Q\['Bdv2,LQΈIfG8\@]Ͷąܐ'U`BA6*۟CsJTۛ$@?mnn8NdM{k~rN/ob͹% >6Gn-d o@pn>ÆըUZ=(h$!J>Z(-\kӪOٕ+x3[Rw.@&x&+f#]BS Mߌr++u!gÞBpyCv%0pH$Yv=Z )Zi+(ᩭ:VX4mt[U.fMB3Ps!iqזTKn7o&_K9Qo~Q )/G"w_\V_+)A7/EvKʭ8(x,pwn[V95*UmGU{M?_K&ز褍aEG*T,b"v8E+{O$qOqmRTZI ckn^)x<n㥫iMQ!oZoa۽턗Yv wlo6ܸrJ%T%`\۷y댥IRɺT77O>#<]d[^q jZVӚ̸\*i~#kR;yv9T2OB*s{T9M܄t,%+ PAi;H6Բ P #aŊnN73*j# B:n{ o?xcGU-•73{B RnEOtcURܗhTw NK)Zdc/9ޫ'3_ڊʈ!V%vԎ1`+:HUUr6Hbk x9w^'OTtT( R(EEc,i$[mď2*s̷$(_̎jz9%?h-;aM4ϨuN iJ;O,I[d!y^%GiIO{JD;\&y7%w5)Uڤ 8hq3 u)y)Rʄg;A$~AŇ}CT%a5U ۱U kH=n6 qIFnTh4ZЌA`؆vWZ<(L~A#F2ĺ`gChSP #YVg}W*бmዧQJSp#NZ}6>N6lY.DP;@=mM.,qT) ;Gz- {ka7&ǎأg:L.s& rYoY}:2*a !xH\OuH me^{ <╗SOVd?8(rq Pld3&I]%vv$K1$|0 z<0 0 0` 0 0 0 0 0` 0 0 0 0 *c=ͭnt\/'^ߎ&*SXvln ;W:zZF}ao\w ;:>Q55Yj!C+ĞCCX1Lah;"W%;̯V<{$"IgAܿ+vsߟq)Yҫꔉ"KBRl|E$[t 12WY*4 uS% ʢ h6rmu HV xƅk7P8sf8LS7rd;؎~?fmyӪ?^$NmHS=G+iV,qqZ)"*B$X 9Uya XY lI.O;8 f+"uI-\BW .x굺z`M;r̊BmNZҦҭ7S$lLU;rq(M6BYXl% 2ع؇nD{;;{*QJΕ$'u%J F]LPhv5^dA"׬1oQ ]D:nz7fBn|Ɲʽ5jvdo96;fDA8bpBt7[a\rI4ySR(Jjh Q4N8o|W רsvs4fml6;!Tκܸ+I 1|0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 1_SǴ?}Vss'f$eJq\yNS ‘1O<ˌ T0XE^0'?UɝZuZ暍Fl+Z`=J\G%ƭOTJIu lZB\ozSu߶eJJϳށ?Mr&.:z\Lٙ(6 ]&Z]^VWXNBSbnТ1 B] ݊#ǝBvƈc"8ǬMn3*Ke;ݲݔy6ح6[JUd+[f_ox2תYvr*Ǽ'FA(q b {lO8ZoꩋB̰#:J%E9M[MUeJ<--rUk HmW _φ~̿$.kTB&Rդa Ռz ߽T*irs~\>AB>,$xo;*gYY[jj-Z =%OaPxd7rQ?nF#.bZe\,F{[dcTIFÁn2:jirܧ<Utܵw:ҟz}d=ԢTŕe`I0i# ,ǯd= _Bn¸bV5bSS RW>B9nRՉɿ&"OSU=ʂI~Zoe*7VǩbGq.F!P(ZTkꔺ>ZNUS$StI*TSO)ė-4̺6$Z CR`a]FZ6yվ,SWYrLu5Zx8Uo U)P'd8}!$I=䟿 0I$ܒI WY{K36z~TӼNj&t)W1 vdǤөYn,Fև$ZL!i[JT ,O WYK/ ¥T֝眗N2.¬x/|.U^ }Ǽ?۶>IK&S`VsGSs&NT:mJ0!P'Tb˃,-4i-8;vv( 1mn6GBQ Gd~K@ym#\sjwTNW#/yf3 X5Ԅ8!כ̊JKIiHZV gba}19ǝ<ԞC)y19T57!KZ0馧0ҜSiݑGDūKLvWTjPy)!r)V>=cAaǏa0a`aa a0a`aa a0a`U`NU P ĩZ y<#h.ozk*ك&Su,=JHp4:0Z &8H) L#r8ȥ٬6r5 OC{ (q;Gwq p+F2YX4&mԜ]D빞KZ$'j0!Vʆ^ŪYG,GԛqmҗN3-].U:sD!3]595M2"/}EuJ ܔ#M% ٳiVmUqmqǘ%V-:Bi/9aM6*6nz4A ]e-/)a(JM= e!) h&8 8: P|-Βm'k[ӑPǹ]d`/Mˮސ(.K^*ǘw )c FEJp܀RZh"q^z$dd4*ksui<>.9 e,Zx8=Gp1D}ȑ}=w'{|y/9tFi6U9ڧ.CN)-,b!խB]qj[JQ'E}.{L=uѴ1e}i3y=mAE.6sHS)~"Zԧq~"78z=ʑT|j3ili$Mq9^dLW7!xmJE*ΛYގf.HZwa>՛N}c z5!&eLMy\[RMTZ~Zm {z%mJ}jZ\d6ESȖ@dN ]v}ƛ_]dYz0Dj5: -TɎKiH,BsQ?N2Gtm4q7t>_ۆv?+qrٽ.6QI[RS)Nͩ *Flжei,6JYѴ+șAfz-KE2;d(aQmT۩JRT?N6W@ (eE_>o~k?*OtҟjFGԩfLJf~uqg51r;R<6Jۮ$-WIZsӮteJM4z:zf}7U3#)6ȯQ{5h6*CKXZ]V?*b^͚W缚l $>5Yٛ^c\AQJK$er[|FH mF(e@tf5'u4JJP[˛c!s\S~c1[_a̓ 7N}rs,V@H}iX9 6eB|EmSiӶd4_OME9r2:BmN\ &+Q B\hRYRQ7;~'Q,/N1tDvcUcrr'{s|~ioV]ʚsV4ǔ3 3 dDKDvV(9{ <1wDsNZWR# qMyr 'J:.F"Zc${G?46sRf*y~u|@@C*F"Qo !̼ sy-HbWTMe͑4LlWTҝ"BRRΒVemQs~'Qhje(BTҀ`ʨXܕrvOҧfG\][<ٝ@sVr9Bk3JLXnW$ 4!v6k>ri,N1 T\G<)mkK.8q$,$jEs'!er]:r& IȳqԚ\x!9W;h+RSD?_͙Ne*%2 2d1)!P94͍i'TU=W-aHzP9piݝ4udeGe  1>6z=w7 eMoinme2&n+TD[اVu.S Ns9ktAk%oHu,J?'+fvN_Ιy95Q+-?[kaR:3jeԣrF -u+0 q:*j/\W/Mz̴4_*` a)~E2$%4RBSPa3r/1a'>dmf˱^i]ZPE;WZO8EYK RZc`6$<`rB|zt1`픩'LW6V5՝ٷ6T+4LThShmEB}V3q(8=Gpĺ7K/}8({+!ڏNṪ͹3笿"(ŷfȹZRˈ3<2K{PsLkk/AJ%릁5uץBg5,IF 2W#=SC2=$~8=Gqf&Z.uGjm:IrB:ݏ*$ȯ:Ĉ/4q B:u}R0e % C6,ȸ;w>Dz7cġIRTRR%@%@؂ x8br{K:ytOQI}4܁K8c2qC,ߤKq8}(6KaRLн|m+yY;ܵEs:Uڼ HV_aHjsk%m2cJڒਕp@-j.ZTYK1s-!帆*Zˋe"\_aJm֜m`.Zb>[%RJb}B\$Lgp z~N*E|3}Ze^ZoͳؓS9=/,ۗiu !,ԗ Jq5xqZ^}yJJE,`@L}v Ց 62?Q؟&.i_WkŠ_?M~_bb9#G};O{JlCL6_>6_YZhKrIz1un4:I4)M"VbQd"6Yȕ&8N[MymRC6a*S,T(I;H$vU __l}l.)ڤe{:jM{猞G$0+?G~~gQ:ve]CUh:ej^BRN>.zO_gzPj43&^Ss":X*w*%D$ h2~.4;e1Q1yB_VRK} ͇Ny4-H<kkş_W|iޫlmmݏǟ7ݿSh)'ٰpӦ:j+=+Ն[yǑcӚiBeFY4weIw㎔6A bF=뢍(:n;UEb}FǗKeyZB<:%?iMNO9LqVɕIPemRjMCm܎8܃P==[Lu!)\<s&5uRmrǾo{A~ƣuO+Dt.MLvy|$YRu[JtmBHSl.lF79ѨZ>m8'iTZ#5Fr\\PJCk}Kt0S!3<5--S7V,HH"HjyD13EV<~h=Ҏ+hAө :563O> ȷRV~,duو7qZjSJ*t2y5NG˙ 0Ok˱`@B&tćQȫ>d)ˈiݠn) bAcۥ^򽪺5F WqUzvVt6ŃGM(6ytkeCz.\uЭ_k-1:y,Ͱ0%zE,WJ8$ =w?S3?N:_ўdYe|H~-+.Q2-#=)1*+d(GNtgzYR3TȔlWgk˗*NT912ʫj3!)R[nM5~*&uT}9& je4F#R*q`ʷ7"M0ݾS6nƼx^<ҜFQ=9c!)|FTMδF8Z|0]K._qBc qznr^nJzQ;ur&W.xMǛVi_`)J R֥)JRl"䨒I>܁^jZy7))wPm\sԢ8(*[́+TzZڅ8Z'0@~ 6uƥ%^ոIZ}8rU9Ryc/ѲGTjr5Êl-a!Ek 'hR<Aeؚe (KXm6Vm.1%XMYY5KuU)4̑PiEղ6@MMnvHS+*M0d«>Kl4ޙ(3l+l/ gHZ9ifm05:T"V"KBN%s(V"୅ze__8܏JSvԄRʔlyRI䛜~7Oco|ky_;CjoGTZ="Oci͍ST*ZgRj}b15+Ďb2_e@a zn)~hu+ܙ Xf[>CiPf; 8 ;Ǧ4QƊuZ5S,S!6QV(,L EF b3,#l .8JYk=h`zڎeTKI3܃I|eNlI6}FzE?(SOtuR nȂy+,MM95U*uVe %IT—'@ƽt5Xs=g*f9ӪEiir6huqЛ MF$v;L2hQ^7p?dm޽O}WLj3tRW6[Mt`De,Mҗ T8[t k@]c~nߞ?Kc_L侈cfs&[NKG/0 jۉPn&3U(~Gi<9ԨA%"[tܕ]!ԐČ%95|ټ)x@*4݉؋ %SMFb$):Hyqqo>S<+q\YRqũKZ֢(I~ʯioM-bPK=YDӜ MU!iQǩx8|!\nB][Zxa+MYҕ 0MU- Q&y!?B:y6Tbj9g@HP;_zOu-?C; U iYdTWT6\ZZ"UԢDu.(BISe__8k5{B)ϫs{[W;n|qkQWuOٖeQ-m[粫3j ZpơTAC̴4hJow>I&.}ZUMֶ~5B- r3Jд)*PRTI y`u^JVnuy52F춙y0ֳM:"#+L"p*vH<d>ͥ\W2S{8טkKO+nm_/FI*f2J•W]@ L-~722D< /lld45lr[ʮ#B\zSLΓ5{L(mY錆Tex 8ri;B:# R3OۥyC3b(FbtHY1A\Uf)-C1UJ?j5 Ii5sƫd|T❈ĜTRفub`;$0J*SmoFvJӒѩi0S*tVBaHaUar/aWQIuWÒ6A4P]$#Fۂ0T+GM2 `>*)w%nWMA̴ܫ(RUx\}Ĵ!HG> VyD(mJRA7OgE VT"ҹ0)XU*M9Iip]E'Epcm'QFqIܢKQyj) HT[Ӥ({.I66%KMsG,d"m9,r\$hPه6eu\BwڝAd-Q /]:aM$:YYoPԲzt2*HTǠjb XwkHxSGn4bίZ|4qK*R!H3]Tq|-:?9*Asqcn-nq1K{;w/eef^+rl]{ e*)ƹ?ըK#:2t'jcY3u5LjDZ*rIM1-EJ/Bˀќg_Tk۠rΙ (Ϋ d\*}Ar3) ce__8|e__8X|oa21nƿ=õLI۪&Yg 6JCУF:~OOVCC(b1 DU3rR}j3Va9Ɏ*bW9=."Z).L^CCceJ؄!( HUrP ۈRBR!I7 JHP b{OdwIYT'+tRf3FS`sښLJ: ʃ*3*hP FVͧ^gX)*jKe:&QP1+MV4DdT2$ Բ!>`s`nv}ўjC츇ZyZq ChP JB@ w꟥w5]!zJZ#fK;>,EC3Q\J ggRn#7$bmIR $(qQs9ơβꬶ u/Ť ś ˮ'W_Px#}cճZ܉:C.C[ˌt M!_we}-oNLɚ[VE~e.p<#Q_eTkh3TUa_PԱ[̒ Vf1$gWooʾq}=N/G 1kѲ6a7-I!ՕCφdL(󪟈Դ!xKrKjP*LNb(heMv,weɐ-a$ӦŒҶN% ,6lj?W?2QoM%dTBC=<G$l6*AUJ;A_v8?*=3M:pҘoܶM! "T͍J]p˴lhꃫD$XO(nh}C.V%PC˦bi0\W(a7z.:8j]UJ&G6`˙_d Ϩj R"wԕ%E**I)RTRT <y=#Lzs_{$*-;W5>\m.Ѥ;WA P ٽ)%Gla]CzG]VWz`#z6Wz+#SeF0KOe`He$]X :3 .#n G卂6?c;kVg2m6 Yj8%@,6JH [O?cZT) BR$IP!IRI!I ؃-TtSN4 (?,cٿQeAAygʹ8r ՘h !KISI IR}) 1Jc{@r Zk&[SMgdwY?hk6`MgrԤ 9 3ܺL;2Dfi_A" KNGHp>K_Z"uW^7<={]4eL~4'<^\ IztZ}l6sUxG7{Gx{2wuCXNxqY>C+! Gޥ@NXl?+{r;YH4R _ȹA/( e6wOUcYүYgPOw*j 6*ZvI5C{׸ʧ]$@2lj'kM)ٮRXTJiy-P3eks(Lҥ#> )U)+miKZRo~KK]I>kK6cA4q Ӵ% 6` Pз*,rB1m/Ə?-ƕƕQz~Ǐ7ݿ_=]?n >äڥ)y6MTSDzRuřc,$hRsRs=`SJڇ1#ĥ-J5 qN lo)}sՖgj]+2Q)Udmʧ GCoHm!!ԥA.%+]4v}TS;-|%*ID~_Lk_!rCQ+juVim$r7#~/OKNgM^e[K59J3 L4|TڪDB|Vޏmr\m*^_W?:TLP3"]uBӡU"(4_d'w 7|J^\Z˪R/H|B 2,R2HD`tJ1%V].H;Amnn2lP fYrVJS3=B51 }JtA%)%Jap4w{Z7.箉sWSZqSg:LRVCۋ;(jP*pJ\sŏ *. LzәEYSfPW}$I&5.*x236o uP-lM(]d(P`^r6Ct_c۩v+.b)>*TCG n+oW:"pIydofxb؞[=[bFan+}eYd4<O݋m]AiN79ZqG8Jp3XAʝN ՚t9o˥KiP/6UR)**JT%B* A{T;tiwl>fZ-"IU5媈}Rd_Lݨnܦْ5<>Lf% .bihbZ,2etp,j^O'hqۣ0ܣ[pH;X1Ə?0Yen)4R@z KBgpGyoeSȏoqǜڬi_Ox^L"L=ڸ*E%/$b;mud:68p-;GJ1ǷcM=9+>oc3jDٮU0RXmZǨՕ4҇Té1L2>eϹB4S>Fچ V@JA?5ff5?jbu+8fR7\ʄSe-@_|W<փ&\B}WJ7/˞)dK.L"ԩ0JTci'i"Rٙŀ;\l}1`WQZz )5iw..D1"@V䖝]jHmKaj R7$<;?dBì|՗e06~;-PK)mQ׹;~Ef 6Wini2RB@qN!۩[hj|?xYwNUtWTyKeu&lzU8yi@ :ٌSi[VZ)e78@e\r[1gfVUsjJA~|Lx8 l ֠ǟ*TA>V5θ~A\Rq MD2T W1Oh?L4HUyرvtLʒ)ӅF5'Go@q8ڤ 2EfUQ$U|CqcJHRCAާ-cc)YUʠܓb@m-l0 V\,laaPTfygWUYQ.jx6JZTޤx3_@WIhY:VgvM[,f,P%UR$3XRSLg!1iǝ={Qzq!W밴7.lBOzbRzSMQGpZCpU$d|8e95٭?OuMF2f}2!e-49rHJ>`>y_VTm426ы : no=O?{jiItsXalCC2#|rBPc:.팏R#imnkHR$A?85_cW|9e*C|U=ᰠ1ƌ@ !*IKi5s,:WP3SQ5TXXP"lFK[J~0M0Sk69AGjSdT3I\ȬS>OmNzۍ2.W؟mG5LI+1q*=S+m]GŤ͚[IP %@u2YΔ)MH4*U~VS̴␢H}-%ISҵͺ:tb dUd=_S I֢,-0O?0T.\m7Bq$d̻UK*%1 g2H(r( urmRYQ !,>ʑ%Z]{uK"._VLc~jM0o0T"?!#G3CRʱdu]f\RXVemJ>CʐRp Ch+Z[B{$aZnjպQVMlx˘F֐k$K$ˌ+'KD8?xRf>ZԵKZԥkQRֵT(TJI$I6!6VYL'i3.JIu1*3k|%m!Qd@W˵8 Jm"ԿOYqA KҒkIqIORet=TzCU]NizZI@ʓGY X9+m;_A%YZ׳);׿lz'qm5~$5bkeF{>J: frBjTJB|]VuDE{Ms3EˍEB R$iR PV[Wus<>N4 SW),<-\j7E C`C:#}T;>߆5vdug!ioNpO{Z1e2DOP4,[).Zd[jM6#>C"4!e '|+|njr_jbդ36ꇆRl=I@TObO^.++/6t*I؀G{=pztXz#2ddjFw–gM#ѩˉB%InܙSl(s21ZQ-NY;E QBӜTfW̵xm0-:N]enj’)*5/C*LԮ5R%PsQU57r.dq|:\O޳j*˾I}[U* \[FbLہ!4m (ůӾ?~_11&xΔDOOp> JIak#>2g9Vܬiն$*1P Kj[ItH lH}g#¯'Te n^fQBlQfTKRҍ(K)sSCJсΨm#kcxύ+\hJIY$`}̖ZKO0hu[p-[q!Hq !HZHRT F10%i:3a*>FJ0 D+2XAr!ŕH_.g_uAK_QThhVƣ1Wh5'qH"@ r:iad%}E{M Fkw5NgMOZB^SR7OI4מ[984#-"CKu^ƲtJFDPbeb[R]/.!Ju56+m-.4!)$J$yjq}juZRu)kZRI8;xShԺz:_ )նP"-c]J0ASi#/^u#K.Ofyl<"iѭGTjHz8ye1^)a;:;Z VX8߿mJmJ韬/)]uFWc4sP1VhqĖRIW*%K-"Nk?T?=Iy }6kWijRWQȲ4gFᅊVHVH2H@cBḘ̑o F6Ynǽëeje)c($˨V;3\y0T❠gnd-N6-(pVA* PeաMq%W C(ZH$ qOW9heNuʖ:GSaiJCI^a֒$@ 7-^$Pzx(*c ^9t8!QQJDP6uIWEMհGF\Tʱ™lq6q;3G,MMb= ^h՘QrCF=]C[:Ⱥ Gϕ1F` Pn,8u!-%łJBUX=bjOW+5fڄy^4L*dZBc2b=Qԩi2d:׬VEBV@w7)\Ea0W!-ZTTN~.眅> tLN陧謺fPOU18 _STt44 J*VX)K0 P)pƣ=, {s5&ש9+U,CJR=t)D":u C\(k1ϳWG2LNiG!H\tCΰ`<ܸc-ZV$SޔNxz㷠W^M9~.ZKjm:#K%nm^iHqEҠlH8&cdB*|3VfJoεe̕X~|N ;&K4RIRձ%bw UxySMԒhÚ%LvdiJY4hC0a j#^@U3a4- :AUfOTktD) Sj?N~l{Qj"j&LeMq_(HZgHH=$H&79Db[NGHne+N@Uߜo[CIe.C+r!(i4K[P)օ X_~:z7)i|8)&I3)M3A*OPKdY) qcc1vkk`,XvuG(e 6yi)Gȏ ؞`1NruIYB45* ?f Ei }RCH1 T7.loW̹J LXZF𐳱J),cKk~:u|]<ȼ@֙j|򆆦#":Z! HJJQ B.#GV_IP3eBī) ce![F4cTa &qRI!A?R 3vFdfVI~8) B$*I)P>?Pqx%u)J +{.Q \+jb5G!J%MUTUDP*6acWau:inc+PNBv;wGYXp1GU4UOIUO"M4AQHfHFѕ 1X`HV ]:KT*jFEUӪl͙ʫSrXM%TJ`pysFmYgV!U4Ug*XZib[fk8$ƊҪ,䱰.I 0 N.-nZإI!@Aħ=g[lݤƿsW9I@v*M"TGaIjw8۳\VJ,* ag&,el8r*4sS-U-Dm)TA$nLHb,i Rum$[ 0ɏ/=ĺî0(uۉ *I ;D;CLXt;&졐ڭ͙ƽSٖZY*L-jJ(JR{aWC霯s#SCҙ\f[Ox2$)*) 暆xSKNܝȾa Na1%ݧuy$=߉QZukC9hJuA G}ډ!ǦjLVcݴUrk/[Nvl']CRx ćО+xCI]G+^|'KXJZjU :{{cd:!K R37@*ARhU;EV㭹R0dSb,n}e++> *&{#75&C]N_E_ee4 Y%K aʩ(dii@ƒAnኗ4~j~c|nw O]Ѣ98o\TxqVÅK4x<"iax&x$ y>]HԦ klA؎v<0 b0 0 0`iuCu}mSY I>t{sRiވi.!0Níî2J i֖mi7Jq*By IAě7Y]_KYETSQf]K:dFJP9DTtWE_NHJ$_!pH(!ƝC- IZR$$ q:nWjP*2bxR$6UZ 14Lz*[h-6[rVDXQu[33 4m\:ІRPS"lkx7\wcR5:Jeg\̫mn8U 0q8 A`,G@섁xz㳦kS2龉i:. *y|1ZKM3UUFiu[*3:N5Lm 8b> AfWWkP$dSr_Sai3ff$O$rO&xa0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0` 0 0 0 0 0`crack-attack-1.1.14/doc/tn_wallpaper_a.jpg0000644000175000001440000000315410132356545020130 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"/!1AQq"a#2B'1!QAaq ? HsKY,[]*&Y ),@zm:tcn~zf}N-q^zGWrr򥾟o%w"be`Pk#^ʤa~8zD|_U(&U~ڱ\9"e0mVkoUDn{/q}QPޖokֶ3 xo"doF56lfj(jrN_*խᠻiFk9 5rvBƤQFN)Hkhzx0b.%c6đS¼":/[ɗucjr1Ut+ni%EW;2r]'Wb^9w#\Snc*IV7+w5:wڕ"f5>[8ֽu @H~GGаʑʑ΍QMoy|IE?\F[j{9SE%ņrת`;kajɿM!kMz1N9G&=;:'xW ,rIo'Z+]fZ$X ʴT2"J_]swעNO[uFUz7!gQ%=k1SkHjm+.9}vz[s ^УGD[j9SJR8Of&ϑY_?ӤTz7י>4ÚMcPe;iˏ#4{G\Uz.*|7xoԓrړlD~G9r7OVZ/mȨUN6[#sw3b ̅FA5$F\4/ԼG}zCZc]HѪ^( {ᙚK+_-C722dZkcthV֗z;\%$5R.+ue|~N_(xuDG1]HѪONdꬔ_cQX֕mG;4kE xتOXR F̋k{DuU߿osg-f˳]arB5TE޵ʕ@G^FHgPo^Nn crack-attack-1.1.14/doc/tn_wallpaper_b.jpg0000644000175000001440000000346410132356545020135 0ustar webbsterusersJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"2!1AQa"q2#TB(1!AQ3aq ?jpͭ6wt.TRGt4X,?Rj˒qK7j\AQhΜ+u^)E*QIx6Z%;nTt\ q ĶgMyegxs)Y7*qy֙9JSV$a'D U*iͯ.g -zժ:vW4sɦ*Ϧr,鏆Җ.O_ɺsqBrcUrSnn߇9ҧt#4ഒQ3,GnYL^ͥSLÿ;b73eXFvc A[/eWT'v>_^קRqZQNoV"2N*R}]5|eg[R$޷MY[^^ztꖶRI;SR"5ww[.)Gz2]ͳ<3ojzN.}zҡME.R.L;N]i%iX7x\zx9ѝ;ItԵͮلi^΍m#$Q$^m]=WTٸ2阘@χ-m׍9ӋKϙm̷J驿xzTO#a֝I[Fu"9kM,{kxN߇īlFr"-ixy9%SRg-cyr,L[J4F(xo/.Y uhW\7$z'ЭkNҵQ熣KoE#3/I[SӍY5N޿6߂Kku3>P}ů7|+Cq /:ZIsrӦ^DG5Z)RR76״~_=|n4ܻUnKzh(Hv.' ƤiT)e pqJ:o%vXrR(}陜}1׍]_ARI5{ᄒO) nR8RZZ^]7FS~VjG/'Y{0[JU.zJ% m5%/L5xn&9i|7e6׉%C?:I{yu1#N3sagg]VYCoQמ\rwU;)tj4mxs|ux#Z3&V<"c~ߦQIϲ{g2@crack-attack-1.1.14/doc/dl_ii_windows.html0000644000175000001440000001105210132356545020152 0ustar webbsterusers Download and Installation of Crack Attack! for Windows


    Windows Installation

    version 1.1.8



    Download | Installation | Trouble Shooting | Starting a Game | Game Play | Source Code

    Main Page



    Download

    Download the self-extracting Crack Attack! for Windows Installer here.

    Installation

    1. Download the Crack Attack! Installer.
    2. Run the downloaded file, which will be named CAInstaller.exe.
    3. Find Crack Attack! in your Start menu or on your Desktop and click to play!

    Trouble Shooting

    1. If your OpenGL graphics card drivers are not up to date, that may cause problems. Check your graphics card manufacturer's web site for updates. Older versions of the ATI Rage drivers actually cause Crack Attack! to crash. The latest versions do not.
    2. If Crack Attack! gives you an error because you are missing MSVBVM60.DLL, you will have to download it: MSVBVM60.ZIP. UnZip the file into your system folder. This folder could have any number of names, depending upon the version of Windows you're using. The name will be something along the lines of WinNT\System or Win98\System32. Once MSVBVM60.DLL is in the correct folder, Crack Attack! will run fine.
    3. Something went wrong? Let me know! It's probably my fault. I don't have access to a particularly diverse set of machines, so I need your input.

    Starting a Game

    Crack Attack! can be played both online against an opponent or offline on your own. It runs in one of three modes: client or server mode for two player online play and solo mode for offline play. To play an online game, one player must act as the server, while the second player must connect to that server as a client.

    If normal graphics mode is too much for your computer to handle, switch to low quality graphics mode. The game will play smoother and the controls will be more responsive.

    When entering your name, the tilde (~) acts as an escape character, with the following escape sequences available.

    ~>

    Step forward half a space.

    ~<

    Step backward half a space.

    ~0 | ~1 | ~2 | ~3 | ~4 | ~5 | ~6 | ~7 | ~8 | ~9

    Switch colors. The default color is 0.

    ~~

    Just a tilde.


    Game Play

    Return to the main page for game play instructions.

    Source Code

    If you are interested in the source code, download the Linux tarball. The source code compiles under both Linux and Windows, and will run from the DOS shell using the command-line options described in the Linux Download and Installation page. Winzip can be used to unpack the tarball. Contact me if you are having trouble setting up the proper project environment under which to compile Crack Attack!.




    crack-attack-1.1.14/doc/ready_to_release0000644000175000001440000000273210235466502017667 0ustar webbsterusers== Criteria for Release == Let's not repeat the mistakes of the past. This file will be used to accumulate advice and methods to fix common release errors before the release. Nothing in this project should be released if it hasn't been through at least the scrutiny outlined in this file. == Target Architectures == x86, amd64 == Compiling == Ensure that the program compiles as-is with whichever compiler is stable for our target architectures. There shouldn't be any warnings, and C[XX]FLAGS passed in to the configure script should be the primary flags used in the compilation. == Installing == make install must obey PREFIX! Potentially use a chroot to ensure that no files end up anywhere they shouldn't be. Any autopackage files should be tested to ensure that all of the files that are installed are removed on uninstall. == Smoketests == Ensure the game runs as expected from the install chroot using FreeGLUT. Note: The following tests should be performed without using any low graphics settings Play a single-player game to completion versus yourself. Play a single-player game to completion versus the computer player. Play a multi-player game with the current version, and the earliest version that this is expected to be compatible with and the most recent version. Make sure there isn't any debugging output when DEVELOPMENT isn't defined. == Compatibility == Check that the networking version number is compatible with all versions that share this number. crack-attack-1.1.14/doc/dl_ii_linux.html0000644000175000001440000001241710132356545017625 0ustar webbsterusers Download and Installation of Crack Attack! for Linux


    Linux Installation

    version 1.1.8



    Download | Installation | Run Modes | Command-Line Options | Game Play

    Main Page



    Download

    Download a tarball of the Crack Attack! source and documentation here.

    Installation

    1. Download the tarball and untar.
    2. Change to the newly expanded directory.
    3. Type configure.
    4. Type make.
    5. Type make install. You must be root for this to work.
    6. You may have to type rehash at this point, so your shell can find the newly installed binary.
    7. The binary will be crack-attack. Type crack-attack --solo to play offline. Type crack-attack --server to start an online game and have an opponent type crack-attack HOSTNAME to connect to it.
    8. Included in the documentation directory are three handy Crack Attack! icons, cube_icon.xpm, logo_icon.xpm and, extreme_icon.xpm, created by Angie Linn.
    9. Something went wrong? Let me know! It's probably my fault. I don't have access to a particularly diverse set of machines, so I need your input.

    Run Modes

    Crack Attack! can be played both online against an opponent or offline. It runs in one of three modes: client or server mode for online play and solo mode for offline play.
  • server mode

    crack-attack --server [PORT] [-X] [--wait] [--name 'NAME']


  • client mode

    crack-attack SERVER[:PORT] [--name 'NAME']


  • solo mode

    crack-attack --solo [-X] [--name 'NAME']


  • Command-Line Options

    --server | -s [PORT]

    Start a Crack Attack! server. To play an opponent online, one person starts a server and the other connects to it as a client. PORT is the port at which the server will listen, with 8080 being the default. The server will wait for a client to connect or until it times out.

    --solo | -1

    Play offline in solo mode. Can you make the top thirty!?

    --low | -l

    Low quality graphics. Use this option if the normal graphics mode is too much for your poor computer.

    -X

    Play in X-treme mode. See below for details. Please do not attempt X-treme mode if you are pregnant or have any sort of heart condition!

    --wait | -w

    Causes a server to wait indefinitely for a connection, never timing out.

    --name | -n 'NAME'

    Specifies your Crack Attack! persona. Single quotes (') surrounding NAME are recommended so as not to confuse the shell, especially if you're using strange characters. If no name is specified, it defaults to your username. Most standard keyboard characters are allowed. Those that are not are ignored. Additionally, the tilde (~) acts as an escape character, with the following escape sequences available.

    ~>

    Step forward half a space.

    ~<

    Step backward half a space.

    ~0 | ~1 | ~2 | ~3 | ~4 | ~5 | ~6 | ~7 | ~8 | ~9

    Switch colors. The default color is 0.

    ~~

    Just a tilde.



    Game Play

    Return to the main page for game play instructions.




    crack-attack-1.1.14/src/0000755000175000001440000000000010241200035014434 5ustar webbsteruserscrack-attack-1.1.14/src/X.h0000644000175000001440000000733710230144462015037 0ustar webbsterusers/* * X.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef X_H #define X_H #include #include #include "glext.h" using namespace std; #include "Game.h" #include "Random.h" #include "Garbage.h" #include "Block.h" class Wild { public: bool active; int flavor; int alarm; Block *block; }; /* static */ class X { public: static void gameStart ( ); static void timeStep ( ); static void modifyHeadlightColor ( GLfloat headlight_color[3] ); static void notifyImpact ( Garbage &garbage ); static void notifyShatter ( Garbage &garbage ); static inline bool reverseControls ( ) { return reverse_controls != 0; } static inline bool invisibleSwapper ( ) { return swapper_alpha != GC_INVISIBLE_MAX_ALPHA; } static inline bool needDrawSwapper ( ) { return swapper_alpha > 0; } static inline GLfloat swapperAlpha ( ) { assert(needDrawSwapper()); return swapper_alpha * (1.0f / (float) GC_INVISIBLE_MAX_ALPHA); } static inline bool crazyLights ( ) { return light_mode != -1 && (light_mode & (1 << 0)); } static inline bool wildActive ( ) { return wild_count != 0; } static inline bool wildAllowed ( ) { return wild_count != GC_MAX_WILD_NUMBER; } static inline void activateWild ( Block &block ) { assert(wildAllowed()); int n; for (n = 0; wilds[n].active; n++); block.X = n; wilds[n].active = true; wilds[n].block = █ wilds[n].flavor = Random::number(BF_WILD + 1); wilds[n].alarm = 180; wild_count++; } static inline int wildFlavor ( Block &block ) { assert(block.flavor == BF_WILD); if (wilds[block.X].alarm >= GC_WILD_POLYMORPH_PERIOD) return wilds[block.X].flavor; else return BF_WILD; } static inline Wild &wild ( Block &block ) { assert(block.flavor == BF_WILD); return wilds[block.X]; } static inline void deactivateWild ( Block &block ) { assert(block.flavor == BF_WILD); wilds[block.X].active = false; wild_count--; } static inline bool specialColorActive ( ) { return special_color_count != 0; } static inline bool specialColorAllowed ( ) { return special_color_count != GC_MAX_SPECIAL_COLOR_NUMBER; } static inline void activateSpecialColor ( Block &block ) { assert(specialColorAllowed()); // sloppy but effective way of insuring each special color block's gleam // is distinct block.X = Random::number2((1 << 20)); special_color_count++; } static inline void deactivateSpecialColor ( ) { special_color_count--; } static int reverse_controls; static int invisible_swapper; static int crazy_lights; static int swapper_alpha; static int light_mode; static int light_alarm; static const GLfloat light_level_map[6][3]; static int wild_count; static Wild wilds[GC_MAX_WILD_NUMBER]; static int special_color_count; }; #endif crack-attack-1.1.14/src/obj_name.cxx0000644000175000001440000001047210230146633016751 0ustar webbsterusers/* * names.cxx * Daniel Nelson - 11/9/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Build the name texture. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "String.h" #include "MetaState.h" #include "Communicator.h" GLuint Displayer::name_texture; void Displayer::generateNameTexture ( ) { glGenTextures(1, &name_texture); glBindTexture(GL_TEXTURE_2D, name_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GLubyte texture[DC_NAME_TEX_LENGTH_T][DC_NAME_TEX_LENGTH_S][3]; for (int t = DC_NAME_TEX_LENGTH_T; t--; ) for (int s = DC_NAME_TEX_LENGTH_S; s--; ) texture[t][s][0] = texture[t][s][1] = texture[t][s][2] = 0; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, DC_NAME_TEX_LENGTH_S, DC_NAME_TEX_LENGTH_T, GL_FALSE, GL_RGB, GL_UNSIGNED_BYTE, texture); if (MetaState::mode & CM_SOLO) { int width = String::stringWidth(MetaState::player_name, DC_NAME_TEX_LENGTH_S); GLubyte *name_subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(MetaState::player_name, name_subtexture, width); glTexSubImage2D(GL_TEXTURE_2D, 0, (DC_NAME_TEX_LENGTH_S - width) / 2, (DC_NAME_TEX_LENGTH_T - DC_LETTER_TEX_LENGTH) / 2, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, name_subtexture); if (name_subtexture != null) { delete [] name_subtexture; name_subtexture = null; } } else { int x; int width; GLubyte *string_subtexture; width = String::stringWidth(DC_VS_STRING, DC_NAME_TEX_LENGTH_S); string_subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(DC_VS_STRING, string_subtexture, width); glTexSubImage2D(GL_TEXTURE_2D, 0, (DC_NAME_TEX_LENGTH_S - width) / 2, (DC_NAME_TEX_LENGTH_T - DC_LETTER_TEX_LENGTH) / 2, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, string_subtexture); if (string_subtexture != null) { delete [] string_subtexture; string_subtexture = null; } width = String::stringWidth(MetaState::player_name, DC_NAME_TEX_LENGTH_S); string_subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(MetaState::player_name, string_subtexture, width); if (width >= 2 * DC_NAME_TEX_LENGTH_S / 3) x = 0; else x = ((2 * DC_NAME_TEX_LENGTH_S / 3) - width) / 2; glTexSubImage2D(GL_TEXTURE_2D, 0, x, 0, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, string_subtexture); if (string_subtexture != null) { delete [] string_subtexture; string_subtexture = null; } width = String::stringWidth(Communicator::opponent_name, DC_NAME_TEX_LENGTH_S); string_subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(Communicator::opponent_name, string_subtexture, width); if (width >= 2 * DC_NAME_TEX_LENGTH_S / 3) x = DC_NAME_TEX_LENGTH_S - width; else x = DC_NAME_TEX_LENGTH_S - width - ((2 * DC_NAME_TEX_LENGTH_S / 3) - width) / 2; glTexSubImage2D(GL_TEXTURE_2D, 0, x, DC_NAME_TEX_LENGTH_T - DC_LETTER_TEX_LENGTH, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, string_subtexture); if (string_subtexture != null) { delete [] string_subtexture; string_subtexture = null; } } } crack-attack-1.1.14/src/Spring.cxx0000644000175000001440000000207710132356545016451 0ustar webbsterusers/* * Spring.cxx * Daniel Nelson - 10/12/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the garbage block impacts. */ using namespace std; #include "Game.h" #include "Spring.h" float Spring::y; float Spring::v; void Spring::gameStart ( ) { v = 0.0f; y = 0.0f; } crack-attack-1.1.14/src/obj_garbage_thick_middle.cxx0000644000175000001440000000533310231337750022124 0ustar webbsterusers/* * garbage_thick_middle.cxx * Daniel Nelson - 9/1/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates a display list for the middle of thick garbage. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::garbage_thick_middle_list; void Displayer::generateGarbageThickMiddleList ( ) { garbage_thick_middle_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glNewList(garbage_thick_middle_list, GL_COMPILE); GLfloat vertices_0[3 * 4] = { 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f }; GLfloat vertices_1[3 * 4] = { -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat normals_0[3 * 4] = { 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f }; GLfloat normals_1[3 * 4] = { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; GLfloat tex_coords_0[3 * 4]; for (int n = 3 * 4; n--; ) tex_coords_0[n] = vertices_0[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_1[3 * 4]; for (int n = 3 * 4; n--; ) tex_coords_1[n] = vertices_1[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glVertexPointer(3, GL_FLOAT, 0, vertices_1); glNormalPointer(GL_FLOAT, 0, normals_1); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_1); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/Spring.h0000644000175000001440000000311210132356545016065 0ustar webbsterusers/* * Spring.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SPRING_H #define SPRING_H using namespace std; // spring constants, if you will #define SP_IMPACT_VELOCITY (0.1f) #define SP_GARBAGE_DENSITY (0.2f) #define SP_STIFFNESS (0.1f) #define SP_DRAG (0.1f) /* static */ class Spring { public: static void gameStart ( ); static inline void notifyImpact ( int height, int width ) { float dv = (SP_IMPACT_VELOCITY + v) * (height * width) * SP_GARBAGE_DENSITY; if (dv > 0.0f) v -= dv; }; static inline void timeStep ( ) { y += v; v -= SP_STIFFNESS * y + SP_DRAG * v; }; static float y; private: static float v; }; #endif crack-attack-1.1.14/src/BlockManager.h0000644000175000001440000001362610132356545017163 0ustar webbsterusers/* * BlockManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef BLOCKMANAGER_H #define BLOCKMANAGER_H #include using namespace std; #include "Game.h" #include "Block.h" #include "Random.h" #include "MetaState.h" #include "X.h" class ComboTabulator; /* static */ class BlockManager { public: static void gameStart ( ); static void newAwakingBlock ( int x, int y, int pop_delay, int awake_delay, ComboTabulator *combo, int pop_color ); static inline void newCreepRow ( ) { if (!(MetaState::mode & CM_X)) if (Random::chanceIn(GC_NO_SPECIAL_BLOCK_CHANCE_IN)) special_block_location = -1; else special_block_location = Random::number(GC_PLAY_WIDTH); else if (Random::chanceIn(GC_X_NO_SPECIAL_BLOCK_CHANCE_IN)) special_block_location = -1; else special_block_location = Random::number(GC_PLAY_WIDTH); for (int x = GC_PLAY_WIDTH; x--; ) newCreepBlock(x); } static inline void newBlock ( int x, int y, int flavor ) { if (block_count == GC_BLOCK_STORE_SIZE) return; int id = findFreeId(); allocateId(id); Block &block = blockStore[id]; block.initializeStatic(x, y, flavor); } static inline void newBlock ( int x, int y, int flavor, int pop_delay, int awake_delay, ComboTabulator *combo, int pop_color ) { if (block_count == GC_BLOCK_STORE_SIZE) return; int id = findFreeId(); allocateId(id); Block &block = blockStore[id]; block.initializeAwaking(x, y, flavor, pop_delay, awake_delay, combo, pop_color); } static inline void deleteBlock ( Block *block ) { freeId(block->id); } static inline void shiftUp ( ) { int c = block_count; for (int n = 0; c; n++) if (storeMap[n]) { c--; blockStore[n].y++; } } static inline int generatePopDirection ( ) { if (next_pop_direction & (1 << 3)) return next_pop_direction = (1 << 0); else return next_pop_direction <<= 1; } static inline int generatePopDirection ( int n ) { int npd; if (next_pop_direction & (1 << 3)) npd = next_pop_direction = (1 << 0); else npd = next_pop_direction <<= 1; while (--n) if (next_pop_direction & (1 << 3)) next_pop_direction = (1 << 0); else next_pop_direction <<= 1; return npd; } static inline bool flavorMatch ( Block &block_1, Block &block_2 ) { if (!X::wildActive()) return mapFlavorToBaseFlavor(block_1.flavor) == mapFlavorToBaseFlavor(block_2.flavor); else if (block_1.flavor != BF_WILD && block_2.flavor != BF_WILD) return mapFlavorToBaseFlavor(block_1.flavor) == mapFlavorToBaseFlavor(block_2.flavor); else { int f1; if (block_1.flavor == BF_WILD) f1 = X::wildFlavor(block_1); else f1 = mapFlavorToBaseFlavor(block_1.flavor); if (block_2.flavor == BF_WILD) return f1 == X::wildFlavor(block_2); else return f1 == mapFlavorToBaseFlavor(block_2.flavor); } } static inline bool isNormalFlavor ( int flavor ) { return flavor <= BF_NUMBER_NORMAL; } static inline bool isBaseFlavor ( int flavor ) { return flavor <= BF_GRAY; } static inline bool isColorlessFlavor ( int flavor ) { return flavor >= BF_GRAY && flavor <= BF_FINAL_GRAY_SPECIAL; } static inline bool isSpecialFlavor ( int flavor ) { return flavor > BF_GRAY; } static inline bool isSpecialColorFlavor ( int flavor ) { return flavor >= BF_SPECIAL_COLOR_1; } static inline int mapFlavorToBaseFlavor ( int flavor ) { if (isBaseFlavor(flavor)) return flavor; if (isSpecialColorFlavor(flavor)) return mapSpecialColorFlavorToColor(flavor); return BF_GRAY; } // The following handle block flavor codes. Each special block flavor has // a code which is distinct from it's flavor number. This code is used to // dereference special flavor arrays. static inline bool isColorlessCode ( int code ) { return code <= mapSpecialFlavorToCode(BF_FINAL_GRAY_SPECIAL); } static inline int mapSpecialFlavorToCode ( int flavor ) { return flavor - (BF_GRAY + 1); } static inline int mapSpecialColorFlavorToColor ( int flavor ) { return flavor - BF_SPECIAL_COLOR_1; } static int block_count; static Block blockStore[GC_BLOCK_STORE_SIZE]; static bool storeMap[GC_BLOCK_STORE_SIZE]; static int last_row_c[GC_PLAY_WIDTH], second_to_last_row_c[GC_PLAY_WIDTH]; private: static void newCreepBlock ( int x ); static inline int findFreeId ( ) { int n; for (n = 0; storeMap[n]; n++); return n; } static inline void allocateId ( int id ) { assert(!storeMap[id]); storeMap[id] = true; block_count++; } static inline void freeId ( int id ) { assert(storeMap[id]); storeMap[id] = false; block_count--; } static int next_pop_direction; static int last_flavor_a, second_to_last_flavor_a; static int last_flavor_c, second_to_last_flavor_c; static int last_row_a[GC_PLAY_WIDTH], second_to_last_row_a[GC_PLAY_WIDTH]; static int special_block_location; }; #endif crack-attack-1.1.14/src/CelebrationManager.cxx0000644000175000001440000001604510235763511020730 0ustar webbsterusers/* * CelebrationManager.cxx * Daniel Nelson - 10/30/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the celebration after a game. */ #include "Game.h" #include "MetaState.h" #include "Displayer.h" #include "CelebrationManager.h" #include "SparkleManager.h" #include "MessageManager.h" #include "WinRecord.h" #include "Random.h" #include "Score.h" #ifdef AUDIO_ENABLED #include "Music.h" #endif using namespace std; bool CelebrationManager::draw_game; GLfloat CelebrationManager::light_level; int CelebrationManager::spark_rate[DC_CSPARK_SOURCE_NUMBER]; int CelebrationManager::spark_color[DC_CSPARK_SOURCE_NUMBER]; float CelebrationManager::win_alpha; float CelebrationManager::win_scale; int CelebrationManager::win_flash1; int CelebrationManager::win_flash2; float CelebrationManager::loss_height; float CelebrationManager::loss_velocity; bool CelebrationManager::loss_rescale; int CelebrationManager::loss_bounce_count; void CelebrationManager::gameFinish ( ) { draw_game = true; light_level = 1.0f; #ifdef AUDIO_ENABLED Music::fadeout( 1000 ); #endif MessageManager::mode = MM_CELEBRATION; if (WinRecord::won) { win_alpha = 0.0f; win_scale = DC_STARTING_WIN_SCALE; MessageManager::readyMessage(MS_WINNER); } else { loss_height = DC_STARTING_LOSS_HEIGHT; loss_velocity = 0.0f; loss_bounce_count = DC_STARTING_BOUNCE_COUNT; if (WinRecord::isMatchFinished()) { MessageManager::readyMessage(MS_GAME_OVER); loss_rescale = true; } else { MessageManager::readyMessage(MS_LOSER); loss_rescale = false; } } } void CelebrationManager::celebrationFinish ( ) { draw_game = false; MessageManager::mode = MM_NORMAL; MessageManager::freeMessage(); } void CelebrationManager::timeStep ( ) { if (WinRecord::current_game == -1) return; // fade out the game if (Game::time_step < DC_CELEBRATION_FADE_TIME) light_level = (DC_CELEBRATION_FADE_TIME - Game::time_step) * (1.0f / (float) DC_CELEBRATION_FADE_TIME); else if (Game::time_step == DC_CELEBRATION_FADE_TIME) light_level = 0.0f; // signal that the user is now allowed to end the celebration else if (Game::time_step == DC_CELEBRATION_TIME) MetaState::celebrationComplete(); // draw the game until the fade out is complete and no light motes exist if (draw_game && !(Game::time_step < DC_CELEBRATION_FADE_TIME || SparkleManager::mote_count > 0)) draw_game = false; // handle the message behavior // if we won if (WinRecord::won) { // fade in if (Game::time_step < DC_WIN_FADE_TIME) { win_alpha += 1.0f / (float) DC_WIN_FADE_TIME; win_scale -= (DC_STARTING_WIN_SCALE - 1.0f) / (float) DC_WIN_FADE_TIME; // reach static state } else if (Game::time_step == DC_WIN_FADE_TIME) { win_alpha = 1.0f; win_scale = 1.0f; win_flash1 = DC_WIN_FLASH_1_TIME; win_flash2 = DC_WIN_FLASH_2_TIME; spark_rate[DC_CSPARK_SOURCE_NUMBER - 1] = DC_CSPARK_FULL_RATE; spark_color[DC_CSPARK_SOURCE_NUMBER - 1] = Random::number(DC_CSPARK_COLOR_NUMBER); for (int n = DC_CSPARK_SOURCE_NUMBER - 1; n--; ) { spark_rate[n] = DC_CSPARK_STARTING_RATE; spark_color[n] = Random::number(DC_CSPARK_COLOR_NUMBER); } #ifdef AUDIO_ENABLED Music::play_youwin(); #endif } else { // flash... if (win_flash1) win_flash1--; if (Random::chanceIn(DC_WIN_FLASH_1_CHANCE_IN)) if (win_flash1) { if (win_flash1 < DC_WIN_FLASH_1_TIME / 2) win_flash1 = (DC_WIN_FLASH_1_TIME / 2) - win_flash1; } else win_flash1 = DC_WIN_FLASH_1_TIME; if (win_flash2) win_flash2--; if (Random::chanceIn(DC_WIN_FLASH_2_CHANCE_IN)) if (win_flash2) { if (win_flash2 < DC_WIN_FLASH_2_TIME / 2) win_flash2 = (DC_WIN_FLASH_2_TIME / 2) - win_flash2; } else win_flash2 = DC_WIN_FLASH_2_TIME; // and, if you've been really good, spark if (WinRecord::isMatchFinished() && (!(MetaState::mode & CM_SOLO) || Score::topRank() || (MetaState::mode & CM_AI_HARD))) { // this algorithm is supposed to cause the sparks to be created in // spurts, sort of like a sputtering firework for (int n = DC_CSPARK_SOURCE_NUMBER; n--; ) { if (spark_rate[n] > DC_CSPARK_LOW_RATE) spark_rate[n] -= DC_CSPARK_QUICK_RATE_DROP; else if (spark_rate[n] > 0) spark_rate[n]--; if (Random::chanceIn(DC_CSPARK_BOOST_CHANCE_IN)) { spark_rate[n] += DC_CSPARK_RATE_BOOST; if (Random::chanceIn(DC_CSPARK_COLOR_CHANGE_CHANCE_IN)) spark_color[n] = Random::number(DC_CSPARK_COLOR_NUMBER); } if (Random::number(DC_CSPARK_FULL_RATE) < spark_rate[n]) SparkleManager::createCelebrationSpark(n, spark_color[n]); } } } // if we lost } else { // drop the sign if (loss_bounce_count != DC_FINAL_BOUNCE_COUNT - 1) { loss_height += loss_velocity; loss_velocity += -DC_LOSS_GRAVITY - DC_LOSS_DRAG * loss_velocity; // if we've hit bottom if (loss_height < 0.0f) { // if it's the last bounce if (loss_bounce_count == DC_FINAL_BOUNCE_COUNT) { loss_bounce_count--; loss_velocity = 0.0f; loss_height = 0.0f; #ifdef AUDIO_ENABLED Music::play_gameover(); #endif // Not sure if this line should be here. It seems to break up // many other parts of the program. Doing this allows any button // to cause the game to return to the UI after the game-over // sign has finished bouncing. If you find any problems with this // line, remove it immediately. //MetaState::state = MS_GAME_OVER_ANY_KEY_WAIT; // otherwise, bounce } else { // near the final bounce, reduce the elasticity if (loss_velocity > -DC_LOSS_MIN_VELOCITY) { loss_bounce_count--; loss_velocity = -DC_LOSS_END_BOUNCE_ELASTICITY * loss_bounce_count * loss_velocity; loss_height = -loss_height; } else { loss_height = -loss_height; loss_velocity = -DC_LOSS_BOUNCE_ELASTICITY * loss_velocity; } } } } } } crack-attack-1.1.14/src/obj_garbage_thick_edge.cxx0000644000175000001440000000474710231337750021602 0ustar webbsterusers/* * garbage_thick_edge.cxx * Daniel Nelson - 9/1/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates a display list for the edge of thick garbage. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::garbage_thick_edge_list; void Displayer::generateGarbageThickEdgeList ( ) { garbage_thick_edge_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glNewList(garbage_thick_edge_list, GL_COMPILE); GLfloat vertices_0[3 * 12] = { 1.0f, -1.0f, -1.0, -1.0f, -1.0f, -1.0, 1.0f, 0.8, -1.0, -1.0f, 0.8, -1.0, 1.0f, 1.0, -0.8, -1.0f, 1.0, -0.8, 1.0f, 1.0, 0.8, -1.0f, 1.0, 0.8, 1.0f, 0.8, 1.0, -1.0f, 0.8, 1.0, 1.0f, -1.0f, 1.0, -1.0f, -1.0f, 1.0 }; GLfloat normals_0[3 * 12] = { 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; GLfloat tex_coords_0[3 * 12]; for (int n = 3 * 12; n--; ) tex_coords_0[n] = vertices_0[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 12); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/Game.h0000644000175000001440000004103710235745436015511 0ustar webbsterusers/* * Game.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef GAME_H #define GAME_H #include #include #include #include #include #include #include #ifdef __MINGW32__ # include #endif #include #include #include "glext.h" #ifdef HAVE_CONFIG_H # undef BR_PTHREAD # include "config.h" #endif #include "Mode.h" using namespace std; // null #define null (0) // no IEEE super pi #define PI (3.14159265358979323846f) #define SQRT_3 (1.73205080756887729352f) // the name #define GC_NAME "Crack Attack!" #define GC_BINARY "crack-attack" #define GC_VERSION "1.1.14" // startup message #define GC_MESSAGE GC_NAME " v" GC_VERSION "\n" // directory delimiter #ifndef _WIN32 # define GC_DD "/" #else # define GC_DD "\\" #endif // file constants #ifndef _WIN32 # ifndef DATA_DIRECTORY # define GC_DATA_DIRECTORY(x) "." GC_DD "data/" x # else # define GC_DATA_DIRECTORY(x) DATA_DIRECTORY x # endif # define GC_LOCAL_DATA_DIRECTORY GC_DD "." GC_BINARY GC_DD # define GC_BINARY_LOCATION BINARY_DIRECTORY GC_DD GC_BINARY #else # define GC_DATA_DIRECTORY(x) ".." GC_DD "data" GC_DD x # define GC_LOCAL_DATA_DIRECTORY ".." GC_DD "localdata" GC_DD # define GC_BINARY_LOCATION GC_BINARY #endif #ifdef ENABLE_BINRELOC # undef GC_DATA_DIRECTORY # undef GC_BINARY_LOCATION # include "prefix.h" # define GC_DATA_DIRECTORY_INTER br_strcat(DATADIR, GC_DD GC_BINARY GC_DD) # define GC_DATA_DIRECTORY(x) br_strcat(GC_DATA_DIRECTORY_INTER, x) # define GC_BINARY_LOCATION br_strcat(BINDIR, GC_DD GC_BINARY) #endif #define GC_GARBAGE_TEX_FILE_NAME_BASE "garbage_flavor" #define GC_GARBAGE_TEX_NUMBER_DIGITS (3) #define GC_NUMBER_STANDARD_GARBAGE_TEX (6) #define GC_GARBAGE_TEX_MAX_NUMBER (1000) #define GC_GARBAGE_NET_TEX_FILE_NAME GC_GARBAGE_TEX_FILE_NAME_BASE \ "_net.tga" #define GC_GARBAGE_MY_TEX_FILE_NAME GC_GARBAGE_TEX_FILE_NAME_BASE \ "_my.tga" #define GC_LOGO_TEX_FILE_NAME GC_DATA_DIRECTORY("logo.tga") #define GC_X_LOGO_TEX_FILE_NAME GC_DATA_DIRECTORY("logo_x.tga") #define GC_GARBAGE_LOGO_TEX_FILE_NAME GC_DATA_DIRECTORY(\ GC_GARBAGE_TEX_FILE_NAME_BASE \ "_logo.tga") #define GC_GARBAGE_X_LOGO_TEX_FILE_NAME GC_DATA_DIRECTORY(\ GC_GARBAGE_TEX_FILE_NAME_BASE \ "_logo_x.tga") #define GC_COUNT_DOWN_GO_TEX_FILE_NAME GC_DATA_DIRECTORY("count_down_go.tga") #define GC_COUNT_DOWN_1_TEX_FILE_NAME GC_DATA_DIRECTORY("count_down_1.tga") #define GC_COUNT_DOWN_2_TEX_FILE_NAME GC_DATA_DIRECTORY("count_down_2.tga") #define GC_COUNT_DOWN_3_TEX_FILE_NAME GC_DATA_DIRECTORY("count_down_3.tga") #define GC_ANYKEY_TEX_FILE_NAME GC_DATA_DIRECTORY("message_anykey.tga") #define GC_WAITING_TEX_FILE_NAME GC_DATA_DIRECTORY("message_waiting.tga") #define GC_PAUSED_TEX_FILE_NAME GC_DATA_DIRECTORY("message_paused.tga") #define GC_WINNER_TEX_FILE_NAME GC_DATA_DIRECTORY("message_winner.tga") #define GC_LOSER_TEX_FILE_NAME GC_DATA_DIRECTORY("message_loser.tga") #define GC_GAME_OVER_TEX_FILE_NAME GC_DATA_DIRECTORY(\ "message_game_over.tga") #define GC_X_REC_FILE_NAME "score_record_x" #define GC_REC_FILE_NAME "score_record" #define GC_MULT_FILE_NAME "multiplier_record" #define GC_DEFAULT_REC_FILE_NAME GC_DATA_DIRECTORY("default_record") #define GC_DEFAULT_MULT_FILE_NAME GC_DATA_DIRECTORY("default_multiplier") // random angle tables' size; must be power of two #define GC_SIZE_RANDOM_ANGLE_TABLE (256) // games per match #define GC_GAMES_PER_MATCH (3) // the play area dimensions; GC_SAFE_HEIGHT - 1 is the board height #define GC_PLAY_WIDTH (6) #define GC_PLAY_HEIGHT (45) #define GC_SAFE_HEIGHT (13) #define GC_GRID_SIZE (GC_PLAY_WIDTH * GC_PLAY_HEIGHT) // object stores #define GC_BLOCK_STORE_SIZE (GC_GRID_SIZE) #define GC_GARBAGE_STORE_SIZE (2 * GC_PLAY_HEIGHT) #define GC_COMBO_TABULATOR_STORE_SIZE (8) #define GC_GARBAGE_QUEUE_SIZE (8) // time steps per second #define GC_STEPS_PER_SECOND (50) // milliseconds per time step #define GC_TIME_STEP_PERIOD (1000 / GC_STEPS_PER_SECOND) // number of subdivisions per grid location #define GC_STEPS_PER_GRID (60) // names #define GC_PLAYER_NAME_LENGTH (256) #define GC_DEFAULT_PLAYER_NAME "NamelessOne" // velocity of falling; must be a factor of GC_STEPS_PER_GRID #define GC_FALL_VELOCITY (20) // velocity and time length of swapping #define GC_SWAP_VELOCITY (10) #define GC_SWAP_DELAY (GC_STEPS_PER_GRID / GC_SWAP_VELOCITY) // velocity of creep #define GC_CREEP_DELAY (1200) #define GC_CREEP_ADVANCE_TIMER_STEP GC_CREEP_DELAY #define GC_CREEP_TIMER_STEP_INCREMENT (20) #define GC_CREEP_INITIAL_TIMER_STEP GC_CREEP_TIMER_STEP_INCREMENT #define GC_CREEP_MAX_TIMER_STEP (2400) #define GC_CREEP_ADVANCE_VELOCITY (3) #define GC_CREEP_INCREMENT_DELAY (10 * GC_STEPS_PER_SECOND) // delay between safe height violation and loss #define GC_LOSS_DELAY (7 * GC_STEPS_PER_SECOND) #define GC_LOSS_DELAY_ELIMINATION (1 * GC_STEPS_PER_SECOND) // time length between moves #define GC_MOVE_DELAY (6) // time length of block dying #define GC_DYING_DELAY (90) // time length of hanging #define GC_HANG_DELAY (3) // time length until popping, between popping, and after popping #define GC_INTERNAL_POP_DELAY (15) #define GC_INITIAL_POP_DELAY (50 + GC_INTERNAL_POP_DELAY) #define GC_FINAL_POP_DELAY (50) // minimum length of a elimination pattern #define GC_MIN_PATTERN_LENGTH (3) // chance of a creep row having a special block #define GC_NO_SPECIAL_BLOCK_CHANCE_IN (3) #define GC_X_NO_SPECIAL_BLOCK_CHANCE_IN (10) // chance of garbage shattering to garbage #define GC_GARBAGE_TO_GARBAGE_SHATTER (2) // time length before garbage falls #define GC_AVERAGE_GARBAGE_DROP_DELAY (300) #define GC_SPREAD_GARBAGE_DROP_DELAY (40) // time length of the introduction pause; should be multiple of 3 #define GC_START_PAUSE_DELAY (150) // maximum height of a garbage block #define GC_MAX_GARBAGE_HEIGHT (11) // score constants #define GC_MIN_PATTERN_SCORE (2) #define GC_GRAY_SCORE (3) #define GC_NUMBER_DIGITS (7) #define GC_MIN_NUMBER_DIGITS_DISPLAYED (4) #define GC_MAX_SCORE_INCREMENT_DELAY (12) #define GC_MIN_SCORE_INCREMENT_DELAY (1) #define GC_SCORE_DELAY_SLOPE (2) #define GC_SCORE_REC_LENGTH (30) #define GC_SCORE_DEFAULT_TOP_SCORE (600) #define GC_SCORE_REC_DEFAULT_NAME "-----" #define GC_SCORE_MULT_LENGTH (10) // sine constants #define GC_SINE_TABLE_LENGTH (100) #define GC_SINE_TABLE_LOWER_BOUND (-PI / 2.0f) #define GC_SINE_TABLE_STEP_WIDTH (PI / (GC_SINE_TABLE_LENGTH - 1)) // initial swapper location #define GC_INITIAL_SWAPPER_LOCATION_X (GC_PLAY_WIDTH / 2 - 1) #define GC_INITIAL_SWAPPER_LOCATION_Y (4) // extreme constants #define GC_INVISIBLE_MAX_ALPHA (330) #define GC_INVISIBLE_MIN_ALPHA (-20) #define GC_INVISIBLE_QUICK_DECAY_RATE (3) #define GC_INVISIBLE_PULSE_CHANCE_IN (30) #define GC_INVISIBLE_PULSE_STRENGTH (70) #define GC_CRAZY_LONG_MODE_PERIOD (150) #define GC_CRAZY_SHORT_MODE_PERIOD (50) #define GC_MAX_WILD_NUMBER (3) #define GC_WILD_PERIOD (180) #define GC_WILD_POLYMORPH_PERIOD (60) #define GC_MAX_SPECIAL_COLOR_NUMBER (6) // control keys #define GC_LEFT_KEY ('a') #define GC_RIGHT_KEY ('d') #define GC_UP_KEY ('w') #define GC_DOWN_KEY ('s') #define GC_SWAP_KEY ('k') #define GC_ADVANCE_KEY ('l') #define GC_PAUSE_KEY ('p') // Constants for the game window height and width. #define GC_RESOLUTION_0 (400) #define GC_RESOLUTION_1 (570) #define GC_RESOLUTION_2 (680) #define GC_RESOLUTION_3 (970) #define GC_RESOLUTION_4 (1170) // other crap #ifndef max # define max(a, b) ((a) > (b) ? (a) : (b)) #endif // insure that our communication int is the same length on all machines #if (INT_MAX == 2147483647) typedef unsigned int uint32; #else typedef unsigned short uint32; #endif // debug #ifndef NDEBUG # include # ifndef _WIN32 # define COLOR(n) "\33[1;" << (n) << "m" # define NOCOLOR "\33[m" # else # define COLOR(n) "" # define NOCOLOR "" # endif # define DOT(n) { cerr << COLOR(37 - n) \ << "." NOCOLOR << flush; } # define DUMP(a) { cerr << COLOR(32) << "Dump: " \ __FILE__ ":" << __LINE__ << ": " \ NOCOLOR #a \ " = " << (a) << endl; } # define PERIODIC_DUMP(a, b) { if (!(Game::time_step % a)) \ cerr << COLOR(32) << "Dump: " \ __FILE__ ":" << __LINE__ << ": " \ NOCOLOR #b \ " = " << (b) << endl; } # define MESSAGE(a) { cerr << COLOR(33) << "Mesg: " \ __FILE__ ":" << __LINE__ << ": " \ NOCOLOR << a << endl; } # ifndef _WIN32 # define MARK() { cerr << COLOR(35) << "Mark: " \ __FILE__ ":" << __LINE__ << ": " \ << __PRETTY_FUNCTION__ << NOCOLOR \ << endl; } # else # define MARK() { cerr << COLOR(35) << "Mark: " \ __FILE__ ":" << __LINE__ << ":" \ NOCOLOR << endl; } # endif # define ENDL() { cerr << COLOR(34) << "Endl: " \ __FILE__ ":" << __LINE__ << ":" \ NOCOLOR << endl; } # define LOG(a) { ofstream log("log", ios::app); \ log << "Log: " __FILE__ ":" \ << __LINE__ << ": " << a \ << endl; } #else # define DOT(n) ((void) 0) # define DUMP(a) ((void) 0) # define PERIODIC_DUMP(a, b) ((void) 0) # define MESSAGE(a) ((void) 0) # define MARK() ((void) 0) # define ENDL() ((void) 0) # define LOG(a) ((void) 0) #endif // fix bad Visual C++ scoping #ifdef _WIN32 # define for if (false) { } else for #endif // game states // Playing. #define GS_NORMAL (1 << 0) // Normal playing, but we're paused. #define GS_PAUSED (1 << 1) // Signals a local unpausing to opponent; used only in communication signals. #define GS_UNPAUSED (1 << 2) // Normal playing, but we're paused because we've gotten ahead of our opponent; // most likely due to a pause. #define GS_SYNC_WAIT (1 << 3) // We've lost, but we haven't heard confirmation from opponent; play continues. #define GS_MAY_HAVE_LOST (1 << 4) // Opponent lost; we've received the message and it predates our loss; play // continues until level lights reach minimum. #define GS_WON (1 << 5) // We've lost and opponent confirms it; play continues until level lights reach // minimum. #define GS_LOST (1 << 6) // We've won but we can't quite yet cause we must confirm our opponent's loss. #define GS_MUST_CONFIRM_LOSS (1 << 7) // We've confirmed our opponent's loss, but we have to wait a bit yet until // he receives it. #define GS_CONFIRMATION_HOLD (1 << 8) // The level lights signaled it's time to end play. Now we must simply complete // the current time step. #define GS_END_PLAY (1 << 9) // Used only for communication. The match has been conceded. #define GS_CONCESSION (1 << 10) // flavor of blocks; special color blocks must be last; wild and then gray must // be directly after normal flavors; here to prevent header entanglements; // the appearance chance of the various flavors can be found in // BlockManager::newCreepBlock() #define BF_NORMAL_1 ( 0) #define BF_NORMAL_2 ( 1) #define BF_NORMAL_3 ( 2) #define BF_NORMAL_4 ( 3) #define BF_NORMAL_5 ( 4) #define BF_WILD ( 5) #define BF_GRAY ( 6) #define BF_BLACK ( 7) #define BF_WHITE ( 8) #define BF_SPECIAL_COLOR_1 ( 9) #define BF_SPECIAL_COLOR_2 (10) #define BF_SPECIAL_COLOR_3 (11) #define BF_SPECIAL_COLOR_4 (12) #define BF_SPECIAL_COLOR_5 (13) #define BF_NUMBER_NORMAL (BF_NORMAL_5 + 1) #define BF_NUMBER (BF_SPECIAL_COLOR_5 + 1) #define BF_NUMBER_SPECIAL (BF_NUMBER - (BF_GRAY + 1)) #define BF_FINAL_GRAY_SPECIAL (BF_WHITE) /* static */ class Game { public: static void initialize ( ); static void gameStart ( ); static void gameFinish ( ); static void cleanUp ( ); static void loss ( ); static void lossConfirmation ( ); static void aiPlayerLoss ( ); static void won ( ); static void netSignalPause ( ); static void netSignalUnpause ( ); static void syncPause ( int delay ); static void concession ( ); static void idlePlay ( ); static void idleMeta ( ); static inline void go ( ) { previous_time = glutGet((GLenum) GLUT_ELAPSED_TIME); } static inline float sqrt ( float x ) /* * An OK approximation of sqrt() on [0, 1] which is correct at the boundaries. * Since all I really want is the vague shape of sqrt() and perfection at 0 * and 1, this'll work perfectly. * * Generated by minimizing int_0^1{dx (sqrt{x} - a x + (1 - a) x)^2}. */ { return ((27.0f / 14.0f) - (13.0f / 14.0f) * x) * x; } static int state; static int time_step; static int awaking_count; static int dying_count; static int dying_count_2; private: static void buttonPause ( ); static void syncUnpause ( ); static int previous_time; static int remaining_time; static bool button_down_pause; static bool step_play; static int sync_wait; static double lastframe; }; #endif crack-attack-1.1.14/src/ScoreRecordManager.h0000644000175000001440000000441710231337750020336 0ustar webbsterusers/* * ScoreRecordManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SCORERECORDMANAGER_H #define SCORERECORDMANAGER_H #include #include "glext.h" using namespace std; #include "WinRecord.h" #include "Displayer.h" #include "Score.h" /* static */ class ScoreRecordManager { public: static void initialize ( ); static void gameFinish_inline_split_ ( ); static void timeStep_inline_split_ ( ); static inline void gameStart ( ) { if (!(MetaState::mode & CM_SOLO)) return; glDeleteTextures(1, &Displayer::score_to_beat_texture); } static inline void gameFinish ( ) { if (!(MetaState::mode & CM_SOLO) || (MetaState::mode & CM_AI)) return; if (!WinRecord::won) return; gameFinish_inline_split_(); } static inline void timeStep ( ) { if (!(MetaState::mode & CM_SOLO)) return; if (!WinRecord::won) return; if (Game::time_step < DC_WIN_FADE_TIME) return; timeStep_inline_split_(); } static inline GLubyte *chooseTexture ( int rank ) { if (rank > Score::player_rank) return Displayer::record_texture_data[rank - 1]; if (rank < Score::player_rank) return Displayer::record_texture_data[rank]; return Displayer::player_rank_texture_data; } static int top_rank; static int top_texture; static GLfloat offset; static GLfloat velocity; static bool spring_active; static bool control_active; static bool ignore_up; static bool ignore_down; }; #endif crack-attack-1.1.14/src/Grid.h0000644000175000001440000001412210234000015015470 0ustar webbsterusers/* * Grid.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef GRID_H #define GRID_H #include using namespace std; #include "BlockManager.h" #include "GarbageManager.h" #include "LevelLights.h" // grid element states #define GR_EMPTY (1 << 0) #define GR_BLOCK (1 << 1) #define GR_GARBAGE (1 << 2) #define GR_FALLING (1 << 3) #define GR_IMMUTABLE (1 << 4) #define GR_SHATTERING (1 << 5) #define GR_HANGING (1 << 6) // pattern types #define PT_HORIZONTAL (1 << 0) #define PT_VERTICAL (1 << 1) class Block; class Garbage; class ComboTabulator; class CheckRegistryElement { public: bool mark; ComboTabulator *combo; }; class GridElement { public: int state; int resident_type; void *resident; }; /* static */ class Grid { public: static void gameStart ( ); static void timeStep ( ); static bool shiftGridUp ( ); static inline void dump ( ) { cout << '\n'; for (int y = GC_PLAY_HEIGHT; y--; ) { for (int x = 0; x < GC_PLAY_WIDTH; x++) switch (grid[x][y].state) { case GR_EMPTY: cout << ' '; break; case GR_BLOCK: cout << 'B'; break; case GR_GARBAGE: cout << '@'; break; case GR_FALLING: cout << '*'; break; case GR_IMMUTABLE: cout << '#'; break; case GR_SHATTERING: cout << 'X'; break; case GR_HANGING: cout << '+'; break; default: cout << '!'; break; } cout << '\n'; } cout << endl; for (int n = 0; n < GC_PLAY_WIDTH; n++) cout << blockAt(n, 0).state << endl; } static inline int stateAt ( int x, int y ) { return grid[x][y].state; } static inline int residentTypeAt ( int x, int y ) { return grid[x][y].resident_type; } static inline Block &blockAt ( int x, int y ) { assert(grid[x][y].resident_type == GR_BLOCK); return *((Block *) grid[x][y].resident); } static inline Garbage &garbageAt ( int x, int y ) { #ifndef NDEBUG if (!(grid[x][y].resident_type == GR_GARBAGE)) { dump(); DUMP(x); DUMP(y); DUMP(grid[x][y].state); DUMP(grid[x][y].resident_type); DUMP(top_occupied_row); DUMP(top_effective_row); } #endif assert(grid[x][y].resident_type == GR_GARBAGE); assert(y < GC_PLAY_HEIGHT); return *((Garbage *) grid[x][y].resident); } static inline int flavorAt ( int x, int y ) { assert(grid[x][y].state == GR_BLOCK); return ((Block *) grid[x][y].resident)->flavor; } static inline bool matchAt ( int x, int y, Block &block ) { assert(grid[x][y].state == GR_BLOCK); return BlockManager::flavorMatch(block, *(Block *) grid[x][y].resident); } static inline void changeState ( int x, int y, void *resident, int state ) { assert(grid[x][y].resident == resident); grid[x][y].state = state; } static inline void addBlock ( int x, int y, Block *resident, int state ) { assert(x < GC_PLAY_WIDTH); assert(y < GC_PLAY_HEIGHT); assert(grid[x][y].state & GR_EMPTY); grid[x][y].resident = resident; grid[x][y].resident_type = GR_BLOCK; grid[x][y].state = state; } static inline void addGarbage ( int x, int y, Garbage *resident, int state ) { assert(grid[x][y].state & GR_EMPTY); assert(x < GC_PLAY_WIDTH); assert(y < GC_PLAY_HEIGHT); grid[x][y].resident = resident; grid[x][y].resident_type = GR_GARBAGE; grid[x][y].state = state; } static inline void remove ( int x, int y, void *resident ) { assert(grid[x][y].resident == resident); grid[x][y].resident = null; grid[x][y].resident_type = GR_EMPTY; grid[x][y].state = GR_EMPTY; } static inline void requestEliminationCheck ( Block &block, ComboTabulator *combo = null ) { check_registry[block.id].mark = true; check_registry[block.id].combo = combo; check_count++; } static inline bool checkSafeHeightViolation ( ) { return top_effective_row >= GC_SAFE_HEIGHT - 1; } static inline void notifyImpact ( int y, int height ) { int impact_top = y + height - 1; if (top_effective_row < impact_top) { top_effective_row = impact_top; LevelLights::levelRaise(top_effective_row); } LevelLights::notifyImpact(y, height); } // top row with anything in it, including initially falling garbage; used to // determine garbage drop height; updated in Grid::timeStep() and // GarbageManager::newFallingGarbage() static int top_occupied_row; // top row that's holding blocks or landed garbage; used for level lights and // safe height violation; updated in Grid::timeStep() and Grid::notifyImpact() static int top_effective_row; static bool gray_shatter; private: static void handleEliminationCheckRequest ( Block &block, ComboTabulator *combo ); static void shatterGarbage_inline_split_ ( int x, int y, Garbage *due_to ); static inline void shatterGarbage ( int x, int y, Garbage *due_to = null ) { if (!(stateAt(x, y) & GR_GARBAGE)) return; shatterGarbage_inline_split_(x, y, due_to); } static GridElement grid[GC_PLAY_WIDTH][GC_PLAY_HEIGHT]; static CheckRegistryElement check_registry[GC_BLOCK_STORE_SIZE]; static int check_count; static int shatter_count; static int shatter_top; static int shatter_bottom; }; #endif crack-attack-1.1.14/src/X.cxx0000644000175000001440000001303510132356545015412 0ustar webbsterusers/* * X.cxx * Daniel Nelson - 11/11/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Holds the X-treme state. */ using namespace std; #include "Game.h" #include "Grid.h" #include "Block.h" #include "Swapper.h" #include "X.h" int X::reverse_controls; int X::invisible_swapper; int X::crazy_lights; int X::swapper_alpha; int X::light_mode; int X::light_alarm; int X::wild_count; Wild X::wilds[GC_MAX_WILD_NUMBER]; int X::special_color_count; const GLfloat X::light_level_map[6][3] = { { 0.0f, 1.0f, 1.0f }, { 0.5f, 0.5f, 1.0f }, { 1.0f, 0.0f, 1.0f }, { 1.0f, 0.5f, 0.5f }, { 1.0f, 1.0f, 0.0f }, { 0.5f, 1.0f, 0.5f } }; void X::gameStart ( ) { reverse_controls = 0; invisible_swapper = 0; swapper_alpha = GC_INVISIBLE_MAX_ALPHA; crazy_lights = 0; light_mode = -1; wild_count = 0; for (int n = GC_MAX_WILD_NUMBER; n--; ) wilds[n].active = false; special_color_count = 0; } void X::timeStep ( ) { // evolve the swapper's invisibleness if (invisible_swapper != 0 || swapper_alpha != GC_INVISIBLE_MAX_ALPHA) if (invisible_swapper != 0) { // drop the swapper's alpha if (swapper_alpha > 0) swapper_alpha -= GC_INVISIBLE_QUICK_DECAY_RATE; else if (swapper_alpha > GC_INVISIBLE_MIN_ALPHA) swapper_alpha--; // there is a chance the swapper's alpha will spike upward if (Random::chanceIn(GC_INVISIBLE_PULSE_CHANCE_IN)) { swapper_alpha += GC_INVISIBLE_PULSE_STRENGTH; if (swapper_alpha > GC_INVISIBLE_MAX_ALPHA) swapper_alpha = GC_INVISIBLE_MAX_ALPHA; } // raise the swapper's alpha back to normal } else swapper_alpha++; // evolve the wild blocks' state if (wild_count != 0) { int c = wild_count; for (int n = 0; c; n++) if (wilds[n].active) { c--; if (!--wilds[n].alarm) { // switch flavors wilds[n].alarm = GC_WILD_PERIOD; if (wilds[n].flavor == 0) wilds[n].flavor = BF_WILD; else { wilds[n].flavor--; if (wilds[n].block->y != 0) Grid::requestEliminationCheck(*wilds[n].block); } } } } // evolve the crazy lights if (crazy_lights != 0 || light_mode != -1) { // switch light colors if (!--light_alarm) { // if craziness continues if (crazy_lights != 0) { if (light_mode != 11) light_mode++; else light_mode = 0; // odd modes - non-white modes - are longer if (light_mode & (1 << 0)) light_alarm = GC_CRAZY_LONG_MODE_PERIOD; else light_alarm = GC_CRAZY_SHORT_MODE_PERIOD; // end craziness } else light_mode = -1; } } } void X::notifyImpact ( Garbage &garbage ) /* * Garbage has impacted. We must check to see if it's flavor has a special * effect. */ { // controls are reversed if (garbage.flavor == GF_REVERSE_CONTROLS) { reverse_controls++; if (invisible_swapper == 0) Swapper::color = 1; else Swapper::color = 3; // swapper becomes invisible } else if (garbage.flavor == GF_INVISIBLE_SWAPPER) { invisible_swapper++; if (reverse_controls == 0) Swapper::color = 2; else Swapper::color = 3; // lights go crazy } else if (garbage.flavor == GF_CRAZY_LIGHTS) { crazy_lights++; if (light_mode == -1) { light_mode = (Random::number(6) << 1) + 1; light_alarm = 150; } } } void X::notifyShatter ( Garbage &garbage ) /* * Garbage has shattered. We must check to see if this effects the special * effects which are occuring. */ { if (garbage.flavor == GF_REVERSE_CONTROLS) { reverse_controls--; if (reverse_controls == 0) if (invisible_swapper == 0) Swapper::color = 0; else Swapper::color = 2; } else if (garbage.flavor == GF_INVISIBLE_SWAPPER) { invisible_swapper--; if (invisible_swapper == 0) if (reverse_controls == 0) Swapper::color = 0; else Swapper::color = 1; } else if (garbage.flavor == GF_CRAZY_LIGHTS) crazy_lights--; } void X::modifyHeadlightColor ( GLfloat headlight_color[3] ) /* * Called by LightManager to allow us the opportunity to modify the headlight * color. */ { assert(crazyLights()); GLfloat fade = light_alarm * (2.0f / (float) GC_CRAZY_LONG_MODE_PERIOD); if (fade > 1.0f) fade = -1.0f + fade; else fade = 1.0f - fade; fade *= fade; headlight_color[0] = light_level_map[light_mode >> 1][0] + fade * (1.0f - light_level_map[light_mode >> 1][0]); headlight_color[1] = light_level_map[light_mode >> 1][1] + fade * (1.0f - light_level_map[light_mode >> 1][1]); headlight_color[2] = light_level_map[light_mode >> 1][2] + fade * (1.0f - light_level_map[light_mode >> 1][2]); } crack-attack-1.1.14/src/obj_level_lights.cxx0000644000175000001440000000371010230146633020507 0ustar webbsterusers/* * level_lights.cxx * Daniel Nelson - 10/13/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates the list for the level lights. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" // level lights' geometric constants #define LG_A (0.96f) #define LG_B (0.36f) #define LG_C (0.3f) #define LG_D (0.72f) GLuint Displayer::level_light_list; void Displayer::generateLevelLights ( ) { level_light_list = glGenLists(1); glNewList(level_light_list, GL_COMPILE); glBegin(GL_TRIANGLES); drawTriangle(0.0f, 0.0f, 0.0f + DC_EXTERNAL_OFFSET_Z, LG_D, 0.0f, LG_C + DC_EXTERNAL_OFFSET_Z, LG_A, LG_B, 0.0f + DC_EXTERNAL_OFFSET_Z); drawTriangle(LG_A, LG_B, 0.0f + DC_EXTERNAL_OFFSET_Z, LG_D, 0.0f, LG_C + DC_EXTERNAL_OFFSET_Z, LG_A, -LG_B, 0.0f + DC_EXTERNAL_OFFSET_Z); drawTriangle(0.0f, 0.0f, 0.0f + DC_EXTERNAL_OFFSET_Z, LG_A, -LG_B, 0.0f + DC_EXTERNAL_OFFSET_Z, LG_D, 0.0f, LG_C + DC_EXTERNAL_OFFSET_Z); glEnd(); glEndList(); } crack-attack-1.1.14/src/SparkleManager.cxx0000644000175000001440000002435510132356545020106 0ustar webbsterusers/* * SparkleManager.cxx * Daniel Nelson - 9/4/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles all the pretty sparkles! */ using namespace std; #include "Game.h" #include "Displayer.h" #include "MetaState.h" #include "Random.h" #include "SparkleManager.h" int SparkleManager::spark_count; Spark SparkleManager::sparks[DC_MAX_SPARK_NUMBER]; int SparkleManager::mote_count; Mote SparkleManager::motes[DC_MAX_MOTE_NUMBER]; const int SparkleManager::mote_colors[DC_NUMBER_MOTE_LEVELS] = { 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 3 }; const int SparkleManager::mote_light_colors[DC_NUMBER_MOTE_LEVELS] = { 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; const int SparkleManager::mote_types[DC_NUMBER_MOTE_LEVELS] = { MT_FOUR_POINTED_STAR, MT_FIVE_POINTED_STAR, MT_SIX_POINTED_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_SPECIAL_STAR, MT_MULTIPLIER_ONE_STAR, MT_MULTIPLIER_TWO_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR, MT_MULTIPLIER_THREE_STAR }; const GLfloat SparkleManager::mote_sizes[DC_NUMBER_MOTE_LEVELS] = { 2.0f, 2.8f, 2.8f, 3.4f, 3.4f, 3.4f, 3.4f, 3.4f, 3.4f, 3.4f, 3.4f, 4.0f, 2.6f, 3.5f, 3.7f, 3.9f, 4.1f, 4.3f, 4.5f, 4.7f, 4.9f, 5.1f }; const float SparkleManager::mote_inverse_masses[DC_NUMBER_MOTE_LEVELS] = { 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f / 1.4f, 1.0f / 1.8f, 1.0f / 2.2f, 1.0f / 2.6f, 1.0f / 3.0f, 1.0f / 3.4f, 1.0f / 3.8f, 1.0f / 4.2f }; void SparkleManager::initialize ( ) { spark_count = 0; for (int n = DC_MAX_SPARK_NUMBER; n--; ) sparks[n].active = false; mote_count = 0; for (int n = DC_MAX_MOTE_NUMBER; n--; ) motes[n].active = false; } void SparkleManager::createBlockDeathSpark ( int x, int y, int color, int n ) { while (n--) { if (spark_count == DC_MAX_SPARK_NUMBER) return; int n; for (n = 0; sparks[n].active; n++); Spark &spark = sparks[n]; spark_count++; spark.active = true; spark.x = x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X; spark.y = y * DC_GRID_ELEMENT_LENGTH + Displayer::play_offset_y; float v = DC_MIN_SPARK_VELOCITY + (Random::number() + Random::number()) * (0.5f * (DC_MAX_SPARK_VELOCITY - DC_MIN_SPARK_VELOCITY)); Random::deathSparkAngle(spark.v_x, spark.v_y); spark.v_x *= v; spark.v_y *= v; spark.a = Random::number(360); spark.v_a = DC_MIN_SPARK_ANGULAR_VELOCITY + (Random::number() + Random::number()) * (0.5f * (DC_MAX_SPARK_ANGULAR_VELOCITY - DC_MIN_SPARK_ANGULAR_VELOCITY)); if (Random::chanceIn2(2)) spark.v_a = -spark.v_a; switch (Random::number2(4)) { case 0: spark.size = DC_MIN_SPARK_SIZE; break; case 1: spark.size = DC_MIN_SPARK_SIZE + Random::number() * (1.0f - DC_MIN_SPARK_SIZE); break; default: spark.size = 1.0f; break; } spark.color = color; if (Random::chanceIn(DC_CHANCE_LONG_SPARK_LIFE_TIME)) spark.life_time = Random::number(10 * DC_SPREAD_SPARK_LIFE_TIME) + Random::number(10 * DC_SPREAD_SPARK_LIFE_TIME) + 10 * (DC_MEDIUM_SPARK_LIFE_TIME - DC_SPREAD_SPARK_LIFE_TIME); else spark.life_time = Random::number(DC_SPREAD_SPARK_LIFE_TIME) + Random::number(DC_SPREAD_SPARK_LIFE_TIME) + (DC_MEDIUM_SPARK_LIFE_TIME - DC_SPREAD_SPARK_LIFE_TIME); } } void SparkleManager::createCelebrationSpark ( int source, int color ) { if (spark_count == DC_MAX_SPARK_NUMBER) return; int n; for (n = 0; sparks[n].active; n++); Spark &spark = sparks[n]; spark_count++; spark.active = true; float v; if (source != 4) { Random::celebrationSpark1Angle(spark.v_x, spark.v_y); v = DC_MIN_CSPARK_VELOCITY + DC_SPREAD_CSPARK_VELOCITY * Random::number(); } else { Random::celebrationSpark2Angle(spark.v_x, spark.v_y); v = (2.0f * DC_MIN_CSPARK_VELOCITY) + (2.0f * DC_SPREAD_CSPARK_VELOCITY) * Random::number(); } spark.v_x *= v; spark.v_y *= v; switch (source) { case 0: if (MetaState::mode & CM_SOLO) { spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_1_SOLO_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_1_SOLO_OFFSET_Y; } else { spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_1_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_1_OFFSET_Y; } break; case 1: spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_2_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_2_OFFSET_Y; break; case 2: if (MetaState::mode & CM_SOLO) { spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_3_SOLO_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_3_SOLO_OFFSET_Y; } else { spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_3_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_3_OFFSET_Y; } spark.v_x = -spark.v_x; break; case 3: spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_4_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_4_OFFSET_Y; spark.v_x = -spark.v_x; break; case 4: if (MetaState::mode & CM_SOLO) { spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_5_SOLO_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_5_SOLO_OFFSET_Y; } else { spark.x = DC_PLAY_OFFSET_X + DC_SOURCE_5_OFFSET_X; spark.y = DC_PLAY_OFFSET_Y + DC_SOURCE_5_OFFSET_Y; } break; } spark.a = Random::number(360); spark.v_a = DC_MIN_SPARK_ANGULAR_VELOCITY + (Random::number() + Random::number()) * (0.5f * (DC_MAX_SPARK_ANGULAR_VELOCITY - DC_MIN_SPARK_ANGULAR_VELOCITY)); if (Random::chanceIn2(2)) spark.v_a = -spark.v_a; if (Random::chanceIn(3)) spark.size = DC_MIN_SPARK_SIZE + Random::number() * (1.0f - DC_MIN_SPARK_SIZE); else spark.size = DC_MIN_SPARK_SIZE; spark.color = color; if (Random::chanceIn(DC_CHANCE_LONG_SPARK_LIFE_TIME)) spark.life_time = Random::number(10 * DC_SPREAD_SPARK_LIFE_TIME) + Random::number(10 * DC_SPREAD_SPARK_LIFE_TIME) + 10 * (DC_MEDIUM_SPARK_LIFE_TIME - DC_SPREAD_SPARK_LIFE_TIME); else spark.life_time = Random::number(DC_SPREAD_SPARK_LIFE_TIME) + Random::number(DC_SPREAD_SPARK_LIFE_TIME) + (DC_MEDIUM_SPARK_LIFE_TIME - DC_SPREAD_SPARK_LIFE_TIME); } void SparkleManager::createRewardMote ( int x, int y, int level, int sibling_number ) { if (mote_count == DC_MAX_MOTE_NUMBER) return; int n; for (n = 0; motes[n].active; n++); Mote &mote = motes[n]; if (n == 0) glEnable(GL_LIGHT1); mote_count++; mote.active = true; if (level >= DC_NUMBER_MOTE_LEVELS) level = DC_NUMBER_MOTE_LEVELS - 1; mote.color = mote_colors[level]; mote.light_color = mote_light_colors[level]; mote.type = mote_types[level]; mote.size = mote_sizes[level]; mote.inverse_mass = mote_inverse_masses[level]; mote.x = x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X - (DC_GRID_ELEMENT_LENGTH / 2.0f) + (float) Random::number(20) * ((float) DC_GRID_ELEMENT_LENGTH / 20.0f); mote.y = y * DC_GRID_ELEMENT_LENGTH + Displayer::play_offset_y - (DC_GRID_ELEMENT_LENGTH / 2.0f) + (float) Random::number(20) * ((float) DC_GRID_ELEMENT_LENGTH / 20.0f); // slow down big ones float v = (DC_MEDIUM_MOTE_VELOCITY - DC_SPREAD_MOTE_VELOCITY + Random::number() * (2.0f * DC_SPREAD_MOTE_VELOCITY)) * mote.inverse_mass; if (x < GC_PLAY_WIDTH / 2) mote.v_x = -0.707107 * v; else mote.v_x = 0.707107 * v; mote.v_y = -0.707107 * v; mote.a = mote.initial_a = Random::number(360); mote.v_a = (DC_MEDIUM_MOTE_ANGULAR_VELOCITY - DC_SPREAD_MOTE_ANGULAR_VELOCITY + Random::number() * (2.0f * DC_SPREAD_MOTE_ANGULAR_VELOCITY)) * mote.inverse_mass; if (Random::chanceIn2(2)) mote.v_a = -mote.v_a; mote.life_time = 0; mote.sibling_delay = sibling_number * DC_MULTI_MOTE_FIRE_DELAY; mote.associated_light = -1; } void SparkleManager::timeStep ( ) { int c = spark_count; for (int n = 0; c; n++) if (sparks[n].active) { Spark &spark = sparks[n]; c--; if (--spark.life_time == 0) { spark.active = false; spark_count--; } else { spark.x += spark.v_x; spark.y += spark.v_y; spark.a += spark.v_a; spark.v_y -= DC_SPARK_GRAVITY + DC_SPARK_DRAG * spark.v_y; spark.v_x -= DC_SPARK_DRAG * spark.v_x; } } c = mote_count; for (int n = 0; c; n++) if (motes[n].active) { Mote &mote = motes[n]; c--; if (mote.life_time >= 0) if (++mote.life_time - mote.sibling_delay < GC_DYING_DELAY) { mote.a += mote.v_a; if (mote.life_time <= GC_DYING_DELAY) mote.brightness = DC_MAX_MOTE_LIGHT_BRIGHTNESS * mote.life_time * (1.0f / (float) GC_DYING_DELAY); continue; } else mote.life_time = -1; else if (mote.color > 0 && mote.color < DC_FIRST_SPECIAL_MOTE_COLOR) mote.life_time--; mote.y += mote.v_y; if (mote.y > DC_PLAY_HEIGHT + mote.size * (DC_SPARKLE_LENGTH / 2.0f)) { mote.active = false; mote_count--; continue; } mote.x += mote.v_x; mote.a += mote.v_a; mote.v_y += mote.inverse_mass * DC_MOTE_UPWARD_FORCE - DC_MOTE_DRAG * mote.v_y; mote.v_x -= mote.inverse_mass * DC_MOTE_CENTER_SPRING * mote.x + DC_MOTE_DRAG * mote.v_x; mote.v_a -= mote.inverse_mass * DC_MOTE_TWIST_SPRING * (mote.a - mote.initial_a); } } crack-attack-1.1.14/src/obj_block.cxx0000644000175000001440000015261610231337750017135 0ustar webbsterusers/* * block.cxx * Daniel Nelson - 8/31/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * OpenGL code generated by AC3D plug-in * Created by Wade Lutgen October 1999 * * Generates the block's two display lists. */ #include #include "glext.h" #include using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::block_list; GLuint Displayer::small_block_list; GLuint Displayer::special_block_list; GLuint Displayer::special_block_lightmap; void Displayer::generateBlockDisplayList ( ) { glEnableClientState(GL_VERTEX_ARRAY); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glEnableClientState(GL_NORMAL_ARRAY); block_list = glGenLists(1); glNewList(block_list, GL_COMPILE); GLfloat vertices_high[1512] = { -0.774253, -0.707686, -0.903997, -0.774253, 0.707686, -0.903997, -0.111631, 0.000000, -0.986824, -0.800000, -0.800000, -0.800000, -0.800000, 0.800000, -0.800000, -0.774253, 0.707686, -0.903997, -0.800000, -0.800000, -0.800000, -0.774253, 0.707686, -0.903997, -0.774253, -0.707686, -0.903997, -0.800000, 0.800000, -0.800000, 0.000000, 0.000000, -0.900000, -0.111631, 0.000000, -0.986824, -0.800000, 0.800000, -0.800000, -0.111631, 0.000000, -0.986824, -0.774253, 0.707686, -0.903997, 0.000000, 0.000000, -0.900000, -0.800000, -0.800000, -0.800000, -0.774253, -0.707686, -0.903997, 0.000000, 0.000000, -0.900000, -0.774253, -0.707686, -0.903997, -0.111631, 0.000000, -0.986824, -0.707686, 0.774253, -0.903997, 0.707686, 0.774253, -0.903997, 0.000000, 0.111631, -0.986824, -0.800000, 0.800000, -0.800000, 0.800000, 0.800000, -0.800000, 0.707686, 0.774253, -0.903997, -0.800000, 0.800000, -0.800000, 0.707686, 0.774253, -0.903997, -0.707686, 0.774253, -0.903997, 0.800000, 0.800000, -0.800000, 0.000000, 0.000000, -0.900000, 0.000000, 0.111631, -0.986824, 0.800000, 0.800000, -0.800000, 0.000000, 0.111631, -0.986824, 0.707686, 0.774253, -0.903997, 0.000000, 0.000000, -0.900000, -0.800000, 0.800000, -0.800000, -0.707686, 0.774253, -0.903997, 0.000000, 0.000000, -0.900000, -0.707686, 0.774253, -0.903997, 0.000000, 0.111631, -0.986824, 0.774253, 0.707686, -0.903997, 0.774253, -0.707686, -0.903997, 0.111631, 0.000000, -0.986824, 0.800000, 0.800000, -0.800000, 0.800000, -0.800000, -0.800000, 0.774253, -0.707686, -0.903997, 0.800000, 0.800000, -0.800000, 0.774253, -0.707686, -0.903997, 0.774253, 0.707686, -0.903997, 0.800000, -0.800000, -0.800000, 0.000000, 0.000000, -0.900000, 0.111631, 0.000000, -0.986824, 0.800000, -0.800000, -0.800000, 0.111631, 0.000000, -0.986824, 0.774253, -0.707686, -0.903997, 0.000000, 0.000000, -0.900000, 0.800000, 0.800000, -0.800000, 0.774253, 0.707686, -0.903997, 0.000000, 0.000000, -0.900000, 0.774253, 0.707686, -0.903997, 0.111631, 0.000000, -0.986824, 0.707686, -0.774253, -0.903997, -0.707686, -0.774253, -0.903997, 0.000000, -0.111631, -0.986824, 0.800000, -0.800000, -0.800000, -0.800000, -0.800000, -0.800000, -0.707686, -0.774253, -0.903997, 0.800000, -0.800000, -0.800000, -0.707686, -0.774253, -0.903997, 0.707686, -0.774253, -0.903997, -0.800000, -0.800000, -0.800000, 0.000000, 0.000000, -0.900000, 0.000000, -0.111631, -0.986824, -0.800000, -0.800000, -0.800000, 0.000000, -0.111631, -0.986824, -0.707686, -0.774253, -0.903997, 0.000000, 0.000000, -0.900000, 0.800000, -0.800000, -0.800000, 0.707686, -0.774253, -0.903997, 0.000000, 0.000000, -0.900000, 0.707686, -0.774253, -0.903997, 0.000000, -0.111631, -0.986824, 0.903997, 0.707686, 0.774253, 0.903997, -0.707686, 0.774253, 0.986824, 0.000000, 0.111631, 0.800000, 0.800000, 0.800000, 0.800000, -0.800000, 0.800000, 0.903997, -0.707686, 0.774253, 0.800000, 0.800000, 0.800000, 0.903997, -0.707686, 0.774253, 0.903997, 0.707686, 0.774253, 0.800000, -0.800000, 0.800000, 0.900000, 0.000000, 0.000000, 0.986824, 0.000000, 0.111631, 0.800000, -0.800000, 0.800000, 0.986824, 0.000000, 0.111631, 0.903997, -0.707686, 0.774253, 0.900000, 0.000000, 0.000000, 0.800000, 0.800000, 0.800000, 0.903997, 0.707686, 0.774253, 0.900000, 0.000000, 0.000000, 0.903997, 0.707686, 0.774253, 0.986824, 0.000000, 0.111631, 0.903997, -0.774253, 0.707686, 0.903997, -0.774253, -0.707686, 0.986824, -0.111631, 0.000000, 0.800000, -0.800000, 0.800000, 0.800000, -0.800000, -0.800000, 0.903997, -0.774253, -0.707686, 0.800000, -0.800000, 0.800000, 0.903997, -0.774253, -0.707686, 0.903997, -0.774253, 0.707686, 0.800000, -0.800000, -0.800000, 0.900000, 0.000000, 0.000000, 0.986824, -0.111631, 0.000000, 0.800000, -0.800000, -0.800000, 0.986824, -0.111631, 0.000000, 0.903997, -0.774253, -0.707686, 0.900000, 0.000000, 0.000000, 0.800000, -0.800000, 0.800000, 0.903997, -0.774253, 0.707686, 0.900000, 0.000000, 0.000000, 0.903997, -0.774253, 0.707686, 0.986824, -0.111631, 0.000000, 0.903997, -0.707686, -0.774253, 0.903997, 0.707686, -0.774253, 0.986824, 0.000000, -0.111631, 0.800000, -0.800000, -0.800000, 0.800000, 0.800000, -0.800000, 0.903997, 0.707686, -0.774253, 0.800000, -0.800000, -0.800000, 0.903997, 0.707686, -0.774253, 0.903997, -0.707686, -0.774253, 0.800000, 0.800000, -0.800000, 0.900000, 0.000000, 0.000000, 0.986824, 0.000000, -0.111631, 0.800000, 0.800000, -0.800000, 0.986824, 0.000000, -0.111631, 0.903997, 0.707686, -0.774253, 0.900000, 0.000000, 0.000000, 0.800000, -0.800000, -0.800000, 0.903997, -0.707686, -0.774253, 0.900000, 0.000000, 0.000000, 0.903997, -0.707686, -0.774253, 0.986824, 0.000000, -0.111631, 0.903997, 0.774253, -0.707686, 0.903997, 0.774253, 0.707686, 0.986824, 0.111631, 0.000000, 0.800000, 0.800000, -0.800000, 0.800000, 0.800000, 0.800000, 0.903997, 0.774253, 0.707686, 0.800000, 0.800000, -0.800000, 0.903997, 0.774253, 0.707686, 0.903997, 0.774253, -0.707686, 0.800000, 0.800000, 0.800000, 0.900000, 0.000000, 0.000000, 0.986824, 0.111631, 0.000000, 0.800000, 0.800000, 0.800000, 0.986824, 0.111631, 0.000000, 0.903997, 0.774253, 0.707686, 0.900000, 0.000000, 0.000000, 0.800000, 0.800000, -0.800000, 0.903997, 0.774253, -0.707686, 0.900000, 0.000000, 0.000000, 0.903997, 0.774253, -0.707686, 0.986824, 0.111631, 0.000000, 0.774253, -0.707686, 0.903997, 0.774253, 0.707686, 0.903997, 0.111631, 0.000000, 0.986824, 0.800000, -0.800000, 0.800000, 0.800000, 0.800000, 0.800000, 0.774253, 0.707686, 0.903997, 0.800000, -0.800000, 0.800000, 0.774253, 0.707686, 0.903997, 0.774253, -0.707686, 0.903997, 0.800000, 0.800000, 0.800000, 0.000000, 0.000000, 0.900000, 0.111631, 0.000000, 0.986824, 0.800000, 0.800000, 0.800000, 0.111631, 0.000000, 0.986824, 0.774253, 0.707686, 0.903997, 0.000000, 0.000000, 0.900000, 0.800000, -0.800000, 0.800000, 0.774253, -0.707686, 0.903997, 0.000000, 0.000000, 0.900000, 0.774253, -0.707686, 0.903997, 0.111631, 0.000000, 0.986824, 0.707686, 0.774253, 0.903997, -0.707686, 0.774253, 0.903997, 0.000000, 0.111631, 0.986824, 0.800000, 0.800000, 0.800000, -0.800000, 0.800000, 0.800000, -0.707686, 0.774253, 0.903997, 0.800000, 0.800000, 0.800000, -0.707686, 0.774253, 0.903997, 0.707686, 0.774253, 0.903997, -0.800000, 0.800000, 0.800000, 0.000000, 0.000000, 0.900000, 0.000000, 0.111631, 0.986824, -0.800000, 0.800000, 0.800000, 0.000000, 0.111631, 0.986824, -0.707686, 0.774253, 0.903997, 0.000000, 0.000000, 0.900000, 0.800000, 0.800000, 0.800000, 0.707686, 0.774253, 0.903997, 0.000000, 0.000000, 0.900000, 0.707686, 0.774253, 0.903997, 0.000000, 0.111631, 0.986824, -0.774253, 0.707686, 0.903997, -0.774253, -0.707686, 0.903997, -0.111631, 0.000000, 0.986824, -0.800000, 0.800000, 0.800000, -0.800000, -0.800000, 0.800000, -0.774253, -0.707686, 0.903997, -0.800000, 0.800000, 0.800000, -0.774253, -0.707686, 0.903997, -0.774253, 0.707686, 0.903997, -0.800000, -0.800000, 0.800000, 0.000000, 0.000000, 0.900000, -0.111631, 0.000000, 0.986824, -0.800000, -0.800000, 0.800000, -0.111631, 0.000000, 0.986824, -0.774253, -0.707686, 0.903997, 0.000000, 0.000000, 0.900000, -0.800000, 0.800000, 0.800000, -0.774253, 0.707686, 0.903997, 0.000000, 0.000000, 0.900000, -0.774253, 0.707686, 0.903997, -0.111631, 0.000000, 0.986824, -0.707686, -0.774253, 0.903997, 0.707686, -0.774253, 0.903997, 0.000000, -0.111631, 0.986824, -0.800000, -0.800000, 0.800000, 0.800000, -0.800000, 0.800000, 0.707686, -0.774253, 0.903997, -0.800000, -0.800000, 0.800000, 0.707686, -0.774253, 0.903997, -0.707686, -0.774253, 0.903997, 0.800000, -0.800000, 0.800000, 0.000000, 0.000000, 0.900000, 0.000000, -0.111631, 0.986824, 0.800000, -0.800000, 0.800000, 0.000000, -0.111631, 0.986824, 0.707686, -0.774253, 0.903997, 0.000000, 0.000000, 0.900000, -0.800000, -0.800000, 0.800000, -0.707686, -0.774253, 0.903997, 0.000000, 0.000000, 0.900000, -0.707686, -0.774253, 0.903997, 0.000000, -0.111631, 0.986824, -0.903997, -0.707686, 0.774253, -0.903997, 0.707686, 0.774253, -0.986824, 0.000000, 0.111631, -0.800000, -0.800000, 0.800000, -0.800000, 0.800000, 0.800000, -0.903997, 0.707686, 0.774253, -0.800000, -0.800000, 0.800000, -0.903997, 0.707686, 0.774253, -0.903997, -0.707686, 0.774253, -0.800000, 0.800000, 0.800000, -0.900000, 0.000000, 0.000000, -0.986824, 0.000000, 0.111631, -0.800000, 0.800000, 0.800000, -0.986824, 0.000000, 0.111631, -0.903997, 0.707686, 0.774253, -0.900000, 0.000000, 0.000000, -0.800000, -0.800000, 0.800000, -0.903997, -0.707686, 0.774253, -0.900000, 0.000000, 0.000000, -0.903997, -0.707686, 0.774253, -0.986824, 0.000000, 0.111631, -0.903997, 0.774253, 0.707686, -0.903997, 0.774253, -0.707686, -0.986824, 0.111631, 0.000000, -0.800000, 0.800000, 0.800000, -0.800000, 0.800000, -0.800000, -0.903997, 0.774253, -0.707686, -0.800000, 0.800000, 0.800000, -0.903997, 0.774253, -0.707686, -0.903997, 0.774253, 0.707686, -0.800000, 0.800000, -0.800000, -0.900000, 0.000000, 0.000000, -0.986824, 0.111631, 0.000000, -0.800000, 0.800000, -0.800000, -0.986824, 0.111631, 0.000000, -0.903997, 0.774253, -0.707686, -0.900000, 0.000000, 0.000000, -0.800000, 0.800000, 0.800000, -0.903997, 0.774253, 0.707686, -0.900000, 0.000000, 0.000000, -0.903997, 0.774253, 0.707686, -0.986824, 0.111631, 0.000000, -0.903997, 0.707686, -0.774253, -0.903997, -0.707686, -0.774253, -0.986824, 0.000000, -0.111631, -0.800000, 0.800000, -0.800000, -0.800000, -0.800000, -0.800000, -0.903997, -0.707686, -0.774253, -0.800000, 0.800000, -0.800000, -0.903997, -0.707686, -0.774253, -0.903997, 0.707686, -0.774253, -0.800000, -0.800000, -0.800000, -0.900000, 0.000000, 0.000000, -0.986824, 0.000000, -0.111631, -0.800000, -0.800000, -0.800000, -0.986824, 0.000000, -0.111631, -0.903997, -0.707686, -0.774253, -0.900000, 0.000000, 0.000000, -0.800000, 0.800000, -0.800000, -0.903997, 0.707686, -0.774253, -0.900000, 0.000000, 0.000000, -0.903997, 0.707686, -0.774253, -0.986824, 0.000000, -0.111631, -0.903997, -0.774253, -0.707686, -0.903997, -0.774253, 0.707686, -0.986824, -0.111631, 0.000000, -0.800000, -0.800000, -0.800000, -0.800000, -0.800000, 0.800000, -0.903997, -0.774253, 0.707686, -0.800000, -0.800000, -0.800000, -0.903997, -0.774253, 0.707686, -0.903997, -0.774253, -0.707686, -0.800000, -0.800000, 0.800000, -0.900000, 0.000000, 0.000000, -0.986824, -0.111631, 0.000000, -0.800000, -0.800000, 0.800000, -0.986824, -0.111631, 0.000000, -0.903997, -0.774253, 0.707686, -0.900000, 0.000000, 0.000000, -0.800000, -0.800000, -0.800000, -0.903997, -0.774253, -0.707686, -0.900000, 0.000000, 0.000000, -0.903997, -0.774253, -0.707686, -0.986824, -0.111631, 0.000000, -0.774253, 0.903997, -0.707686, -0.774253, 0.903997, 0.707686, -0.111631, 0.986824, 0.000000, -0.800000, 0.800000, -0.800000, -0.800000, 0.800000, 0.800000, -0.774253, 0.903997, 0.707686, -0.800000, 0.800000, -0.800000, -0.774253, 0.903997, 0.707686, -0.774253, 0.903997, -0.707686, -0.800000, 0.800000, 0.800000, 0.000000, 0.900000, 0.000000, -0.111631, 0.986824, 0.000000, -0.800000, 0.800000, 0.800000, -0.111631, 0.986824, 0.000000, -0.774253, 0.903997, 0.707686, 0.000000, 0.900000, 0.000000, -0.800000, 0.800000, -0.800000, -0.774253, 0.903997, -0.707686, 0.000000, 0.900000, 0.000000, -0.774253, 0.903997, -0.707686, -0.111631, 0.986824, 0.000000, -0.707686, 0.903997, 0.774253, 0.707686, 0.903997, 0.774253, 0.000000, 0.986824, 0.111631, -0.800000, 0.800000, 0.800000, 0.800000, 0.800000, 0.800000, 0.707686, 0.903997, 0.774253, -0.800000, 0.800000, 0.800000, 0.707686, 0.903997, 0.774253, -0.707686, 0.903997, 0.774253, 0.800000, 0.800000, 0.800000, 0.000000, 0.900000, 0.000000, 0.000000, 0.986824, 0.111631, 0.800000, 0.800000, 0.800000, 0.000000, 0.986824, 0.111631, 0.707686, 0.903997, 0.774253, 0.000000, 0.900000, 0.000000, -0.800000, 0.800000, 0.800000, -0.707686, 0.903997, 0.774253, 0.000000, 0.900000, 0.000000, -0.707686, 0.903997, 0.774253, 0.000000, 0.986824, 0.111631, 0.774253, 0.903997, 0.707686, 0.774253, 0.903997, -0.707686, 0.111631, 0.986824, 0.000000, 0.800000, 0.800000, 0.800000, 0.800000, 0.800000, -0.800000, 0.774253, 0.903997, -0.707686, 0.800000, 0.800000, 0.800000, 0.774253, 0.903997, -0.707686, 0.774253, 0.903997, 0.707686, 0.800000, 0.800000, -0.800000, 0.000000, 0.900000, 0.000000, 0.111631, 0.986824, 0.000000, 0.800000, 0.800000, -0.800000, 0.111631, 0.986824, 0.000000, 0.774253, 0.903997, -0.707686, 0.000000, 0.900000, 0.000000, 0.800000, 0.800000, 0.800000, 0.774253, 0.903997, 0.707686, 0.000000, 0.900000, 0.000000, 0.774253, 0.903997, 0.707686, 0.111631, 0.986824, 0.000000, 0.707686, 0.903997, -0.774253, -0.707686, 0.903997, -0.774253, 0.000000, 0.986824, -0.111631, 0.800000, 0.800000, -0.800000, -0.800000, 0.800000, -0.800000, -0.707686, 0.903997, -0.774253, 0.800000, 0.800000, -0.800000, -0.707686, 0.903997, -0.774253, 0.707686, 0.903997, -0.774253, -0.800000, 0.800000, -0.800000, 0.000000, 0.900000, 0.000000, 0.000000, 0.986824, -0.111631, -0.800000, 0.800000, -0.800000, 0.000000, 0.986824, -0.111631, -0.707686, 0.903997, -0.774253, 0.000000, 0.900000, 0.000000, 0.800000, 0.800000, -0.800000, 0.707686, 0.903997, -0.774253, 0.000000, 0.900000, 0.000000, 0.707686, 0.903997, -0.774253, 0.000000, 0.986824, -0.111631, -0.774253, -0.903997, 0.707686, -0.774253, -0.903997, -0.707686, -0.111631, -0.986824, 0.000000, -0.800000, -0.800000, 0.800000, -0.800000, -0.800000, -0.800000, -0.774253, -0.903997, -0.707686, -0.800000, -0.800000, 0.800000, -0.774253, -0.903997, -0.707686, -0.774253, -0.903997, 0.707686, -0.800000, -0.800000, -0.800000, 0.000000, -0.900000, 0.000000, -0.111631, -0.986824, 0.000000, -0.800000, -0.800000, -0.800000, -0.111631, -0.986824, 0.000000, -0.774253, -0.903997, -0.707686, 0.000000, -0.900000, 0.000000, -0.800000, -0.800000, 0.800000, -0.774253, -0.903997, 0.707686, 0.000000, -0.900000, 0.000000, -0.774253, -0.903997, 0.707686, -0.111631, -0.986824, 0.000000, -0.707686, -0.903997, -0.774253, 0.707686, -0.903997, -0.774253, 0.000000, -0.986824, -0.111631, -0.800000, -0.800000, -0.800000, 0.800000, -0.800000, -0.800000, 0.707686, -0.903997, -0.774253, -0.800000, -0.800000, -0.800000, 0.707686, -0.903997, -0.774253, -0.707686, -0.903997, -0.774253, 0.800000, -0.800000, -0.800000, 0.000000, -0.900000, 0.000000, 0.000000, -0.986824, -0.111631, 0.800000, -0.800000, -0.800000, 0.000000, -0.986824, -0.111631, 0.707686, -0.903997, -0.774253, 0.000000, -0.900000, 0.000000, -0.800000, -0.800000, -0.800000, -0.707686, -0.903997, -0.774253, 0.000000, -0.900000, 0.000000, -0.707686, -0.903997, -0.774253, 0.000000, -0.986824, -0.111631, 0.774253, -0.903997, -0.707686, 0.774253, -0.903997, 0.707686, 0.111631, -0.986824, 0.000000, 0.800000, -0.800000, -0.800000, 0.800000, -0.800000, 0.800000, 0.774253, -0.903997, 0.707686, 0.800000, -0.800000, -0.800000, 0.774253, -0.903997, 0.707686, 0.774253, -0.903997, -0.707686, 0.800000, -0.800000, 0.800000, 0.000000, -0.900000, 0.000000, 0.111631, -0.986824, 0.000000, 0.800000, -0.800000, 0.800000, 0.111631, -0.986824, 0.000000, 0.774253, -0.903997, 0.707686, 0.000000, -0.900000, 0.000000, 0.800000, -0.800000, -0.800000, 0.774253, -0.903997, -0.707686, 0.000000, -0.900000, 0.000000, 0.774253, -0.903997, -0.707686, 0.111631, -0.986824, 0.000000, 0.707686, -0.903997, 0.774253, -0.707686, -0.903997, 0.774253, 0.000000, -0.986824, 0.111631, 0.800000, -0.800000, 0.800000, -0.800000, -0.800000, 0.800000, -0.707686, -0.903997, 0.774253, 0.800000, -0.800000, 0.800000, -0.707686, -0.903997, 0.774253, 0.707686, -0.903997, 0.774253, -0.800000, -0.800000, 0.800000, 0.000000, -0.900000, 0.000000, 0.000000, -0.986824, 0.111631, -0.800000, -0.800000, 0.800000, 0.000000, -0.986824, 0.111631, -0.707686, -0.903997, 0.774253, 0.000000, -0.900000, 0.000000, 0.800000, -0.800000, 0.800000, 0.707686, -0.903997, 0.774253, 0.000000, -0.900000, 0.000000, 0.707686, -0.903997, 0.774253, 0.000000, -0.986824, 0.111631, }; GLfloat normals_high[1512] = { -0.261528, -0.355900, -0.897183, -0.289940, 0.282913, -0.914273, 0.428513, -0.035815, -0.902825, -0.577350, -0.577350, -0.577350, -0.577350, 0.577350, -0.577350, -0.289940, 0.282913, -0.914273, -0.577350, -0.577350, -0.577350, -0.289940, 0.282913, -0.914273, -0.261528, -0.355900, -0.897183, -0.577350, 0.577350, -0.577350, 0.000000, -0.000000, -1.000000, 0.428513, -0.035815, -0.902825, -0.577350, 0.577350, -0.577350, 0.428513, -0.035815, -0.902825, -0.289940, 0.282913, -0.914273, 0.000000, -0.000000, -1.000000, -0.577350, -0.577350, -0.577350, -0.261528, -0.355900, -0.897183, 0.000000, -0.000000, -1.000000, -0.261528, -0.355900, -0.897183, 0.428513, -0.035815, -0.902825, -0.355900, 0.261528, -0.897183, 0.282913, 0.289940, -0.914273, -0.035815, -0.428513, -0.902825, -0.577350, 0.577350, -0.577350, 0.577350, 0.577350, -0.577350, 0.282913, 0.289940, -0.914273, -0.577350, 0.577350, -0.577350, 0.282913, 0.289940, -0.914273, -0.355900, 0.261528, -0.897183, 0.577350, 0.577350, -0.577350, 0.000000, -0.000000, -1.000000, -0.035815, -0.428513, -0.902825, 0.577350, 0.577350, -0.577350, -0.035815, -0.428513, -0.902825, 0.282913, 0.289940, -0.914273, 0.000000, -0.000000, -1.000000, -0.577350, 0.577350, -0.577350, -0.355900, 0.261528, -0.897183, 0.000000, -0.000000, -1.000000, -0.355900, 0.261528, -0.897183, -0.035815, -0.428513, -0.902825, 0.261528, 0.355900, -0.897183, 0.289940, -0.282913, -0.914273, -0.428513, 0.035815, -0.902825, 0.577350, 0.577350, -0.577350, 0.577350, -0.577350, -0.577350, 0.289940, -0.282913, -0.914273, 0.577350, 0.577350, -0.577350, 0.289940, -0.282913, -0.914273, 0.261528, 0.355900, -0.897183, 0.577350, -0.577350, -0.577350, 0.000000, -0.000000, -1.000000, -0.428513, 0.035815, -0.902825, 0.577350, -0.577350, -0.577350, -0.428513, 0.035815, -0.902825, 0.289940, -0.282913, -0.914273, 0.000000, -0.000000, -1.000000, 0.577350, 0.577350, -0.577350, 0.261528, 0.355900, -0.897183, 0.000000, -0.000000, -1.000000, 0.261528, 0.355900, -0.897183, -0.428513, 0.035815, -0.902825, 0.355900, -0.261528, -0.897183, -0.282913, -0.289940, -0.914273, 0.035815, 0.428513, -0.902825, 0.577350, -0.577350, -0.577350, -0.577350, -0.577350, -0.577350, -0.282913, -0.289940, -0.914273, 0.577350, -0.577350, -0.577350, -0.282913, -0.289940, -0.914273, 0.355900, -0.261528, -0.897183, -0.577350, -0.577350, -0.577350, 0.000000, -0.000000, -1.000000, 0.035815, 0.428513, -0.902825, -0.577350, -0.577350, -0.577350, 0.035815, 0.428513, -0.902825, -0.282913, -0.289940, -0.914273, 0.000000, -0.000000, -1.000000, 0.577350, -0.577350, -0.577350, 0.355900, -0.261528, -0.897183, 0.000000, -0.000000, -1.000000, 0.355900, -0.261528, -0.897183, 0.035815, 0.428513, -0.902825, 0.897183, 0.355900, 0.261528, 0.914273, -0.282913, 0.289940, 0.902825, 0.035815, -0.428513, 0.577350, 0.577350, 0.577350, 0.577350, -0.577350, 0.577350, 0.914273, -0.282913, 0.289940, 0.577350, 0.577350, 0.577350, 0.914273, -0.282913, 0.289940, 0.897183, 0.355900, 0.261528, 0.577350, -0.577350, 0.577350, 1.000000, 0.000000, -0.000000, 0.902825, 0.035815, -0.428513, 0.577350, -0.577350, 0.577350, 0.902825, 0.035815, -0.428513, 0.914273, -0.282913, 0.289940, 1.000000, 0.000000, -0.000000, 0.577350, 0.577350, 0.577350, 0.897183, 0.355900, 0.261528, 1.000000, 0.000000, -0.000000, 0.897183, 0.355900, 0.261528, 0.902825, 0.035815, -0.428513, 0.897183, -0.261528, 0.355900, 0.914273, -0.289940, -0.282913, 0.902825, 0.428513, 0.035815, 0.577350, -0.577350, 0.577350, 0.577350, -0.577350, -0.577350, 0.914273, -0.289940, -0.282913, 0.577350, -0.577350, 0.577350, 0.914273, -0.289940, -0.282913, 0.897183, -0.261528, 0.355900, 0.577350, -0.577350, -0.577350, 1.000000, 0.000000, -0.000000, 0.902825, 0.428513, 0.035815, 0.577350, -0.577350, -0.577350, 0.902825, 0.428513, 0.035815, 0.914273, -0.289940, -0.282913, 1.000000, 0.000000, -0.000000, 0.577350, -0.577350, 0.577350, 0.897183, -0.261528, 0.355900, 1.000000, 0.000000, -0.000000, 0.897183, -0.261528, 0.355900, 0.902825, 0.428513, 0.035815, 0.897183, -0.355900, -0.261528, 0.914273, 0.282913, -0.289940, 0.902825, -0.035815, 0.428513, 0.577350, -0.577350, -0.577350, 0.577350, 0.577350, -0.577350, 0.914273, 0.282913, -0.289940, 0.577350, -0.577350, -0.577350, 0.914273, 0.282913, -0.289940, 0.897183, -0.355900, -0.261528, 0.577350, 0.577350, -0.577350, 1.000000, 0.000000, -0.000000, 0.902825, -0.035815, 0.428513, 0.577350, 0.577350, -0.577350, 0.902825, -0.035815, 0.428513, 0.914273, 0.282913, -0.289940, 1.000000, 0.000000, -0.000000, 0.577350, -0.577350, -0.577350, 0.897183, -0.355900, -0.261528, 1.000000, 0.000000, -0.000000, 0.897183, -0.355900, -0.261528, 0.902825, -0.035815, 0.428513, 0.897183, 0.261528, -0.355900, 0.914273, 0.289940, 0.282913, 0.902825, -0.428513, -0.035815, 0.577350, 0.577350, -0.577350, 0.577350, 0.577350, 0.577350, 0.914273, 0.289940, 0.282913, 0.577350, 0.577350, -0.577350, 0.914273, 0.289940, 0.282913, 0.897183, 0.261528, -0.355900, 0.577350, 0.577350, 0.577350, 1.000000, 0.000000, -0.000000, 0.902825, -0.428513, -0.035815, 0.577350, 0.577350, 0.577350, 0.902825, -0.428513, -0.035815, 0.914273, 0.289940, 0.282913, 1.000000, 0.000000, -0.000000, 0.577350, 0.577350, -0.577350, 0.897183, 0.261528, -0.355900, 1.000000, 0.000000, -0.000000, 0.897183, 0.261528, -0.355900, 0.902825, -0.428513, -0.035815, 0.261528, -0.355900, 0.897183, 0.289940, 0.282913, 0.914273, -0.428513, -0.035815, 0.902825, 0.577350, -0.577350, 0.577350, 0.577350, 0.577350, 0.577350, 0.289940, 0.282913, 0.914273, 0.577350, -0.577350, 0.577350, 0.289940, 0.282913, 0.914273, 0.261528, -0.355900, 0.897183, 0.577350, 0.577350, 0.577350, -0.000000, -0.000000, 1.000000, -0.428513, -0.035815, 0.902825, 0.577350, 0.577350, 0.577350, -0.428513, -0.035815, 0.902825, 0.289940, 0.282913, 0.914273, -0.000000, -0.000000, 1.000000, 0.577350, -0.577350, 0.577350, 0.261528, -0.355900, 0.897183, -0.000000, -0.000000, 1.000000, 0.261528, -0.355900, 0.897183, -0.428513, -0.035815, 0.902825, 0.355900, 0.261528, 0.897183, -0.282913, 0.289940, 0.914273, 0.035815, -0.428513, 0.902825, 0.577350, 0.577350, 0.577350, -0.577350, 0.577350, 0.577350, -0.282913, 0.289940, 0.914273, 0.577350, 0.577350, 0.577350, -0.282913, 0.289940, 0.914273, 0.355900, 0.261528, 0.897183, -0.577350, 0.577350, 0.577350, -0.000000, -0.000000, 1.000000, 0.035815, -0.428513, 0.902825, -0.577350, 0.577350, 0.577350, 0.035815, -0.428513, 0.902825, -0.282913, 0.289940, 0.914273, -0.000000, -0.000000, 1.000000, 0.577350, 0.577350, 0.577350, 0.355900, 0.261528, 0.897183, -0.000000, -0.000000, 1.000000, 0.355900, 0.261528, 0.897183, 0.035815, -0.428513, 0.902825, -0.261528, 0.355900, 0.897183, -0.289940, -0.282913, 0.914273, 0.428513, 0.035815, 0.902825, -0.577350, 0.577350, 0.577350, -0.577350, -0.577350, 0.577350, -0.289940, -0.282913, 0.914273, -0.577350, 0.577350, 0.577350, -0.289940, -0.282913, 0.914273, -0.261528, 0.355900, 0.897183, -0.577350, -0.577350, 0.577350, -0.000000, -0.000000, 1.000000, 0.428513, 0.035815, 0.902825, -0.577350, -0.577350, 0.577350, 0.428513, 0.035815, 0.902825, -0.289940, -0.282913, 0.914273, -0.000000, -0.000000, 1.000000, -0.577350, 0.577350, 0.577350, -0.261528, 0.355900, 0.897183, -0.000000, -0.000000, 1.000000, -0.261528, 0.355900, 0.897183, 0.428513, 0.035815, 0.902825, -0.355900, -0.261528, 0.897183, 0.282913, -0.289940, 0.914273, -0.035815, 0.428513, 0.902825, -0.577350, -0.577350, 0.577350, 0.577350, -0.577350, 0.577350, 0.282913, -0.289940, 0.914273, -0.577350, -0.577350, 0.577350, 0.282913, -0.289940, 0.914273, -0.355900, -0.261528, 0.897183, 0.577350, -0.577350, 0.577350, -0.000000, -0.000000, 1.000000, -0.035815, 0.428513, 0.902825, 0.577350, -0.577350, 0.577350, -0.035815, 0.428513, 0.902825, 0.282913, -0.289940, 0.914273, -0.000000, -0.000000, 1.000000, -0.577350, -0.577350, 0.577350, -0.355900, -0.261528, 0.897183, -0.000000, -0.000000, 1.000000, -0.355900, -0.261528, 0.897183, -0.035815, 0.428513, 0.902825, -0.897183, -0.355900, 0.261528, -0.914273, 0.282913, 0.289940, -0.902825, -0.035815, -0.428513, -0.577350, -0.577350, 0.577350, -0.577350, 0.577350, 0.577350, -0.914273, 0.282913, 0.289940, -0.577350, -0.577350, 0.577350, -0.914273, 0.282913, 0.289940, -0.897183, -0.355900, 0.261528, -0.577350, 0.577350, 0.577350, -1.000000, -0.000000, -0.000000, -0.902825, -0.035815, -0.428513, -0.577350, 0.577350, 0.577350, -0.902825, -0.035815, -0.428513, -0.914273, 0.282913, 0.289940, -1.000000, -0.000000, -0.000000, -0.577350, -0.577350, 0.577350, -0.897183, -0.355900, 0.261528, -1.000000, -0.000000, -0.000000, -0.897183, -0.355900, 0.261528, -0.902825, -0.035815, -0.428513, -0.897183, 0.261528, 0.355900, -0.914273, 0.289940, -0.282913, -0.902825, -0.428513, 0.035815, -0.577350, 0.577350, 0.577350, -0.577350, 0.577350, -0.577350, -0.914273, 0.289940, -0.282913, -0.577350, 0.577350, 0.577350, -0.914273, 0.289940, -0.282913, -0.897183, 0.261528, 0.355900, -0.577350, 0.577350, -0.577350, -1.000000, -0.000000, -0.000000, -0.902825, -0.428513, 0.035815, -0.577350, 0.577350, -0.577350, -0.902825, -0.428513, 0.035815, -0.914273, 0.289940, -0.282913, -1.000000, -0.000000, -0.000000, -0.577350, 0.577350, 0.577350, -0.897183, 0.261528, 0.355900, -1.000000, -0.000000, -0.000000, -0.897183, 0.261528, 0.355900, -0.902825, -0.428513, 0.035815, -0.897183, 0.355900, -0.261528, -0.914273, -0.282913, -0.289940, -0.902825, 0.035815, 0.428513, -0.577350, 0.577350, -0.577350, -0.577350, -0.577350, -0.577350, -0.914273, -0.282913, -0.289940, -0.577350, 0.577350, -0.577350, -0.914273, -0.282913, -0.289940, -0.897183, 0.355900, -0.261528, -0.577350, -0.577350, -0.577350, -1.000000, -0.000000, -0.000000, -0.902825, 0.035815, 0.428513, -0.577350, -0.577350, -0.577350, -0.902825, 0.035815, 0.428513, -0.914273, -0.282913, -0.289940, -1.000000, -0.000000, -0.000000, -0.577350, 0.577350, -0.577350, -0.897183, 0.355900, -0.261528, -1.000000, -0.000000, -0.000000, -0.897183, 0.355900, -0.261528, -0.902825, 0.035815, 0.428513, -0.897183, -0.261528, -0.355900, -0.914273, -0.289940, 0.282913, -0.902825, 0.428513, -0.035815, -0.577350, -0.577350, -0.577350, -0.577350, -0.577350, 0.577350, -0.914273, -0.289940, 0.282913, -0.577350, -0.577350, -0.577350, -0.914273, -0.289940, 0.282913, -0.897183, -0.261528, -0.355900, -0.577350, -0.577350, 0.577350, -1.000000, -0.000000, -0.000000, -0.902825, 0.428513, -0.035815, -0.577350, -0.577350, 0.577350, -0.902825, 0.428513, -0.035815, -0.914273, -0.289940, 0.282913, -1.000000, -0.000000, -0.000000, -0.577350, -0.577350, -0.577350, -0.897183, -0.261528, -0.355900, -1.000000, -0.000000, -0.000000, -0.897183, -0.261528, -0.355900, -0.902825, 0.428513, -0.035815, -0.261528, 0.897183, -0.355900, -0.289940, 0.914273, 0.282913, 0.428513, 0.902825, -0.035815, -0.577350, 0.577350, -0.577350, -0.577350, 0.577350, 0.577350, -0.289940, 0.914273, 0.282913, -0.577350, 0.577350, -0.577350, -0.289940, 0.914273, 0.282913, -0.261528, 0.897183, -0.355900, -0.577350, 0.577350, 0.577350, 0.000000, 1.000000, -0.000000, 0.428513, 0.902825, -0.035815, -0.577350, 0.577350, 0.577350, 0.428513, 0.902825, -0.035815, -0.289940, 0.914273, 0.282913, 0.000000, 1.000000, -0.000000, -0.577350, 0.577350, -0.577350, -0.261528, 0.897183, -0.355900, 0.000000, 1.000000, -0.000000, -0.261528, 0.897183, -0.355900, 0.428513, 0.902825, -0.035815, -0.355900, 0.897183, 0.261528, 0.282913, 0.914273, 0.289940, -0.035815, 0.902825, -0.428513, -0.577350, 0.577350, 0.577350, 0.577350, 0.577350, 0.577350, 0.282913, 0.914273, 0.289940, -0.577350, 0.577350, 0.577350, 0.282913, 0.914273, 0.289940, -0.355900, 0.897183, 0.261528, 0.577350, 0.577350, 0.577350, 0.000000, 1.000000, -0.000000, -0.035815, 0.902825, -0.428513, 0.577350, 0.577350, 0.577350, -0.035815, 0.902825, -0.428513, 0.282913, 0.914273, 0.289940, 0.000000, 1.000000, -0.000000, -0.577350, 0.577350, 0.577350, -0.355900, 0.897183, 0.261528, 0.000000, 1.000000, -0.000000, -0.355900, 0.897183, 0.261528, -0.035815, 0.902825, -0.428513, 0.261528, 0.897183, 0.355900, 0.289940, 0.914273, -0.282913, -0.428513, 0.902825, 0.035815, 0.577350, 0.577350, 0.577350, 0.577350, 0.577350, -0.577350, 0.289940, 0.914273, -0.282913, 0.577350, 0.577350, 0.577350, 0.289940, 0.914273, -0.282913, 0.261528, 0.897183, 0.355900, 0.577350, 0.577350, -0.577350, 0.000000, 1.000000, -0.000000, -0.428513, 0.902825, 0.035815, 0.577350, 0.577350, -0.577350, -0.428513, 0.902825, 0.035815, 0.289940, 0.914273, -0.282913, 0.000000, 1.000000, -0.000000, 0.577350, 0.577350, 0.577350, 0.261528, 0.897183, 0.355900, 0.000000, 1.000000, -0.000000, 0.261528, 0.897183, 0.355900, -0.428513, 0.902825, 0.035815, 0.355900, 0.897183, -0.261528, -0.282913, 0.914273, -0.289940, 0.035815, 0.902825, 0.428513, 0.577350, 0.577350, -0.577350, -0.577350, 0.577350, -0.577350, -0.282913, 0.914273, -0.289940, 0.577350, 0.577350, -0.577350, -0.282913, 0.914273, -0.289940, 0.355900, 0.897183, -0.261528, -0.577350, 0.577350, -0.577350, 0.000000, 1.000000, -0.000000, 0.035815, 0.902825, 0.428513, -0.577350, 0.577350, -0.577350, 0.035815, 0.902825, 0.428513, -0.282913, 0.914273, -0.289940, 0.000000, 1.000000, -0.000000, 0.577350, 0.577350, -0.577350, 0.355900, 0.897183, -0.261528, 0.000000, 1.000000, -0.000000, 0.355900, 0.897183, -0.261528, 0.035815, 0.902825, 0.428513, -0.261528, -0.897183, 0.355900, -0.289940, -0.914273, -0.282913, 0.428513, -0.902825, 0.035815, -0.577350, -0.577350, 0.577350, -0.577350, -0.577350, -0.577350, -0.289940, -0.914273, -0.282913, -0.577350, -0.577350, 0.577350, -0.289940, -0.914273, -0.282913, -0.261528, -0.897183, 0.355900, -0.577350, -0.577350, -0.577350, 0.000000, -1.000000, 0.000000, 0.428513, -0.902825, 0.035815, -0.577350, -0.577350, -0.577350, 0.428513, -0.902825, 0.035815, -0.289940, -0.914273, -0.282913, 0.000000, -1.000000, 0.000000, -0.577350, -0.577350, 0.577350, -0.261528, -0.897183, 0.355900, 0.000000, -1.000000, 0.000000, -0.261528, -0.897183, 0.355900, 0.428513, -0.902825, 0.035815, -0.355900, -0.897183, -0.261528, 0.282913, -0.914273, -0.289940, -0.035815, -0.902825, 0.428513, -0.577350, -0.577350, -0.577350, 0.577350, -0.577350, -0.577350, 0.282913, -0.914273, -0.289940, -0.577350, -0.577350, -0.577350, 0.282913, -0.914273, -0.289940, -0.355900, -0.897183, -0.261528, 0.577350, -0.577350, -0.577350, 0.000000, -1.000000, 0.000000, -0.035815, -0.902825, 0.428513, 0.577350, -0.577350, -0.577350, -0.035815, -0.902825, 0.428513, 0.282913, -0.914273, -0.289940, 0.000000, -1.000000, 0.000000, -0.577350, -0.577350, -0.577350, -0.355900, -0.897183, -0.261528, 0.000000, -1.000000, 0.000000, -0.355900, -0.897183, -0.261528, -0.035815, -0.902825, 0.428513, 0.261528, -0.897183, -0.355900, 0.289940, -0.914273, 0.282913, -0.428513, -0.902825, -0.035815, 0.577350, -0.577350, -0.577350, 0.577350, -0.577350, 0.577350, 0.289940, -0.914273, 0.282913, 0.577350, -0.577350, -0.577350, 0.289940, -0.914273, 0.282913, 0.261528, -0.897183, -0.355900, 0.577350, -0.577350, 0.577350, 0.000000, -1.000000, 0.000000, -0.428513, -0.902825, -0.035815, 0.577350, -0.577350, 0.577350, -0.428513, -0.902825, -0.035815, 0.289940, -0.914273, 0.282913, 0.000000, -1.000000, 0.000000, 0.577350, -0.577350, -0.577350, 0.261528, -0.897183, -0.355900, 0.000000, -1.000000, 0.000000, 0.261528, -0.897183, -0.355900, -0.428513, -0.902825, -0.035815, 0.355900, -0.897183, 0.261528, -0.282913, -0.914273, 0.289940, 0.035815, -0.902825, -0.428513, 0.577350, -0.577350, 0.577350, -0.577350, -0.577350, 0.577350, -0.282913, -0.914273, 0.289940, 0.577350, -0.577350, 0.577350, -0.282913, -0.914273, 0.289940, 0.355900, -0.897183, 0.261528, -0.577350, -0.577350, 0.577350, 0.000000, -1.000000, 0.000000, 0.035815, -0.902825, -0.428513, -0.577350, -0.577350, 0.577350, 0.035815, -0.902825, -0.428513, -0.282913, -0.914273, 0.289940, 0.000000, -1.000000, 0.000000, 0.577350, -0.577350, 0.577350, 0.355900, -0.897183, 0.261528, 0.000000, -1.000000, 0.000000, 0.355900, -0.897183, 0.261528, 0.035815, -0.902825, -0.428513, }; #if 1 GLfloat vertices_low[216] = { -0.850000, -0.850000, -0.850000, -0.850000, 0.850000, -0.850000, 0.000000, 0.000000, -1.000000, -0.850000, 0.850000, -0.850000, 0.850000, 0.850000, -0.850000, 0.000000, 0.000000, -1.000000, 0.850000, 0.850000, -0.850000, 0.850000, -0.850000, -0.850000, 0.000000, 0.000000, -1.000000, 0.850000, -0.850000, -0.850000, -0.850000, -0.850000, -0.850000, 0.000000, 0.000000, -1.000000, 0.850000, 0.850000, 0.850000, 0.850000, -0.850000, 0.850000, 1.000000, 0.000000, -0.000000, 0.850000, -0.850000, 0.850000, 0.850000, -0.850000, -0.850000, 1.000000, 0.000000, -0.000000, 0.850000, -0.850000, -0.850000, 0.850000, 0.850000, -0.850000, 1.000000, 0.000000, -0.000000, 0.850000, 0.850000, -0.850000, 0.850000, 0.850000, 0.850000, 1.000000, 0.000000, -0.000000, 0.850000, -0.850000, 0.850000, 0.850000, 0.850000, 0.850000, 0.000000, 0.000000, 1.000000, 0.850000, 0.850000, 0.850000, -0.850000, 0.850000, 0.850000, 0.000000, 0.000000, 1.000000, -0.850000, 0.850000, 0.850000, -0.850000, -0.850000, 0.850000, 0.000000, 0.000000, 1.000000, -0.850000, -0.850000, 0.850000, 0.850000, -0.850000, 0.850000, 0.000000, 0.000000, 1.000000, -0.850000, -0.850000, 0.850000, -0.850000, 0.850000, 0.850000, -1.000000, 0.000000, -0.000000, -0.850000, 0.850000, 0.850000, -0.850000, 0.850000, -0.850000, -1.000000, 0.000000, -0.000000, -0.850000, 0.850000, -0.850000, -0.850000, -0.850000, -0.850000, -1.000000, 0.000000, -0.000000, -0.850000, -0.850000, -0.850000, -0.850000, -0.850000, 0.850000, -1.000000, 0.000000, -0.000000, -0.850000, 0.850000, -0.850000, -0.850000, 0.850000, 0.850000, 0.000000, 1.000000, -0.000000, -0.850000, 0.850000, 0.850000, 0.850000, 0.850000, 0.850000, 0.000000, 1.000000, -0.000000, 0.850000, 0.850000, 0.850000, 0.850000, 0.850000, -0.850000, 0.000000, 1.000000, -0.000000, 0.850000, 0.850000, -0.850000, -0.850000, 0.850000, -0.850000, 0.000000, 1.000000, -0.000000, -0.850000, -0.850000, 0.850000, -0.850000, -0.850000, -0.850000, 0.000000, -1.000000, -0.000000, -0.850000, -0.850000, -0.850000, 0.850000, -0.850000, -0.850000, 0.000000, -1.000000, -0.000000, 0.850000, -0.850000, -0.850000, 0.850000, -0.850000, 0.850000, 0.000000, -1.000000, -0.000000, 0.850000, -0.850000, 0.850000, -0.850000, -0.850000, 0.850000, 0.000000, -1.000000, -0.000000, }; GLfloat normals_low[216] = { -0.242536, 0.000000, -0.970143, -0.242536, 0.000000, -0.970143, 0.000000, 0.000000, -1.000000, 0.000000, 0.242536, -0.970143, 0.000000, 0.242536, -0.970143, 0.000000,0.000000,-1.000000, 0.000000, 0.242536, -0.970143, 0.242536, 0.000000, -0.970143, 0.000000,0.000000,-1.000000, 0.242536, 0.000000, -0.970143, -0.000000, -0.242536, -0.970143, 0.000000,0.000000, -1.000000, 0.970142, 0.000000, 0.242536, 0.970142, 0.000000, 0.242536, 1.000000,0.000000,0.000000, 0.970142, -0.242536, 0.000000, 0.970142, -0.242536, 0.000000, 1.000000, 0.000000, 0.000000, 0.970142, 0.000000, -0.242536, 0.970142, 0.000000, -0.242536, 1.000000, 0.000000, 0.000000, 0.970142, 0.242536, -0.000000, 0.970142, 0.242536, -0.000000, 1.000000, 0.000000, 0.000000, 0.242536, -0.000000, 0.970143, 0.242536, -0.000000, 0.970143, 0.000000, 0.000000, 1.000000, 0.000000, 0.242536, 0.970143, 0.000000, 0.242536, 0.970143, 0.000000, 0.000000, 1.000000, -0.242536, 0.000000, 0.970143, -0.242536, 0.000000, 0.970143, 0.000000, 0.000000, 1.000000, 0.000000, -0.242536, 0.970143, 0.000000, -0.242536, 0.970143, 0.000000, 0.000000, 1.000000, -0.970142, 0.000000, 0.242536, -0.970142, 0.000000, 0.242536, -1.000000, 0.000000, 0.000000, -0.970142, 0.242536, 0.000000, -0.970142, 0.242536, 0.000000, -1.000000, 0.000000, 0.000000, -0.970142, -0.000000, -0.242536, -0.970142, -0.000000, -0.242536, -1.000000, 0.000000, 0.000000, -0.970142, -0.242536, 0.000000, -0.970142, -0.242536, 0.000000, -1.000000, 0.000000, 0.000000, -0.242536, 0.970142, 0.000000, -0.242536, 0.970142, 0.000000, 0.000000, 1.000000, 0.000000, -0.000000, 0.970142, 0.242536, -0.000000, 0.970142, 0.242536, 0.000000, 1.000000, 0.000000, 0.242536, 0.970142, 0.000000, 0.242536, 0.970142, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.970142, -0.242536, 0.000000, 0.970142, -0.242536, 0.000000, 1.000000, 0.000000, -0.242536, -0.970142, -0.000000, -0.242536, -0.970142, -0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -0.970142, -0.242536, 0.000000, -0.970142, -0.242536, 0.000000, -1.000000, 0.000000, 0.242536, -0.970142, 0.000000, 0.242536, -0.970142, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -0.970142, 0.242536, 0.000000, -0.970142, 0.242536, 0.000000, -1.000000, 0.000000, }; #else GLfloat vertices_low[216] = { -0.850000, -0.850000, -0.850000, -0.850000, 0.850000, -0.850000, 0.000000, 0.000000, -1.000000, -0.850000, 0.850000, -0.850000, 0.850000, 0.850000, -0.850000, 0.000000, 0.000000, -1.000000, 0.850000, 0.850000, -0.850000, 0.850000, -0.850000, -0.850000, 0.000000, 0.000000, -1.000000, 0.850000, -0.850000, -0.850000, -0.850000, -0.850000, -0.850000, 0.000000, 0.000000, -1.000000, 0.850000, 0.850000, 0.850000, 0.850000, -0.850000, 0.850000, 1.000000, 0.000000, -0.000000, 0.850000, -0.850000, 0.850000, 0.850000, -0.850000, -0.850000, 1.000000, 0.000000, -0.000000, 0.850000, -0.850000, -0.850000, 0.850000, 0.850000, -0.850000, 1.000000, 0.000000, -0.000000, 0.850000, 0.850000, -0.850000, 0.850000, 0.850000, 0.850000, 1.000000, 0.000000, -0.000000, 0.850000, -0.850000, 0.850000, 0.850000, 0.850000, 0.850000, 0.000000, 0.000000, 1.000000, 0.850000, 0.850000, 0.850000, -0.850000, 0.850000, 0.850000, 0.000000, 0.000000, 1.000000, -0.850000, 0.850000, 0.850000, -0.850000, -0.850000, 0.850000, 0.000000, 0.000000, 1.000000, -0.850000, -0.850000, 0.850000, 0.850000, -0.850000, 0.850000, 0.000000, 0.000000, 1.000000, -0.850000, -0.850000, 0.850000, -0.850000, 0.850000, 0.850000, -1.000000, 0.000000, -0.000000, -0.850000, 0.850000, 0.850000, -0.850000, 0.850000, -0.850000, -1.000000, 0.000000, -0.000000, -0.850000, 0.850000, -0.850000, -0.850000, -0.850000, -0.850000, -1.000000, 0.000000, -0.000000, -0.850000, -0.850000, -0.850000, -0.850000, -0.850000, 0.850000, -1.000000, 0.000000, -0.000000, -0.850000, 0.850000, -0.850000, -0.850000, 0.850000, 0.850000, 0.000000, 1.000000, -0.000000, -0.850000, 0.850000, 0.850000, 0.850000, 0.850000, 0.850000, 0.000000, 1.000000, -0.000000, 0.850000, 0.850000, 0.850000, 0.850000, 0.850000, -0.850000, 0.000000, 1.000000, -0.000000, 0.850000, 0.850000, -0.850000, -0.850000, 0.850000, -0.850000, 0.000000, 1.000000, -0.000000, -0.850000, -0.850000, 0.850000, -0.850000, -0.850000, -0.850000, 0.000000, -1.000000, -0.000000, -0.850000, -0.850000, -0.850000, 0.850000, -0.850000, -0.850000, 0.000000, -1.000000, -0.000000, 0.850000, -0.850000, -0.850000, 0.850000, -0.850000, 0.850000, 0.000000, -1.000000, -0.000000, 0.850000, -0.850000, 0.850000, -0.850000, -0.850000, 0.850000, 0.000000, -1.000000, -0.000000, }; GLfloat normals_low[216] = { -0.577350, -0.577350, -0.577350, -0.577350, 0.577350, -0.577350, 0.000000, 0.000000, -1.000000, -0.577350, 0.577350, -0.577350, 0.577350, 0.577350, -0.577350, 0.000000, 0.000000, -1.000000, 0.577350, 0.577350, -0.577350, 0.577350, -0.577350, -0.577350, 0.000000, 0.000000, -1.000000, 0.577350, -0.577350, -0.577350, -0.577350, -0.577350, -0.577350, 0.000000, 0.000000, -1.000000, 0.577350, 0.577350, 0.577350, 0.577350, -0.577350, 0.577350, 1.000000, 0.000000, 0.000000, 0.577350, -0.577350, 0.577350, 0.577350, -0.577350, -0.577350, 1.000000, 0.000000, 0.000000, 0.577350, -0.577350, -0.577350, 0.577350, 0.577350, -0.577350, 1.000000, 0.000000, 0.000000, 0.577350, 0.577350, -0.577350, 0.577350, 0.577350, 0.577350, 1.000000, 0.000000, 0.000000, 0.577350, -0.577350, 0.577350, 0.577350, 0.577350, 0.577350, 0.000000, 0.000000, 1.000000, 0.577350, 0.577350, 0.577350, -0.577350, 0.577350, 0.577350, 0.000000, 0.000000, 1.000000, -0.577350, 0.577350, 0.577350, -0.577350, -0.577350, 0.577350, 0.000000, 0.000000, 1.000000, -0.577350, -0.577350, 0.577350, 0.577350, -0.577350, 0.577350, 0.000000, 0.000000, 1.000000, -0.577350, -0.577350, 0.577350, -0.577350, 0.577350, 0.577350, -1.000000, 0.000000, 0.000000, -0.577350, 0.577350, 0.577350, -0.577350, 0.577350, -0.577350, -1.000000, 0.000000, 0.000000, -0.577350, 0.577350, -0.577350, -0.577350, -0.577350, -0.577350, -1.000000, 0.000000, 0.000000, -0.577350, -0.577350, -0.577350, -0.577350, -0.577350, 0.577350, -1.000000, 0.000000, 0.000000, -0.577350, 0.577350, -0.577350, -0.577350, 0.577350, 0.577350, 0.000000, 1.000000, 0.000000, -0.577350, 0.577350, 0.577350, 0.577350, 0.577350, 0.577350, 0.000000, 1.000000, 0.000000, 0.577350, 0.577350, 0.577350, 0.577350, 0.577350, -0.577350, 0.000000, 1.000000, 0.000000, 0.577350, 0.577350, -0.577350, -0.577350, 0.577350, -0.577350, 0.000000, 1.000000, 0.000000, -0.577350, -0.577350, 0.577350, -0.577350, -0.577350, -0.577350, 0.000000, -1.000000, 0.000000, -0.577350, -0.577350, -0.577350, 0.577350, -0.577350, -0.577350, 0.000000, -1.000000, 0.000000, 0.577350, -0.577350, -0.577350, 0.577350, -0.577350, 0.577350, 0.000000, -1.000000, 0.000000, 0.577350, -0.577350, 0.577350, -0.577350, -0.577350, 0.577350, 0.000000, -1.000000, 0.000000, }; #endif GLfloat vertices_rlow[36] = { -0.85f,-0.85f,1.0f, // bottom left 0.85f,-0.85f,1.0f, // bottom right 0.85f,0.85f,1.0f, // upper right -0.85f,0.85f,1.0f, // upper left -0.85f,-0.85f,1.0f, // bottom left 0.85f,0.85f,1.0f, // upper right 0.85f,-0.85f,1.0f, // bottom right -0.85f,-0.85f,1.0f, // bottom left -0.85f,0.85f,1.0f, // upper left 0.85f,0.85f,1.0f, // upper right 0.85f,-0.85f,1.0f, // bottom right -0.85f,0.85f,1.0f // upper left }; GLfloat *vertices, *normals = NULL; int n_vertices; if (MetaState::mode & CM_REALLY_LOW_GRAPHICS) { vertices = vertices_rlow; n_vertices = 12; } else if (MetaState::mode & CM_LOW_GRAPHICS) { vertices = vertices_low; normals = normals_low; n_vertices = 72; } else { vertices = vertices_high; normals = normals_high; n_vertices = 504; } glVertexPointer(3, GL_FLOAT, 0, vertices); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glNormalPointer(GL_FLOAT, 0, normals); glDrawArrays(GL_TRIANGLES, 0, n_vertices); glEndList(); // Now let's make one for pulsing blocks glEnableClientState(GL_TEXTURE_COORD_ARRAY); GLfloat *tex_coords = new GLfloat[3 * n_vertices]; for (int n = 3 * n_vertices; n--; ) tex_coords[n] = vertices[n] * 0.5f; special_block_list = glGenLists(1); glNewList(special_block_list, GL_COMPILE); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords); glDrawArrays(GL_TRIANGLES, 0, n_vertices); glEndList(); glDisableClientState(GL_TEXTURE_COORD_ARRAY); // Now let's make one at half that size and rotated float v[3]; const GLfloat M[16] = { 0.707107f, 0.5f, -0.5f, 0.0f, 0.0f, 0.707107f, 0.707107f, 0.0f, 0.707107f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { for (int n = 3 * n_vertices; n -=3; ) { v[0] = vertices[n + 0]; v[1] = vertices[n + 1]; v[2] = vertices[n + 2]; vertices[n + 0] = 0.5 * (M[0] * v[0] + M[4] * v[1] + M[8] * v[2]); vertices[n + 1] = 0.5 * (M[1] * v[0] + M[5] * v[1] + M[9] * v[2]); vertices[n + 2] = 0.5 * (M[2] * v[0] + M[6] * v[1] + M[10] * v[2]); v[0] = normals[n + 0]; v[1] = normals[n + 1]; v[2] = normals[n + 2]; normals[n + 0] = M[0] * v[0] + M[4] * v[1] + M[8] * v[2]; normals[n + 1] = M[1] * v[0] + M[5] * v[1] + M[9] * v[2]; normals[n + 2] = M[2] * v[0] + M[6] * v[1] + M[10] * v[2]; } } else { for (int n = 0; n < 3 * n_vertices; ++n) { vertices[n] *= 0.5; } } small_block_list = glGenLists(1); glNewList(small_block_list, GL_COMPILE); glVertexPointer(3, GL_FLOAT, 0, vertices); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glNormalPointer(GL_FLOAT, 0, normals); glDrawArrays(GL_TRIANGLES, 0, n_vertices); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glDisableClientState(GL_NORMAL_ARRAY); // Now we build the special color blocks' gleam texture. A texture value of // 0.6f seems to cause the special color blocks to match their standard // siblings, given the specials' double color values. GLubyte texture[32]; for (int n = 32; n--; ) texture[n] = (GLubyte) (255.0f * (0.8f - 0.2f * cos((2.0f * PI / 32.0f) * n))); glGenTextures(1, &special_block_lightmap); glBindTexture(GL_TEXTURE_1D, special_block_lightmap); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); const GLubyte* renderer = glGetString(GL_RENDERER); if (strstr((char*) renderer, "DRI 20020221 Voodoo3")) { cerr << "**********\nWARNING:" "disabling call to 1d texturing on DRI 20020221 Voodoo3 renderer " "since it segfaults\n**********" << endl; delete[] tex_coords; return; } if (strstr((char*) renderer, "865G 20021115")) { cerr << "**********\nWARNING:" "disabling call to 1d texturing on 865G 20021115 renderer " "since it segfaults\n**********" << endl; delete[] tex_coords; return; } glTexImage1D(GL_TEXTURE_1D, 0, GL_LUMINANCE, 32, GL_FALSE, GL_LUMINANCE, GL_UNSIGNED_BYTE, texture); delete[] tex_coords; } crack-attack-1.1.14/src/Sound.cxx0000644000175000001440000000671410232523671016276 0ustar webbsterusers/* * Sound.cxx * Miguel ngel Vilela Garca - 8/29/03 * * Copyright (C) 2003 Miguel ngel Vilela Garca * Copyright (C) 2005 See COPYRIGHT * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Miguel ngel Vilela Garca - www.miguev.net */ #include "TextureLoader.h" #include "Random.h" #include "Sound.h" #include #include using namespace std; typedef map ChunkMap; vector sounds; string sound_dirname; ChunkMap chunks; int audio_rate = 22050; int audio_channels = 2; int audio_buffers = 1024; /* small enough buffer to get synchronized sound */ Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */ int has_audio_available = 0; void Sound::initialize( void ) { SDL_Init( SDL_INIT_AUDIO ); if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { cout << "WARNING *** Unable to open audio device!" << endl; return; } Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels); // Initialize some global variables has_audio_available = 1; // Load chunks filenames sounds.push_back (GC_SOUND_COUNTDOWN); sounds.push_back (GC_SOUND_BLOCK_FALLEN); sounds.push_back (GC_SOUND_BLOCK_AWAKING); sounds.push_back (GC_SOUND_BLOCK_DYING); sounds.push_back (GC_SOUND_GARBAGE_FALLEN); sounds.push_back (GC_SOUND_GARBAGE_SHATTERING); // Load chunk files to ChunkMap Mix_Chunk *chunk; string File; for (size_t i = 0; i < sounds.size(); i++) { #ifndef NDEBUG cout << "Loading " << sounds[i]; #endif // Try to load chunk in $HOME/.crack-attack/sounds/ char sound_dirname[256]; TextureLoader::buildLocalDataFileName("sounds/", sound_dirname); File = sound_dirname + sounds[i]; chunk = Mix_LoadWAV (File.c_str()); if ( chunk == NULL ) { // Try to load chunk in DATA_DIRECTORY/sounds/ char *another_dir = GC_DATA_DIRECTORY("sounds/"); File = another_dir + sounds[i]; chunk = Mix_LoadWAV (File.c_str()); } // If chunk is NULL there is no WAV available for this sound if (!chunk) cout << "WARNING *** Unable to open " << sounds[i] << endl; chunks[sounds[i]] = chunk; #ifndef NDEBUG cout << endl; #endif } } void Sound::play( const char *file, int vol ) { if (!has_audio_available || !chunks[file]) return; int channel; if (vol > 10) vol = 10; // string File (file); Mix_VolumeChunk( chunks[file], vol * MIX_MAX_VOLUME / 10 ); channel = Mix_PlayChannel( -1, chunks[file], 0 ); } int Sound::audio_available( ) { return has_audio_available; } void Sound::cleanup( ) { if (!has_audio_available) return; Mix_CloseAudio(); SDL_Quit(); } crack-attack-1.1.14/src/Clock.cxx0000644000175000001440000000235510132356545016241 0ustar webbsterusers/* * Clock.cxx * Daniel Nelson - 11/5/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the timer state. */ #include "Game.h" #include "Clock.h" #include "WinRecord.h" using namespace std; short Clock::digits[4]; short Clock::previous_digits[4]; int Clock::tick; void Clock::gameStart ( ) { tick = 0; for (int n = 4; n--; ) digits[n] = 0; if (WinRecord::current_game == 0) for (int n = 4; n--; ) previous_digits[n] = 0; } crack-attack-1.1.14/src/Score.cxx0000644000175000001440000001434610230226514016253 0ustar webbsterusers/* * Score.cxx * Daniel Nelson - 12/3/1 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the score for solo games. */ #include #include using namespace std; #include "TextureLoader.h" #include "Game.h" #include "MetaState.h" #include "Score.h" int Score::score; int Score::backlog; int Score::top_combo_multiplier; int Score::top_combo_score; ComboRank Score::combo_record[GC_SCORE_MULT_LENGTH]; short Score::digits[GC_NUMBER_DIGITS]; short Score::previous_digits[GC_NUMBER_DIGITS]; int Score::fade_timer; GLfloat Score::inverse_timer_start; int Score::n_digits_displayed; int Score::special_block_scores[BF_NUMBER_SPECIAL] = { 30, // black 30, // white 5, // special purple 5, // special blue 8, // special green 15, // special yellow 10, }; // special orange int Score::player_rank; Rank Score::record[GC_SCORE_REC_LENGTH]; void Score::initialize ( ) { if (!(MetaState::mode & CM_SOLO)) return; score = backlog = top_combo_multiplier = top_combo_score = 0; n_digits_displayed = GC_MIN_NUMBER_DIGITS_DISPLAYED; for (int n = GC_NUMBER_DIGITS; n--; ) { digits[n] = previous_digits[n] = 0; fade_timer = 0; inverse_timer_start = 1.0f; } player_rank = -1; if (!readScoreRecord()) setupDefaultScoreRecord(); if (!readMultRecord()) setupDefaultMultRecord(); } void Score::cleanUp ( ) { if ((MetaState::mode & CM_SOLO) && player_rank != -1) writeScoreRecord(); } int Score::gameFinish ( ) { // first do non-victory deciding scores for (int n = GC_SCORE_MULT_LENGTH; n--; ) if (top_combo_multiplier > combo_record[n].multiplier) { player_rank = n; // insert player for (int n = 0; n < player_rank; n++) { strncpy(combo_record[n].name, combo_record[n + 1].name, GC_PLAYER_NAME_LENGTH); combo_record[n].multiplier = combo_record[n + 1].multiplier; } strncpy(combo_record[player_rank].name, MetaState::player_name, GC_PLAYER_NAME_LENGTH); combo_record[player_rank].multiplier = top_combo_multiplier; break; } // now decide the winner for (int n = GC_SCORE_REC_LENGTH; n--; ) if (score > record[n].score) { player_rank = n; // insert player for (int n = 0; n < player_rank; n++) { strncpy(record[n].name, record[n + 1].name, GC_PLAYER_NAME_LENGTH); record[n].score = record[n + 1].score; } strncpy(record[player_rank].name, MetaState::player_name, GC_PLAYER_NAME_LENGTH); record[player_rank].score = score; return GS_WON; } return GS_LOST; } bool Score::readMultRecord ( ) { char file_name[256]; char buffer[256]; TextureLoader::buildLocalDataFileName(GC_MULT_FILE_NAME, file_name); ifstream new_file(file_name); if (new_file.fail()) return false; for (int n = GC_SCORE_MULT_LENGTH; n--; ) { new_file.getline(combo_record[n].name, GC_PLAYER_NAME_LENGTH); new_file.getline(buffer, 256); combo_record[n].multiplier = atoi(buffer); if (new_file.fail()) return false; } return true; } bool Score::readScoreRecord ( ) { char file_name[256]; TextureLoader::buildLocalDataFileName((MetaState::mode & CM_X) ? GC_X_REC_FILE_NAME : GC_REC_FILE_NAME, file_name); ifstream file(file_name); if (file.fail()) return false; char buffer[256]; for (int n = GC_SCORE_REC_LENGTH; n--; ) { file.getline(record[n].name, GC_PLAYER_NAME_LENGTH); file.getline(buffer, 256); record[n].score = atoi(buffer); if (file.fail()) return false; } return true; } void Score::writeScoreRecord ( ) { char file_name[256]; TextureLoader::buildLocalDataFileName((MetaState::mode & CM_X) ? GC_X_REC_FILE_NAME : GC_REC_FILE_NAME, file_name); ofstream file(file_name); if (file.fail()) { cerr << "Error writing to score record file '" << file_name << "'." << endl; exit(1); } for (int n = GC_SCORE_REC_LENGTH; n--; ) file << record[n].name << '\n' << record[n].score << '\n'; file.close(); // mult record TextureLoader::buildLocalDataFileName(GC_MULT_FILE_NAME, file_name); ofstream mult(file_name); if (mult.fail()) { cerr << "Error writing to score record file '" << file_name << "'." << endl; exit(1); } for (int n = GC_SCORE_MULT_LENGTH; n--; ) mult << combo_record[n].name << '\n' << combo_record[n].multiplier << '\n'; mult.close(); } void Score::setupDefaultMultRecord ( ) { ifstream new_file(GC_DEFAULT_MULT_FILE_NAME); if (new_file.fail()) { cerr << "Error opening data file '" << GC_DEFAULT_MULT_FILE_NAME << "'." << endl; exit(1); } char buffer[256]; for (int n = GC_SCORE_MULT_LENGTH; n--; ) { new_file.getline(combo_record[n].name, GC_PLAYER_NAME_LENGTH); new_file.getline(buffer, 256); combo_record[n].multiplier = atoi(buffer); if (new_file.fail()) break; } writeScoreRecord(); } void Score::setupDefaultScoreRecord ( ) { ifstream file(GC_DEFAULT_REC_FILE_NAME); if (file.fail()) { cerr << "Error opening data file '" << GC_DEFAULT_REC_FILE_NAME << "'." << endl; exit(1); } int n; for (n = GC_SCORE_REC_LENGTH; n--; ) { file.getline(record[n].name, GC_PLAYER_NAME_LENGTH); if (file.fail()) break; } if (n != -1) while (n--) strncpy(record[n].name, GC_SCORE_REC_DEFAULT_NAME, GC_PLAYER_NAME_LENGTH); for (n = GC_SCORE_REC_LENGTH; n--; ) record[n].score = ((n + 1) * GC_SCORE_DEFAULT_TOP_SCORE) / GC_SCORE_REC_LENGTH; writeScoreRecord(); } crack-attack-1.1.14/src/Swapper.h0000644000175000001440000000552010132356545016251 0ustar webbsterusers/* * Swapper.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SWAPPER_H #define SWAPPER_H using namespace std; #include "BlockManager.h" #define SS_SWAPPING (1 << 0) #define SS_MOVE_PAUSE (1 << 1) #define SS_MOVE_UP (1 << 2) #define SS_MOVE_DOWN (1 << 3) #define SS_MOVE_LEFT (1 << 4) #define SS_MOVE_RIGHT (1 << 5) #define SS_MOVE_MASK (SS_MOVE_UP | SS_MOVE_DOWN \ | SS_MOVE_LEFT | SS_MOVE_RIGHT) #define SA_LEFT (1 << 0) #define SA_RIGHT (1 << 1) #define SA_DISALLOWED (1 << 2) /* static */ class Swapper { public: static void gameStart ( ); static void timeStep ( ); static inline void shiftUp ( ) { y++; } static inline void notifyLanding ( int _x, int _y, Block &block, ComboTabulator *combo ) { if (!(state & SS_SWAPPING)) return; if (_y - 1 != y) return; if (_x == x && (swap & SA_RIGHT) && BlockManager::flavorMatch(block, *right_block)) right_block->beginComboInvolvement(combo); else if (_x == x + 1 && (swap & SA_LEFT) && BlockManager::flavorMatch(block, *left_block)) left_block->beginComboInvolvement(combo); } // the location of our left half static int x, y; // goes off when we're allowed move again static int move_pause_alarm; // goes off when a swap in complete static int swap_alarm; // swapper's state static int state; // factor of swap complete static float swap_factor; // the swapper's color; static int color; private: // type of swap we're executing, if any static int swap; // the swapping blocks static Block *left_block, *right_block; // insures that the player releases a button look for another command; makes // the control more crisp static int button_down_move; static bool button_down_swap; // allows the user to queue up the next command before completion of // the current command static int queued_move; static bool queued_swap; }; #endif crack-attack-1.1.14/src/Mode.h0000644000175000001440000000267510234000015015501 0ustar webbsterusers/* * Mode.h * Andrew Sayman - 10/11/04 * * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef MODE_H #define MODE_H // meta game modes #define CM_SERVER (1 << 0) #define CM_CLIENT (1 << 1) #define CM_SOLO (1 << 2) #define CM_AI (1 << 3) #define CM_X (1 << 4) #define CM_NO_TIME_OUT (1 << 5) #define CM_LOW_GRAPHICS (1 << 6) #define CM_REALLY_LOW_GRAPHICS (1 << 7) #define CM_AI_EASY (1 << 8) #define CM_AI_MEDIUM (1 << 9) #define CM_AI_HARD (1 << 10) #define CM_REPLAY (1 << 11) #endif crack-attack-1.1.14/src/obj_sign.cxx0000644000175000001440000001502610230146633016771 0ustar webbsterusers/* * sign.cxx * Daniel Nelson - 9/14/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates the display list and textures for the reward signs. */ #include #include "glext.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" GLuint Displayer::sign_small_list; GLuint Displayer::sign_large_list; GLuint Displayer::sign_small_texture; GLuint Displayer::sign_large_texture; const char *sign_small_subtexture_files[DC_NUMBER_SMALL_SIGN_SUBTEXTURES] = { GC_DATA_DIRECTORY("sign_4.tga"), GC_DATA_DIRECTORY("sign_5.tga"), GC_DATA_DIRECTORY("sign_6.tga"), GC_DATA_DIRECTORY("sign_7.tga"), GC_DATA_DIRECTORY("sign_8.tga"), GC_DATA_DIRECTORY("sign_9.tga") }; const char *sign_large_subtexture_files[DC_NUMBER_LARGE_SIGN_SUBTEXTURES] = { GC_DATA_DIRECTORY("sign_10.tga"), GC_DATA_DIRECTORY("sign_11.tga"), GC_DATA_DIRECTORY("sign_12.tga"), GC_DATA_DIRECTORY("sign_x2.tga"), GC_DATA_DIRECTORY("sign_x3.tga"), GC_DATA_DIRECTORY("sign_x4.tga"), GC_DATA_DIRECTORY("sign_x5.tga"), GC_DATA_DIRECTORY("sign_x6.tga"), GC_DATA_DIRECTORY("sign_x7.tga"), GC_DATA_DIRECTORY("sign_x8.tga"), GC_DATA_DIRECTORY("sign_x9.tga"), GC_DATA_DIRECTORY("sign_x10.tga"), GC_DATA_DIRECTORY("sign_x11.tga"), GC_DATA_DIRECTORY("sign_x12.tga"), GC_DATA_DIRECTORY("sign_bonus.tga") }; void Displayer::generateSignList ( ) { GLubyte *subtextures [max(DC_NUMBER_SMALL_SIGN_SUBTEXTURES, DC_NUMBER_LARGE_SIGN_SUBTEXTURES)]; // load and pack the small sign textures glGenTextures(1, &sign_small_texture); glBindTexture(GL_TEXTURE_2D, sign_small_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); for (int n = DC_NUMBER_SMALL_SIGN_SUBTEXTURES; n--; ) subtextures[n] = TextureLoader::loadAlphaTGA(sign_small_subtexture_files[n], DC_SIGN_SMALL_SUBTEX_LENGTH_S, DC_SIGN_SMALL_SUBTEX_LENGTH_T); GLubyte small_texture[DC_SIGN_SMALL_TEX_LENGTH_S][DC_SIGN_SMALL_TEX_LENGTH_T]; for (int s = 0; s < DC_SIGN_SMALL_TEX_LENGTH_S; s++) for (int t = 0; t < DC_SIGN_SMALL_TEX_LENGTH_T; t++) { unsigned n = (s / DC_SIGN_SMALL_SUBTEX_LENGTH_S) * DC_SIGN_SMALL_TEX_GRID_LENGTH_T + t / DC_SIGN_SMALL_SUBTEX_LENGTH_T; if (n >= DC_NUMBER_SMALL_SIGN_SUBTEXTURES) small_texture[s][t] = 0; else small_texture[s][t] = subtextures[n][s % DC_SIGN_SMALL_SUBTEX_LENGTH_S * DC_SIGN_SMALL_SUBTEX_LENGTH_T + t % DC_SIGN_SMALL_SUBTEX_LENGTH_T]; } glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, DC_SIGN_SMALL_TEX_LENGTH_T, DC_SIGN_SMALL_TEX_LENGTH_S, GL_FALSE, GL_ALPHA, GL_UNSIGNED_BYTE, small_texture); for (int n = DC_NUMBER_SMALL_SIGN_SUBTEXTURES; n--; ) if (subtextures[n] != null) { delete [] subtextures[n]; subtextures[n] = null; } // load and pack the large sign textures glGenTextures(1, &sign_large_texture); glBindTexture(GL_TEXTURE_2D, sign_large_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); for (int n = DC_NUMBER_LARGE_SIGN_SUBTEXTURES; n--; ) subtextures[n] = TextureLoader::loadAlphaTGA(sign_large_subtexture_files[n], DC_SIGN_LARGE_SUBTEX_LENGTH_S, DC_SIGN_LARGE_SUBTEX_LENGTH_T); GLubyte large_texture[DC_SIGN_LARGE_TEX_LENGTH_S][DC_SIGN_LARGE_TEX_LENGTH_T]; for (int s = 0; s < DC_SIGN_LARGE_TEX_LENGTH_S; s++) for (int t = 0; t < DC_SIGN_LARGE_TEX_LENGTH_T; t++) { unsigned n = (s / DC_SIGN_LARGE_SUBTEX_LENGTH_S) * DC_SIGN_LARGE_TEX_GRID_LENGTH_T + t / DC_SIGN_LARGE_SUBTEX_LENGTH_T; if (n >= DC_NUMBER_LARGE_SIGN_SUBTEXTURES) large_texture[s][t] = 0; else large_texture[s][t] = subtextures[n][s % DC_SIGN_LARGE_SUBTEX_LENGTH_S * DC_SIGN_LARGE_SUBTEX_LENGTH_T + t % DC_SIGN_LARGE_SUBTEX_LENGTH_T]; } glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, DC_SIGN_LARGE_TEX_LENGTH_T, DC_SIGN_LARGE_TEX_LENGTH_S, GL_FALSE, GL_ALPHA, GL_UNSIGNED_BYTE, large_texture); for (int n = DC_NUMBER_LARGE_SIGN_SUBTEXTURES; n--; ) if (subtextures[n] != null) { delete [] subtextures[n]; subtextures[n] = null; } // build the sign display lists sign_small_list = glGenLists(1); glNewList(sign_small_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, DC_SIGN_SMALL_SUBTEX_COORD_S); glVertex3f(-DC_SIGN_LENGTH, -DC_SIGN_LENGTH, 0.0f); glTexCoord2f(DC_SIGN_SMALL_SUBTEX_COORD_T, DC_SIGN_SMALL_SUBTEX_COORD_S); glVertex3f(DC_SIGN_LENGTH, -DC_SIGN_LENGTH, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-DC_SIGN_LENGTH, DC_SIGN_LENGTH, 0.0f); glTexCoord2f(DC_SIGN_SMALL_SUBTEX_COORD_T, 0.0f); glVertex3f(DC_SIGN_LENGTH, DC_SIGN_LENGTH, 0.0f); glEnd(); glEndList(); sign_large_list = glGenLists(1); glNewList(sign_large_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, DC_SIGN_LARGE_SUBTEX_COORD_S); glVertex3f(-2.0f * DC_SIGN_LENGTH, -DC_SIGN_LENGTH, 0.0f); glTexCoord2f(DC_SIGN_LARGE_SUBTEX_COORD_T, DC_SIGN_LARGE_SUBTEX_COORD_S); glVertex3f(2.0f * DC_SIGN_LENGTH, -DC_SIGN_LENGTH, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.0f * DC_SIGN_LENGTH, DC_SIGN_LENGTH, 0.0f); glTexCoord2f(DC_SIGN_LARGE_SUBTEX_COORD_T, 0.0f); glVertex3f(2.0f * DC_SIGN_LENGTH, DC_SIGN_LENGTH, 0.0f); glEnd(); glEndList(); } crack-attack-1.1.14/src/Random.h0000644000175000001440000000527410132356545016056 0ustar webbsterusers/* * Random.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef RANDOM_H #define RANDOM_H using namespace std; #include "Game.h" class Angle { public: float x; float y; }; /* static */ class Random { public: static void seed ( unsigned int seed ); static unsigned int generateSeed ( ); static void initialize ( ); static inline bool chanceIn ( int chance ) { return rand() % chance == 0; } // use then chance is a power of 2 static inline bool chanceIn2 ( int chance ) { return (rand() & (chance - 1)) == 0; } static inline int number ( int maximum ) { return rand() % maximum; } // use then maximum is a power of 2 static inline int number2 ( int maximum ) { return rand() & (maximum - 1); } static inline float number ( ) { return rand() * (1.0 / (float) RAND_MAX); } static inline void angle ( float &x, float &y ) { int n = number2(GC_SIZE_RANDOM_ANGLE_TABLE); x = angle_table[n].x; y = angle_table[n].y; } static inline void deathSparkAngle ( float &x, float &y ) { int n = number2(GC_SIZE_RANDOM_ANGLE_TABLE); x = angle_death_spark_table[n].x; y = angle_death_spark_table[n].y; } static inline void celebrationSpark1Angle ( float &x, float &y ) { int n = number2(GC_SIZE_RANDOM_ANGLE_TABLE); x = angle_celebration_spark_1_table[n].x; y = angle_celebration_spark_1_table[n].y; } static inline void celebrationSpark2Angle ( float &x, float &y ) { int n = number2(GC_SIZE_RANDOM_ANGLE_TABLE); x = angle_celebration_spark_2_table[n].x; y = angle_celebration_spark_2_table[n].y; } private: static Angle angle_table[GC_SIZE_RANDOM_ANGLE_TABLE]; static Angle angle_death_spark_table[GC_SIZE_RANDOM_ANGLE_TABLE]; static Angle angle_celebration_spark_1_table[GC_SIZE_RANDOM_ANGLE_TABLE]; static Angle angle_celebration_spark_2_table[GC_SIZE_RANDOM_ANGLE_TABLE]; }; #endif crack-attack-1.1.14/src/Block.h0000644000175000001440000000601510132356545015662 0ustar webbsterusers/* * Block.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef BLOCK_H #define BLOCK_H using namespace std; #include "Game.h" #include "ComboTabulator.h" // states of blocks #define BS_STATIC (1 << 0) #define BS_SWAPPING (1 << 1) #define BS_FALLING (1 << 2) #define BS_DYING (1 << 3) #define BS_AWAKING (1 << 4) #define BS_SWAP_DIRECTION_MASK (1 << 5) // pop directions #define BR_DIRECTION_1 (1 << 0) #define BR_DIRECTION_2 (1 << 1) #define BR_DIRECTION_3 (1 << 2) #define BR_DIRECTION_4 (1 << 3) class Block { public: void initializeStatic ( int _x, int _y, int _flavor ); void initializeAwaking ( int _x, int _y, int _flavor, int pop_delay, int awake_delay, ComboTabulator *combo, int _pop_color ); void timeStep ( ); void startFalling ( ComboTabulator *combo = null, bool no_hang = false ); void startDying ( ComboTabulator *combo, int spark_number ); void startSwapping ( int direction ); void finishSwapping ( int s_x ); inline void beginComboInvolvement ( ComboTabulator *new_combo ) { if (current_combo) current_combo->decrementInvolvement(); current_combo = new_combo; current_combo->incrementInvolvement(); } inline void endComboInvolvement ( ComboTabulator *old_combo ) { if (current_combo && current_combo == old_combo) { current_combo->decrementInvolvement(); current_combo = null; } } // free store id int id; // block color int flavor; // grid position; if between grid locations, this is the location of our // lowest and left most edge int x, y; // fine position control; GC_STEPS_PER_GRID number of increments per grid int f_y; // block state int state; // time until pop - also used for other random crap; should be renamed int pop_alarm; // current combo we're involved with, if any ComboTabulator *current_combo; // time until awakening int alarm; // death rotation axis float axis_x, axis_y; // direction of rotation upon popping int pop_direction; // the block color before popping int pop_color; // used by the extreme effects int X; }; #endif crack-attack-1.1.14/src/GarbageFlavorImage.h0000644000175000001440000000433610230144462020271 0ustar webbsterusers/* * GarbageFlavorImage.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef GARBAGEFLAVORIMAGE_H #define GARBAGEFLAVORIMAGE_H #include #include "glext.h" using namespace std; #include "Displayer.h" #include "Garbage.h" #include "Random.h" /* static */ class GarbageFlavorImage { public: static void initialize ( ); static bool personalGarbageFlavorImageExists ( ); static GLubyte *loadPersonalGarbageFlavorImage ( ); static void handleNetworkGarbageFlavorImage ( GLubyte *texture ); static void buildGarbageTextureFileName ( char file_name[256], const char *dir_name, int n ); static void buildGarbageTextureFileName ( char file_name[256], int n ); static void buildOriginalGarbageTextureFileName ( char file_name[256], int n ); static void requestGarbageFlavorImage_inline_split_ ( Garbage &garbage ); static inline void requestGarbageFlavorImage ( Garbage &garbage ) { if (garbage.height < DC_MIN_FLAVOR_GARBAGE_LENGTH) return; if (associated_garbage_id != -1) return; if (!Random::number(DC_CHANCE_NO_GARBAGE_FLAVOR)) return; requestGarbageFlavorImage_inline_split_(garbage); } static inline void notifyGarbageDestruction ( Garbage &garbage ) { if (garbage.id == associated_garbage_id) associated_garbage_id = -1; } static int current_texture; static int associated_garbage_id; static int x, y; static bool network_texture; }; #endif crack-attack-1.1.14/src/Sine.h0000644000175000001440000000302710132356545015526 0ustar webbsterusers/* * Sine.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SINE_H #define SINE_H using namespace std; #include "Game.h" /* static */ class Sine { public: static void initialize ( ); static inline float sin ( float x ) { int n = (int) ((x - GC_SINE_TABLE_LOWER_BOUND) * (1.0f / GC_SINE_TABLE_STEP_WIDTH)); if (n < 0) n = 0; if (n > GC_SINE_TABLE_LENGTH - 2) n = GC_SINE_TABLE_LENGTH - 2; float remainder = x - GC_SINE_TABLE_LOWER_BOUND - n * GC_SINE_TABLE_STEP_WIDTH; float estimate = table[n] + (table[n + 1] - table[n]) * remainder * (1.0f / GC_SINE_TABLE_STEP_WIDTH); return estimate; } static float table[GC_SINE_TABLE_LENGTH]; }; #endif crack-attack-1.1.14/src/ScoreRecordManager.cxx0000644000175000001440000001334010132356545020707 0ustar webbsterusers/* * ScoreRecordManager.cxx * Daniel Nelson - 12/8/1 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the complexities of displaying the score record. */ using namespace std; #include "Game.h" #include "Displayer.h" #include "MetaState.h" #include "WinRecord.h" #include "Score.h" #include "Controller.h" #include "ScoreRecordManager.h" int ScoreRecordManager::top_rank; int ScoreRecordManager::top_texture; GLfloat ScoreRecordManager::offset; GLfloat ScoreRecordManager::velocity; bool ScoreRecordManager::spring_active; bool ScoreRecordManager::control_active; bool ScoreRecordManager::ignore_up; bool ScoreRecordManager::ignore_down; void ScoreRecordManager::initialize ( ) { top_rank = 0; top_texture = 0; offset = -DC_SCORE_REC_RANK_HEIGHT / 2.0f; velocity = DC_SCORE_REC_START_VELOCITY; spring_active = false; control_active = false; ignore_up = ignore_down = false; } void ScoreRecordManager::gameFinish_inline_split_ ( ) { Displayer::generateScoreRankTexture(Score::player_rank, Score::score, MetaState::player_name, Displayer::player_rank_texture_data); Displayer::rerankScoreRecord(); glGenTextures(DC_SCORE_REC_NUMBER_DRAW, Displayer::record_textures); for (int n = DC_SCORE_REC_NUMBER_DRAW; n--; ) { glBindTexture(GL_TEXTURE_2D, Displayer::record_textures[n]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); if (Score::player_rank == 0) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, DC_SCORE_REC_TEX_LENGTH_S, DC_LETTER_TEX_LENGTH, GL_FALSE, GL_RGBA, GL_UNSIGNED_BYTE, Displayer::player_rank_texture_data); else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, DC_SCORE_REC_TEX_LENGTH_S, DC_LETTER_TEX_LENGTH, GL_FALSE, GL_RGBA, GL_UNSIGNED_BYTE, Displayer::record_texture_data[0]); } } void ScoreRecordManager::timeStep_inline_split_ ( ) { // bounce off the edges if (control_active) { if (top_rank < DC_SCORE_REC_NUMBER_DRAW / 2 && offset < 0.0f) { offset = -offset; velocity = -DC_SCORE_REC_EDGE_BOUNCE_ELASTICITY * velocity; ignore_up = true; } else if (top_rank > GC_SCORE_REC_LENGTH - 1 + DC_SCORE_REC_NUMBER_DRAW / 2 && offset > 0.0f) { offset = -offset; velocity = -DC_SCORE_REC_EDGE_BOUNCE_ELASTICITY * velocity; ignore_down = true; } } offset += velocity; // switch in a new texture when needed if (offset > DC_SCORE_REC_RANK_HEIGHT / 2.0f) { offset -= DC_SCORE_REC_RANK_HEIGHT; top_rank++; top_texture--; if (top_texture == -1) top_texture = DC_SCORE_REC_NUMBER_DRAW - 1; if (top_rank < GC_SCORE_REC_LENGTH) { glBindTexture(GL_TEXTURE_2D, Displayer::record_textures[top_texture]); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, DC_SCORE_REC_TEX_LENGTH_S, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, chooseTexture(top_rank)); } } else if (offset < -DC_SCORE_REC_RANK_HEIGHT / 2.0f) { offset += DC_SCORE_REC_RANK_HEIGHT; top_rank--; top_texture++; if (top_texture == DC_SCORE_REC_NUMBER_DRAW) top_texture = 0; if (top_rank >= DC_SCORE_REC_NUMBER_DRAW - 1) { int bottom_texture = top_texture - 1; if (bottom_texture == -1) bottom_texture = DC_SCORE_REC_NUMBER_DRAW - 1; glBindTexture(GL_TEXTURE_2D, Displayer::record_textures[bottom_texture]); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, DC_SCORE_REC_TEX_LENGTH_S, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, chooseTexture(top_rank - (DC_SCORE_REC_NUMBER_DRAW - 1))); } } // score record dynamics GLfloat r = offset + DC_SCORE_REC_RANK_HEIGHT * (top_rank - Score::player_rank - DC_SCORE_REC_NUMBER_DRAW / 2); // spring engages if (!spring_active && r > 0.0f && !control_active) spring_active = true; // spring dynamics if (spring_active) { velocity += -DC_SCORE_REC_SPRING * r - DC_SCORE_REC_SPRING_DRAG * velocity; if (fabs(velocity) < DC_SCORE_REC_VELOCITY_CUTOFF && fabs(r) < DC_SCORE_REC_OFFSET_CUTOFF) { velocity = 0.0f; offset = 0.0f; spring_active = false; } } // user gains control if (!control_active && fabs(velocity) < DC_SCORE_REC_CONTROL_VELOCITY_CUTOFF && fabs(r) < DC_SCORE_REC_CONTROL_OFFSET_CUTOFF) control_active = true; // control dynamics if (control_active) { if ((ignore_up || ignore_down) && fabs(velocity) < DC_SCORE_REC_BOUNCE_VELOCITY_CUTOFF) ignore_up = ignore_down = false; if ((Controller::moveCommand() & CC_UP) && !ignore_up) { velocity -= DC_SCORE_REC_CONTROL_VELOCITY; spring_active = false; } if ((Controller::moveCommand() & CC_DOWN) && !ignore_down) { velocity += DC_SCORE_REC_CONTROL_VELOCITY; spring_active = false; } velocity += -DC_SCORE_REC_CONTROL_DRAG * velocity; } } crack-attack-1.1.14/src/MessageManager.cxx0000644000175000001440000000210610132356545020057 0ustar webbsterusers/* * MessageManager.cxx * Daniel Nelson - 10/30/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Not too much to this guy. */ using namespace std; #include "Game.h" #include "MessageManager.h" int MessageManager::message_shape; int MessageManager::time_step; int MessageManager::mode; crack-attack-1.1.14/src/DrawScoreRecord.cxx0000644000175000001440000000660010234004314020216 0ustar webbsterusers/* * DrawScoreRecord.cxx * Daniel Nelson - 12/7/1 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws the messages associated with the score record for solo play. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "ScoreRecordManager.h" #include "Score.h" #include "Sine.h" void Displayer::drawScoreToBeatMessage_inline_split_ ( ) { if (!(MetaState::mode & CM_SOLO) || !(MetaState::state & MS_BOTH_KEY_WAIT)) return; if ((MetaState::mode & CM_AI)) return; glBindTexture(GL_TEXTURE_2D, score_to_beat_texture); glPushMatrix(); glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * 0.4f * GC_SAFE_HEIGHT, DC_PLAY_OFFSET_Z); glScalef(DC_SCORE_TO_BEAT_SCALE, DC_SCORE_TO_BEAT_SCALE, 1.0f); glCallList(message_2x1_list); glPopMatrix(); } void Displayer::drawScoreRecord_inline_split_ ( ) { if (!(MetaState::mode & CM_SOLO) || !(MetaState::state & MS_GAME_OVER_KEY_WAIT) || !WinRecord::won) return; if (MetaState::mode & CM_AI) return; if (Game::time_step < DC_WIN_FADE_TIME) return; glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glPushMatrix(); glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_SCORE_REC_Y_OFFSET, DC_PLAY_OFFSET_Z); glScalef(DC_SCORE_REC_SCALE_X, DC_SCORE_REC_SCALE_Y, 1.0f); for (int n = 0; n < DC_SCORE_REC_NUMBER_DRAW && n <= ScoreRecordManager::top_rank; n++) { if (ScoreRecordManager::top_rank - n >= GC_SCORE_REC_LENGTH) continue; GLfloat y = (((DC_SCORE_REC_NUMBER_DRAW - 1) / 2.0f) - n) * DC_SCORE_REC_RANK_HEIGHT - ScoreRecordManager::offset; GLfloat yt = (y + DC_SCORE_REC_RANK_DRAW_HEIGHT / 2.0f) * (PI / (2.0f * (DC_SCORE_REC_NUMBER_DRAW / 2.0f) * DC_SCORE_REC_RANK_HEIGHT)); GLfloat yb = (y - DC_SCORE_REC_RANK_DRAW_HEIGHT / 2.0f) * (PI / (2.0f * (DC_SCORE_REC_NUMBER_DRAW / 2.0f) * DC_SCORE_REC_RANK_HEIGHT)); GLfloat yt_circle = Sine::sin(yt); GLfloat yb_circle = Sine::sin(yb); int texture = ScoreRecordManager::top_texture + n; if (texture >= DC_SCORE_REC_NUMBER_DRAW) texture -= DC_SCORE_REC_NUMBER_DRAW; glBindTexture(GL_TEXTURE_2D, record_textures[texture]); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, yb_circle, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, yb_circle, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, yt_circle, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, yt_circle, 0.0f); glEnd(); } glPopMatrix(); } crack-attack-1.1.14/src/String.cxx0000644000175000001440000002770110230144462016446 0ustar webbsterusers/* * String.cxx * Daniel Nelson - 11/10/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Holds string display utilities. */ #include #include #include #include "glext.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" #include "String.h" const char *String::letter_texture_files[DC_FONT_NUMBER][DC_LETTER_NUMBER] = { { GC_DATA_DIRECTORY("font0_0.tga"), GC_DATA_DIRECTORY("font0_1.tga"), GC_DATA_DIRECTORY("font0_2.tga"), GC_DATA_DIRECTORY("font0_3.tga"), GC_DATA_DIRECTORY("font0_4.tga"), GC_DATA_DIRECTORY("font0_5.tga"), GC_DATA_DIRECTORY("font0_6.tga"), GC_DATA_DIRECTORY("font0_7.tga"), GC_DATA_DIRECTORY("font0_8.tga"), GC_DATA_DIRECTORY("font0_9.tga"), GC_DATA_DIRECTORY("font0_ca.tga"), GC_DATA_DIRECTORY("font0_cb.tga"), GC_DATA_DIRECTORY("font0_cc.tga"), GC_DATA_DIRECTORY("font0_cd.tga"), GC_DATA_DIRECTORY("font0_ce.tga"), GC_DATA_DIRECTORY("font0_cf.tga"), GC_DATA_DIRECTORY("font0_cg.tga"), GC_DATA_DIRECTORY("font0_ch.tga"), GC_DATA_DIRECTORY("font0_ci.tga"), GC_DATA_DIRECTORY("font0_cj.tga"), GC_DATA_DIRECTORY("font0_ck.tga"), GC_DATA_DIRECTORY("font0_cl.tga"), GC_DATA_DIRECTORY("font0_cm.tga"), GC_DATA_DIRECTORY("font0_cn.tga"), GC_DATA_DIRECTORY("font0_co.tga"), GC_DATA_DIRECTORY("font0_cp.tga"), GC_DATA_DIRECTORY("font0_cq.tga"), GC_DATA_DIRECTORY("font0_cr.tga"), GC_DATA_DIRECTORY("font0_cs.tga"), GC_DATA_DIRECTORY("font0_ct.tga"), GC_DATA_DIRECTORY("font0_cu.tga"), GC_DATA_DIRECTORY("font0_cv.tga"), GC_DATA_DIRECTORY("font0_cw.tga"), GC_DATA_DIRECTORY("font0_cx.tga"), GC_DATA_DIRECTORY("font0_cy.tga"), GC_DATA_DIRECTORY("font0_cz.tga"), GC_DATA_DIRECTORY("font0_a.tga"), GC_DATA_DIRECTORY("font0_b.tga"), GC_DATA_DIRECTORY("font0_c.tga"), GC_DATA_DIRECTORY("font0_d.tga"), GC_DATA_DIRECTORY("font0_e.tga"), GC_DATA_DIRECTORY("font0_f.tga"), GC_DATA_DIRECTORY("font0_g.tga"), GC_DATA_DIRECTORY("font0_h.tga"), GC_DATA_DIRECTORY("font0_i.tga"), GC_DATA_DIRECTORY("font0_j.tga"), GC_DATA_DIRECTORY("font0_k.tga"), GC_DATA_DIRECTORY("font0_l.tga"), GC_DATA_DIRECTORY("font0_m.tga"), GC_DATA_DIRECTORY("font0_n.tga"), GC_DATA_DIRECTORY("font0_o.tga"), GC_DATA_DIRECTORY("font0_p.tga"), GC_DATA_DIRECTORY("font0_q.tga"), GC_DATA_DIRECTORY("font0_r.tga"), GC_DATA_DIRECTORY("font0_s.tga"), GC_DATA_DIRECTORY("font0_t.tga"), GC_DATA_DIRECTORY("font0_u.tga"), GC_DATA_DIRECTORY("font0_v.tga"), GC_DATA_DIRECTORY("font0_w.tga"), GC_DATA_DIRECTORY("font0_x.tga"), GC_DATA_DIRECTORY("font0_y.tga"), GC_DATA_DIRECTORY("font0_z.tga"), GC_DATA_DIRECTORY("font0_mn.tga"), GC_DATA_DIRECTORY("font0_cln.tga"), GC_DATA_DIRECTORY("font0_pe.tga"), GC_DATA_DIRECTORY("font0_cma.tga"), GC_DATA_DIRECTORY("font0_ep.tga"), GC_DATA_DIRECTORY("font0_at.tga"), GC_DATA_DIRECTORY("font0_td.tga"), GC_DATA_DIRECTORY("font0_pd.tga"), GC_DATA_DIRECTORY("font0_ds.tga"), GC_DATA_DIRECTORY("font0_ps.tga"), GC_DATA_DIRECTORY("font0_and.tga"), GC_DATA_DIRECTORY("font0_pl.tga"), GC_DATA_DIRECTORY("font0_pr.tga"), GC_DATA_DIRECTORY("font0_sl.tga"), GC_DATA_DIRECTORY("font0_lt.tga"), GC_DATA_DIRECTORY("font0_gt.tga"), GC_DATA_DIRECTORY("font0_qm.tga"), GC_DATA_DIRECTORY("font0_eq.tga"), GC_DATA_DIRECTORY("font0_pu.tga"), GC_DATA_DIRECTORY("font0_br.tga"), GC_DATA_DIRECTORY("font0_za.tga"), GC_DATA_DIRECTORY("font0_zb.tga"), GC_DATA_DIRECTORY("font0_zc.tga"), GC_DATA_DIRECTORY("font0_zd.tga") } }; const char String::letter_mapping[DC_LETTER_NUMBER] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '-', ':', '.', ',', '!', '@', '~', '#', '$', '%', '&', '(', ')', '/', '<', '>', '?', '=', '+', '|', ';', '[', '*', ']' }; const int String::letter_widths[DC_FONT_NUMBER][DC_LETTER_NUMBER] = { { 20, 12, 17, 14, 16, 15, 16, 19, 17, 16, 28, 20, 17, 20, 18, 20, 20, 19, 11, 17, 19, 17, 30, 20, 20, 21, 22, 22, 16, 21, 20, 20, 30, 25, 22, 19, 19, 14, 13, 14, 13, 14, 15, 14, 8, 12, 14, 12, 22, 15, 14, 14, 16, 16, 12, 15, 14, 15, 22, 18, 17, 13, 20, 12, 11, 10, 11, 21, 23, 23, 18, 19, 20, 12, 13, 18, 16, 16, 17, 20, 23, 16, 22, 22, 16, 22 } }; const float String::colors[DC_FONT_COLOR_NUMBER][3] = { { 0.2f, 0.2f, 1.0f }, { 1.0f, 0.1f, 0.1f }, { 0.1f, 1.0f, 0.1f }, { 0.8f, 0.8f, 0.1f }, { 0.9f, 0.0f, 0.9f }, { 0.1f, 0.8f, 0.8f }, { 0.9f, 0.3f, 0.1f }, { 1.0f, 0.5f, 0.5f }, { 0.4f, 0.0f, 1.0f }, { 0.1f, 0.1f, 0.1f } }; GLubyte *String::letter_textures[DC_FONT_NUMBER][DC_LETTER_NUMBER]; int String::mapCharToCode ( char c ) { int code = -1; for (int n = DC_LETTER_NUMBER; n--; ) if (c == letter_mapping[n]) { code = n; break; } return code; } int String::stringWidth ( const char *string, int max_width ) /* * Determines the pixel width of a string. */ { int length = 0; int font = 0; for (unsigned int n = 0; n < strlen(string) && length < max_width; n++) { if (string[n] == '~') { switch (string[++n]) { case '<': if (length >= DC_BACK_SPACE_WIDTH) length -= DC_BACK_SPACE_WIDTH; break; case '>': length += DC_BACK_SPACE_WIDTH; break; default: int c = string[n] - 'a'; if (c >= 0 && c < DC_FONT_NUMBER) font = c; break; } if (string[n] != '~') continue; } else if (string[n] == ' ') { length += DC_SPACE_WIDTH; continue; } int code = mapCharToCode(string[n]); if (code != -1) { if (length + letter_widths[font][code] > max_width) break; length += letter_widths[font][code]; } } return length; } void String::readyLetterTextures ( ) { for (int n = DC_FONT_NUMBER; n--; ) for (int m = DC_LETTER_NUMBER; m--; ) letter_textures[n][m] = TextureLoader::loadAlphaTGA(letter_texture_files[n][m], DC_LETTER_TEX_LENGTH, DC_LETTER_TEX_LENGTH); } void String::freeLetterTextures ( ) { for (int n = DC_FONT_NUMBER; n--; ) for (int m = DC_LETTER_NUMBER; m--; ) if (letter_textures[n][m] != null) { delete [] letter_textures[n][m]; letter_textures[n][m] = null; } } void String::fillStringTexture ( const char *string, GLubyte *texture, int width, bool use_alpha, int texture_width ) /* * Fills the memory space pointed to by texture with a string texture. The * texture height must equal DC_LETTER_TEX_LENGTH. readyLetterTextures() must * be called first, and freeLetterTextures() must be called after this * function's final use. */ { if (texture_width == 0) texture_width = width; // initialize texture if (!use_alpha) for (int t = DC_LETTER_TEX_LENGTH; t--; ) for (int s = width; s--; ) { texture[(t * texture_width + s) * 4 + 0] = 0; texture[(t * texture_width + s) * 4 + 1] = 0; texture[(t * texture_width + s) * 4 + 2] = 0; texture[(t * texture_width + s) * 4 + 3] = 255; } int cursor = 0; int font = 0; int base_color = DC_DEFAULT_FONT_COLOR; for (unsigned int n = 0; n < strlen(string) && cursor < width; n++) { // special cases if (string[n] == '~') { switch (string[++n]) { case '<': if (cursor > DC_BACK_SPACE_WIDTH) cursor -= DC_BACK_SPACE_WIDTH; else cursor = 0; break; case '>': cursor += DC_BACK_SPACE_WIDTH; break; default: // color change if (isdigit(string[n])) { int c = string[n] - '0'; if (c < DC_FONT_COLOR_NUMBER) base_color = c; // font change } else { int c = string[n] - 'a'; if (c >= 0 && c < DC_FONT_NUMBER) font = c; } break; } if (string[n] != '~') continue; } else if (string[n] == ' ') { cursor += DC_SPACE_WIDTH; continue; } int code = mapCharToCode(string[n]); if (code == -1) continue; if (cursor + letter_widths[font][code] > width) break; // copy letter if (!use_alpha) for (int t = DC_LETTER_TEX_LENGTH; t--; ) for (int s = DC_LETTER_TEX_LENGTH; s--; ) { if (cursor + s >= width) continue; float alpha = letter_textures[font][code][t * DC_LETTER_TEX_LENGTH + s] * (1.0f / 255.0f); for (int c = 3; c--; ) { float color = colors[base_color][c] + (1.0f - colors[base_color][c]) * (DC_LETTER_TEX_LENGTH - t + (s >= letter_widths[font][code] ? DC_LETTER_TEX_LENGTH : s + (DC_LETTER_TEX_LENGTH - letter_widths[font][code]))) * (0.5f / (float) DC_LETTER_TEX_LENGTH); float result = (255.0f * color * alpha) + texture[(t * texture_width + cursor + s) * 4 + c]; if (result >= 255.0f) texture[(t * texture_width + cursor + s) * 4 + c] = (GLubyte) 255; else texture[(t * texture_width + cursor + s) * 4 + c] = (GLubyte) result; } } else for (int t = DC_LETTER_TEX_LENGTH; t--; ) for (int s = DC_LETTER_TEX_LENGTH; s--; ) { if (cursor + s >= width) continue; if (letter_textures[font][code][t * DC_LETTER_TEX_LENGTH + s] == 0) continue; int old_alpha = texture[(t * texture_width + cursor + s) * 4 + 3]; int new_alpha = letter_textures[font][code][t * DC_LETTER_TEX_LENGTH + s]; if (new_alpha + old_alpha >= 255) texture[(t * texture_width + cursor + s) * 4 + 3] = 255; else texture[(t * texture_width + cursor + s) * 4 + 3] = (GLubyte) (new_alpha + old_alpha); for (int c = 3; c--; ) { float color = colors[base_color][c] + (1.0f - colors[base_color][c]) * (DC_LETTER_TEX_LENGTH - t + (s >= letter_widths[font][code] ? DC_LETTER_TEX_LENGTH : s + (DC_LETTER_TEX_LENGTH - letter_widths[font][code]))) * (0.5f / (float) DC_LETTER_TEX_LENGTH); float result = (255.0f * color) + (old_alpha * (1.0f / 255.0f)) * texture[(t * texture_width + cursor + s) * 4 + c]; if (result >= 255.0f) texture[(t * texture_width + cursor + s) * 4 + c] = 255; else texture[(t * texture_width + cursor + s) * 4 + c] = (GLubyte) result; } } cursor += letter_widths[font][code]; } } crack-attack-1.1.14/src/Garbage.h0000644000175000001440000000761710230144462016161 0ustar webbsterusers/* * Garbage.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef GARBAGE_H #define GARBAGE_H #include #include "glext.h" using namespace std; // flavor of garbage #define GF_NORMAL (0) #define GF_GRAY (1) // hard to destroy #define GF_BLACK (2) // very hard to destroy #define GF_WHITE (3) // crazy lights #define GF_COLOR_1 (4) // sprinkling of 1x1's #define GF_COLOR_2 (5) // shatters to normal garbage #define GF_COLOR_3 (6) // invisible swapper #define GF_COLOR_4 (7) // reverse controls #define GF_COLOR_5 (8) // tall garbage #define GF_NUMBER (9) // flavor effects #define GF_SHATTER_TO_NORMAL_GARBAGE (GF_COLOR_2) #define GF_REVERSE_CONTROLS (GF_COLOR_4) #define GF_INVISIBLE_SWAPPER (GF_COLOR_3) #define GF_CRAZY_LIGHTS (GF_WHITE) // states of garbage #define GS_STATIC (1 << 0) #define GS_FALLING (1 << 1) #define GS_AWAKING (1 << 2) #define GS_SHATTERING (1 << 3) class ComboTabulator; class Garbage { public: void initializeStatic ( int _x, int _y, int _height, int _width, int _flavor ); void initializeFalling ( int _x, int _y, int _height, int _width, int _flavor ); void initializeAwaking ( int _x, int _y, int _height, int pop_delay, int awake_delay, ComboTabulator *combo, int _pop_color ); void timeStep ( int &l_x, int &l_y ); void startFalling ( ComboTabulator *combo = NULL, bool no_hang = false, bool self_call = false ); void startShattering ( int &s_x, int s_y, int &pop_delay, int awake_delay, ComboTabulator *combo ); bool considerShattering ( Garbage *due_to ) /* * The grid is asking us if we should shatter due to the fact that our * neighbor - due_to - is shattering. If due_to is null, we are shattering * because of a neighboring elimination. Parts of the black garbage * algorithm are handled in Grid.cxx */ { if (!due_to) return true; if (flavor == GF_GRAY) if (due_to->flavor == GF_GRAY) return true; else return false; if (flavor == GF_BLACK) if (due_to->flavor == GF_BLACK) return true; else return false; if (due_to->flavor == GF_GRAY) return false; else return true; } // free store id int id; // block type int flavor; // grid position int x, y; // garbage dimensions int height, width; // find position control; GC_STEPS_PER_GRID number of increments per grid int f_y; // garbage state int state; // time until awakening int alarm; // number of sections popped in awaking garbage int sections_popped; // true if we're in an initial fall bool initial_fall; // next direction of rotation upon popping int pop_direction; // time until pop int pop_alarm; // the block color before popping int pop_color; private: // combo to pass on upon awakening ComboTabulator *awaking_combo; }; #endif crack-attack-1.1.14/src/DrawBlocks.cxx0000644000175000001440000003101110230144462017220 0ustar webbsterusers/* * DrawBlocks.cxx * Daniel Nelson - 8/31/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handle's the displaying of the blocks. */ #include #include // FIXME: may actually need GL/glext.h #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "Creep.h" #include "Block.h" #include "BlockManager.h" #include "LightManager.h" #include "Swapper.h" #include "X.h" const GLfloat Displayer::block_colors[BF_NUMBER][3] = { { 0.73f, 0.0f, 0.73f }, // purple { 0.2f, 0.2f, 0.8f }, // blue { 0.0f, 0.6f, 0.05f }, // green { 0.85f, 0.85f, 0.0f }, // yellow { 1.0f, 0.4f, 0.0f }, // orange { 1.0f, 0.0f, 0.0f }, // wild { 0.4f, 0.4f, 0.4f }, // gray { 0.05f, 0.05f, 0.05f }, // black { 0.95f, 0.95f, 0.95f }, // white { 2.0f * 0.73f, 2.0f * 0.0f, 2.0f * 0.73f }, // special purple { 2.0f * 0.2f, 2.0f * 0.2f, 2.0f * 0.8f }, // special blue { 2.0f * 0.0f, 2.0f * 0.6f, 2.0f * 0.05f }, // special green { 2.0f * 0.85f, 2.0f * 0.85f, 2.0f * 0.0f }, // special yellow { 2.0f * 1.0f, 2.0f * 0.4f, 2.0f * 0.0f } }; // special orange const GLfloat creep_colors[BF_NUMBER][3] = { { 0.25f * 0.73f, 0.25f * 0.0f, 0.25f * 0.73f }, // purple { 0.25f * 0.2f, 0.25f * 0.2f, 0.25f * 0.8f }, // blue { 0.25f * 0.0f, 0.25f * 0.6f, 0.25f * 0.05f }, // green { 0.25f * 0.85f, 0.25f * 0.85f, 0.25f * 0.0f }, // yellow { 0.25f * 1.0f, 0.25f * 0.4f, 0.25f * 0.0f }, // orange { 0.25f * 1.0f, 0.25f * 0.0f, 0.25f * 0.0f }, // wild { 0.25f * 0.4f, 0.25f * 0.4f, 0.25f * 0.4f }, // gray { 0.25f * 0.05f, 0.25f * 0.05f, 0.25f * 0.05f }, // black { 0.25f * 0.95f, 0.25f * 0.95f, 0.25f * 0.95f }, // white { 0.5f * 0.73f, 0.5f * 0.0f, 0.5f * 0.73f }, // special purple { 0.5f * 0.2f, 0.5f * 0.2f, 0.5f * 0.8f }, // special blue { 0.5f * 0.0f, 0.5f * 0.6f, 0.5f * 0.05f }, // special green { 0.5f * 0.85f, 0.5f * 0.85f, 0.5f * 0.0f }, // special yellow { 0.5f * 1.0f, 0.5f * 0.4f, 0.5f * 0.0f } }; // special orange void Displayer::setWildBlockColor ( Block &block, float flash ) { Wild &wild = X::wild(block); if (wild.alarm < GC_WILD_POLYMORPH_PERIOD) { GLfloat fade = wild.alarm * (1.0f / (GLfloat) GC_WILD_POLYMORPH_PERIOD); int next_color; if (wild.flavor != BF_NORMAL_1) next_color = wild.flavor - 1; else next_color = BF_WILD; GLfloat color[3]; if (block.y != 0) { color[0] = fade * block_colors[wild.flavor][0] + (1.0f - fade) * block_colors[next_color][0]; color[1] = fade * block_colors[wild.flavor][1] + (1.0f - fade) * block_colors[next_color][1]; color[2] = fade * block_colors[wild.flavor][2] + (1.0f - fade) * block_colors[next_color][2]; } else { color[0] = fade * creep_colors[wild.flavor][0] + (1.0f - fade) * creep_colors[next_color][0]; color[1] = fade * creep_colors[wild.flavor][1] + (1.0f - fade) * creep_colors[next_color][1]; color[2] = fade * creep_colors[wild.flavor][2] + (1.0f - fade) * creep_colors[next_color][2]; } glColor3f(color[0] + flash * (DC_FLASH_COLOR_RED - color[0]), color[1] + flash * (DC_FLASH_COLOR_GREEN - color[1]), color[2] + flash * (DC_FLASH_COLOR_BLUE - color[2])); } else if (block.y != 0) glColor3f(block_colors[wild.flavor][0] + flash * (DC_FLASH_COLOR_RED - block_colors[wild.flavor][0]), block_colors[wild.flavor][1] + flash * (DC_FLASH_COLOR_GREEN - block_colors[wild.flavor][1]), block_colors[wild.flavor][2] + flash * (DC_FLASH_COLOR_BLUE - block_colors[wild.flavor][2])); else glColor3f(creep_colors[wild.flavor][0] + flash * (DC_FLASH_COLOR_RED - creep_colors[wild.flavor][0]), creep_colors[wild.flavor][1] + flash * (DC_FLASH_COLOR_GREEN - creep_colors[wild.flavor][1]), creep_colors[wild.flavor][2] + flash * (DC_FLASH_COLOR_BLUE - creep_colors[wild.flavor][2])); } void Displayer::drawBlocks ( ) { glColorMaterial(GL_FRONT, GL_DIFFUSE); // GL_FRONT_AND_BACK because the garbage uses these material properties // also and I don't think it hurts with cull face on. GLfloat color[4]; color[0] = 0.0f; color[1] = 0.0f; color[2] = 0.0f; color[3] = 1.0f; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color); color[0] = 0.5f; color[1] = 0.5f; color[2] = 0.5f; color[3] = 1.0f; glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color); color[0] = 0.0f; color[1] = 0.0f; color[2] = 0.0f; color[3] = 1.0f; glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 10.0f); // First we'll draw the non-special color blocks. int c = BlockManager::block_count; for (int n = 0; c; n++) if (BlockManager::storeMap[n]) { Block &block = BlockManager::blockStore[n]; c--; if (BlockManager::isSpecialColorFlavor(block.flavor)) continue; if (block.y > GC_SAFE_HEIGHT) continue; drawBlock(block, false); } if (!X::specialColorActive()) return; // Then we set things up for special color blocks and draw them. if (opengl_version_1_2) glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); glEnable(GL_TEXTURE_1D); glBindTexture(GL_TEXTURE_1D, special_block_lightmap); c = X::special_color_count; for (int n = 0; c; n++) if (BlockManager::storeMap[n]) { Block &block = BlockManager::blockStore[n]; if (!BlockManager::isSpecialColorFlavor(block.flavor)) continue; c--; glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(((Game::time_step + block.X) & (DC_GLEAM_PERIOD - 1)) * (1.0f / (GLfloat) DC_GLEAM_PERIOD), 0.0f, 0.0f); glRotatef(DC_GLEAM_ROTATION_RATE * (Game::time_step + block.X), DC_GLEAM_ROTATION_AXIS_X, DC_GLEAM_ROTATION_AXIS_Y, DC_GLEAM_ROTATION_AXIS_Z); glMatrixMode(GL_MODELVIEW); drawBlock(block, true); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } glDisable(GL_TEXTURE_1D); if (opengl_version_1_2) glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); } inline void Displayer::drawBlock ( Block &block, bool special ) { GLfloat x, y; GLfloat d_x; glPushMatrix(); y = block.y * DC_GRID_ELEMENT_LENGTH + block.f_y * (DC_GRID_ELEMENT_LENGTH / (GLfloat) GC_STEPS_PER_GRID) + play_offset_y; // normal if (block.state & (BS_STATIC | BS_FALLING)) { x = block.x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X; if (block.flavor != BF_WILD) if (block.y != 0) glColor3fv(block_colors[block.flavor]); else glColor3fv(creep_colors[block.flavor]); else setWildBlockColor(block, 0.0f); LightManager::setupBlockLights(x, y); glTranslatef(x, y, DC_PLAY_OFFSET_Z); if (!special) glCallList(block_list); else glCallList(special_block_list); // awaking and popping } else if (block.state & BS_AWAKING) { x = block.x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X; LightManager::setupBlockLights(x, y); glTranslatef(x, y, DC_PLAY_OFFSET_Z); // if we haven't popped yet if (block.pop_alarm != 0) { // if we're just about to pop if (block.pop_alarm - Game::time_step < DC_POP_ROTATE_TIME) { GLfloat p = (block.pop_alarm - Game::time_step) * (1.0f / (GLfloat) DC_POP_ROTATE_TIME); // each block rotates a different direction if (block.pop_direction & BR_DIRECTION_1) { glRotatef(45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(45.0f * p, 0.0f, 1.0f, 0.0f); } else if (block.pop_direction & BR_DIRECTION_2) { glRotatef(90.0f - 45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(45.0f * p, 0.0f, 1.0f, 0.0f); } else if (block.pop_direction & BR_DIRECTION_3) { glRotatef(90.0f - 45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(-45.0f * p, 0.0f, 1.0f, 0.0f); } else { glRotatef(45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(-45.0f * p, 0.0f, 1.0f, 0.0f); } GLfloat scale = 1.0f - 0.5f * p; glScalef(scale, scale, scale); glColor3f( (1.0f - p) * block_colors[block.flavor][0] + p * garbage_colors[block.pop_color][0], (1.0f - p) * block_colors[block.flavor][1] + p * garbage_colors[block.pop_color][1], (1.0f - p) * block_colors[block.flavor][2] + p * garbage_colors[block.pop_color][2]); glEnable(rescale_method); glCallList(block_list); glDisable(rescale_method); // if we're not popping } else { glColor3fv(garbage_colors[block.pop_color]); // the small block is pre-rotated glCallList(small_block_list); } // if we've already popped } else { glColor3fv(block_colors[block.flavor]); glCallList(block_list); } // swapping } else if (block.state & BS_SWAPPING) { x = block.x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X; if (block.state & BS_SWAP_DIRECTION_MASK) { LightManager::setupBlockLights(x + Swapper::swap_factor * DC_GRID_ELEMENT_LENGTH, y); d_x = -DC_GRID_ELEMENT_LENGTH / 2.0f; } else { LightManager::setupBlockLights(x - Swapper::swap_factor * DC_GRID_ELEMENT_LENGTH, y); d_x = DC_GRID_ELEMENT_LENGTH / 2.0f; } if (block.flavor != BF_WILD) glColor3fv(block_colors[block.flavor]); else setWildBlockColor(block, 0.0f); glTranslatef(x - d_x, y, DC_PLAY_OFFSET_Z); glRotatef(-180.0f * (1.0f - Swapper::swap_factor), 0.0f, 1.0f, 0.0f); glTranslatef(d_x, 0.0f, 0.0f); if (!special) glCallList(block_list); else glCallList(special_block_list); // dying } else if (block.state & BS_DYING) { x = block.x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X; // when dying, first we flash if (GC_DYING_DELAY - block.alarm < DC_DYING_FLASH_TIME) { GLfloat flash = ((GLfloat) GC_DYING_DELAY - block.alarm) * (4.0f / (GLfloat) DC_DYING_FLASH_TIME); if (flash > 2.0f) flash = 4.0f - flash; if (flash > 1.0f) flash = 2.0f - flash; if (block.flavor != BF_WILD) glColor3f(block_colors[block.flavor][0] + flash * (DC_FLASH_COLOR_RED - block_colors[block.flavor][0]), block_colors[block.flavor][1] + flash * (DC_FLASH_COLOR_GREEN - block_colors[block.flavor][1]), block_colors[block.flavor][2] + flash * (DC_FLASH_COLOR_BLUE - block_colors[block.flavor][2])); else setWildBlockColor(block, flash); LightManager::setupBlockLights(x, y); glTranslatef(x, y, DC_PLAY_OFFSET_Z); if (!special) glCallList(block_list); else glCallList(special_block_list); // then we shrink and spin } else { if (block.flavor != BF_WILD) glColor3fv(block_colors[block.flavor]); else setWildBlockColor(block, 0.0f); LightManager::setupBlockLights(x, y); glTranslatef(x, y, DC_PLAY_OFFSET_Z); glRotatef((GC_DYING_DELAY - DC_DYING_FLASH_TIME - block.alarm) * (GC_DYING_DELAY - DC_DYING_FLASH_TIME - block.alarm) * DC_DYING_ROTATE_SPEED, block.axis_x, block.axis_y, 0.0f); GLfloat scale = block.alarm * DC_DYING_SHRINK_SPEED + DC_DYING_SHRINK_MIN_SIZE; glScalef(scale, scale, scale); glEnable(rescale_method); if (!special) glCallList(block_list); else glCallList(special_block_list); glDisable(rescale_method); } } glPopMatrix(); } crack-attack-1.1.14/src/WinRecord.cxx0000644000175000001440000001517210230144462017073 0ustar webbsterusers/* * WinRecord.cxx * Daniel Nelson - 10/22/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the win/loss record. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "WinRecord.h" #include "Displayer.h" #include "Random.h" int WinRecord::current_game; bool WinRecord::won; bool WinRecord::concession; int WinRecord::games_won; int WinRecord::games_lost; int WinRecord::record[GC_GAMES_PER_MATCH]; Star WinRecord::stars[GC_GAMES_PER_MATCH]; int WinRecord::dynamic_star; int WinRecord::displaced_star; GLfloat WinRecord::win_star_x; GLfloat WinRecord::win_star_y; GLfloat WinRecord::win_star_v_x; GLfloat WinRecord::win_star_v_y; GLfloat WinRecord::old_star_a; GLfloat WinRecord::old_star_size; bool WinRecord::draw_old_star; void WinRecord::initialize ( ) { for (int n = GC_GAMES_PER_MATCH; n--; ) record[n] = GR_NOT_PLAYED; current_game = -1; concession = false; games_won = 0; games_lost = 0; dynamic_star = -1; displaced_star = -1; for (int n = GC_GAMES_PER_MATCH; n--; ) stars[n].a = 0.0f; } void WinRecord::gameStart ( ) { if (MetaState::mode & CM_SOLO) current_game = 1; else current_game++; record[current_game] = GR_BEING_PLAYED; } void WinRecord::gameWon ( ) { won = true; games_won++; record[current_game] = GR_WON; if (MetaState::mode & CM_REALLY_LOW_GRAPHICS) { // The star will disappear and pop into existance in the play area. After a // few moments, it will fly to it's original location. // record star's old location; for a time, two stars will be drawn, as one // pops in and the other pops away draw_old_star = true; old_star_a = stars[current_game].a; old_star_size = 5.0f; // displace the star into the play area and set it's starting parameters displaced_star = current_game; stars[current_game].a = DC_STAR_WIN_MIN_ANGULAR_DEVIATION + DC_STAR_WIN_SPREAD_ANGULAR_DEVIATION * Random::number(); if (Random::chanceIn2(2)) stars[current_game].a = -stars[current_game].a; stars[current_game].v_a = 0.0f; stars[current_game].size = 0.0f; stars[current_game].v_size = 0.0f; win_star_x = (-DC_LEFT_EXTERNAL_CENTER + DC_STAR_DISPLACEMENT * (GC_GAMES_PER_MATCH - 1) / 2.0f + DC_STAR_WIN_OFFSET_X) - DC_STAR_DISPLACEMENT * current_game; if (MetaState::mode & CM_SOLO) win_star_y = -DC_STAR_OFFSET_Y + DC_STAR_WIN_SOLO_OFFSET_Y; else win_star_y = -DC_STAR_OFFSET_Y + DC_STAR_WIN_OFFSET_Y; // set the kick velocity; choice of two aesthetically pleasing preset values // or, for variety, a random 270 degree arc switch (Random::number(3)) { case 0: win_star_v_x = DC_STAR_WIN_PRESET_1_VELOCITY_X; win_star_v_y = DC_STAR_WIN_PRESET_1_VELOCITY_Y; break; case 1: win_star_v_x = DC_STAR_WIN_PRESET_2_VELOCITY_X; win_star_v_y = DC_STAR_WIN_PRESET_2_VELOCITY_Y; break; default: // too infrequent to warrent a random direction table float v = DC_STAR_WIN_MIN_VELOCITY + DC_STAR_WIN_SPREAD_VELOCITY * Random::number(); float angle = Random::number() * (3.0f * PI / 2.0f) - (PI / 2.0f); win_star_v_x = v * cos(angle); win_star_v_y = v * sin(angle); break; } } } void WinRecord::gameLoss ( ) { won = false; games_lost++; record[current_game] = GR_LOST; } void WinRecord::timeStep ( ) { for (int n = GC_GAMES_PER_MATCH; n--; ) { Star &star = stars[n]; switch (record[n]) { // game being played case GR_BEING_PLAYED: if (Game::time_step >= GC_START_PAUSE_DELAY) star.a += DC_STAR_PLAY_ANGULAR_VELOCITY; else star.a += Game::time_step * (DC_STAR_PLAY_ANGULAR_VELOCITY / (float) GC_START_PAUSE_DELAY); break; // game has been lost case GR_LOST: if (current_game == n && Game::time_step < DC_CELEBRATION_TIME) star.a += (DC_CELEBRATION_TIME - Game::time_step) * (DC_STAR_PLAY_ANGULAR_VELOCITY / (float) DC_CELEBRATION_TIME); break; // game has been won case GR_WON: // wait for win message to hit before dynamics if (current_game != n || Game::time_step > DC_WIN_FADE_TIME) { star.size += star.v_size; if (star.size < 0.0f) star.size = 0.0f; star.v_size += -DC_STAR_WIN_SIZE_DRAG * star.v_size - DC_STAR_WIN_SIZE_SPRING * (star.size - DC_STAR_SIZE_EQUILIBRIUM); if (fabs(star.v_size) < DC_STAR_WIN_SIZE_EPSILON && Random::chanceIn(DC_STAR_WIN_SIZE_PULSE_CHANCE_IN)) star.v_size += DC_STAR_WIN_SIZE_PULSE_VELOCITY * Random::number(); star.v_a += -DC_STAR_WIN_ANGULAR_SPRING * star.a; star.a += star.v_a; // begin motion if (Game::time_step == DC_WIN_FADE_TIME + DC_STAR_WIN_KICK_DELAY && current_game == n) { displaced_star = -1; dynamic_star = n; } // if we're dynamic; if (dynamic_star == n) { win_star_x += win_star_v_x; win_star_y += win_star_v_y; win_star_v_x += -DC_STAR_WIN_SPRING * win_star_x - DC_STAR_WIN_DRAG * win_star_v_x; win_star_v_y += -DC_STAR_WIN_SPRING * win_star_y - DC_STAR_WIN_DRAG * win_star_v_y; // if we're there, stop being dynamic if (fabs(win_star_v_x) < DC_STAR_WIN_VELOCITY_EPSILON && fabs(win_star_v_y) < DC_STAR_WIN_VELOCITY_EPSILON && fabs(win_star_x) < DC_STAR_WIN_EPSILON && fabs(win_star_y) < DC_STAR_WIN_EPSILON) dynamic_star = -1; } } // shrink the old star as the new one apears if (draw_old_star && current_game == n) { if (star.size < DC_STAR_SIZE_EQUILIBRIUM) { old_star_size = DC_STAR_SIZE_EQUILIBRIUM - star.size; old_star_a += DC_STAR_PLAY_ANGULAR_VELOCITY; } else draw_old_star = false; } break; } } } crack-attack-1.1.14/src/DrawMessages.cxx0000644000175000001440000001304210230144462017556 0ustar webbsterusers/* * DrawMessages.cxx * Daniel Nelson - 10/27/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws various messages. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "Communicator.h" #include "CelebrationManager.h" #include "MessageManager.h" #include "WinRecord.h" void Displayer::readyMessage ( int message ) /* * Ready the message texture for displaying. Note that messages and the count * down use the same texture. Thus, both can not be active at once. */ { glGenTextures(1, &message_texture); glBindTexture(GL_TEXTURE_2D, message_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, message_width[message], message_height[message], GL_FALSE, GL_ALPHA, GL_UNSIGNED_BYTE, message_texture_data[message]); } void Displayer::nextMessage ( int message ) /* * Replace the current message texture. Note that it is assumed that the * caller knows what's going on as far as message texture sizes. Thus, changing * the message texture sizes may break code. */ { glBindTexture(GL_TEXTURE_2D, message_texture); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, message_width[message], message_height[message], GL_ALPHA, GL_UNSIGNED_BYTE, message_texture_data[message]); } void Displayer::freeMessage ( ) /* * Deallocate the message texture. */ { glDeleteTextures(1, &message_texture); } void Displayer::drawMessage ( ) { glBindTexture(GL_TEXTURE_2D, message_texture); glPushMatrix(); // normal message if (MessageManager::mode & MM_NORMAL) { glColor4f(1.0f, 1.0f, 1.0f, message_alpha[MessageManager::time_step]); if ((MetaState::mode & CM_SOLO) && (MetaState::state & MS_BOTH_KEY_WAIT)) glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * 2.0f * GC_SAFE_HEIGHT / 3.0f, DC_PLAY_OFFSET_Z); else glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * GC_SAFE_HEIGHT / 2.0f, DC_PLAY_OFFSET_Z); glScalef(DC_MESSAGE_SCALE, DC_MESSAGE_SCALE, 1.0f); if (MessageManager::message_shape & MS_1x1) glCallList(message_1x1_list); else if (MessageManager::message_shape & MS_2x1) glCallList(message_2x1_list); else glCallList(message_4x1_list); // win/loss message } else { // if we won if (WinRecord::won) { GLfloat color[4]; color[0] = DC_WIN_MESSAGE_RED; color[1] = DC_WIN_MESSAGE_GREEN; color[2] = DC_WIN_MESSAGE_BLUE; if (CelebrationManager::win_alpha == 1.0f) color[3] = 1.0f; else { color[3] = CelebrationManager::win_alpha * CelebrationManager::win_alpha; color[3] *= color[3]; } if (CelebrationManager::win_flash1) { GLfloat flash = CelebrationManager::win_flash1 * (2.0f / (GLfloat) DC_WIN_FLASH_1_TIME); if (flash > 1.0f) flash = 2.0f - flash; flash *= flash; color[1] += (1.0f - DC_WIN_MESSAGE_GREEN) * flash; color[2] += (1.0f - DC_WIN_MESSAGE_BLUE) * flash; } if (CelebrationManager::win_flash2) { GLfloat flash = CelebrationManager::win_flash2 * (2.0f / (GLfloat) DC_WIN_FLASH_2_TIME); if (flash > 1.0f) flash = 2.0f - flash; flash *= flash; color[1] -= (1.0f - DC_WIN_MESSAGE_GREEN) * flash; color[2] += (1.0f - DC_WIN_MESSAGE_BLUE) * flash; } glColor4fv(color); if (MetaState::mode & CM_SOLO) glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * 0.75f * GC_SAFE_HEIGHT, DC_PLAY_OFFSET_Z); else glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * GC_SAFE_HEIGHT / 2.0f, DC_PLAY_OFFSET_Z); glScalef(CelebrationManager::win_scale * DC_MESSAGE_SCALE, CelebrationManager::win_scale * DC_MESSAGE_SCALE, 1.0f); glCallList(message_1x1_list); // if we lost } else { glColor3f(DC_LOSS_MESSAGE_RED, DC_LOSS_MESSAGE_GREEN, DC_LOSS_MESSAGE_BLUE); glTranslatef(0.0f, CelebrationManager::loss_height + (DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * GC_SAFE_HEIGHT / 2.0f), DC_PLAY_OFFSET_Z); if (!CelebrationManager::loss_rescale) glScalef(DC_MESSAGE_SCALE, DC_MESSAGE_SCALE, 1.0f); else glScalef(DC_MESSAGE_SCALE * DC_GAME_OVER_SCALE_RATIO, DC_MESSAGE_SCALE * DC_GAME_OVER_SCALE_RATIO, 1.0f); glCallList(message_1x1_list); } } glPopMatrix(); } crack-attack-1.1.14/src/CelebrationManager.h0000644000175000001440000000326710230144462020350 0ustar webbsterusers/* * CelebrationManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef CELEBRATIONMANAGER_H #define CELEBRATIONMANAGER_H #include #include "glext.h" using namespace std; #include "Displayer.h" /* static */ class CelebrationManager { public: static inline void initialize ( ) { draw_game = false; light_level = 1.0f; } static void gameFinish ( ); static void celebrationFinish ( ); static void timeStep ( ); static bool draw_game; static GLfloat light_level; // celebration display variables static int spark_rate[DC_CSPARK_SOURCE_NUMBER]; static int spark_color[DC_CSPARK_SOURCE_NUMBER]; static float win_alpha; static float win_scale; static int win_flash1; static int win_flash2; static float loss_height; static float loss_velocity; static bool loss_rescale; static int loss_bounce_count; }; #endif crack-attack-1.1.14/src/Clock.h0000644000175000001440000000366710132356545015675 0ustar webbsterusers/* * Clock.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef CLOCK_H #define CLOCK_H using namespace std; #include "Game.h" /* static */ class Clock { public: static void gameStart ( ); static inline void timeStepPlay ( ) { if (++tick != GC_STEPS_PER_SECOND) return; tick = 0; previous_digits[0] = digits[0]; previous_digits[1] = digits[1]; previous_digits[2] = digits[2]; previous_digits[3] = digits[3]; if (++digits[0] == 10) { digits[0] = 0; if (++digits[1] == 6) { digits[1] = 0; if (++digits[2] == 10) { digits[2] = 0; if (++digits[3] == 6) digits[3] = 0; } } } } static inline void timeStepMeta ( ) /* * Ensures competion of the final tick fade after game end. */ { if (tick == -1) return; if (++tick != GC_STEPS_PER_SECOND) return; tick = -1; previous_digits[0] = digits[0]; previous_digits[1] = digits[1]; previous_digits[2] = digits[2]; previous_digits[3] = digits[3]; } static short digits[4]; static short previous_digits[4]; static int tick; }; #endif crack-attack-1.1.14/src/ComputerPlayerAI.cxx0000644000175000001440000001052610233246536020372 0ustar webbsterusers/* * ComputerPlayerAI.cxx * Andrew Sayman - 3/27/05 * * Copyright (C) 2005 Andrew Sayman * Copyright (C) 2005 Kevin Webb * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "ComputerPlayerAI.h" #include "Score.h" #include "Garbage.h" #include "GarbageGenerator.h" #include "Game.h" #include #define loop(v,m) for(int v = 0; v<(m); v++) #define loopi(m) loop(i,m) /* Begin ComputerPlayerAI */ ComputerPlayerAI::ComputerPlayerAI () { resetAlarm(); last_shatter_height = 0; state = AI_WAITING; queue = new GarbageQueue(); } int ComputerPlayerAI::baseSteps() { return GC_STEPS_PER_SECOND; } int ComputerPlayerAI::stateSteps() { if (state == AI_WAITING) { return (GC_CREEP_ADVANCE_VELOCITY * 5) // increase five lines + (GC_DYING_DELAY * 5); // five combos } if (state == AI_SHATTERING) { return garbageShatterDelay(); } return GC_DYING_DELAY * 5; } int ComputerPlayerAI::lossHeight() { return 4; } void ComputerPlayerAI::resetAlarm() { last_time = Game::time_step; } int ComputerPlayerAI::alarm() { return last_time + baseSteps() + stateSteps(); } int ComputerPlayerAI::garbageShatterDelay() { int delay = GC_INITIAL_POP_DELAY + (last_shatter_height * GC_PLAY_WIDTH * GC_INTERNAL_POP_DELAY) + GC_FINAL_POP_DELAY; return delay; } GarbageQueue *ComputerPlayerAI::garbageQueue () { return queue; } GarbageQueue *ComputerPlayerAI::garbageAmount( ) { GarbageQueue *q = new GarbageQueue(); int working_height = GC_SAFE_HEIGHT - 1 - garbageQueue()->height(); int num_grays, num_normals; MESSAGE("Hard garbageAmount"); if (working_height > 0) { num_grays = working_height % 3; } else { num_grays = 0; } num_normals = garbageQueue()->height() + working_height; LOG("garbageQueue height " << garbageQueue()->height()); LOG("grays: " << num_grays << " normals: " << num_normals); loopi(num_grays) q->add(1, 6, GF_GRAY); int norm_div = num_normals / 3; int norm_mod = num_normals % 3; int more_gray = norm_mod / 2; LOG("div: " << norm_div << " mod: " << norm_mod << " gray: " << more_gray); if (norm_div > 0) q->add(norm_div, 6, GF_NORMAL); loopi(norm_mod) q->add(1, 6, GF_NORMAL); //loopi(more_gray) q->add(1, 6, GF_GRAY); shatter(); return q; } void ComputerPlayerAI::shatter() { MESSAGE("Resetting garbageQueue " << garbageQueue()->height()); if (garbageQueue()->height() > 0) { state = AI_SHATTERING; int gray_height = garbageQueue()->specialHeight(); last_shatter_height = garbageQueue()->removeWithSpecials(); MESSAGE(last_shatter_height << " shattered and " << garbageQueue()->height() << " remaining grays:" << gray_height); loopi(last_shatter_height) { if (Random::chanceIn(GC_GARBAGE_TO_GARBAGE_SHATTER)) { garbageQueue()->add(1, 6, GF_NORMAL); MESSAGE("Adding garbage on AI shatter " << garbageQueue()->height()); } } } else { state = AI_WAITING; last_shatter_height = 0; } } bool ComputerPlayerAI::determineLoss() { GarbageQueue *queue = garbageQueue(); static int height = queue->height(); int h = queue->height(); if (h != height) { MESSAGE("Height change in determine loss old: " << height << " new: " << h); height = h; } return queue->height() > lossHeight(); } /* End ComputerPlayerAI */ int EasyAI::baseSteps() { //cout << "easy baseSteps" << endl; int a = ComputerPlayerAI::baseSteps() * 15; return a; } int EasyAI::lossHeight() { return 4; } int MediumAI::baseSteps() { return ComputerPlayerAI::baseSteps() * 10; } int MediumAI::lossHeight() { return 10; } /* Begin HardAI */ int HardAI::baseSteps() { return ComputerPlayerAI::baseSteps() * 5; } int HardAI::lossHeight() { return 20; } /* End HardAI */ crack-attack-1.1.14/src/Controller.h0000644000175000001440000000426610132356545016761 0ustar webbsterusers/* * Controller.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef CONTORLLER_H #define CONTORLLER_H using namespace std; #define CC_LEFT (1 << 0) #define CC_RIGHT (1 << 1) #define CC_UP (1 << 2) #define CC_DOWN (1 << 3) #define CC_SWAP (1 << 4) #define CC_ADVANCE (1 << 5) #define CC_PAUSE (1 << 6) /* static */ class Controller { public: static void gameStart ( ); static void keyboardPlay ( unsigned char key, int x, int y ); static void keyboardUpPlay ( unsigned char key, int x, int y ); static void specialPlay ( int key, int x, int y ); static void specialUpPlay ( int key, int x, int y ); static void keyboardMeta ( unsigned char key, int x, int y ); static void keyboardUpMeta ( unsigned char key, int x, int y ); static void specialMeta ( int key, int x, int y ); static void specialUpMeta ( int key, int x, int y ); static void entry ( int mouse_state ); static inline int moveCommand ( ) { return state & (CC_LEFT | CC_RIGHT | CC_UP | CC_DOWN); } static inline bool swapCommand ( ) { return state & CC_SWAP; } static inline bool advanceCommand ( ) { return state & CC_ADVANCE; } static inline bool pauseCommand ( ) { return state & CC_PAUSE; } private: static int state; }; #endif crack-attack-1.1.14/src/GarbageManager.cxx0000644000175000001440000000422610132356545020030 0ustar webbsterusers/* * GarbageManager.cxx * Daniel Nelson - 8/25/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Allocates and frees blocks. */ using namespace std; #include "Game.h" #include "GarbageManager.h" #include "Grid.h" #include "Random.h" int GarbageManager::garbage_count; Garbage GarbageManager::garbageStore[GC_GARBAGE_STORE_SIZE]; bool GarbageManager::storeMap[GC_GARBAGE_STORE_SIZE]; void GarbageManager::gameStart ( ) { garbage_count = 0; for (int n = GC_GARBAGE_STORE_SIZE; n--; ) { storeMap[n] = false; garbageStore[n].id = n; } } bool GarbageManager::newFallingGarbage ( int height, int width, int flavor ) /* * The Grid variable top_occupied_row must be accurate at the time of call. */ { int drop_row; if (height > GC_MAX_GARBAGE_HEIGHT) height = GC_MAX_GARBAGE_HEIGHT; if (Grid::top_occupied_row >= GC_SAFE_HEIGHT) drop_row = Grid::top_occupied_row + 1; else drop_row = GC_SAFE_HEIGHT + 1; // no room in the inn; try again later; don't allow it to occupy the top // row, to leave room for the final creep if (drop_row + height > GC_PLAY_HEIGHT - 1) return false; Grid::top_occupied_row = drop_row + height - 1; if (width == GC_PLAY_WIDTH) newFallingGarbage(0, drop_row, height, width, flavor); else newFallingGarbage(Random::number((GC_PLAY_WIDTH + 1) - width), drop_row, height, width, flavor); return true; } crack-attack-1.1.14/src/obj_sparkle.cxx0000644000175000001440000001421210230146633017466 0ustar webbsterusers/* * sparkle.cxx * Daniel Nelson - 9/5/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates the display list and textures for the little sparkles! */ #include #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::sparkle_list; GLuint Displayer::mote_textures[DC_NUMBER_MOTE_TYPES]; GLuint Displayer::spark_texture; void Displayer::generateSparkleList ( ) { GLfloat texture[DC_SPARKLE_TEX_LENGTH][DC_SPARKLE_TEX_LENGTH][2]; sparkle_list = glGenLists(1); glGenTextures(DC_NUMBER_MOTE_TYPES, mote_textures); spark_texture = mote_textures[MT_FOUR_POINTED_STAR]; for (int n = DC_NUMBER_MOTE_TYPES; n--; ) { glBindTexture(GL_TEXTURE_2D, mote_textures[n]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); for (int s = DC_SPARKLE_TEX_LENGTH; s--; ) for (int t = DC_SPARKLE_TEX_LENGTH; t--; ) { float x = s * (2.0f / (float) (DC_SPARKLE_TEX_LENGTH - 1)) - 1.0f; float y = t * (2.0f / (float) (DC_SPARKLE_TEX_LENGTH - 1)) - 1.0f; float r = sqrt(x * x + y * y); float a = atan(y / x); float u; if (x < 0.0f) a = PI - a; switch (n) { case MT_FOUR_POINTED_STAR: texture[s][t][0] = 0.3f * (1.0f - 2.5f * fabs(x * x - y * y)) * exp(-r * r) / sqrt(r); texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(r); break; case MT_FIVE_POINTED_STAR: a *= 5.0f / 4.0f; r *= 1.4f; texture[s][t][0] = 0.3f * (1.0f - 2.5f * fabs(pow(r, 2.2f) * cos(a) * cos(a) - pow(r, 2.2f) * sin(a) * sin(a))) * exp(-r * r) / sqrt(r); texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(r); break; case MT_SIX_POINTED_STAR: a *= 6.0f / 4.0f; r *= 1.4f; texture[s][t][0] = 0.3f * (1.0f - 2.5f * fabs(pow(r, 2.2f) * cos(a) * cos(a) - pow(r, 2.2f) * sin(a) * sin(a))) * exp(-r * r) / sqrt(r); texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(r); break; case MT_SPECIAL_STAR: a *= 8.0f / 4.0f; r *= 1.4f; texture[s][t][0] = 0.3f * (1.0f - 2.5f * fabs(pow(r, 4.2f) * cos(a) * cos(a) - pow(r, 4.2f) * sin(a) * sin(a))) * exp(-r * r) / sqrt(r); texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(r); break; case MT_MULTIPLIER_ONE_STAR: a *= 3.0f / 4.0f; r *= 1.9f; texture[s][t][0] = 0.3f * (1.0f - 2.5f * fabs(pow(r, 1.5f) * cos(a) * cos(a) - pow(r, 1.5f) * sin(a) * sin(a))) * exp(-r * r) / sqrt(r); if (r < 1.0f) { a += PI / 4.0f; u = 0.3f * (1.0f - 2.5f * fabs(pow(r, 0.7f) * cos(a) * cos(a) - pow(r, 0.7f) * sin(a) * sin(a))) * exp(-0.3f * r * r) / sqrt(r); if (u > 0.0f) texture[s][t][0] += u; if (texture[s][t][0] > 0.5f) texture[s][t][0] *= 0.3f + 0.7f / (0.5f + texture[s][t][0]); } texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(r); break; case MT_MULTIPLIER_TWO_STAR: texture[s][t][0] = 0.3f * (1.0f - 2.5f * fabs(x * x - y * y)) * exp(-r * r) / sqrt(r); a += PI / 4.0f; u = 0.3f * (1.0f - 2.5f * fabs(pow(r, 0.7f) * cos(a) * cos(a) - pow(r, 0.7f) * sin(a) * sin(a))) * exp(-0.1f * r * r) / sqrt(r); if (u > 0.0f) texture[s][t][0] += u; if (texture[s][t][0] > 0.5f) texture[s][t][0] *= 0.3f + 0.7f / (0.5f + texture[s][t][0]); texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(r); break; case MT_MULTIPLIER_THREE_STAR: a += PI / 4.0f; u = 0.3f * (1.0f - 3.1f * fabs(pow(r, 0.2f) * cos(a) * cos(a) - pow(r, 0.2f) * sin(a) * sin(a))) * exp(-0.1f * r * r) / sqrt(r); if (u > 0.0f) texture[s][t][0] = u; else texture[s][t][0] = 0.0f; texture[s][t][0] += 0.3f * (1.0f - 6.0f * fabs(x * x - y * y)) * exp(-0.4 * r * r) / sqrt(2.0 * r); if (texture[s][t][0] > 0.5f) texture[s][t][0] *= 0.3f + 0.7f / (0.5f + texture[s][t][0]); texture[s][t][1] = 4.5f * texture[s][t][0] * sqrt(2 * r); u = 0.15f * exp(-350.0f * (r - 0.9f) * (r - 0.9f)) * (1.15f + 0.3f * cos(4.0f * a)); if (u > texture[s][t][0]) { texture[s][t][0] = u; texture[s][t][1] = 4.5f * u; } break; } } glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, DC_SPARKLE_TEX_LENGTH, DC_SPARKLE_TEX_LENGTH, GL_FALSE, GL_LUMINANCE_ALPHA, GL_FLOAT, texture); } glNewList(sparkle_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 0.0f); glVertex3f(-DC_SPARKLE_LENGTH, -DC_SPARKLE_LENGTH, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(DC_SPARKLE_LENGTH, -DC_SPARKLE_LENGTH, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-DC_SPARKLE_LENGTH, DC_SPARKLE_LENGTH, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(DC_SPARKLE_LENGTH, DC_SPARKLE_LENGTH, 0.0f); glEnd(); glEndList(); } crack-attack-1.1.14/src/ComboTabulator.cxx0000644000175000001440000000416510132356545020124 0ustar webbsterusers/* * ComboTabulator.cxx * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Each one keeps track of a set of or potential set of elimination combos. */ #include "Game.h" #include "Block.h" #include "GarbageGenerator.h" #include "ComboTabulator.h" #include "SparkleManager.h" #include "SignManager.h" #include "BlockManager.h" #include "Score.h" using namespace std; void ComboTabulator::initialize ( ) { magnitude = 0; special_magnitude = 0; multiplier = 1; n_multipliers_this_step = 0; base_accumulated_score =0; base_score_this_step = 0; creation_time_stamp = Game::time_step; involvement_count = 0; } void ComboTabulator::reportElimination ( int _magnitude, Block &kernel ) { // hold the location for standard reward mote creation x = kernel.x; y = kernel.y; time_stamp = Game::time_step; // only increase the multiplier if this is a late elimination if (Game::time_step != creation_time_stamp) { multiplier++; n_multipliers_this_step++; SignManager::createSign(x, y, ST_MULTIPLIER, multiplier - 2); SparkleManager::createRewardMote(x, y, multiplier + 9); } // if this is a special flavor combo match if (BlockManager::isColorlessFlavor(kernel.flavor)) special_magnitude += _magnitude; // if this is a normal flavor combo match else magnitude += _magnitude; } crack-attack-1.1.14/src/Communicator.h0000644000175000001440000001645410241162174017272 0ustar webbsterusers/* * Communicator.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef COMMUNICATOR_H #define COMMUNICATOR_H using namespace std; #include #ifndef _WIN32 # include # include # include #else # include #endif #include "Game.h" // default communication port #define CO_DEFAULT_PORT (8080) // seconds before server time out due to no connection #define CO_SERVER_TIME_OUT (30) // time steps between communication exchange; must be power of 2 #define CO_COMMUNICATION_PERIOD (32) // test integer #define CO_TEST_INT (47) // protocol version number #define CO_VERSION "1.1.14" class BufferElement { public: uint32 time_stamp; uint32 height; uint32 width; uint32 flavor; BufferElement (): time_stamp(0), height(0), width(0), flavor(0) { }; }; class CommunicationBuffer { public: BufferElement garbage[GC_GARBAGE_QUEUE_SIZE]; uint32 count; uint32 level_lights; uint32 game_state; uint32 loss_time_stamp; uint32 sync; }; /* static */ class Communicator { public: static void initialize ( int mode, int port, char host_name[256], char player_name[GC_PLAYER_NAME_LENGTH] ); static void gameStart ( ); static void gameFinish ( ); static void cleanUp ( ); static void barrier ( ); static inline void unpauseSyncCheck ( ) { // latency for opponent's unpause depends on whether our next communication // action is to send or recv; note that this method if far from perfect and // often causes sporatic waits after an unpause; everything is perfectly // resynced by the resync system, but it would be nice to eliminate those // waits int latency = 0; if (time_step & CO_COMMUNICATION_PERIOD) latency += CO_COMMUNICATION_PERIOD; latency += time_step & (CO_COMMUNICATION_PERIOD - 1); if (last_recv_sync > last_own_sync + latency) Game::syncPause(last_recv_sync - last_own_sync - latency); } static inline void signalPaused ( ) { if (!(send_buffer.game_state & GS_UNPAUSED)) send_buffer.game_state |= GS_PAUSED; else send_buffer.game_state &= ~GS_UNPAUSED; } static inline void signalUnpaused ( ) { if (!(send_buffer.game_state & GS_PAUSED)) send_buffer.game_state |= GS_UNPAUSED; else send_buffer.game_state &= ~GS_PAUSED; } static inline void timeStepPlay ( ) { time_step++; if (time_step & (CO_COMMUNICATION_PERIOD - 1)) return; if (!no_communication) timeStepPlay_inline_split_(); } static inline void timeStepMeta ( ) { time_step++; if (time_step & (CO_COMMUNICATION_PERIOD - 1)) return; timeStepMeta_inline_split_(); } static inline bool isSendStep ( ) { return time_step & CO_COMMUNICATION_PERIOD; } static inline void sendGarbage ( int height, int width, int flavor ) { if (send_buffer.count == GC_GARBAGE_QUEUE_SIZE) return; send_buffer.garbage[send_buffer.count].time_stamp = Game::time_step; send_buffer.garbage[send_buffer.count].height = height; send_buffer.garbage[send_buffer.count].width = width; send_buffer.garbage[send_buffer.count].flavor = flavor; send_buffer.count++; } static inline void setLevelLightSendBit ( int mask ) { send_buffer.level_lights |= mask; } static inline bool checkLevelLightRecvBit ( int mask ) { return recv_buffer.level_lights & mask; } static inline void setLossTimeStep ( ) { send_buffer.loss_time_stamp = (uint32) Game::time_step; } static int time_step; static char opponent_name[GC_PLAYER_NAME_LENGTH]; private: static void timeStepPlay_inline_split_ ( ); static void timeStepMeta_inline_split_ ( ); static void exchangeRandomSeed ( ); static inline void commSend ( const void *message, int size ) { int n; do if ((n = send(comm_link, (char *) message, size, 0)) != -1) { message = (char *) message + n; size -= n; } else { cerr << "Connection lost." << endl; exit(1); } while (size > 0); } static inline void commRecv ( void *buffer, int size ) { int n; do if ((n = recv(comm_link, (char *) buffer, size, 0)) != -1) { buffer = (char *) buffer + n; size -= n; } else { cerr << "Connection lost." << endl; exit(1); } while (size > 0); } static inline void commSend ( uint32 value ) { value = htonl(value); commSend(&value, sizeof(value)); } static inline void commRecv ( uint32 &value ) { commRecv(&value, sizeof(value)); value = ntohl(value); } static inline void commSend ( const CommunicationBuffer &buffer ) { work_buffer.count = htonl(buffer.count); for (int i = buffer.count; i--; ) { work_buffer.garbage[i].time_stamp = htonl(buffer.garbage[i].time_stamp); work_buffer.garbage[i].height = htonl(buffer.garbage[i].height); work_buffer.garbage[i].width = htonl(buffer.garbage[i].width); work_buffer.garbage[i].flavor = htonl(buffer.garbage[i].flavor); } work_buffer.level_lights = htonl(buffer.level_lights); work_buffer.game_state = htonl(buffer.game_state); work_buffer.loss_time_stamp = htonl(buffer.loss_time_stamp); work_buffer.sync = htonl(buffer.sync); commSend(&work_buffer, sizeof(work_buffer)); } static inline void commRecv ( CommunicationBuffer &buffer ) { commRecv(&work_buffer, sizeof(work_buffer)); buffer.count = ntohl(work_buffer.count); for (int i = buffer.count; i--; ) { buffer.garbage[i].time_stamp = ntohl(work_buffer.garbage[i].time_stamp); buffer.garbage[i].height = ntohl(work_buffer.garbage[i].height); buffer.garbage[i].width = ntohl(work_buffer.garbage[i].width); buffer.garbage[i].flavor = ntohl(work_buffer.garbage[i].flavor); } buffer.level_lights = ntohl(work_buffer.level_lights); buffer.game_state = ntohl(work_buffer.game_state); buffer.loss_time_stamp = ntohl(work_buffer.loss_time_stamp); buffer.sync = ntohl(work_buffer.sync); } static void startupExchange ( char player_name[GC_PLAYER_NAME_LENGTH] ); static int comm_link; static bool comm_link_active; static bool no_communication; static bool have_communicated; static int last_recv_sync; static int last_own_sync; static CommunicationBuffer send_buffer; static CommunicationBuffer recv_buffer; static CommunicationBuffer work_buffer; static bool win_ties; }; #endif crack-attack-1.1.14/src/obj_external_candy.cxx0000644000175000001440000001647510230146633021042 0ustar webbsterusers/* * external_candy.cxx * Daniel Nelson - 10/13/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates lists and textures for candy external to the game. */ #include #include "glext.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" #include "MetaState.h" #include "GarbageFlavorImage.h" GLuint Displayer::logo_texture; GLuint Displayer::losebar_texture; GLuint Displayer::logo_list; void Displayer::generateExternalCandy ( ) { // the logo glGenTextures(1, &logo_texture); glBindTexture(GL_TEXTURE_2D, logo_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GLubyte *texture; if (MetaState::mode & CM_X) texture = TextureLoader::loadNoAlphaTGA(GC_X_LOGO_TEX_FILE_NAME, DC_LOGO_TEX_LENGTH, DC_LOGO_TEX_LENGTH); else texture = TextureLoader::loadNoAlphaTGA(GC_LOGO_TEX_FILE_NAME, DC_LOGO_TEX_LENGTH, DC_LOGO_TEX_LENGTH); #if 0 // use to see the first entry in the garbage flavor texture set glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH, GL_FALSE, GL_RGBA, GL_UNSIGNED_BYTE, garbage_texture_data[0]); #else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, DC_LOGO_TEX_LENGTH, DC_LOGO_TEX_LENGTH, GL_FALSE, GL_RGB, GL_UNSIGNED_BYTE, texture); #endif if (texture != null) { delete [] texture; texture = null; } logo_list = glGenLists(1); glNewList(logo_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(DC_LEFT_EXTERNAL_CENTER - DC_LOGO_LENGTH / 2.0f, DC_LOGO_OFFSET_Y - DC_LOGO_LENGTH / 2.0f, DC_EXTERNAL_OFFSET_Z); glTexCoord2f(1.0f, 1.0f); glVertex3f(DC_LEFT_EXTERNAL_CENTER + DC_LOGO_LENGTH / 2.0f, DC_LOGO_OFFSET_Y - DC_LOGO_LENGTH / 2.0f, DC_EXTERNAL_OFFSET_Z); glTexCoord2f(0.0f, 0.0f); glVertex3f(DC_LEFT_EXTERNAL_CENTER - DC_LOGO_LENGTH / 2.0f, DC_LOGO_OFFSET_Y + DC_LOGO_LENGTH / 2.0f, DC_EXTERNAL_OFFSET_Z); glTexCoord2f(1.0f, 0.0f); glVertex3f(DC_LEFT_EXTERNAL_CENTER + DC_LOGO_LENGTH / 2.0f, DC_LOGO_OFFSET_Y + DC_LOGO_LENGTH / 2.0f, DC_EXTERNAL_OFFSET_Z); glEnd(); glEndList(); // the losebar glGenTextures(1, &losebar_texture); glBindTexture(GL_TEXTURE_2D, losebar_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GLfloat lb_texture[DC_LOSEBAR_TEX_LENGTH_T][DC_LOSEBAR_TEX_LENGTH_S][2]; // calculate the losebar texture, because I'm better at math than at drawing for (int s = DC_LOSEBAR_TEX_LENGTH_S; s--; ) { // clamp left and right edges if (s == 0 || s == DC_LOSEBAR_TEX_LENGTH_S - 1) { for (int t = DC_LOSEBAR_TEX_LENGTH_T; t--; ) { lb_texture[t][s][0] = 0.0f; lb_texture[t][s][1] = 0.0f; } continue; } GLfloat left = s * (1.0f / (GLfloat) DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S); for (int t = DC_LOSEBAR_TEX_LENGTH_T; t--; ) { GLfloat top = t * (1.0f / (GLfloat) DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S); GLfloat lumin = 0.0f; GLfloat alpha = 0.0f; for (int i = DC_LOSEBAR_ANTIALIAS_LENGTH; i--; ) { // runs from 0.0f to 1.0f GLfloat x = left + (i + 0.5f) * (1.0f / (GLfloat) (DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S * DC_LOSEBAR_ANTIALIAS_LENGTH)); for (int j = DC_LOSEBAR_ANTIALIAS_LENGTH; j--; ) { // runs from 0.0f to 2.0f * DC_LOSEBAR_END_RATIO GLfloat y = top + (j + 0.5f) * (1.0f / (GLfloat) (DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S * DC_LOSEBAR_ANTIALIAS_LENGTH)); GLfloat normal[3]; // left end if (x < DC_LOSEBAR_END_RATIO) { GLfloat r_sqrd = (y - DC_LOSEBAR_END_RATIO) * (y - DC_LOSEBAR_END_RATIO) + (DC_LOSEBAR_END_RATIO - x) * (DC_LOSEBAR_END_RATIO - x); if (r_sqrd >= (DC_LOSEBAR_END_RATIO * DC_LOSEBAR_END_RATIO)) continue; normal[0] = sin((DC_LOSEBAR_END_RATIO - x) * (0.5f * PI / DC_LOSEBAR_END_RATIO)); normal[1] = cos(y * (0.5f * PI / DC_LOSEBAR_END_RATIO)) * cos((DC_LOSEBAR_END_RATIO - x) * (0.5f * PI / DC_LOSEBAR_END_RATIO)); normal[2] = sin(y * (0.5f * PI / DC_LOSEBAR_END_RATIO)) * cos((DC_LOSEBAR_END_RATIO - x) * (0.5f * PI / DC_LOSEBAR_END_RATIO)); // right end } else if (x > (1.0f - DC_LOSEBAR_END_RATIO)) { GLfloat r_sqrd = (y - DC_LOSEBAR_END_RATIO) * (y - DC_LOSEBAR_END_RATIO) + ((1.0f - DC_LOSEBAR_END_RATIO) - x) * ((1.0f - DC_LOSEBAR_END_RATIO) - x); if (r_sqrd >= (DC_LOSEBAR_END_RATIO * DC_LOSEBAR_END_RATIO)) continue; normal[0] = sin(((1.0f - DC_LOSEBAR_END_RATIO) - x) * (0.5f * PI / DC_LOSEBAR_END_RATIO)); normal[1] = cos(y * (0.5f * PI / DC_LOSEBAR_END_RATIO)) * cos(((1.0f - DC_LOSEBAR_END_RATIO) - x) * (0.5f * PI / DC_LOSEBAR_END_RATIO)); normal[2] = sin(y * (0.5f * PI / DC_LOSEBAR_END_RATIO)) * cos(((1.0f - DC_LOSEBAR_END_RATIO) - x) * (0.5f * PI / DC_LOSEBAR_END_RATIO)); // center } else { normal[0] = 0.0f; normal[1] = cos(y * (0.5f * PI / DC_LOSEBAR_END_RATIO)); normal[2] = sin(y * (0.5f * PI / DC_LOSEBAR_END_RATIO)); } float light = normal[0] * DC_LOSEBAR_LIGHT_VECTOR_X + normal[1] * DC_LOSEBAR_LIGHT_VECTOR_Y + normal[2] * DC_LOSEBAR_LIGHT_VECTOR_Z; lumin += 1.0f - pow(1.0f - light, DC_LOSEBAR_LIGHT_SPECULAR_POWER); alpha += DC_LOSEBAR_LIGHT_AMBIENT_RATIO + (1.0f - DC_LOSEBAR_LIGHT_AMBIENT_RATIO) * light; } } lb_texture[t][s][0] = lumin * (1.0f / (GLfloat) (DC_LOSEBAR_ANTIALIAS_LENGTH * DC_LOSEBAR_ANTIALIAS_LENGTH)); lb_texture[t][s][1] = alpha * (1.0f / (GLfloat) (DC_LOSEBAR_ANTIALIAS_LENGTH * DC_LOSEBAR_ANTIALIAS_LENGTH)); } } glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, DC_LOSEBAR_TEX_LENGTH_S, DC_LOSEBAR_TEX_LENGTH_T, GL_FALSE, GL_LUMINANCE_ALPHA, GL_FLOAT, lb_texture); } crack-attack-1.1.14/src/SparkleManager.h0000644000175000001440000000431410132356545017524 0ustar webbsterusers/* * SparkleManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SPARKMANAGER_H #define SPARKMANAGER_H using namespace std; #include "Displayer.h" class Spark { public: bool active; float x, y; float v_x, v_y; float a; float v_a; float size; int color; int life_time; }; class Mote { public: bool active; float x, y; float v_x, v_y; float a; float initial_a; float v_a; int color; int type; float size; float inverse_mass; float brightness; int life_time; int sibling_delay; int associated_light; int light_color; }; /* static */ class SparkleManager { public: static void initialize ( ); static void timeStep ( ); static void createBlockDeathSpark ( int x, int y, int color, int n ); static void createCelebrationSpark ( int source, int color ); static void createRewardMote ( int x, int y, int level, int sibling_number = 0 ); // the block death sparkles static int spark_count; static Spark sparks[DC_MAX_SPARK_NUMBER]; // the combo reward sparkles static int mote_count; static Mote motes[DC_MAX_MOTE_NUMBER]; private: static const int mote_colors[DC_NUMBER_MOTE_LEVELS]; static const int mote_light_colors[DC_NUMBER_MOTE_LEVELS]; static const int mote_types[DC_NUMBER_MOTE_LEVELS]; static const GLfloat mote_sizes[DC_NUMBER_MOTE_LEVELS]; static const float mote_inverse_masses[DC_NUMBER_MOTE_LEVELS]; }; #endif crack-attack-1.1.14/src/Creep.h0000644000175000001440000000234510132356545015670 0ustar webbsterusers/* * Creep.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef CREAP_H #define CREAP_H using namespace std; /* static */ class Creep { public: static void gameStart ( ); static void timeStep ( ); static int creep; static int loss_alarm; static bool creep_freeze; private: static int creep_timer_step; static int creep_timer; static int increase_velocity_alarm; static bool advance; }; #endif crack-attack-1.1.14/src/Creep.cxx0000644000175000001440000001101410132356545016234 0ustar webbsterusers/* * Creep.cxx * Daniel Nelson - 8/25/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the upward creepiness of the game. * * How to we do a creep roll over? Right now we do a big copy up. We could use * a rolling data structure, but the question is, would the time saved here be * worth the extra dereference we'd have to do each time we access the grid? */ #include "Game.h" #include "Creep.h" #include "Grid.h" #include "BlockManager.h" #include "Controller.h" #include "ComboManager.h" #include "Displayer.h" #include "LevelLights.h" #include "LoseBar.h" using namespace std; int Creep::creep; int Creep::creep_timer_step; int Creep::creep_timer; int Creep::increase_velocity_alarm; int Creep::loss_alarm; bool Creep::creep_freeze; bool Creep::advance; void Creep::gameStart ( ) { creep = 0; creep_timer_step = GC_CREEP_INITIAL_TIMER_STEP; creep_timer = 0; increase_velocity_alarm = Game::time_step + GC_CREEP_INCREMENT_DELAY; creep_freeze = false; advance = false; BlockManager::newCreepRow(); } void Creep::timeStep ( ) { // if it's time to increase the creep speed if (increase_velocity_alarm == Game::time_step) { if (creep_timer_step == GC_CREEP_MAX_TIMER_STEP) increase_velocity_alarm = 0; else { increase_velocity_alarm = Game::time_step + GC_CREEP_INCREMENT_DELAY; creep_timer_step += GC_CREEP_TIMER_STEP_INCREMENT; } } // no creeping when awaking or dying; not a true creep freeze if (Game::awaking_count != 0 || Game::dying_count != 0) { // if we're in a creep freeze if (creep_freeze) { // you can't lose within a certain delay of your last elimination if (loss_alarm < GC_LOSS_DELAY_ELIMINATION) { loss_alarm = GC_LOSS_DELAY_ELIMINATION; LoseBar::highAlertReset(); } // check to end it if (!Grid::checkSafeHeightViolation()) creep_freeze = false; } return; } // if we're in a creep freeze if (creep_freeze) { // check to end it if (!Grid::checkSafeHeightViolation()) creep_freeze = false; else { // check for game loss if (--loss_alarm == 0) Game::loss(); // and don't creep return; } // check to see if we're pushing against GC_SAFE_HEIGHT } else if (Grid::checkSafeHeightViolation()) { // freeze the creep for one creap cycle creep_freeze = true; loss_alarm = GC_LOSS_DELAY; LevelLights::notifySafeHeightViolation(); } if (advance || Controller::advanceCommand()) { if (creep_timer_step < GC_CREEP_ADVANCE_TIMER_STEP) creep_timer += GC_CREEP_ADVANCE_TIMER_STEP; else creep_timer += creep_timer_step; advance = true; } else creep_timer += creep_timer_step; // if it's time to creep while (creep_timer >= GC_CREEP_DELAY) { creep_timer -= GC_CREEP_DELAY; // otherwise, creep as normal if (!advance) creep++; // if we're going to creep fast else { creep += GC_CREEP_ADVANCE_VELOCITY; if (creep > GC_STEPS_PER_GRID) creep = GC_STEPS_PER_GRID; } // if we've completed a grid of creeping if (creep == GC_STEPS_PER_GRID) { creep = 0; // shift everything up one grid if (Grid::shiftGridUp()) { // create a new bottom row BlockManager::newCreepRow(); // link the elimination requests ComboTabulator &combo = ComboManager::newComboTabulator(); for (int x = GC_PLAY_WIDTH; x--; ) Grid::requestEliminationCheck(Grid::blockAt(x, 1), &combo); // if we can't shift up, don't; but try again next time } else { creep_timer += GC_CREEP_DELAY; creep = GC_STEPS_PER_GRID - 1; } if (advance && !Controller::advanceCommand()) advance = false; } } } crack-attack-1.1.14/src/obj_garbage.cxx0000644000175000001440000002244010231337750017422 0ustar webbsterusers/* * garbage.cxx * Daniel Nelson - 10/1/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates the lightmap and flavor textures for the garbage. */ #define GL_GLEXT_LEGACY #define GL_GLEXT_PROTOTYPES #include #include #include "glext.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" #include "GarbageFlavorImage.h" #include "MetaState.h" #include "Random.h" const char *garbage_lightmap_files[DC_NUMBER_GARBAGE_LIGHTMAPS] = { GC_DATA_DIRECTORY("garbage_lightmap_0.tga"), GC_DATA_DIRECTORY("garbage_lightmap_1.tga"), GC_DATA_DIRECTORY("garbage_lightmap_2.tga"), GC_DATA_DIRECTORY("garbage_lightmap_3.tga"), GC_DATA_DIRECTORY("garbage_lightmap_4.tga"), GC_DATA_DIRECTORY("garbage_lightmap_5.tga") }; GLuint Displayer::garbage_lightmap; GLuint Displayer::garbage_texture; GLuint Displayer::garbage_flavor_list; GLubyte *Displayer::garbage_texture_data[DC_NUMBER_USE_GARBAGE_TEX]; void Displayer::generateGarbageExtras ( ) { char file_name[256]; glGenTextures(1, &garbage_lightmap); glBindTexture(GL_TEXTURE_2D, garbage_lightmap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // choose a random lightmap for this game GLubyte *texture = TextureLoader::loadAlphaTGA( garbage_lightmap_files[Random::number(DC_NUMBER_GARBAGE_LIGHTMAPS)], DC_GARBAGE_LIGHTMAP_LENGTH, DC_GARBAGE_LIGHTMAP_LENGTH); for (int s = DC_GARBAGE_LIGHTMAP_LENGTH; s--; ) for (int t = DC_GARBAGE_LIGHTMAP_LENGTH; t--; ) texture[s * DC_GARBAGE_LIGHTMAP_LENGTH + t] = (GLubyte) (255.0f * (DC_GARBAGE_LIGHTMAP_MIN_LUMINANCE + ((1.0f - DC_GARBAGE_LIGHTMAP_MIN_LUMINANCE) / 255.0f) * (float) texture[s * DC_GARBAGE_LIGHTMAP_LENGTH + t])); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, DC_GARBAGE_LIGHTMAP_LENGTH, DC_GARBAGE_LIGHTMAP_LENGTH, GL_FALSE, GL_LUMINANCE, GL_UNSIGNED_BYTE, texture); if (texture != null) { delete [] texture; texture = null; } glGenTextures(1, &garbage_texture); glBindTexture(GL_TEXTURE_2D, garbage_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // identify which texture files exist int texture_file_count = 0; bool texture_file_flag[GC_GARBAGE_TEX_MAX_NUMBER]; for (int n = GC_GARBAGE_TEX_MAX_NUMBER; n--; ) { GarbageFlavorImage::buildGarbageTextureFileName(file_name, n); if (TextureLoader::fileExists(file_name)) { texture_file_count++; texture_file_flag[n] = true; } else texture_file_flag[n] = false; } // if for some reason we don't have enough textures if (texture_file_count < DC_NUMBER_USE_GARBAGE_TEX) { GarbageFlavorImage::buildGarbageTextureFileName(file_name, 0); for (int n = 0; n < DC_NUMBER_USE_GARBAGE_TEX; n++) { garbage_texture_data[n] = TextureLoader::loadTGA(file_name, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); } // otherwise, we have plenty } else { int use_textures[DC_NUMBER_USE_GARBAGE_TEX]; for (int n = 0; n < DC_NUMBER_USE_GARBAGE_TEX; n++) { // always put the net tex in zero, if there is one if (n == 0 && (MetaState::mode & CM_SOLO) && GarbageFlavorImage::personalGarbageFlavorImageExists()) GarbageFlavorImage::handleNetworkGarbageFlavorImage( garbage_texture_data[0] = GarbageFlavorImage::loadPersonalGarbageFlavorImage()); else if (n == 0 && !(MetaState::mode & CM_SOLO) && GarbageFlavorImage::network_texture) { char net_tex_file_name[256]; TextureLoader::buildLocalDataFileName(GC_GARBAGE_NET_TEX_FILE_NAME, net_tex_file_name); garbage_texture_data[0] = TextureLoader::loadTGA(net_tex_file_name, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); } else { bool flag; do { flag = false; int i; int choice = Random::number(texture_file_count); for (i = 0; choice--; i++) while (!texture_file_flag[i]) i++; use_textures[n] = i; for (int m = 0; m < n; m++) if (use_textures[n] == use_textures[m]) { flag = true; break; } } while (flag); GarbageFlavorImage::buildGarbageTextureFileName(file_name, use_textures[n]); garbage_texture_data[n] = TextureLoader::loadTGA(file_name, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); } } } // the logo may replace the second texture if (Random::chanceIn(DC_CHANCE_IN_NOT_USE_LOGO_FLAVOR_TEX)) { if (garbage_texture_data[1] != null) { delete [] garbage_texture_data[1]; garbage_texture_data[1] = null; } if (MetaState::mode & CM_X) garbage_texture_data[1] = TextureLoader::loadTGA(GC_GARBAGE_X_LOGO_TEX_FILE_NAME, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); else garbage_texture_data[1] = TextureLoader::loadTGA(GC_GARBAGE_LOGO_TEX_FILE_NAME, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH, GL_FALSE, GL_RGBA, GL_UNSIGNED_BYTE, garbage_texture_data[GarbageFlavorImage::current_texture]); GLfloat vertices_0[3 * 6] = { -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 3.0f, 1.0f, 1.0f, 3.0f, 1.0f }; GLfloat normals_0[3 * 6] = { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; GLfloat tex_coords_flavor[2 * 6] = { 0.0f, 1.0f, 0.5f, 1.0f, 0.0f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.5f, 0.0f }; #ifndef NO_MULTITEXTURING GLfloat tex_coords_lightmap[2 * 6] = { -DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, -DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, -DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, -DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, -DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 3.0f * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 3.0f * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, }; #endif garbage_flavor_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); #ifndef NO_MULTITEXTURING // if multitexturing if (Displayer::state & DS_MULTITEXTURING) { glActiveTextureARB(GL_TEXTURE1_ARB); glBindTexture(GL_TEXTURE_2D, garbage_lightmap); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glActiveTextureARB(GL_TEXTURE0_ARB); glNewList(garbage_flavor_list, GL_COMPILE); glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(2, GL_FLOAT, 0, tex_coords_flavor); glClientActiveTextureARB(GL_TEXTURE1_ARB); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, tex_coords_lightmap); glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); for (int n = 6; n--; ) { vertices_0[3 * n + 0] += 2.0f; tex_coords_flavor[2 * n + 0] += 0.5f; tex_coords_lightmap[2 * n + 0] += 2.0f * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; } glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glClientActiveTextureARB(GL_TEXTURE0_ARB); glEndList(); // if no multitexturing } else { #endif glNewList(garbage_flavor_list, GL_COMPILE); glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(2, GL_FLOAT, 0, tex_coords_flavor); glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); for (int n = 6; n--; ) { vertices_0[3 * n + 0] += 2.0f; tex_coords_flavor[2 * n + 0] += 0.5f; } glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); glEndList(); #ifndef NO_MULTITEXTURING } #endif glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/MetaState.cxx0000644000175000001440000001274410236145645017102 0ustar webbsterusers/* * MetaState.cxx * Daniel Nelson - 10/22/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the program's state and transfers between them. */ #include #include #include "glext.h" using namespace std; #include "Game.h" #include "MetaState.h" #include "Displayer.h" #include "CelebrationManager.h" #include "Controller.h" #include "Communicator.h" #include "WinRecord.h" #include "MessageManager.h" int MetaState::state; int MetaState::mode = 0; int MetaState::final_time_step; char MetaState::player_name[GC_PLAYER_NAME_LENGTH]; void MetaState::programStart ( int _mode, char _player_name[GC_PLAYER_NAME_LENGTH], int width, int height) { state = MS_BOTH_KEY_WAIT; mode |= _mode; strncpy(player_name, _player_name, GC_PLAYER_NAME_LENGTH); Game::initialize(); Displayer::initialize(width, height); MessageManager::mode = MM_NORMAL; MessageManager::readyMessage(MS_ANYKEY); glutKeyboardFunc(Controller::keyboardMeta); glutSpecialFunc(Controller::specialMeta); glutKeyboardUpFunc(null); glutSpecialUpFunc(null); glutEntryFunc(Controller::entry); glutDisplayFunc(Displayer::displayMeta); glutReshapeFunc(Displayer::reshape); glutIdleFunc(Game::idleMeta); if (!(mode & CM_SOLO)) Communicator::barrier(); atexit(programEnd); Game::go(); } void MetaState::programEnd ( ) { Game::cleanUp(); Displayer::cleanUp(); Communicator::cleanUp(); } void MetaState::gameStart ( ) { state = MS_GAME_PLAY; MessageManager::freeMessage(); if (!(mode & CM_SOLO)) Communicator::gameStart(); Game::gameStart(); Displayer::gameStart(); glutKeyboardFunc(Controller::keyboardPlay); glutSpecialFunc(Controller::specialPlay); glutKeyboardUpFunc(Controller::keyboardUpPlay); glutSpecialUpFunc(Controller::specialUpPlay); glutDisplayFunc(Displayer::displayPlay); glutIdleFunc(Game::idlePlay); if (!(mode & CM_SOLO)) Communicator::barrier(); Game::go(); } void MetaState::gameWon ( ) { DOT(3); WinRecord::gameWon(); DOT(3); gameFinish(); } void MetaState::gameLoss ( ) { WinRecord::gameLoss(); gameFinish(); } void MetaState::gameFinish ( ) { final_time_step = Game::time_step; DOT(3); if (state & MS_CONCESSION) WinRecord::matchConceded(); DOT(3); if (!(mode & CM_SOLO)) Communicator::gameFinish(); Game::gameFinish(); Displayer::gameFinish(); if (WinRecord::isMatchFinished()) { if (!(mode & CM_SOLO)) Communicator::cleanUp(); state = MS_GAME_OVER_KEY_WAIT; } else state = MS_CELEBRATION_WAIT | MS_BOTH_KEY_WAIT; glutKeyboardFunc(Controller::keyboardMeta); glutSpecialFunc(Controller::specialMeta); glutDisplayFunc(Displayer::displayMeta); glutIdleFunc(Game::idleMeta); // GLUT 3.7 is seg faulting if glutKeyboardUpFunc is unset and // glutSpecialUpFunc is set. This is the only use of // Controller::keyboardUpMeta() . // glutKeyboardUpFunc(null); // removed if (mode & CM_SOLO || mode & CM_AI) { glutSpecialUpFunc(Controller::specialUpMeta); glutKeyboardUpFunc(Controller::keyboardUpMeta); // workaround } else { glutSpecialUpFunc(null); glutKeyboardUpFunc(null); // workaround } if (!(mode & CM_SOLO) && !WinRecord::isMatchFinished()) Communicator::barrier(); Game::go(); } void MetaState::celebrationComplete ( ) { // allow the player to end the celebration state &= ~MS_CELEBRATION_WAIT; } void MetaState::localKeyPressed ( bool esc ) { if (state & MS_CELEBRATION_WAIT) return; switch (state) { case MS_BOTH_KEY_WAIT: if (WinRecord::current_game == -1) MessageManager::freeMessage(); else CelebrationManager::celebrationFinish(); MessageManager::readyMessage(MS_WAITING); if (!(mode & CM_SOLO)) state = MS_REMOTE_KEY_WAIT; else { state = MS_READY_GAME_START; remoteReady(); } return; case MS_LOCAL_KEY_WAIT: if (WinRecord::current_game == -1) MessageManager::freeMessage(); else CelebrationManager::celebrationFinish(); MessageManager::readyMessage(MS_WAITING); state = MS_READY_GAME_START; return; case MS_GAME_OVER_KEY_WAIT: if (!esc) return; case MS_GAME_OVER_ANY_KEY_WAIT: MESSAGE("Exiting the game"); exit(0); return; } } void MetaState::remoteKeyPressed ( ) { switch (state) { case MS_BOTH_KEY_WAIT: state = MS_LOCAL_KEY_WAIT; return; case MS_REMOTE_KEY_WAIT: state = MS_READY_GAME_START; return; } } void MetaState::remoteReady ( ) { switch (state) { case MS_READY_GAME_START: gameStart(); return; case MS_REMOTE_KEY_WAIT: state = MS_READY_GAME_START; return; case MS_BOTH_KEY_WAIT: state = MS_LOCAL_KEY_WAIT; return; } } crack-attack-1.1.14/src/GarbageFlavorImage.cxx0000644000175000001440000001706210230144462020644 0ustar webbsterusers/* * GarbageFlavorImage.cxx * Daniel Nelson - 10/7/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the the garbage flavor image. */ #include #include "sstream.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" #include "GarbageFlavorImage.h" #include "Random.h" int GarbageFlavorImage::current_texture; int GarbageFlavorImage::associated_garbage_id; int GarbageFlavorImage::x, GarbageFlavorImage::y; bool GarbageFlavorImage::network_texture = false; void GarbageFlavorImage::initialize ( ) { // network garbage flavor image stuff is setup before initialization current_texture = 0; associated_garbage_id = -1; // insure existence of default files char file_name[256]; for (int n = GC_NUMBER_STANDARD_GARBAGE_TEX; n--; ) { GarbageFlavorImage::buildGarbageTextureFileName(file_name, n); if (!TextureLoader::fileExists(file_name)) { char original_file_name[256]; GarbageFlavorImage::buildOriginalGarbageTextureFileName( original_file_name, n); GLubyte *texture = TextureLoader::loadTGA(original_file_name, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); TextureLoader::createTGA(file_name, texture, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH, TL_GARBAGE_TEXTURE_TGA_ID); if (texture != null) { delete [] texture; texture = null; } } } } bool GarbageFlavorImage::personalGarbageFlavorImageExists ( ) /* * Called by Communicator or obj_garbage.cxx at startup to determine if we have * a personal garbage flavor image to send. */ { char file_name[256]; TextureLoader::buildLocalDataFileName(GC_GARBAGE_MY_TEX_FILE_NAME, file_name); return TextureLoader::fileExists(file_name); } GLubyte *GarbageFlavorImage::loadPersonalGarbageFlavorImage ( ) /* * Called by Communicator at startup to obtain the personal garbage flavor * image or by obj_garbage.cxx if in solo mode. */ { char file_name[256]; TextureLoader::buildLocalDataFileName(GC_GARBAGE_MY_TEX_FILE_NAME, file_name); int width, height; TextureLoader::determineTGASize(file_name, width, height); if (width > DC_GARBAGE_TEX_LENGTH || height > DC_GARBAGE_TEX_LENGTH) { cerr << "Texture file '" << file_name << "' exceeds allowed " "size of [" << DC_GARBAGE_TEX_LENGTH << 'x' << DC_GARBAGE_TEX_LENGTH << "]." << endl; exit(1); } GLubyte *original_texture = TextureLoader::loadTGA(file_name, width, height); if (width == DC_GARBAGE_TEX_LENGTH && height == DC_GARBAGE_TEX_LENGTH) return original_texture; GLubyte *texture = new GLubyte[DC_GARBAGE_TEX_LENGTH * DC_GARBAGE_TEX_LENGTH * 4]; for (int t = DC_GARBAGE_TEX_LENGTH; t--; ) for (int s = DC_GARBAGE_TEX_LENGTH; s--; ) { if (s + height > DC_GARBAGE_TEX_LENGTH && t + width > DC_GARBAGE_TEX_LENGTH) { int texel = ((t - DC_GARBAGE_TEX_LENGTH + width) * height + (s - DC_GARBAGE_TEX_LENGTH + height)) * 4; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 0] = original_texture[texel + 0]; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 1] = original_texture[texel + 1]; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 2] = original_texture[texel + 2]; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 3] = original_texture[texel + 3]; } else { texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 0] = 0; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 1] = 0; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 2] = 0; texture[(t * DC_GARBAGE_TEX_LENGTH + s) * 4 + 3] = 0; } } if (original_texture != null) { delete [] original_texture; original_texture = null; } return texture; } void GarbageFlavorImage::handleNetworkGarbageFlavorImage ( GLubyte *texture ) /* * Called by Communicator at startup if opponent sends us his personal garbage * flavor image. */ { char net_tex_file_name[256]; TextureLoader::buildLocalDataFileName(GC_GARBAGE_NET_TEX_FILE_NAME, net_tex_file_name); network_texture = true; // create the network texture file TextureLoader::createTGA(net_tex_file_name, texture, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH, TL_GARBAGE_TEXTURE_TGA_ID); // determine it's check sum unsigned long check_sum = TextureLoader::determineTGACheckSum(net_tex_file_name, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH); // check to see if we already have a copy of it in our main list int n; int first_open_slot = -1; char file_name[256]; for (n = GC_GARBAGE_TEX_MAX_NUMBER; n--; ) { GarbageFlavorImage::buildGarbageTextureFileName(file_name, n); if (TextureLoader::fileExists(file_name)) { if (check_sum == TextureLoader::determineTGACheckSum(file_name, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH)) break; } else first_open_slot = n; } // if we don't already have a copy, create one if (n == -1 && first_open_slot != -1) { GarbageFlavorImage::buildGarbageTextureFileName(file_name, first_open_slot); TextureLoader::createTGA(file_name, texture, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH, TL_GARBAGE_TEXTURE_TGA_ID); } } void GarbageFlavorImage::buildGarbageTextureFileName ( char file_name[256], const char *dir_name, int n ) { ostringstream s; s << dir_name << GC_GARBAGE_TEX_FILE_NAME_BASE "_" << setw(GC_GARBAGE_TEX_NUMBER_DIGITS) << setfill('0') << n << ".tga" << ends; strncpy(file_name, s.str().data(), 256); } void GarbageFlavorImage::buildGarbageTextureFileName ( char file_name[256], int n ) { char base_name[256]; buildGarbageTextureFileName(base_name, "", n); TextureLoader::buildLocalDataFileName(base_name, file_name); } void GarbageFlavorImage::buildOriginalGarbageTextureFileName ( char file_name[256], int n ) { buildGarbageTextureFileName(file_name, GC_DATA_DIRECTORY(""), n); } void GarbageFlavorImage::requestGarbageFlavorImage_inline_split_ ( Garbage &garbage ) /* * Request to use the garbage flavor image for this piece of garbage. If the * garbage flavor image is free, it will be set to the given garbage. The * height and width of the garbage must be four or more. */ { associated_garbage_id = garbage.id; x = 1 + Random::number(garbage.width - 3); if (Random::number2(4)) y = 1; else y = 1 + Random::number(garbage.height - 3); int last_texture = current_texture; if (network_texture) current_texture = (Random::number(DC_CHANCE_USE_NET_TEX) ? 0 : 1 + Random::number(3)); else current_texture = Random::number2(4); if (last_texture != current_texture) { glBindTexture(GL_TEXTURE_2D, Displayer::garbage_texture); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, DC_GARBAGE_TEX_LENGTH, DC_GARBAGE_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, Displayer::garbage_texture_data[current_texture]); } } crack-attack-1.1.14/src/Controller.cxx0000644000175000001440000001166110235601062017320 0ustar webbsterusers/* * Controller.cxx * Daniel Nelson - 8/25/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Keeps track of the button pressing. */ #include #include #include "glext.h" #include "Game.h" #include "Controller.h" #include "ActionRecorder.h" #include "MetaState.h" #include "Grid.h" #ifdef DEVELOPMENT #include "Displayer.h" #endif using namespace std; int Controller::state; void Controller::gameStart ( ) { state = 0; } void Controller::keyboardPlay ( unsigned char key, int x, int y ) { bool keypressed = true; switch (key) { case GC_LEFT_KEY: case (GC_LEFT_KEY - 32): state |= CC_LEFT; break; case GC_RIGHT_KEY: case (GC_RIGHT_KEY - 32): state |= CC_RIGHT; break; case GC_UP_KEY: case (GC_UP_KEY - 32): state |= CC_UP; break; case GC_DOWN_KEY: case (GC_DOWN_KEY - 32): state |= CC_DOWN; break; case GC_SWAP_KEY: case (GC_SWAP_KEY - 32): case ' ': state |= CC_SWAP; break; case GC_ADVANCE_KEY: case (GC_ADVANCE_KEY - 32): case '\r': state |= CC_ADVANCE; break; case GC_PAUSE_KEY: case (GC_PAUSE_KEY - 32): state |= CC_PAUSE; break; #ifndef NDEBUG case 'z': Grid::dump(); break; #endif #ifdef DEVELOPMENT case '.': Displayer::screenShot(); break; #endif case 27: Game::concession(); break; default: keypressed = false; } if(keypressed) ActionRecorder::addAction(state); } void Controller::keyboardUpPlay ( unsigned char key, int x, int y ) { bool keypressed = true; switch (key) { case GC_LEFT_KEY: case (GC_LEFT_KEY - 32): state &= ~CC_LEFT; break; case GC_RIGHT_KEY: case (GC_RIGHT_KEY - 32): state &= ~CC_RIGHT; break; case GC_UP_KEY: case (GC_UP_KEY - 32): state &= ~CC_UP; break; case GC_DOWN_KEY: case (GC_DOWN_KEY - 32): state &= ~CC_DOWN; break; case GC_SWAP_KEY: case (GC_SWAP_KEY - 32): case ' ': state &= ~CC_SWAP; break; case GC_ADVANCE_KEY: case (GC_ADVANCE_KEY - 32): case '\r': state &= ~CC_ADVANCE; break; case GC_PAUSE_KEY: case (GC_PAUSE_KEY - 32): state &= ~CC_PAUSE; break; default: keypressed = false; } if(keypressed) ActionRecorder::addAction(state); } void Controller::specialPlay ( int key, int x, int y ) { switch (key) { case GLUT_KEY_LEFT: state |= CC_LEFT; break; case GLUT_KEY_RIGHT: state |= CC_RIGHT; break; case GLUT_KEY_UP: state |= CC_UP; break; case GLUT_KEY_DOWN: state |= CC_DOWN; break; } } void Controller::specialUpPlay ( int key, int x, int y ) { switch (key) { case GLUT_KEY_LEFT: state &= ~CC_LEFT; break; case GLUT_KEY_RIGHT: state &= ~CC_RIGHT; break; case GLUT_KEY_UP: state &= ~CC_UP; break; case GLUT_KEY_DOWN: state &= ~CC_DOWN; break; } } void Controller::keyboardMeta ( unsigned char key, int x, int y ) { switch (key) { #ifdef DEVELOPMENT case '.': Displayer::screenShot(); break; #endif case GC_LEFT_KEY: case (GC_LEFT_KEY - 32): case GC_RIGHT_KEY: case (GC_RIGHT_KEY - 32): case GC_UP_KEY: case (GC_UP_KEY - 32): case GC_DOWN_KEY: case (GC_DOWN_KEY - 32): case GC_SWAP_KEY: case (GC_SWAP_KEY - 32): case ' ': case GC_ADVANCE_KEY: case (GC_ADVANCE_KEY - 32): case '\r': case GC_PAUSE_KEY: case (GC_PAUSE_KEY - 32): MESSAGE("game key pressed"); MetaState::localKeyPressed(false); break; default: MESSAGE("game key not-pressed"); MetaState::localKeyPressed(true); } } void Controller::keyboardUpMeta ( unsigned char key, int x, int y ) { } void Controller::specialMeta ( int key, int x, int y ) { if (MetaState::mode * CM_SOLO) switch (key) { case GLUT_KEY_UP: state |= CC_UP; break; case GLUT_KEY_DOWN: state |= CC_DOWN; break; default: MetaState::localKeyPressed(false); break; } else MetaState::localKeyPressed(false); } void Controller::specialUpMeta ( int key, int x, int y ) { assert(MetaState::mode & CM_SOLO); switch (key) { case GLUT_KEY_UP: state &= ~CC_UP; break; case GLUT_KEY_DOWN: state &= ~CC_DOWN; break; } } void Controller::entry ( int mouse_state ) { if (mouse_state == GLUT_LEFT) state = 0; } crack-attack-1.1.14/src/Game.cxx0000644000175000001440000002670010234000015016034 0ustar webbsterusers/* * Game.cxx * Daniel Nelson - 8/25/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * The core loop plus extras. * Remove dying_count_2. */ #include #include "glext.h" #include #include using namespace std; #include "Game.h" #include "BlockManager.h" #include "CelebrationManager.h" #include "Clock.h" #include "Controller.h" #include "ActionRecorder.h" #include "Communicator.h" #include "ComboManager.h" #include "CountDownManager.h" #include "Creep.h" #include "GarbageGenerator.h" #include "GarbageManager.h" #include "Grid.h" #include "LevelLights.h" #include "LoseBar.h" #include "MessageManager.h" #include "MetaState.h" #include "Random.h" #include "Score.h" #include "ScoreRecordManager.h" #include "SignManager.h" #include "Sine.h" #include "SparkleManager.h" #include "Spring.h" #include "Swapper.h" #include "WinRecord.h" #include "X.h" #include "ComputerPlayer.h" #ifdef AUDIO_ENABLED #include "Music.h" #endif int Game::time_step; int Game::state; int Game::awaking_count; int Game::dying_count; int Game::dying_count_2; int Game::previous_time; int Game::remaining_time; bool Game::button_down_pause; bool Game::step_play; int Game::sync_wait; double Game::lastframe = 0.0; void Game::initialize ( ) { Random::initialize(); WinRecord::initialize(); LevelLights::initialize(); Score::initialize(); Sine::initialize(); LoseBar::initialize(); ActionRecorder::initialize(); gameFinish(); } void Game::gameStart ( ) { state = GS_NORMAL; awaking_count = 0; dying_count = 0; WinRecord::gameStart(); BlockManager::gameStart(); GarbageManager::gameStart(); ComboManager::gameStart(); GarbageGenerator::gameStart(); X::gameStart(); Grid::gameStart(); Controller::gameStart(); Creep::gameStart(); Swapper::gameStart(); Spring::gameStart(); LevelLights::gameStart(); CountDownManager::gameStart(); Clock::gameStart(); LoseBar::gameStart(); ComputerPlayer::gameStart(); button_down_pause = false; step_play = true; remaining_time = 0; time_step = 1; } void Game::gameFinish ( ) { remaining_time = 0; time_step = 1; } void Game::cleanUp ( ) { CountDownManager::cleanUp(); Score::cleanUp(); } void Game::loss ( ) /* * Called when creep detects a game loss condition; opponent may have already * lost, so me must wait for confirmation. */ { if (!(MetaState::mode & CM_SOLO)) { if (!(state & (GS_MAY_HAVE_LOST | GS_WON))) { state = GS_MAY_HAVE_LOST; Communicator::setLossTimeStep(); } } else state |= GS_END_PLAY; } void Game::lossConfirmation ( ) /* * Called by Communicator when opponent confirms game loss. Now we must only * wait for the level lights to end play. */ { state = GS_LOST | GS_END_PLAY; } void Game::aiPlayerLoss ( ) { if (!(state & GS_WON) && !(state & GS_END_PLAY)) state = GS_WON | GS_END_PLAY; } void Game::won ( ) /* * Called by Communicator when opponent signals a game loss that predates * ours or signals a reverse of our game loss. Now we must wait to confirm * our opponent's loss and for the level lights to end play. */ { if (!(state & GS_WON)) state = GS_WON | GS_MUST_CONFIRM_LOSS; } void Game::concession ( ) /* * Called by the controller upon player concession. */ { if (CountDownManager::start_pause_alarm != 0) return; loss(); MetaState::state |= MS_CONCESSION; } void Game::buttonPause ( ) // run time step during pause (for Communicator); then reset the clock to the // value at the pause time { // unpause if ((state & (GS_PAUSED | GS_SYNC_WAIT)) == GS_PAUSED) { state = GS_NORMAL; MessageManager::freeMessage(); if (CountDownManager::state != -1) MessageManager::readyMessage(CountDownManager::state); if (!(MetaState::mode & CM_SOLO)) { Communicator::unpauseSyncCheck(); Communicator::signalUnpaused(); } #ifdef AUDIO_ENABLED Music::resume(); #endif // pause } else { // to simplify things, you can't pause if you're about to lose if (!(state & GS_NORMAL)) return; state = GS_PAUSED; if (CountDownManager::state != -1) MessageManager::freeMessage(); MessageManager::readyMessage(MS_PAUSED); if (!(MetaState::mode & CM_SOLO)) Communicator::signalPaused(); #ifdef AUDIO_ENABLED Music::pause(); #endif } } void Game::netSignalPause ( ) { if (!(state & GS_NORMAL)) return; state = GS_PAUSED; if (CountDownManager::state != -1) MessageManager::freeMessage(); MessageManager::readyMessage(MS_PAUSED); } void Game::netSignalUnpause ( ) { if ((state & (GS_PAUSED | GS_SYNC_WAIT)) != GS_PAUSED) return; state = GS_NORMAL; MessageManager::freeMessage(); if (CountDownManager::state != -1) MessageManager::readyMessage(CountDownManager::state); } void Game::syncPause ( int delay ) { assert(delay > 0); state = GS_PAUSED | GS_SYNC_WAIT; sync_wait = delay; if (CountDownManager::state != -1) MessageManager::freeMessage(); MessageManager::readyMessage(MS_WAITING); } void Game::syncUnpause ( ) { state = GS_NORMAL; MessageManager::freeMessage(); if (CountDownManager::state != -1) MessageManager::readyMessage(CountDownManager::state); } void Game::idleMeta ( ) { #ifndef _WIN32 timeval now; double nowd; gettimeofday(&now,NULL); #define FPSDIFF (1.0f/30.0f) nowd = now.tv_sec; nowd += (double)now.tv_usec / 1000000.0f; if ( (nowd - lastframe) > FPSDIFF ) { lastframe = nowd; } else { usleep(1000); } #endif int modified_and_complete = false; do { int time = glutGet((GLenum) GLUT_ELAPSED_TIME); remaining_time += time - previous_time; previous_time = time; // no time step yet if (remaining_time < GC_TIME_STEP_PERIOD) break; remaining_time -= GC_TIME_STEP_PERIOD; time_step++; if (remaining_time < GC_TIME_STEP_PERIOD) modified_and_complete = true; else DOT(3); // communicate state and other stuff if (!(MetaState::state & MS_GAME_OVER_KEY_WAIT) && !(MetaState::mode & CM_SOLO)) Communicator::timeStepMeta(); // advance celebration CelebrationManager::timeStep(); // advance the score record ScoreRecordManager::timeStep(); // update message pulse MessageManager::timeStep(); // update the pretty stuff too SparkleManager::timeStep(); SignManager::timeStep(); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) WinRecord::timeStep(); LevelLights::timeStep(); // advance the clock through its final tick fade Clock::timeStepMeta(); // advance the score through its final increment fade Score::timeStepMeta(); } while (false); if (modified_and_complete) { glFinish(); glutPostRedisplay(); } } void Game::idlePlay ( ) { #ifndef _WIN32 timeval now; double nowd; gettimeofday(&now,NULL); #define FPSDIFF (1.0f/30.0f) nowd = now.tv_sec; nowd += (double)now.tv_usec / 1000000.0f; if ( (nowd - lastframe) > FPSDIFF ) { lastframe = nowd; } else { usleep(1000); } #endif int modified_and_complete = false; do { int time = glutGet((GLenum) GLUT_ELAPSED_TIME); remaining_time += time - previous_time; previous_time = time; // no time step yet if (remaining_time < GC_TIME_STEP_PERIOD) break; remaining_time -= GC_TIME_STEP_PERIOD; if (remaining_time < GC_TIME_STEP_PERIOD) modified_and_complete = true; else DOT(2); if (!(state & GS_PAUSED)) { if (step_play) { time_step++; // check for and continue swaps and moves Swapper::timeStep(); // update the level lights LevelLights::timeStep(); // update message pulse MessageManager::timeStep(); // move the win record stars WinRecord::timeStep(); // update the starting count down CountDownManager::timeStep(); if (CountDownManager::start_pause_alarm != 0) { // some objects require a time step during start pause if (!(MetaState::mode & CM_SOLO)) Communicator::timeStepPlay(); // reset the clock Clock::timeStepMeta(); continue; } if (MetaState::mode & CM_AI) ComputerPlayer::timeStep(); // loop over the grid, bottom to top; garbage will advance x and y for (int y = 1; y < GC_PLAY_HEIGHT; y++) for (int x = 0; x < GC_PLAY_WIDTH; x++) { if (Grid::residentTypeAt(x, y) & GR_EMPTY) continue; if (Grid::residentTypeAt(x, y) & GR_BLOCK) Grid::blockAt(x, y).timeStep(); else Grid::garbageAt(x, y).timeStep(x, y); } // perhaps creep upward Creep::timeStep(); // process elimination check requests and update top_occupied_row Grid::timeStep(); // handle new and finished combos ComboManager::timeStep(); } // communicate garbage and other stuff if (!(MetaState::mode & CM_SOLO)) Communicator::timeStepPlay(); if (step_play) { // drop queued garbage GarbageGenerator::timeStep(); // move the sparkles and signs SparkleManager::timeStep(); SignManager::timeStep(); // update the impact spring if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) Spring::timeStep(); // update the clock Clock::timeStepPlay(); // update the score Score::timeStepPlay(); // update the losebar LoseBar::timeStep(); // advance extreme effects if (MetaState::mode & CM_X) X::timeStep(); } } else { // if this is a sync pause, count down the waiting period if (state & GS_SYNC_WAIT && !--sync_wait) syncUnpause(); // communicate when paused if (!(MetaState::mode & CM_SOLO)) Communicator::timeStepPlay(); // update message pulse MessageManager::timeStep(); } if (state & (GS_MAY_HAVE_LOST | GS_MUST_CONFIRM_LOSS)) step_play = false; if (state & GS_END_PLAY) { // step_play = false; if (state & GS_PAUSED) MessageManager::freeMessage(); if ((MetaState::mode & CM_SOLO) && !(MetaState::mode & CM_AI)) state = Score::gameFinish(); if (MetaState::mode & CM_AI) state = ComputerPlayer::gameFinish(); ActionRecorder::gameFinish(); if (state & GS_LOST) MetaState::gameLoss(); else MetaState::gameWon(); break; } } while (false); if (!button_down_pause) { if (Controller::pauseCommand()) { button_down_pause = true; buttonPause(); } } else if (!Controller::pauseCommand()) button_down_pause = false; if (modified_and_complete) { glFinish(); glutPostRedisplay(); } } crack-attack-1.1.14/src/Makefile.am0000644000175000001440000000473610235745437016531 0ustar webbsterusersbin_PROGRAMS = crack-attack if AUDIO_ENABLED audio_sources = Music.cxx Sound.cxx else audio_sources = endif crack_attack_SOURCES = ActionRecorder.cxx Attack.cxx Block.cxx BlockManager.cxx CelebrationManager.cxx Clock.cxx ComboManager.cxx ComboTabulator.cxx Communicator.cxx ComputerPlayer.cxx ComputerPlayerAI.cxx Controller.cxx CountDownManager.cxx Creep.cxx Displayer.cxx Game.cxx Garbage.cxx GarbageFlavorImage.cxx GarbageGenerator.cxx GarbageManager.cxx GarbageQueue.cxx Grid.cxx LevelLights.cxx LightManager.cxx LoseBar.cxx MessageManager.cxx MetaState.cxx Random.cxx Sine.cxx Score.cxx ScoreRecordManager.cxx Swapper.cxx SparkleManager.cxx Spring.cxx SignManager.cxx String.cxx TextureLoader.cxx WinRecord.cxx X.cxx DrawBlocks.cxx DrawGarbage.cxx DrawCandy.cxx DrawScoreRecord.cxx DrawSwapper.cxx DrawExternalCandy.cxx DrawLevelLights.cxx DrawCountDown.cxx DrawMessages.cxx DrawWinRecord.cxx obj_block.cxx obj_garbage.cxx obj_garbage_thin_middle.cxx obj_garbage_thin_cap.cxx obj_garbage_thick_corner.cxx obj_garbage_thick_edge.cxx obj_garbage_thick_middle.cxx obj_garbage_small.cxx obj_sparkle.cxx obj_sign.cxx obj_swapper.cxx obj_external_candy.cxx obj_level_lights.cxx obj_messages.cxx obj_clock.cxx obj_name.cxx obj_score_record.cxx ActionRecorder.h Attack.h Block.h BlockManager.h CelebrationManager.h Clock.h ComboManager.h ComboTabulator.h Communicator.h ComputerPlayer.h ComputerPlayerAI.h Controller.h CountDownManager.h Creep.h Displayer.h Game.h Garbage.h GarbageFlavorImage.h GarbageGenerator.h GarbageManager.h GarbageQueue.h Grid.h LevelLights.h LightManager.h LoseBar.h MessageManager.h MetaState.h Random.h Sine.h Score.h ScoreRecordManager.h Swapper.h SparkleManager.h Spring.h SignManager.h String.h TextureLoader.h WinRecord.h X.h Mode.h prefix.h prefix.c $(audio_sources) # prefix sources compiled whether we use them or not if WANT_GTK GUI_DIR = gtk-gui GUI_LIBS = gtk-gui/libgtkgui.a endif SUBDIRS = $(GUI_DIR) AM_CXXFLAGS = -DBR_PTHREAD=0 @DEBUG_CFLAGS@ @AUDIO_CFLAGS@ if WANT_BINRELOC PATH_INCLUDES = else PATH_INCLUDES = -DDATA_DIRECTORY='"${pkgdatadir}/"' \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DBINARY_DIRECTORY='"${bindir}"' endif INCLUDES = @PACKAGE_CFLAGS@ @DEBUG_INCLUDES@ ${PATH_INCLUDES} crack_attack_DEPENDENCIES = $(GUI_LIBS) AM_LDFLAGS = ${all_libraries} crack_attack_LDADD = ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS} -lGL -lGLU -lglut -lXi -lX11 -lXmu $(GUI_LIBS) @PACKAGE_LIBS@ @AUDIO_LIBS@ crack-attack-1.1.14/src/Makefile.in0000644000175000001440000010035610241200007016505 0ustar webbsterusers# Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 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@ SOURCES = $(crack_attack_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ bin_PROGRAMS = crack-attack$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am__crack_attack_SOURCES_DIST = ActionRecorder.cxx Attack.cxx \ Block.cxx BlockManager.cxx CelebrationManager.cxx Clock.cxx \ ComboManager.cxx ComboTabulator.cxx Communicator.cxx \ ComputerPlayer.cxx ComputerPlayerAI.cxx Controller.cxx \ CountDownManager.cxx Creep.cxx Displayer.cxx Game.cxx \ Garbage.cxx GarbageFlavorImage.cxx GarbageGenerator.cxx \ GarbageManager.cxx GarbageQueue.cxx Grid.cxx LevelLights.cxx \ LightManager.cxx LoseBar.cxx MessageManager.cxx MetaState.cxx \ Random.cxx Sine.cxx Score.cxx ScoreRecordManager.cxx \ Swapper.cxx SparkleManager.cxx Spring.cxx SignManager.cxx \ String.cxx TextureLoader.cxx WinRecord.cxx X.cxx \ DrawBlocks.cxx DrawGarbage.cxx DrawCandy.cxx \ DrawScoreRecord.cxx DrawSwapper.cxx DrawExternalCandy.cxx \ DrawLevelLights.cxx DrawCountDown.cxx DrawMessages.cxx \ DrawWinRecord.cxx obj_block.cxx obj_garbage.cxx \ obj_garbage_thin_middle.cxx obj_garbage_thin_cap.cxx \ obj_garbage_thick_corner.cxx obj_garbage_thick_edge.cxx \ obj_garbage_thick_middle.cxx obj_garbage_small.cxx \ obj_sparkle.cxx obj_sign.cxx obj_swapper.cxx \ obj_external_candy.cxx obj_level_lights.cxx obj_messages.cxx \ obj_clock.cxx obj_name.cxx obj_score_record.cxx \ ActionRecorder.h Attack.h Block.h BlockManager.h \ CelebrationManager.h Clock.h ComboManager.h ComboTabulator.h \ Communicator.h ComputerPlayer.h ComputerPlayerAI.h \ Controller.h CountDownManager.h Creep.h Displayer.h Game.h \ Garbage.h GarbageFlavorImage.h GarbageGenerator.h \ GarbageManager.h GarbageQueue.h Grid.h LevelLights.h \ LightManager.h LoseBar.h MessageManager.h MetaState.h Random.h \ Sine.h Score.h ScoreRecordManager.h Swapper.h SparkleManager.h \ Spring.h SignManager.h String.h TextureLoader.h WinRecord.h \ X.h Mode.h prefix.h prefix.c Music.cxx Sound.cxx @AUDIO_ENABLED_TRUE@am__objects_1 = Music.$(OBJEXT) Sound.$(OBJEXT) am_crack_attack_OBJECTS = ActionRecorder.$(OBJEXT) Attack.$(OBJEXT) \ Block.$(OBJEXT) BlockManager.$(OBJEXT) \ CelebrationManager.$(OBJEXT) Clock.$(OBJEXT) \ ComboManager.$(OBJEXT) ComboTabulator.$(OBJEXT) \ Communicator.$(OBJEXT) ComputerPlayer.$(OBJEXT) \ ComputerPlayerAI.$(OBJEXT) Controller.$(OBJEXT) \ CountDownManager.$(OBJEXT) Creep.$(OBJEXT) Displayer.$(OBJEXT) \ Game.$(OBJEXT) Garbage.$(OBJEXT) GarbageFlavorImage.$(OBJEXT) \ GarbageGenerator.$(OBJEXT) GarbageManager.$(OBJEXT) \ GarbageQueue.$(OBJEXT) Grid.$(OBJEXT) LevelLights.$(OBJEXT) \ LightManager.$(OBJEXT) LoseBar.$(OBJEXT) \ MessageManager.$(OBJEXT) MetaState.$(OBJEXT) Random.$(OBJEXT) \ Sine.$(OBJEXT) Score.$(OBJEXT) ScoreRecordManager.$(OBJEXT) \ Swapper.$(OBJEXT) SparkleManager.$(OBJEXT) Spring.$(OBJEXT) \ SignManager.$(OBJEXT) String.$(OBJEXT) TextureLoader.$(OBJEXT) \ WinRecord.$(OBJEXT) X.$(OBJEXT) DrawBlocks.$(OBJEXT) \ DrawGarbage.$(OBJEXT) DrawCandy.$(OBJEXT) \ DrawScoreRecord.$(OBJEXT) DrawSwapper.$(OBJEXT) \ DrawExternalCandy.$(OBJEXT) DrawLevelLights.$(OBJEXT) \ DrawCountDown.$(OBJEXT) DrawMessages.$(OBJEXT) \ DrawWinRecord.$(OBJEXT) obj_block.$(OBJEXT) \ obj_garbage.$(OBJEXT) obj_garbage_thin_middle.$(OBJEXT) \ obj_garbage_thin_cap.$(OBJEXT) \ obj_garbage_thick_corner.$(OBJEXT) \ obj_garbage_thick_edge.$(OBJEXT) \ obj_garbage_thick_middle.$(OBJEXT) obj_garbage_small.$(OBJEXT) \ obj_sparkle.$(OBJEXT) obj_sign.$(OBJEXT) obj_swapper.$(OBJEXT) \ obj_external_candy.$(OBJEXT) obj_level_lights.$(OBJEXT) \ obj_messages.$(OBJEXT) obj_clock.$(OBJEXT) obj_name.$(OBJEXT) \ obj_score_record.$(OBJEXT) prefix.$(OBJEXT) $(am__objects_1) crack_attack_OBJECTS = $(am_crack_attack_OBJECTS) am__DEPENDENCIES_1 = @WANT_GTK_TRUE@am__DEPENDENCIES_2 = gtk-gui/libgtkgui.a DEFAULT_INCLUDES = -I. -I$(srcdir) -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/ActionRecorder.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Attack.Po ./$(DEPDIR)/Block.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/BlockManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/CelebrationManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Clock.Po ./$(DEPDIR)/ComboManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ComboTabulator.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Communicator.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ComputerPlayer.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ComputerPlayerAI.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Controller.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/CountDownManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Creep.Po ./$(DEPDIR)/Displayer.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawBlocks.Po ./$(DEPDIR)/DrawCandy.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawCountDown.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawExternalCandy.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawGarbage.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawLevelLights.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawMessages.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawScoreRecord.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawSwapper.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/DrawWinRecord.Po ./$(DEPDIR)/Game.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Garbage.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/GarbageFlavorImage.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/GarbageGenerator.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/GarbageManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/GarbageQueue.Po ./$(DEPDIR)/Grid.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/LevelLights.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/LightManager.Po ./$(DEPDIR)/LoseBar.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/MessageManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/MetaState.Po ./$(DEPDIR)/Music.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Random.Po ./$(DEPDIR)/Score.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ScoreRecordManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/SignManager.Po ./$(DEPDIR)/Sine.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Sound.Po ./$(DEPDIR)/SparkleManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Spring.Po ./$(DEPDIR)/String.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/Swapper.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/TextureLoader.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/WinRecord.Po ./$(DEPDIR)/X.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_block.Po ./$(DEPDIR)/obj_clock.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_external_candy.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage_small.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage_thick_corner.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage_thick_edge.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage_thick_middle.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage_thin_cap.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_garbage_thin_middle.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_level_lights.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_messages.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_name.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_score_record.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_sign.Po ./$(DEPDIR)/obj_sparkle.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/obj_swapper.Po ./$(DEPDIR)/prefix.Po 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 = $(crack_attack_SOURCES) DIST_SOURCES = $(am__crack_attack_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = gtk-gui DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUDIO_CFLAGS = @AUDIO_CFLAGS@ AUDIO_ENABLED_FALSE = @AUDIO_ENABLED_FALSE@ AUDIO_ENABLED_TRUE = @AUDIO_ENABLED_TRUE@ AUDIO_LIBS = @AUDIO_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUG_CFLAGS = @DEBUG_CFLAGS@ DEBUG_INCLUDES = @DEBUG_INCLUDES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WANT_BINRELOC_FALSE = @WANT_BINRELOC_FALSE@ WANT_BINRELOC_TRUE = @WANT_BINRELOC_TRUE@ WANT_GTK_FALSE = @WANT_GTK_FALSE@ WANT_GTK_TRUE = @WANT_GTK_TRUE@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ @AUDIO_ENABLED_FALSE@audio_sources = @AUDIO_ENABLED_TRUE@audio_sources = Music.cxx Sound.cxx crack_attack_SOURCES = ActionRecorder.cxx Attack.cxx Block.cxx BlockManager.cxx CelebrationManager.cxx Clock.cxx ComboManager.cxx ComboTabulator.cxx Communicator.cxx ComputerPlayer.cxx ComputerPlayerAI.cxx Controller.cxx CountDownManager.cxx Creep.cxx Displayer.cxx Game.cxx Garbage.cxx GarbageFlavorImage.cxx GarbageGenerator.cxx GarbageManager.cxx GarbageQueue.cxx Grid.cxx LevelLights.cxx LightManager.cxx LoseBar.cxx MessageManager.cxx MetaState.cxx Random.cxx Sine.cxx Score.cxx ScoreRecordManager.cxx Swapper.cxx SparkleManager.cxx Spring.cxx SignManager.cxx String.cxx TextureLoader.cxx WinRecord.cxx X.cxx DrawBlocks.cxx DrawGarbage.cxx DrawCandy.cxx DrawScoreRecord.cxx DrawSwapper.cxx DrawExternalCandy.cxx DrawLevelLights.cxx DrawCountDown.cxx DrawMessages.cxx DrawWinRecord.cxx obj_block.cxx obj_garbage.cxx obj_garbage_thin_middle.cxx obj_garbage_thin_cap.cxx obj_garbage_thick_corner.cxx obj_garbage_thick_edge.cxx obj_garbage_thick_middle.cxx obj_garbage_small.cxx obj_sparkle.cxx obj_sign.cxx obj_swapper.cxx obj_external_candy.cxx obj_level_lights.cxx obj_messages.cxx obj_clock.cxx obj_name.cxx obj_score_record.cxx ActionRecorder.h Attack.h Block.h BlockManager.h CelebrationManager.h Clock.h ComboManager.h ComboTabulator.h Communicator.h ComputerPlayer.h ComputerPlayerAI.h Controller.h CountDownManager.h Creep.h Displayer.h Game.h Garbage.h GarbageFlavorImage.h GarbageGenerator.h GarbageManager.h GarbageQueue.h Grid.h LevelLights.h LightManager.h LoseBar.h MessageManager.h MetaState.h Random.h Sine.h Score.h ScoreRecordManager.h Swapper.h SparkleManager.h Spring.h SignManager.h String.h TextureLoader.h WinRecord.h X.h Mode.h prefix.h prefix.c $(audio_sources) # prefix sources compiled whether we use them or not @WANT_GTK_TRUE@GUI_DIR = gtk-gui @WANT_GTK_TRUE@GUI_LIBS = gtk-gui/libgtkgui.a SUBDIRS = $(GUI_DIR) AM_CXXFLAGS = -DBR_PTHREAD=0 @DEBUG_CFLAGS@ @AUDIO_CFLAGS@ @WANT_BINRELOC_FALSE@PATH_INCLUDES = -DDATA_DIRECTORY='"${pkgdatadir}/"' \ @WANT_BINRELOC_FALSE@ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ @WANT_BINRELOC_FALSE@ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @WANT_BINRELOC_FALSE@ -DBINARY_DIRECTORY='"${bindir}"' @WANT_BINRELOC_TRUE@PATH_INCLUDES = INCLUDES = @PACKAGE_CFLAGS@ @DEBUG_INCLUDES@ ${PATH_INCLUDES} crack_attack_DEPENDENCIES = $(GUI_LIBS) AM_LDFLAGS = ${all_libraries} crack_attack_LDADD = ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS} -lGL -lGLU -lglut -lXi -lX11 -lXmu $(GUI_LIBS) @PACKAGE_LIBS@ @AUDIO_LIBS@ all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .cxx .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ 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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) crack-attack$(EXEEXT): $(crack_attack_OBJECTS) $(crack_attack_DEPENDENCIES) @rm -f crack-attack$(EXEEXT) $(CXXLINK) $(crack_attack_LDFLAGS) $(crack_attack_OBJECTS) $(crack_attack_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ActionRecorder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Attack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Block.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BlockManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CelebrationManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Clock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ComboManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ComboTabulator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Communicator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ComputerPlayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ComputerPlayerAI.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Controller.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CountDownManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Creep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Displayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawBlocks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawCandy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawCountDown.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawExternalCandy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawGarbage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawLevelLights.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawMessages.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawScoreRecord.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawSwapper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrawWinRecord.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Garbage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GarbageFlavorImage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GarbageGenerator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GarbageManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GarbageQueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Grid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LevelLights.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LightManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LoseBar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetaState.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Music.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Random.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Score.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ScoreRecordManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SignManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SparkleManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Spring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/String.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Swapper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextureLoader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WinRecord.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/X.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_block.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_clock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_external_candy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage_small.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage_thick_corner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage_thick_edge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage_thick_middle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage_thin_cap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_garbage_thin_middle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_level_lights.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_messages.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_name.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_score_record.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_sign.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_sparkle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj_swapper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefix.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cxx.o: @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@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @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@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uninstall-info-am: # 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): @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(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; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 \ test -d "$(distdir)/$$subdir" \ || mkdir "$(distdir)/$$subdir" \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="../$(top_distdir)" \ distdir="../$(distdir)/$$subdir" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_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-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-binPROGRAMS clean-generic clean-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-hdr distclean-recursive distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-info-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: crack-attack-1.1.14/src/obj_garbage_thin_cap.cxx0000644000175000001440000001176310231337750021275 0ustar webbsterusers/* * garbage_thin_cap.cxx * Daniel Nelson - 9/1/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates a display list for the cap of thin garbage. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::garbage_thin_cap_list; void Displayer::generateGarbageThinCapList ( ) { garbage_thin_cap_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glNewList(garbage_thin_cap_list, GL_COMPILE); GLfloat vertices_0[3 * 18] = { -0.8f, -0.8f, -1.0f, 1.0f, -0.8f, -1.0f, -0.8f, -1.0f, -0.8f, 1.0f, -1.0f, -0.8f, -0.8f, -1.0f, 0.8f, 1.0f, -1.0f, 0.8f, -0.8f, -0.8f, 1.0f, 1.0f, -0.8f, 1.0f, -0.8f, 0.8f, 1.0f, 1.0f, 0.8f, 1.0f, -0.8f, 1.0f, 0.8f, 1.0f, 1.0f, 0.8f, -0.8f, 1.0f, -0.8f, 1.0f, 1.0f, -0.8f, -0.8f, 0.8f, -1.0f, 1.0f, 0.8f, -1.0f, -0.8f, -0.8f, -1.0f, 1.0f, -0.8f, -1.0f }; GLfloat vertices_1[3 * 8] = { -0.8f, -0.8f, -1.0f, -1.0f, -0.8f, -0.8f, -0.8f, 0.8f, -1.0f, -1.0f, 0.8f, -0.8f, -0.8f, 1.0f, -0.8f, -1.0f, 0.8f, 0.8f, -0.8f, 1.0f, 0.8f, -0.8f, 0.8f, 1.0f }; GLfloat vertices_2[3 * 8] = { -0.8f, 0.8f, 1.0f, -1.0f, 0.8f, 0.8f, -0.8f, -0.8f, 1.0f, -1.0f, -0.8f, 0.8f, -0.8f, -1.0f, 0.8f, -1.0f, -0.8f, -0.8f, -0.8f, -1.0f, -0.8f, -0.8f, -0.8f, -1.0f }; GLfloat vertices_3[3 * 4] = { -1.0f, 0.8f, 0.8f, -1.0f, 0.8f, -0.8f, -1.0f, -0.8f, 0.8f, -1.0f, -0.8f, -0.8f }; GLfloat normals_0[3 * 18] = { 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f }; GLfloat normals_1[3 * 8] = { 0.0f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; GLfloat normals_2[3 * 8] = { 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f }; GLfloat normals_3[3 * 4] = { -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f }; GLfloat tex_coords_0[3 * 18]; for (int n = 3 * 18; n--; ) tex_coords_0[n] = vertices_0[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_1[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_1[n] = vertices_1[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_2[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_2[n] = vertices_2[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_3[3 * 4]; for (int n = 3 * 4; n--; ) tex_coords_3[n] = vertices_3[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 18); glVertexPointer(3, GL_FLOAT, 0, vertices_1); glNormalPointer(GL_FLOAT, 0, normals_1); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_1); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glVertexPointer(3, GL_FLOAT, 0, vertices_2); glNormalPointer(GL_FLOAT, 0, normals_2); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_2); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glVertexPointer(3, GL_FLOAT, 0, vertices_3); glNormalPointer(GL_FLOAT, 0, normals_3); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_3); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/GarbageManager.h0000644000175000001440000000565210220011760017442 0ustar webbsterusers/* * GarbageManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef GARBAGEMANAGER_H #define GARBAGEMANAGER_H #include using namespace std; #include "Garbage.h" #include "GarbageFlavorImage.h" class ComboTabulator; /* static */ class GarbageManager { public: static void gameStart ( ); static bool newFallingGarbage ( int height, int width, int flavor ); static inline void newAwakingGarbage ( int x, int y, int height, int pop_delay, int awake_delay, ComboTabulator *combo, int pop_color ) { if (garbage_count == GC_GARBAGE_STORE_SIZE) return; int id = findFreeId(); allocateId(id); Garbage *garbage = garbageStore + id; garbage->initializeAwaking(x, y, height, pop_delay, awake_delay, combo, pop_color); } static inline void newFallingGarbage ( int x, int y, int height, int width, int flavor ) { if (garbage_count == GC_GARBAGE_STORE_SIZE) return; int id = findFreeId(); allocateId(id); Garbage *garbage = garbageStore + id; garbage->initializeFalling(x, y, height, width, flavor); GarbageFlavorImage::requestGarbageFlavorImage(*garbage); } static inline void deleteGarbage ( Garbage *garbage ) { GarbageFlavorImage::notifyGarbageDestruction(*garbage); freeId(garbage->id); } static inline void shiftUp ( ) { int c = garbage_count; for (int n = 0; c; n++) if (storeMap[n]) { c--; garbageStore[n].y++; } } static inline bool isSpecialFlavor ( int flavor ) { return flavor; } static inline int mapBlockCodeToGarbageFlavor ( int code ) { return code + (GF_GRAY + 1); } static int garbage_count; static Garbage garbageStore[GC_GARBAGE_STORE_SIZE]; static bool storeMap[GC_GARBAGE_STORE_SIZE]; private: static inline int findFreeId ( ) { int n; for (n = 0; storeMap[n]; n++); return n; } static inline void allocateId ( int id ) { assert(!storeMap[id]); storeMap[id] = true; garbage_count++; } static inline void freeId ( int id ) { assert(storeMap[id]); storeMap[id] = false; garbage_count--; } }; #endif crack-attack-1.1.14/src/LoseBar.cxx0000644000175000001440000000552210230144462016524 0ustar webbsterusers/* * LoseBar.cxx * Daniel Nelson - 3/1/2 * * Copyright (C) 2002 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the losebar. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Creep.h" #include "Displayer.h" #include "LoseBar.h" GLfloat LoseBar::bar; int LoseBar::fade_timer; int LoseBar::state; void LoseBar::initialize ( ) { bar = 0.0f; fade_timer = 0; state = LB_INACTIVE; } void LoseBar::gameStart ( ) { // at the start of the game, fade to inactive if (state == LB_LOW_ALERT) enterLowToInactiveFade(); else if (state == LB_HIGH_ALERT) enterHighToInactiveFade(); } void LoseBar::timeStep ( ) { // update state // if we're not on alert if (state & (LB_INACTIVE | LB_FADE_LOW_TO_INACTIVE | LB_FADE_HIGH_TO_INACTIVE)) { // if we're done fading if (state & (LB_FADE_LOW_TO_INACTIVE | LB_FADE_HIGH_TO_INACTIVE) && --fade_timer == 0) state = LB_INACTIVE; // if we should be on alert if (Creep::creep_freeze) { // no check for high alert is needed state = LB_LOW_ALERT; fade_timer = 0; } // if we are on low alert } else if (state == LB_LOW_ALERT) { // if we no longer should be on alert if (!Creep::creep_freeze) enterLowToInactiveFade(); // if we should enter high alert else if (Creep::loss_alarm <= GC_LOSS_DELAY_ELIMINATION) state = LB_HIGH_ALERT; // if we are on high alert } else if (state == LB_HIGH_ALERT) { // if we no longer should be on alert if (!Creep::creep_freeze) enterHighToInactiveFade(); // if we are fading because of a high alert reset } else if (state == LB_FADE_RESET_HIGH) { if (--fade_timer == 0) state = LB_HIGH_ALERT; } // calculate the bar value if (state & (LB_LOW_ALERT | LB_HIGH_ALERT)) if (state & LB_LOW_ALERT) bar = (GC_LOSS_DELAY - Creep::loss_alarm) * (1.0f / (GLfloat) (GC_LOSS_DELAY - GC_LOSS_DELAY_ELIMINATION)); else bar = (GC_LOSS_DELAY_ELIMINATION - Creep::loss_alarm) * (1.0f / (GLfloat) GC_LOSS_DELAY_ELIMINATION); } crack-attack-1.1.14/src/Score.h0000644000175000001440000001060010231337750015673 0ustar webbsterusers/* * Score.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SCORE_H #define SCORE_H using namespace std; #include "Game.h" #include "ComboTabulator.h" #include "MetaState.h" class Rank { public: char name[GC_PLAYER_NAME_LENGTH]; int score; }; class ComboRank { public: char name[GC_PLAYER_NAME_LENGTH]; int multiplier; int score; }; /* static */ class Score { public: static void initialize ( ); static void cleanUp ( ); static int gameFinish ( ); static bool readScoreRecord ( ); static bool readMultRecord ( ); static void writeScoreRecord ( ); static void setupDefaultScoreRecord ( ); static void setupDefaultMultRecord ( ); static inline void timeStepMeta ( ) { if (!(MetaState::mode & CM_SOLO)) return; if (fade_timer == 0) return; fade_timer--; } static inline void timeStepPlay ( ) { if (!(MetaState::mode & CM_SOLO)) return; if (fade_timer == 0) { if (backlog > 0) { backlog--; score++; incrementDigits(); fade_timer = GC_MAX_SCORE_INCREMENT_DELAY - (GC_SCORE_DELAY_SLOPE * backlog); if (fade_timer < GC_MIN_SCORE_INCREMENT_DELAY) { fade_timer = GC_MIN_SCORE_INCREMENT_DELAY; inverse_timer_start = 1.0f / (GLfloat) GC_MIN_SCORE_INCREMENT_DELAY; } else inverse_timer_start = 1.0f / (GLfloat) fade_timer; } } else fade_timer--; } static inline void incrementDigits ( ) { for (int i = GC_NUMBER_DIGITS; i--; ) previous_digits[i] = digits[i]; int i; for (i = 0; i < GC_NUMBER_DIGITS; i++) { digits[i]++; if (digits[i] != 10) break; digits[i] = 0; } if (++i > n_digits_displayed && i <= GC_NUMBER_DIGITS) n_digits_displayed = i; } static inline void reportMultiplier ( ComboTabulator &combo ) { // check for highest multiplier if (combo.multiplier > top_combo_multiplier) top_combo_multiplier = combo.multiplier; if (!(MetaState::mode & CM_SOLO)) return; // multiply this step's score backlog += combo.base_score_this_step * (combo.multiplier - combo.n_multipliers_this_step - 1); // give another helping of the accumulated score backlog += combo.base_accumulated_score * combo.n_multipliers_this_step; combo.n_multipliers_this_step = 0; } static inline int reportElimination ( ComboTabulator &combo ) { if (!(MetaState::mode & CM_SOLO)) return 0; int points = 0; // gray elimination score if (combo.special_magnitude > 0) points += GC_GRAY_SCORE * (combo.special_magnitude == GC_MIN_PATTERN_LENGTH ? GC_MIN_PATTERN_SCORE : combo.special_magnitude); // colored elimination score else points += (combo.magnitude == GC_MIN_PATTERN_LENGTH ? GC_MIN_PATTERN_SCORE : combo.magnitude); // special block bonuses for (int n = BF_NUMBER_SPECIAL; n--; ) points += combo.special[n] * special_block_scores[n]; backlog += points; return points; } static inline bool topRank ( ) { return player_rank == GC_SCORE_REC_LENGTH - 1; } static int score; static int backlog; static short digits[GC_NUMBER_DIGITS]; static short previous_digits[GC_NUMBER_DIGITS]; static int fade_timer; static GLfloat inverse_timer_start; static int n_digits_displayed; static int player_rank; static Rank record[GC_SCORE_REC_LENGTH]; static int special_block_scores[BF_NUMBER_SPECIAL]; static int top_combo_multiplier; static int top_combo_score; static ComboRank combo_record[GC_SCORE_MULT_LENGTH]; }; #endif crack-attack-1.1.14/src/DrawCountDown.cxx0000644000175000001440000000472710230144462017741 0ustar webbsterusers/* * DrawCountDown.cxx * Daniel Nelson - 10/27/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws the game start count down. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "CountDownManager.h" #include "MessageManager.h" void Displayer::drawCountDown_inline_split_ ( ) { glBindTexture(GL_TEXTURE_2D, message_texture); glPushMatrix(); GLfloat lambda = CountDownManager::message_switch_alarm * (1.0f / (GLfloat) (GC_START_PAUSE_DELAY / 3)); if (CountDownManager::state != 0) { glColor4f(1.0f, 1.0f, 1.0f, lambda); glTranslatef(0.0f, lambda * lambda * (DC_GRID_ELEMENT_LENGTH * GC_SAFE_HEIGHT * (1.0f - DC_COUNT_DOWN_HEIGHT_RATIO)) + (DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * GC_SAFE_HEIGHT * DC_COUNT_DOWN_HEIGHT_RATIO), DC_PLAY_OFFSET_Z); glScalef((1.0f - lambda) * (1.0f - lambda) * (DC_COUNT_DOWN_MAX_SCALE - 1.0f) + 1.0f, (1.0f - lambda) * (1.0f - lambda) * (DC_COUNT_DOWN_MAX_SCALE - 1.0f) + 1.0f, 1.0f); } else { if (lambda > DC_COUNT_DOWN_GO_INFLECTION) lambda = 1.0f; else lambda = Game::sqrt(lambda * (1.0f / DC_COUNT_DOWN_GO_INFLECTION)); glColor4f(1.0f, 1.0f, 1.0f, lambda); glTranslatef(0.0f, DC_PLAY_OFFSET_Y + DC_GRID_ELEMENT_LENGTH * GC_SAFE_HEIGHT * 0.5f, DC_PLAY_OFFSET_Z); glScalef(DC_COUNT_DOWN_MAX_SCALE, DC_COUNT_DOWN_MAX_SCALE, 1.0f); } if (MessageManager::message_shape & MS_1x1) glCallList(message_1x1_list); else if (MessageManager::message_shape & MS_2x1) glCallList(message_2x1_list); else glCallList(message_4x1_list); glPopMatrix(); } crack-attack-1.1.14/src/ComboManager.h0000644000175000001440000000425310132356545017164 0ustar webbsterusers/* * ComboManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef COMBOMANAGER_H #define COMBOMANAGER_H #include using namespace std; #include "ComboTabulator.h" #include "BlockManager.h" #include "Block.h" class Block; /* static */ class ComboManager { public: static void gameStart ( ); static void timeStep ( ); static inline ComboTabulator &newComboTabulator ( ) { int id = findFreeId(); allocateId(id); ComboTabulator &combo = tabulatorStore[id]; combo.initialize(); return combo; } static inline void deleteComboTabulator ( ComboTabulator &combo ) { freeId(combo.id); } static inline void specialBlockTally ( ComboTabulator &combo, Block &block ) { if (BlockManager::isBaseFlavor(block.flavor)) return; combo.special[BlockManager::mapSpecialFlavorToCode(block.flavor)]++; } private: static inline int findFreeId ( ) { int n; for (n = 0; storeMap[n]; n++); return n; } static inline void allocateId ( int id ) { assert(!storeMap[id]); storeMap[id] = true; combo_count++; } static inline void freeId ( int id ) { assert(storeMap[id]); storeMap[id] = false; combo_count--; } static ComboTabulator tabulatorStore[GC_COMBO_TABULATOR_STORE_SIZE]; static bool storeMap[GC_COMBO_TABULATOR_STORE_SIZE]; static int combo_count; }; #endif crack-attack-1.1.14/src/CountDownManager.h0000644000175000001440000000247410132356545020050 0ustar webbsterusers/* * CountDownManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef COUNTDOWNMANAGER_H #define COUNTDOWNMANAGER_H using namespace std; /* static */ class CountDownManager { public: static void gameStart ( ); static void cleanUp ( ); static inline void timeStep ( ) { if (state == -1) return; timeStep_inline_split_(); } static int state; static int start_pause_alarm; static int message_switch_alarm; private: static void timeStep_inline_split_ ( ); }; #endif crack-attack-1.1.14/src/MessageManager.h0000644000175000001440000000442310132356545017510 0ustar webbsterusers/* * MessageManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef MESSAGEMANAGER_H #define MESSAGEMANAGER_H using namespace std; #include "Displayer.h" // message shapes #define MS_1x1 (1 << 0) #define MS_2x1 (1 << 1) #define MS_4x1 (1 << 2) // messages #define MS_COUNT_DOWN_GO (0) #define MS_COUNT_DOWN_1 (1) #define MS_COUNT_DOWN_2 (2) #define MS_COUNT_DOWN_3 (3) #define MS_ANYKEY (4) #define MS_WAITING (5) #define MS_PAUSED (6) #define MS_WINNER (7) #define MS_LOSER (8) #define MS_GAME_OVER (9) // message modes #define MM_NORMAL (1 << 0) #define MM_CELEBRATION (1 << 1) /* static */ class MessageManager { public: static inline void readyMessage ( int message ) { Displayer::readyMessage(message); message_shape = Displayer::message_shape[message]; time_step = 0; } static inline void nextMessage ( int message ) { Displayer::nextMessage(message); message_shape = Displayer::message_shape[message]; time_step = 0; } static inline void freeMessage ( ) { Displayer::freeMessage(); message_shape = 0; } static inline void timeStep ( ) { if (!message_shape) return; if (++time_step == DC_MESSAGE_PULSE_PERIOD) time_step = 0; } static int message_shape; static int time_step; static int mode; }; #endif crack-attack-1.1.14/src/glext.h0000644000175000001440000000217010230145755015747 0ustar webbsterusers/* * GarbageQueue.cxx * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GLEXT_H_ #define _GLEXT_H_ #ifndef _WIN32 # include #else # ifndef __MINGW32__ # include # else # include # endif #endif #endif crack-attack-1.1.14/src/ComputerPlayer.h0000644000175000001440000000272310222071344017574 0ustar webbsterusers/* * ComputerPlayer.h * Andrew Sayman - 3/27/05 * * Copyright (C) 2005 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef COMP_PLAY_H #define COMP_PLAY_H #include "ComputerPlayerAI.h" //class ComputerPlayerAI; using namespace std; /* static */ class ComputerPlayer { private: static bool lost; static bool _impact; static ComputerPlayerAI *ai; static int findTopRed ( ); static double lightPartition ( int block ); public: static void gameStart ( ); static void timeStep ( ); static int gameFinish ( ); static void addGarbage ( int height, int width, int flavor ); // lights static bool checkLevelLightDying ( ); static bool checkLevelLightBlue ( int block ); static bool impact ( bool reset = false ); static int levelLightImpact ( ); }; #endif crack-attack-1.1.14/src/config.h.in0000644000175000001440000001047110232470142016472 0ustar webbsterusers/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Has audio support */ #undef AUDIO_ENABLED /* Include pthread support for binary relocation? */ #undef BR_PTHREAD /* Use binary relocation? */ #undef ENABLE_BINRELOC /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `GL' library (-lGL). */ #undef HAVE_LIBGL /* Define to 1 if you have the `GLU' library (-lGLU). */ #undef HAVE_LIBGLU /* Define to 1 if you have the `glut' library (-lglut). */ #undef HAVE_LIBGLUT /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* 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 `poll' function. */ #undef HAVE_POLL /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* 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 stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* 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 `strstr' function. */ #undef HAVE_STRSTR /* 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 that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* 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 version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Wants to compile gtk front-end */ #undef WANT_GTK /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `int' if does not define. */ #undef pid_t /* Define as `fork' if `vfork' does not work. */ #undef vfork crack-attack-1.1.14/src/Block.cxx0000644000175000001440000001774110232470141016233 0ustar webbsterusers/* * Block.cxx * Daniel Nelson - 8/21/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * The block object, of which each block is one. */ #include "Game.h" #include "Block.h" #include "BlockManager.h" #include "ComboTabulator.h" #include "Garbage.h" #include "Grid.h" #include "Random.h" #include "Swapper.h" #include "SparkleManager.h" #include "X.h" #include "Sound.h" using namespace std; void Block::initializeStatic ( int _x, int _y, int _flavor ) { x = _x; y = _y; flavor = _flavor; f_y = 0; state = BS_STATIC; alarm = 0; // pop_alarm = 0; current_combo = null; // add ourselves to the grid Grid::addBlock(x, y, this, GR_BLOCK); // if we're wild, the extreme code needs to know if (flavor == BF_WILD) X::activateWild(*this); else if (BlockManager::isSpecialColorFlavor(flavor)) X::activateSpecialColor(*this); } void Block::initializeAwaking ( int _x, int _y, int _flavor, int pop_delay, int awake_delay, ComboTabulator *combo, int _pop_color ) { x = _x; y = _y; flavor = _flavor; f_y = 0; state = BS_AWAKING; alarm = Game::time_step + awake_delay; pop_alarm = Game::time_step + pop_delay; pop_direction = BlockManager::generatePopDirection(); pop_color = _pop_color; current_combo = combo; // let the combo know we're involved current_combo->incrementInvolvement(); // change the game state Game::awaking_count++; // add ourselves to the grid Grid::addBlock(x, y, this, GR_IMMUTABLE); } void Block::timeStep ( ) { if (state & BS_STATIC) { // We may have to fall. if (Grid::stateAt(x, y - 1) & GR_EMPTY) startFalling(); else return; } else if (state & BS_AWAKING) { // The alarm has been set to go off when we're done awaking. When the // pop alarm goes off, we only switch our appearence. if (pop_alarm == Game::time_step) { #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_BLOCK_AWAKING, 5 ); #endif pop_alarm = 0; } if (alarm == Game::time_step) { // change the game state Game::awaking_count--; // change our state; startFalling() and eliminations check for // BS_STATIC state state = BS_STATIC; // if we're going to fall if (Grid::stateAt(x, y - 1) & GR_EMPTY) startFalling(current_combo, true); else { // update the grid Grid::changeState(x, y, this, GR_BLOCK); // register for elimination checking Grid::requestEliminationCheck(*this, current_combo); } } else return; } // Deal with all other states. if (state & BS_FALLING) { // We are assured that the timeStep() of any blocks below us has already // been called. Note that to start a fall, all we have to do is set our // state to BS_FALLING. This code will deal with the rest. if (alarm == Game::time_step) // hang alarm goes off alarm = 0; // if the hang alarm has gone off if (alarm == 0) { // if we're at the bottom of a grid element if (f_y == 0) { // if we're still going to fall if (Grid::stateAt(x, y - 1) & GR_EMPTY) { // shift our grid position down to the next row y--; f_y = GC_STEPS_PER_GRID; // update the grid Grid::remove(x, y + 1, this); Grid::addBlock(x, y, this, GR_FALLING); // if we've landed } else { // change our state state = BS_STATIC; #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_BLOCK_FALLEN, 2 ); #endif // update the grid Grid::changeState(x, y, this, GR_BLOCK); // register for elimination checking Grid::requestEliminationCheck(*this, current_combo); // if the block below us is swapping, we may have to switch it's combo if (current_combo) Swapper::notifyLanding(x, y, *this, current_combo); } } // if we still are, fall if (state & BS_FALLING) f_y -= GC_FALL_VELOCITY; } } else if (state & BS_DYING) { // The alarm has been set to go off when we're done dying. if (--alarm == 0) { // change the game state Game::dying_count--; Game::dying_count_2--; // update the grid Grid::remove(x, y, this); // tell our upward neighbor to start a combo fall if (y < GC_PLAY_HEIGHT - 1) { if (Grid::stateAt(x, y + 1) & GR_BLOCK) Grid::blockAt(x, y + 1).startFalling(current_combo); else if (Grid::stateAt(x, y + 1) & GR_GARBAGE) Grid::garbageAt(x, y + 1).startFalling(current_combo); } // let the combo know we're out current_combo->decrementInvolvement(); // generate some sparkles; pop_alarm stores the number if (flavor != BF_WILD) SparkleManager::createBlockDeathSpark(x, y, flavor, pop_alarm); else SparkleManager::createBlockDeathSpark(x, y, X::wildFlavor(*this), pop_alarm); // if we're wild, the extreme code needs to know if (flavor == BF_WILD) X::deactivateWild(*this); else if (BlockManager::isSpecialColorFlavor(flavor)) X::deactivateSpecialColor(); // delete ourselves BlockManager::deleteBlock(this); // if we just started dying } else if (alarm == GC_DYING_DELAY - 1) // grab the elimination magnitude from our combo pop_alarm = current_combo->latest_magnitude; } } void Block::startFalling ( ComboTabulator *combo, bool no_hang ) /* * Although blocks will fall on their own, this must be called to syncronize * and connect that falling with a elimination combo. */ { if (!(state & BS_STATIC)) return; // change our state state = BS_FALLING; // set the hang alarm and update the grid if (no_hang) { alarm = 0; Grid::changeState(x, y, this, GR_FALLING); } else { alarm = Game::time_step + GC_HANG_DELAY; Grid::changeState(x, y, this, GR_HANGING | GR_FALLING); } // let the combo know we're involved if (combo) beginComboInvolvement(combo); // tell our upward neighbor to start a combo fall if (y < GC_PLAY_HEIGHT - 1) { if (Grid::stateAt(x, y + 1) & GR_BLOCK) Grid::blockAt(x, y + 1).startFalling(current_combo, no_hang); else if (Grid::stateAt(x, y + 1) & GR_GARBAGE) Grid::garbageAt(x, y + 1).startFalling(current_combo, no_hang); } } void Block::startDying ( ComboTabulator *combo, int spark_number ) { // change the game state Game::dying_count++; Game::dying_count_2++; #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_BLOCK_DYING, spark_number / 3 ); #endif // let the combo know we're in beginComboInvolvement(combo); // change our state state = BS_DYING; // set the alarm; the alarm works this way due to display needs alarm = GC_DYING_DELAY; // update the grid Grid::changeState(x, y, this, GR_IMMUTABLE); // generate a random rotation axis Random::angle(axis_x, axis_y); } void Block::startSwapping ( int direction ) { // change our state and swap direction state = BS_SWAPPING | (direction & SA_RIGHT ? BS_SWAP_DIRECTION_MASK : 0); // update the grid Grid::changeState(x, y, this, GR_IMMUTABLE); } void Block::finishSwapping ( int s_x ) { // change our state state = BS_STATIC; x = s_x; // update the grid Grid::addBlock(x, y, this, GR_BLOCK); } crack-attack-1.1.14/src/obj_swapper.cxx0000644000175000001440000001245710230146633017517 0ustar webbsterusers/* * swapper.c_xx * Daniel Nelson 9/22/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates the swapper's displa_y list. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" // swapper's geometric constants #define SG_A (0.1f) #define SG_B (2.0f * SG_A / 2.414214f) #define SG_C (0.8f) #define SG_D (0.1f) #define SG_E (1.0f) #define SG_F (0.4f) #define SG_H (1.0f) #define SG_I (0.1f) #define SG_J (0.16f) #define SG_S (1.0f) GLuint Displayer::swapper_list; void Displayer::drawTriangle ( float a_x, float a_y, float a_z, float b_x, float b_y, float b_z, float c_x, float c_y, float c_z ) { float n_x = (c_y - a_y) * (a_z - b_z) - (a_y - b_y) * (c_z - a_z); float n_y = (c_z - a_z) * (a_x - b_x) - (a_z - b_z) * (c_x - a_x); float n_z = (c_x - a_x) * (a_y - b_y) - (a_x - b_x) * (c_y - a_y); float norm = sqrt(n_x * n_x + n_y * n_y + n_z * n_z); n_x /= norm; n_y /= norm; n_z /= norm; glNormal3f(n_x, n_y, n_z); glVertex3f(a_x, a_y, a_z); glVertex3f(b_x, b_y, b_z); glVertex3f(c_x, c_y, c_z); } void Displayer::generateSwapperList ( ) { swapper_list = glGenLists(1); glNewList(swapper_list, GL_COMPILE); glBegin(GL_TRIANGLES); // not the fastest method, but this is at start up and may change // someday; plus, if you have a super cool compiler, it could do it at // compile time; plus, if you're going to complain, why don't you buy me // a copy of 3D Studio Max drawTriangle(SG_S + SG_E - SG_C, -SG_E, SG_H, SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_C + SG_D, -SG_E + SG_A, SG_H); drawTriangle(SG_S + SG_E - SG_C + SG_D, -SG_E + SG_A, SG_H, SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H); drawTriangle(SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H, SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I); drawTriangle(SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H, SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H); drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H, SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I, SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I); drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H, SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I, SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H); drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H, SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I, SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I); drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H, SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I, SG_S + SG_E, -SG_E + SG_C, SG_H); drawTriangle(SG_S + SG_E - SG_C, -SG_E, SG_H, SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H, SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I); drawTriangle(SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H, SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I); drawTriangle(SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H, SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H); drawTriangle(SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I, SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H, SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I); drawTriangle(SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I, SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H, SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H); drawTriangle(SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I, SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H, SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I); drawTriangle(SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I, SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H, SG_S + SG_E + SG_A, -SG_E + SG_C - SG_D, SG_H); drawTriangle(SG_S + SG_E, -SG_E + SG_C, SG_H, SG_S+ SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I, SG_S + SG_E + SG_A, -SG_E + SG_C - SG_D, SG_H); glEnd(); glEndList(); } crack-attack-1.1.14/src/Garbage.cxx0000644000175000001440000002526310232470141016527 0ustar webbsterusers/* * Garbage.cxx * Daniel Nelson - 8/21/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * The garbage blocks is what this details. */ #include "Game.h" #include "Grid.h" #include "Garbage.h" #include "BlockManager.h" #include "GarbageManager.h" #include "Displayer.h" #include "Spring.h" #include "Random.h" #include "X.h" #ifdef AUDIO_ENABLED #include "Sound.h" #endif #include using namespace std; void Garbage::initializeStatic ( int _x, int _y, int _height, int _width, int _flavor ) { x = _x; y = _y; height = _height; width = _width; flavor = _flavor; f_y = 0; state = GS_STATIC; alarm = 0; pop_alarm = 0; sections_popped = 0; initial_fall = false; awaking_combo = null; // add ourselves to the grid for (int h = height; h--; ) for (int w = width; w--; ) Grid::addGarbage(x + w, y + h, this, GR_GARBAGE); } void Garbage::initializeFalling ( int _x, int _y, int _height, int _width, int _flavor ) { //MESSAGE("Entering initialize Falling _x " << _x << " _y " << _y << " _height " << _height << " _width " << _width); x = _x; y = _y; height = _height; width = _width; flavor = _flavor; f_y = 0; //MESSAGE("Second block start"); state = GS_FALLING; alarm = Game::time_step + GC_HANG_DELAY; pop_alarm = 0; sections_popped = 0; initial_fall = true; awaking_combo = NULL; //MESSAGE("Add us to the grid height: " << height << " width " << width); // add ourselves to the grid for (int h = height; h--; ) for (int w = width; w--; ) Grid::addGarbage(x + w, y + h, this, GR_FALLING); //MESSAGE("Out and alive!"); } void Garbage::initializeAwaking ( int _x, int _y, int _height, int pop_delay, int awake_delay, ComboTabulator *combo, int _pop_color ) { x = _x; y = _y; height = _height; width = GC_PLAY_WIDTH; flavor = GF_NORMAL; f_y = 0; /* #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_GARBAGE_SHATTERING, this-> width * this->height ); #endif */ state = GS_AWAKING; alarm = Game::time_step + awake_delay; pop_alarm = Game::time_step + pop_delay; sections_popped = 0; pop_direction = BlockManager::generatePopDirection(height * width); pop_color = _pop_color; initial_fall = false; // Although garbage does not participate in combos as such, this is needed // so that the garbage can pass the combo on to blocks above it if it falls // when it awakes. Note that this never happens because garbage currently // only awakes as the second row of a three row or taller shattering // garbage. Thus, all blocks above it will be BS_AWAKING when the garbage // calls their startFalling(). awaking_combo = combo; // change the game state Game::awaking_count++; // add ourselves to the grid for (int h = height; h--; ) for (int w = width; w--; ) Grid::addGarbage(x + w, y + h, this, GR_IMMUTABLE); } void Garbage::timeStep ( int &l_x, int &l_y ) { // We must advance l_x and l_y based on our size. // normal garbage dimensions if (height == 1 || width == GC_PLAY_WIDTH) { l_y += height - 1; l_x += width - 1; // special garbage dimensions } else { l_x += width - 1; // if it's not our top row, don't time step if (l_y != y + height - 1) return; } // First, the states that may change do to falling. if (state & GS_STATIC) { // We may have to fall. bool flag = true; for (int w = width; w--; ) if (!(Grid::stateAt(x + w, y - 1) & GR_EMPTY)) { flag = false; break; } if (flag) startFalling(); } else if (state & GS_AWAKING) { // The alarm has been set to go off when we're done awaking. When the pop // alarm goes off, we have to pop one more of our sections. If that's the // last section, we don't reset the pop timer. In about a million places, // we assume that awaking garbage is as wide as the grid. if (sections_popped < width * height) if (pop_alarm == Game::time_step) { sections_popped++; if (sections_popped < width * height) { if (pop_direction & (1 << 3)) pop_direction = (1 << 0); else pop_direction <<= 1; pop_alarm = Game::time_step + GC_INTERNAL_POP_DELAY; } } if (alarm == Game::time_step) { // change the game state Game::awaking_count--; // if we're going to fall bool flag = true; for (int w = width; w--; ) if (!(Grid::stateAt(x + w, y - 1) & GR_EMPTY)) { flag = false; break; } if (flag) startFalling(awaking_combo, true, true); else { // change our state state = GS_STATIC; // update the grid for (int h = height; h--; ) for (int w = width; w--; ) Grid::changeState(x + w, y + h, this, GR_GARBAGE); } } } // Deal with all other states. if (state & GS_FALLING) { // We are assured that the timeStep() of any blocks below us has already // been called. Note that to start a fall, all we have to do is set our // state to GS_FALLING. This code will deal with the rest. if (alarm == Game::time_step) // hang alarm goes off alarm = 0; // if the hang alarm has gone off if (alarm == 0) { // if we're at the bottom of a grid element if (f_y == 0) { // if we're still going to fall bool flag = true; for (int w = width; w--; ) if (!(Grid::stateAt(x + w, y - 1) & GR_EMPTY)) { flag = false; break; } if (flag) { // shift our grid position down to the next row y--; f_y = GC_STEPS_PER_GRID; // update the grid for (int h = height; h--; ) for (int w = width; w--; ) Grid::remove(x + w, y + h + 1, this); for (int h = height; h--; ) for (int w = width; w--; ) Grid::addGarbage(x + w, y + h, this, GR_FALLING); // if we've landed } else { // change our state state = BS_STATIC; #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_GARBAGE_FALLEN, this->width * this->height ); #endif // if this is the end of our initial fall if (initial_fall) { initial_fall = false; if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) Spring::notifyImpact(height, width); Grid::notifyImpact(y, height); X::notifyImpact(*this); } // update the grid for (int h = height; h--; ) for (int w = width; w--; ) Grid::changeState(x + w, y + h, this, GR_GARBAGE); } } // if we still are, fall if (state & GS_FALLING) f_y -= GC_FALL_VELOCITY; } } } void Garbage::startFalling ( ComboTabulator *combo, bool no_hang, bool self_call ) /* * While garbage doesn't have a current combo and doesn't have to deal with * such things, it does need to pass combo falls along to it's upward neighbors. */ { // if we're calling our own startFalling() this has already been checked if (!self_call) { if (!(state & BS_STATIC)) return; // if we're not going to fall for (int w = width; w--; ) if (!(Grid::stateAt(x + w, y - 1) & (GR_EMPTY | GR_FALLING))) return; } // change our state state = GS_FALLING; // set the hang alarm and update the grid if (no_hang) { alarm = 0; for (int h = height; h--; ) for (int w = width; w--; ) Grid::changeState(x + w, y + h, this, GR_FALLING); } else { alarm = Game::time_step + GC_HANG_DELAY; for (int h = height; h--; ) for (int w = width; w--; ) Grid::changeState(x + w, y + h, this, GR_HANGING | GR_FALLING); } // tell our upward neighbors to start a combo fall if (y + height < GC_PLAY_HEIGHT) { for (int w = width; w--; ) { if (Grid::stateAt(x + w, y + height) & GR_BLOCK) Grid::blockAt(x + w, y + height).startFalling(combo, no_hang); else if (Grid::stateAt(x + w, y + height) & GR_GARBAGE) Grid::garbageAt(x + w, y + height).startFalling(combo, no_hang); } } } void Garbage::startShattering ( int &s_x, int s_y, int &pop_delay, int awake_delay, ComboTabulator *combo ) /* * This is called for each row we occupy, with s_x equal to our left most * position and s_y indicating which row the call is for. We must convert * ourselves to blocks or new garbage along that row. Additionally, we must * advance s_x to our right side as well as pop_delay and delete ourselves if * this is our top row. * * Note that we may want to change the block/garbage conversion behavior. */ { #ifndef NDEBUG // otherwise assert will bite us for (int w = 0; w < width; w++) Grid::remove(s_x + w, s_y, this); #endif #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_GARBAGE_SHATTERING, this-> width * this->height ); #endif // if it's an even row, perhaps shatter into new garbage if ((width == GC_PLAY_WIDTH && ((s_y - y) & (1 << 0)) && Random::chanceIn(GC_GARBAGE_TO_GARBAGE_SHATTER)) || flavor == GF_SHATTER_TO_NORMAL_GARBAGE) { GarbageManager::newAwakingGarbage(s_x, s_y, 1, pop_delay, awake_delay, combo, flavor); s_x += GC_PLAY_WIDTH; pop_delay += GC_PLAY_WIDTH * GC_INTERNAL_POP_DELAY; // otherwise, shatter into blocks } else for (int w = 0; w < width; w++) { BlockManager::newAwakingBlock(s_x, s_y, pop_delay, awake_delay, combo, flavor); s_x++; pop_delay += GC_INTERNAL_POP_DELAY; } // If it's our top row, enter shatter state; we are no longer on the grid // but we stay around a bit to animate our shattering; since we're not in the // grid, our time step will never be called; that's OK! We'll be deleted by // the display code, sloppy but fastest. if (s_y + 1 == y + height) { // change our state state = GS_SHATTERING; // set the deletion alarm alarm = Game::time_step + DC_SHATTER_TIME; // notify extreme effects of our demise X::notifyShatter(*this); } } crack-attack-1.1.14/src/String.h0000644000175000001440000000320710132356545016076 0ustar webbsterusers/* * String.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef STRING_H #define STRING_H using namespace std; #include "Displayer.h" /* static */ class String { public: static int mapCharToCode ( char c ); static int stringWidth ( const char *string, int max_width ); static void readyLetterTextures ( ); static void freeLetterTextures ( ); static void fillStringTexture ( const char *string, GLubyte *texture, int width, bool use_alpha = false, int texture_width = 0 ); private: static const char *letter_texture_files[DC_FONT_NUMBER][DC_LETTER_NUMBER]; static const char letter_mapping[DC_LETTER_NUMBER]; static const int letter_widths[DC_FONT_NUMBER][DC_LETTER_NUMBER]; static const float colors[DC_FONT_COLOR_NUMBER][3]; static GLubyte *letter_textures[DC_FONT_NUMBER][DC_LETTER_NUMBER]; }; #endif crack-attack-1.1.14/src/Attack.cxx0000644000175000001440000001526110241174462016412 0ustar webbsterusers/* * Attack.cxx * Daniel Nelson - 8/29/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #include #include #include #ifndef _WIN32 # include #else # ifndef __MINGW32__ # include # include # endif #endif using namespace std; #include "TextureLoader.h" #include "Attack.h" #include "Communicator.h" #include "MetaState.h" #include "Random.h" #ifdef AUDIO_ENABLED #include "Sound.h" #include "Music.h" #endif #ifdef WANT_GTK #include "gtk-gui/gui_main.h" #endif #define GC_HOST_NAME_SIZE (256) /* * Documentation * html tables don't work right in explorer * man-page bug * * Issues and Watches * slow if left sitting a long time before game start * central server for online game setup * remove dying_count_2 * find and use correct GL_LIGHT_MODEL_COLOR_CONTROL defines */ int nosound = 0; int main ( int argc, char **argv ) { setupLocalDataDirectory(); #ifdef WANT_GTK if (argc <= 1) return gui_main(argc, argv); #endif char player_name[GC_PLAYER_NAME_LENGTH]; char host_name[GC_HOST_NAME_SIZE]; int port; int mode = 0; int height = -1, width = -1; player_name[0] = '\0'; parseCommandLine(argc, argv, mode, port, host_name, player_name, height, width); run_crack_attack(mode, port, host_name, player_name, height, width); return 0; } inline void usage ( ) { cerr << "Usage: " GC_BINARY " --server [PORT] [--low] [--extreme] [--wait] " "[--name 'NAME']\n" " \n" " " GC_BINARY " SERVER PORT [[--really] --low] [--name 'NAME']\n" " \n" " " GC_BINARY " --solo [[--really] --low] [-X] [--name 'NAME']\n" " \n" " " GC_BINARY " -1 [[-r] -l] [-X] [-n 'NAME']\n" " \n" " " GC_BINARY " --solo [--hard] [--easy] [--medium] [[--really] --low]" " [--name 'NAME']\n" " " << endl; exit(1); } void run_crack_attack ( int mode, int port, char *host_name, char *player_name, int width, int height) { if (!player_name) { cerr << "Player name not properly allocated" << endl; return; } if (player_name[0] == '\0') { #ifndef _WIN32 struct passwd *uinfo = getpwuid(getuid()); if (uinfo) { strncpy(player_name, uinfo->pw_name, GC_PLAYER_NAME_LENGTH); for (int n = strlen(player_name); n--; ) player_name[n] = toupper(player_name[n]); } else strncpy(player_name, GC_DEFAULT_PLAYER_NAME, GC_PLAYER_NAME_LENGTH); #else strncpy(player_name, GC_DEFAULT_PLAYER_NAME, GC_PLAYER_NAME_LENGTH); #endif } cout << GC_MESSAGE << endl; if (!(mode & CM_SOLO)) Communicator::initialize(mode, port, host_name, player_name); else Random::seed(Random::generateSeed()); MetaState::programStart(mode, player_name, width, height); #ifdef AUDIO_ENABLED if (!nosound) { Sound::initialize(); Music::initialize(); Music::play_prelude(); } #endif glutMainLoop(); #ifdef AUDIO_ENABLED Music::stop(); Music::cleanup(); Sound::cleanup(); #endif } void parseCommandLine ( int argc, char **argv, int &mode, int &port, char *host_name, char *player_name , int &height, int &width ) { for (int n = 1; argv[n]; n++) { if (!strcmp(argv[n], "--nosound")) nosound = 1; else if (!strcmp(argv[n], "-s") || !strcmp(argv[n], "--server")) { if (mode & (CM_SERVER | CM_CLIENT | CM_SOLO)) usage(); mode |= CM_SERVER; if (argv[n + 1] && argv[n + 1][0] != '-') port = atoi(argv[++n]); else port = 0; } else if (!strcmp(argv[n], "-1") || !strcmp(argv[n], "--solo")) { if (mode & (CM_SERVER | CM_CLIENT | CM_SOLO)) usage(); mode |= CM_SOLO; } else if (!strcmp(argv[n], "-n") || !strcmp(argv[n], "--name")) { if (!argv[n + 1]) usage(); strncpy(player_name, argv[++n], GC_PLAYER_NAME_LENGTH); player_name[GC_PLAYER_NAME_LENGTH - 1] = '\0'; for (char *p = player_name; *p; p++) if (!isprint(*p)) *p = ' '; } else if (!strcmp(argv[n], "-l") || !strcmp(argv[n], "--low")) mode |= CM_LOW_GRAPHICS; else if (!strcmp(argv[n], "-r") || !strcmp(argv[n], "--really")) { mode |= CM_LOW_GRAPHICS; mode |= CM_REALLY_LOW_GRAPHICS; } else if (!strcmp(argv[n], "-X") || !strcmp(argv[n], "--extreme")) mode |= CM_X; else if (!strcmp(argv[n], "-w") || !strcmp(argv[n], "--wait")) mode |= CM_NO_TIME_OUT; else if (!strcmp(argv[n], "--hard")) { mode |= CM_AI; mode |= CM_AI_HARD; } else if (!strcmp(argv[n], "--easy")) { mode |= CM_AI; mode |= CM_AI_EASY; } else if (!strcmp(argv[n], "--medium")) { mode |= CM_AI; mode |= CM_AI_MEDIUM; } else if (!strcmp(argv[n], "--res")) { if (argv[n + 1] && argv[n + 1][0] != '-') height = width = atoi(argv[++n]); else height = width = -1; } else { if (mode & (CM_SERVER | CM_CLIENT | CM_SOLO)) usage(); mode |= CM_CLIENT; strncpy(host_name, argv[n], GC_HOST_NAME_SIZE); ++n; if (n < argc) { port = atoi(argv[n]); } else { port = 0; cerr << "No port specified.\n"; usage(); } } } if (!(mode & (CM_SERVER | CM_CLIENT | CM_SOLO))) usage(); if ((mode & CM_NO_TIME_OUT) && !(mode & CM_SERVER)) usage(); if ((mode & CM_REALLY_LOW_GRAPHICS) && !(mode & CM_LOW_GRAPHICS)) usage(); if ((mode & CM_AI && (mode & CM_X))) usage(); } #define MKDIR(x,y) (mkdir(x, y)) #ifdef _WIN32 # include # undef MKDIR # define MKDIR(x,y) (_mkdir(x)) #endif void setupLocalDataDirectory ( ) { char local_directory[256]; TextureLoader::buildLocalDataDirectoryName(local_directory); if (!TextureLoader::fileExists(local_directory) && MKDIR(local_directory, 0777) ) { cerr << "Error creating local data directory '" << local_directory << "'." << endl; exit(1); } } crack-attack-1.1.14/src/Communicator.cxx0000644000175000001440000002640410230144462017637 0ustar webbsterusers/* * Communicator.cxx * Daniel Nelson - 8/30/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles all that socket stuff. We should be more worried about the size of * integers on various systems. */ #include #include #include #include #ifndef _WIN32 # include # include # include # include # include # include #else # include # include # define sleep(x) Sleep(x) #endif using namespace std; #include "Game.h" #include "Communicator.h" #include "Displayer.h" #include "GarbageGenerator.h" #include "GarbageFlavorImage.h" #include "LevelLights.h" #include "MetaState.h" #include "Random.h" int Communicator::comm_link; int Communicator::time_step; bool Communicator::comm_link_active; bool Communicator::no_communication; bool Communicator::have_communicated; int Communicator::last_recv_sync; int Communicator::last_own_sync; CommunicationBuffer Communicator::send_buffer; CommunicationBuffer Communicator::recv_buffer; CommunicationBuffer Communicator::work_buffer; bool Communicator::win_ties; char Communicator::opponent_name[GC_PLAYER_NAME_LENGTH]; void Communicator::startupExchange ( char player_name[GC_PLAYER_NAME_LENGTH] ) { // exchange names commSend(player_name, GC_PLAYER_NAME_LENGTH); commRecv(opponent_name, GC_PLAYER_NAME_LENGTH); // notify if we have a personal garbage flavor image uint32 flag = GarbageFlavorImage::personalGarbageFlavorImageExists(); commSend(flag); // and send it out if (flag) { GLubyte *texture = GarbageFlavorImage::loadPersonalGarbageFlavorImage(); commSend(texture, 4 * DC_GARBAGE_TEX_LENGTH * DC_GARBAGE_TEX_LENGTH * sizeof(GLubyte)); #ifndef _WIN32 delete [] texture; #else if (texture != null) { delete [] texture; texture = null; } #endif } // check to see if they have a personal garbage flavor image commRecv(flag); // and recv it if (flag) { GLubyte texture[4 * DC_GARBAGE_TEX_LENGTH * DC_GARBAGE_TEX_LENGTH]; commRecv(texture, 4 * DC_GARBAGE_TEX_LENGTH * DC_GARBAGE_TEX_LENGTH * sizeof(GLubyte)); GarbageFlavorImage::handleNetworkGarbageFlavorImage(texture); } } void Communicator::initialize ( int mode, int port, char host_name[256], char player_name[GC_PLAYER_NAME_LENGTH] ) { comm_link_active = false; #ifndef _WIN32 #else WSAData wsa_data; if (WSAStartup(MAKEWORD(1, 1), &wsa_data) != 0) { cerr << "Winsock startup failed." << endl; exit(1); } #endif if (port == 0) port = CO_DEFAULT_PORT; switch (mode & (CM_SERVER | CM_CLIENT)) { case CM_SERVER: { int connection_socket = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in address; #ifndef _WIN32 int val = 1; setsockopt (connection_socket, SOL_SOCKET, SO_REUSEADDR, &val, sizeof (int)); #endif address.sin_family = AF_INET; address.sin_addr.s_addr = htonl(INADDR_ANY); address.sin_port = htons(port); if (bind(connection_socket, (sockaddr *) &address, sizeof(address)) < 0) { cerr << "Port " << port << " is busy." << endl; exit(1); } cout << "Waiting for connection at port " << port << "..." << endl; listen(connection_socket, 1); #ifndef _WIN32 if (!(mode & CM_NO_TIME_OUT)) { pollfd ufds; ufds.fd = connection_socket; ufds.events = POLLIN; if (!poll(&ufds, 1, CO_SERVER_TIME_OUT * 1000)) { cerr << "Timed out." << endl; exit(1); } } #endif #ifndef _WIN32 unsigned int length = sizeof(address); #else int length = sizeof(address); #endif comm_link = accept(connection_socket, (sockaddr *) &address, &length); comm_link_active = true; // check version id uint32 version_id = CO_TEST_INT; for (char *c = CO_VERSION; *c; c++) version_id += *c; #ifdef DEVELOPMENT cout << "Version id: " << version_id << endl; #endif version_id = htonl(version_id); if (send(comm_link, (char *) &version_id, sizeof(version_id), 0) < 1) { cerr << "Connection failed." << endl; exit(1); } // server sends extremeness level uint32 X_level = ((mode & CM_X) ? 1 : 0); commSend(X_level); // for simplicity, server wins ties - but don't tell anyone; it's the only // available symmetry breaking term win_ties = true; cout << "Connection made by " << inet_ntoa(address.sin_addr) << '.' << endl; break; } case CM_CLIENT: { comm_link = socket(AF_INET, SOCK_STREAM, 0); comm_link_active = true; #ifdef DEVELOPMENT cout << "Hostname: " << host_name << endl; #endif hostent *host = gethostbyname(host_name); if (!host) { cerr << "Host '" << host_name << "' not found." << endl; exit(1); } sockaddr_in address; address.sin_family = AF_INET; address.sin_addr = *(struct in_addr *) host->h_addr; address.sin_port = htons((short) port); if (connect(comm_link, (sockaddr *) &address, sizeof(address)) < 0) { cerr << "Connection failed. Unable to connect to address." << endl; exit(1); } // check version id uint32 version_id = CO_TEST_INT; for (char *c = CO_VERSION; *c; c++) version_id += *c; #ifdef DEVELOPMENT cout << "Version id: " << version_id << endl; #endif uint32 server_version_id; if (recv(comm_link, (char *) &server_version_id, sizeof(server_version_id), 0) != sizeof(server_version_id)) { cerr << "Connection failed. Unable to read version information." << endl; exit(1); } if (ntohl(server_version_id) != version_id) { cerr << "Connected to incompatible version." << endl; exit(1); } // server sends extremeness level uint32 X_level; commRecv(X_level); if (X_level == 1) MetaState::mode |= CM_X; // for simplicity, client loses ties - but don't tell anyone win_ties = false; cout << "Connection made to " << inet_ntoa(address.sin_addr) << ':' << (short) port << '.' << endl; break; } } startupExchange(player_name); time_step = 1; no_communication = false; have_communicated = false; } void Communicator::cleanUp ( ) { if (comm_link_active) { /* One solution to avoid "port is busy" after a game is to have the client initiate the closure, so let's wait a few seconds if we're the server. http://hea-www.harvard.edu/~fine/Tech/addrinuse.html */ if (MetaState::mode & CM_SERVER) sleep(1); #ifndef _WIN32 close(comm_link); #else closesocket(comm_link); #endif comm_link_active = false; } } void Communicator::exchangeRandomSeed ( ) { uint32 seed; // server sends the the random seed if (MetaState::mode & CM_SERVER) { seed = Random::generateSeed(); commSend(seed); } else commRecv(seed); Random::seed(seed); } void Communicator::gameStart ( ) { time_step = 1; no_communication = false; have_communicated = false; last_recv_sync = 0; last_own_sync = 0; send_buffer.count = 0; recv_buffer.count = 0; send_buffer.level_lights = 0; recv_buffer.level_lights = 0; send_buffer.game_state = 0; exchangeRandomSeed(); } void Communicator::gameFinish ( ) { time_step = 1; no_communication = false; have_communicated = false; } void Communicator::timeStepPlay_inline_split_ ( ) { // recv if (have_communicated) { commRecv(recv_buffer); // add new garbage to the queue GarbageGenerator::addToQueue(recv_buffer); // handle the recved level light data LevelLights::handleRecvBuffer(); // if we have been remotely paused if (recv_buffer.game_state & GS_PAUSED) Game::netSignalPause(); // if we have been remotely unpaused else if (recv_buffer.game_state & GS_UNPAUSED) Game::netSignalUnpause(); // store the current sync state last_recv_sync = recv_buffer.sync; last_own_sync = time_step - Game::time_step; // if we're out of sync with our opponent, enter a sync pause if (last_recv_sync > last_own_sync && (Game::state & GS_NORMAL)) Game::syncPause(last_recv_sync - last_own_sync); // if our opponent thinks he may have lost if (recv_buffer.game_state & GS_MAY_HAVE_LOST) { // if it's a concession if (recv_buffer.game_state & GS_CONCESSION) MetaState::state |= MS_CONCESSION; // if we also think we may have lost if (Game::state & GS_MAY_HAVE_LOST) { // pick a winner if (recv_buffer.loss_time_stamp < send_buffer.loss_time_stamp || (recv_buffer.loss_time_stamp == send_buffer.loss_time_stamp && win_ties)) Game::won(); // otherwise, we win } else Game::won(); // if the opponent has confirmed our loss } else if (recv_buffer.game_state & GS_MUST_CONFIRM_LOSS) { Game::lossConfirmation(); no_communication = true; return; } // if we were waiting a cycle for our opponent to recv his loss confirmation if (Game::state & GS_CONFIRMATION_HOLD) { Game::state &= ~GS_CONFIRMATION_HOLD; no_communication = true; Game::state |= GS_END_PLAY; return; } } else have_communicated = true; // send // ready the level light data for sending LevelLights::readySendBuffer(); // ready the game state information for sending - pause and unpause // information have already been set if (Game::state & GS_MAY_HAVE_LOST) { send_buffer.game_state |= GS_MAY_HAVE_LOST; if (MetaState::state & MS_CONCESSION) send_buffer.game_state |= GS_CONCESSION; } else if (Game::state & GS_MUST_CONFIRM_LOSS) { send_buffer.game_state |= GS_MUST_CONFIRM_LOSS; Game::state &= ~GS_MUST_CONFIRM_LOSS; Game::state |= GS_CONFIRMATION_HOLD; } // ready the sync for sending send_buffer.sync = (uint32) (time_step - Game::time_step); commSend(send_buffer); // reset send buffer send_buffer.count = 0; send_buffer.level_lights = 0; send_buffer.game_state = 0; } void Communicator::timeStepMeta_inline_split_ ( ) { uint32 state; if (have_communicated) { commRecv(state); // handle recved state data if (state & MS_REMOTE_KEY_WAIT) MetaState::remoteKeyPressed(); else if (state & MS_READY_GAME_START) MetaState::remoteReady(); if (MetaState::state & MS_GAME_PLAY) return; } else have_communicated = true; // ready state data for sending state = MetaState::state & (MS_REMOTE_KEY_WAIT | MS_READY_GAME_START); commSend(state); } void Communicator::barrier ( ) { uint32 c = CO_TEST_INT; commSend(c); commRecv(c); assert(c == CO_TEST_INT); } crack-attack-1.1.14/src/LoseBar.h0000644000175000001440000000365510132356545016166 0ustar webbsterusers/* * LoseBar.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef LOSEBAR_H #define LOSEBAR_H #include using namespace std; #define LB_INACTIVE (1 << 0) #define LB_LOW_ALERT (1 << 1) #define LB_HIGH_ALERT (1 << 2) #define LB_FADE_LOW_TO_INACTIVE (1 << 3) #define LB_FADE_HIGH_TO_INACTIVE (1 << 4) #define LB_FADE_RESET_HIGH (1 << 5) /* static */ class LoseBar { public: static void initialize ( ); static void gameStart ( ); static void timeStep ( ); static inline void highAlertReset ( ) /* * Called by Creep when the high alert timer is reset. */ { assert(state == LB_HIGH_ALERT); fade_timer = DC_LOSEBAR_FADE_TIME; state = LB_FADE_RESET_HIGH; } static int state; static GLfloat bar; static int fade_timer; private: static inline void enterLowToInactiveFade ( ) { fade_timer = DC_LOSEBAR_FADE_TIME; state = LB_FADE_LOW_TO_INACTIVE; } static inline void enterHighToInactiveFade ( ) { fade_timer = DC_LOSEBAR_FADE_TIME; state = LB_FADE_HIGH_TO_INACTIVE; } }; #endif crack-attack-1.1.14/src/obj_messages.cxx0000644000175000001440000001265610230144462017644 0ustar webbsterusers/* * messages.cxx * Daniel Nelson - 10/27/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Loads the textures that are used in the various signs within the game. These * signs are held in RAM and only made into textures when needed. */ #include #include #include "glext.h" #include "sstream.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" #include "MessageManager.h" GLuint Displayer::message_1x1_list; GLuint Displayer::message_2x1_list; GLuint Displayer::message_4x1_list; GLuint Displayer::message_16x1_list; GLuint Displayer::message_texture; GLubyte *Displayer::message_texture_data[DC_NUMBER_MESSAGE_TEX]; GLsizei Displayer::message_width[DC_NUMBER_MESSAGE_TEX] = { 256, 128, 128, 128, 256, 256, 256, 256, 256, 256 }; GLsizei Displayer::message_height[DC_NUMBER_MESSAGE_TEX] = { 128, 128, 128, 128, 128, 64, 64, 256, 256, 256 }; GLfloat Displayer::message_alpha[DC_MESSAGE_PULSE_PERIOD]; int Displayer::message_shape[DC_NUMBER_MESSAGE_TEX] = { MS_2x1, MS_1x1, MS_1x1, MS_1x1, MS_2x1, MS_4x1, MS_4x1, MS_1x1, MS_1x1, MS_1x1 }; void Displayer::generateMessages ( ) { // load count down messages message_texture_data[MS_COUNT_DOWN_1] = TextureLoader::loadAlphaTGA(GC_COUNT_DOWN_1_TEX_FILE_NAME, message_height[MS_COUNT_DOWN_1], message_width[MS_COUNT_DOWN_1]); message_texture_data[MS_COUNT_DOWN_2] = TextureLoader::loadAlphaTGA(GC_COUNT_DOWN_2_TEX_FILE_NAME, message_height[MS_COUNT_DOWN_2], message_width[MS_COUNT_DOWN_2]); message_texture_data[MS_COUNT_DOWN_3] = TextureLoader::loadAlphaTGA(GC_COUNT_DOWN_3_TEX_FILE_NAME, message_height[MS_COUNT_DOWN_3], message_width[MS_COUNT_DOWN_3]); message_texture_data[MS_COUNT_DOWN_GO] = TextureLoader::loadAlphaTGA(GC_COUNT_DOWN_GO_TEX_FILE_NAME, message_height[MS_COUNT_DOWN_GO], message_width[MS_COUNT_DOWN_GO]); message_texture_data[MS_ANYKEY] = TextureLoader::loadAlphaTGA(GC_ANYKEY_TEX_FILE_NAME, message_height[MS_ANYKEY], message_width[MS_ANYKEY]); message_texture_data[MS_WAITING] = TextureLoader::loadAlphaTGA(GC_WAITING_TEX_FILE_NAME, message_height[MS_WAITING], message_width[MS_WAITING]); message_texture_data[MS_PAUSED] = TextureLoader::loadAlphaTGA(GC_PAUSED_TEX_FILE_NAME, message_height[MS_PAUSED], message_width[MS_PAUSED]); message_texture_data[MS_WINNER] = TextureLoader::loadAlphaTGA(GC_WINNER_TEX_FILE_NAME, message_height[MS_WINNER], message_width[MS_WINNER]); message_texture_data[MS_LOSER] = TextureLoader::loadAlphaTGA(GC_LOSER_TEX_FILE_NAME, message_height[MS_LOSER], message_width[MS_LOSER]); message_texture_data[MS_GAME_OVER] = TextureLoader::loadAlphaTGA(GC_GAME_OVER_TEX_FILE_NAME, message_height[MS_GAME_OVER], message_width[MS_GAME_OVER]); // generic message lists message_1x1_list = glGenLists(1); glNewList(message_1x1_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, -1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 0.0f); glEnd(); glEndList(); message_2x1_list = glGenLists(1); glNewList(message_2x1_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, -0.5f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, -0.5f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 0.5f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.5f, 0.0f); glEnd(); glEndList(); message_4x1_list = glGenLists(1); glNewList(message_4x1_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, -0.25f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, -0.25f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 0.25f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.25f, 0.0f); glEnd(); glEndList(); message_16x1_list = glGenLists(1); glNewList(message_16x1_list, GL_COMPILE); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, -0.125f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, -0.125, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 0.125, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.125, 0.0f); glEnd(); glEndList(); // pulsing alpha values for (int n = DC_MESSAGE_PULSE_PERIOD; n--; ) { float s = cos(n * (2.0f * PI / (float) DC_MESSAGE_PULSE_PERIOD)); message_alpha[n] = 0.75f + 0.6f * s * s; } } crack-attack-1.1.14/src/prefix.c0000644000175000001440000002513710223333570016120 0ustar webbsterusers/* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn * Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * NOTE: if you're using C++ and are getting "undefined reference * to br_*", try renaming prefix.c to prefix.cpp */ /* WARNING, BEFORE YOU MODIFY PREFIX.C: * * If you make changes to any of the functions in prefix.c, you MUST * change the BR_NAMESPACE macro (in prefix.h). * This way you can avoid symbol table conflicts with other libraries * that also happen to use BinReloc. * * Example: * #define BR_NAMESPACE(funcName) foobar_ ## funcName * --> expands br_locate to foobar_br_locate */ #ifndef _PREFIX_C_ #define _PREFIX_C_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifndef BR_PTHREADS /* Change 1 to 0 if you don't want pthread support */ #define BR_PTHREADS 1 #endif /* BR_PTHREADS */ #include #include #include #include #include "prefix.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #undef NULL #define NULL ((void *) 0) #ifdef __GNUC__ #define br_return_val_if_fail(expr,val) if (!(expr)) {fprintf (stderr, "** BinReloc (%s): assertion %s failed\n", __PRETTY_FUNCTION__, #expr); return val;} #else #define br_return_val_if_fail(expr,val) if (!(expr)) return val #endif /* __GNUC__ */ static br_locate_fallback_func fallback_func = NULL; static void *fallback_data = NULL; #ifdef ENABLE_BINRELOC #include #include #include #include /** * br_locate: * symbol: A symbol that belongs to the app/library you want to locate. * Returns: A newly allocated string containing the full path of the * app/library that func belongs to, or NULL on error. This * string should be freed when not when no longer needed. * * Finds out to which application or library symbol belongs, then locate * the full path of that application or library. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * --> main.c * #include "prefix.h" * #include "libfoo.h" * * int main (int argc, char *argv[]) { * printf ("Full path of this app: %s\n", br_locate (&argc)); * libfoo_start (); * return 0; * } * * --> libfoo.c starts here * #include "prefix.h" * * void libfoo_start () { * --> "" is a symbol that belongs to libfoo (because it's called * --> from libfoo_start()); that's why this works. * printf ("libfoo is located in: %s\n", br_locate ("")); * } */ char * br_locate (void *symbol) { char line[5000]; FILE *f; char *path; br_return_val_if_fail (symbol != NULL, NULL); f = fopen ("/proc/self/maps", "r"); if (!f) { if (fallback_func) return fallback_func(symbol, fallback_data); else return NULL; } while (!feof (f)) { unsigned long start, end; if (!fgets (line, sizeof (line), f)) continue; if (!strstr (line, " r-xp ") || !strchr (line, '/')) continue; sscanf (line, "%lx-%lx ", &start, &end); if (symbol >= (void *) start && symbol < (void *) end) { char *tmp; size_t len; /* Extract the filename; it is always an absolute path */ path = strchr (line, '/'); /* Get rid of the newline */ tmp = strrchr (path, '\n'); if (tmp) *tmp = 0; /* Get rid of "(deleted)" */ len = strlen (path); if (len > 10 && strcmp (path + len - 10, " (deleted)") == 0) { tmp = path + len - 10; *tmp = 0; } fclose(f); return strdup (path); } } fclose (f); return NULL; } /** * br_locate_prefix: * symbol: A symbol that belongs to the app/library you want to locate. * Returns: A prefix. This string should be freed when no longer needed. * * Locates the full path of the app/library that symbol belongs to, and return * the prefix of that path, or NULL on error. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * --> This application is located in /usr/bin/foo * br_locate_prefix (&argc); --> returns: "/usr" */ char * br_locate_prefix (void *symbol) { char *path, *prefix; br_return_val_if_fail (symbol != NULL, NULL); path = br_locate (symbol); if (!path) return NULL; prefix = br_extract_prefix (path); free (path); return prefix; } /** * br_prepend_prefix: * symbol: A symbol that belongs to the app/library you want to locate. * path: The path that you want to prepend the prefix to. * Returns: The new path, or NULL on error. This string should be freed when no * longer needed. * * Gets the prefix of the app/library that symbol belongs to. Prepend that prefix to path. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * --> The application is /usr/bin/foo * br_prepend_prefix (&argc, "/share/foo/data.png"); --> Returns "/usr/share/foo/data.png" */ char * br_prepend_prefix (void *symbol, char *path) { char *tmp, *newpath; br_return_val_if_fail (symbol != NULL, NULL); br_return_val_if_fail (path != NULL, NULL); tmp = br_locate_prefix (symbol); if (!tmp) return NULL; if (strcmp (tmp, "/") == 0) newpath = strdup (path); else newpath = br_strcat (tmp, path); /* Get rid of compiler warning ("br_prepend_prefix never used") */ if (0) br_prepend_prefix (NULL, NULL); free (tmp); return newpath; } #endif /* ENABLE_BINRELOC */ /* Pthread stuff for thread safetiness */ #if BR_PTHREADS && defined(ENABLE_BINRELOC) #include static pthread_key_t br_thread_key; static pthread_once_t br_thread_key_once = PTHREAD_ONCE_INIT; static void br_thread_local_store_fini () { char *specific; specific = (char *) pthread_getspecific (br_thread_key); if (specific) { free (specific); pthread_setspecific (br_thread_key, NULL); } pthread_key_delete (br_thread_key); br_thread_key = 0; } static void br_str_free (void *str) { if (str) free (str); } static void br_thread_local_store_init () { if (pthread_key_create (&br_thread_key, br_str_free) == 0) atexit (br_thread_local_store_fini); } #else /* BR_PTHREADS */ #ifdef ENABLE_BINRELOC static char *br_last_value = (char *) NULL; static void br_free_last_value () { if (br_last_value) free (br_last_value); } #endif /* ENABLE_BINRELOC */ #endif /* BR_PTHREADS */ #ifdef ENABLE_BINRELOC /** * br_thread_local_store: * str: A dynamically allocated string. * Returns: str. This return value must not be freed. * * Store str in a thread-local variable and return str. The next * you run this function, that variable is freed too. * This function is created so you don't have to worry about freeing * strings. Just be careful about doing this sort of thing: * * some_function( BR_DATADIR("/one.png"), BR_DATADIR("/two.png") ) * * Examples: * char *foo; * foo = br_thread_local_store (strdup ("hello")); --> foo == "hello" * foo = br_thread_local_store (strdup ("world")); --> foo == "world"; "hello" is now freed. */ const char * br_thread_local_store (char *str) { #if BR_PTHREADS char *specific; pthread_once (&br_thread_key_once, br_thread_local_store_init); specific = (char *) pthread_getspecific (br_thread_key); br_str_free (specific); pthread_setspecific (br_thread_key, str); #else /* BR_PTHREADS */ static int initialized = 0; if (!initialized) { atexit (br_free_last_value); initialized = 1; } if (br_last_value) free (br_last_value); br_last_value = str; #endif /* BR_PTHREADS */ return (const char *) str; } #endif /* ENABLE_BINRELOC */ /** * br_strcat: * str1: A string. * str2: Another string. * Returns: A newly-allocated string. This string should be freed when no longer needed. * * Concatenate str1 and str2 to a newly allocated string. */ char * br_strcat (const char *str1, const char *str2) { char *result; size_t len1, len2; if (!str1) str1 = ""; if (!str2) str2 = ""; len1 = strlen (str1); len2 = strlen (str2); result = (char *) malloc (len1 + len2 + 1); memcpy (result, str1, len1); memcpy (result + len1, str2, len2); result[len1 + len2] = '\0'; return result; } /* Emulates glibc's strndup() */ static char * br_strndup (char *str, size_t size) { char *result = (char *) NULL; size_t len; br_return_val_if_fail (str != (char *) NULL, (char *) NULL); len = strlen (str); if (!len) return strdup (""); if (size > len) size = len; result = (char *) calloc (sizeof (char), len + 1); memcpy (result, str, size); return result; } /** * br_extract_dir: * path: A path. * Returns: A directory name. This string should be freed when no longer needed. * * Extracts the directory component of path. Similar to g_dirname() or the dirname * commandline application. * * Example: * br_extract_dir ("/usr/local/foobar"); --> Returns: "/usr/local" */ char * br_extract_dir (const char *path) { char *end, *result; br_return_val_if_fail (path != (char *) NULL, (char *) NULL); end = strrchr (path, '/'); if (!end) return strdup ("."); while (end > path && *end == '/') end--; result = br_strndup ((char *) path, end - path + 1); if (!*result) { free (result); return strdup ("/"); } else return result; } /** * br_extract_prefix: * path: The full path of an executable or library. * Returns: The prefix, or NULL on error. This string should be freed when no longer needed. * * Extracts the prefix from path. This function assumes that your executable * or library is installed in an LSB-compatible directory structure. * * Example: * br_extract_prefix ("/usr/bin/gnome-panel"); --> Returns "/usr" * br_extract_prefix ("/usr/local/lib/libfoo.so"); --> Returns "/usr/local" * br_extract_prefix ("/usr/local/libfoo.so"); --> Returns "/usr" */ char * br_extract_prefix (const char *path) { char *end, *tmp, *result; br_return_val_if_fail (path != (char *) NULL, (char *) NULL); if (!*path) return strdup ("/"); end = strrchr (path, '/'); if (!end) return strdup (path); tmp = br_strndup ((char *) path, end - path); if (!*tmp) { free (tmp); return strdup ("/"); } end = strrchr (tmp, '/'); if (!end) return tmp; result = br_strndup (tmp, end - tmp); free (tmp); if (!*result) { free (result); result = strdup ("/"); } return result; } /** * br_set_fallback_function: * func: A function to call to find the binary. * data: User data to pass to func. * * Sets a function to call to find the path to the binary, in * case "/proc/self/maps" can't be opened. The function set should * return a string that is safe to free with free(). */ void br_set_locate_fallback_func (br_locate_fallback_func func, void *data) { fallback_func = func; fallback_data = data; } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _PREFIX_C */ crack-attack-1.1.14/src/prefix.h0000644000175000001440000001224510223333570016121 0ustar webbsterusers/* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn * Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. * * NOTE: if you're using C++ and are getting "undefined reference * to br_*", try renaming prefix.c to prefix.cpp */ #ifndef _PREFIX_H_ #define _PREFIX_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* WARNING, BEFORE YOU MODIFY PREFIX.C: * * If you make changes to any of the functions in prefix.c, you MUST * change the BR_NAMESPACE macro. * This way you can avoid symbol table conflicts with other libraries * that also happen to use BinReloc. * * Example: * #define BR_NAMESPACE(funcName) foobar_ ## funcName * --> expands br_locate to foobar_br_locate */ #undef BR_NAMESPACE #define BR_NAMESPACE(funcName) funcName #ifdef ENABLE_BINRELOC #define br_thread_local_store BR_NAMESPACE(br_thread_local_store) #define br_locate BR_NAMESPACE(br_locate) #define br_locate_prefix BR_NAMESPACE(br_locate_prefix) #define br_prepend_prefix BR_NAMESPACE(br_prepend_prefix) #ifndef BR_NO_MACROS /* These are convience macros that replace the ones usually used in Autoconf/Automake projects */ #undef SELFPATH #undef PREFIX #undef PREFIXDIR #undef BINDIR #undef SBINDIR #undef DATADIR #undef LIBDIR #undef LIBEXECDIR #undef ETCDIR #undef SYSCONFDIR #undef CONFDIR #undef LOCALEDIR #define SELFPATH (br_thread_local_store (br_locate ((void *) ""))) #define PREFIX (br_thread_local_store (br_locate_prefix ((void *) ""))) #define PREFIXDIR (br_thread_local_store (br_locate_prefix ((void *) ""))) #define BINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/bin"))) #define SBINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/sbin"))) #define DATADIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share"))) #define LIBDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/lib"))) #define LIBEXECDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/libexec"))) #define ETCDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define SYSCONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define CONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define LOCALEDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share/locale"))) #endif /* BR_NO_MACROS */ /* The following functions are used internally by BinReloc and shouldn't be used directly in applications. */ char *br_locate (void *symbol); char *br_locate_prefix (void *symbol); char *br_prepend_prefix (void *symbol, char *path); #endif /* ENABLE_BINRELOC */ const char *br_thread_local_store (char *str); /* These macros and functions are not guarded by the ENABLE_BINRELOC * macro because they are portable. You can use these functions. */ #define br_strcat BR_NAMESPACE(br_strcat) #define br_extract_dir BR_NAMESPACE(br_extract_dir) #define br_extract_prefix BR_NAMESPACE(br_extract_prefix) #define br_set_locate_fallback_func BR_NAMESPACE(br_set_locate_fallback_func) #ifndef BR_NO_MACROS #ifndef ENABLE_BINRELOC #define BR_SELFPATH(suffix) SELFPATH suffix #define BR_PREFIX(suffix) PREFIX suffix #define BR_PREFIXDIR(suffix) BR_PREFIX suffix #define BR_BINDIR(suffix) BINDIR suffix #define BR_SBINDIR(suffix) SBINDIR suffix #define BR_DATADIR(suffix) DATADIR suffix #define BR_LIBDIR(suffix) LIBDIR suffix #define BR_LIBEXECDIR(suffix) LIBEXECDIR suffix #define BR_ETCDIR(suffix) ETCDIR suffix #define BR_SYSCONFDIR(suffix) SYSCONFDIR suffix #define BR_CONFDIR(suffix) CONFDIR suffix #define BR_LOCALEDIR(suffix) LOCALEDIR suffix #else #define BR_SELFPATH(suffix) (br_thread_local_store (br_strcat (SELFPATH, suffix))) #define BR_PREFIX(suffix) (br_thread_local_store (br_strcat (PREFIX, suffix))) #define BR_PREFIXDIR(suffix) (br_thread_local_store (br_strcat (BR_PREFIX, suffix))) #define BR_BINDIR(suffix) (br_thread_local_store (br_strcat (BINDIR, suffix))) #define BR_SBINDIR(suffix) (br_thread_local_store (br_strcat (SBINDIR, suffix))) #define BR_DATADIR(suffix) (br_thread_local_store (br_strcat (DATADIR, suffix))) #define BR_LIBDIR(suffix) (br_thread_local_store (br_strcat (LIBDIR, suffix))) #define BR_LIBEXECDIR(suffix) (br_thread_local_store (br_strcat (LIBEXECDIR, suffix))) #define BR_ETCDIR(suffix) (br_thread_local_store (br_strcat (ETCDIR, suffix))) #define BR_SYSCONFDIR(suffix) (br_thread_local_store (br_strcat (SYSCONFDIR, suffix))) #define BR_CONFDIR(suffix) (br_thread_local_store (br_strcat (CONFDIR, suffix))) #define BR_LOCALEDIR(suffix) (br_thread_local_store (br_strcat (LOCALEDIR, suffix))) #endif #endif char *br_strcat (const char *str1, const char *str2); char *br_extract_dir (const char *path); char *br_extract_prefix(const char *path); typedef char *(*br_locate_fallback_func) (void *symbol, void *data); void br_set_locate_fallback_func (br_locate_fallback_func func, void *data); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _PREFIX_H_ */ crack-attack-1.1.14/src/gtk-gui/0000755000175000001440000000000010241203055016010 5ustar webbsteruserscrack-attack-1.1.14/src/gtk-gui/persist.cxx0000644000175000001440000000757710235041325020250 0ustar webbsterusers/* * persist.cxx * Kevin Webb - 3/21/05 * * Copyright (C) 2005 Kevin Webb * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "../TextureLoader.h" #include "persist.h" #include "callbacks.h" #include "interface.h" #include "support.h" void gui_data_save (GtkWidget *widget) { gchar file_name[256]; GtkEntry *entPlayerName; gchar *tmp = NULL; gchar player_name[GC_PLAYER_NAME_LENGTH]; gint resolution = 0; gint quality = 0; gint ai_difficulty; // Get the current name in the name text box. entPlayerName = GTK_ENTRY(lookup_widget(GTK_WIDGET(widget), "entPlayerName")); if (entPlayerName) { tmp = (gchar *) gtk_entry_get_text(entPlayerName); if (tmp) { if (strlen(tmp) == 0) { gtk_entry_set_text(entPlayerName, g_get_user_name()); return; } g_strlcpy(player_name, tmp, 256); } } // Get the currently selected resolution. resolution = (gint) gtk_combo_box_get_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbResolution")); // Get the status of the quality combo box. quality = gtk_combo_box_get_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbQuality")); // Get the current AI difficulty setting. ai_difficulty = gtk_combo_box_get_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbAI")); // Generate the file name and write the data, TextureLoader::buildLocalDataFileName(GC_GUI_FILE_NAME, file_name); ofstream file(file_name); if (file.fail()) { cerr << "Unable to write gui data to file!\n"; return; } file << player_name << endl; file << resolution << endl; file << quality << endl; file << ai_difficulty << endl; file.close(); } void gui_data_read (GtkWidget *widget) { char buffer[256]; char file_name[256]; GtkEntry *entPlayerName; gchar player_name[GC_PLAYER_NAME_LENGTH]; gint resolution = 0; gint quality = 0; gint ai_difficulty; // Generate the name of the file and read the data. TextureLoader::buildLocalDataFileName(GC_GUI_FILE_NAME, file_name); ifstream file(file_name); if (file.fail()) { #ifdef DEVELOPMENT cerr << "Unable to find gui data file!\n"; #endif return; } if (!file.eof()) { file.getline(buffer, 256); strcpy(player_name, buffer); file.getline(buffer, 256); resolution = atoi(buffer); if (resolution < 0 || resolution > 4) { resolution = 0; } file.getline(buffer, 256); quality = atoi(buffer); if (quality < 0 || quality > 2) { quality = 0; } file.getline(buffer, 256); ai_difficulty = atoi(buffer); if (ai_difficulty < 0 || ai_difficulty > 3) { ai_difficulty = 0; } } else { file.close(); return; } file.close(); // Set the name. entPlayerName = GTK_ENTRY(lookup_widget(GTK_WIDGET(widget), "entPlayerName")); if (entPlayerName) { gtk_entry_set_text (GTK_ENTRY (entPlayerName), player_name); } // Set the resolution. gtk_combo_box_set_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbResolution"), resolution); // Set the AI. gtk_combo_box_set_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbAI"), ai_difficulty); // Set the quality. gtk_combo_box_set_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbQuality"), quality); } crack-attack-1.1.14/src/gtk-gui/interface.h0000644000175000001440000000177610235067534020151 0ustar webbsterusers/* * interface.h * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * */ GtkWidget* create_winCrackAttackSplash (void); GtkWidget* create_winNetworking (void); crack-attack-1.1.14/src/gtk-gui/gui_main.cxx0000644000175000001440000000403510235043454020336 0ustar webbsterusers/* * gui_main.c * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #include #include #include #include #ifndef _WIN32 # include #else # include #endif #include "../glext.h" #include using namespace std; #include "../MetaState.h" #include "support.h" #include "interface.h" #include "persist.h" #define GC_HOST_NAME_SIZE (256) int glut_argc; char **glut_argv; /* * Documentation * html tables don't work right in explorer * man-page bug * * Issues and Watches * slow if left sitting a long time before game start * gtk+ frontend * central server for online game setup * remove dying_count_2 * find and use correct GL_LIGHT_MODEL_COLOR_CONTROL defines */ int gui_main ( int argc, char **argv ) { GtkWidget *winCrackAttackSplash = NULL; // Backup argc and argv to initialize glut in the child process glut_argc = argc; glut_argv = argv; gtk_init(&argc, &argv); add_pixmap_directory (GC_DATA_DIRECTORY("")); winCrackAttackSplash = create_winCrackAttackSplash (); gui_data_read(winCrackAttackSplash); gtk_widget_show (winCrackAttackSplash); gtk_main (); return 0; } crack-attack-1.1.14/src/gtk-gui/support.cxx0000644000175000001440000001066510234254331020265 0ustar webbsterusers/* * support.cxx * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "support.h" GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to find pixmap files. */ gchar* find_pixmap_file (const gchar *filename) { GList *elem; /* We step through each of the pixmaps directory to find it. */ elem = pixmaps_directories; while (elem) { gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, G_DIR_SEPARATOR_S, filename); if (g_file_test (pathname, G_FILE_TEST_EXISTS)) return pathname; g_free (pathname); elem = elem->next; } return NULL; } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *pathname = NULL; GtkWidget *pixmap; if (!filename || !filename[0]) return gtk_image_new (); pathname = find_pixmap_file (filename); if (!pathname) { g_warning (("Couldn't find pixmap file: %s"), filename); return gtk_image_new (); } pixmap = gtk_image_new_from_file (pathname); g_free (pathname); return pixmap; } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description) { gint n_actions, i; n_actions = atk_action_get_n_actions (action); for (i = 0; i < n_actions; i++) { if (!strcmp (atk_action_get_name (action, i), action_name)) atk_action_set_description (action, i, description); } } crack-attack-1.1.14/src/gtk-gui/interface.cxx0000644000175000001440000006616410235512663020524 0ustar webbsterusers/* * interface.cxx * Andrew Sayman - 4/28/05 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) GtkWidget* create_winCrackAttackSplash (void) { GtkWidget *winCrackAttackSplash; GdkPixbuf *winCrackAttackSplash_icon_pixbuf; GtkWidget *hbox1; GtkWidget *vbox3; GtkWidget *alignment8; GtkWidget *frmGraphicsPreview; GtkWidget *alignment1; GtkWidget *vbox4; GtkWidget *imgLogo; GtkWidget *lblGraphicsPreview; GtkWidget *alignment9; GtkWidget *vbox1; GtkWidget *ntbGameMode; GtkWidget *vbox6; GtkWidget *lblAI; GtkWidget *cmbAI; GtkWidget *lblSolo; GtkWidget *vbox7; GtkWidget *lblTmpServerAddress; GtkWidget *lblServerAddress; GtkWidget *hbox8; GtkWidget *lblPort; GtkWidget *entPort; GtkWidget *lblServer; GtkWidget *vbox8; GtkWidget *lblTmpServerAddressClient; GtkWidget *entServerAddressClient; GtkWidget *hbox9; GtkWidget *lblTmpPortClient; GtkWidget *alignment7; GtkWidget *entPortClient; GtkWidget *lblClient; GtkWidget *frmGraphicsSettings; GtkWidget *alignment10; GtkWidget *table1; GtkWidget *lblResolution; GtkWidget *lblQuality; GtkWidget *alignment4; GtkWidget *cmbResolution; GtkWidget *alignment5; GtkWidget *cmbQuality; GtkWidget *lblGraphicsSettings; GtkWidget *vbox2; GtkWidget *hbox2; GtkWidget *lblPlayerName; GtkWidget *alignment11; GtkWidget *entPlayerName; GtkWidget *frmGameMode; GtkWidget *alignment3; GtkWidget *vbox5; GtkWidget *hbox7; GtkWidget *hbox5; GtkWidget *rbtnNormal; GSList *rbtnNormal_group = NULL; GtkWidget *rbtnXtreme; GtkWidget *lblGameMode; GtkWidget *hbox10; GtkWidget *alignment12; GtkWidget *hbox3; GtkWidget *btnStart; GtkWidget *alignment2; GtkWidget *hbox4; GtkWidget *image3; GtkWidget *label8; GtkWidget *btnQuit; winCrackAttackSplash = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (winCrackAttackSplash, "winCrackAttackSplash"); gtk_window_set_title (GTK_WINDOW (winCrackAttackSplash), "Crack Attack!"); gtk_window_set_destroy_with_parent (GTK_WINDOW (winCrackAttackSplash), TRUE); winCrackAttackSplash_icon_pixbuf = create_pixbuf ("crack-attack.xpm"); if (winCrackAttackSplash_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (winCrackAttackSplash), winCrackAttackSplash_icon_pixbuf); gdk_pixbuf_unref (winCrackAttackSplash_icon_pixbuf); } hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox1, "hbox1"); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (winCrackAttackSplash), hbox1); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox3, "vbox3"); gtk_widget_show (vbox3); gtk_box_pack_start (GTK_BOX (hbox1), vbox3, TRUE, TRUE, 0); alignment8 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment8, "alignment8"); gtk_widget_show (alignment8); gtk_box_pack_start (GTK_BOX (vbox3), alignment8, TRUE, TRUE, 3); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment8), 0, 0, 3, 3); frmGraphicsPreview = gtk_frame_new (NULL); gtk_widget_set_name (frmGraphicsPreview, "frmGraphicsPreview"); gtk_widget_show (frmGraphicsPreview); gtk_container_add (GTK_CONTAINER (alignment8), frmGraphicsPreview); gtk_frame_set_shadow_type (GTK_FRAME (frmGraphicsPreview), GTK_SHADOW_IN); alignment1 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment1, "alignment1"); gtk_widget_show (alignment1); gtk_container_add (GTK_CONTAINER (frmGraphicsPreview), alignment1); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment1), 3, 0, 6, 6); vbox4 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox4, "vbox4"); gtk_widget_show (vbox4); gtk_container_add (GTK_CONTAINER (alignment1), vbox4); imgLogo = create_pixmap (winCrackAttackSplash, "preview_normal.tga"); gtk_widget_set_name (imgLogo, "imgLogo"); gtk_widget_show (imgLogo); gtk_box_pack_start (GTK_BOX (vbox4), imgLogo, FALSE, FALSE, 0); gtk_widget_set_size_request (imgLogo, 256, 256); lblGraphicsPreview = gtk_label_new ("Graphics Preview"); gtk_widget_set_name (lblGraphicsPreview, "lblGraphicsPreview"); gtk_widget_show (lblGraphicsPreview); gtk_frame_set_label_widget (GTK_FRAME (frmGraphicsPreview), lblGraphicsPreview); gtk_label_set_use_markup (GTK_LABEL (lblGraphicsPreview), TRUE); alignment9 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment9, "alignment9"); gtk_widget_show (alignment9); gtk_box_pack_start (GTK_BOX (hbox1), alignment9, TRUE, TRUE, 3); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment9), 0, 0, 3, 3); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox1, "vbox1"); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (alignment9), vbox1); ntbGameMode = gtk_notebook_new (); gtk_widget_set_name (ntbGameMode, "ntbGameMode"); gtk_widget_show (ntbGameMode); gtk_box_pack_start (GTK_BOX (vbox1), ntbGameMode, FALSE, FALSE, 3); vbox6 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox6, "vbox6"); gtk_widget_show (vbox6); gtk_container_add (GTK_CONTAINER (ntbGameMode), vbox6); lblAI = gtk_label_new_with_mnemonic ("Computer _AI"); gtk_widget_set_name (lblAI, "lblAI"); gtk_widget_show (lblAI); gtk_box_pack_start (GTK_BOX (vbox6), lblAI, FALSE, FALSE, 0); cmbAI = gtk_combo_box_new_text (); gtk_widget_set_name (cmbAI, "cmbAI"); gtk_widget_show (cmbAI); gtk_box_pack_start (GTK_BOX (vbox6), cmbAI, FALSE, TRUE, 3); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbAI), "None"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbAI), "Easy"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbAI), "Medium"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbAI), "Hard"); gtk_combo_box_set_active (GTK_COMBO_BOX (cmbAI), 0); lblSolo = gtk_label_new_with_mnemonic ("S_olo"); gtk_widget_set_name (lblSolo, "lblSolo"); gtk_widget_show (lblSolo); gtk_notebook_set_tab_label (GTK_NOTEBOOK (ntbGameMode), gtk_notebook_get_nth_page (GTK_NOTEBOOK (ntbGameMode), 0), lblSolo); vbox7 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox7, "vbox7"); gtk_widget_show (vbox7); gtk_container_add (GTK_CONTAINER (ntbGameMode), vbox7); lblTmpServerAddress = gtk_label_new ("Server Address:"); gtk_widget_set_name (lblTmpServerAddress, "lblTmpServerAddress"); gtk_widget_show (lblTmpServerAddress); gtk_box_pack_start (GTK_BOX (vbox7), lblTmpServerAddress, FALSE, FALSE, 0); lblServerAddress = gtk_label_new ("127.0.0.1"); gtk_widget_set_name (lblServerAddress, "lblServerAddress"); gtk_widget_show (lblServerAddress); gtk_box_pack_start (GTK_BOX (vbox7), lblServerAddress, FALSE, FALSE, 0); hbox8 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox8, "hbox8"); gtk_widget_show (hbox8); gtk_box_pack_start (GTK_BOX (vbox7), hbox8, TRUE, TRUE, 0); lblPort = gtk_label_new_with_mnemonic ("_Port:"); gtk_widget_set_name (lblPort, "lblPort"); gtk_widget_show (lblPort); gtk_box_pack_start (GTK_BOX (hbox8), lblPort, FALSE, FALSE, 0); entPort = gtk_entry_new (); gtk_widget_set_name (entPort, "entPort"); gtk_widget_show (entPort); gtk_box_pack_start (GTK_BOX (hbox8), entPort, FALSE, FALSE, 3); gtk_entry_set_text (GTK_ENTRY (entPort), "8080"); lblServer = gtk_label_new_with_mnemonic ("_Server"); gtk_widget_set_name (lblServer, "lblServer"); gtk_widget_show (lblServer); gtk_notebook_set_tab_label (GTK_NOTEBOOK (ntbGameMode), gtk_notebook_get_nth_page (GTK_NOTEBOOK (ntbGameMode), 1), lblServer); vbox8 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox8, "vbox8"); gtk_widget_show (vbox8); gtk_container_add (GTK_CONTAINER (ntbGameMode), vbox8); lblTmpServerAddressClient = gtk_label_new_with_mnemonic ("Server _Address:"); gtk_widget_set_name (lblTmpServerAddressClient, "lblTmpServerAddressClient"); gtk_widget_show (lblTmpServerAddressClient); gtk_box_pack_start (GTK_BOX (vbox8), lblTmpServerAddressClient, FALSE, FALSE, 0); entServerAddressClient = gtk_entry_new (); gtk_widget_set_name (entServerAddressClient, "entServerAddressClient"); gtk_widget_show (entServerAddressClient); gtk_box_pack_start (GTK_BOX (vbox8), entServerAddressClient, FALSE, FALSE, 0); hbox9 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox9, "hbox9"); gtk_widget_show (hbox9); gtk_box_pack_start (GTK_BOX (vbox8), hbox9, TRUE, TRUE, 0); lblTmpPortClient = gtk_label_new_with_mnemonic ("_Port:"); gtk_widget_set_name (lblTmpPortClient, "lblTmpPortClient"); gtk_widget_show (lblTmpPortClient); gtk_box_pack_start (GTK_BOX (hbox9), lblTmpPortClient, FALSE, FALSE, 0); alignment7 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment7, "alignment7"); gtk_widget_show (alignment7); gtk_box_pack_start (GTK_BOX (hbox9), alignment7, TRUE, TRUE, 0); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment7), 3, 3, 3, 0); entPortClient = gtk_entry_new (); gtk_widget_set_name (entPortClient, "entPortClient"); gtk_widget_show (entPortClient); gtk_container_add (GTK_CONTAINER (alignment7), entPortClient); gtk_entry_set_text (GTK_ENTRY (entPortClient), "8080"); lblClient = gtk_label_new_with_mnemonic ("_Client"); gtk_widget_set_name (lblClient, "lblClient"); gtk_widget_show (lblClient); gtk_notebook_set_tab_label (GTK_NOTEBOOK (ntbGameMode), gtk_notebook_get_nth_page (GTK_NOTEBOOK (ntbGameMode), 2), lblClient); gtk_misc_set_alignment (GTK_MISC (lblClient), 0.49, 0.5); frmGraphicsSettings = gtk_frame_new (NULL); gtk_widget_set_name (frmGraphicsSettings, "frmGraphicsSettings"); gtk_widget_show (frmGraphicsSettings); gtk_box_pack_start (GTK_BOX (vbox1), frmGraphicsSettings, FALSE, TRUE, 3); gtk_frame_set_shadow_type (GTK_FRAME (frmGraphicsSettings), GTK_SHADOW_IN); alignment10 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment10, "alignment10"); gtk_widget_show (alignment10); gtk_container_add (GTK_CONTAINER (frmGraphicsSettings), alignment10); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment10), 0, 0, 12, 0); table1 = gtk_table_new (2, 2, FALSE); gtk_widget_set_name (table1, "table1"); gtk_widget_show (table1); gtk_container_add (GTK_CONTAINER (alignment10), table1); lblResolution = gtk_label_new_with_mnemonic ("_Resolution:"); gtk_widget_set_name (lblResolution, "lblResolution"); gtk_widget_show (lblResolution); gtk_table_attach (GTK_TABLE (table1), lblResolution, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (lblResolution), 0, 0.5); lblQuality = gtk_label_new_with_mnemonic ("_Quality:"); gtk_widget_set_name (lblQuality, "lblQuality"); gtk_widget_show (lblQuality); gtk_table_attach (GTK_TABLE (table1), lblQuality, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (lblQuality), 0, 0.5); alignment4 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment4, "alignment4"); gtk_widget_show (alignment4); gtk_table_attach (GTK_TABLE (table1), alignment4, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 3, 3); cmbResolution = gtk_combo_box_new_text (); gtk_widget_set_name (cmbResolution, "cmbResolution"); gtk_widget_show (cmbResolution); gtk_container_add (GTK_CONTAINER (alignment4), cmbResolution); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbResolution), "640x480"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbResolution), "800x600"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbResolution), "1024x768"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbResolution), "1280x1024"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbResolution), "1600x1200"); gtk_combo_box_set_active (GTK_COMBO_BOX (cmbResolution), 0); alignment5 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment5, "alignment5"); gtk_widget_show (alignment5); gtk_table_attach (GTK_TABLE (table1), alignment5, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 3, 3); cmbQuality = gtk_combo_box_new_text (); gtk_widget_set_name (cmbQuality, "cmbQuality"); gtk_widget_show (cmbQuality); gtk_container_add (GTK_CONTAINER (alignment5), cmbQuality); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbQuality), "Normal"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbQuality), "Reduced"); gtk_combo_box_append_text (GTK_COMBO_BOX (cmbQuality), "Extremely Reduced"); gtk_combo_box_set_active (GTK_COMBO_BOX (cmbQuality), 0); lblGraphicsSettings = gtk_label_new ("Graphics Settings"); gtk_widget_set_name (lblGraphicsSettings, "lblGraphicsSettings"); gtk_widget_show (lblGraphicsSettings); gtk_frame_set_label_widget (GTK_FRAME (frmGraphicsSettings), lblGraphicsSettings); gtk_label_set_use_markup (GTK_LABEL (lblGraphicsSettings), TRUE); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox2, "vbox2"); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (vbox1), vbox2, TRUE, TRUE, 0); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox2, "hbox2"); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, TRUE, 3); lblPlayerName = gtk_label_new_with_mnemonic ("_Player name:"); gtk_widget_set_name (lblPlayerName, "lblPlayerName"); gtk_widget_show (lblPlayerName); gtk_box_pack_start (GTK_BOX (hbox2), lblPlayerName, FALSE, FALSE, 0); alignment11 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment11, "alignment11"); gtk_widget_show (alignment11); gtk_box_pack_start (GTK_BOX (hbox2), alignment11, TRUE, TRUE, 0); entPlayerName = gtk_entry_new (); gtk_widget_set_name (entPlayerName, "entPlayerName"); gtk_widget_show (entPlayerName); gtk_container_add (GTK_CONTAINER (alignment11), entPlayerName); gtk_entry_set_text (GTK_ENTRY (entPlayerName), g_get_user_name()); frmGameMode = gtk_frame_new (NULL); gtk_widget_set_name (frmGameMode, "frmGameMode"); gtk_widget_show (frmGameMode); gtk_box_pack_start (GTK_BOX (vbox2), frmGameMode, TRUE, TRUE, 3); gtk_frame_set_shadow_type (GTK_FRAME (frmGameMode), GTK_SHADOW_IN); alignment3 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment3, "alignment3"); gtk_widget_show (alignment3); gtk_container_add (GTK_CONTAINER (frmGameMode), alignment3); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment3), 0, 0, 12, 0); vbox5 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox5, "vbox5"); gtk_widget_show (vbox5); gtk_container_add (GTK_CONTAINER (alignment3), vbox5); hbox7 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox7, "hbox7"); gtk_widget_show (hbox7); gtk_box_pack_start (GTK_BOX (vbox5), hbox7, TRUE, TRUE, 0); hbox5 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox5, "hbox5"); gtk_widget_show (hbox5); gtk_box_pack_start (GTK_BOX (hbox7), hbox5, TRUE, TRUE, 0); rbtnNormal = gtk_radio_button_new_with_mnemonic (NULL, "_Normal"); gtk_widget_set_name (rbtnNormal, "rbtnNormal"); gtk_widget_show (rbtnNormal); gtk_box_pack_start (GTK_BOX (hbox5), rbtnNormal, FALSE, FALSE, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (rbtnNormal), rbtnNormal_group); rbtnNormal_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rbtnNormal)); rbtnXtreme = gtk_radio_button_new_with_mnemonic (NULL, "_X-treme"); gtk_widget_set_name (rbtnXtreme, "rbtnXtreme"); gtk_widget_show (rbtnXtreme); gtk_box_pack_start (GTK_BOX (hbox7), rbtnXtreme, FALSE, FALSE, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (rbtnXtreme), rbtnNormal_group); rbtnNormal_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rbtnXtreme)); lblGameMode = gtk_label_new ("Game Mode"); gtk_widget_set_name (lblGameMode, "lblGameMode"); gtk_widget_show (lblGameMode); gtk_frame_set_label_widget (GTK_FRAME (frmGameMode), lblGameMode); gtk_label_set_use_markup (GTK_LABEL (lblGameMode), TRUE); hbox10 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox10, "hbox10"); gtk_widget_show (hbox10); gtk_box_pack_start (GTK_BOX (vbox2), hbox10, FALSE, TRUE, 3); alignment12 = gtk_alignment_new (0, 1, 1, 1); gtk_widget_set_name (alignment12, "alignment12"); gtk_widget_show (alignment12); gtk_box_pack_start (GTK_BOX (hbox10), alignment12, TRUE, TRUE, 0); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_set_name (hbox3, "hbox3"); gtk_widget_show (hbox3); gtk_container_add (GTK_CONTAINER (alignment12), hbox3); btnStart = gtk_button_new (); gtk_widget_set_name (btnStart, "btnStart"); gtk_widget_show (btnStart); gtk_box_pack_start (GTK_BOX (hbox3), btnStart, TRUE, TRUE, 3); alignment2 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_set_name (alignment2, "alignment2"); gtk_widget_show (alignment2); gtk_container_add (GTK_CONTAINER (btnStart), alignment2); hbox4 = gtk_hbox_new (FALSE, 2); gtk_widget_set_name (hbox4, "hbox4"); gtk_widget_show (hbox4); gtk_container_add (GTK_CONTAINER (alignment2), hbox4); image3 = gtk_image_new_from_stock ("gtk-media-forward", GTK_ICON_SIZE_BUTTON); gtk_widget_set_name (image3, "image3"); gtk_widget_show (image3); gtk_box_pack_start (GTK_BOX (hbox4), image3, FALSE, FALSE, 0); label8 = gtk_label_new_with_mnemonic ("Start _Game"); gtk_widget_set_name (label8, "label8"); gtk_widget_show (label8); gtk_box_pack_start (GTK_BOX (hbox4), label8, TRUE, TRUE, 0); btnQuit = gtk_button_new_from_stock ("gtk-quit"); gtk_widget_set_name (btnQuit, "btnQuit"); gtk_widget_show (btnQuit); gtk_box_pack_start (GTK_BOX (hbox3), btnQuit, TRUE, TRUE, 3); g_signal_connect ((gpointer) btnStart, "clicked", G_CALLBACK (on_btnStart_clicked), NULL); g_signal_connect ((gpointer) btnQuit, "clicked", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect ((gpointer) cmbQuality, "changed", G_CALLBACK (on_cmbQuality_changed), NULL); gtk_label_set_mnemonic_widget (GTK_LABEL (lblAI), cmbAI); gtk_label_set_mnemonic_widget (GTK_LABEL (lblPort), entPort); gtk_label_set_mnemonic_widget (GTK_LABEL (lblTmpServerAddressClient), entServerAddressClient); gtk_label_set_mnemonic_widget (GTK_LABEL (lblTmpPortClient), entPortClient); gtk_label_set_mnemonic_widget (GTK_LABEL (lblResolution), cmbResolution); gtk_label_set_mnemonic_widget (GTK_LABEL (lblQuality), cmbQuality); gtk_label_set_mnemonic_widget (GTK_LABEL (lblPlayerName), entPlayerName); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (winCrackAttackSplash, winCrackAttackSplash, "winCrackAttackSplash"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox1, "hbox1"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox3, "vbox3"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment8, "alignment8"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, frmGraphicsPreview, "frmGraphicsPreview"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment1, "alignment1"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox4, "vbox4"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, imgLogo, "imgLogo"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblGraphicsPreview, "lblGraphicsPreview"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment9, "alignment9"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox1, "vbox1"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, ntbGameMode, "ntbGameMode"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox6, "vbox6"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblAI, "lblAI"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, cmbAI, "cmbAI"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblSolo, "lblSolo"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox7, "vbox7"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblTmpServerAddress, "lblTmpServerAddress"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblServerAddress, "lblServerAddress"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox8, "hbox8"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblPort, "lblPort"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, entPort, "entPort"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblServer, "lblServer"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox8, "vbox8"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblTmpServerAddressClient, "lblTmpServerAddressClient"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, entServerAddressClient, "entServerAddressClient"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox9, "hbox9"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblTmpPortClient, "lblTmpPortClient"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment7, "alignment7"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, entPortClient, "entPortClient"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblClient, "lblClient"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, frmGraphicsSettings, "frmGraphicsSettings"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment10, "alignment10"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, table1, "table1"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblResolution, "lblResolution"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblQuality, "lblQuality"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment4, "alignment4"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, cmbResolution, "cmbResolution"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment5, "alignment5"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, cmbQuality, "cmbQuality"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblGraphicsSettings, "lblGraphicsSettings"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox2, "vbox2"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox2, "hbox2"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblPlayerName, "lblPlayerName"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment11, "alignment11"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, entPlayerName, "entPlayerName"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, frmGameMode, "frmGameMode"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment3, "alignment3"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, vbox5, "vbox5"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox7, "hbox7"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox5, "hbox5"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, rbtnNormal, "rbtnNormal"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, rbtnXtreme, "rbtnXtreme"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, lblGameMode, "lblGameMode"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox10, "hbox10"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment12, "alignment12"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, btnStart, "btnStart"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, alignment2, "alignment2"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, hbox4, "hbox4"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, image3, "image3"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, label8, "label8"); GLADE_HOOKUP_OBJECT (winCrackAttackSplash, btnQuit, "btnQuit"); return winCrackAttackSplash; } GtkWidget* create_winNetworking (void) { GtkWidget *winNetworking; GtkWidget *vbox10; GtkWidget *alignment13; GtkWidget *scrtxtOutput; GtkWidget *txtOutput; GtkWidget *alignment14; GtkWidget *btnCancel; winNetworking = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (winNetworking, "winNetworking"); gtk_widget_set_size_request (winNetworking, 310, 195); gtk_window_set_title (GTK_WINDOW (winNetworking), "Crack Attack Server"); gtk_window_set_modal (GTK_WINDOW (winNetworking), TRUE); gtk_window_set_destroy_with_parent (GTK_WINDOW (winNetworking), TRUE); vbox10 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox10, "vbox10"); gtk_widget_show (vbox10); gtk_container_add (GTK_CONTAINER (winNetworking), vbox10); alignment13 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_set_name (alignment13, "alignment13"); gtk_widget_show (alignment13); gtk_box_pack_start (GTK_BOX (vbox10), alignment13, TRUE, TRUE, 0); gtk_widget_set_size_request (alignment13, 57, -1); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment13), 5, 5, 5, 5); scrtxtOutput = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_name (scrtxtOutput, "scrtxtOutput"); gtk_widget_show (scrtxtOutput); gtk_container_add (GTK_CONTAINER (alignment13), scrtxtOutput); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrtxtOutput), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrtxtOutput), GTK_SHADOW_IN); txtOutput = gtk_text_view_new (); gtk_widget_set_name (txtOutput, "txtOutput"); gtk_widget_show (txtOutput); gtk_container_add (GTK_CONTAINER (scrtxtOutput), txtOutput); gtk_text_view_set_editable (GTK_TEXT_VIEW (txtOutput), FALSE); alignment14 = gtk_alignment_new (0.5, 0.5, 0, 1); gtk_widget_set_name (alignment14, "alignment14"); gtk_widget_show (alignment14); gtk_box_pack_start (GTK_BOX (vbox10), alignment14, FALSE, FALSE, 0); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment14), 5, 5, 5, 5); btnCancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_set_name (btnCancel, "btnCancel"); gtk_widget_show (btnCancel); gtk_container_add (GTK_CONTAINER (alignment14), btnCancel); #ifndef _WIN32 g_signal_connect ((gpointer) btnCancel, "clicked", G_CALLBACK (on_btnCancel_clicked), GTK_WIDGET(winNetworking)); g_signal_connect ((gpointer) winNetworking, "destroy", G_CALLBACK (on_winNetworking_destroy), NULL); #endif /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (winNetworking, winNetworking, "winNetworking"); GLADE_HOOKUP_OBJECT (winNetworking, vbox10, "vbox10"); GLADE_HOOKUP_OBJECT (winNetworking, alignment13, "alignment13"); GLADE_HOOKUP_OBJECT (winNetworking, scrtxtOutput, "scrtxtOutput"); GLADE_HOOKUP_OBJECT (winNetworking, txtOutput, "txtOutput"); GLADE_HOOKUP_OBJECT (winNetworking, alignment14, "alignment14"); GLADE_HOOKUP_OBJECT (winNetworking, btnCancel, "btnCancel"); return winNetworking; } crack-attack-1.1.14/src/gtk-gui/modeparser.cxx0000644000175000001440000001367210235513531020714 0ustar webbsterusers/* * modeparser.cxx * Kevin Webb - 4/16/05 * * Copyright (C) 2005 Kevin Webb * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * vim: set noet ts=2 sw=2: */ #include #include "../Mode.h" #include "persist.h" #include "modeparser.h" #include "support.h" /* Single Player Options. */ static const gchar *single_player = "--solo"; static const gchar *aieasy = "--easy"; static const gchar *aimedium = "--medium"; static const gchar *aihard = "--hard"; /* Multiplayer Server Options. * PORT is dynamic. */ static const gchar *server = "--server"; static const gchar *wait = "--wait"; /* The client side doesn't need anything special. * SERVER and PORT are dynamic. */ /* Global Options. * NAME is dynamic. */ static const gchar *reduced = "--low"; static const gchar *veryreduced = "--really"; static const gchar *xtreme = "--extreme"; static const gchar *name = "--name"; /* Resolution */ static const gchar *resolution = "--res"; gchar** generate_array(int mode, const gchar *start, GtkWidget *widget) { #define RESULT_SIZE 15 const gchar **result = (const gchar **) g_malloc0(sizeof(gchar *) * RESULT_SIZE); int i; for (i = 1; i < RESULT_SIZE; ++i) { result[i] = NULL; } result[0] = start; i = 1; if (mode & CM_SOLO) { /* Solo */ result[i] = single_player; ++i; if (mode & CM_AI_EASY) { result[i] = aieasy; ++i; } else if (mode & CM_AI_MEDIUM) { result[i] = aimedium; ++i; } else if (mode & CM_AI_HARD) { result[i] = aihard; ++i; } } else if (mode & CM_SERVER) { /* Server */ #ifndef _WIN32 // Wait indefinitely on Linux because we have a dialog box... result[i] = wait; ++i; #endif result[i] = server; ++i; result[i] = gtk_entry_get_text((GtkEntry *) lookup_widget(GTK_WIDGET(widget), "entPort")); ++i; } else if (mode & CM_CLIENT) { /* Client */ result[i] = gtk_entry_get_text((GtkEntry *) lookup_widget(GTK_WIDGET(widget), "entServerAddressClient")); ++i; result[i] = gtk_entry_get_text((GtkEntry *) lookup_widget(GTK_WIDGET(widget), "entPortClient")); ++i; } /* Global */ if (mode & CM_REALLY_LOW_GRAPHICS) { result[i] = veryreduced; ++i; } if (mode & CM_LOW_GRAPHICS) { result[i] = reduced; ++i; } if (mode & CM_X) { result[i] = xtreme; ++i; } /* Resolution */ result[i] = resolution; ++i; GtkWidget *cmbResolution = lookup_widget(GTK_WIDGET(widget), "cmbResolution"); int resolution = (int) gtk_combo_box_get_active((GtkComboBox *) cmbResolution); switch(resolution) { case 1: result[i] = "570"; ++i; break; case 2: result[i] = "680"; ++i; break; case 3: result[i] = "970"; ++i; break; case 4: result[i] = "1170"; ++i; break; default: result[i] = "400"; ++i; } /* Add the name to the end, without a trailing space. */ result[i] = name; ++i; result[i] = gtk_entry_get_text((GtkEntry *) lookup_widget(GTK_WIDGET(widget), "entPlayerName")); ++i; #ifdef DEVELOPMENT g_print("Arguments:\n"); for (i = 0; i < RESULT_SIZE; ++i) { if (result[i] != NULL) { g_print("%d: |%s|\n", i, result[i]); } } #endif return (gchar **) result; } gboolean validate_mode(int mode) { if (!(mode & (CM_SERVER | CM_CLIENT | CM_SOLO))) return FALSE; if ((mode & CM_NO_TIME_OUT) && !(mode & CM_SERVER)) return FALSE; if ((mode & CM_REALLY_LOW_GRAPHICS) && !(mode & CM_LOW_GRAPHICS)) return FALSE; if ((mode & CM_AI && (mode & CM_X))) return FALSE; return TRUE; } gint generate_mode(GtkWidget *widget) { gint mode = 0; gint tmp = 0; tmp = gtk_notebook_get_current_page((GtkNotebook *) lookup_widget(GTK_WIDGET(widget), "ntbGameMode")); switch (tmp) { case 1: { mode |= CM_SERVER; mode &= ~CM_SOLO; mode &= ~CM_CLIENT; mode &= ~CM_AI; break; } case 2: { mode |= CM_CLIENT; mode &= ~CM_SOLO; mode &= ~CM_SERVER; mode &= ~CM_AI; break; } default: { mode |= CM_SOLO; mode &= ~CM_SERVER; mode &= ~CM_CLIENT; tmp = gtk_combo_box_get_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbAI")); switch (tmp) { case 1: { mode |= CM_AI; mode |= CM_AI_EASY; break; } case 2: { mode |= CM_AI; mode |= CM_AI_MEDIUM; break; } case 3: { mode |= CM_AI; mode |= CM_AI_HARD; break; } default: { mode &= ~CM_AI; mode &= ~CM_AI_EASY; mode &= ~CM_AI_MEDIUM; mode &= ~CM_AI_HARD; } } } } tmp = gtk_toggle_button_get_active((GtkToggleButton *) lookup_widget(GTK_WIDGET(widget), "rbtnXtreme")); // Enable extreme mode iff it's selected and AI isn't selected. if (tmp && !(mode & CM_AI)) { mode |= CM_X; } else { mode &= ~CM_X; } tmp = gtk_combo_box_get_active((GtkComboBox *) lookup_widget(GTK_WIDGET(widget), "cmbQuality")); switch (tmp) { case 1: { mode |= CM_LOW_GRAPHICS; break; } case 2: { mode |= CM_LOW_GRAPHICS; mode |= CM_REALLY_LOW_GRAPHICS; break; } default: { mode &= ~CM_LOW_GRAPHICS; mode &= ~CM_REALLY_LOW_GRAPHICS; } } return mode; } crack-attack-1.1.14/src/gtk-gui/persist.h0000644000175000001440000000172610234250123017660 0ustar webbsterusers/* * persist.h * Kevin Webb - 3/21/05 * * Copyright (C) 2005 Kevin Webb * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #define GC_GUI_FILE_NAME "gui_record" void gui_data_save (GtkWidget *); void gui_data_read (GtkWidget *); crack-attack-1.1.14/src/gtk-gui/callbacks.h0000644000175000001440000000300210235512663020106 0ustar webbsterusers/* * callbacks.h * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * */ #include void on_btnStart_clicked (GtkButton *button, gpointer user_data); void on_cmbQuality_changed (GtkComboBox *button, gpointer user_data); #ifndef _WIN32 void on_winNetworking_destroy (GtkObject *object, gpointer user_data); void on_btnCancel_clicked (GtkButton *button, gpointer user_data); #endif crack-attack-1.1.14/src/gtk-gui/Makefile.am0000644000175000001440000000127010235745437020066 0ustar webbsterusersnoinst_LIBRARIES = libgtkgui.a libgtkgui_a_SOURCES = \ interface.cxx callbacks.cxx support.cxx gui_main.cxx persist.cxx modeparser.cxx \ interface.h callbacks.h support.h gui_main.h persist.h modeparser.h #AM_CXXFLAGS = -O2 -pedantic -Wall if WANT_BINRELOC PATH_INCLUDES = else PATH_INCLUDES = -DDATA_DIRECTORY='"${pkgdatadir}/"' \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DBINARY_DIRECTORY='"${bindir}"' endif INCLUDES = @PACKAGE_CFLAGS@ @DEBUG_INCLUDES@ ${PATH_INCLUDES} AM_LDFLAGS = ${all_libraries} LDADD = ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS} -lGL -lGLU -lglut -lXi -lX11 -lXmu @PACKAGE_LIBS@ crack-attack-1.1.14/src/gtk-gui/Makefile.in0000644000175000001440000003377110241200007020062 0ustar webbsterusers# Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 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@ SOURCES = $(libgtkgui_a_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ subdir = src/gtk-gui DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libgtkgui_a_AR = $(AR) $(ARFLAGS) libgtkgui_a_LIBADD = am_libgtkgui_a_OBJECTS = interface.$(OBJEXT) callbacks.$(OBJEXT) \ support.$(OBJEXT) gui_main.$(OBJEXT) persist.$(OBJEXT) \ modeparser.$(OBJEXT) libgtkgui_a_OBJECTS = $(am_libgtkgui_a_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/callbacks.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/gui_main.Po ./$(DEPDIR)/interface.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/modeparser.Po ./$(DEPDIR)/persist.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/support.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libgtkgui_a_SOURCES) DIST_SOURCES = $(libgtkgui_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUDIO_CFLAGS = @AUDIO_CFLAGS@ AUDIO_ENABLED_FALSE = @AUDIO_ENABLED_FALSE@ AUDIO_ENABLED_TRUE = @AUDIO_ENABLED_TRUE@ AUDIO_LIBS = @AUDIO_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUG_CFLAGS = @DEBUG_CFLAGS@ DEBUG_INCLUDES = @DEBUG_INCLUDES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WANT_BINRELOC_FALSE = @WANT_BINRELOC_FALSE@ WANT_BINRELOC_TRUE = @WANT_BINRELOC_TRUE@ WANT_GTK_FALSE = @WANT_GTK_FALSE@ WANT_GTK_TRUE = @WANT_GTK_TRUE@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ noinst_LIBRARIES = libgtkgui.a libgtkgui_a_SOURCES = \ interface.cxx callbacks.cxx support.cxx gui_main.cxx persist.cxx modeparser.cxx \ interface.h callbacks.h support.h gui_main.h persist.h modeparser.h @WANT_BINRELOC_FALSE@PATH_INCLUDES = -DDATA_DIRECTORY='"${pkgdatadir}/"' \ @WANT_BINRELOC_FALSE@ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ @WANT_BINRELOC_FALSE@ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @WANT_BINRELOC_FALSE@ -DBINARY_DIRECTORY='"${bindir}"' #AM_CXXFLAGS = -O2 -pedantic -Wall @WANT_BINRELOC_TRUE@PATH_INCLUDES = INCLUDES = @PACKAGE_CFLAGS@ @DEBUG_INCLUDES@ ${PATH_INCLUDES} AM_LDFLAGS = ${all_libraries} LDADD = ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS} -lGL -lGLU -lglut -lXi -lX11 -lXmu @PACKAGE_LIBS@ all: all-am .SUFFIXES: .SUFFIXES: .cxx .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/gtk-gui/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/gtk-gui/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libgtkgui.a: $(libgtkgui_a_OBJECTS) $(libgtkgui_a_DEPENDENCIES) -rm -f libgtkgui.a $(libgtkgui_a_AR) libgtkgui.a $(libgtkgui_a_OBJECTS) $(libgtkgui_a_LIBADD) $(RANLIB) libgtkgui.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modeparser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@ .cxx.o: @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@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @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@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uninstall-info-am: 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 $(LIBRARIES) installdirs: 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_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 clean-noinstLIBRARIES 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 info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: 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-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip 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-info-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: crack-attack-1.1.14/src/gtk-gui/support.h0000644000175000001440000000543210234254331017706 0ustar webbsterusers/* * support.h * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * */ #ifdef HAVE_CONFIG_H # include #endif #include /* * Standard gettext macros. */ /* #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else */ # define textdomain(String) (String) /* # define gettext(String) (String) # define dgettext(Domain,Message) (Message) */ # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define N_(String) (String) /* #endif */ /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps used in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); /* This is used to create the pixbufs used in the interface. */ GdkPixbuf* create_pixbuf (const gchar *filename); /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description); gchar* find_pixmap_file (const gchar *filename); crack-attack-1.1.14/src/gtk-gui/callbacks.cxx0000644000175000001440000001563210241203054020461 0ustar webbsterusers/* * callbacks.cxx * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "../Mode.h" #include "../Attack.h" #include "callbacks.h" #include "interface.h" #include "support.h" #include "prefs.h" #include "persist.h" #include "modeparser.h" #ifndef _WIN32 #include #include #else #include #endif static GtkWidget *fraClient, *fraSingle, *fraServer; static GtkWindow *window = NULL, *networking = NULL; static int mode = CM_SOLO; static GPid game_pid = 0; static GIOChannel *channel = NULL; static guint source_id = 0; extern int glut_argc; extern char **glut_argv; void turn_game_prefs_off () { GAME_SINGLE = GAME_SERVER = GAME_CLIENT = GAME_EXTREME = FALSE; } void lookup_widgets(GtkToggleButton * gtb) { fraClient = lookup_widget(GTK_WIDGET(gtb), "fraClient"); fraSingle = lookup_widget(GTK_WIDGET(gtb), "fraSingle"); fraServer = lookup_widget(GTK_WIDGET(gtb), "fraServer"); } void turn_sensitive_off() { gtk_widget_set_sensitive (fraClient, FALSE); gtk_widget_set_sensitive (fraSingle, FALSE); gtk_widget_set_sensitive (fraServer, FALSE); } void toggle_sensitive (GtkToggleButton* gtb, gint selector) { gtk_widget_set_sensitive (fraClient, FALSE); gtk_widget_set_sensitive (fraSingle, FALSE); gtk_widget_set_sensitive (fraServer, FALSE); switch (selector) { case 1: gtk_widget_set_sensitive (fraClient, TRUE); break; case 2: gtk_widget_set_sensitive (fraServer, TRUE); break; } } void prepare_for_actions (GtkToggleButton *gtb) { lookup_widgets(gtb); turn_game_prefs_off(); turn_sensitive_off(); } static void game_end (GPid pid, gint status, gpointer data) { #ifdef DEVELOPMENT g_print("game_end called!\n"); #endif game_pid = 0; if (networking) { gtk_widget_destroy(GTK_WIDGET(networking)); } if (window) { gtk_widget_show(GTK_WIDGET(window)); } g_spawn_close_pid (pid); } void ca_error_dialog (const char *message) { GtkWidget *dialog = NULL; dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } #ifndef _WIN32 void on_btnCancel_clicked (GtkButton *button, gpointer user_data) { GtkWidget *win = GTK_WIDGET(user_data); gtk_widget_destroy(win); } void on_winNetworking_destroy (GtkObject *object, gpointer user_data) { if (game_pid) { kill(game_pid, SIGKILL); } networking = NULL; if(NULL!=channel) { g_io_channel_unref(channel); channel = NULL; } } gboolean networking_output ( GIOChannel *source, GIOCondition condition, gpointer data) { if (condition == G_IO_HUP) { g_source_remove(source_id); return false; } GtkWidget *win = GTK_WIDGET(data); GtkTextView *txtOutput = NULL; GtkTextIter iter; GtkTextBuffer *buffer = NULL; gchar *out = NULL; gsize length = 0; txtOutput = GTK_TEXT_VIEW( lookup_widget(GTK_WIDGET(win), "txtOutput")); buffer = gtk_text_view_get_buffer(txtOutput); gtk_text_buffer_get_end_iter(buffer, &iter); g_io_channel_read_line(source, &out, &length, NULL, NULL); g_print(out); gtk_text_buffer_insert(buffer, &iter, out, length); g_free(out); return true; } void spawn_networking_dialog (gint standard_output) { networking = GTK_WINDOW(create_winNetworking()); gtk_widget_show(GTK_WIDGET(networking)); if(channel != NULL) { g_io_channel_unref(channel); channel = NULL; } channel = g_io_channel_unix_new(standard_output); source_id = g_io_add_watch(channel, (GIOCondition) (G_IO_IN | G_IO_HUP), networking_output, networking); } #endif // _WIN32 void on_btnStart_clicked (GtkButton *button, gpointer user_data) { window = GTK_WINDOW(lookup_widget(GTK_WIDGET(button),"winCrackAttackSplash")); // Save the gui data when the game starts. gui_data_save(GTK_WIDGET(button)); // Set the mode based on all the widget values... mode = generate_mode(GTK_WIDGET(button)); #ifdef DEVELOPMENT g_print("Looking for location: %s\n", GC_BINARY_LOCATION); #endif GError *err = NULL; GPid pid; gtk_widget_hide(GTK_WIDGET(window)); GSpawnFlags flags = (GSpawnFlags) (G_SPAWN_LEAVE_DESCRIPTORS_OPEN | G_SPAWN_DO_NOT_REAP_CHILD); gchar **args = generate_array(mode, GC_BINARY_LOCATION, GTK_WIDGET(button)); gint sin, sout, serr; gboolean ret = g_spawn_async_with_pipes( NULL, args, NULL, flags, NULL, NULL, &pid, &sin, &sout, &serr, &err); if (ret) { g_child_watch_add(pid, (GChildWatchFunc) game_end, NULL); game_pid = pid; #ifndef _WIN32 if (mode & CM_SERVER) { spawn_networking_dialog(sout); } #endif } else { if (err) ca_error_dialog(err->message); } g_free(args); } gboolean on_winCrackAttackSplash_delete_event (GtkWindow *window, gpointer user_data) { return FALSE; } void on_cmbQuality_changed (GtkComboBox *cmb, gpointer user_data) { gint tmp = gtk_combo_box_get_active(cmb); GtkImage * imgLogo = GTK_IMAGE(lookup_widget(GTK_WIDGET(cmb), "imgLogo")); gchar *filename = NULL; switch (tmp) { case 0: { filename = find_pixmap_file("preview_normal.tga"); break; } case 1: { filename = find_pixmap_file("preview_reduced.tga"); break; } case 2: { filename = find_pixmap_file("preview_extremely_reduced.tga"); break; } default: { filename = find_pixmap_file("preview_normal.tga"); } } gtk_image_set_from_file(imgLogo, filename); } crack-attack-1.1.14/src/gtk-gui/modeparser.h0000644000175000001440000000166410234173276020346 0ustar webbsterusers/* * modeparser.h * Kevin Webb - 4/16/05 * * Copyright (C) 2005 Kevin Webb * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include gboolean validate_mode(int); gchar** generate_array(int, const gchar *, GtkWidget *); gint generate_mode(GtkWidget *); crack-attack-1.1.14/src/gtk-gui/gui_main.h0000644000175000001440000000177410132632760017772 0ustar webbsterusers/* * gui_main.h * Andrew Sayman - 10/11/04 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * */ #ifndef GUI_MAIN_H #define GUI_MAIN_H int gui_main ( int argc, char **argv ); #endif crack-attack-1.1.14/src/gtk-gui/prefs.h0000644000175000001440000000177010221442402017304 0ustar webbsterusers/* * prefs.h * Andrew Sayman - 10/11/04 * * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _PREFS_H #define _PREFS_H gboolean GAME_SINGLE = TRUE, GAME_SERVER = FALSE, GAME_CLIENT = FALSE, GRAPHICS_LOW = FALSE, GAME_EXTREME = FALSE; gchar *player_name = NULL; #endif crack-attack-1.1.14/src/obj_score_record.cxx0000644000175000001440000001772710230144462020512 0ustar webbsterusers/* * score_record.cxx * Daniel Nelson - 12/8/1 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #include #include #include "sstream.h" #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "MetaState.h" #include "String.h" #include "Score.h" GLuint Displayer::score_to_beat_texture; GLuint Displayer::record_textures[DC_SCORE_REC_NUMBER_DRAW]; GLubyte **Displayer::record_texture_data; GLubyte *Displayer::player_rank_texture_data; void Displayer::copyRecordSubTexture ( GLubyte *texture, GLubyte *subtexture, int subtex_width, int s_location, int copy_width ) { for (int t = DC_LETTER_TEX_LENGTH; t--; ) for (int s = copy_width; s--; ) { int ds = s_location + s; texture[(t * DC_SCORE_REC_TEX_LENGTH_S + ds) * 4 + 0] = subtexture[(t * subtex_width + s) * 4 + 0]; texture[(t * DC_SCORE_REC_TEX_LENGTH_S + ds) * 4 + 1] = subtexture[(t * subtex_width + s) * 4 + 1]; texture[(t * DC_SCORE_REC_TEX_LENGTH_S + ds) * 4 + 2] = subtexture[(t * subtex_width + s) * 4 + 2]; texture[(t * DC_SCORE_REC_TEX_LENGTH_S + ds) * 4 + 3] = subtexture[(t * subtex_width + s) * 4 + 3]; } } void Displayer::rerankScoreRecord ( ) { GLubyte *subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * DC_SCORE_REC_RANK_STRING_TEX_WIDTH * 4]; for (int n = Score::player_rank; n--; ) { ostringstream rank_string; rank_string << (GC_SCORE_REC_LENGTH - n) << ends; for (int i = DC_LETTER_TEX_LENGTH * DC_SCORE_REC_RANK_STRING_TEX_WIDTH * 4; i--; ) subtexture[i] = 0; String::fillStringTexture(rank_string.str().data(), subtexture, DC_SCORE_REC_RANK_STRING_TEX_WIDTH, true); copyRecordSubTexture(record_texture_data[n], subtexture, DC_SCORE_REC_RANK_STRING_TEX_WIDTH, DC_SCORE_REC_RANK_TEX_MARGIN, DC_SCORE_REC_RANK_STRING_TEX_WIDTH); } if (subtexture != null) { delete [] subtexture; subtexture = null; } } void Displayer::generateScoreRankTexture ( int rank, int score, const char *name, GLubyte *texture ) { ostringstream score_string; score_string << score << ends; ostringstream rank_string; rank_string << (GC_SCORE_REC_LENGTH - rank) << ends; int score_width = String::stringWidth(score_string.str().data(), DC_SCORE_REC_TEX_LENGTH_S - 2 * DC_SCORE_REC_RANK_TEX_MARGIN); int max_name_width = (DC_SCORE_REC_TEX_LENGTH_S - 2 * DC_SCORE_REC_RANK_TEX_MARGIN - DC_SCORE_REC_RANK_MIN_SPACE - DC_SCORE_REC_RANK_STRING_TEX_WIDTH) - score_width; int name_width = String::stringWidth(name, max_name_width); int subtex_width = name_width > score_width ? name_width : score_width; if (DC_SCORE_REC_RANK_STRING_TEX_WIDTH > subtex_width) subtex_width = DC_SCORE_REC_RANK_STRING_TEX_WIDTH; GLubyte *subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * subtex_width * 4]; for (int i = DC_LETTER_TEX_LENGTH * subtex_width * 4; i--; ) subtexture[i] = 0; String::fillStringTexture(rank_string.str().data(), subtexture, DC_SCORE_REC_RANK_STRING_TEX_WIDTH, true, subtex_width); copyRecordSubTexture(texture, subtexture, subtex_width , DC_SCORE_REC_RANK_TEX_MARGIN, DC_SCORE_REC_RANK_STRING_TEX_WIDTH); for (int i = DC_LETTER_TEX_LENGTH * subtex_width * 4; i--; ) subtexture[i] = 0; String::fillStringTexture(name, subtexture, name_width, true, subtex_width); copyRecordSubTexture(texture, subtexture, subtex_width, DC_SCORE_REC_RANK_STRING_TEX_WIDTH + DC_SCORE_REC_RANK_TEX_MARGIN, name_width); for (int i = DC_LETTER_TEX_LENGTH * subtex_width * 4; i--; ) subtexture[i] = 0; String::fillStringTexture(score_string.str().data(), subtexture, score_width, true, subtex_width); copyRecordSubTexture(texture, subtexture, subtex_width, (DC_SCORE_REC_TEX_LENGTH_S - DC_SCORE_REC_RANK_TEX_MARGIN) - score_width, score_width); if (subtexture != null) { delete [] subtexture; subtexture = null; } } void Displayer::generateScoreRecord ( ) { if (!(MetaState::mode & CM_SOLO)) return; // generate score to beat message glGenTextures(1, &score_to_beat_texture); glBindTexture(GL_TEXTURE_2D, score_to_beat_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GLubyte texture[DC_SCORE_TO_BEAT_TEX_LENGTH_T] [DC_SCORE_TO_BEAT_TEX_LENGTH_S][3]; for (int t = DC_SCORE_TO_BEAT_TEX_LENGTH_T; t--; ) for (int s = DC_SCORE_TO_BEAT_TEX_LENGTH_S; s--; ) texture[t][s][0] = texture[t][s][1] = texture[t][s][2] = 0; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, DC_SCORE_TO_BEAT_TEX_LENGTH_S, DC_SCORE_TO_BEAT_TEX_LENGTH_T, GL_FALSE, GL_RGB, GL_UNSIGNED_BYTE, texture); int width = String::stringWidth(DC_SCORE_TO_BEAT_MESSAGE, DC_SCORE_TO_BEAT_TEX_LENGTH_S); GLubyte *subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(DC_SCORE_TO_BEAT_MESSAGE, subtexture, width); glTexSubImage2D(GL_TEXTURE_2D, 0, (DC_SCORE_TO_BEAT_TEX_LENGTH_S - width) / 2, (30 * DC_SCORE_TO_BEAT_TEX_LENGTH_T / 100 - DC_LETTER_TEX_LENGTH) / 2, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, subtexture); if (subtexture != null) { delete [] subtexture; subtexture = null; } width = String::stringWidth(Score::record[GC_SCORE_REC_LENGTH - 1].name, DC_SCORE_TO_BEAT_TEX_LENGTH_S); subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(Score::record[GC_SCORE_REC_LENGTH - 1].name, subtexture, width); glTexSubImage2D(GL_TEXTURE_2D, 0, (DC_SCORE_TO_BEAT_TEX_LENGTH_S - width) / 2, (117 * DC_SCORE_TO_BEAT_TEX_LENGTH_T / 100 - DC_LETTER_TEX_LENGTH) / 2, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, subtexture); if (subtexture != null) { delete [] subtexture; subtexture = null; } ostringstream score; score << Score::record[GC_SCORE_REC_LENGTH - 1].score << ends; width = String::stringWidth(score.str().data(), DC_SCORE_TO_BEAT_TEX_LENGTH_S); subtexture = new GLubyte[DC_LETTER_TEX_LENGTH * width * 4]; String::fillStringTexture(score.str().data(), subtexture, width); glTexSubImage2D(GL_TEXTURE_2D, 0, (DC_SCORE_TO_BEAT_TEX_LENGTH_S - width) / 2, (170 * DC_SCORE_TO_BEAT_TEX_LENGTH_T / 100 - DC_LETTER_TEX_LENGTH) / 2, width, DC_LETTER_TEX_LENGTH, GL_RGBA, GL_UNSIGNED_BYTE, subtexture); if (subtexture != null) { delete [] subtexture; subtexture = null; } // generate rank textures record_texture_data = new GLubyte *[GC_SCORE_REC_LENGTH - 1]; for (int n = GC_SCORE_REC_LENGTH - 1; n--; ) { record_texture_data[n] = new GLubyte[DC_LETTER_TEX_LENGTH * DC_SCORE_REC_TEX_LENGTH_S * 4]; for (int i = DC_LETTER_TEX_LENGTH * DC_SCORE_REC_TEX_LENGTH_S * 4; i--; ) record_texture_data[n][i] = 0; generateScoreRankTexture(n + 1, Score::record[n + 1].score, Score::record[n + 1].name, record_texture_data[n]); } // ready space for the player's rank texture player_rank_texture_data = new GLubyte[DC_LETTER_TEX_LENGTH * DC_SCORE_REC_TEX_LENGTH_S * 4]; for (int i = DC_LETTER_TEX_LENGTH * DC_SCORE_REC_TEX_LENGTH_S * 4; i--; ) player_rank_texture_data[i] = 0; } crack-attack-1.1.14/src/stamp-h.in0000644000175000001440000000001210132356545016347 0ustar webbsteruserstimestamp crack-attack-1.1.14/src/MetaState.h0000644000175000001440000000433110235601062016505 0ustar webbsterusers/* * MetaState.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef METASTATE_H #define METASTATE_H using namespace std; #include "Game.h" // program states #define MS_BOTH_KEY_WAIT (1 << 0) #define MS_REMOTE_KEY_WAIT (1 << 1) #define MS_LOCAL_KEY_WAIT (1 << 2) #define MS_GAME_OVER_KEY_WAIT (1 << 3) #define MS_GAME_OVER_ANY_KEY_WAIT (1 << 4) #define MS_READY_GAME_START (1 << 5) #define MS_CELEBRATION_WAIT (1 << 6) #define MS_GAME_PLAY (1 << 7) #define MS_CONCESSION (1 << 8) /* static */ class MetaState { public: static void programStart ( int _mode, char player_name[GC_PLAYER_NAME_LENGTH], int width, int height); static void programEnd ( ); static void gameStart ( ); static void gameWon ( ); static void gameLoss ( ); static void gameFinish ( ); static void celebrationComplete ( ); static void localKeyPressed ( bool esc ); static void remoteKeyPressed ( ); static void remoteReady ( ); // set to Game::time_step upon game finish static int final_time_step; // current game state - playing, local key wait, ... static int state; // global game mode - server, client, solo, ... static int mode; // player name static char player_name[GC_PLAYER_NAME_LENGTH]; }; #endif crack-attack-1.1.14/src/DrawWinRecord.cxx0000644000175000001440000001165510230144462017713 0ustar webbsterusers/* * DrawWinRecord.cxx * Daniel Nelson - 11/5/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws the little win record stars. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "WinRecord.h" void Displayer::drawWinRecord ( ) { glBindTexture(GL_TEXTURE_2D, mote_textures[MT_FIVE_POINTED_STAR]); int n; if (MetaState::mode & CM_SOLO) n = DC_SOLO_STAR_ID + 1; else n = GC_GAMES_PER_MATCH; while (n--) { Star &star = WinRecord::stars[n]; glPushMatrix(); switch (WinRecord::record[n]) { // game not yet played case GR_NOT_PLAYED: glColor3f(DC_STAR_UNPLAYED_RED, DC_STAR_UNPLAYED_GREEN, DC_STAR_UNPLAYED_BLUE); glTranslatef(DC_STAR_OFFSET_X + DC_STAR_DISPLACEMENT * n, DC_STAR_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glScalef(DC_STAR_SIZE_EQUILIBRIUM, -DC_STAR_SIZE_EQUILIBRIUM, 0.0f); glCallList(sparkle_list); break; // game being played case GR_BEING_PLAYED: glColor3f(DC_STAR_UNPLAYED_RED, DC_STAR_UNPLAYED_GREEN, DC_STAR_UNPLAYED_BLUE); glTranslatef(DC_STAR_OFFSET_X + DC_STAR_DISPLACEMENT * n, DC_STAR_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glRotatef(star.a, 0.0f, 0.0f, 1.0f); glScalef(DC_STAR_SIZE_EQUILIBRIUM, -DC_STAR_SIZE_EQUILIBRIUM, 0.0f); glCallList(sparkle_list); break; // game has been lost case GR_LOST: // star has already faded out if (WinRecord::current_game != n) glColor4f(DC_STAR_UNPLAYED_RED, DC_STAR_UNPLAYED_GREEN, DC_STAR_UNPLAYED_BLUE, DC_STAR_LOST_ALPHA); // star is fading out else if (Game::time_step < DC_CELEBRATION_TIME) { GLfloat fade = Game::time_step * (1.0f / (GLfloat) DC_CELEBRATION_TIME); fade = Game::sqrt(fade); glColor4f(DC_STAR_UNPLAYED_RED, DC_STAR_UNPLAYED_GREEN, DC_STAR_UNPLAYED_BLUE, 1.0f - (1.0f - DC_STAR_LOST_ALPHA) * fade); // star has already faded out } else glColor4f(DC_STAR_UNPLAYED_RED, DC_STAR_UNPLAYED_GREEN, DC_STAR_UNPLAYED_BLUE, DC_STAR_LOST_ALPHA); glTranslatef(DC_STAR_OFFSET_X + DC_STAR_DISPLACEMENT * n, DC_STAR_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glRotatef(star.a, 0.0f, 0.0f, 1.0f); glScalef(DC_STAR_SIZE_EQUILIBRIUM, -DC_STAR_SIZE_EQUILIBRIUM, 0.0f); glCallList(sparkle_list); break; // game has been won case GR_WON: // if we need to, draw the old star if (WinRecord::draw_old_star && WinRecord::current_game == n) { glPushMatrix(); glColor3f(DC_STAR_UNPLAYED_RED, DC_STAR_UNPLAYED_GREEN, DC_STAR_UNPLAYED_BLUE); glTranslatef(DC_STAR_OFFSET_X + DC_STAR_DISPLACEMENT * n, DC_STAR_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glRotatef(WinRecord::old_star_a, 0.0f, 0.0f, 1.0f); glScalef(WinRecord::old_star_size, -WinRecord::old_star_size, 0.0f); glCallList(sparkle_list); glPopMatrix(); } glColor3f(DC_STAR_WIN_RED, DC_STAR_WIN_GREEN, DC_STAR_WIN_BLUE); // star is static but displaced if (n == WinRecord::displaced_star) if (MetaState::mode & CM_SOLO) glTranslatef(DC_STAR_WIN_OFFSET_X, DC_STAR_WIN_SOLO_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); else glTranslatef(DC_STAR_WIN_OFFSET_X, DC_STAR_WIN_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); // star is in motion else if (n == WinRecord::dynamic_star) glTranslatef(DC_STAR_OFFSET_X + DC_STAR_DISPLACEMENT * n + WinRecord::win_star_x, DC_STAR_OFFSET_Y + WinRecord::win_star_y, DC_EXTERNAL_OFFSET_Z); // star is at rest in the standard location else glTranslatef(DC_STAR_OFFSET_X + DC_STAR_DISPLACEMENT * n, DC_STAR_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glRotatef(star.a, 0.0f, 0.0f, 1.0f); glScalef(star.size, -star.size, 0.0f); glCallList(sparkle_list); break; } glPopMatrix(); if (MetaState::mode & CM_SOLO) break; } } crack-attack-1.1.14/src/obj_clock.cxx0000644000175000001440000000461110230146633017122 0ustar webbsterusers/* * clock.cxx * Daniel Nelson - 11/2/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates the textures for the clock. */ #include #include "glext.h" using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" GLuint Displayer::clock_digit_textures[11]; const char *clock_digit_texture_files[11] = { GC_DATA_DIRECTORY("clock_0.tga"), GC_DATA_DIRECTORY("clock_1.tga"), GC_DATA_DIRECTORY("clock_2.tga"), GC_DATA_DIRECTORY("clock_3.tga"), GC_DATA_DIRECTORY("clock_4.tga"), GC_DATA_DIRECTORY("clock_5.tga"), GC_DATA_DIRECTORY("clock_6.tga"), GC_DATA_DIRECTORY("clock_7.tga"), GC_DATA_DIRECTORY("clock_8.tga"), GC_DATA_DIRECTORY("clock_9.tga"), GC_DATA_DIRECTORY("clock_extra.tga") }; void Displayer::generateClock ( ) { GLubyte *texture; glGenTextures(11, clock_digit_textures); for (int n = 11; n--; ) { glBindTexture(GL_TEXTURE_2D, clock_digit_textures[n]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); texture = TextureLoader::loadAlphaTGA(clock_digit_texture_files[n], DC_CLOCK_TEX_LENGTH, DC_CLOCK_TEX_LENGTH); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, DC_CLOCK_TEX_LENGTH, DC_CLOCK_TEX_LENGTH, GL_FALSE, GL_ALPHA, GL_UNSIGNED_BYTE, texture); if (texture != null) { delete [] texture; texture = null; } } } crack-attack-1.1.14/src/Sound.h0000644000175000001440000000342010232523671015712 0ustar webbsterusers/* * Sound.h * Miguel ngel Vilela Garca - 8/29/03 * * Copyright (C) 2003 Miguel ngel Vilela Garca * Copyright (C) 2005 See COPYRIGHT * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Miguel ngel Vilela Garca - www.miguev.net */ #ifndef SOUND_H #define SOUND_H // const char GC_SOUND_FILENAME_LENGTH = 128; const char GC_SOUND_COUNTDOWN[] = "countdown.wav"; const char GC_SOUND_BLOCK_FALLEN[] = "block_fallen.wav"; const char GC_SOUND_BLOCK_AWAKING[] = "block_awaking.wav"; const char GC_SOUND_BLOCK_DYING[] = "block_dying.wav"; const char GC_SOUND_GARBAGE_FALLEN[] = "garbage_fallen.wav"; const char GC_SOUND_GARBAGE_SHATTERING[] = "garbage_shattering.wav"; class Sound { public: static void initialize ( void ); static void play( const char *file, int vol ); static void cleanup ( void ); static int audio_available( void ); private: }; #endif /* SOUND_H */ crack-attack-1.1.14/src/ComputerPlayer.cxx0000644000175000001440000000737210231337750020162 0ustar webbsterusers/* * ComputerPlayer.cxx * Andrew Sayman - 3/27/05 * * Copyright (C) 2005 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "LevelLights.h" #include "ComputerPlayer.h" #include "Score.h" using namespace std; //#define WAIT_TIME ( GC_STEPS_PER_SECOND * 10 ) bool ComputerPlayer::lost; bool ComputerPlayer::_impact; ComputerPlayerAI *ComputerPlayer::ai; void ComputerPlayer::gameStart() { if (!(MetaState::mode & CM_AI)) return; if ((MetaState::mode & CM_AI_EASY)) ai = new EasyAI(); if ((MetaState::mode & CM_AI_MEDIUM)) ai = new MediumAI(); if ((MetaState::mode & CM_AI_HARD)) ai = new HardAI(); assert(ai != NULL); lost = false; } int ComputerPlayer::gameFinish() { return ai->determineLoss() ? GS_WON : GS_LOST; } void ComputerPlayer::timeStep() { static bool first_time = true; if (!(MetaState::mode & CM_AI)) return; if (!ai) { return; } // handle the lights LevelLights::handleAI(); ComputerPlayerAI &localAi = *ai; if (first_time) { MESSAGE("AI will drop again in " << ((localAi.alarm() - Game::time_step) / GC_STEPS_PER_SECOND) << " seconds"); LOG("AI will drop again in " << ((localAi.alarm() - Game::time_step) / GC_STEPS_PER_SECOND) << " seconds"); first_time = false; } if (Game::time_step >= localAi.alarm()) { localAi.garbageAmount()->sendToGenerator(); #ifndef NDEBUG cout << "init pop: " << GC_INITIAL_POP_DELAY << endl; cout << "steps per second: " << GC_STEPS_PER_SECOND << endl; cout << "Height: " << ai->garbageQueue()->height() << endl; #endif localAi.resetAlarm(); MESSAGE("AI will drop again in " << ((localAi.alarm() - Game::time_step) / GC_STEPS_PER_SECOND) << " seconds"); LOG("AI will drop again in " << ((localAi.alarm() - Game::time_step) / GC_STEPS_PER_SECOND) << " seconds"); } if(localAi.determineLoss()) { Game::aiPlayerLoss(); } } void ComputerPlayer::addGarbage ( int height, int width, int flavor ) { assert(ai != NULL); MESSAGE("Adding garbage to queue"); ai->garbageQueue()->add(height, width, flavor); _impact = true; } bool ComputerPlayer::checkLevelLightDying() { int height = ai->garbageQueue()->height(); int ninety = (int)(ai->lossHeight() * .9); if (ninety == ai->lossHeight()) ninety = ai->lossHeight() - 1; if (height >= ninety) return true; return false; } double ComputerPlayer::lightPartition (int n) { static double max = LL_NUMBER_LEVEL_LIGHTS; double lh = ai->lossHeight(); double partition = lh / max; double colorh = n * partition; return colorh; } bool ComputerPlayer::checkLevelLightBlue(int n) { if (lightPartition(n) >= ai->garbageQueue()->height()) return true; else return false; } int ComputerPlayer::findTopRed() { for (int i=0; i < LL_NUMBER_LEVEL_LIGHTS; ++i) { if (lightPartition(i) >= ai->garbageQueue()->height()) return i; } return 0; } int ComputerPlayer::levelLightImpact ( ) { if (impact(true)) return findTopRed(); return 0; } bool ComputerPlayer::impact (bool reset) { bool ret = _impact; if (reset) _impact = false; return ret; } crack-attack-1.1.14/src/ComputerPlayerAI.h0000644000175000001440000000364210231337750020015 0ustar webbsterusers/* * ComputerPlayerAI.h * Andrew Sayman - 3/27/05 * * Copyright (C) 2005 Andrew Sayman * Copyright (C) 2005 Kevin Webb * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef cpai_h_ #define cpai_h_ #include "GarbageQueue.h" class GarbageQueue; class ComputerPlayerAI { private: int last_time; int last_shatter_height; protected: enum AI_STATE { AI_WAITING, AI_SHATTERING } state; GarbageQueue *queue; virtual int baseSteps(); virtual int stateSteps(); virtual int garbageShatterDelay ( ); virtual void shatter(); public: ComputerPlayerAI(); virtual ~ComputerPlayerAI(){} int alarm ( ); void resetAlarm ( ); GarbageQueue *garbageQueue ( ); virtual GarbageQueue *garbageAmount ( ); virtual bool determineLoss ( ); virtual int lossHeight(); }; class EasyAI :public ComputerPlayerAI { public: EasyAI() { } virtual ~EasyAI(){} virtual int lossHeight(); protected: virtual int baseSteps(); }; class MediumAI :public ComputerPlayerAI { public: MediumAI(){} virtual ~MediumAI(){} virtual int lossHeight(); protected: virtual int baseSteps(); }; class HardAI :public ComputerPlayerAI { public: HardAI(){} virtual ~HardAI(){} virtual int lossHeight(); protected: virtual int baseSteps(); }; #endif crack-attack-1.1.14/src/Swapper.cxx0000644000175000001440000001775510132356545016641 0ustar webbsterusers/* * Swapper.cxx * Daniel Nelson - 8/22/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * The thingy you swap blocks with. */ using namespace std; #include "Game.h" #include "Swapper.h" #include "Grid.h" #include "Block.h" #include "Controller.h" #include "ComboTabulator.h" #include "ComboManager.h" #include "CountDownManager.h" #include "X.h" int Swapper::x, Swapper::y; int Swapper::state; int Swapper::swap; int Swapper::swap_alarm; int Swapper::move_pause_alarm; bool Swapper::button_down_swap; int Swapper::button_down_move; Block *Swapper::left_block, *Swapper::right_block; int Swapper::queued_move; bool Swapper::queued_swap; float Swapper::swap_factor; int Swapper::color; void Swapper::gameStart ( ) { x = GC_INITIAL_SWAPPER_LOCATION_X; y = GC_INITIAL_SWAPPER_LOCATION_Y; state = 0; swap_alarm = 0; move_pause_alarm = 0; button_down_swap = false; button_down_move = 0; queued_move = 0; queued_swap = false; color = 0; } void Swapper::timeStep ( ) /* * If we're swapping, check to see if we're done. Check the keyboard for any * commands which we must react to. */ { if (!Controller::moveCommand()) button_down_move = 0; if (!Controller::swapCommand()) button_down_swap = false; if (state & SS_MOVE_PAUSE) // if it's time, unset the move pause state if (move_pause_alarm == Game::time_step) state &= ~SS_MOVE_PAUSE; // otherwise, listen to queue a swap else if (!button_down_swap && Controller::swapCommand()) { if (queued_move) queued_move = 0; queued_swap = true; button_down_swap = true; // otherwise, listen to queue a move } else if (Controller::moveCommand() && button_down_move != Controller::moveCommand() && !queued_swap) queued_move = button_down_move = Controller::moveCommand(); if (state & SS_SWAPPING) if (swap_alarm == Game::time_step) { // unset the swap state state &= ~SS_SWAPPING; // swap the blocks if (swap & SA_LEFT) Grid::remove(x, y, left_block); if (swap & SA_RIGHT) Grid::remove(x + 1, y, right_block); #ifndef NDEBUG // otherwise the assert bites us if (!(swap & SA_LEFT)) Grid::changeState(x, y, null, GR_EMPTY); if (!(swap & SA_RIGHT)) Grid::changeState(x + 1, y, null, GR_EMPTY); #endif if (swap & SA_LEFT) left_block->finishSwapping(x + 1); if (swap & SA_RIGHT) right_block->finishSwapping(x); // register blocks for elimination checking // if two blocks moved, we need a combo tabulator to link potential // pattern matches ComboTabulator *combo = (swap == (SA_LEFT | SA_RIGHT) ? &ComboManager::newComboTabulator() : null); if (swap & SA_LEFT) Grid::requestEliminationCheck(*left_block, combo); if (swap & SA_RIGHT) Grid::requestEliminationCheck(*right_block, combo); // listen to queue a move if (!button_down_move && Controller::moveCommand()) queued_move = button_down_move = Controller::moveCommand(); // no commands when we're swapping return; } else swap_factor = (Game::time_step - Swapper::swap_alarm) * (1.0f / (float) GC_SWAP_DELAY); if (state & SS_SWAPPING) { // listen to queue a move if (!button_down_move && Controller::moveCommand()) queued_move = button_down_move = Controller::moveCommand(); // no commands when we're swapping return; } // if we're not in a move pause or swap if (!(state & (SS_MOVE_PAUSE | SS_SWAPPING)) && (queued_move || (Controller::moveCommand() && button_down_move != Controller::moveCommand()))) { switch (queued_move ? queued_move : Controller::moveCommand()) { case CC_LEFT: if (!X::reverseControls()) { if (x > 0) { x--; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_LEFT | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_LEFT; } } else { if (x < GC_PLAY_WIDTH - 2) { x++; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_RIGHT | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_LEFT; } } break; case CC_RIGHT: if (!X::reverseControls()) { if (x < GC_PLAY_WIDTH - 2) { x++; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_RIGHT | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_RIGHT; } } else { if (x > 0) { x--; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_LEFT | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_RIGHT; } } break; case CC_UP: if (!X::reverseControls()) { if (y < GC_SAFE_HEIGHT - 1) { y++; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_UP | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_UP; } } else { if (y > 1) { y--; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_DOWN | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_UP; } } break; case CC_DOWN: if (!X::reverseControls()) { if (y > 1) { y--; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_DOWN | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_DOWN; } } else { if (y < GC_SAFE_HEIGHT - 1) { y++; state = (state & ~SS_MOVE_MASK) | (SS_MOVE_UP | SS_MOVE_PAUSE); move_pause_alarm = Game::time_step + GC_MOVE_DELAY; button_down_move = CC_DOWN; } } break; } queued_move = 0; } if (!(state & (SS_MOVE_PAUSE | SS_SWAPPING)) && (queued_swap || (Controller::swapCommand() && !button_down_swap)) && CountDownManager::start_pause_alarm == 0) { button_down_swap = true; queued_swap = false; swap = 0; if (Grid::stateAt(x, y) & GR_BLOCK) { left_block = &Grid::blockAt(x, y); swap |= SA_LEFT; } else if (!(Grid::stateAt(x, y) & GR_EMPTY) || Grid::stateAt(x, y - 1) & GR_FALLING || Grid::stateAt(x, y + 1) & GR_HANGING) swap |= SA_DISALLOWED; if (Grid::stateAt(x + 1, y) & GR_BLOCK) { right_block = &Grid::blockAt(x + 1, y); swap |= SA_RIGHT; } else if (!(Grid::stateAt(x + 1, y) & GR_EMPTY) || Grid::stateAt(x + 1, y - 1) & GR_FALLING || Grid::stateAt(x + 1, y + 1) & GR_HANGING) swap |= SA_DISALLOWED; // if swap is allowed if (!(swap & SA_DISALLOWED) && swap != 0) { // change our state state |= SS_SWAPPING; // set the alarm swap_alarm = Game::time_step + GC_SWAP_DELAY; // start the swapping if (swap & SA_LEFT) left_block->startSwapping(SA_RIGHT); else Grid::changeState(x, y, null, GR_IMMUTABLE); if (swap & SA_RIGHT) right_block->startSwapping(SA_LEFT); else Grid::changeState(x + 1, y, null, GR_IMMUTABLE); // initialize the swap factor swap_factor = -1.0f; } } } crack-attack-1.1.14/src/obj_garbage_thin_middle.cxx0000644000175000001440000000547610231337750021774 0ustar webbsterusers/* * garbage_thin_middle.cxx * Daniel Nelson - 9/1/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates a display list for the middle of thin garbage. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::garbage_thin_middle_list; void Displayer::generateGarbageThinMiddleList ( ) { garbage_thin_middle_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glNewList(garbage_thin_middle_list, GL_COMPILE); GLfloat vertices_0[3 * 18] = { -1.0f, -0.8f, -1.0f, 1.0f, -0.8f, -1.0f, -1.0f, -1.0f, -0.8f, 1.0f, -1.0f, -0.8f, -1.0f, -1.0f, 0.8f, 1.0f, -1.0f, 0.8f, -1.0f, -0.8f, 1.0f, 1.0f, -0.8f, 1.0f, -1.0f, 0.8f, 1.0f, 1.0f, 0.8f, 1.0f, -1.0f, 1.0f, 0.8f, 1.0f, 1.0f, 0.8f, -1.0f, 1.0f, -0.8f, 1.0f, 1.0f, -0.8f, -1.0f, 0.8f, -1.0f, 1.0f, 0.8f, -1.0f, -1.0f, -0.8f, -1.0f, 1.0f, -0.8f, -1.0f }; GLfloat normals_0[3 * 18] = { 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f }; GLfloat tex_coords_0[3 * 18]; for (int n = 3 * 18; n--; ) tex_coords_0[n] = vertices_0[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 18); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/WinRecord.h0000644000175000001440000000445110132356545016526 0ustar webbsterusers/* * WinRecord.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef WINRECORD_H #define WINRECORD_H using namespace std; #include "Game.h" #include "MetaState.h" // game results #define GR_NOT_PLAYED (1 << 0) #define GR_BEING_PLAYED (1 << 1) #define GR_WON (1 << 2) #define GR_LOST (1 << 3) class Star { public: GLfloat a; GLfloat v_a; GLfloat size; GLfloat v_size; }; /* static */ class WinRecord { public: static void initialize ( ); static void timeStep ( ); static void gameStart ( ); static void gameWon ( ); static void gameLoss ( ); static inline bool isMatchFinished ( ) { if (concession) return true; if (MetaState::mode & CM_SOLO) return true; if (won) { if (games_won == 1 + GC_GAMES_PER_MATCH / 2) return true; } else if (games_lost == 1 + GC_GAMES_PER_MATCH / 2) return true; return false; } static inline void matchConceded ( ) { concession = true; } static int current_game; static bool won; static bool concession; static int games_won; static int games_lost; static int record[GC_GAMES_PER_MATCH]; static Star stars[GC_GAMES_PER_MATCH]; static int dynamic_star; static int displaced_star; static GLfloat win_star_x; static GLfloat win_star_y; static GLfloat win_star_v_x; static GLfloat win_star_v_y; static GLfloat old_star_a; static GLfloat old_star_size; static bool draw_old_star; }; #endif crack-attack-1.1.14/src/obj_garbage_thick_corner.cxx0000644000175000001440000001004310231337750022150 0ustar webbsterusers/* * garbage_thick_corner.cxx * Daniel Nelson - 9/1/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates a display list for the corner of thick garbage. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::garbage_thick_corner_list; void Displayer::generateGarbageThickCornerList ( ) { garbage_thick_corner_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glNewList(garbage_thick_corner_list, GL_COMPILE); GLfloat vertices_0[3 * 12] = { 1.0f, -1.0f, -1.0f, -0.8f, -1.0f, -1.0f, 1.0f, 0.8f, -1.0f, -0.8f, 0.8f, -1.0f, 1.0f, 1.0f, -0.8f, -0.8f, 1.0f, -0.8f, 1.0f, 1.0f, 0.8f, -0.8f, 1.0f, 0.8f, 1.0f, 0.8f, 1.0f, -0.8f, 0.8f, 1.0f, 1.0f, -1.0f, 1.0f, -0.8f, -1.0f, 1.0f }; GLfloat vertices_1[3 * 8] = { -0.8f, -1.0f, -1.0f, -1.0f, -1.0f, -0.8f, -0.8f, 0.8f, -1.0f, -1.0f, 0.8f, -0.8f, -0.8f, 1.0f, -0.8f, -1.0f, 0.8f, 0.8f, -0.8f, 1.0f, 0.8f, -0.8f, 0.8f, 1.0f }; GLfloat vertices_2[3 * 6] = { -1.0f, 0.8f, -0.8f, -1.0f, -1.0f, -0.8f, -1.0f, 0.8f, 0.8f, -1.0f, -1.0f, 0.8f, -0.8f, 0.8f, 1.0f, -0.8f, -1.0f, 1.0f }; GLfloat normals_0[3 * 12] = { 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; GLfloat normals_1[3 * 8] = { 0.0f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; GLfloat normals_2[3 * 6] = { -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; GLfloat tex_coords_0[3 * 12]; for (int n = 3 * 12; n--; ) tex_coords_0[n] = vertices_0[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_1[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_1[n] = vertices_1[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_2[3 * 6]; for (int n = 3 * 6; n--; ) tex_coords_2[n] = vertices_2[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 12); glVertexPointer(3, GL_FLOAT, 0, vertices_1); glNormalPointer(GL_FLOAT, 0, normals_1); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_1); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glVertexPointer(3, GL_FLOAT, 0, vertices_2); glNormalPointer(GL_FLOAT, 0, normals_2); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_2); glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/DrawGarbage.cxx0000644000175000001440000004651010230144462017345 0ustar webbsterusers/* * DrawGarbages.cxx * Daniel Nelson - 9/1/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handle's the displaying of the garbage. */ #define GL_GLEXT_LEGACY #define GL_GLEXT_PROTOTYPES #include #include #include "glext.h" using namespace std; #include "Game.h" #include "Block.h" #include "Creep.h" #include "Displayer.h" #include "Garbage.h" #include "GarbageManager.h" #include "LightManager.h" #include "GarbageFlavorImage.h" const GLfloat white[3] = { 1.0f, 1.0f, 1.0f }; const GLfloat Displayer::garbage_colors[GF_NUMBER][3] = { { 1.0f, 0.0f, 0.0f }, // normal { 0.4f, 0.4f, 0.4f }, // gray { 0.05f, 0.05f, 0.05f }, // black { 0.95f, 0.95f, 0.95f }, // white { 0.73f, 0.0f, 0.73f }, // purple { 0.2f, 0.2f, 0.8f }, // blue { 0.0f, 0.6f, 0.05f }, // green { 0.85f, 0.85f, 0.0f }, // yellow { 1.0f, 0.4f, 0.0f } }; // orange const GLfloat xy_swap_matrix[] = { 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; GLdouble shatter_clip_plane[4] = { 0.0, 1.0, 0.0, 0.0 }; void Displayer::drawGarbage ( ) { GLfloat x, y; glBindTexture(GL_TEXTURE_2D, garbage_lightmap); // blocks have already been drawn, so we use their material calls glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); #ifdef DC_CLIP_SHATTER bool clipping = false; #else bool fading = false; GLfloat alpha = 0.0f; #endif int c = GarbageManager::garbage_count; for (int n = 0; c; n++) if (GarbageManager::storeMap[n]) { Garbage &garbage = GarbageManager::garbageStore[n]; c--; if (garbage.y > GC_SAFE_HEIGHT) continue; glPushMatrix(); y = garbage.y * DC_GRID_ELEMENT_LENGTH + garbage.f_y * (DC_GRID_ELEMENT_LENGTH / (GLfloat) GC_STEPS_PER_GRID) + play_offset_y; x = garbage.x * DC_GRID_ELEMENT_LENGTH + DC_PLAY_OFFSET_X; // awaking; it is assumed that awaking garbage is always grid wide if (garbage.state & GS_AWAKING) { // if still popping our internal sections if (garbage.alarm - Game::time_step > DC_UNSHATTER_TIME) { // no garbage lightmap for blocks glDisable(GL_TEXTURE_2D); int popped = garbage.sections_popped; for (int h = 0; h < garbage.height; h++) for (int w = 0; w < GC_PLAY_WIDTH; w++) { glPushMatrix(); LightManager::setupBlockLights(x + w * DC_GRID_ELEMENT_LENGTH, y + h * DC_GRID_ELEMENT_LENGTH); glTranslatef(x + w * DC_GRID_ELEMENT_LENGTH, y + h * DC_GRID_ELEMENT_LENGTH, DC_PLAY_OFFSET_Z); // if this section is about to pop; this code here mimics code // found in DrawBlocks.cxx if (popped == 0 && garbage.pop_alarm - Game::time_step < DC_POP_ROTATE_TIME) { GLfloat p = (garbage.pop_alarm - Game::time_step) * (1.0f / (GLfloat) DC_POP_ROTATE_TIME); // each block rotates a different direction if (garbage.pop_direction & BR_DIRECTION_1) { glRotatef(45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(45.0f * p, 0.0f, 1.0f, 0.0f); } else if (garbage.pop_direction & BR_DIRECTION_2) { glRotatef(90.0f - 45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(45.0f * p, 0.0f, 1.0f, 0.0f); } else if (garbage.pop_direction & BR_DIRECTION_3) { glRotatef(90.0f - 45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(-45.0f * p, 0.0f, 1.0f, 0.0f); } else { glRotatef(45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(-45.0f * p, 0.0f, 1.0f, 0.0f); } GLfloat scale = 1.0f - 0.5f * p; glScalef(scale, scale, scale); if (garbage.pop_color == garbage.flavor) glColor3fv(garbage_colors[garbage.flavor]); else glColor3f( (1.0f - p) * garbage_colors[garbage.flavor][0] + p * garbage_colors[garbage.pop_color][0], (1.0f - p) * garbage_colors[garbage.flavor][1] + p * garbage_colors[garbage.pop_color][1], (1.0f - p) * garbage_colors[garbage.flavor][2] + p * garbage_colors[garbage.pop_color][2]); glEnable(rescale_method); glCallList(block_list); glDisable(rescale_method); // if this section has popped } else if (popped > 0) { glColor3fv(garbage_colors[garbage.flavor]); glCallList(block_list); // if this section has not popped } else { glColor3fv(garbage_colors[garbage.pop_color]); // the small block is pre-rotated glCallList(small_block_list); } popped--; glPopMatrix(); } // don't draw a shell glPopMatrix(); glEnable(GL_TEXTURE_2D); continue; // if we're about to awake; all sections have popped } else { // crunch our sections back up // no garbage lightmap for blocks glDisable(GL_TEXTURE_2D); GLfloat p = (DC_UNSHATTER_TIME - garbage.alarm + Game::time_step) * (1.0f / (GLfloat) DC_UNSHATTER_TIME); GLfloat scale = 1.0f - 0.5f * p; glColor3fv(garbage_colors[garbage.flavor]); glEnable(rescale_method); for (int h = 0; h < garbage.height; h++) for (int w = 0; w < GC_PLAY_WIDTH; w++) { glPushMatrix(); LightManager::setupBlockLights(x + w * DC_GRID_ELEMENT_LENGTH, y + h * DC_GRID_ELEMENT_LENGTH); glTranslatef(x + w * DC_GRID_ELEMENT_LENGTH, y + h * DC_GRID_ELEMENT_LENGTH, DC_PLAY_OFFSET_Z); glRotatef(45.0f * p, 1.0f, 0.0f, 0.0f); glRotatef(45.0f * p, 0.0f, 1.0f, 0.0f); glScalef(scale, scale, scale); glCallList(block_list); glPopMatrix(); } glDisable(rescale_method); glEnable(GL_TEXTURE_2D); // if we're in the first half of the unshatter if (garbage.alarm - Game::time_step > DC_UNSHATTER_TIME / 4) { // don't draw a shell glPopMatrix(); continue; } LightManager::setupGarbageLights(x, y, garbage.height, garbage.width); glTranslatef(x, y, DC_PLAY_OFFSET_Z); // only push texture matrix once we know we're using it glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(0.5f + x * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.5f + y * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f); glMatrixMode(GL_MODELVIEW); // clip pane into existance #ifdef DC_CLIP_SHATTER clipping = true; glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glDisable(GL_CULL_FACE); glEnable(GL_CLIP_PLANE_SHATTERING); shatter_clip_plane[3] = -(garbage.alarm - Game::time_step) * garbage.height * (DC_GRID_ELEMENT_LENGTH * 4.0f / (GLfloat) DC_UNSHATTER_TIME) + (DC_GRID_ELEMENT_LENGTH / 2.0f); glClipPlane(GL_CLIP_PLANE_SHATTERING, shatter_clip_plane); #else fading = true; alpha = (DC_UNSHATTER_TIME / 4 - garbage.alarm + Game::time_step) * (4.0f / (GLfloat) DC_UNSHATTER_TIME); glEnable(GL_BLEND); #endif } } else { LightManager::setupGarbageLights(x, y, garbage.height, garbage.width); glTranslatef(x, y, DC_PLAY_OFFSET_Z); // only push texture matrix once we know we're using it glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(0.5f + x * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.5f + y * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f); glMatrixMode(GL_MODELVIEW); } // normal and shattering // if we're shattering if (garbage.state & GS_SHATTERING) { // first we flash if (Game::time_step - garbage.alarm < (DC_SHATTER_FLASH_TIME - DC_SHATTER_TIME)) { GLfloat flash = ((GLfloat) DC_SHATTER_TIME - garbage.alarm + Game::time_step) * (4.0f / (GLfloat) DC_SHATTER_FLASH_TIME); if (flash > 2.0f) flash = 4.0f - flash; if (flash > 1.0f) flash = 2.0f - flash; glColor3f(garbage_colors[garbage.flavor][0] + flash * (DC_FLASH_COLOR_RED - garbage_colors[garbage.flavor][0]), garbage_colors[garbage.flavor][1] + flash * (DC_FLASH_COLOR_GREEN - garbage_colors[garbage.flavor][1]), garbage_colors[garbage.flavor][2] + flash * (DC_FLASH_COLOR_BLUE - garbage_colors[garbage.flavor][2])); } else { // then we clip plane away #ifdef DC_CLIP_SHATTER clipping = true; glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glDisable(GL_CULL_FACE); glEnable(GL_CLIP_PLANE_SHATTERING); shatter_clip_plane[3] = -((DC_SHATTER_TIME - DC_SHATTER_FLASH_TIME) - garbage.alarm + Game::time_step) * garbage.height * (DC_GRID_ELEMENT_LENGTH / (GLfloat) (DC_SHATTER_TIME - DC_SHATTER_FLASH_TIME)) + (DC_GRID_ELEMENT_LENGTH / 2.0f); glClipPlane(GL_CLIP_PLANE_SHATTERING, shatter_clip_plane); glColor3fv(garbage_colors[garbage.flavor]); } } else glColor3fv(garbage_colors[garbage.flavor]); #else fading = true; alpha = (garbage.alarm - Game::time_step) * (1.0f / (GLfloat) (DC_SHATTER_TIME - DC_SHATTER_FLASH_TIME)); glEnable(GL_BLEND); glColor4f(garbage_colors[garbage.flavor][0], garbage_colors[garbage.flavor][1], garbage_colors[garbage.flavor][2], alpha); } } else if (fading) glColor4f(garbage_colors[garbage.flavor][0], garbage_colors[garbage.flavor][1], garbage_colors[garbage.flavor][2], alpha); else glColor3fv(garbage_colors[garbage.flavor]); #endif // thin garbage if (garbage.height == 1) { if (garbage.width != 1) { glCallList(garbage_thin_cap_list); for (int w = garbage.width - 1; --w; ) { glTranslatef(DC_GRID_ELEMENT_LENGTH, 0.0f, 0.0f); glMatrixMode(GL_TEXTURE); glTranslatef(DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f, 0.0f); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thin_middle_list); } glTranslatef(DC_GRID_ELEMENT_LENGTH, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, -1.0f); glMatrixMode(GL_TEXTURE); glTranslatef(DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, -1.0f); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thin_cap_list); // tiny garbage } else glCallList(garbage_small_list); // thick garbage } else { // draw the bottom glPushMatrix(); glMatrixMode(GL_TEXTURE); glPushMatrix(); glScalef(1.0f, -1.0f, -1.0f); glMatrixMode(GL_MODELVIEW); glScalef(1.0f, -1.0f, -1.0f); glCallList(garbage_thick_corner_list); for (int w = garbage.width - 1; --w; ) { glTranslatef(DC_GRID_ELEMENT_LENGTH, 0.0f, 0.0f); glMatrixMode(GL_TEXTURE); glTranslatef(DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f, 0.0f); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thick_edge_list); } glTranslatef(DC_GRID_ELEMENT_LENGTH, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, -1.0f); glMatrixMode(GL_TEXTURE); glTranslatef(DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, -1.0f); glCallList(garbage_thick_corner_list); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); // draw the middle for (int h = garbage.height - 1; --h;) { glPushMatrix(); glMatrixMode(GL_TEXTURE); glPushMatrix(); glMatrixMode(GL_MODELVIEW); int w = garbage.width - 1; glTranslatef(w * DC_GRID_ELEMENT_LENGTH, h * DC_GRID_ELEMENT_LENGTH, 0.0f); glMultMatrixf(xy_swap_matrix); glMatrixMode(GL_TEXTURE); glTranslatef(w * (DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER), h * (DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER), 0.0f); glMultMatrixf(xy_swap_matrix); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thick_edge_list); while (--w) { glTranslatef(0.0f, -DC_GRID_ELEMENT_LENGTH, 0.0f); glMatrixMode(GL_TEXTURE); glTranslatef(0.0f, -DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thick_middle_list); } glTranslatef(0.0f, -DC_GRID_ELEMENT_LENGTH, 0.0f); glScalef(1.0f, -1.0f, -1.0f); glMatrixMode(GL_TEXTURE); glTranslatef(0.0f, -DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f); glScalef(1.0f, -1.0f, -1.0f); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thick_edge_list); glPopMatrix(); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } // draw the top glPushMatrix(); glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(0.0f, (garbage.height - 1) * (DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER), 0.0f); glMatrixMode(GL_MODELVIEW); glTranslatef(0.0f, (garbage.height - 1) * DC_GRID_ELEMENT_LENGTH, 0.0f); glCallList(garbage_thick_corner_list); for (int w = garbage.width - 1; --w; ) { glTranslatef(DC_GRID_ELEMENT_LENGTH, 0.0f, 0.0f); glMatrixMode(GL_TEXTURE); glTranslatef(DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f, 0.0f); glMatrixMode(GL_MODELVIEW); glCallList(garbage_thick_edge_list); } glTranslatef(DC_GRID_ELEMENT_LENGTH, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, -1.0f); glMatrixMode(GL_TEXTURE); glTranslatef(DC_GRID_ELEMENT_LENGTH * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, -1.0f); glCallList(garbage_thick_corner_list); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { // draw flavor image; if any if (GarbageFlavorImage::associated_garbage_id == garbage.id) { #ifndef NO_MULTITEXTURING if (state & DS_MULTITEXTURING) { glPushAttrib(GL_LIGHTING_BIT | GL_ENABLE_BIT); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glBindTexture(GL_TEXTURE_2D, garbage_texture); glActiveTextureARB(GL_TEXTURE1_ARB); glPushMatrix(); glTranslatef(0.5f + (x + 2.0f * GarbageFlavorImage::x) * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.5f + (y + 2.0f * GarbageFlavorImage::y) * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER, 0.0f); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glColor3fv(white); glMatrixMode(GL_MODELVIEW); glTranslatef(GarbageFlavorImage::x * DC_GRID_ELEMENT_LENGTH, GarbageFlavorImage::y * DC_GRID_ELEMENT_LENGTH, DC_GARBAGE_FLAVOR_TEX_OFFSET_Z); glCallList(garbage_flavor_list); glMatrixMode(GL_TEXTURE); glPopMatrix(); glActiveTextureARB(GL_TEXTURE0_ARB); glMatrixMode(GL_MODELVIEW); glPopAttrib(); glBindTexture(GL_TEXTURE_2D, garbage_lightmap); } else { #endif glPushAttrib(GL_LIGHTING_BIT | GL_ENABLE_BIT); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glBindTexture(GL_TEXTURE_2D, garbage_texture); glEnable(GL_BLEND); glColor3fv(white); glMatrixMode(GL_MODELVIEW); glTranslatef(GarbageFlavorImage::x * DC_GRID_ELEMENT_LENGTH, GarbageFlavorImage::y * DC_GRID_ELEMENT_LENGTH, DC_GARBAGE_FLAVOR_TEX_OFFSET_Z); glCallList(garbage_flavor_list); glBindTexture(GL_TEXTURE_2D, garbage_lightmap); glPopAttrib(); #ifndef NO_MULTITEXTURING } #endif } } } // turn off the clip plane #ifdef DC_CLIP_SHATTER if (clipping) { clipping = false; glDisable(GL_CLIP_PLANE_SHATTERING); glEnable(GL_CULL_FACE); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); #else if (fading) { fading = false; glDisable(GL_BLEND); #endif // delete fully shattered garbage; note that we can't assume // we'll display each time step if (garbage.alarm <= Game::time_step) GarbageManager::deleteGarbage(&garbage); } glPopMatrix(); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } } crack-attack-1.1.14/src/Attack.h0000644000175000001440000000245310230212472016026 0ustar webbsterusers/* * Attack.h * Daniel Nelson - 8/29/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef ATTACK_H #define ATTACK_H #include "Game.h" using namespace std; void run_crack_attack (int mode, int port, char *host_name, char *player_name, int width, int height); void usage ( ); void parseCommandLine ( int argc, char **argv, int &mode, int &port, char *host_name, char player_name[GC_PLAYER_NAME_LENGTH], int &height, int &width); void setupLocalDataDirectory ( ); #endif crack-attack-1.1.14/src/SignManager.h0000644000175000001440000000441510132356545017025 0ustar webbsterusers/* * SignManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef SIGNMANAGER_H #define SIGNMANAGER_H using namespace std; #include "Displayer.h" // sign types #define ST_MAGNITUDE (0) #define ST_MULTIPLIER (1) #define ST_SPECIAL (2) // sign textures #define ST_SMALL_TEXTURE (0) #define ST_LARGE_TEXTURE (1) // content bases #define SC_BASE_MAGNITUDE_CONTENT (0) #define SC_BASE_MULTIPLIER_CONTENT (13) class Sign { public: bool active; float x, y; int texture; GLfloat subtexture_s; GLfloat subtexture_t; GLfloat size; int life_time; int g_x, g_y; int color; }; /* static */ class SignManager { public: static void initialize ( ); static inline void timeStep ( ) { if (sign_count > 0) timeStep_inline_split_(); } static void createSign ( int x, int y, int type, int level ); static int sign_count; static Sign signs[DC_MAX_SIGN_NUMBER]; private: static void timeStep_inline_split_ ( ); static inline bool confirmSignLocation ( Sign &sign ) { if (sign.g_y <= 0) return false; if (sign.g_x <= 0 || sign.g_x >= GC_PLAY_WIDTH) return false; // sign being created is still inactive int c = sign_count; for (int n = 0; c; n++) if (signs[n].active) { c--; if (sign.g_x == signs[n].g_x && sign.g_y == signs[n].g_y) return false; } return true; } }; #endif crack-attack-1.1.14/src/GarbageGenerator.cxx0000644000175000001440000001716110221263674020405 0ustar webbsterusers/* * GarbageGenerator.cxx * Daniel Nelson - 8/25/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Displays and sends garbage to the opponent. */ #include using namespace std; #include "Game.h" #include "GarbageGenerator.h" #include "Block.h" #include "BlockManager.h" #include "Garbage.h" #include "GarbageManager.h" #include "ComboTabulator.h" #include "Communicator.h" #include "SparkleManager.h" #include "SignManager.h" #include "ComputerPlayer.h" GarbageQueueElement GarbageGenerator::garbage_queue[GC_GARBAGE_QUEUE_SIZE]; int GarbageGenerator::waiting_count; void GarbageGenerator::gameStart ( ) { waiting_count = 0; for (int n = GC_GARBAGE_QUEUE_SIZE; n--; ) garbage_queue[n].active = false; } void GarbageGenerator::comboElimination ( ComboTabulator &combo ) { int sibling = (combo.multiplier > 1 ? 1 : 0); // used by blocks to determine death spark number combo.latest_magnitude = combo.special_magnitude + combo.magnitude + combo.multiplier - 1; // send the special garbage bool special_sign = true; for (int n = BF_NUMBER_SPECIAL; n--; ) { if (combo.special[n]) { special_sign = false; SignManager::createSign(combo.x, combo.y, ST_SPECIAL, n + 1); if (BlockManager::isColorlessCode(n)) combo.special_magnitude -= combo.special[n]; while (combo.special[n]--) { sendSpecialGarbage(GarbageManager::mapBlockCodeToGarbageFlavor(n)); SparkleManager::createRewardMote(combo.x, combo.y, n + 4, sibling++); } combo.special[n] = 0; } } // send the gray garbage if (combo.special_magnitude >= GC_MIN_PATTERN_LENGTH) { if (special_sign) SignManager::createSign(combo.x, combo.y, ST_SPECIAL, 0); combo.special_magnitude -= GC_MIN_PATTERN_LENGTH - 2; while (--combo.special_magnitude) { sendSpecialGarbage(GF_GRAY); SparkleManager::createRewardMote(combo.x, combo.y, 3, sibling++); } } else combo.special_magnitude = 0; // send the normal garbage if (combo.magnitude > GC_MIN_PATTERN_LENGTH) { SignManager::createSign(combo.x, combo.y, ST_MAGNITUDE, combo.magnitude - 4); if (combo.magnitude <= GC_PLAY_WIDTH) { sendGarbage(1, combo.magnitude - 1, GF_NORMAL); SparkleManager::createRewardMote(combo.x, combo.y, combo.magnitude - 4, sibling++); } else if (combo.magnitude < 2 * GC_PLAY_WIDTH - 1) { sendGarbage(1, combo.magnitude - (combo.magnitude >> 1), GF_NORMAL); SparkleManager::createRewardMote(combo.x, combo.y, combo.magnitude - (combo.magnitude >> 1) - 3, sibling++); sendGarbage(1, combo.magnitude >> 1, GF_NORMAL); SparkleManager::createRewardMote(combo.x, combo.y, (combo.magnitude >> 1) - 3, sibling++); } else { combo.magnitude += GC_MIN_PATTERN_LENGTH; while (combo.magnitude > GC_PLAY_WIDTH - 1) { sendGarbage(1, GC_PLAY_WIDTH - 1, GF_NORMAL); SparkleManager::createRewardMote(combo.x, combo.y, GC_PLAY_WIDTH - 4, sibling++); combo.magnitude -= GC_PLAY_WIDTH - 1; } if (combo.magnitude >= GC_MIN_PATTERN_LENGTH) { sendGarbage(1, combo.magnitude, GF_NORMAL); SparkleManager::createRewardMote(combo.x, combo.y, combo.magnitude - 3, sibling); } } } combo.magnitude = 0; } void GarbageGenerator::comboComplete ( ComboTabulator &combo ) { // send the multiplier garbage if (combo.multiplier > 1) sendGarbage(combo.multiplier - 1, GC_PLAY_WIDTH, GF_NORMAL); } void GarbageGenerator::addToQueue ( CommunicationBuffer &buffer ) { addToQueue(buffer.garbage, buffer.count); } void GarbageGenerator::addToQueue (uint32 height, uint32 width, uint32 flavor, uint32 stamp) { assert(height <= GC_PLAY_HEIGHT); assert(width <= GC_PLAY_WIDTH); if (!GarbageManager::isSpecialFlavor(flavor)) dealLocalGarbage(height, width, flavor, stamp); else dealSpecialLocalGarbage(flavor, stamp); } void GarbageGenerator::addToQueue ( GarbageQueueElement &element ) { int stamp = Game::time_step; GarbageQueueElement e = element; addToQueue(e.height, e.width, e.flavor, stamp); } void GarbageGenerator::addToQueue ( BufferElement *garbage, size_t size ) { for (size_t n = 0; n < size; n++) { BufferElement e = garbage[n]; addToQueue(e.height, e.width, e.flavor, e.time_stamp); } } void GarbageGenerator::dealLocalGarbage ( int height, int width, int flavor, int time_stamp ) /* * Used for solo games. */ { if (waiting_count == GC_GARBAGE_QUEUE_SIZE) return; int i = 0; while (garbage_queue[i].active) i++; garbage_queue[i].active = true; garbage_queue[i].height = height; garbage_queue[i].width = width; garbage_queue[i].flavor = flavor; garbage_queue[i].alarm = determineDropTime(time_stamp); waiting_count++; } void GarbageGenerator::dealSpecialLocalGarbage ( int flavor, int time_stamp ) { switch (flavor) { case GF_GRAY: case GF_WHITE: case GF_COLOR_2: dealLocalGarbage(1, GC_PLAY_WIDTH, flavor, time_stamp); break; case GF_BLACK: dealLocalGarbage(1, 2, GF_BLACK, time_stamp); break; case GF_COLOR_1: if (Random::chanceIn2(4)) { dealLocalGarbage(2, 2, GF_COLOR_1, time_stamp); for (int n = 1 + Random::number(3); n--; ) dealLocalGarbage(1, 1, GF_COLOR_1, time_stamp); } else for (int n = 5 + Random::number(3); n--; ) dealLocalGarbage(1, 1, GF_COLOR_1, time_stamp); break; case GF_COLOR_3: dealLocalGarbage(1, 4, GF_COLOR_3, time_stamp); break; case GF_COLOR_4: dealLocalGarbage(1, 3, GF_COLOR_4, time_stamp); break; case GF_COLOR_5: dealLocalGarbage(3, 2, GF_COLOR_5, time_stamp); break; } } void GarbageGenerator::timeStep ( ) { int c = waiting_count; for (int n = 0; c; n++) if (garbage_queue[n].active) { GarbageQueueElement &e = garbage_queue[n]; c--; // if this garbage's ready, let's try to drop it if (e.alarm < Game::time_step) { // if we successfully drop it, take it away if (GarbageManager::newFallingGarbage(e.height, e.width, e.flavor)) { waiting_count--; e.active = false; // otherwise, reset the alarm } else e.alarm = Game::time_step + GC_AVERAGE_GARBAGE_DROP_DELAY; } } } void GarbageGenerator::sendGarbage ( int height, int width, int flavor ) { if (!(MetaState::mode & CM_SOLO)) Communicator::sendGarbage(height, width, flavor); else if (MetaState::mode & CM_AI) ComputerPlayer::addGarbage(height, width, flavor); else dealLocalGarbage(height, width, flavor, Game::time_step); } void GarbageGenerator::sendSpecialGarbage ( int flavor ) { if (!(MetaState::mode & CM_SOLO)) Communicator::sendGarbage(0, 0, flavor); else if (MetaState::mode & CM_AI) ComputerPlayer::addGarbage(1, GC_PLAY_WIDTH, flavor); else dealSpecialLocalGarbage(flavor, Game::time_step); } crack-attack-1.1.14/src/SignManager.cxx0000644000175000001440000001225110132356545017375 0ustar webbsterusers/* * SignManager.cxx * Daniel Nelson - 9/14/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles all the little reward signs. */ using namespace std; #include "Game.h" #include "SignManager.h" #include "Random.h" int SignManager::sign_count; Sign SignManager::signs[DC_MAX_SIGN_NUMBER]; // maximum levels for each sign type const int maximum_levels[3] = { 8, 10, 8 }; // which sign texture contains which signs const int texture_mapping[3][11] = { { 0, 0, 0, 0, 0, 0, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1 } }; // where a sign's subtexture is located const GLfloat subtexture_s_mapping[3][11] = { { 0.0f, 0.0f, DC_SIGN_SMALL_SUBTEX_COORD_S, DC_SIGN_SMALL_SUBTEX_COORD_S, 2.0f * DC_SIGN_SMALL_SUBTEX_COORD_S, 2.0f * DC_SIGN_SMALL_SUBTEX_COORD_S, 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, DC_SIGN_LARGE_SUBTEX_COORD_S, DC_SIGN_LARGE_SUBTEX_COORD_S, DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S }, { 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_S } }; const GLfloat subtexture_t_mapping[3][11] = { { 0.0f, DC_SIGN_SMALL_SUBTEX_COORD_T, 0.0f, DC_SIGN_SMALL_SUBTEX_COORD_T, 0.0f, DC_SIGN_SMALL_SUBTEX_COORD_T, 0.0f, DC_SIGN_LARGE_SUBTEX_COORD_T, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_T }, { 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_T, 0.0f, DC_SIGN_LARGE_SUBTEX_COORD_T, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_T, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_T, 0.0f, DC_SIGN_LARGE_SUBTEX_COORD_T, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_T, 3.0f * DC_SIGN_LARGE_SUBTEX_COORD_T, 0.0f, DC_SIGN_LARGE_SUBTEX_COORD_T }, { 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S, 2.0f * DC_SIGN_LARGE_SUBTEX_COORD_S } }; void SignManager::initialize ( ) { sign_count = 0; for (int n = DC_MAX_SIGN_NUMBER; n--; ) signs[n].active = false; } void SignManager::createSign ( int x, int y, int type, int level ) { if (sign_count == DC_MAX_SIGN_NUMBER) return; int n; for (n = 0; signs[n].active; n++); Sign &sign = signs[n]; if (type == ST_MULTIPLIER) { sign.g_x = x + 1; sign.g_y = y - 1; if (!confirmSignLocation(signs[n])) if (sign.g_x > 1) sign.g_x--; else sign.g_y++; } else { sign.g_x = x; sign.g_y = y; if (!confirmSignLocation(sign)) if (sign.g_x < GC_PLAY_WIDTH - 1) sign.g_x++; else sign.g_y++; } while (!confirmSignLocation(sign)) sign.g_y++; sign.x = sign.g_x * DC_GRID_ELEMENT_LENGTH + (DC_PLAY_OFFSET_X + DC_SIGN_OFFSET_X - DC_SIGN_OFFSET_SPREAD) + (2 * DC_SIGN_OFFSET_SPREAD) * Random::number(); sign.y = sign.g_y * DC_GRID_ELEMENT_LENGTH + Displayer::play_offset_y + (DC_SIGN_OFFSET_Y - DC_SIGN_OFFSET_SPREAD) + (2 * DC_SIGN_OFFSET_SPREAD) * Random::number(); if (level > maximum_levels[type]) level = maximum_levels[type]; sign.texture = texture_mapping[type][level]; sign.subtexture_s = subtexture_s_mapping[type][level]; sign.subtexture_t = subtexture_t_mapping[type][level]; if (type != ST_SPECIAL) sign.color = 0; else sign.color = level; sign.life_time = 0; sign_count++; sign.active = true; } void SignManager::timeStep_inline_split_ ( ) { int c = sign_count; for (int n = 0; c; n++) if (signs[n].active) { Sign &sign = signs[n]; c--; if (++sign.life_time == DC_SIGN_LIFE_TIME) { sign_count--; sign.active = false; } if (sign.life_time < DC_SIGN_ACCELERATION_TIME) sign.y += DC_SIGN_ACCELERATION * sign.life_time; else sign.y += DC_SIGN_TERMINAL_VELOCITY; } } crack-attack-1.1.14/src/LightManager.h0000644000175000001440000001350310230144462017162 0ustar webbsterusers/* * LightManager.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef LIGHTMANAGER_H #define LIGHTMANAGER_H #include #include #include "glext.h" using namespace std; #include "Displayer.h" #include "SparkleManager.h" #include "CountDownManager.h" #include "X.h" #define LL_BELOW (1 << 0) #define LL_ABOVE (1 << 1) #define LL_LEFT (1 << 2) #define LL_RIGHT (1 << 3) class Light { public: int association; GLfloat location[4]; GLfloat brightness[4]; bool enabled; bool to_be_enabled; bool attenuated; }; /* static */ class LightManager { public: static void initialize ( ); static void setupBlockLights ( float x, float y ); static void setupGarbageLights ( float x, float y, int h, int w ); static inline void setupHeadLightPlay ( ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { if (!(Game::state & GS_SYNC_WAIT) && CountDownManager::state == -1 && !X::crazyLights()) return; setupHeadLightPlay_inline_split_(); } } static void setupHeadLightMeta ( ); static inline void resetHeadLight ( ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { if (headlight_normal) return; resetHeadLight_inline_split_(); } } static inline void timeStepInitialize ( ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { for (int n = DC_NUMBER_EXTRA_LIGHTS; n--; ) { if (lights[n].enabled) { glDisable((GLenum) (DC_EXTRA_LIGHT_BASE + n)); lights[n].enabled = false; } lights[n].association = -1; if (lights[n].attenuated) unattenuateLight(lights[n], n); } last_associated = 0; } } private: static void setupHeadLightPlay_inline_split_ ( ); static void resetHeadLight_inline_split_ ( ); static inline void associateLight ( Light &light, int a, Mote &mote, int m ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { light.association = m; mote.associated_light = a; light.location[0] = mote.x; light.location[1] = mote.y; glLightfv((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_POSITION, light.location); } } static inline void configureBlockBrightness ( Light &light, int a, Mote &mote, float r ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { assert(a >= 0); assert(a < DC_NUMBER_EXTRA_LIGHTS); float brightness = (DC_MOTE_LIGHT_RANGE * DC_MOTE_LIGHT_RANGE - r) * (1.0f / (DC_MOTE_LIGHT_RANGE * DC_MOTE_LIGHT_RANGE)) * mote.brightness; if (mote.light_color == 0) { light.brightness[0] = brightness; light.brightness[1] = brightness; light.brightness[2] = brightness; } else { light.brightness[0] = brightness * Displayer::mote_light_colors[mote.light_color][0]; light.brightness[1] = brightness * Displayer::mote_light_colors[mote.light_color][1]; light.brightness[2] = brightness * Displayer::mote_light_colors[mote.light_color][2]; } glLightfv((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_DIFFUSE, light.brightness); glLightfv((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_SPECULAR, light.brightness); } } static inline void configureGarbageBrightness ( Light &light, int a, Mote &mote, float r) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { assert(a >= 0); assert(a < DC_NUMBER_EXTRA_LIGHTS); float brightness; if (r > 0.0f) brightness = (DC_MOTE_LIGHT_RANGE * DC_MOTE_LIGHT_RANGE - r) * (1.0f / (DC_MOTE_LIGHT_RANGE * DC_MOTE_LIGHT_RANGE)) * mote.brightness; else brightness = mote.brightness; if (mote.light_color == 0) { light.brightness[0] = brightness; light.brightness[1] = brightness; light.brightness[2] = brightness; } else { light.brightness[0] = brightness * Displayer::mote_light_colors[mote.light_color][0]; light.brightness[1] = brightness * Displayer::mote_light_colors[mote.light_color][1]; light.brightness[2] = brightness * Displayer::mote_light_colors[mote.light_color][2]; } glLightfv((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_DIFFUSE, light.brightness); glLightfv((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_SPECULAR, light.brightness); } } static inline void attenuateLight ( Light &light, int a ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { glLightf((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_QUADRATIC_ATTENUATION, DC_MOTE_LIGHT_ATTENUATION); light.attenuated = true; } } static inline void unattenuateLight ( Light &light, int a ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { glLightf((GLenum) (DC_EXTRA_LIGHT_BASE + a), GL_QUADRATIC_ATTENUATION, 0.0f); light.attenuated = false; } } static Light lights[DC_NUMBER_EXTRA_LIGHTS]; static int last_associated; static bool headlight_normal; }; #endif crack-attack-1.1.14/src/LevelLights.h0000644000175000001440000001333210221263674017051 0ustar webbsterusers/* * LevelLights.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef LEVELLIGHTS_H #define LEVELLIGHTS_H using namespace std; #include "Game.h" #include "Displayer.h" #include "Communicator.h" #define LL_NUMBER_LEVEL_LIGHTS (GC_SAFE_HEIGHT - 1) // two light sets #define LL_LOCAL_LIGHTS (0) #define LL_OPPONENT_LIGHTS (1) // light states #define LS_RED (1 << 0) #define LS_BLUE (1 << 1) #define LS_FADE_TO_RED (1 << 2) #define LS_FADE_TO_BLUE (1 << 3) #define LS_IMPACT_FLASH (1 << 4) // communication buffer states #define LC_BLUE (1 << 0) #define LC_IMPACT (1 << 1) #define LC_DEATH_FLASH_MASK (1 << (2 * LL_NUMBER_LEVEL_LIGHTS)) class LevelLight { public: int state; int fade_alarm; int flash_alarm; }; /* static */ class LevelLights { public: static void initialize ( ); static void gameStart ( ); static void timeStep ( ); static inline void levelRaise ( int top_effective_row ) { top_effective_row--; if (top_effective_row >= LL_NUMBER_LEVEL_LIGHTS) top_effective_row = LL_NUMBER_LEVEL_LIGHTS - 1; while (top_effective_row >= 0) { LevelLight &light = lights[LL_LOCAL_LIGHTS][top_effective_row]; if (light.state & (LS_RED | LS_FADE_TO_RED)) break; setRed(light); top_effective_row--; } } static inline void levelLower ( int top_effective_row ) { while (top_effective_row < LL_NUMBER_LEVEL_LIGHTS) { LevelLight &light = lights[LL_LOCAL_LIGHTS][top_effective_row]; if (light.state & (LS_BLUE | LS_FADE_TO_BLUE)) break; setBlue(light); top_effective_row++; } } static inline void notifyImpact ( int y, int height ) { if (y - 1 + height > LL_NUMBER_LEVEL_LIGHTS) { height = LL_NUMBER_LEVEL_LIGHTS - y + 1; if (height < 1) return; } while (height--) { LevelLight &light = lights[LL_LOCAL_LIGHTS][y - 1 + height]; Communicator::setLevelLightSendBit(LC_IMPACT << (2 * (y - 1 + height))); setFlashing(light); } } static inline void notifySafeHeightViolation ( ) { if (death_flash_alarm[LL_LOCAL_LIGHTS] == -1) death_flash_alarm[LL_LOCAL_LIGHTS] = DC_LEVEL_LIGHT_DEATH_FLASH_TIME; } static inline void readySendBuffer ( ) { for (int n = LL_NUMBER_LEVEL_LIGHTS; n--; ) if (lights[LL_LOCAL_LIGHTS][n].state & (LS_BLUE | LS_FADE_TO_BLUE)) Communicator::setLevelLightSendBit(LC_BLUE << (2 * n)); if (death_flash_alarm[LL_LOCAL_LIGHTS] != -1) Communicator::setLevelLightSendBit(LC_DEATH_FLASH_MASK); } static inline void handleRecvBuffer ( ) { if (Communicator::checkLevelLightRecvBit(LC_DEATH_FLASH_MASK) && death_flash_alarm[LL_OPPONENT_LIGHTS] == -1) death_flash_alarm[LL_OPPONENT_LIGHTS] = DC_LEVEL_LIGHT_DEATH_FLASH_TIME; for (int n = LL_NUMBER_LEVEL_LIGHTS; n--; ) { if (lights[LL_OPPONENT_LIGHTS][n].state & (LS_RED | LS_FADE_TO_RED)) { if (Communicator::checkLevelLightRecvBit(LC_BLUE << (2 * n))) setBlue(lights[LL_OPPONENT_LIGHTS][n]); } else { if (!Communicator::checkLevelLightRecvBit(LC_BLUE << (2 * n))) setRed(lights[LL_OPPONENT_LIGHTS][n]); } if (Communicator::checkLevelLightRecvBit(LC_IMPACT << (2 * n))) setFlashing(lights[LL_OPPONENT_LIGHTS][n]); } } static void handleAI (); // level light n corresponds to row n + 1 in the grid static LevelLight lights[2][LL_NUMBER_LEVEL_LIGHTS]; static int death_flash_alarm[2]; private: static inline void setBlue ( LevelLight &light ) { if (light.state & LS_FADE_TO_RED) light.fade_alarm = DC_LEVEL_LIGHT_FADE_TIME - light.fade_alarm; else light.fade_alarm = DC_LEVEL_LIGHT_FADE_TIME; light.state &= ~(LS_RED | LS_FADE_TO_RED); light.state |= LS_FADE_TO_BLUE; } static inline void setRed ( LevelLight &light ) { if (light.state & LS_FADE_TO_BLUE) light.fade_alarm = DC_LEVEL_LIGHT_FADE_TIME - light.fade_alarm; else light.fade_alarm = DC_LEVEL_LIGHT_FADE_TIME; light.state &= ~(LS_BLUE | LS_FADE_TO_BLUE); light.state |= LS_FADE_TO_RED; } static inline void setFlashing ( LevelLight &light ) { if (light.state & LS_IMPACT_FLASH) { // if past flash inflection point, sync flash start if (light.flash_alarm < (int) (DC_LEVEL_LIGHT_FLASH_INFLECTION * DC_LEVEL_LIGHT_IMPACT_FLASH_TIME)) light.flash_alarm = (int) (DC_LEVEL_LIGHT_FLASH_INFLECTION * DC_LEVEL_LIGHT_IMPACT_FLASH_TIME) + (int) (((1.0f - DC_LEVEL_LIGHT_FLASH_INFLECTION) * DC_LEVEL_LIGHT_IMPACT_FLASH_TIME) * (1.0f - light.flash_alarm * (1.0f / (DC_LEVEL_LIGHT_FLASH_INFLECTION * DC_LEVEL_LIGHT_IMPACT_FLASH_TIME)))); } else { light.state |= LS_IMPACT_FLASH; light.flash_alarm = DC_LEVEL_LIGHT_IMPACT_FLASH_TIME; } } }; #endif crack-attack-1.1.14/src/LightManager.cxx0000644000175000001440000002572110230144462017542 0ustar webbsterusers/* * LightManager.cxx * Daniel Nelson - 9/13/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles turning on and off the required lights during drawing. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "LightManager.h" #include "SparkleManager.h" #include "CountDownManager.h" #include "CelebrationManager.h" // assumed to all be 1.0f in setupHeadLight() const GLfloat headlight_normal_color[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat headlight_color[] = { 0.0f, 0.0f, 0.0f, 1.0f }; Light LightManager::lights[DC_NUMBER_EXTRA_LIGHTS]; int LightManager::last_associated; bool LightManager::headlight_normal; void LightManager::initialize ( ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { for (int n = DC_NUMBER_EXTRA_LIGHTS; n--; ) { lights[n].location[2] = DC_PLAY_OFFSET_Z + DC_MOTE_LIGHT_OFFSET_Z; lights[n].location[3] = 1.0f; lights[n].enabled = false; } headlight_normal = false; } } void LightManager::setupHeadLightPlay_inline_split_ ( ) { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { GLfloat headlight_level; headlight_normal = false; if (!(Game::state & GS_SYNC_WAIT)) headlight_level = 1.0f; else headlight_level = DC_SYNC_WAIT_LIGHT_LEVEL; if (CountDownManager::state != -1) { float fade = (GC_START_PAUSE_DELAY - CountDownManager::start_pause_alarm) * (1.0f / (float) GC_START_PAUSE_DELAY); headlight_level *= Game::sqrt(fade); } headlight_color[0] = headlight_color[1] = headlight_color[2] = headlight_level; if (X::crazyLights()) X::modifyHeadlightColor(headlight_color); glLightfv(GL_LIGHT0, GL_DIFFUSE, headlight_color); glLightfv(GL_LIGHT0, GL_SPECULAR, headlight_color); } } void LightManager::setupHeadLightMeta ( ) /* * Setup the headlight for the game end celebration fade out. */ { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { headlight_color[0] = headlight_color[1] = headlight_color[2] = CelebrationManager::light_level; glLightfv(GL_LIGHT0, GL_DIFFUSE, headlight_color); glLightfv(GL_LIGHT0, GL_SPECULAR, headlight_color); headlight_normal = false; } } void LightManager::resetHeadLight_inline_split_ ( ) /* * If the headlight is not normal, reset it to standard values. */ { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { glLightfv(GL_LIGHT0, GL_DIFFUSE, headlight_normal_color); glLightfv(GL_LIGHT0, GL_SPECULAR, headlight_normal_color); headlight_normal = true; } } void LightManager::setupBlockLights ( float x, float y ) /* * Here's an out line of the algorithm. We loop through the motes. If a * mote is in range, we check to see if it has an associated light. If so, * we make sure the light is enabled. If not, we find a light to associate * with the mote. If the mote is out of range, we disable the light but we * don't disassociate. This way, if we have space, we can use a minimum of * light color and position reasignments. * * To find a light to associate with a mote, first we look for an unassociated * light. If there are none, we look for a disabled light. If there are none, * we disable a currently enabled light and use it. */ { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { for (int n = DC_NUMBER_EXTRA_LIGHTS; n--; ) lights[n].to_be_enabled = false; int c = SparkleManager::mote_count; for (int m = 0; c; m++) if (SparkleManager::motes[m].active) { Mote &mote = SparkleManager::motes[m]; c--; float r = (x - mote.x) * (x - mote.x) + (y - mote.y) * (y - mote.y); // if the mote's light needs to be on for this draw; note that range is // not the light range but the range to the center of block any block // effected if (r < DC_MOTE_LIGHT_RANGE * DC_MOTE_LIGHT_RANGE) { // if this mote has been previously associated with a light and that // light's association still matches if (mote.associated_light != -1 && lights[mote.associated_light].association == m) { // make sure the light is enabled lights[mote.associated_light].to_be_enabled = true; configureBlockBrightness(lights[mote.associated_light], mote.associated_light, mote, r); // if this mote has no active association; we must try to find an // unassociated light } else { // find an unassociated light int a = -1; int l = last_associated; do { if (++last_associated == DC_NUMBER_EXTRA_LIGHTS) last_associated = 0; if (lights[last_associated].association == -1) { a = last_associated; break; } } while (last_associated != l); // if we found one if (a != -1) { // associate associateLight(lights[a], a, mote, m); // enable lights[a].to_be_enabled = true; configureBlockBrightness(lights[a], a, mote, r); // if we couldn't find an unassociated light } else { // find an associated but disabled light l = last_associated; do { if (++last_associated == DC_NUMBER_EXTRA_LIGHTS) last_associated = 0; if (!lights[last_associated].to_be_enabled) { a = last_associated; break; } } while (last_associated != l); // if we found none if (a != -1) { // associate associateLight(lights[a], a, mote, m); // enable lights[a].to_be_enabled = true; configureBlockBrightness(lights[a], a, mote, r); // if we couldn't find a disabled light } else // we have no choice but to steal an enabled one or give up break; } } } } for (int n = DC_NUMBER_EXTRA_LIGHTS; n--; ) if (lights[n].to_be_enabled) { if (!lights[n].enabled) { glEnable((GLenum) (DC_EXTRA_LIGHT_BASE + n)); lights[n].enabled = true; } } else { if (lights[n].enabled) { glDisable((GLenum) (DC_EXTRA_LIGHT_BASE + n)); lights[n].enabled = false; } } } } void LightManager::setupGarbageLights ( float x, float y, int h, int w ) /* * We only hand dim the light for motes not in the garbage. Plus, we have to * use an attenuated light source. */ { if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { for (int n = DC_NUMBER_EXTRA_LIGHTS; n--; ) lights[n].to_be_enabled = false; int c = SparkleManager::mote_count; for (int m = 0; c; m++) if (SparkleManager::motes[m].active) { Mote &mote = SparkleManager::motes[m]; c--; float x_high = x + (w - 1) * DC_GRID_ELEMENT_LENGTH; float y_high = y + (h - 1) * DC_GRID_ELEMENT_LENGTH; float r = 0.0f; if (mote.x < x) r += (x - mote.x) * (x - mote.x); else if (mote.x > x_high) r += (x_high - mote.x) * (x_high - mote.x); if (mote.y < y) r += (y - mote.y) * (y - mote.y); else if (mote.y > y_high) r += (y_high - mote.y) * (y_high - mote.y); // if the mote's light needs to be on for this draw if (r < DC_MOTE_LIGHT_RANGE * DC_MOTE_LIGHT_RANGE) { // if this mote has been previously associated with a light and that // light's association still matches if (mote.associated_light != -1 && lights[mote.associated_light].association == m) { // make sure the light is enabled lights[mote.associated_light].to_be_enabled = true; configureGarbageBrightness(lights[mote.associated_light], mote.associated_light, mote, r); // if this mote has no active association; we must try to find an // unassociated light } else { // find an unassociated light int a = -1; int l = last_associated; do { if (++last_associated == DC_NUMBER_EXTRA_LIGHTS) last_associated = 0; if (lights[last_associated].association == -1) { a = last_associated; break; } } while (last_associated != l); // if we found one if (a != -1) { // associate associateLight(lights[a], a, mote, m); // enable lights[a].to_be_enabled = true; configureGarbageBrightness(lights[a], a, mote, r); // if we couldn't find an unassociated light } else { // find an associated but disabled light l = last_associated; do { if (++last_associated == DC_NUMBER_EXTRA_LIGHTS) last_associated = 0; if (!lights[last_associated].to_be_enabled) { a = last_associated; break; } } while (last_associated != l); // if we found none if (a != -1) { // associate associateLight(lights[a], a, mote, m); // enable lights[a].to_be_enabled = true; configureGarbageBrightness(lights[a], a, mote, r); // if we couldn't find a disabled light } else // we have no choice but to steal an enabled one or give up break; } } } } for (int n = DC_NUMBER_EXTRA_LIGHTS; n--; ) if (lights[n].to_be_enabled) { if (!lights[n].enabled) { glEnable((GLenum) (DC_EXTRA_LIGHT_BASE + n)); if (!lights[n].attenuated) attenuateLight(lights[n], n); lights[n].enabled = true; } } else { if (lights[n].enabled) { glDisable((GLenum) (DC_EXTRA_LIGHT_BASE + n)); lights[n].enabled = false; } } } } crack-attack-1.1.14/src/ComboTabulator.h0000644000175000001440000000412010132356545017540 0ustar webbsterusers/* * ComboTabulator.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef COMBOTABULATOR_H #define COMBOTABULATOR_H using namespace std; #include "Game.h" class Block; class ComboTabulator { public: void initialize ( ); void reportElimination ( int _magnitude, Block &kernel ); inline void incrementInvolvement ( ) { ++involvement_count; } inline void decrementInvolvement ( ) { --involvement_count; } // free store id int id; // latest elimination time stamp int time_stamp; // creation time stamp int creation_time_stamp; // number of blocks involved in combo int involvement_count; // normal elimination magnitude int magnitude; // special elimination magnitude int special_magnitude; // combo multiplier int multiplier; // number of multipliers this time step int n_multipliers_this_step; // base score earned so far on this multiplier int base_accumulated_score; // base score earned so far on this turn int base_score_this_step; // used by blocks the step after elimination to determine spark number int latest_magnitude; // keep track of the location of the eliminations int x, y; // keeps track of the various special blocks which have been eliminated int special[BF_NUMBER_SPECIAL]; }; #endif crack-attack-1.1.14/src/LevelLights.cxx0000644000175000001440000000740610235041325017421 0ustar webbsterusers/* * LevelLights.cxx * Daniel Nelson - 10/13/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles the level lights' states. */ using namespace std; #include "Game.h" #include "LevelLights.h" #include "Grid.h" #include "Communicator.h" #include "MetaState.h" #include "ComputerPlayer.h" int LevelLights::death_flash_alarm[2]; LevelLight LevelLights::lights[2][LL_NUMBER_LEVEL_LIGHTS]; void LevelLights::initialize ( ) { for (int n = 0; n < LL_NUMBER_LEVEL_LIGHTS; n++) { lights[LL_LOCAL_LIGHTS][n].state = LS_BLUE; lights[LL_OPPONENT_LIGHTS][n].state = LS_BLUE; } death_flash_alarm[LL_LOCAL_LIGHTS] = -1; death_flash_alarm[LL_OPPONENT_LIGHTS] = -1; } void LevelLights::gameStart ( ) { int n; for (n = 0; n < Grid::top_effective_row; n++) { setRed(lights[LL_LOCAL_LIGHTS][n]); setRed(lights[LL_OPPONENT_LIGHTS][n]); } for ( ; n < LL_NUMBER_LEVEL_LIGHTS; n++) { setBlue(lights[LL_LOCAL_LIGHTS][n]); setBlue(lights[LL_OPPONENT_LIGHTS][n]); } } void LevelLights::timeStep ( ) { // loop through the level light sets for (int set = 2; set--; ) { // loop through the set's level lights for (int n = LL_NUMBER_LEVEL_LIGHTS; n--; ) { LevelLight &light = lights[set][n]; // see if we're finished fading if (light.state & (LS_FADE_TO_RED | LS_FADE_TO_BLUE)) if (!light.fade_alarm--) { light.state |= ((light.state & LS_FADE_TO_RED) ? LS_RED : LS_BLUE); light.state &= ~(LS_FADE_TO_RED | LS_FADE_TO_BLUE); } // see if we're finished impact flashing if (light.state & LS_IMPACT_FLASH) if (!light.flash_alarm--) light.state &= ~LS_IMPACT_FLASH; } } // if we're death flashing and done with a flash and should continue if (death_flash_alarm[LL_LOCAL_LIGHTS] != -1 && !death_flash_alarm[LL_LOCAL_LIGHTS]-- && (MetaState::state & MS_GAME_PLAY) && Grid::checkSafeHeightViolation()) death_flash_alarm[LL_LOCAL_LIGHTS] = DC_LEVEL_LIGHT_DEATH_FLASH_TIME; // if we're death flashing and done with a flash and should continue if (death_flash_alarm[LL_OPPONENT_LIGHTS] != -1 && !death_flash_alarm[LL_OPPONENT_LIGHTS]-- && (MetaState::state & MS_GAME_PLAY) && Communicator::checkLevelLightRecvBit(LC_DEATH_FLASH_MASK)) death_flash_alarm[LL_OPPONENT_LIGHTS] = DC_LEVEL_LIGHT_DEATH_FLASH_TIME; } void LevelLights::handleAI () { if (ComputerPlayer::checkLevelLightDying() && death_flash_alarm[LL_OPPONENT_LIGHTS] == -1) death_flash_alarm[LL_OPPONENT_LIGHTS] = DC_LEVEL_LIGHT_DEATH_FLASH_TIME; for (int n = LL_NUMBER_LEVEL_LIGHTS; n--; ) { if (lights[LL_OPPONENT_LIGHTS][n].state & (LS_RED | LS_FADE_TO_RED)) { if (ComputerPlayer::checkLevelLightBlue(n)) setBlue(lights[LL_OPPONENT_LIGHTS][n]); } else { if (!ComputerPlayer::checkLevelLightBlue(n)) setRed(lights[LL_OPPONENT_LIGHTS][n]); } if (ComputerPlayer::impact()) { setFlashing(lights[LL_OPPONENT_LIGHTS][ComputerPlayer::levelLightImpact()]); } } } crack-attack-1.1.14/src/GarbageQueueElement.h0000644000175000001440000000215610221442402020464 0ustar webbsterusers/* * GarbageQueueElement.h * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GQE_H_ #define _GQE_H_ typedef struct _GarbageQueueElement { bool active; int alarm; int height; int width; int flavor; } GarbageQueueElement; #endif crack-attack-1.1.14/src/GarbageGenerator.h0000644000175000001440000000430110221263674020022 0ustar webbsterusers/* * GarbageGenerator.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef GARBAGEGENERATOR_H #define GARBAGEGENERATOR_H using namespace std; #include "Game.h" #include "MetaState.h" #include "Communicator.h" #include "Random.h" #include "GarbageQueueElement.h" class ComboTabulator; class CommunicationBuffer; /* static */ class GarbageGenerator { public: static void gameStart ( ); static void comboElimination ( ComboTabulator &combo ); static void comboComplete ( ComboTabulator &combo ); static void timeStep ( ); static void addToQueue ( GarbageQueueElement &e ); static void addToQueue ( CommunicationBuffer &buffer ); static void addToQueue ( BufferElement garbage[], size_t size ); static void addToQueue ( uint32 height, uint32 width, uint32 flavor, uint32 stamp ); private: static void sendGarbage ( int height, int width, int flavor ); static void sendSpecialGarbage ( int flavor ); static inline int determineDropTime ( int time_stamp ) { return time_stamp + (GC_AVERAGE_GARBAGE_DROP_DELAY - GC_SPREAD_GARBAGE_DROP_DELAY / 2) + Random::number(GC_SPREAD_GARBAGE_DROP_DELAY); } static void dealLocalGarbage ( int height, int width, int flavor, int time_stamp ); static void dealSpecialLocalGarbage ( int flavor, int time_stamp ); static GarbageQueueElement garbage_queue[GC_GARBAGE_QUEUE_SIZE]; static int waiting_count; }; #endif crack-attack-1.1.14/src/DrawLevelLights.cxx0000644000175000001440000001113110230144462020226 0ustar webbsterusers/* * DrawLevelLights.cxx * Daniel Nelson - 10/13/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws the cute level lights. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "LevelLights.h" #include "MetaState.h" #define CS_UNDEFINED (0) #define CS_RED (1) #define CS_BLUE (2) const GLfloat ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat diffuse[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat specular[] = { 0.8f, 0.8f, 0.8f, 1.0f }; void Displayer::drawLevelLights ( ) { int color_state; int next_color_state; GLfloat death_flash = 0.0f; GLfloat color[3]; glColorMaterial(GL_FRONT, GL_EMISSION); glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); glMaterialfv(GL_FRONT, GL_SPECULAR, specular); glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialf(GL_FRONT, GL_SHININESS, 2.0f); for (int set = 2; set--; ) { glPushMatrix(); if (set == LL_LOCAL_LIGHTS) glTranslatef(DC_LEVEL_LIGHT_LOCAL_OFFSET_X, DC_PLAY_OFFSET_Y + (DC_GRID_ELEMENT_LENGTH / 2.0f), 0.0f); else { glTranslatef(DC_LEVEL_LIGHT_OPPONENT_OFFSET_X, DC_PLAY_OFFSET_Y + (DC_GRID_ELEMENT_LENGTH / 2.0f), 0.0f); glScalef(-1.0f, 1.0f, 1.0f); } static int hold_set = 0; if ((MetaState::mode & CM_SOLO) && !(MetaState::mode & CM_AI)) { hold_set = set; set = LL_LOCAL_LIGHTS; } color_state = CS_UNDEFINED; if (LevelLights::death_flash_alarm[set] != -1) { death_flash = LevelLights::death_flash_alarm[set] * (2.0f / (GLfloat) DC_LEVEL_LIGHT_DEATH_FLASH_TIME); if (death_flash > 1.0f) death_flash = 2.0f - death_flash; } for (int n = 0; n < LL_NUMBER_LEVEL_LIGHTS; n++) { LevelLight &light = LevelLights::lights[set][n]; color[0] = color[1] = color[2] = 0.0f; if (light.state & LS_RED) { color[0] = DC_LEVEL_LIGHT_RED; next_color_state = CS_RED; } else if (light.state & LS_BLUE) { color[2] = DC_LEVEL_LIGHT_BLUE; next_color_state = CS_BLUE; } else { GLfloat fade = light.fade_alarm * (1.0f / (GLfloat) DC_LEVEL_LIGHT_FADE_TIME); if (light.state & LS_FADE_TO_RED) { color[0] = DC_LEVEL_LIGHT_RED * Game::sqrt(1.0f - fade); color[2] = DC_LEVEL_LIGHT_BLUE * Game::sqrt(fade); } else { color[0] = DC_LEVEL_LIGHT_RED * Game::sqrt(fade); color[2] = DC_LEVEL_LIGHT_BLUE * Game::sqrt(1.0f - fade); } next_color_state = CS_UNDEFINED; } if (light.state & LS_IMPACT_FLASH) { GLfloat flash = light.flash_alarm * (1.0f / (GLfloat) DC_LEVEL_LIGHT_IMPACT_FLASH_TIME); if (flash > DC_LEVEL_LIGHT_FLASH_INFLECTION) flash = (1.0f - flash) * (1.0f / (1.0f - DC_LEVEL_LIGHT_FLASH_INFLECTION)); else flash *= 1.0f / DC_LEVEL_LIGHT_FLASH_INFLECTION; flash *= flash; color[0] += (1.0f - color[0]) * flash; color[1] = flash; color[2] += (1.0f - color[2]) * flash; next_color_state = CS_UNDEFINED; } if (LevelLights::death_flash_alarm[set] != -1) { color[0] += (1.0f - color[0]) * death_flash; color[1] += (1.0f - color[1]) * death_flash; color[2] += (1.0f - color[2]) * death_flash; } if (next_color_state != color_state || color_state == CS_UNDEFINED) { glColor3fv(color); color_state = next_color_state; } glTranslatef(0.0f, DC_GRID_ELEMENT_LENGTH, 0.0f); glCallList(level_light_list); } if ((MetaState::mode & CM_SOLO) && !(MetaState::mode & CM_AI)) set = hold_set; glPopMatrix(); } } crack-attack-1.1.14/src/ActionRecorder.h0000644000175000001440000000304010234000015017503 0ustar webbsterusers/* * ActionRecorder.h * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ACTIONRECORDER_H #define ACTIONRECORDER_H #include "Game.h" #include "Controller.h" #define GC_REPLAY_FILE_NAME "replay" class Action { public: int name; int time_step; Action(): name(0), time_step(0) {} Action(int n, int ts): name(n), time_step(ts) {} }; /* static */ class ActionRecorder { public: static inline void initialize ( ) { actions.clear(); } static inline void addAction ( int state ) { Action a(state, Game::time_step); actions.push_back(a); } static void gameFinish ( ); private: static std::vector actions; }; #endif crack-attack-1.1.14/src/TextureLoader.cxx0000644000175000001440000001610310230144462017761 0ustar webbsterusers/* * TextureLoader.cxx * Daniel Nelson - 9/14/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Loads textures from uncompressed TGA files. */ #include #include #include #include #include #ifndef _WIN32 # include #endif #include "glext.h" using namespace std; #include "TextureLoader.h" #include "Game.h" // the header of an uncompressed TGA file const GLubyte header_image[11] = { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; GLubyte *TextureLoader::loadAlphaTGA ( const char *tga_file_name, int _height, int _width ) { GLubyte *full_texture = loadTGA(tga_file_name, _height, _width); int texture_size = _width * _height; GLubyte *alpha_texture = new GLubyte[texture_size]; for (int n = 0; n < texture_size; n++) alpha_texture[n] = full_texture[4 * n + 3]; if (full_texture != null) { delete [] full_texture; full_texture = null; } return alpha_texture; } GLubyte *TextureLoader::loadNoAlphaTGA ( const char *tga_file_name, int _height, int _width ) { GLubyte *full_texture = loadTGA(tga_file_name, _height, _width); int texture_size = _width * _height; GLubyte *no_alpha_texture = new GLubyte[texture_size * 3]; for (int n = 0; n < texture_size; n++) { float alpha = full_texture[4 * n + 3] * (1.0f / 255.0f); no_alpha_texture[3 * n + 0] = (GLubyte) (alpha * full_texture[4 * n + 0]); no_alpha_texture[3 * n + 1] = (GLubyte) (alpha * full_texture[4 * n + 1]); no_alpha_texture[3 * n + 2] = (GLubyte) (alpha * full_texture[4 * n + 2]); } if (full_texture != null) { delete [] full_texture; full_texture = null; } return no_alpha_texture; } GLubyte *TextureLoader::loadTGA ( const char *tga_file_name, int _height, int _width, int _color_depth ) { #ifndef _WIN32 ifstream file(tga_file_name); #else ifstream file(tga_file_name, ios::binary); #endif if (file.fail()) { cerr << "Error opening texture file '" << tga_file_name << "'." << endl; exit(1); } GLubyte id_length; file.read((char *) &id_length, 1); GLubyte static_header[11]; file.read((char *) static_header, sizeof(static_header)); if (memcmp(static_header, header_image, sizeof(static_header)) != 0) { cerr << "Texture file '" << tga_file_name << "' is not in uncompressed " "TGA format." << endl; exit(1); } GLubyte header[6]; file.read((char *) header, sizeof(header)); int width = header[1] * 256 + header[0]; int height = header[3] * 256 + header[2]; if (width != _width || height != _height) { cerr << "Texture file '" << tga_file_name << "' does not have the expected " "height and width. [" << height << 'x' << width << "] vs expected [" << _height << 'x' << _width << "]." << endl; exit(1); } int color_depth = header[4]; if (color_depth != 24 && color_depth != 32) { cerr << "Texture file '" << tga_file_name << "' has an unsupported color " "depth." << endl; exit(1); } if (_color_depth != 0 && _color_depth != color_depth) { cerr << "Texture file '" << tga_file_name << "' does not have the expected " "color depth." << endl; exit(1); } GLubyte b; while (id_length--) file.read((char *) &b, 1); int texture_size = width * height * color_depth / 8; GLubyte *texture = new GLubyte[texture_size]; file.read((char *) texture, texture_size); // tga is BGR for (int n = 0; n < texture_size; n += color_depth / 8) { GLubyte swap = texture[n]; texture[n] = texture[n + 2]; texture[n + 2] = swap; } return texture; } void TextureLoader::createTGA ( const char *tga_file_name, GLubyte *texture, int _height, int _width, const char *tga_id ) { #ifndef _WIN32 ofstream file(tga_file_name); #else ofstream file(tga_file_name, ios::binary); #endif if (file.fail()) { cerr << "Error creating texture file '" << tga_file_name << "'." << endl; exit(1); } GLubyte tga_id_length = strlen(tga_id); file.write((char *) &tga_id_length, 1); file.write((char *) header_image, sizeof(header_image)); GLubyte header[6]; header[1] = _width / 256; header[0] = _width - 256 * header[1]; header[3] = _height / 256; header[2] = _height - 256 * header[3]; header[4] = 32; header[5] = 40; file.write((char *) header, sizeof(header)); file.write((char *) tga_id, tga_id_length); // tga is BGR for (int n = 0; n < _width * _height * 4; n += 4) { GLubyte swap = texture[n]; texture[n] = texture[n + 2]; texture[n + 2] = swap; } file.write((char *) texture, _width * _height * 4); for (int n = 0; n < _width * _height * 4; n += 4) { GLubyte swap = texture[n]; texture[n] = texture[n + 2]; texture[n + 2] = swap; } } bool TextureLoader::fileExists ( const char *file_name ) { struct stat file_stats; #ifndef _WIN32 #else // stat fails to find directories with trailing delimiters in _WIN32 if (file_name[strlen(file_name) - 1] == GC_DD[0]) { char truncated_file_name[256]; strncpy(truncated_file_name, file_name, 256); truncated_file_name[strlen(file_name) - 1] = '\0'; return !stat(truncated_file_name, &file_stats); } #endif return !stat(file_name, &file_stats); } unsigned long TextureLoader::determineTGACheckSum ( const char *tga_file_name, int _height, int _width ) { GLubyte *texture = loadTGA(tga_file_name, _height, _width); unsigned long check_sum = 0; for (int n = _width * _height * 4; n--; ) check_sum += texture[n]; if (texture != null) { delete [] texture; texture = null; } return check_sum; } void TextureLoader::determineTGASize ( const char *tga_file_name, int &height, int &width ) { #ifndef _WIN32 ifstream file(tga_file_name); #else ifstream file(tga_file_name, ios::binary); #endif if (file.fail()) { cerr << "Error opening texture file '" << tga_file_name << "'." << endl; exit(1); } GLubyte id_length; file.read((char *) &id_length, 1); GLubyte static_header[11]; file.read((char *) static_header, sizeof(static_header)); if (memcmp(static_header, header_image, sizeof(static_header)) != 0) { cerr << "Texture file '" << tga_file_name << "' is not in uncompressed " "TGA format." << endl; exit(1); } GLubyte header[6]; file.read((char *) header, sizeof(header)); width = header[1] * 256 + header[0]; height = header[3] * 256 + header[2]; } crack-attack-1.1.14/src/TextureLoader.h0000644000175000001440000000475310230144462017416 0ustar webbsterusers/* * TextureLoader.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef TEXTURELOADER_H #define TEXTURELOADER_H #include #include "glext.h" #include "sstream.h" #include "Game.h" using namespace std; #define TL_GARBAGE_TEXTURE_TGA_ID "Crack Attack! garbage texture" #define TL_SCREEN_SHOT_TGA_ID "Crack Attack! screen shot" /* static */ class TextureLoader { public: static GLubyte *loadAlphaTGA ( const char *tga_file_name, int _height, int _width ); static GLubyte *loadNoAlphaTGA ( const char *tga_file_name, int _height, int _width ); static GLubyte *loadTGA ( const char *tga_file_name, int _height, int _width, int _color_depth = 32 ); static void createTGA ( const char *tga_file_name, GLubyte *texture, int _height, int _width, const char *tga_id ); static bool fileExists ( const char *file_name ); static unsigned long determineTGACheckSum ( const char *tga_file_name, int _height, int _width ); static void determineTGASize ( const char *tga_file_name, int &height, int &width ); static inline void buildLocalDataDirectoryName ( char dir_name[256] ) { ostringstream s; #ifndef _WIN32 s << getenv("HOME") << GC_LOCAL_DATA_DIRECTORY << ends; #else s << GC_LOCAL_DATA_DIRECTORY << ends; #endif strncpy(dir_name, s.str().data(), 256); } static inline void buildLocalDataFileName ( const char base_name[256], char file_name[256] ) { ostringstream s; #ifndef _WIN32 s << getenv("HOME") << GC_LOCAL_DATA_DIRECTORY << base_name << ends; #else s << GC_LOCAL_DATA_DIRECTORY << base_name << ends; #endif strncpy(file_name, s.str().data(), 256); } }; #endif crack-attack-1.1.14/src/GarbageQueue.cxx0000644000175000001440000001031410231337750017532 0ustar webbsterusers/* * GarbageQueue.cxx * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "GarbageQueue.h" #include "GarbageGenerator.h" #include "GarbageManager.h" #include GarbageQueue::GarbageQueue () { //garbage_queue// = new vector::iterator iter; for (iter = garbage_queue.begin(); iter != garbage_queue.end(); ++iter) { if ((*iter).flavor == flavor) break; ++num_removed; } if (num_removed == 0) return 0; #ifdef DEVELOPMENT int prev_height = height(); cached_height = -1; MESSAGE("Removing " << num_removed); MESSAGE("Height before erase " << height()); #endif garbage_queue.erase(garbage_queue.begin(), iter); cached_height = -1; #ifdef DEVELOPMENT int current_height = height(); MESSAGE("Height after erase " << current_height); //assert((prev_height - num_removed)==current_height); if (prev_height - num_removed != current_height) { MESSAGE("***********Assertion would've failed here in GarbageQueue.cxx:75***********"); MESSAGE("prev_height - num_removed != current_height (" << prev_height << " - " << num_removed << " != " << current_height << ")"); } #endif return num_removed; } void GarbageQueue::add ( int height, int width, int flavor) { GarbageQueueElement e; e.active = true; e.height = height; e.width = width; e.flavor = flavor; add(e); } static void show_element (GarbageQueueElement &e) { #ifndef NDEBUG printf("Element: h %d w %d f %d\n",+ e.height, e.width, e.flavor); #endif } void GarbageQueue::add ( GarbageQueueElement &element ) { element.active = true; MESSAGE("Adding garbage with height " << element.height); show_element(element); assert(element.height <= GC_PLAY_HEIGHT); assert(element.width <= GC_PLAY_WIDTH); garbage_queue.push_back(element); //int old_height = cached_height; cached_height = -1; //assert(height()-element.height == old_height); } int GarbageQueue::height ( ) { int garbage_height = 0; vector::iterator iter; if (cached_height != -1) return cached_height; for (iter = garbage_queue.begin(); iter != garbage_queue.end(); ++iter) { garbage_height += (*iter).height; } cached_height = garbage_height; return garbage_height; } int GarbageQueue::specialHeight ( ) { int garbage_height = 0; vector::iterator iter; if (cached_height != -1) return cached_height; for (iter = garbage_queue.begin(); iter != garbage_queue.end(); ++iter) { if (GarbageManager::isSpecialFlavor((*iter).flavor)) garbage_height += (*iter).height; } return garbage_height; } void GarbageQueue::sendToGenerator ( ) { vector::iterator iter; for (iter = garbage_queue.begin(); iter != garbage_queue.end(); ++iter) { GarbageGenerator::addToQueue(*iter); } } crack-attack-1.1.14/src/DrawCandy.cxx0000644000175000001440000001623610230144462017055 0ustar webbsterusers/* * DrawCandy.cxx * Daniel Nelson - 9/4/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws all the sparkles and signs! */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "SparkleManager.h" #include "SignManager.h" const GLfloat mote_colors[12][3] = { { 1.0f, 0.0f, 0.0f }, // normal { 0.9f, 0.4f, 0.0f }, // yellow flare { 0.8f, 0.8f, 0.0f }, // orange flare { 0.3f, 0.3f, 1.0f }, // blue flare { 0.4f, 0.4f, 0.4f }, // gray { 0.0f, 0.0f, 0.0f }, // black { 0.9f, 0.9f, 0.9f }, // white { 0.73f, 0.0f, 0.73f }, // purple { 0.2f, 0.2f, 0.8f }, // blue { 0.0f, 0.6f, 0.05f }, // green { 0.85f, 0.85f, 0.0f }, // yellow { 1.0f, 0.4f, 0.0f } }; // orange GLfloat sign_colors[8][4] = { { 1.0f, 1.0f, 1.0f, 0.0f }, // normal { 0.2f, 0.2f, 0.2f, 0.0f }, // black { 1.0f, 1.0f, 1.0f, 0.0f }, // white { 0.933f, 0.75f, 0.933f, 0.0f }, // purple { 0.8f, 0.8f, 0.95f, 0.0f }, // blue { 0.75f, 0.9f, 0.75f, 0.0f }, // green { 0.963f, 0.963f, 0.75f, 0.0f }, // yellow { 1.0f, 0.85f, 0.75f, 0.0f } }; // orange // note that mote_light_colors[0] is hard coded into LightManager.h const GLfloat Displayer::mote_light_colors[7][3] = { { 1.0f, 1.0f, 1.0f }, // normal { -1.0f, -1.0f, -1.0f }, // black { 0.8f, 0.0f, 0.8f }, // purple { 0.0f, 0.0f, 1.0f }, // blue { 0.0f, 1.0f, 0.0f }, // green { 0.8f, 0.8f, 0.0f }, // yellow { 1.0f, 0.7f, 0.0f } }; // orange inline void Displayer::drawSign ( Sign &sign, int texture ) { glPushMatrix(); glTranslatef(sign.x, sign.y, DC_PLAY_OFFSET_Z); // first hold if (sign.life_time < DC_SIGN_HOLD_TIME) { sign_colors[sign.color][3] = DC_SIGN_ALPHA; // then fade, grow, and float } else { GLfloat fade = (DC_SIGN_LIFE_TIME - sign.life_time) * (1.0f / (GLfloat) DC_SIGN_FADE_TIME); sign_colors[sign.color][3] = DC_SIGN_ALPHA * fade * fade; GLfloat size = 1.0f + (DC_FINAL_INFLATE_SIZE - 1.0f) * (1.0f - fade) * (1.0f - fade); glScalef(size, size, 1.0f); } glColor4fv(sign_colors[sign.color]); glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(sign.subtexture_t, sign.subtexture_s, 0.0f); if (texture == ST_SMALL_TEXTURE) glCallList(sign_small_list); else glCallList(sign_large_list); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } void Displayer::drawCandy ( ) { glBindTexture(GL_TEXTURE_2D, spark_texture); int c = SparkleManager::spark_count; for (int n = 0; c; n++) if (SparkleManager::sparks[n].active) { Spark &spark = SparkleManager::sparks[n]; c--; glPushMatrix(); if (spark.life_time < DC_SPARK_FADE_TIME) glColor4f(block_colors[spark.color][0], block_colors[spark.color][1], block_colors[spark.color][2], spark.life_time * (1.0f / (GLfloat) DC_SPARK_FADE_TIME)); else if (spark.life_time < DC_SPARK_FADE_TIME + DC_SPARK_PULSE_TIME) { GLfloat pulse = (spark.life_time - DC_SPARK_FADE_TIME) * (2.0f / (GLfloat) DC_SPARK_PULSE_TIME); if (pulse > 1.0f) pulse = 2.0f - pulse; glColor3f(pulse + (1.0f - pulse) * block_colors[spark.color][0], pulse + (1.0f - pulse) * block_colors[spark.color][1], pulse + (1.0f - pulse) * block_colors[spark.color][2]); } else glColor3fv(block_colors[spark.color]); glTranslatef(spark.x, spark.y, DC_PLAY_OFFSET_Z); glRotatef(spark.a, 0.0f, 0.0f, 1.0f); if (spark.size != 1.0f) glScalef(spark.size, spark.size, 1.0f); glCallList(sparkle_list); glPopMatrix(); } c = SparkleManager::mote_count; GLuint last_type = MT_FOUR_POINTED_STAR; for (int n = 0; c; n++) if (SparkleManager::motes[n].active) { Mote &mote = SparkleManager::motes[n]; c--; glPushMatrix(); if (mote_textures[mote.type] != last_type) { glBindTexture(GL_TEXTURE_2D, mote_textures[mote.type]); last_type = mote_textures[mote.type]; } // if an abnormal color if (mote.color > 0 && mote.color < DC_FIRST_SPECIAL_MOTE_COLOR) // fade in as color 0 if (mote.life_time >= 0 && mote.life_time < GC_DYING_DELAY) glColor4f(mote_colors[0][0], mote_colors[0][1], mote_colors[0][2], mote.life_time * (1.0f / (GLfloat) GC_DYING_DELAY)); // later fade to our color else if (mote.life_time > -DC_MOTE_COLOR_FADE_TIME) { GLfloat fade = -mote.life_time * (1.0f / (GLfloat) DC_MOTE_COLOR_FADE_TIME); glColor3f((1.0f - fade) * mote_colors[0][0] + fade * mote_colors[mote.color][0], (1.0f - fade) * mote_colors[0][1] + fade * mote_colors[mote.color][1], (1.0f - fade) * mote_colors[0][2] + fade * mote_colors[mote.color][2]); // now use our color } else glColor3fv(mote_colors[mote.color]); // if normal color and new, fade in else if (mote.life_time >= 0 && mote.life_time < GC_DYING_DELAY) glColor4f(mote_colors[mote.color][0], mote_colors[mote.color][1], mote_colors[mote.color][2], mote.life_time * (1.0f / (GLfloat) GC_DYING_DELAY)); // otherwise, nothing special else glColor3fv(mote_colors[mote.color]); glTranslatef(mote.x, mote.y, DC_PLAY_OFFSET_Z); glRotatef(mote.a, 0.0f, 0.0f, 1.0f); glScalef(mote.size, mote.size, 1.0f); glCallList(sparkle_list); glPopMatrix(); } glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glBindTexture(GL_TEXTURE_2D, sign_large_texture); c = SignManager::sign_count; for (int n = 0; c; n++) if (SignManager::signs[n].active) { Sign &sign = SignManager::signs[n]; c--; if (sign.texture == ST_SMALL_TEXTURE) continue; drawSign(sign, ST_LARGE_TEXTURE); } glBindTexture(GL_TEXTURE_2D, sign_small_texture); c = SignManager::sign_count; for (int n = 0; c; n++) if (SignManager::signs[n].active) { Sign &sign = SignManager::signs[n]; c--; if (sign.texture == ST_LARGE_TEXTURE) continue; drawSign(sign, ST_SMALL_TEXTURE); } } crack-attack-1.1.14/src/Music.h0000644000175000001440000000331210232526062015677 0ustar webbsterusers/* * Music.h * Miguel ngel Vilela Garca - 8/29/03 * * Copyright (C) 2003 Miguel ngel Vilela Garca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Miguel ngel Vilela Garca - www.miguev.net */ #ifndef MUSIC_H #define MUSIC_H #include #include #include #include #include #include #include #include #define GC_MUSIC_FILENAME_LENGTH 128 #define GC_MUSIC_PRELUDE_TRACK "prelude" #define GC_MUSIC_GAME_TRACK "game" #define GC_MUSIC_GAMEOVER_TRACK "gameover" #define GC_MUSIC_YOUWIN_TRACK "youwin" class Music { public: static void initialize ( ); static void play(); static void play_prelude(); static void play_game(); static void play_gameover(); static void play_youwin(); static void pause(); static void resume(); static void stop(); static void fadeout( int ms ); static void cleanup ( ); static void load( ); private: static void play_track( char *track ); static void finished(); }; #endif /* MUSIC_H */ crack-attack-1.1.14/src/DrawSwapper.cxx0000644000175000001440000001025610230144462017434 0ustar webbsterusers/* * DrawSwapper.cxx * Daniel Nelson - 9/30/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws the swapper thing. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "Swapper.h" #include "LightManager.h" #include "X.h" const GLfloat swapper_colors[4][3] = { { 1.0f, 1.0f, 1.0f }, // normal { 0.85f, 0.85f, 0.0f }, // reverse control { 0.0f, 0.6f, 0.05f }, // invisible swapper { 0.425f, 0.725f, 0.025f } }; // both void Displayer::drawSwapper ( ) { // blocks have already been drawn, so we use their material calls if (!X::invisibleSwapper()) glColor3fv(swapper_colors[Swapper::color]); else { if (!X::needDrawSwapper()) return; glEnable(GL_BLEND); glColor4f(swapper_colors[Swapper::color][0], swapper_colors[Swapper::color][1], swapper_colors[Swapper::color][2], X::swapperAlpha()); } glPushMatrix(); GLfloat x = Swapper::x * DC_GRID_ELEMENT_LENGTH + (DC_PLAY_OFFSET_X + 0.5f * DC_GRID_ELEMENT_LENGTH); GLfloat y = Swapper::y * DC_GRID_ELEMENT_LENGTH + play_offset_y; LightManager::setupGarbageLights(x - (0.5f * DC_GRID_ELEMENT_LENGTH), y, 1, 2); if (Swapper::state & SS_SWAPPING) { glTranslatef(x, y, DC_PLAY_OFFSET_Z); glRotatef(180.0f * Swapper::swap_factor, 0.0f, 1.0f, 0.0f); glPushMatrix(); glTranslatef(-DC_SWAPPER_GRAB_LENGTH, DC_SWAPPER_GRAB_LENGTH, 0.0f); glCallList(swapper_list); glTranslatef(2.0f * DC_SWAPPER_GRAB_LENGTH, -2.0f * DC_SWAPPER_GRAB_LENGTH, 0.0f); glScalef(-1.0f, -1.0f, 1.0f); glCallList(swapper_list); glTranslatef(2.0f * DC_SWAPPER_GRAB_LENGTH, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, 1.0f); glCallList(swapper_list); glTranslatef(2.0f * DC_SWAPPER_GRAB_LENGTH, -2.0f * DC_SWAPPER_GRAB_LENGTH, 0.0f); glScalef(-1.0f, -1.0f, 1.0f); glCallList(swapper_list); glPopMatrix(); glScalef(1.0f, 1.0f, -1.0f); glTranslatef(-DC_SWAPPER_GRAB_LENGTH, DC_SWAPPER_GRAB_LENGTH, 0.0f); glCallList(swapper_list); glTranslatef(2.0f * DC_SWAPPER_GRAB_LENGTH, -2.0f * DC_SWAPPER_GRAB_LENGTH, 0.0f); glScalef(-1.0f, -1.0f, 1.0f); glCallList(swapper_list); glTranslatef(2.0f * DC_SWAPPER_GRAB_LENGTH, 0.0f, 0.0f); glScalef(-1.0f, 1.0f, 1.0f); glCallList(swapper_list); glTranslatef(2.0f * DC_SWAPPER_GRAB_LENGTH, -2.0f * DC_SWAPPER_GRAB_LENGTH, 0.0f); glScalef(-1.0f, -1.0f, 1.0f); glCallList(swapper_list); glPopMatrix(); return; } if (Swapper::state & SS_MOVE_PAUSE) { GLfloat shift = (Game::time_step - Swapper::move_pause_alarm) * (1.0f / (GLfloat) GC_MOVE_DELAY); shift *= shift; if ((Swapper::state & SS_MOVE_MASK) & SS_MOVE_LEFT) x += shift; else if ((Swapper::state & SS_MOVE_MASK) & SS_MOVE_RIGHT) x -= shift; else if ((Swapper::state & SS_MOVE_MASK) & SS_MOVE_UP) y -= shift; else y += shift; } glTranslatef(x, y, DC_PLAY_OFFSET_Z); glCallList(swapper_list); glScalef(-1.0f, -1.0f, 1.0f); glCallList(swapper_list); glScalef(-1.0f, 1.0f, 1.0f); glCallList(swapper_list); glScalef(-1.0f, -1.0f, 1.0f); glCallList(swapper_list); glPopMatrix(); if (X::invisibleSwapper()) glDisable(GL_BLEND); } crack-attack-1.1.14/src/DrawExternalCandy.cxx0000644000175000001440000003312410234000015020540 0ustar webbsterusers/* * DrawExternalCandy.cxx * Daniel Nelson - 10/13/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Draws everything dumb outside of the play area. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" #include "MetaState.h" #include "Clock.h" #include "Score.h" #include "LoseBar.h" inline void Displayer::drawDigit ( GLfloat alpha ) { glColor4f(0.3f, 0.3f, 1.0f, alpha); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0.0f, 1.0f); glVertex3f(-DC_CLOCK_DIGIT_LENGTH, -DC_CLOCK_DIGIT_LENGTH, 0.0f); glColor4f(0.5f, 0.5f, 1.0f, alpha); glTexCoord2f(1.0f, 1.0f); glVertex3f(DC_CLOCK_DIGIT_LENGTH, -DC_CLOCK_DIGIT_LENGTH, 0.0f); glColor4f(0.5f, 0.5f, 1.0f, alpha); glTexCoord2f(0.0f, 0.0f); glVertex3f(-DC_CLOCK_DIGIT_LENGTH, DC_CLOCK_DIGIT_LENGTH, 0.0f); glColor4f(1.0f, 1.0f, 1.0f, alpha); glTexCoord2f(1.0f, 0.0f); glVertex3f(DC_CLOCK_DIGIT_LENGTH, DC_CLOCK_DIGIT_LENGTH, 0.0f); glEnd(); } inline void Displayer::drawLeftBar ( GLfloat b, GLfloat t, GLfloat color[3] ) { if (t < DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f) return; glBegin(GL_TRIANGLE_STRIP); glColor3fv(color); glTexCoord2f(0.0f, 0.0f); glVertex3f(-DC_LOSEBAR_LENGTH / 2.0f, DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(t - (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 0.0f); glVertex3f(b - (DC_LOSEBAR_FADE_LENGTH / 2.0f), DC_LOSEBAR_HEIGHT / 2, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-DC_LOSEBAR_LENGTH / 2.0f, -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(t - (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 1.0f); glVertex3f(b - (DC_LOSEBAR_FADE_LENGTH / 2.0f), -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glEnd(); } inline void Displayer::drawRightBar ( GLfloat b, GLfloat t, GLfloat color[3] ) { if (t > 1.0f - DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f) return; glBegin(GL_TRIANGLE_STRIP); glColor3fv(color); glTexCoord2f(t + (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 0.0f); glVertex3f(b + (DC_LOSEBAR_FADE_LENGTH / 2.0f), DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(DC_LOSEBAR_LENGTH / 2.0f, DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(t + (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 1.0f); glVertex3f(b + (DC_LOSEBAR_FADE_LENGTH / 2.0f), -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(DC_LOSEBAR_LENGTH / 2.0f, -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glEnd(); } inline void Displayer::drawCenterBar ( GLfloat b, GLfloat t, GLfloat color1[3], GLfloat color2[3] ) { glBegin(GL_TRIANGLE_STRIP); glColor3fv(color1); glTexCoord2f(t - (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 0.0f); glVertex3f(b - (DC_LOSEBAR_FADE_LENGTH / 2.0f), DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glColor3fv(color2); glTexCoord2f(t + (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 0.0f); glVertex3f(b + (DC_LOSEBAR_FADE_LENGTH / 2.0f), DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glColor3fv(color1); glTexCoord2f(t - (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 1.0f); glVertex3f(b - (DC_LOSEBAR_FADE_LENGTH / 2.0f), -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glColor3fv(color2); glTexCoord2f(t + (DC_LOSEBAR_FADE_TEX_LENGTH / 2.0f), 1.0f); glVertex3f(b + (DC_LOSEBAR_FADE_LENGTH / 2.0f), -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glEnd(); } inline void Displayer::drawFullBar ( GLfloat color[3] ) { glBegin(GL_TRIANGLE_STRIP); glColor3fv(color); glTexCoord2f(0.0f, 0.0f); glVertex3f(-DC_LOSEBAR_LENGTH / 2.0f, DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(DC_LOSEBAR_LENGTH / 2.0f, DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-DC_LOSEBAR_LENGTH / 2.0f, -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(DC_LOSEBAR_LENGTH / 2.0f, -DC_LOSEBAR_HEIGHT / 2.0f, 0.0f); glEnd(); } void Displayer::drawExternalCandy ( ) { int texture_bound; glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); GLfloat b = (DC_LOSEBAR_LENGTH + DC_LOSEBAR_FADE_LENGTH) * (LoseBar::bar - 0.5f); GLfloat t = LoseBar::bar * (1.0f + DC_LOSEBAR_FADE_TEX_LENGTH) - 0.5f * DC_LOSEBAR_FADE_TEX_LENGTH; glBindTexture(GL_TEXTURE_2D, losebar_texture); glPushMatrix(); glTranslatef(DC_LEFT_EXTERNAL_CENTER, DC_LOSEBAR_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); GLfloat color1[3], color2[3]; float fade; switch (LoseBar::state) { case LB_INACTIVE: color1[0] = DC_LOSEBAR_INACTIVE_RED; color1[1] = DC_LOSEBAR_INACTIVE_GREEN; color1[2] = DC_LOSEBAR_INACTIVE_BLUE; drawFullBar(color1); break; case LB_LOW_ALERT: color1[0] = DC_LOSEBAR_LOW_ALERT_RED; color1[1] = DC_LOSEBAR_LOW_ALERT_GREEN; color1[2] = DC_LOSEBAR_LOW_ALERT_BLUE; color2[0] = DC_LOSEBAR_INACTIVE_RED; color2[1] = DC_LOSEBAR_INACTIVE_GREEN; color2[2] = DC_LOSEBAR_INACTIVE_BLUE; drawLeftBar(b, t, color1); drawCenterBar(b, t, color1, color2); drawRightBar(b, t, color2); break; case LB_HIGH_ALERT: color1[0] = DC_LOSEBAR_HIGH_ALERT_RED; color1[1] = DC_LOSEBAR_HIGH_ALERT_GREEN; color1[2] = DC_LOSEBAR_HIGH_ALERT_BLUE; color2[0] = DC_LOSEBAR_LOW_ALERT_RED; color2[1] = DC_LOSEBAR_LOW_ALERT_GREEN; color2[2] = DC_LOSEBAR_LOW_ALERT_BLUE; drawLeftBar(b, t, color1); drawCenterBar(b, t, color1, color2); drawRightBar(b, t, color2); break; case LB_FADE_LOW_TO_INACTIVE: fade = LoseBar::fade_timer * (1.0f / (GLfloat) DC_LOSEBAR_FADE_TIME); color1[0] = DC_LOSEBAR_INACTIVE_RED + fade * (DC_LOSEBAR_LOW_ALERT_RED - DC_LOSEBAR_INACTIVE_RED); color1[1] = DC_LOSEBAR_INACTIVE_GREEN + fade * (DC_LOSEBAR_LOW_ALERT_GREEN - DC_LOSEBAR_INACTIVE_GREEN); color1[2] = DC_LOSEBAR_INACTIVE_BLUE + fade * (DC_LOSEBAR_LOW_ALERT_BLUE - DC_LOSEBAR_INACTIVE_BLUE); color2[0] = DC_LOSEBAR_INACTIVE_RED; color2[1] = DC_LOSEBAR_INACTIVE_GREEN; color2[2] = DC_LOSEBAR_INACTIVE_BLUE; drawLeftBar(b, t, color1); drawCenterBar(b, t, color1, color2); drawRightBar(b, t, color2); break; case LB_FADE_HIGH_TO_INACTIVE: fade = LoseBar::fade_timer * (1.0f / (GLfloat) DC_LOSEBAR_FADE_TIME); color1[0] = DC_LOSEBAR_INACTIVE_RED + fade * (DC_LOSEBAR_HIGH_ALERT_RED - DC_LOSEBAR_INACTIVE_RED); color1[1] = DC_LOSEBAR_INACTIVE_GREEN + fade * (DC_LOSEBAR_HIGH_ALERT_GREEN - DC_LOSEBAR_INACTIVE_GREEN); color1[2] = DC_LOSEBAR_INACTIVE_BLUE + fade * (DC_LOSEBAR_HIGH_ALERT_BLUE - DC_LOSEBAR_INACTIVE_BLUE); color2[0] = DC_LOSEBAR_INACTIVE_RED + fade * (DC_LOSEBAR_LOW_ALERT_RED - DC_LOSEBAR_INACTIVE_RED); color2[1] = DC_LOSEBAR_INACTIVE_GREEN + fade * (DC_LOSEBAR_LOW_ALERT_GREEN - DC_LOSEBAR_INACTIVE_GREEN); color2[2] = DC_LOSEBAR_INACTIVE_BLUE + fade * (DC_LOSEBAR_LOW_ALERT_BLUE - DC_LOSEBAR_INACTIVE_BLUE); drawLeftBar(b, t, color1); drawCenterBar(b, t, color1, color2); drawRightBar(b, t, color2); break; case LB_FADE_RESET_HIGH: fade = LoseBar::fade_timer * (1.0f / (GLfloat) DC_LOSEBAR_FADE_TIME); color1[0] = DC_LOSEBAR_LOW_ALERT_RED + fade * (DC_LOSEBAR_HIGH_ALERT_RED - DC_LOSEBAR_LOW_ALERT_RED); color1[1] = DC_LOSEBAR_LOW_ALERT_GREEN + fade * (DC_LOSEBAR_HIGH_ALERT_GREEN - DC_LOSEBAR_LOW_ALERT_GREEN); color1[2] = DC_LOSEBAR_LOW_ALERT_BLUE + fade * (DC_LOSEBAR_HIGH_ALERT_BLUE - DC_LOSEBAR_LOW_ALERT_BLUE); color2[0] = DC_LOSEBAR_LOW_ALERT_RED; color2[1] = DC_LOSEBAR_LOW_ALERT_GREEN; color2[2] = DC_LOSEBAR_LOW_ALERT_BLUE; drawLeftBar(b, t, color1); drawCenterBar(b, t, color1, color2); drawRightBar(b, t, color2); break; } glPopMatrix(); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); if ((!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) || (Game::state & GS_PAUSED) || (Game::state & GS_WON) || (Game::state & GS_LOST)) { // draw clock if ((MetaState::mode & (CM_SERVER | CM_CLIENT)) || (MetaState::mode & (CM_AI))) { glPushMatrix(); glTranslatef(DC_LEFT_EXTERNAL_CENTER - DC_CLOCK_DIGIT_OFFSET / 2, DC_CLOCK_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glBindTexture(GL_TEXTURE_2D, clock_digit_textures[10]); drawDigit(1.0f); glTranslatef(DC_CLOCK_CENTER_OFFSET / 2.0f + 3.0f * DC_CLOCK_DIGIT_OFFSET / 2.0f, 0.0f, 0.0f); GLfloat alpha = Clock::tick * (1.0f / (GLfloat) GC_STEPS_PER_SECOND); glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::digits[0]]); if (Clock::digits[0] != Clock::previous_digits[0]) { drawDigit(alpha); glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::previous_digits[0]]); drawDigit(1.0f - alpha); texture_bound = Clock::previous_digits[0]; } else { drawDigit(1.0f); texture_bound = Clock::digits[0]; } glTranslatef(-DC_CLOCK_DIGIT_OFFSET, 0.0f, 0.0f); if (Clock::digits[1] != texture_bound) glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::digits[1]]); if (Clock::digits[1] == Clock::previous_digits[1]) { drawDigit(1.0f); texture_bound = Clock::digits[1]; } else { drawDigit(alpha); glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::previous_digits[1]]); drawDigit(1.0f - alpha); texture_bound = Clock::previous_digits[1]; } glTranslatef(-DC_CLOCK_DIGIT_OFFSET - DC_CLOCK_CENTER_OFFSET, 0.0f, 0.0f); if (Clock::digits[2] != texture_bound) glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::digits[2]]); if (Clock::digits[2] == Clock::previous_digits[2]) { drawDigit(1.0f); texture_bound = Clock::digits[2]; } else { drawDigit(alpha); glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::previous_digits[2]]); drawDigit(1.0f - alpha); texture_bound = Clock::previous_digits[2]; } if (Clock::digits[3] || Clock::previous_digits[3]) { glTranslatef(-DC_CLOCK_DIGIT_OFFSET, 0.0f, 0.0f); if (Clock::digits[3] == Clock::previous_digits[3]) { if (texture_bound != Clock::digits[3]) glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::digits[3]]); drawDigit(1.0f); } else { if (Clock::digits[3]) { if (texture_bound != Clock::digits[3]) glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::digits[3]]); drawDigit(alpha); texture_bound = Clock::digits[3]; } if (Clock::previous_digits[3]) { if (texture_bound != Clock::previous_digits[3]) glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Clock::previous_digits[3]]); drawDigit(1.0f - alpha); } } } glPopMatrix(); // draw score } else { glPushMatrix(); glTranslatef(DC_LEFT_EXTERNAL_CENTER + ((Score::n_digits_displayed - 1) * DC_CLOCK_DIGIT_OFFSET) / 2, DC_CLOCK_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); GLfloat alpha = 1.0f - (GLfloat) Score::fade_timer * Score::inverse_timer_start; glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Score::digits[0]]); texture_bound = Score::digits[0]; drawDigit(alpha); if (Score::fade_timer && Score::previous_digits[0] != Score::digits[0]) { glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Score::previous_digits[0]]); texture_bound = Score::previous_digits[0]; drawDigit(1.0f - alpha); } for (int n = 1; n < Score::n_digits_displayed; n++) { glTranslatef(-DC_CLOCK_DIGIT_OFFSET, 0.0f, 0.0f); if (texture_bound != Score::digits[n]) { glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Score::digits[n]]); texture_bound = Score::digits[n]; } if (Score::fade_timer && Score::previous_digits[n] != Score::digits[n]) { drawDigit(alpha); glBindTexture(GL_TEXTURE_2D, clock_digit_textures[Score::previous_digits[n]]); texture_bound = Score::previous_digits[n]; drawDigit(1.0f - alpha); } else drawDigit(1.0f); } glPopMatrix(); } } else glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glDisable(GL_BLEND); // draw logo glBindTexture(GL_TEXTURE_2D, logo_texture); glCallList(logo_list); // draw names glPushMatrix(); glBindTexture(GL_TEXTURE_2D, name_texture); glTranslatef(DC_LEFT_EXTERNAL_CENTER, DC_NAME_OFFSET_Y, DC_EXTERNAL_OFFSET_Z); glScalef(DC_NAME_SCALE, DC_NAME_SCALE, 1.0f); glCallList(message_2x1_list); glPopMatrix(); } crack-attack-1.1.14/src/ComboManager.cxx0000644000175000001440000000467610132356545017550 0ustar webbsterusers/* * ComboManager.cxx * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Watches for finished combo tabulators and generates the appropriate garbage * blocks. Handles the combo tabulator free store. */ #include "Game.h" #include "ComboManager.h" #include "ComboTabulator.h" #include "GarbageGenerator.h" #include "Score.h" using namespace std; ComboTabulator ComboManager::tabulatorStore[GC_COMBO_TABULATOR_STORE_SIZE]; bool ComboManager::storeMap[GC_COMBO_TABULATOR_STORE_SIZE]; int ComboManager::combo_count; void ComboManager::gameStart ( ) { for (int n = GC_COMBO_TABULATOR_STORE_SIZE; n--; ) { storeMap[n] = false; tabulatorStore[n].id = n; } combo_count = 0; } void ComboManager::timeStep ( ) { // loop through the active combos int c = combo_count; for (int n = 0; c; n++) { if (!storeMap[n]) continue; ComboTabulator &combo = tabulatorStore[n]; c--; // if this combo is complete if (combo.involvement_count == 0) { // the garbage generator GarbageGenerator::comboComplete(combo); // delete the combo; circumvent deleteComboTabulator() freeId(n); // if an elimination in this combo just occured } else if (combo.time_stamp == Game::time_step) { // notify the score int score = Score::reportElimination(combo); combo.base_accumulated_score += score; combo.base_score_this_step += score; if (combo.n_multipliers_this_step != 0) Score::reportMultiplier(combo); combo.base_score_this_step = 0; // notify the garbage generator; removes the elimination magnitude GarbageGenerator::comboElimination(combo); } } } crack-attack-1.1.14/src/Grid.cxx0000644000175000001440000002360710231274462016073 0ustar webbsterusers/* * Grid.cxx * Daniel Nelson - 8/23/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Holds a map of the play area and also deals with elimination checks. */ using namespace std; #include "Game.h" #include "Grid.h" #include "Garbage.h" #include "ComboManager.h" #include "LevelLights.h" #include "Swapper.h" #include "BlockManager.h" #include "Random.h" GridElement Grid::grid[GC_PLAY_WIDTH][GC_PLAY_HEIGHT]; CheckRegistryElement Grid::check_registry[GC_GRID_SIZE]; int Grid::check_count; int Grid::shatter_count; int Grid::shatter_top; int Grid::shatter_bottom; bool Grid::gray_shatter; int Grid::top_occupied_row; int Grid::top_effective_row; void Grid::gameStart ( ) { check_count = 0; top_occupied_row = 0; for (int i = GC_PLAY_WIDTH; i--; ) for (int j = GC_PLAY_HEIGHT; j--; ) { grid[i][j].state = GR_EMPTY; grid[i][j].resident_type = GR_EMPTY; grid[i][j].resident = null; } // Generate the initial blocks. int short_collumn = Random::number(GC_PLAY_WIDTH); for (int x = GC_PLAY_WIDTH; x--; ) { // generate the height int height = (short_collumn == x ? 2 : 7) + Random::number2(2); if (height - 1 > top_occupied_row) top_occupied_row = height - 1; for (int y = height; --y; ) { // determine the flavor int flavor; do { flavor = Random::number(BF_NUMBER_NORMAL); if (!(Grid::stateAt(x, y + 1) & GR_EMPTY) && Grid::blockAt(x, y + 1).flavor == flavor) continue; if (x == GC_PLAY_WIDTH - 1) break; if (!(Grid::stateAt(x + 1, y) & GR_EMPTY) && Grid::blockAt(x + 1, y).flavor == flavor) continue; break; } while (true); // set the block manager block creation state if (y == 2) BlockManager::second_to_last_row_c[x] = flavor; else if (y == 1) BlockManager::last_row_c[x] = flavor; // create the block BlockManager::newBlock(x, y, flavor); } } top_effective_row = top_occupied_row; } void Grid::timeStep ( ) { // Process elimination check requests. // loop through the request registry for (int n = 0; check_count; n++) if (check_registry[n].mark) { check_registry[n].mark = false; check_count--; Block &block = BlockManager::blockStore[n]; // insure that the block is still static if (!(block.state & BS_STATIC)) continue; // use the block's combo, if it has one handleEliminationCheckRequest(block, block.current_combo ? block.current_combo : check_registry[n].combo); } // Update top_occupied_row. top_occupied_row++; bool flag = true; do { top_occupied_row--; for (int x = GC_PLAY_WIDTH; x--; ) if (!(stateAt(x, top_occupied_row) & GR_EMPTY)) { flag = false; break; } } while (flag); // Update top_effective_row. int o = top_effective_row; top_effective_row++; flag = true; do { top_effective_row--; for (int x = GC_PLAY_WIDTH; x--; ) if (!(residentTypeAt(x, top_effective_row) & GR_EMPTY) && !((residentTypeAt(x, top_effective_row) & GR_GARBAGE) && garbageAt(x, top_effective_row).initial_fall)) { flag = false; break; } } while (flag); if (top_effective_row < o) LevelLights::levelLower(top_effective_row); } void Grid::handleEliminationCheckRequest ( Block &block, ComboTabulator *combo ) { int x = block.x; int y = block.y; // Look in four directions for matching lines. int l = x; while (l > 0) { if (!(stateAt(l - 1, y) & GR_BLOCK)) break; if (!matchAt(l - 1, y, block)) break; l--; } int r = x + 1; while (r < GC_PLAY_WIDTH) { if (!(stateAt(r, y) & GR_BLOCK)) break; if (!matchAt(r, y, block)) break; r++; } int b = y; while (b > 1) { if (!(stateAt(x, b - 1) & GR_BLOCK)) break; if (!matchAt(x, b - 1, block)) break; b--; } int t = y + 1; while (t < GC_PLAY_HEIGHT) { if (!(stateAt(x, t) & GR_BLOCK)) break; if (!matchAt(x, t, block)) break; t++; } int w = r - l; int h = t - b; int magnitude = 0; int pattern = 0; if (w >= GC_MIN_PATTERN_LENGTH) { pattern |= PT_HORIZONTAL; magnitude += w; } if (h >= GC_MIN_PATTERN_LENGTH) { pattern |= PT_VERTICAL; magnitude += h; } // if no pattern found if (pattern == 0) { block.endComboInvolvement(combo); return; } // create a combo for the elimination if (!combo) combo = &ComboManager::newComboTabulator(); // if pattern matches both directions if (pattern == (PT_HORIZONTAL | PT_VERTICAL)) magnitude--; // Kill the pattern's blocks and look for touching garbage. shatter_count = 0; shatter_top = 0; shatter_bottom = GC_PLAY_HEIGHT; // we need to know if it's a gray shatter in order to know if black // garbage should shatter if (!BlockManager::isColorlessFlavor(block.flavor)) gray_shatter = false; else gray_shatter = true; ComboManager::specialBlockTally(*combo, block); block.startDying(combo, magnitude); if (pattern & PT_HORIZONTAL) { // kill the pattern's blocks for (int k_x = l; k_x < r; k_x++) if (k_x != x) { ComboManager::specialBlockTally(*combo, blockAt(k_x, y)); blockAt(k_x, y).startDying(combo, magnitude); } // look for garbage to the left and below the pattern if (l > 0) shatterGarbage(l - 1, y); if (y > 1) for (int k_x = l; k_x < r; k_x++) shatterGarbage(k_x, y - 1); // look for garbage to the right and above the pattern if (r < GC_PLAY_WIDTH) shatterGarbage(r, y); if (y < GC_PLAY_HEIGHT - 1) for (int k_x = l; k_x < r; k_x++) shatterGarbage(k_x, y + 1); } if (pattern & PT_VERTICAL) { // kill the pattern's blocks for (int k_y = b; k_y < t; k_y++) if (k_y != y) { ComboManager::specialBlockTally(*combo, blockAt(x, k_y)); blockAt(x, k_y).startDying(combo, magnitude); } // look for garbage to the left and below the pattern if (b > 1) shatterGarbage(x, b - 1); if (x > 0) for (int k_y = b; k_y < t; k_y++) shatterGarbage(x - 1, k_y); // look for garbage to the right and above the pattern if (t < GC_PLAY_HEIGHT) shatterGarbage(x, t); if (x < GC_PLAY_WIDTH - 1) for (int k_y = b; k_y < t; k_y++) shatterGarbage(x + 1, k_y); } // The grid now contains shattered elements. We now traverse the grid and // syncronize the shattering garbages' timers. The garbage itself deals with // the creation of blocks and such, as it's behavior may varry. // delay until the new blocks fall int awaken_delay = GC_INITIAL_POP_DELAY + GC_FINAL_POP_DELAY + GC_INTERNAL_POP_DELAY * (shatter_count - 1); // delay until the next block pops int pop_delay = GC_INITIAL_POP_DELAY; // traverse the shatter area; s_x and pop_delay will be advanced during // startShattering() for (int s_y = shatter_bottom; s_y < shatter_top; s_y++) for (int s_x = 0; s_x < GC_PLAY_WIDTH; ) if (stateAt(s_x, s_y) & GR_SHATTERING) garbageAt(s_x, s_y).startShattering(s_x, s_y, pop_delay, awaken_delay, combo); else s_x++; // notify the combo of the pattern match combo->reportElimination(magnitude, block); } void Grid::shatterGarbage_inline_split_ ( int x, int y, Garbage *due_to ) { Garbage &garbage = garbageAt(x, y); // ask the garbage about shattering; we have to do black ourselves if (!garbage.considerShattering(due_to)) return; if (garbage.flavor == GF_BLACK && !gray_shatter) return; // keep track of the bounds on the shattered area if (y + garbage.height > shatter_top) shatter_top = y + garbage.height; if (y - garbage.height < shatter_bottom) shatter_bottom = y - garbage.height; shatter_count += garbage.width * garbage.height; // mark the garbage grid locations as shattered for (int h = garbage.height; h--; ) for (int w = garbage.width; w--; ) grid[garbage.x + w][garbage.y + h].state = GR_SHATTERING; // look for connecting garbage recursively if (garbage.x > 0) for (int h = garbage.height; h--; ) shatterGarbage(garbage.x - 1, garbage.y + h, &garbage); if (garbage.x + garbage.width < GC_PLAY_WIDTH) for (int h = garbage.height; h--; ) shatterGarbage(garbage.x + garbage.width, garbage.y + h, &garbage); if (garbage.y > 1) for (int w = garbage.width; w--; ) shatterGarbage(garbage.x + w, garbage.y - 1, &garbage); if (garbage.y + garbage.height < GC_PLAY_HEIGHT) for (int w = garbage.width; w--; ) shatterGarbage(garbage.x + w, garbage.y + garbage.height, &garbage); } bool Grid::shiftGridUp ( ) { if (top_occupied_row == GC_PLAY_HEIGHT - 1) return false; // shift the grid for (int y = top_occupied_row + 1; y--; ) for (int x = GC_PLAY_WIDTH; x--; ) grid[x][y + 1] = grid[x][y]; #ifndef NDEBUG // otherwise the assert() will tag us for (int x = GC_PLAY_WIDTH; x--; ) grid[x][0].state = GR_EMPTY; #endif top_occupied_row++; top_effective_row++; LevelLights::levelRaise(top_effective_row); // shift blocks and garbage up with the grid BlockManager::shiftUp(); GarbageManager::shiftUp(); // shift swapper up Swapper::shiftUp(); return true; } crack-attack-1.1.14/src/Displayer.cxx0000644000175000001440000002422710235041322017130 0ustar webbsterusers/* * Displayer.cxx * Daniel Nelson - 8/26/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles all the prettyness; or uglyness, as it now stands. */ #include #include #include //FIXME: This file may need GL/glext.h #include "glext.h" #ifdef DEVELOPMENT #include #include "sstream.h" #endif #include using namespace std; #include "TextureLoader.h" #include "Game.h" #include "Displayer.h" #include "CelebrationManager.h" #include "GarbageFlavorImage.h" #include "SignManager.h" #include "LightManager.h" #include "MetaState.h" #include "SparkleManager.h" #include "String.h" #include "ScoreRecordManager.h" #include "Score.h" GLenum Displayer::rescale_method; bool Displayer::opengl_version_1_2; int Displayer::state; int Displayer::main_window; GLfloat Displayer::play_offset_y; #ifndef NO_MULTITEXTURING # ifndef _WIN32 # else # ifndef __MINGW32__ PFNGLACTIVETEXTUREARBPROC Displayer::glActiveTextureARB; PFNGLCLIENTACTIVETEXTUREARBPROC Displayer::glClientActiveTextureARB; # endif # endif #endif #ifdef DEVELOPMENT GLint Displayer::screen_length; #endif void Displayer::initialize ( int width, int height ) { glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); if (width != -1 && height != -1) { glutInitWindowSize(width, height); } else { glutInitWindowSize(DC_WINDOW_PIXEL_STARTING_WIDTH, DC_WINDOW_PIXEL_STARTING_HEIGHT); } main_window = glutCreateWindow(GC_NAME); state = 0; opengl_version_1_2 = false; char *string = (char *) glGetString(GL_VERSION); if (string[0] > '1' || (string[0] == '1' && string[2] >= '2')) opengl_version_1_2 = true; // determine rescaling method for normals if (opengl_version_1_2) rescale_method = GL_RESCALE_NORMAL; else rescale_method = GL_NORMALIZE; #ifndef NO_MULTITEXTURING // check for multitexturing if (checkExtension("GL_ARB_multitexture")) { GLint n; glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &n); if (n > 1) state |= DS_MULTITEXTURING; } # ifndef _WIN32 # else // locate the extension function pointers if (state & DS_MULTITEXTURING) { glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB"); glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB"); } # endif #endif SparkleManager::initialize(); SignManager::initialize(); LightManager::initialize(); GarbageFlavorImage::initialize(); CelebrationManager::initialize(); ScoreRecordManager::initialize(); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glEnable(GL_CLIP_PLANE_PLAY_FLOOR); const GLdouble play_bottom[] = { 0.0, 1.0, 0.0, DC_PLAY_HEIGHT * DC_CAMERA_HEIGHT_RATIO }; glClipPlane(GL_CLIP_PLANE_PLAY_FLOOR, play_bottom); glEnable(GL_LIGHT0); const GLfloat headlight_position[] = { 0.0f, DC_HEADLIGHT_Y_OFFSET, DC_HEADLIGHT_Z_OFFSET, 1.0f }; glLightfv(GL_LIGHT0, GL_POSITION, headlight_position); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GLfloat white[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, white); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); generateBlockDisplayList(); generateGarbageExtras(); generateGarbageThinMiddleList(); generateGarbageThinCapList(); generateGarbageThickCornerList(); generateGarbageThickEdgeList(); generateGarbageThickMiddleList(); generateGarbageSmallList(); generateSparkleList(); generateSignList(); generateSwapperList(); generateExternalCandy(); generateLevelLights(); generateClock(); generateMessages(); String::readyLetterTextures(); generateNameTexture(); generateScoreRecord(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-(DC_PLAY_PIXEL_OFFSET_X / DC_PLAY_PIXEL_WIDTH + 0.5f) * DC_PLAY_WIDTH, ((1.0f - DC_PLAY_PIXEL_OFFSET_X - DC_PLAY_PIXEL_WIDTH) / DC_PLAY_PIXEL_WIDTH + 0.5f) * DC_PLAY_WIDTH, -DC_PLAY_HEIGHT * DC_CAMERA_HEIGHT_RATIO, DC_PLAY_HEIGHT * (1.0 - DC_CAMERA_HEIGHT_RATIO), 40.0, 65.0); glMatrixMode(GL_MODELVIEW); } void Displayer::gameStart ( ) { LightManager::resetHeadLight(); ScoreRecordManager::gameStart(); } void Displayer::gameFinish ( ) { CelebrationManager::gameFinish(); ScoreRecordManager::gameFinish(); } void Displayer::cleanUp ( ) { glutDestroyWindow(main_window); for (int n = DC_NUMBER_USE_GARBAGE_TEX; n--; ) if (garbage_texture_data[n] != null) { delete [] garbage_texture_data[n]; garbage_texture_data[n] = null; } for (int n = DC_NUMBER_MESSAGE_TEX; n--; ) if (message_texture_data[n] != null) { delete [] message_texture_data[n]; message_texture_data[n] = null; } if (player_rank_texture_data != null) { delete [] player_rank_texture_data; player_rank_texture_data = null; } if (MetaState::mode & CM_SOLO) for (int n = GC_SCORE_REC_LENGTH - 1; n--; ) if (record_texture_data[n] != null) { delete [] record_texture_data[n]; record_texture_data[n] = null; } if (record_texture_data != null) { delete [] record_texture_data; record_texture_data = null; } String::freeLetterTextures(); } void Displayer::reshape ( int width, int height ) { if (DC_WINDOW_PIXEL_WIDTH * height / DC_WINDOW_PIXEL_HEIGHT != width) { height = (height + width) >> 1; glutReshapeWindow(DC_WINDOW_PIXEL_WIDTH * height / DC_WINDOW_PIXEL_HEIGHT, height); } else { glViewport(0, 0, width, height); #ifdef DEVELOPMENT screen_length = width; #endif } } void Displayer::displayMeta ( ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // disables GL_BLEND internally drawExternalCandy(); drawScoreToBeatMessage(); glDisable(GL_TEXTURE_2D); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) drawLevelLights(); if (CelebrationManager::draw_game) { LightManager::timeStepInitialize(); int hold_time_step = Game::time_step; Game::time_step = MetaState::final_time_step; calculatePlayOffset(); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); LightManager::setupHeadLightMeta(); drawBlocks(); glEnable(GL_TEXTURE_2D); drawGarbage(); glDisable(GL_CULL_FACE); glDisable(GL_TEXTURE_2D); drawSwapper(); glDisable(GL_DEPTH_TEST); LightManager::resetHeadLight(); Game::time_step = hold_time_step; } if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); drawMessage(); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { drawWinRecord(); // calls glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) // internally drawCandy(); } drawScoreRecord(); glutSwapBuffers(); } void Displayer::displayPlay ( ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // calls glDisable(GL_BLEND) internally drawExternalCandy(); glDisable(GL_TEXTURE_2D); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) drawLevelLights(); if (!((Game::state & (GS_PAUSED | GS_SYNC_WAIT)) == GS_PAUSED)) { LightManager::timeStepInitialize(); calculatePlayOffset(); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); LightManager::setupHeadLightPlay(); drawBlocks(); glEnable(GL_TEXTURE_2D); drawGarbage(); glDisable(GL_CULL_FACE); glDisable(GL_TEXTURE_2D); drawSwapper(); glDisable(GL_DEPTH_TEST); LightManager::resetHeadLight(); } if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); if (!(MetaState::mode & CM_REALLY_LOW_GRAPHICS)) { drawWinRecord(); // calls glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) // internally drawCandy(); } if (!(Game::state & GS_PAUSED)) drawCountDown(); else drawMessage(); glutSwapBuffers(); } bool Displayer::checkExtension ( char *extension_name ) { char *extensions = (char *) glGetString(GL_EXTENSIONS); if (!extensions) return false; int length = strlen(extension_name); char *end = extensions + strlen(extensions); while (extensions < end) { int n = strcspn(extensions, " "); if (n == length && strncmp(extension_name, extensions, n) == 0) return true; extensions += n + 1; } return false; } #ifdef DEVELOPMENT void Displayer::screenShot ( ) { static int count = 0; GLubyte *image = new GLubyte[4 * screen_length * screen_length]; glReadPixels(0, 0, screen_length, screen_length, GL_RGBA, GL_UNSIGNED_BYTE, image); ostringstream file_name; file_name << DC_SCREEN_SHOT_FILE_NAME_BASE "_" << setw(GC_GARBAGE_TEX_NUMBER_DIGITS) << setfill('0') << count << ".tga" << ends; TextureLoader::createTGA(file_name.str().c_str(), image, screen_length, screen_length, TL_SCREEN_SHOT_TGA_ID); MESSAGE("creating " << file_name.str()); count++; if (image != null) { delete [] image; image = null; } } #endif crack-attack-1.1.14/src/sstream.h0000644000175000001440000000217110230144650016274 0ustar webbsterusers/* * GarbageQueue.cxx * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _SSTREAM_H_ #define _SSTREAM_H_ #ifndef _WIN32 # include #else # ifndef __MINGW32__ # include # else # include # endif #endif #endif crack-attack-1.1.14/src/Sine.cxx0000644000175000001440000000247110132356545016103 0ustar webbsterusers/* * Sine.cxx * Daniel Nelson - 12/3/1 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Approximates sin(x) with a table and interpolation. */ using namespace std; #include "Game.h" #include "MetaState.h" #include "Sine.h" float Sine::table[GC_SINE_TABLE_LENGTH]; void Sine::initialize ( ) { // currently only used in CM_SOLO mode if (!(MetaState::mode & CM_SOLO)) return; for (int n = GC_SINE_TABLE_LENGTH; n--; ) { float x = n * GC_SINE_TABLE_STEP_WIDTH + GC_SINE_TABLE_LOWER_BOUND; table[n] = ::sin(x); } } crack-attack-1.1.14/src/Random.cxx0000644000175000001440000000502710132356545016425 0ustar webbsterusers/* * Random.cxx * Daniel Nelson - 11/10/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Handles all the random number tables. */ #include using namespace std; #include "Game.h" #include "Random.h" Angle Random::angle_table[GC_SIZE_RANDOM_ANGLE_TABLE]; Angle Random::angle_death_spark_table[GC_SIZE_RANDOM_ANGLE_TABLE]; Angle Random::angle_celebration_spark_1_table[GC_SIZE_RANDOM_ANGLE_TABLE]; Angle Random::angle_celebration_spark_2_table[GC_SIZE_RANDOM_ANGLE_TABLE]; void Random::seed ( unsigned int seed ) /* * Called by Communicator to seed the random numbers. */ { srand(seed); } unsigned int Random::generateSeed ( ) /* * Called by Communicator if we're the server. The result is used to seed our * random numbers as well as sent to the client for theirs. */ { return (unsigned int) time(null); } void Random::initialize ( ) /* * Attack calls seed() before this. */ { for (int n = GC_SIZE_RANDOM_ANGLE_TABLE; n--; ) { float angle = (2.0f * PI) * Random::number(); angle_table[n].x = cos(angle); angle_table[n].y = sin(angle); } for (int n = GC_SIZE_RANDOM_ANGLE_TABLE; n--; ) { float angle = (PI / 4.0f) + (PI / 2.0f) * Random::number(); angle_death_spark_table[n].x = cos(angle); angle_death_spark_table[n].y = sin(angle); } for (int n = GC_SIZE_RANDOM_ANGLE_TABLE; n--; ) { float angle = (3.0f * PI / 16.0f) + (PI / 8.0f) * Random::number(); angle_celebration_spark_1_table[n].x = cos(angle); angle_celebration_spark_1_table[n].y = sin(angle); } for (int n = GC_SIZE_RANDOM_ANGLE_TABLE; n--; ) { float angle = (7.0f * PI / 16.0f) + (PI / 8.0f) * Random::number(); angle_celebration_spark_2_table[n].x = cos(angle); angle_celebration_spark_2_table[n].y = sin(angle); } } crack-attack-1.1.14/src/obj_garbage_small.cxx0000644000175000001440000001625110231337750020615 0ustar webbsterusers/* * garbage_small.cxx * Daniel Nelson - 11/12/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Generates a display list for the cute li'l purple garbage blocks. */ #include #include "glext.h" using namespace std; #include "Game.h" #include "Displayer.h" GLuint Displayer::garbage_small_list; void Displayer::generateGarbageSmallList ( ) { garbage_small_list = glGenLists(1); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glNewList(garbage_small_list, GL_COMPILE); GLfloat vertices_0[3 * 18] = { -0.8f, -0.8f, -1.0f, 0.8f, -0.8f, -1.0f, -0.8f, -1.0f, -0.8f, 0.8f, -1.0f, -0.8f, -0.8f, -1.0f, 0.8f, 0.8f, -1.0f, 0.8f, -0.8f, -0.8f, 1.0f, 0.8f, -0.8f, 1.0f, -0.8f, 0.8f, 1.0f, 0.8f, 0.8f, 1.0f, -0.8f, 1.0f, 0.8f, 0.8f, 1.0f, 0.8f, -0.8f, 1.0f, -0.8f, 0.8f, 1.0f, -0.8f, -0.8f, 0.8f, -1.0f, 0.8f, 0.8f, -1.0f, -0.8f, -0.8f, -1.0f, 0.8f, -0.8f, -1.0f }; GLfloat vertices_1[3 * 8] = { -0.8f, -0.8f, -1.0f, -1.0f, -0.8f, -0.8f, -0.8f, 0.8f, -1.0f, -1.0f, 0.8f, -0.8f, -0.8f, 1.0f, -0.8f, -1.0f, 0.8f, 0.8f, -0.8f, 1.0f, 0.8f, -0.8f, 0.8f, 1.0f }; GLfloat vertices_2[3 * 8] = { -0.8f, 0.8f, 1.0f, -1.0f, 0.8f, 0.8f, -0.8f, -0.8f, 1.0f, -1.0f, -0.8f, 0.8f, -0.8f, -1.0f, 0.8f, -1.0f, -0.8f, -0.8f, -0.8f, -1.0f, -0.8f, -0.8f, -0.8f, -1.0f }; GLfloat vertices_3[3 * 4] = { -1.0f, 0.8f, 0.8f, -1.0f, 0.8f, -0.8f, -1.0f, -0.8f, 0.8f, -1.0f, -0.8f, -0.8f }; GLfloat vertices_4[3 * 4] = { 1.0f, 0.8f, 0.8f, 1.0f, -0.8f, 0.8f, 1.0f, 0.8f, -0.8f, 1.0f, -0.8f, -0.8f }; GLfloat vertices_5[3 * 8] = { 0.8f, 1.0f, 0.8f, 1.0f, 0.8f, 0.8f, 0.8f, 1.0f, -0.8f, 1.0f, 0.8f, -0.8f, 0.8f, 0.8f, -1.0f, 1.0f, -0.8f, -0.8f, 0.8f, -0.8f, -1.0f, 0.8f, -1.0f, -0.8f, }; GLfloat vertices_6[3 * 8] = { 0.8f, -1.0f, -0.8f, 1.0f, -0.8f, -0.8f, 0.8f, -1.0f, 0.8f, 1.0f, -0.8f, 0.8f, 0.8f, -0.8f, 1.0f, 1.0f, 0.8f, 0.8f, 0.8f, 0.8f, 1.0f, 0.8f, 1.0f, 0.8f, }; GLfloat normals_0[3 * 18] = { 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f }; GLfloat normals_1[3 * 8] = { 0.0f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; GLfloat normals_2[3 * 8] = { 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f }; GLfloat normals_3[3 * 4] = { -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f }; GLfloat normals_4[3 * 4] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }; GLfloat normals_5[3 * 8] = { 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, }; GLfloat normals_6[3 * 8] = { 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, }; GLfloat tex_coords_0[3 * 18]; for (int n = 3 * 18; n--; ) tex_coords_0[n] = vertices_0[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_1[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_1[n] = vertices_1[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_2[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_2[n] = vertices_2[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_3[3 * 4]; for (int n = 3 * 4; n--; ) tex_coords_3[n] = vertices_3[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_4[3 * 4]; for (int n = 3 * 4; n--; ) tex_coords_4[n] = vertices_4[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_5[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_5[n] = vertices_5[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; GLfloat tex_coords_6[3 * 8]; for (int n = 3 * 8; n--; ) tex_coords_6[n] = vertices_6[n] * DC_GARBAGE_LIGHTMAP_COORD_CONVERTER; glVertexPointer(3, GL_FLOAT, 0, vertices_0); glNormalPointer(GL_FLOAT, 0, normals_0); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 18); glVertexPointer(3, GL_FLOAT, 0, vertices_1); glNormalPointer(GL_FLOAT, 0, normals_1); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_1); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glVertexPointer(3, GL_FLOAT, 0, vertices_2); glNormalPointer(GL_FLOAT, 0, normals_2); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_2); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glVertexPointer(3, GL_FLOAT, 0, vertices_3); glNormalPointer(GL_FLOAT, 0, normals_3); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_3); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glVertexPointer(3, GL_FLOAT, 0, vertices_4); glNormalPointer(GL_FLOAT, 0, normals_4); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_4); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glVertexPointer(3, GL_FLOAT, 0, vertices_5); glNormalPointer(GL_FLOAT, 0, normals_5); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_5); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glVertexPointer(3, GL_FLOAT, 0, vertices_6); glNormalPointer(GL_FLOAT, 0, normals_6); glTexCoordPointer(3, GL_FLOAT, 0, tex_coords_6); glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); glEndList(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } crack-attack-1.1.14/src/Displayer.h0000644000175000001440000006456610230144462016573 0ustar webbsterusers/* * Displayer.h * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * Copyright (C) 2004 Andrew Sayman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 */ #ifndef DISPLAYER_H #define DISPLAYER_H #include #include "glext.h" using namespace std; #include "Game.h" #include "Garbage.h" #include "CountDownManager.h" #include "Creep.h" #include "Spring.h" #include "WinRecord.h" // I can not find a version of glext.h which defines // GL_LIGHT_MODEL_COLOR_CONTROL and its allowed values. The // GL_LIGHT_MODEL_COLOR_CONTROL_EXT defines from OpenGL 1.1 have the same // values as their OpenGL 1.2 partiners. So, here is the work around. #ifndef _WIN32 #else #ifndef __MINGW32__ # define GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_COLOR_CONTROL_EXT # define GL_SEPARATE_SPECULAR_COLOR GL_SEPARATE_SPECULAR_COLOR_EXT # define GL_SINGLE_COLOR GL_SINGLE_COLOR_EXT #endif #endif // displayer states #define DS_MULTITEXTURING (1 << 0) // clip planes #define GL_CLIP_PLANE_PLAY_FLOOR (GL_CLIP_PLANE0) #define GL_CLIP_PLANE_SHATTERING (GL_CLIP_PLANE1) // window dimensions #define DC_WINDOW_PIXEL_WIDTH (1) #define DC_WINDOW_PIXEL_HEIGHT (1) #define DC_WINDOW_PIXEL_ASPECT_RATIO ((float) DC_WINDOW_PIXEL_WIDTH \ / DC_WINDOW_PIXEL_HEIGHT) #define DC_WINDOW_PIXEL_STARTING_HEIGHT (700) #define DC_WINDOW_PIXEL_STARTING_WIDTH (DC_WINDOW_PIXEL_WIDTH \ * DC_WINDOW_PIXEL_STARTING_HEIGHT\ / DC_WINDOW_PIXEL_HEIGHT) // play area dimensions in pixels as ratio of window size; these times the // window dimensions must have a 2:1 ratio - like the play area #define DC_PLAY_PIXEL_WIDTH (0.5f) #define DC_PLAY_PIXEL_HEIGHT (1.0f) // play area offset in pixels as ratio of window size #define DC_PLAY_PIXEL_OFFSET_X (0.4) #define DC_PLAY_PIXEL_OFFSET_Y (0.0f) // play area dimensions in GL coordinates #define DC_PLAY_WIDTH (12.0) #define DC_PLAY_HEIGHT (24.0) // camera height as a fraction of play height #define DC_CAMERA_HEIGHT_RATIO (0.25) // object offset #define DC_PLAY_OFFSET_X (1.0f - DC_PLAY_WIDTH / 2.0f) #define DC_PLAY_OFFSET_Y (-1.0f - DC_PLAY_HEIGHT \ * DC_CAMERA_HEIGHT_RATIO) #define DC_PLAY_OFFSET_Z (-42.5f) #define DC_EXTERNAL_OFFSET_Z (-42.5f) // grid element size #define DC_GRID_ELEMENT_LENGTH (2.0f) // headlight z offset #define DC_HEADLIGHT_Y_OFFSET (2.1f * DC_GRID_ELEMENT_LENGTH) #define DC_HEADLIGHT_Z_OFFSET (-35.0f) // acceleration of death rotation #define DC_DYING_ROTATE_SPEED (0.2f) // constants of death animation #define DC_DYING_FLASH_TIME (12) #define DC_DYING_SHRINK_MIN_SIZE (0.1f) #define DC_DYING_SHRINK_SPEED ((1.0f \ - DC_DYING_SHRINK_MIN_SIZE) \ / (float) (GC_DYING_DELAY \ - DC_DYING_FLASH_TIME)) #define DC_FLASH_COLOR_RED (1.0f) #define DC_FLASH_COLOR_GREEN (1.0f) #define DC_FLASH_COLOR_BLUE (1.0f) // constants of shattering animation #define DC_CLIP_SHATTER #define DC_SHATTER_TIME (GC_INITIAL_POP_DELAY) #define DC_UNSHATTER_TIME (GC_FINAL_POP_DELAY) #define DC_POP_ROTATE_TIME (4 * GC_INTERNAL_POP_DELAY / 5) #define DC_SHATTER_FLASH_TIME (DC_DYING_FLASH_TIME) // garbage lightmap constants #define DC_GARBAGE_LIGHTMAP_LENGTH (64) #define DC_GARBAGE_LIGHTMAP_MIN_LUMINANCE (0.85f) #define DC_GARBAGE_LIGHTMAP_COORD_CONVERTER (-1.0f / (DC_GRID_ELEMENT_LENGTH \ * (float) GC_PLAY_WIDTH)) #define DC_NUMBER_GARBAGE_LIGHTMAPS (6) // garbage flavor image constants #define DC_NUMBER_GARBAGE_TEX (4) #define DC_NUMBER_USE_GARBAGE_TEX (4) #define DC_GARBAGE_TEX_LENGTH (128) #define DC_CHANCE_USE_NET_TEX (5) #define DC_MIN_FLAVOR_GARBAGE_LENGTH (4) #define DC_CHANCE_NO_GARBAGE_FLAVOR (8) #define DC_GARBAGE_FLAVOR_TEX_OFFSET_Z (0.01f) #define DC_CHANCE_IN_NOT_USE_LOGO_FLAVOR_TEX (4) // general sparkle constants #define DC_SPARKLE_LENGTH (0.4f / 2.0f) #define DC_SPARKLE_TEX_LENGTH (32) // spark constants #define DC_MAX_SPARK_NUMBER (400) #define DC_SPARK_GRAVITY (0.001f) #define DC_SPARK_DRAG (0.001f) #define DC_MIN_SPARK_VELOCITY (0.02f) #define DC_MAX_SPARK_VELOCITY (0.15f) #define DC_MIN_SPARK_ANGULAR_VELOCITY (1.0f) #define DC_MAX_SPARK_ANGULAR_VELOCITY (15.0f) #define DC_MIN_SPARK_SIZE (0.4f) #define DC_MEDIUM_SPARK_LIFE_TIME (120) #define DC_SPREAD_SPARK_LIFE_TIME (50) #define DC_CHANCE_LONG_SPARK_LIFE_TIME (40) #define DC_SPARK_FADE_TIME (15) #define DC_SPARK_PULSE_TIME (6) // celebration spark constants #define DC_MIN_CSPARK_VELOCITY (0.05f) #define DC_SPREAD_CSPARK_VELOCITY (0.05f) #define DC_SOURCE_1_OFFSET_X (0.0f) #define DC_SOURCE_1_OFFSET_Y (7.0f) #define DC_SOURCE_1_SOLO_OFFSET_X (0.0f) #define DC_SOURCE_1_SOLO_OFFSET_Y (12.0f) #define DC_SOURCE_2_OFFSET_X (0.0f) #define DC_SOURCE_2_OFFSET_Y (19.0f) #define DC_SOURCE_3_OFFSET_X (10.0f) #define DC_SOURCE_3_OFFSET_Y (7.0f) #define DC_SOURCE_3_SOLO_OFFSET_X (10.0f) #define DC_SOURCE_3_SOLO_OFFSET_Y (12.0f) #define DC_SOURCE_4_OFFSET_X (10.0f) #define DC_SOURCE_4_OFFSET_Y (19.0f) #define DC_SOURCE_5_OFFSET_X (5.0f) #define DC_SOURCE_5_OFFSET_Y (4.0f) #define DC_SOURCE_5_SOLO_OFFSET_X (5.0f) #define DC_SOURCE_5_SOLO_OFFSET_Y (3.7f) // mote constants #define DC_MAX_MOTE_NUMBER (40) #define DC_MULTI_MOTE_FIRE_DELAY (25) #define DC_MOTE_COLOR_FADE_TIME (50) #define DC_MEDIUM_MOTE_VELOCITY (0.2f) #define DC_SPREAD_MOTE_VELOCITY (0.02f) #define DC_MEDIUM_MOTE_ANGULAR_VELOCITY (3.0f) #define DC_SPREAD_MOTE_ANGULAR_VELOCITY (1.0f) #define DC_MOTE_UPWARD_FORCE (0.004f) #define DC_MOTE_CENTER_SPRING (0.005f) #define DC_MOTE_TWIST_SPRING (0.0008f) #define DC_MOTE_DRAG (0.005f) // mote types #define DC_NUMBER_MOTE_LEVELS (22) #define DC_NUMBER_MOTE_TYPES (7) #define DC_FIRST_SPECIAL_MOTE_COLOR (4) #define MT_FOUR_POINTED_STAR (0) #define MT_FIVE_POINTED_STAR (1) #define MT_SIX_POINTED_STAR (2) #define MT_SPECIAL_STAR (3) #define MT_MULTIPLIER_ONE_STAR (4) #define MT_MULTIPLIER_TWO_STAR (5) #define MT_MULTIPLIER_THREE_STAR (6) // mote light constants #define DC_NUMBER_EXTRA_LIGHTS (7) #define DC_EXTRA_LIGHT_BASE (GL_LIGHT1) #define DC_MOTE_LIGHT_RANGE (DC_GRID_ELEMENT_LENGTH \ + DC_GRID_ELEMENT_LENGTH \ * 1.414214f / 2.0f) #define DC_MAX_MOTE_LIGHT_BRIGHTNESS (0.4f) #define DC_MOTE_LIGHT_OFFSET_Z (3.0f) #define DC_MOTE_LIGHT_ATTENUATION (0.1f) // sign constants #define DC_MAX_SIGN_NUMBER (25) #define DC_SIGN_LENGTH (0.33f * DC_GRID_ELEMENT_LENGTH) #define DC_SIGN_OFFSET_X (-0.5f * DC_GRID_ELEMENT_LENGTH) #define DC_SIGN_OFFSET_Y (0.5f * DC_GRID_ELEMENT_LENGTH) #define DC_SIGN_OFFSET_SPREAD (0.1f * DC_GRID_ELEMENT_LENGTH) #define DC_SIGN_HOLD_TIME (100) #define DC_SIGN_FADE_TIME (200) #define DC_SIGN_LIFE_TIME (DC_SIGN_HOLD_TIME \ + DC_SIGN_FADE_TIME) #define DC_SIGN_TERMINAL_VELOCITY (DC_GRID_ELEMENT_LENGTH / 500.0f) #define DC_SIGN_ACCELERATION_TIME (DC_SIGN_HOLD_TIME) #define DC_SIGN_ACCELERATION (DC_SIGN_TERMINAL_VELOCITY \ / (float) \ DC_SIGN_ACCELERATION_TIME) #define DC_SIGN_ALPHA (1.0f) #define DC_FINAL_INFLATE_SIZE (5.0f) // sign texture constants #define DC_NUMBER_SMALL_SIGN_SUBTEXTURES (6) #define DC_SIGN_SMALL_TEX_GRID_LENGTH_S (4) #define DC_SIGN_SMALL_TEX_GRID_LENGTH_T (2) #define DC_SIGN_SMALL_SUBTEX_LENGTH_S (32) #define DC_SIGN_SMALL_SUBTEX_LENGTH_T (32) #define DC_SIGN_SMALL_TEX_LENGTH_S (DC_SIGN_SMALL_SUBTEX_LENGTH_S \ * DC_SIGN_SMALL_TEX_GRID_LENGTH_S) #define DC_SIGN_SMALL_TEX_LENGTH_T (DC_SIGN_SMALL_SUBTEX_LENGTH_T \ * DC_SIGN_SMALL_TEX_GRID_LENGTH_T) #define DC_SIGN_SMALL_SUBTEX_COORD_S (1.0f / (float) \ DC_SIGN_SMALL_TEX_GRID_LENGTH_S) #define DC_SIGN_SMALL_SUBTEX_COORD_T (1.0f / (float) \ DC_SIGN_SMALL_TEX_GRID_LENGTH_T) #define DC_NUMBER_LARGE_SIGN_SUBTEXTURES (15) #define DC_SIGN_LARGE_TEX_GRID_LENGTH_S (4) #define DC_SIGN_LARGE_TEX_GRID_LENGTH_T (4) #define DC_SIGN_LARGE_SUBTEX_LENGTH_S (32) #define DC_SIGN_LARGE_SUBTEX_LENGTH_T (64) #define DC_SIGN_LARGE_TEX_LENGTH_S (DC_SIGN_LARGE_SUBTEX_LENGTH_S \ * DC_SIGN_LARGE_TEX_GRID_LENGTH_S) #define DC_SIGN_LARGE_TEX_LENGTH_T (DC_SIGN_LARGE_SUBTEX_LENGTH_T \ * DC_SIGN_LARGE_TEX_GRID_LENGTH_T) #define DC_SIGN_LARGE_SUBTEX_COORD_S (1.0f / (float) \ DC_SIGN_LARGE_TEX_GRID_LENGTH_S) #define DC_SIGN_LARGE_SUBTEX_COORD_T (1.0f / (float) \ DC_SIGN_LARGE_TEX_GRID_LENGTH_T) // swapper constants #define DC_SWAPPER_GRAB_LENGTH (0.2f) // external candy constants #define DC_LEFT_EXTERNAL_CENTER (-10.5f) // logo constants #define DC_LOGO_TEX_LENGTH (256) #define DC_LOGO_OFFSET_Y (13.5f) #define DC_LOGO_LENGTH (7.2f) // level lights constants #define DC_LEVEL_LIGHT_FADE_TIME (150) #define DC_LEVEL_LIGHT_IMPACT_FLASH_TIME (20) #define DC_LEVEL_LIGHT_FLASH_INFLECTION (0.9f) #define DC_LEVEL_LIGHT_DEATH_FLASH_TIME (12) #define DC_LEVEL_LIGHT_RED (0.7f) #define DC_LEVEL_LIGHT_BLUE (0.7f) #define DC_LEVEL_LIGHT_LOCAL_OFFSET_X (7.3f) #define DC_LEVEL_LIGHT_OPPONENT_OFFSET_X (-15.0f) // message constants #define DC_NUMBER_MESSAGE_TEX (10) #define DC_COUNT_DOWN_GO_INFLECTION (0.8f) #define DC_COUNT_DOWN_HEIGHT_RATIO (0.4f) #define DC_COUNT_DOWN_MAX_SCALE (7.0f) #define DC_MESSAGE_SCALE (6.0f) #define DC_SYNC_WAIT_LIGHT_LEVEL (0.75f) #define DC_MESSAGE_PULSE_PERIOD (320) // clock constants #define DC_CLOCK_TEX_LENGTH (32) #define DC_CLOCK_OFFSET_Y (-2.5f) #define DC_CLOCK_DIGIT_LENGTH (0.6f) #define DC_CLOCK_DIGIT_OFFSET (1.0f) #define DC_CLOCK_CENTER_OFFSET (0.7f) // celebration constants #define DC_CELEBRATION_FADE_TIME (200) #define DC_CELEBRATION_TIME (225) #define DC_CSPARK_SOURCE_NUMBER (5) #define DC_CSPARK_COLOR_NUMBER (5) #define DC_CSPARK_STARTING_RATE (270) #define DC_CSPARK_FULL_RATE (600) #define DC_CSPARK_LOW_RATE (150) #define DC_CSPARK_QUICK_RATE_DROP (3) #define DC_CSPARK_BOOST_CHANCE_IN (40) #define DC_CSPARK_RATE_BOOST (90) #define DC_CSPARK_COLOR_CHANGE_CHANCE_IN (5) #define DC_STARTING_WIN_SCALE (12.0f) #define DC_STARTING_LOSS_HEIGHT (9.0f * DC_GRID_ELEMENT_LENGTH) #define DC_STARTING_BOUNCE_COUNT (6) #define DC_FINAL_BOUNCE_COUNT (2) #define DC_WIN_FADE_TIME (50) #define DC_WIN_FLASH_1_TIME (8) #define DC_WIN_FLASH_2_TIME (12) #define DC_WIN_FLASH_1_CHANCE_IN (3) #define DC_WIN_FLASH_2_CHANCE_IN (6) #define DC_LOSS_GRAVITY (0.01f) #define DC_LOSS_DRAG (0.005f) #define DC_LOSS_MIN_VELOCITY (10.0f * DC_LOSS_GRAVITY) #define DC_LOSS_BOUNCE_ELASTICITY (0.5f) #define DC_LOSS_END_BOUNCE_ELASTICITY (0.1f) #define DC_WIN_MESSAGE_RED (1.0f) #define DC_WIN_MESSAGE_GREEN (0.7f) #define DC_WIN_MESSAGE_BLUE (0.9f) #define DC_LOSS_MESSAGE_RED (0.7f) #define DC_LOSS_MESSAGE_GREEN (0.2f) #define DC_LOSS_MESSAGE_BLUE (0.9f) #define DC_GAME_OVER_SCALE_RATIO (75.0f / 64.0f) // star constants #define DC_STAR_DISPLACEMENT (2.0f) #define DC_STAR_OFFSET_X (DC_LEFT_EXTERNAL_CENTER \ - DC_STAR_DISPLACEMENT \ * (GC_GAMES_PER_MATCH - 1) / 2.0f) #define DC_STAR_OFFSET_Y (0.5f) #define DC_STAR_PLAY_ANGULAR_VELOCITY (1.0f) #define DC_STAR_WIN_MIN_ANGULAR_DEVIATION (180.0f) #define DC_STAR_WIN_SPREAD_ANGULAR_DEVIATION (180.0f) #define DC_STAR_WIN_OFFSET_X (0.0f) #define DC_STAR_WIN_OFFSET_Y (13.0f) #define DC_STAR_WIN_SOLO_OFFSET_Y (17.5f) #define DC_STAR_WIN_PRESET_1_VELOCITY_X (0.5f) #define DC_STAR_WIN_PRESET_1_VELOCITY_Y (-0.25f) #define DC_STAR_WIN_PRESET_2_VELOCITY_X (-0.3f) #define DC_STAR_WIN_PRESET_2_VELOCITY_Y (0.35f) #define DC_STAR_WIN_MIN_VELOCITY (0.2f) #define DC_STAR_WIN_SPREAD_VELOCITY (0.2f) #define DC_STAR_SIZE_EQUILIBRIUM (5.0f) #define DC_STAR_WIN_SIZE_SPRING (0.1f) #define DC_STAR_WIN_SIZE_DRAG (0.05f) #define DC_STAR_WIN_SIZE_EPSILON (0.00005f) #define DC_STAR_WIN_SIZE_PULSE_CHANCE_IN (100) #define DC_STAR_WIN_SIZE_PULSE_VELOCITY (1.0f) #define DC_STAR_WIN_ANGULAR_SPRING (0.0001f) #define DC_STAR_WIN_KICK_DELAY (100) #define DC_STAR_WIN_SPRING (0.0025f) #define DC_STAR_WIN_DRAG (0.04f) #define DC_STAR_WIN_EPSILON (0.01f) #define DC_STAR_WIN_VELOCITY_EPSILON (0.01f) #define DC_STAR_WIN_RED (0.85f) #define DC_STAR_WIN_GREEN (0.85f) #define DC_STAR_WIN_BLUE (0.0f) #define DC_STAR_UNPLAYED_RED (0.4f) #define DC_STAR_UNPLAYED_GREEN (0.4f) #define DC_STAR_UNPLAYED_BLUE (0.7f) #define DC_STAR_LOST_ALPHA (0.4f) #define DC_SOLO_STAR_ID (1) // name constants #define DC_NAME_OFFSET_Y (7.0f) #define DC_NAME_SCALE (4.4f) #define DC_LETTER_TEX_LENGTH (32) #define DC_NAME_TEX_LENGTH_S (256) #define DC_NAME_TEX_LENGTH_T (128) #define DC_FONT_NUMBER (1) #define DC_FONT_COLOR_NUMBER (10) #define DC_LETTER_NUMBER (86) #define DC_BACK_SPACE_WIDTH (5) #define DC_SPACE_WIDTH (10) #define DC_DEFAULT_FONT_COLOR (0) #define DC_VS_STRING "vs" // xtreme constants #define DC_GLEAM_PERIOD (64) #define DC_GLEAM_ROTATION_RATE (1.0f / 8.0f) #define DC_GLEAM_ROTATION_AXIS_X (1.0f / 3.741657f) #define DC_GLEAM_ROTATION_AXIS_Y (2.0f / 3.741657f) #define DC_GLEAM_ROTATION_AXIS_Z (3.0f / 3.741657f) // score record constants #define DC_SCORE_TO_BEAT_MESSAGE "Score to Beat:" #define DC_SCORE_TO_BEAT_SCALE (4.9f) #define DC_SCORE_TO_BEAT_TEX_LENGTH_S (256) #define DC_SCORE_TO_BEAT_TEX_LENGTH_T (128) #define DC_SCORE_REC_TEX_LENGTH_S (512) #define DC_SCORE_REC_RANK_STRING_TEX_WIDTH (45) #define DC_SCORE_REC_RANK_TEX_MARGIN (85) #define DC_SCORE_REC_RANK_MIN_SPACE DC_SPACE_WIDTH #define DC_SCORE_REC_NUMBER_DRAW (7) #define DC_SCORE_REC_START_VELOCITY (0.6f) #define DC_SCORE_REC_RANK_HEIGHT (3.4f) #define DC_SCORE_REC_SPRING (0.01f) #define DC_SCORE_REC_SPRING_DRAG (0.05f) #define DC_SCORE_REC_EDGE_BOUNCE_ELASTICITY (0.8f) #define DC_SCORE_REC_VELOCITY_CUTOFF (0.001f) #define DC_SCORE_REC_OFFSET_CUTOFF (0.001f) #define DC_SCORE_REC_CONTROL_VELOCITY_CUTOFF (0.1f) #define DC_SCORE_REC_CONTROL_OFFSET_CUTOFF (0.1f) #define DC_SCORE_REC_BOUNCE_VELOCITY_CUTOFF (0.01f) #define DC_SCORE_REC_CONTROL_VELOCITY (0.1f) #define DC_SCORE_REC_CONTROL_DRAG (0.1f) #define DC_SCORE_REC_CIRCLE_SCALE (6.0f) #define DC_SCORE_REC_Y_OFFSET (8.0f) #define DC_SCORE_REC_SCALE_X (9.8f) #define DC_SCORE_REC_SCALE_Y (4.78f) #define DC_SCORE_REC_RANK_DRAW_HEIGHT (2.0f) // losebar constants #define DC_LOSEBAR_OFFSET_Y (3.0f) #define DC_LOSEBAR_FADE_TIME (20) #define DC_LOSEBAR_TEX_LENGTH_S (128) #define DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S (128 - 2) #define DC_LOSEBAR_TEX_LENGTH_T (16) #define DC_LOSEBAR_LENGTH (7.0f) #define DC_LOSEBAR_HEIGHT (DC_LOSEBAR_LENGTH \ * DC_LOSEBAR_TEX_LENGTH_T \ / \ DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S) #define DC_LOSEBAR_FADE_LENGTH (2.0f) #define DC_LOSEBAR_FADE_TEX_LENGTH (DC_LOSEBAR_FADE_LENGTH \ / (float) DC_LOSEBAR_LENGTH) #define DC_LOSEBAR_ANTIALIAS_LENGTH (4) #define DC_LOSEBAR_END_RATIO (0.5f * DC_LOSEBAR_TEX_LENGTH_T \ / \ DC_LOSEBAR_TEX_EFFECTIVE_LENGTH_S) #define DC_LOSEBAR_LIGHT_VECTOR_X (-1.0f / SQRT_3) #define DC_LOSEBAR_LIGHT_VECTOR_Y (1.0f / SQRT_3) #define DC_LOSEBAR_LIGHT_VECTOR_Z (1.0f / SQRT_3) #define DC_LOSEBAR_LIGHT_SPECULAR_POWER (0.45f) #define DC_LOSEBAR_LIGHT_AMBIENT_RATIO (0.5f) #define DC_LOSEBAR_INACTIVE_RED (0.0f) #define DC_LOSEBAR_INACTIVE_GREEN (0.0f) #define DC_LOSEBAR_INACTIVE_BLUE (1.0f) #define DC_LOSEBAR_LOW_ALERT_RED (0.8f) #define DC_LOSEBAR_LOW_ALERT_GREEN (0.0f) #define DC_LOSEBAR_LOW_ALERT_BLUE (0.8f) #define DC_LOSEBAR_HIGH_ALERT_RED (1.0f) #define DC_LOSEBAR_HIGH_ALERT_GREEN (0.0f) #define DC_LOSEBAR_HIGH_ALERT_BLUE (0.0f) // screen shot constants #define DC_SCREEN_SHOT_FILE_NAME_BASE "screen_shot" class Block; class Sign; /* static */ class Displayer { public: static void initialize ( int width, int height ); static void gameStart ( ); static void gameFinish ( ); static void cleanUp ( ); static void reshape ( int width, int height ); static void displayPlay ( ); static void displayMeta ( ); static void readyCountDownDisplay ( int state ); static void nextCountDownDisplay ( int state ); static void freeCountDownDisplay ( ); static void readyMessage ( int message ); static void nextMessage ( int message ); static void freeMessage ( ); static void rerankScoreRecord ( ); static void generateScoreRankTexture ( int rank, int score, const char *name, GLubyte *texture ); #ifdef DEVELOPMENT static void screenShot ( ); #endif static GLfloat play_offset_y; static int message_shape[DC_NUMBER_MESSAGE_TEX]; static const GLfloat mote_light_colors[7][3]; static GLuint garbage_texture; static GLubyte *garbage_texture_data[DC_NUMBER_USE_GARBAGE_TEX]; static GLuint score_to_beat_texture; static GLuint record_textures[DC_SCORE_REC_NUMBER_DRAW]; static GLubyte **record_texture_data; static GLubyte *player_rank_texture_data; private: static void drawBlocks ( ); static void drawGarbage ( ); static void drawCandy ( ); static void drawSwapper ( ); static void drawExternalCandy ( ); static void drawLevelLights ( ); static void drawMessage ( ); static void drawClock ( ); static void drawWinRecord ( ); static void drawCountDown_inline_split_ ( ); static inline void drawCountDown ( ) { if (CountDownManager::state == -1) return; if (Game::state & GS_PAUSED) return; drawCountDown_inline_split_(); } static void drawScoreToBeatMessage_inline_split_ ( ); static inline void drawScoreToBeatMessage ( ) { if (!(MetaState::mode & CM_SOLO)) return; if (!(MetaState::state & MS_BOTH_KEY_WAIT)) return; drawScoreToBeatMessage_inline_split_(); } static void drawScoreRecord_inline_split_ ( ); static inline void drawScoreRecord ( ) { if (!(MetaState::mode & CM_SOLO)) return; if (!(MetaState::state & MS_GAME_OVER_KEY_WAIT)) return; if (!WinRecord::won) return; if (Game::time_step < DC_WIN_FADE_TIME) return; drawScoreRecord_inline_split_(); } static void drawBlock ( Block &block, bool special ); static void drawSign ( Sign &sign, int texture ); static void drawTriangle ( float a_x, float a_y, float a_z, float b_x, float b_y, float b_z, float c_x, float c_y, float c_z ); static void drawDigit ( GLfloat alpha ); static void drawLeftBar ( GLfloat b, GLfloat t, GLfloat color[3] ); static void drawRightBar ( GLfloat b, GLfloat t, GLfloat color[3] ); static void drawCenterBar ( GLfloat b, GLfloat t, GLfloat color1[3], GLfloat color2[3] ); static void drawFullBar ( GLfloat color[3] ); static void copyRecordSubTexture ( GLubyte *texture, GLubyte *subtexture, int subtex_width, int s_location, int copy_width ); static void setWildBlockColor ( Block &block, float flash ); static inline void calculatePlayOffset ( ) { play_offset_y = DC_PLAY_OFFSET_Y + Creep::creep * (DC_GRID_ELEMENT_LENGTH / (float) GC_STEPS_PER_GRID) + Spring::y; } static bool checkExtension ( char *extension_name ); static void generateBlockDisplayList ( ); static void generateGarbageExtras ( ); static void generateGarbageThinCapList ( ); static void generateGarbageThinMiddleList ( ); static void generateGarbageThickCornerList ( ); static void generateGarbageThickEdgeList ( ); static void generateGarbageThickMiddleList ( ); static void generateGarbageSmallList ( ); static void generateSparkleList ( ); static void generateSignList ( ); static void generateSwapperList ( ); static void generateExternalCandy ( ); static void generateLevelLights ( ); static void generateMessages ( ); static void generateClock ( ); static void generateNameTexture ( ); static void generateScoreRecord ( ); static GLuint block_list; static GLuint small_block_list; static GLuint special_block_list; static GLuint garbage_thin_cap_list; static GLuint garbage_thin_middle_list; static GLuint garbage_thick_corner_list; static GLuint garbage_thick_edge_list; static GLuint garbage_thick_middle_list; static GLuint garbage_small_list; static GLuint garbage_flavor_list; static GLuint sparkle_list; static GLuint sign_small_list; static GLuint sign_large_list; static GLuint swapper_list; static GLuint logo_list; static GLuint level_light_list; static GLuint message_1x1_list; static GLuint message_2x1_list; static GLuint message_4x1_list; static GLuint message_16x1_list; static GLuint special_block_lightmap; static GLuint garbage_lightmap; static GLuint mote_textures[DC_NUMBER_MOTE_TYPES]; static GLuint spark_texture; static GLuint sign_small_texture; static GLuint sign_large_texture; static GLuint logo_texture; static GLuint message_texture; static GLuint clock_digit_textures[11]; static GLuint name_texture; static GLuint losebar_texture; static int state; static int main_window; static bool opengl_version_1_2; static GLenum rescale_method; static GLsizei message_width[DC_NUMBER_MESSAGE_TEX]; static GLsizei message_height[DC_NUMBER_MESSAGE_TEX]; static GLfloat message_alpha[DC_MESSAGE_PULSE_PERIOD]; static GLubyte *message_texture_data[DC_NUMBER_MESSAGE_TEX]; static const GLfloat block_colors[BF_NUMBER][3]; static const GLfloat garbage_colors[GF_NUMBER][3]; #ifndef NO_MULTITEXTURING # ifndef _WIN32 # else # ifndef __MINGW32__ static PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; static PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; # endif # endif #endif #ifdef DEVELOPMENT static GLint screen_length; #endif }; #endif crack-attack-1.1.14/src/CountDownManager.cxx0000644000175000001440000000445510232470141020412 0ustar webbsterusers/* * CountDownManager.cxx * Daniel Nelson - 10/27/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Very simple, but I need somewhere to put this code. */ #include "Game.h" #include "CountDownManager.h" #include "MessageManager.h" #include "Displayer.h" #ifdef AUDIO_ENABLED #include "Sound.h" #include "Music.h" #endif using namespace std; int CountDownManager::state; int CountDownManager::start_pause_alarm; int CountDownManager::message_switch_alarm; void CountDownManager::gameStart ( ) { start_pause_alarm = GC_START_PAUSE_DELAY; message_switch_alarm = GC_START_PAUSE_DELAY / 3; state = 3; MessageManager::readyMessage(state); #ifdef AUDIO_ENABLED Music::fadeout( 3000 ); #endif } void CountDownManager::cleanUp ( ) { if (state != -1) MessageManager::freeMessage(); } void CountDownManager::timeStep_inline_split_ ( ) { if (start_pause_alarm) start_pause_alarm--; if (message_switch_alarm == 30) { #ifdef AUDIO_ENABLED Sound::play( GC_SOUND_COUNTDOWN, 1 + state * 3 ); #endif } if (--message_switch_alarm == 0) { if (--state == -1) { MessageManager::freeMessage(); message_switch_alarm = 0; } else if (state == MS_COUNT_DOWN_GO) { MessageManager::freeMessage(); MessageManager::readyMessage(MS_COUNT_DOWN_GO); #ifdef AUDIO_ENABLED Music::stop(); Music::play(); #endif message_switch_alarm = GC_START_PAUSE_DELAY / 3; } else { MessageManager::nextMessage(state); message_switch_alarm = GC_START_PAUSE_DELAY / 3; } } } crack-attack-1.1.14/src/BlockManager.cxx0000644000175000001440000001141210132356545017525 0ustar webbsterusers/* * BlockManager.cxx * Daniel Nelson - 8/24/0 * * Copyright (C) 2000 Daniel Nelson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Daniel Nelson - aluminumangel.org * 174 W. 18th Ave. * Columbus, OH 43210 * * Allocates and frees blocks. */ using namespace std; #include "Game.h" #include "BlockManager.h" #include "ComboTabulator.h" #include "Random.h" #include "X.h" int BlockManager::block_count; Block BlockManager::blockStore[GC_BLOCK_STORE_SIZE]; bool BlockManager::storeMap[GC_BLOCK_STORE_SIZE]; int BlockManager::last_flavor_a, BlockManager::second_to_last_flavor_a; int BlockManager::last_flavor_c, BlockManager::second_to_last_flavor_c; int BlockManager::last_row_a[GC_PLAY_WIDTH]; int BlockManager::second_to_last_row_a[GC_PLAY_WIDTH]; int BlockManager::last_row_c[GC_PLAY_WIDTH]; int BlockManager::second_to_last_row_c[GC_PLAY_WIDTH]; int BlockManager::special_block_location; int BlockManager::next_pop_direction; void BlockManager::gameStart ( ) { block_count = 0; for (int n = GC_BLOCK_STORE_SIZE; n--; ) { storeMap[n] = false; blockStore[n].id = n; } last_flavor_a = second_to_last_flavor_a = 0; last_flavor_c = second_to_last_flavor_c = 0; for (int x = GC_PLAY_WIDTH; x--; ) { last_row_a[x] = 0; second_to_last_row_a[x] = 0; last_row_c[x] = 0; second_to_last_row_c[x] = 0; } next_pop_direction = (1 << 0); special_block_location = -1; } void BlockManager::newAwakingBlock ( int x, int y, int pop_delay, int awake_delay, ComboTabulator *combo, int pop_color ) { int flavor; do { flavor = Random::number(BF_NUMBER_NORMAL); } while ((flavor == last_flavor_a && last_flavor_a == second_to_last_flavor_a) || (flavor == last_row_a[x] && last_row_a[x] == second_to_last_row_a[x])); second_to_last_row_a[x] = last_row_a[x]; last_row_a[x] = flavor; second_to_last_flavor_a = last_flavor_a; last_flavor_a = flavor; newBlock(x, y, flavor, pop_delay, awake_delay, combo, pop_color); } void BlockManager::newCreepBlock ( int x ) { int flavor = 0; if (x != special_block_location) { do flavor = Random::number(BF_NUMBER_NORMAL); while ((flavor == last_flavor_c && last_flavor_c == second_to_last_flavor_c) || (flavor == last_row_c[x] && last_row_c[x] == second_to_last_row_c[x])); second_to_last_row_c[x] = last_row_c[x]; last_row_c[x] = flavor; second_to_last_flavor_c = last_flavor_c; last_flavor_c = flavor; } else { int base_flavor = 0; if (!(MetaState::mode & CM_X)) { if ((BF_GRAY == last_flavor_c && last_flavor_c == second_to_last_flavor_c) || (BF_GRAY == last_row_c[x] && last_row_c[x] == second_to_last_row_c[x])) do flavor = Random::number(BF_NUMBER_NORMAL); while ((flavor == last_flavor_c && last_flavor_c == second_to_last_flavor_c) || (flavor == last_row_c[x] && last_row_c[x] == second_to_last_row_c[x])); else flavor = BF_GRAY; base_flavor = flavor; } else { do { switch (Random::number(10)) { case 0: case 1: case 2: base_flavor = flavor = BF_GRAY; break; case 3: case 4: case 5: case 6: base_flavor = mapSpecialColorFlavorToColor(flavor = Random::number(BF_NUMBER_NORMAL) + BF_SPECIAL_COLOR_1); if (!X::specialColorAllowed()) flavor = base_flavor; break; case 7: case 8: if (X::wildAllowed()) base_flavor = flavor = BF_WILD; else base_flavor = flavor = BF_GRAY; break; case 9: if (Random::chanceIn2(2)) flavor = BF_BLACK; else flavor = BF_WHITE; base_flavor = mapFlavorToBaseFlavor(flavor); break; } } while ((base_flavor == last_flavor_c && last_flavor_c == second_to_last_flavor_c) || (base_flavor == last_row_c[x] && last_row_c[x] == second_to_last_row_c[x])); } second_to_last_row_c[x] = last_row_c[x]; last_row_c[x] = base_flavor; second_to_last_flavor_c = last_flavor_c; last_flavor_c = base_flavor; } newBlock(x, 0, flavor); } crack-attack-1.1.14/src/Music.cxx0000644000175000001440000001065210232515604016257 0ustar webbsterusers/* * Music.cxx * Miguel ngel Vilela Garca - 8/29/03 * * Copyright (C) 2003 Miguel ngel Vilela Garca * Copyright (C) 2005 See COPYRIGHT * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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. * * Miguel ngel Vilela Garca - www.miguev.net */ #include "TextureLoader.h" #include "Random.h" #include "Sound.h" #include "Music.h" Mix_Music *music = NULL; int music_available = 0; int keep_playing = 0; int current_track = 0; vector music_filelist; char *music_filename; string music_dirname; dirent *music_dirent; DIR *music_dir; void Music::initialize ( ) { if (!Sound::audio_available()) return; char tmp_music_dirname[256]; TextureLoader::buildLocalDataFileName("music/", tmp_music_dirname); music_dirname = string( tmp_music_dirname ); if ( (music_dir = opendir( music_dirname.c_str() ) ) == NULL ) { char *another_dir = GC_DATA_DIRECTORY("music/"); music_dirname = string( another_dir ); } if ( (music_dir = opendir( music_dirname.c_str() ) ) == NULL ) { cout << "WARNING *** Unable to open music directory!" << endl; return; } #ifndef NDEBUG cout << "Music dir: " << music_dirname.c_str() << endl; #endif while ( music_dirent = readdir ( music_dir ) ) { music_filename = music_dirent->d_name; if ( ( music_filename == string( GC_MUSIC_GAME_TRACK ) ) ) { music_filelist.clear(); music_filelist.push_back( music_dirname + string( music_filename ) ); #ifndef NDEBUG cout << "Added music file: " << music_filename << endl; #endif break; } if ( ( music_filename == string( "." ) ) || ( music_filename == string( ".." ) ) || ( music_filename == string( GC_MUSIC_PRELUDE_TRACK ) ) || ( music_filename == string( GC_MUSIC_GAMEOVER_TRACK ) ) || ( music_filename == string( GC_MUSIC_YOUWIN_TRACK ) ) ) continue; music_filelist.push_back( music_dirname + string( music_filename ) ); #ifndef NDEBUG cout << "Added music file: " << music_filename << endl; #endif } closedir( music_dir ); music_available = music_filelist.size(); } void Music::play( ) { if ( !music_available ) return; current_track = Random::number( music_filelist.size() ); #ifndef NDEBUG cout << "Playing " << music_filelist[current_track].c_str() << endl; #endif music = Mix_LoadMUS( music_filelist[current_track].c_str() ); Mix_VolumeMusic( MIX_MAX_VOLUME / 4 ); Mix_PlayMusic( music , 0 ); Mix_HookMusicFinished(Music::finished); keep_playing = 1; } void Music::play_prelude( ) { Music::play_track( GC_MUSIC_PRELUDE_TRACK ); } void Music::play_game( ) { Music::play_track( GC_MUSIC_GAME_TRACK ); } void Music::play_gameover( ) { Music::play_track( GC_MUSIC_GAMEOVER_TRACK ); } void Music::play_youwin( ) { Music::play_track( GC_MUSIC_YOUWIN_TRACK ); } void Music::play_track( char *track ) { string Track = string( music_dirname.c_str() ); Track.append( string( track ) ); if ( !music_available ) return; #ifndef NDEBUG cout << "Playing " << Track.c_str() << endl; #endif music = Mix_LoadMUS( Track.c_str() ); Mix_VolumeMusic( MIX_MAX_VOLUME / 4 ); Mix_PlayMusic( music , 0 ); keep_playing = 0; } void Music::finished( ) { Mix_HaltMusic(); if ( keep_playing ) Music::play(); } void Music::pause( ) { if ( !Mix_PlayingMusic() ) return; Mix_PauseMusic(); } void Music::resume( ) { if ( !Mix_PlayingMusic() ) return; Mix_ResumeMusic(); } void Music::stop( ) { if ( !Mix_PlayingMusic() ) return; keep_playing = 0; Mix_HaltMusic(); } void Music::fadeout( int ms ) { if ( !Mix_PlayingMusic() ) return; keep_playing = 0; Mix_FadeOutMusic(ms); } void Music::cleanup ( ) { Mix_FreeMusic( music ); music = NULL; } crack-attack-1.1.14/src/GarbageQueue.h0000644000175000001440000000273110221442402017151 0ustar webbsterusers/* * GarbageQueue.h * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GARBAGE_QUEUE_H #define _GARBAGE_QUEUE_H #include "GarbageQueueElement.h" #include using namespace std; class GarbageQueue { public: GarbageQueue(); ~GarbageQueue(); void add ( int height, int width, int flavor ); void add ( GarbageQueueElement &element ); int height ( ); int specialHeight ( ); void reset ( ); int removeWithSpecials ( ); void sendToGenerator ( ); private: int cached_height; std::vector garbage_queue; int removeToFirst ( int flavor ); }; #endif crack-attack-1.1.14/src/ActionRecorder.cxx0000644000175000001440000000342310234000015020063 0ustar webbsterusers/* * ActionRecorder.cxx * * Crack Attack! is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT file * distributed with this source distribution for a full listing. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "TextureLoader.h" using namespace std; #include "ActionRecorder.h" std::vector ActionRecorder::actions; struct offset_subtract : public unary_function< Action, void > { offset_subtract(int b) : base(b) {} int base; void operator() (Action act) { act.time_step -= base; } }; void ActionRecorder::gameFinish ( ) { char file_name[256]; if(actions.size()==0) return; int base_ts = actions[0].time_step; for(size_t i = 0; i < actions.size(); ++i) { actions[i].time_step -= base_ts; } TextureLoader::buildLocalDataFileName(GC_REPLAY_FILE_NAME, file_name); ofstream mult(file_name); if(!mult.fail()) { size_t size = actions.size(); for (size_t i=0; i < size; ++i) { mult << actions[i].name << "\n" << actions[i].time_step << endl; } mult.close(); } } crack-attack-1.1.14/NEWS0000644000175000001440000000000010233014271014340 0ustar webbsteruserscrack-attack-1.1.14/data/0000755000175000001440000000000010241200035014556 5ustar webbsteruserscrack-attack-1.1.14/data/font0_gt.tga0000644000175000001440000001007410132356545017016 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2q8UUUUU8888qUU8qUUUU8crack-attack-1.1.14/data/font0_lt.tga0000644000175000001440000001007410132356545017023 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UqUq8UUUqUU88U88qUUqUqqUqU8Ucrack-attack-1.1.14/data/font0_mn.tga0000644000175000001440000001007410132356545017016 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.28qUU8UUqUUUUUUUUUUUUcrack-attack-1.1.14/data/count_down_1.tga0000644000175000001440000020007410132356544017675 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2U88UqU8qUU8Uq88qUU88qU8qqUq8qUUUUUUUUqUUUUU8UUUUUUUqUU8UUUUUUUUUUUUU8qUUUUU8qqq8qq8UqUUUUqUUUUUUU8UUUUUUqqUUUcrack-attack-1.1.14/data/count_down_2.tga0000644000175000001440000020007410132356544017676 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUUUUUUq8UqqqUqqqU8qqUq8UqUUqU8UqqUq8U8UqUUqU8UUqUqUUqU8Uq8q8UqU8qUq88q8UqUU8UUU8UUUUqUqqqUqUUqq8UUq8UUU88qUq8qU8q88UqUUq8UUUU8qUU8q8qq8UUUUUUqUUqqUUUUUUUUUUqUUUUUUUUUUqUUUU8UUcrack-attack-1.1.14/data/count_down_3.tga0000644000175000001440000020007410132356544017677 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUUUUUUUUUUUUUUUUqU8qU88U8U8UqqqUUUU8qUUUUUUUUq88UUqq88q8UUUq88U8qUU8UUq8U8qqqU8Uq8UqUUqUUUUU8qUq88q88qqUU8UqUUUU88qqU8qUU8qUU8UqU8UUUU8UqUUUqU88qUq8qU8U8qU8qUq8q888UqUUU8UUUUUq8UU8qUUqUU8U8qUUqqUUUqq88UUqqU8UUUUUUUUUUUUUcrack-attack-1.1.14/data/font0_pd.tga0000644000175000001440000001007410132356545017007 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUUqq8qUUUUUU8U888qUU8Uq8U8qq8qq88qqUqqUUUU8U8qq8UqUqUUUUUqUUcrack-attack-1.1.14/data/font0_pe.tga0000644000175000001440000001007410132356545017010 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2U88UUqqq8Ucrack-attack-1.1.14/data/font0_pl.tga0000644000175000001440000001007410132356545017017 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.288U8Uqqqqq88q8UUUUUUUUUU8UU8qU8qU8q88crack-attack-1.1.14/data/message_loser.tga0000644000175000001440000100007410132356545020126 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.28U88UqUU8U8UqU8qUUUUUUqU88qqqqUUqq88UqU88qqUqq8UUqUUUUUq8q8qUUUqUUU8qqqUUqUqq8UUU8U8UqUqUUUUUUqUUqUqUqU8UU8UUUUUUUUUUUUUqUUUU8UUqUUUU8UUUqUq8UUqqqU88UUq8qqU8q8UqUUUqqU88UUUUUUUU8UqUUUUqUUUUUqUU8UUUUU8U8U8UU8UUU8U8UqUUqUUU8Uq8UUUU8UUU88UUUUUqqU8qUUUU8UUUUUqU8UUU8qUUUUqUUUUU888UqUq8UUUUUUUUUUUU8U8qqUU88UUU88UUqUUUU8qUqq8U8UUqqUqU8U8U8U88qUq8qUUU8U88Uq8U88UUUqUUUqUq8UUqUUUUUq8q88UUUUUqUUUUUUUUUUqUU8U8Uq8UU8qU8UqUUUUU8U8UU8UUU8qUUqUUUqqUUU8UUUq8q8UUUUUU8UUU8qU8UUUUUUqUUUUUUqqU8UqUUU8Uq8U8U8UUqUUq8UUUU8UU88U8qUq88UUqq8qq8UqqUUUqqU8qUUqUqUqU8U888UUUqUUUqqU8Uq88qqU88qUUqUUUUUUUUqU8Uq8UqUqqUU88UUUUUqqUUUqUUcrack-attack-1.1.14/data/font0_pr.tga0000644000175000001440000001007410132356545017025 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUUqU888qUUUUUUUU88U8qqU8Ucrack-attack-1.1.14/data/font0_ps.tga0000644000175000001440000001007410132356545017026 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2qUUUqqUqqUUUq88UUUU8U8UU8UUUqU8UqqUqUUq888UUU8U8UUq88U8qcrack-attack-1.1.14/data/clock_extra.tga0000644000175000001440000001007410132356544017573 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.28UUqUqUUUUUq8q8q8UUqUqUUUUUq8q8qcrack-attack-1.1.14/data/garbage_flavor_000.tga0000644000175000001440000020007410132356545020617 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2fffqqq UUUsss lllnZZZDDD444---***///???TTTgggwwwuuu4XXX<<<---......///////////////...---000LLLqqqSwww TTT000---....../////////000000000000//////---,,,,,,IIIvvv:ggg...,,,---......//////000000000000000000000//////...,,,+++(((bbbyyyOOO***,,,---.../////////000000000000111111111000000///...---,,,+++!!!NNNsss www1:::***,,,---....../////////000000000111111111222111000//////---,,,+++***!!!FFFsss uuu?111)))+++,,,------.........//////000111666???JJJQQQFFF777000...---,,,+++)))(((OOOyyy*111''')))***+++,,,,,,,,,---------...///333>>>QQQkkksssJJJ333---+++***)))((('''%%%gggBBB###&&&((())))))*********++++++++++++,,,---000666===GGGFFF888...+++***((('''&&&%%%$$$!!!///ffflllq"""%%%&&&''''''((((((((()))))))))***+++,,,,,,,,,,,,------,,,***)))((('''&&&%%%$$$""" kkkrGGG ###$$$%%%%%%&&&&&&&&&'''(((***,,,///111111///,,,))))))(((((('''&&&%%%$$$###"""!!!OOOUUU(((!!!"""###$$$$$$%%%%%%&&&(((+++///444888888333---)))(((''''''&&&%%%$$$###"""!!!333www  !!!"""######$$$$$$&&&(((,,,222888======777///)))'''&&&&&&%%%%%%$$$"""!!! uuu? !!!""""""###$$$%%%(((,,,222999>>>>>>888000)))&&&&&&&&&%%%$$$###"""!!!UUUuuu? !!!""""""###%%%''',,,222888>>>>>><<HNR222111;;;!!!###"""!!! ???DDDܛBBB###xxx.?FOPEM```!!!######""" @@@IIIWWW d4>ELQO=@Aa4Q] '''!!!"""###""" ???LLL2Ug.:?DKQSPMJFA=N~9EK !!!""""""!!!;;;OOOCfyW7:=BHQTSPMJIGFDA><8."@N!!!!!!"""!!!888QST l147;@FOVVSOKJGFDB?<9630"BT""""""!!! 666Wly&/48>CJSWVQMIGEB?;73/,)(%~"""###""" ...Hi}$/4:@DLW\XRLHDA<71,($" |z!!#$###""" """9d~!-4:?CKV\YQHB=83-%zia`ep d"""###"""!!!Lmq+28>>111...---+++)))&&&###888UUUwww'''!!! }}}}}}}}}}}}mmmIII444...---,,,***((($$$fffUUU"""!!!EEExxxSSS999000---,,,+++)))&&&"""888qqq ttt;######}}}\\\???111...---+++)))'''$$$RRRNNN$$$```cccDDD333...---,,,***(((%%%"""gggvvv:+++~~~fffHHH666///---,,,***)))&&&$$$vvv7OOO&&&bbbHHH777///---,,,+++)))'''$$$!!!&&&vvv4yyy($$$666]]]GGG777///---,,,+++***(((&&&###kkk_]]]"""%%%[[[AAA555///---,,,+++***(((&&&### WWWUUUqqq ///"""FFF999222...,,,++++++***(((&&&$$$ 777ivvvqqqZ... """>>>///---,,,+++***)))((('''%%%!!! CiiisssM GGG,,,++++++******)))(((&&&$$$!!! 9OOOzzz###555******))))))((('''&&&$$$!!!!!!>>DDD666&&& ```MMM###EEE???///!!! xxx&QQQbbb333444EEE999))) 888bbb <<<AAABBB333$$$ bbbppp]:::ttt```(((FFF<<<--- {{{www333PPP;;;DDD666''' ;;;$$$===DDD@@@000""" bbb444333???111EEE999*** www III 555???AAA333%%% 444YYY111wwwkkk$$$BBB;;;---  <<<eee)))xxx###444@@@555''' 333o#u| ```///;;;///""" &&&wxy h?LH &1000QQQ OOOaaa777 g24?X2+++^^^ """%%%SSS yt1006MK;Q;;;:::  Y/001@U*///fff>>>fff|43///07P=8M DDD444>>>555888""" uuu |rqiu~8e.////2FJ$777xxxWWW111LLL[[[dddbbbRRR666yyyu49>B@..././0;O3 *9RRR[INMJM8G,,,DDDUUUWWWNNN222 wwwc-/020-././//3JAe555=FA=:7Jd000AAACCC<<<...""" X-.//.,-.//./0@J+" ooog<=6310So999iii{{{PPP  (7AX ---Q-../.,--..../6L8HcCCCR8530.,!o ;;;KKKBZ&')8I:::Y,-.--,,--.../0EC# <631/,*(Hb   f(*-,_FFFc,----,,--..-./:I/ (7-42/-+)'$~^%%%(((1D"w%'*,-$QQQ~/M,---,,-,,----/2H;Y{ (20.,)'%#z!sg>U "."*! "-Ww!t#y%(*,-+ a___{||B~b}MM~+~?oa=.-----,-,,----./?D( )1/-*(&$}!w qjhgikm p!t#z%'*,-09AFffc[[XOPl{xv=/.//.-------,,----/5H47L +/.,*'%#|!vojgghjmp!u#|&(*,.19BHID?;9878:;hvvw fggF+,--..-,-,--,,,,,--.0D= r<<<+.-+)'%#{ tnjhghjn r!w$~&(*,.135654322223442b|R'+,,----,---,,,,,,,-./9D+ #0,.-+(&%#{ tnjhhilo t"z$&(*,.122210000111110Jt~'*+,,,,,,,,,,,,,,,,,-.2D2'_}^^^JJJ[[[,x-,*(&$#{ uokiikn q!v#|%&)+-.00000000000000,D{{P'*+,,,,,-------,,,,,,.0?7iIKLzzz/v,,*(&$"{ uplkkmp t"y$%')+,-./0000/00////.(QrC~*+,,,,,------.--,,,,-/9: u%\\\}}}4v,,*(&%"|!vqonnp s!w#|$&(*+-..////////////,0y{}=r(+,,,,,--------,,,,,-.5=&g$halq8p++*(&%#}"x trqr s!v"z#%')*,,-----........,$}mx}g}(+,,,,,------.-,,,,-.2@.f+9Xx '#~**))('&&&''))*+,,,-,--,,,+'+ftx{Xi|)+,,,---.--,-/0!zZ};T6AHttu [[[j***))((''())*+,,,,,,,,,++',evz{Zt}t8w'+,,-----,-.,b:S %5uvvMppp[(((Mh)+**)))))))*+,,,,,,,,,++'-fwz|[|}}hz2|),,,,,,-,+"|?Y+;EnprwzzzLLL-<&+***)))))*+,,,,,,,,,+*&0c~vyzI|~/Yy&*,,,,+)"}B]cilfffsssIEEE!v*+*)*****+,+,,,,,,+*)$7d|y{|?v|bHw#}&'&"}d2Se`eirrrPEEEF`'+****++,,,,,,,,++*'!pXoz{{|w|^^sKj{DkVrq|oooyyy*^^^888 m(***++,+,,,,,++*)$8f~ty|lwww-aaaEEE$$$ ***HW_ p(**++,,,,,,++*( sTkw|}}xxx"ppp[fff]]]SSSMMMIIIIIIMMMSSS[[[bbbkkkwsssIxxxmy%i%)*++++++**)%-fmuyw{~Z9d|k$'()))('$$iWnz{|}(ffftz}k\r~Fm.h#i"i!g2gJl_py|~:((|}}crack-attack-1.1.14/data/font0_pu.tga0000644000175000001440000001007410132356545017030 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UqU8UqqUUqU88Uq8U8UU888qUU88U8UU88crack-attack-1.1.14/data/garbage_flavor_001.tga0000644000175000001440000020007410132356545020620 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2:m:m:m,:mI:me:m#:m:m:m:m/:mo:mר:mި:m:mҨ:m:mv:mE:m:mx:m:m:m:m:m:m:m:m:m:mJ:m:m8:m:m٨:m:m:m:m:m:m:m:m:m:m:mi:m$:mQ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mQ:m:mh:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mڨ:mR:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mn:m:m:ms:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m:ma:mK:m:my:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:m":m:m:m:m:mE:m:mR:mƨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mg:m:m:m:m:m:m:m :m:m:m:m:m:m&:m:m?:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mw:m:m:m&:m/:mq:mz:m:mǨ:m:m):mm:mӨ:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m;:m^:m:m¨:m:m:m:m:m:m:m:m0:m|:m:m:m:m:m:m:m:mب:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mƨ:m?:m8:m:m:m:m:m:m:m:m:m:m:mѨ:mx:m$:m:m٨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mب:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m]:m :m:m::m:m:m:m:m:m:m:m:m:m:m:m:mɨ:mi:m:m:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:ma:mp:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mY:m:mB:mԨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mʨ:mL:m:m3:mʨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mJ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mب:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m9:m3:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mҨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mL:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mT:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:mڨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mx:m:mc:mƨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m֨:m:m*:mŨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mҨ:mM:m:m:m]:mۨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mD:mr:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mȨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mè:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mc:m:m:m֨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mn:m:m:m:mݨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mΨ:mѨ:m:mW:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m+:m!:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m|:mQ:mL:m:m:m":m7:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mT:m0:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mF:mA:m:m :m:m:m:m:m-:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m[:m:m?:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mK:m%:ml:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:my:m :m:m9:m#:m:m6:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m1:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mϨ:mB:m :m>:m:m:m¨:mQ:m:m/:m:m:m:mШ:mf:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:mF:m!:m:mH:mW:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mè:m:m:m:m:mI:m :m6:m:m:mI:m6:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:mD:m :m:mŨ:mè:m\:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mʨ:m::m:m,:m:mۨ:m:m:m:m:m:m:mB:m:m4:m>:m!:m):m}:m:m:m:m:m:m:m:m:m:m:m:m:m:mo:m9:m :mw:m:m:m:m;:m :mͨ:m:m:m:m:m:m:m:m:m:m:m:m:m:mͨ:m:m:m:m:m:m:m:m:m:m:m:m::m1:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m :m:m:m:m:mh:m:m$:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m1:m-:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:m:ml:m:m:m:m:mب:m%:m;:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mI:m:m:mq:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mR:mܨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mި:m>:mW:m:m:m:m:m:m:m:m:m:m:mj:m :m=:m:m:m:m:m:m:m:mp:mM:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m):m:m/:mv:m:m:m:m:m:m:m:m:mv:m:mX:m:m:m:m:m:m:m:m:mM:mU:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mX:m:m:m:m|:m`:m:m:m:m:m:m:m:m}:m:m:m:m:m:m:m:m:m:m:mu:m#:m\:m:m;:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m˨:mm:m3:mq:m:m:m:m:m:m:m:m :mǨ:m:m:m:m:m:m:m:m:m:mJ:m :m:m:mO:mɨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:m֨:m:m:m:mĨ:m^:mJ:m:m:m:m:m:m:m:mH:mߨ:m:m:m:m:m:m:m:m:m̨:m?:m:m:m[:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:mŨ:m:m:m:m:m:m:mO:m:mK:m:mۨ:m:m+:mv:m:m:m:m:m:m:m:m:m:m:m:m/:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m[:m:mǨ:m:m:m:m:m:m:m:m:m@:m!:m):mY:m:m:m:m:m:m:m:m:m:m:m9:m:mM:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mܨ:mߨ:m:m:m:m:m:m:m:m:m:m:m0:m:m:m:m:m:m:m:m:m:m:m:m3:m\:mԨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mר:m_:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mΨ:m#:m :m\:m:m:m:m:m:m:m:m:m:m[:m:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m9:mӨ:m:m:m:m:m:m:m:m:m̨:mN:m:m:m&:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mH:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mj:ma:m_:m9:m*:m:m=:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m":m:mE:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mߨ:mܨ:m:me:m:mH:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mY:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mY:mG:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m':mK:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mҨ:ms:m:mS:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m):m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m8:m>:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mI:m:mj:m٨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m9:m:m:m:m:m:m:m:m:m:m:m:m:m:m¨:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m@:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m :m :m:m٨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:m:m:m:m:m:m:m:m:m:m4:m :m':mh:m:m:m:m:mZ:mC:m :m:m/:mŨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m,:m:mx:m:m:m:m:m:m:m:m:mè:m&:m6:mj:mڨ:m:m:m:m:m:m:mۨ:m:m_:m:m*:m]:m:m:mҨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mr:m:mR:m:m:m:m:m:m:m:mz:m:m:m.:m:m:m:m:m:m:m:m:m:m:m:m:m:mJ:m:m:m :m:m):mF:mS:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m#:m:m:m:m:m:m:mW:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:mڨ:m:m:m:m%:m#:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mר:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:mϨ:m4:m :mx:m:m:m:m:mN:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m :mM:m:m^:m:m!:m:m:m:m:m:m:m:mߨ:m:m٨:mܨ:m:m:m:m:m:m:m:m:m:m :m:m4:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m0:m:m :m:m:m4:mب:m:m:m:m:m:m:mf:m:m):m;:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mD:m :ma:m:m:m:m:m:m:mɨ:m:m:m&:m:m:m:m:m:m:m:m:mb:m9:mר:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mN:m}:m:m:m:m:m:m:m:mL:mƨ:m:m:m:m:m:m:m:m.:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mQ:m:m:m:m:m:m:m:m:m:m_:m:m :mb:m:m:m:m:m:m:m:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m\:m:m:m:m:m:m:m:m:m:m¨:m:m?:mը:m:m:m:m:m:m:m:m-:m:mf:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:mܨ:m0:m:m:m:m:m:m:m:m:m:m٨:m]:m:m:m:m:m:m:m:m:m:mw:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m֨:m$:m:m:m:m:m:m:m:m:m:m:m:m=:m;:m٨:m:m:m:m:m:m:m:m:m$:m:mڨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:m:m:m:ml:m0:m :mQ:m:m:m:m:m:m:m:m:m:mר:m:m2:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mK:m{:mk:mH:m5:m:m:m:m:m:m:m:m:m:m:m:m:mר:mӨ:mܨ:m:m:m:m:m:m:m:m:m:m:mj:mI:m:m:m:m:m:m:m:m:m:m:m:m|:m:m:m1:m:m:m:m:m:me:m:m:mY:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m`:m:m:m:m:m:m:m:m:m:mܨ:m3:m:m:m:m:m:m:mը:m:m8:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m:m:m:m:m:m:m:mӨ:m#:mS:m:m:m:m:m:m:m:m:m):m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:mƨ:mP:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m":m:m:m:m:m:m:m:mT:mq:m:m:m:m:m:m:m:m:m:m:m:m:m[:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mڨ:m):m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m4:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m˨:m:m:mҨ:m:m:m:m5:m:m:m:m:m:m:m:m:m:m:m:m:m:mԨ:m:m:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m!:m):mӨ:m:mJ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m4:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mu:m :m%:m5:m:mƨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:m`:mO:m1:m":m:m:mۨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m^:m:mȨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m3:m:m:m:m:m6:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m}:m:md:m:m:m:m˨:m<:m :m+:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:md:m:m:mF:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m>:m):m:m:m:m:m:m:m\:m!:m,:ma:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mM:mҨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mӨ:m:m:mX:m:m:m:m:m:m:m:mp:m(:m:m@:m¨:mި:m:m:m:m:m:m:m:m:m:m:m:m:m:m!:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m%:m:m:m:m:m:m:m:m:mި:m:m':m':mK:m:m̨:m:m:m:m:m:m:m:mب:m:mr:m::m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m:mH:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m6:m:m:m̨:mӨ:mި:m:m:m:m#:mI:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mƨ:m_:m:m:m:m:m:m:m:m:m:m:m:m:m:mè:m :m:m:m,:m :m(:m/:m:mX:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:m:m*:mѨ:m:m:m:m:m:m:m:m:m:m:m:m:m:mg:mɨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mw:mŨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mC:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m>:m :mK:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m3:m:m:mר:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:m!:md:mШ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mT:m:mA:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mr:m:m:m#:m:mۨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m-:m%:ml:mШ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mo:m:m:m:mܨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mb:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mp:m:m :m:mu:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m{:m:m:m:m:m:m:m:m:m:m:m:m:m :m:me:m:m:m:m:m:m:m:m:mϨ:m:m :mN:m:mި:m:m:m:m:m:m:m:m::m:mè:m:m:m\:m:m:m:mW:mc:m8:m:m crack-attack-1.1.14/data/garbage_flavor_002.tga0000644000175000001440000020007410132356545020621 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2  ###"""(-& $& #" #  ""!& %& '*'+)!*" $+!,$ 4 !;"$$B GK $$O"%Q""%Q!"Q!P# L" H! C=!7$/$' !!  !"!(#   +9$H( W%&'e *+s-/~399BIRT[([_0gh'op"or$mo"hi!gf%if _\WSQO"EFy$:?m&/7a'&,S'$(E&#$7!!(!!    (/%!23!&  !)!8&!M*$a/*v96 FFTV$mm377134351044372+++&#ty"`i'S\/EN44;y4+0e.&&O$":!(!"#"!$"'".+*#"(!-1%*C%$+Z28v@A ]Y{r42)4;=9720/,/468777655763-)-11{/W^/9@.)/q/%&X$"@#-#!%! # #! %$ '!%)% (=*.Z46uIJ\^!/29@?89854543313777765321024420))/2.)vy'UU"@? .-_"*(E#,), )%"  ,$,-! $ """1()L09n=F\` ~}0=A@>;;;::;:9::;;;:;;:;:;;:96200341-*($-;6'utWV!;9:;<<<<<<<<<<<<<<<<<<<<<<=<:9765411375,,2774+sv%NT*9?`53:>6"(","!.3" /&&(6",U+0{HJ"nm)/BC:8;<==<<<<<<<<<<==<<<<====<==<;;;:96334763113672#~X_$>Eb&4;=#(/!" %#"$""%*&$1(S,5{GNoq(BC9::;<<===<<<=====<:9:<=<<<<<<<<<==<<<<;98888888777;;0&S\8C_.88&&/'$+ #!'" % $I%+rBJ ou+:<:;::;<<<========>>>:3.-*,3;<<;;;;<<<<<<<<<<<;;:::9988:74-{OX4>S#*3.) (, *!0%(##%6!$^48"Z`7@D87269;<<===>=::<>>>>>5.)x>:h3<;869:;<<<=====<<=<<<<;;::98982,#qvFMp#4:B)+/!+&' +"# %!#' 'J',zTX1ENE:/589:<===>>>:--:>>>>=1&` <) Dx,381'6;<<<=====<<=>=====<<;;:<;94,"YY>?[/-/ $! # !$!"0$+_8B"kq:BF=85569<<<=>>>>>7 7>>>>>>>>====<;<<:620&rsEEo*,@ ''" !!! !$%C/1qV]0B>5358>>>>>><66<>>>>9-| ? 8 C]YH%89<<<=>>>=====>>>>>>>>>==<<<<;9:>=,MS/4O)#&&$ #   )%!'%J0/XW&AD618ADB@?<=>>>>>>>>>>>>>>>>8%R%W/[gT)=><98;>>>>>>>>>===>>>>>>========@E<&SW"47_ ')-$% $!  %%(./[@A,ut;>A=:9?HG=37;=>>>>>>>>>>>>>>>>:)N)M]]l0>><:8;>>>>>>>>>=======>>>>>>>>>=;8301!fh:>g*.7 !%%$!! %)- 16_ FK%}MOD?>>=>@?7.4;=>>>>>>>>>>>>>>=865!?@cuKV'6==<<:<=>>>>>>>>========>>>>>>>>==934C8gm;Cw#,<&'*#&)%!#022;@lT[.GOJC@>>==;:88:==>>>>>>=======>9((7,ZG^$")5<==========>>>>>>=========>>>>>>==<;9=D9!qz:Dz*3D&)-#!(%#'024BBkcc0KNFDCA?>>>=<;;<=>>>>====<<<<<<=;11:4 V],7:<=============>>>>===========>>>>====<:9?8!u{BH,0D #%% '*/8=2CFoff7KOHFEBA????>>====>>>>=<<<;::::;==<<=<0z`/<<<<===<<========>>>>===========>>>===<<<;9;8#@B),F*"$(!&*070@Gihn;PNICCB@??>>??>>==>>>>==<;;<=878:<=>>>>9%c-;<;;<<<<===<<<<<==>>>>>>========>>>>>===<<9567$|BJ,*1C, %"%$!" ',)7?ddm:PNGC@?>>>>>>>>>>==>>>>=<;:7332149<=>>>>:%N"8;;;<===>><::;<<<==>>>>>>>>==<==>>>>>>===<<;:?@/ HT -5B ".--*,# $.%6?Z`i9OMGB?>>>>>>>>>>>>>>>>>>=<:98425:67;===>><-`|4;:;>>>>>>>>===>>>>>>>>>===<<;;2}BF|((:%$%RMM- & (+3MQY.JLFB?>>>>>>>>>>>>>>>>>>=<;:<<* 5C>::;<=>>3|3:::<@DA5)%}'w}0>B?<;<=>>>>>>>>>>>>>>>>>>>>>>==<:3., @@p"+,44('[OO' '!"(A=A*JNGB?>>>>>>>>>>>>>>>>>>=<;::<3 UT,129 af;F:6:<<==3}}/7789=D='#be3AI6+7+AL2A=;===>>>>>>>>>>>>>>>>>>>>>>>==<9572nq>@h%)()-! #!!& "269qwv>NIC?>>>>>>===>>>>===>>>=<:99/"\b%4;-(0&#+7%qw5:79:;;;/ee,5554:A2_`'@B;.2D!(4*2[].<:;<=>>>>>>>>>>>>>>>>>>>>>>>>>=<:64)ei36T#'&/)# #&)0acc8IGE@>>>>>>>===>>>>===>>>=<<;4":@"( " #+DK.C:78999*EG)4322;:'jo;?#--)$"+ $'$FD*;:9;=>>>>>>>>>>>>>>>>>>>>>>>>>>>=;87+`eAD7%7701.#",J?J2LIEB?>>>>>>>==>>>>>=<=>>>>=><+ij-.!! %,3$ksC>>>>>>>>>>>>>>>>>>>>>>>>>>>;93%T[e =A*)*, ioo#(:2;{0xNPID@>>>>>>>>>>>>>>=<<=>>>>?A<$RQ*(  " &JR8?25998& AU*6523<,v|(1 $! +)?@#op1?<:<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>=<<3"qzAJO$)/%$%fwt! %(,_RXFZOIC?>>>>>>>>>>>>>==<<===>>>@7?=$ ! $ 5=+E?9::5CQ&7838>,`h!) $! *)=?!fh4D>8:=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=:5$S\>>>>>>>>>>>>>=<<<<<==<>?2ts42! "!( $" (0(t}OI;::8%Mp0::6=>+S["("#" '(%5;#X]/@?;<>?>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;8,ltCLq$4;)'$ # !! % !.(+o%jnLTLIE@>>>>>>>>>>>>>><<<<<;;;:<<0XW('"##"' _gHG;::91)7=<9B;%OT$(  #! $&008,QY+>B==@@=<=>>>>>>>>>>>>>>>>>>>>>>>>>>=:4#Ya>>>>>>>>>>>>>=;;;;;::87;-IG%# #!  &SSID879;6(1:=<;E8KM$'$   #!%5+40IQ'~;A>>@?<;=>>>>>>>>>>>==>>>>>>>>>>>>>><8/MSMQ>@tvf $"3+*x4z|QPD@BB?>>>>>>>>>>>>>>=;;;<;:972:.A>$" #! $!MKAA525:4 *9==>@>:9<=>>>>>>>>>>===>>>>>>>>>>>>>><:.#qu9rtxf-p M  (#SJGPWI@@DA>>>>>>>>>>>>>>><;<===<:72:1@=$# $  ! EE8A636;8*(7<<<88;=>>>>>>>>>>===>>>>>>>>>>>>>>=;7-4nrPDca5 %#  !4 3/y<}]RB>>DB>>>>>>>>>>>>>>=;<==>>=;96=)CF!'! !"!$#BD1F;89<5yp3<<?23>>>>>>>>>===>>>>>>>>>>>>>>><:0$eh0gi[T#e n8$7%&RJMR_J?>>DC?>>>>>>>>>>>>><<<=>>>><:8?*LS)*, # &'GM6J>:;=0P 6<<<@/NI#$56& !$#"15MR=>15?A<;<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>=:2#tw&Y[zH4ez6# -%,(2t&vz[WC>>?GD?>>>>>>>>>>>>><;<=>>>>=;9<1QW'"+,#!# %""*-PT;==0M"7<<>>>>>>>>>>>>>>>>>>>>>>>>>>>=:4*(ehAy}Kj &2!!'FHNA\L?>>FID?>>>>>>>>>>>==;;<=>>>>><773VZ$(.%#$"" '#.2SW?>:<=>1Z$8==<>8__(,.#&""' #( 8A6@;>=449;<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>:55,v{7knif*)+!%#+e$svORC>>@NJA>>>>>>>>>>>><;::<=>>>>><56B$_b!)-! !!$' #&58fg;99==>4t)9==<=@qr.3' %# #"% -9KG=>8,39;<=>>>>>>>>>>>>>>>>>>>>>>>>==>><7;,(WYIy{<+ "#:396NH?>>CPD>>>>>>>>>?A@>;98:<=>>>>=<53E#il,.!" ($ %'9<vv97:=>>7$/;>=<JSM649469;<==>>>>>>>>>>>>>>>>>>>>>>>===>=9:2!SU5XZZs# -%"TRVFKB>>>FLA>>>>>>>>@CEA><989<=>>>>=;57D&-/#$##!& ( "+.@E;8<=>>3a(:>=<>>>>>>>>>>>>>>>>>>>>>===>=:97$lo/UWVw{6!+$"#+n)vyNH?>>>EE?>>>>>>>>BGGA>=;::<=>>>>=;88F; .-%)$ -1JQ$;9<=>><38=>=<;B:]^-2$# '"./q}U=/5BC;;;;<<=>>>>>>>>>>>>>>>>>>>>>>===>=;:5+/dgFquTif & '%5=DBPE>>>>B@?>>>>>>>@EIF>>>=<;;==>>>==<::< IF $!#!#$"%#27Xb-99==>>>>>>>><89C~z85(#!$ &,8GP70:B@<;;;;<==>>>>>>>>>>>>>>>>>>>>>===>=<:2,(mr5jnoV$VN)"'%.J)]bVNB>>>>?A?>>>>>>>CHGB>>>==;;<=>=>>>>;2={*' "" )*3=s|97:=>>>>>>>>><84B4RQ&)($!# '@IbI33=@?<;;::;<==>>>>>>>>>>>>>>>>>>>>>>>>>=:2-$&fkM,R4 o)"(& $3>>>?D@>>?@>>BGHC=>>>=<::<>>>>>>=<64>JJ,!&"+0 ?G2=7<>>>>>>>>>==;7]8*4>?>=;:::;<==>>>>>>>>>>>>>==>>>>>>>>>>>;4/$bgC8T8B*##$-/BK}XZE>>>>>BJC?AEA>AHKI;5>>>=<::<>>>>>>>=<:L=+4"&$:A y?89=>>>>>>>>>>==;7A5qs9@)2:C)tTF//;>>>=;:;;<<<==>>>>>>>>>>==<=>>>>>>>>>>=<71(gm-_P!D1(% (1@"U]eTB>>>>>CR?7KNGCIPS?#/?>=<;;<>>>>>>>>=<86="@R:L"y<;49=>>>>>>>>>>>==;9;5z} KJ839?>>==;:;;;;<<<=>>>>>>>>==;;<=>>>>>>>>>==:4,{#tyL.M9 -#$'/8R/qxdO@>>>>>APG$AVWTUMB*x#>?<;<<=>>>>>>>>>>=:/'&(;9467;>>>>>>>>>>>>>==;;>;7<;>>?><<;::;;;;<<==>>>>>>>=<66><======>>>>=;60#"ioIISD +$(9Ae=^J?>>>>>>EJ("G\KA7)hk!rw6@=<<=>>>>>>>>>>>>>=;60*,258;<>>>>>>>>>>>>>>>=<;;;;9>?>>>>=<;;::;;;;;<==>>>>>>===6-<>;<<<;;<>>>>=82)"gkDeY_'$"*(FMuDXF?>>>>>>@EB5FR+il(df(fe0|z79==>>>>>>>>>>>>>>>>>>>>>:89;==>>>>>>>>>>>>>>>=<<;;:;;=>>>>=;;:::::;::<==>>>>===;<>.'38656973<>>>=:4.#io9ds ## (/3 X^FTF?>>>>>>>AGOXP.~-}17@<>?????>>>>>>>>>>>>>>>>>=<<<=>>>>>>=====>>>>>==<<;;:;<====<;:::::::::<<======<;77?8vnw'/9>9*3<>>>=;73'y.hpa-n $".5=%knHME@?>>>>>>>@HW[B?97?>???????>>>>>>>>>>>>>>>>=====>>>>>==<====>>>>>==<<;:;<<<<<;;::::;::::<<<==<<=<;8:>=,!jr'NU$VXa`adcm$A=>>>=;75.+`hVLu&%7?H*|~MKC??>@>>A@>>?JYMA8:??????????>>>>>>>>>>>>>>>>>>>>>>>>>=<<<<<==>>>>>==<;;;;;;;;;;;:::;::99<=======<;;<=<7,$hx$OY!ZZjd 8>>>>>=<874,elMbw!)#-BIS-MH@>>AE@@EFA@?FPB:=>??????????>>>>>>>>>>>>>>>>>>>>>>>>=<;<<<=<==>>>>>=<<;;;;::;;;::::::99:<<======<<=>=<=F;%?87<=>>>>=<:97-ntEdr(".6OU^3NH@>?EJHHKF@@>CJ>6<>??????????>>>>>>>>>>>>>>>>>>>>>>>>=<;;<==<<==>>>>==<;;;;;;;;;::;:::99:<=========>==<;=3'G9:==>>>>==:84+x>w|`n+29"]bfAFIJLJD>>>AC9?K???????????>>>>>>>>>>>>>>>>>>>>>>>>=<;;<==<<<==>>>>=<;;;;<>><;:::;::99;<=>>>>>>==>==<<>5-;;=>>>>>>>=975+6pu]i' 4:&bhmAUIB>>@ABEFB>>>A>1BO???????????>>>>>>>>>>>>>>>>>>>>>>>>==<;<==<<<==>>>>=<<;;;=?@@?>=<;:999:<=>>>>>>>>>>=<>B96<==>>>>>>>=963*0kq_i 2:)!bjsCRFA>>>>>>??>>>A?4?K@??????????>>>>>>>>>>>>>>>>>>>>>>>>>==<===<===>>>>==<;;;;=?A@@@???>=;:;<=>>>>>>>>>>>;;<79===>>>>>>><974))jpU`0:+&irvCKDA>>>>>>>>>>>A@08H?=????????>>>>>>>>>>>>>>>>>>>>>>>>>>>======>>>>====<<;:;<>?AAA@@@@@@?===>>>>>>>>>>>>:<;1:<===>>>==><9770ioP0x-8,#kvw;DCA>>>>>>>>>>>CE47F;:>??????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=<<<<;;:;<>@AAAAAAAAA@?>>>>>>>>>>?>>=:A>>====:782ĭkoTX]*1+"jrx:EDA>>>>>>>>>>>DI14F;7<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=<<<;;;::;;;=>?@AAAAAA@@?>>>>>>?@@@?@<;F>====<8:3IJlqYTV$&*)lqvIQIB>>>>>>>>>>>DK57F<9;<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=<;;;;::::::;;;;;=>?@@A@@??>>>>>@B@=?C=>J:-8;========>><892Ƶrv]VY"$(%gmsOYKA>>>>>>>>>>>AJ25D><<<=>>==<<<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=<;::;;::::::::::;;;<<=>?????????BC?:AG@>G5,8;<<<=====>=;772д]`h$%&`joUƿ[KA>>>>>>>>>>>?K62A?====>>=<;98;=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==<;;;::::::::::::;::;:::;=>???>??CD?>>>>>>>>>>?K8/=?=====>=<;98;=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==<<<;;::::;;;;;;;;::::99:<=>>>>>?BC??KE5>62;;:;<<==>==<;8472м$apy ("WddSVD==>>>>>>>?>>>D3)=@<<===>>=<:9<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==<<<;;;;;;==<;;;;:::99:;<>>>>>>?AB?CL@2?01<<<<<<=>>>==;8484ͻ$akr$$W^]PL>:<>>>>>>>>>>>C:+EE=====>>><;:<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>===<<<==>???>=<;;:99:;=>??????@CAFG84?-1;<=====>>>>=<96=5Ʒ"^jp"RUUIA26<>>>>>>>>>>>HO0CD===>>>>>=<;=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??>>=:9:<=>??????ACCE<3AD+1;<====>>>>>><87C6!}Ygm  >AKEE79=>>>>>??>>>>I[/5<::<=>>>>>=<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?>>>??????===>>??>>???ACCC77TH+2;<<<==>>>>>>;69G8!uyS]b' /6@BRB<>>>>>?A@>>;>>>>===>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==>>>>???>??@?>>>?@@??>???ABCA4<\7+6;<<<==>>>>>=:5:N6dhILP & (152[G9;=>??@??>><:>L:6=:<=>>>>>>==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==>>>>???>>???>>??@A@?????ABD?1CY,/9<<===>>>>>>=;6;O+QTA?C #"'*%jqpYF44?>>=<;?H"w2=:<=>>>>>>>==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==>>>????>>???>>??@A@????@A@C<4MH/5;<<===>>>>>>=<9=I$BD>.1 $# "WS^S϶B,->?>>=;=O,%;?>==>>>>>>===>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????@@??>>?@@A@????@A?B:>V759<<<==>>>>>>>>=;=@ rv7;8%)##  C@MGûA)+?MF@>>>>>>=<;D7 A==<=>>>>>>>====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??@@ABB@@@A@@@@@????A@@A;KQ){7;<<<==>>>>>>>>=;=9^f-5.&#+ ));9K3/CIC?>>>>>>>=>>>>>>=<<===>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?@@AABBBAAABBA@@????@A?A@=T9.7;<====>>>>>>>>=:=3KTr),4(3)1)$ "'++~K<2AB?>>>>>>>>=>CM"%:<>>>>>>>>>>==<<=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?@ABBBBB@@ABCBA@????@A?B=?O'r>8;<===>>>>>>>>==8A+=E`;:AI?E1#&Z]eA˷>4<===>>>>>?>>>>D1u@B:;<=>>>>>>=====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??@ABBCB?@ABBA@@????@CA>>E52D:<====>>>>>>>>=;7E$ry3;MSQVd\`# $ >DN=B28;=>>>>>>???>=?<~/A/7<=>>>>>>>>>>>>>>>>>>?>>>>>>>>>>>>>>>>>>>>>>>>>>>>>???@ABA??AAA@@?????@EA7FSA?<<=<=>>>>>>>>>=9:EU]-47fdg RVT!' ?H;:R13;>>>>>>>>>?><:B,x}424<==>>>>>>>>===>>>>>>????>>>>>>>>>>>>>>>>>>>>>>>>>??????@AA@?@???????@AG?:RNA>===<=>>>>>>>>><5>@>>>>>>>>>>=:@?x~%>7;==>>>>>>>>====>>>>>>??????>>>>>>>>>>>>>>>>>>>>>????????@@@?????????@CI?EO.1?=====>>>>>>>>==83F2.6_JFJIPN4A>GJW[ty\BͲA:=>>>>>>>>>>>>=?F.py:=7;<=>>>>>>>>>==>>>>===>>>>>>>>>>>==>>>>>>>>?@??@@@@?????????????????@EI@G5)>=====>>>>>>>>>=;35Ndk(0Da\` :FC'eg cfruC:O@==>>>>>>>>>>>>=?8pw%;:9;=>>>>>>>>>>>>>>===<<=>>>>>>>>==<===>??@ABBAAAAAA@@?>??>>?????????AADE85?=====>>>>>>>>>=91;N>>>>>>>>>>>=;;%^j4B::<=>>>>>>>>>>>>>>==<<<<==>>>==<<<===>??ABBAAAAAA@@@@???>>????????@A9BJ%}'@>>====>>>>>>>>>?92@<,5ZJHOx{z&cd"nn'[=ĬA<==>>>>>>>>>??>;;1\j)_o57::<==>>>>>>>>>>>>>=<<<<<<<;;;;;=>>>>>?@BCCA@@A@???????>>>>>??>>?@@?>=<=>>>>>>>==>?96B sw#1:=wnv.'op$wx=-><;==>>>>>>>>?>=;<>*{FY%fs4<58<<=>>>>>>>>>>>>====<<<;;;:;<>???????@AA@@A@@@@@????>>>>>>>>?@@==F:`l"?======>>>>>>===?A>A7KQo>?H& QRhj!%d;ԳA9;=>>>>>>>>>>=;;D;Xe====>>>>>>>>>>=====<<;;;=?????????????@??????????????>>??@>;=>!bm_k4<=====>>>>>>>===@CCH#7?NaYd#X[]`!~>9L@;<>>>>>>>>>>>==BD0:=!AF-;:7>?=;<====>>>>>>>>>>>==<<<<=???>>????>?????>>??>?????????????@D='|S`5>:=>===>>>>>>>>=>ADFCQWu+8B0 "@D^`!0aHѯH<<=>>>>>>>>>>>>?B@,dd25&BH3>549979<<<==>>>>>>>>>>>=====>???>>????>>????>>???>>>?????????CKH)Xa)A=<====>>>>>>>>>>>>>G;;CSJJTwxv1"9;jh=2D=9:=>>>>>>>>>>>==B8OQ -3&DJ-1-07:9:;<<===>>>>>>>>>>>>>>>>>>>>>>????????????>?>>????????AMQ2QXjr7B<====>>>>>>>>==>>=@D*[a{5@F3stx=APQZ3ɧ:58;=>>>>>>>>>=<;>>)>D%)/&AF&~~2>>>>>>>>>>>>>?>>>>>>>????????????>>>>>?>>>>?>@D8KWX`*?><====>>>>>>>===>>?B55=U^Z_!!+(4 Ye54|@649;=>>>>>>>>=<::>8"ry#/8-(&16)lm;B>778::;<==>>>>>>>>>>>>>>>>>>>>>>>???????????>>>>?>>>?AE<)}"?N @O*:=<<===>>>>>>>>===>@@8"]ew13>4w~ !,/?+wLBʖ@67<>>>>>>>>>=<:68=7'em$)3,&'35"gc)046789:;<=>>>>>>>>>>>>>>>>>>>>>>>>>>>?>>>>>>>??>>>?AGK@)zwDH;G,ny>>;===>>>>>>>>>===<>C>%8CN_Q]*!*!. DP*AiO߲<39=>>>>>>>>>=:75:@6X^'.'!$"KE 0::888:;<=>>>>>>>>>>>>>>>>>>?>>?>>>>?>>>>>?>>?>>?CNS@)fh<>9> dl8A;;==>>>>>>>>>>===<=GD'Y^k17@+~ $#'#X_:EG418<=>>>>>>>=<;:88:.RV%+ # #:9+vt9?;778:<=>>>>>>>>>>>>>>>>>>????>>????>>>>>>>>>>BLO;&RX$4<8?di1>::<==>>>>>>>>>===<<@C3z|%:>DLOS!-42REΜ@77:<=>>>>>>===><306*RY%,")!$"MK,2137::;=>>>>>>>>>>>>>>>>>>>???????????>>>>>AHL?*xwDH /7"8@fj)9:7;==>>>>>>>>>>===<<@6BGY<@E y" ;E*1hA۰;78:;<=>>>>>===;4,+1(Y]/.& "# "! 57%eg.5:??;99:<===>>===>>>>>>>>>>>>????>>>>>>@GNH2TR6501;B!kq/579:<=>>>>>>>>>>====<<4"rww*9@3jcj!!(HK9B}A747:<=>>>>>>=<:61+/74$hi66&$"'9@'jr06=>AB?<:::;<<<<=>>?>>>>>>>>?????>>=>FQQ>&hh=@+/#02!EHry0@<9<===>>>>>>>>>>=<==?7! PWEZZc''(svJ?Đ;238<=>>>>>>>=;8531286$~HK.1&&$""" $6; mr&-48:=??><<>>>>>>???>????>>>@@@??@EH7%c_"@? -/',(0"FM14;?=<=>>>>>>>>>>>>====?A2noa6PR!BF#*YBѡ;35;=>>>>>>>><97530,28-'ae1?C7.00'")%+")).VZ&145667;;8:<>>>?????AA@=<=AEGEE@+][A>&30-))$&*5<X_-?<9:<<=>>>>>>>>>>>==<=@B6&y5kl0o HL UZ/3m@ٯ:59<==>>>>>>=;97663/5;6+&]`$A@!4-0"*" & &&+(=B+_b388762/2358:=?A@=?DDBAAFLG2prFE/0)+(%'(&( ,.BGuz*6;99;===>>>>>>>>>>==<&.qr?b*ac#ei$uz<>>>>=<;:9<>:326=9([\A?10(( &%!"!"!!!$%!..#@@&VW*su/58;??>@CEC@8:DHE@4( fiIO5=+1$)0$#+# (",1:?`d,8878:<==>>>>>>>>>>>=<;:=IF,a`I>aar~Z5%v|&~G=ÈA738;==>>>>==<<;<<;:6226>9-%cd"ED$44*,.+')$ !#!(&/-99#EG&Y]&nr*2789602.*-,ip(TZ EJ69,/),&*$(,(-1&/5!4>>I_g-=B>98:<==>>>>>>>>>>>>=;:;@D.!jjR3efNmmj<2 %%O3ŋ8149<=>>>>>>===<<<<<;866799. nhB@%660.00'**%&!%%$"#!%#'(+,02<<GFKHMGLDI?!C@$38.212+*&%"##$$-.%13*7:%?AKLWZ#v|2=?=;99:<==>>>>>>>>>>>==<;@C@- or]4sy%Zm=3 !%&Q;Ւ;36;=>>>>>>>>>>>>>===<;:659:4*!lh!MK#;:'01&..%++$++#)*%)*&(*&+,"*+()'' ('#*'$,*%((+)1,3,5.#:5#B?!IH&VV)ej#v|$3DF=88:<<===>>>>>>>>>>>=<;:?KI.!vyc0w|+M l?:, !!)P9І75:=>>>>>>>>>>>>>>>>>>==;87652,#so_\$LJ&@?)>>+;=-9<-8<,9;(:;';<)=>(>@&BC @@ HF!NJ)RN4]Z6ee0rs')48=??=::;<===>>>>>>>>>>>>><:8=GM5zyg(xy0@Q7'ls(H:ٌ36<=>>>>>>>>>>>>>>>>>>==<;:9862/,+-0.)uv'oq%il'ij&nn+sr+wx*{,~,+*1:<97:====<<====>>>>>>>>>>>>>>=;6;JN9!zvexu.0 A???cjjo)E-Ӈ5;=>>>===>>>>>>>>>>>>>>==<;:9864334642...13349<:8:<;:;<======>>>>>>>>>>>>>>>>=<::FQ@(zzavs/'2?>Cgl'A6҉<:<==<;<==>>>>>>>>>>>>>===<<;:9988899989;=>?>=<<<==>>>>>>>>>>>>>>>>>>>>>>>==>=?HL7$rwZ!y{){y ##MR%ow-=5x88<<<::;==>>>>>>>>>>>>>>>======<;::9;;;;<=====>>>>>>>>>>>>>>>>>>>>>>>>>>>=>>>>>>>>>>>>>>>>>>>==========>>>>>>>>>>>>>>>>>>>>>>>>>>>>==<==:>C;"y!lqD%y&:;E%fn *v~"6V;י<<==<<<==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==<;7;C@8)m"wx;"gk38?!&/%Wa1=7{=<<<<<<===>>>>>>>>>>>>>>>>>=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==;;;;BLյ=&~S#|}.%5?%?GRZ'*6a9<<<<<<==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==>><?$.0:^g0@8}8=<<<<====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><:;AB=G̮=,U"|.&-?*!.EM $'.P:׋<<<<<<<=====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==>>:4;JDֳ31c*yy<# % 9?/AF.qr(po,06Y;ُ;<<<<<<<<=>>>====>>>>>>>>>>====>>>>>>>>=====>>>>>>=755f%D vy%&+?-OQ+xz %|+45d9ߝ<=<<;98:<<<<<;<<==>==>>==<<<<=========<<<<====>>>98?LۮFÊ5d#B#u{(($83+ #'66g<<;<<8545579:9::;<<<<=<;;:::;<<<<<;;;:98:::;:84:>>ա6:^:@'w|$x{$0>8- '&,'G)c-փ389::85236789:::::98776778899:8798657:;>=:;7Ώ2p.O+7'ux /v|.ry/Q:40)ty(z..B7a;}811376788998998532233223338?:8AA99FMKCя:r/X/<)}(%nv+sz +.??<7.in (Y]'ei$+91O3h2}1137:;:965650-/367641.4A<(%7@=:~;i2P1;:nq$)or&ov 'hs,ny&?0 %01:<FH_a yy-"?%Q*f/w8݇CGD=98;;76:AEEA>:309ڃ7u3d(S/A&jr2ch%hl)nu,nu 3\b$TW qv262 /""DFno$(-09$F,K7I?DE?J;OBRITGTDUEULUUUXTKR=O2J5D(;$2#\d)'EQ ):J(('* ,6<)!?????? ? ? ? ? ? ???????????????crack-attack-1.1.14/data/garbage_flavor_003.tga0000644000175000001440000020007410132356545020622 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2    %6CF>.  'Fg~t[=$ &.450*!  PZVI8( +Pzg=  5X^.+O|K& $>dX* 3QqmT?, AuZ.  0XyA/Tp?%DjR&  :]w_B,  'Ro9*581$  D~T' 4[^/-KsvB 8azX7 +[}C5RkqdK0%Ug39hR;?W{X. 0Zf< -`I /Z}P-&Z`axcv< Ev~hnc8 )Pe9/bO# DzxE !Nl>5aI}F(Re= CtY--_S&  Ma0 :t]-&]2hQ" 7e^9! 5d~C&Y\'  $L}F *S^*"u0YZ)  DyW6 )Q^,&Rb. A}Z+8kd0p=X_-,]{Q0  ?p{lwr;$Lg33hq8 (Wp9PFc`,B~J*.ZwN:C^F#!En6 (SK! H{@_`}^+0b- BwR+7aQ&!B|u<@yY+:tRwlB" .cY'/ %Qr>8oQ&2hN$ 'Ub. 7ooE$ 1gQ#4*\`.DK /dV(!Ob/5iY17oJ!41eR# $U|A-`c/Nc-2ec< :sE)4lO 4jn8&[s8$Qb//ga8! ?wz? 8qN! "M[- "PH +Z_, 3ie; Cu<S9t[)9gGF`/3iX& 6nd9Go6)X 6on; 6Zj79tzH# #LN" 6s_1!Lg3 ,fW7$,AaS' -hmE31FnD9wehP'  #S`, (VfXawo: !Qyc`um8;yP>Qto< )[W& HQ$7W) 6vz>&(FoM" 0fO 5kd6 #xC 6ps5$Fsb.8nH #On@ p[-8qn3 $Nn79sy>4aqD$ _l<9sb- 1ct:;ri4 ?lE&UtD" 8tS" !Ls95hW* !_=$PsZoH'6lw?>tl6'RqA nP2M]1Khv{]?$.ZX,0da0 6Z}oK(u~teO;' MP#/+1UOkpgVA-  >j_8 %MM% 2GRN>( ok{E@90# RK +72'#=WdaP7  4[[4 !&% n^\ UC  *0/% 4M]]M4  mXOr[  %--%h\P  \][ [[}A[^L,Xk < &JoFn9`o.      ).,"       "@ZebO2 $  3NRBMC" %3=;0",32) !Er]4*<<7/% gs?4Qn}gK*/Hbqn\C(9kS&0RyyQ. ,BWlwzwtodVF1"-`]+ 3[N' 2ZzM+ Mt< )RO(  5UweG)DF %Qv?-YN  +aM!E~v=4]W2Og3:vX) Lx?7r`) 3fV&*SX/SQ2/Uu87pZ&?t9"Ok4 EwO!PwPPrM  Kv7KI&$?p@3bs<K{q_* (]I $Se@@`J  GU' Iv?2lW' *]afW' )Yr9HV(:ue.4ld08m^RP# Ml4=yo2A|q8C\55d2 'WD|x<+]N! $Sj5{P$:sb->zy=6l[( 'Y\*f}`,Dp7;x{>A~pvi3 ._P$Xdm7 P{_e{@9sz> $Q{X_v<-`L IRy:*^zv}O=K{F5my=-_^AOF-dI5D~C2gSLhV.*>nH0hx;9qllE0BzM 1dH+>wE=w^%#9]{W32gK ,bv;GVQy+6nU% 1dH=_";vE &I= 4IVTC, /aM" '[s: (WoA6U-ba--dI =uC&+V4 &&  *\Q# &Vp51e\. 1Yr &Vn6.`L y{B+=s $P]+ Ff0C}X& "297?N*4MzI4E{jGu< Wj- !NwK'3hN%.cr`fn<+FaB~BDK +^[K +_V$"MY.&DQ 9H0k8oRI )W[*:ny?"@}B5P! K=EK7r !Q[) 'OX)8n= .V% +U~T  "RQ 0DV) .^k; *To1  $T&  4Mcj[?  (W 8jJ! 8`wE"  8]pJ!{P%  0JX[7 &Tv(Pd7 8[uK%3HTP?(ot@ -Rpo  H) /Rp~y`>! .MkgE%!&%  aP+*V> 3]I );D@2!#5I[kw|jR6"  WZ. Hb 7UmsQ   (4>CFE?2% Q&  *_ *7:#    M}< 1q4  K^77xN KU06v- KO)  .c K?2 J  K&, .Y[K  .J_i`B K ,0,L3  TXPH M8 crack-attack-1.1.14/data/font0_qm.tga0000644000175000001440000001007410132356545017021 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2U8Uq88qq8888UU8qU8UUUUUqUqUqUUqU88Ucrack-attack-1.1.14/data/garbage_flavor_004.tga0000644000175000001440000020007410132356545020623 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2//;_2>_/ mlU $u |b3L- @ 1.7,  .6$6d,@w.By1`/4&!.Y+=r%6d"2^4 ._/x !'J):m#1\*=o /U/r "_; "B):l!2\'8h%6c5 " "-&G-Ay*8'&6c4I1G;U.By v ?VrcL'K4K0FYLm'7eh/& (J.AzXC`LmPq"0WK|/ T &8hA]B^HeIiIhMnNp#2\I__T? *'8kA\EbJiLnMnLlMoLl,Q_jH: :5L7NB^JjNoOpOpOpOoKk9;___A(3I0D}=WJiOqOpNpOqOqPq@Y K #B/Cz2FFcPqPqOqLmOpOpPo;TJl;,>s2IA`GgGgGgJjJiGfGd4K3??l #5`$5a,@u/C{/C|0F4J2H+>r);m!/X AVV&G,?w6O8P7P6M6M4K0D~2HX&Z =WJkQsQsQsQsQsQsQsQsQs.Ax ??v '?ZMlPrPrPrQsQsQsQsQsQsQs):k :3?? +RC`LmNpOqOqOqPrQsQsQsQsQsQs.Aw 2< 5MGeNoNpQsOqNoNpOqPrQsQsQsQsB]. -!=HgJiNoOqOqNpNoOpPrPrQsQsQsQsLl=X"0X -k 1FOpOpQsOqNpOpOpPrPrPrPrQsQsQsQsLm@\);l( ;a #AQsQsQsQsPrOqOqPrPrPrPrPrQsQsQsQsPrJjB]=W$D ` _% 87OQsQsQsQsQsPrPrPrPrPrPrPrPrPrQsQsQsPrLlC`>Y!0W t/ lW 73JOpQsQsQsQsPrPrPrPrPrPrPrPrPrPrPrQsQsQsPrNoHg@[(:i !H_  P #@+=q5LEbOpQsQsQsPrOqPrPrPrPrPrPrPrPrPrPrQsQsQsQsQsPrIh@[&7f /_ L !>(;lKkDc5LEbOpQsQsPqNpOpPrPrPrPrPrOqOqPrPrPrPrPrPrPrPrQsPrIhWMmQsPrQqPpNoNnNnOoPpPqPqQrQrPqOqNpMoLlJjLnOpQsQsQsPrDa/Ay) ^:??~*1E4L?\IiDa1I%6e,@ys%3b-S+=q.Ax.Ax2G&5b&G$B 5F +ODaHgEcA\A]DcFdGfHeIhIgHfGfGeGeHfGfFdFeC`C`C^B]?\@^@\2H'8g:SCaCaB`-B{!/X%F#k #FcMmQsQsOpOqKlKkPqQsQsQsQsQsQsQsQsQsQsPqOqOqOqPqQsOp=X/C{A^IiIjIi2H%6c. wP 3IMmQsQsQsPrPrPrQsQsQsQsQsQsQsQsQsQsQsQsQsQsQsQsQsOqA]3JC`B`B_Ec2G'Hm_Ho x.FcMnQsQsQsPrPrPrQsQsQsQsQsQsQsQsQsQsQsQsQsQsQsQsQsPrB_4KB_MnKk;V.Bz $___r +#5aJhOqQsQsQsQsQsQsQsQsQsPrPrPrPrPrQsQsQsQsPrPrQsQsQsQsDb4KB_MmEb&7e' F!__30!.W4JMmOqQsQsQsQsQsQsQsQsQsPrPrPrPrPrPrPrPrPrPrPrPrPrQsQsQsEc4K?Z>Z"2] l _/H %3_FdHfOpQsQsQsQsPrPrPrPrQsQsPrPrPrPrPrPrPrPrPrPrPrPrPrPrQsQsEc4I+?t**/D $4_EbEbJjPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrQsPrPrPrPrQsPrQsQsEd2G !/_ !$3_EbEbJiOqPrPrPrQsPrPrPrPrPrPrPrPrPrQsPrPrPrPrQsPrPrPrQsPrPrQsQsFd%E5"_/__ !%4`EbFdKkPqPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrQsPrPrPrPrPrPrQsQsGf/\,  (:jEbGeMmPrQsPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrQsPrPrPrPrPrPrQsQsIh#2[ 5b//5 ");lEcIhNoQsQsQsPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrQsQsIh9R*N 4|,/ X $,PEcIhMmPqQsQsQsQsPrQsPrPrPrPrPrQsPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrQsQsIh:R3J"@ |r7 x6.AxIhMnPqQsQsQsQsQsQsQsPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPqOqQsQsHgq%7d#4_%5`(9g&7d&7f,?t.Cz/C{,@v'9h#4_(J(J&8h4J3I0D|/D}/D}/E~.D}.B{.Cz.By.C{3H4K2H.Bz.C}2G-@v&8j'L4"@ -U)[zV_L"B,?v4L;U2I1G7N;S;WY6N*X:S;T=V7P.B{ /W"?6 $ i < (L1FDaOqNpNnOqPqOqNnLkKkJjJjLmOpQsOqMnNoOqKlXNpQsQsQsPrPrOqNpOqOqPrPrPrQsQsQsQsQsQsEd1H7OIjQsQsPrQrQrQrQsQsQsQsPrQsQsQsOpHg=W2G-S* ;/ "9/*O4JFePrQsQsPrPrMoNpOqOqPqOqOqOqQsQsQsQsQsIh7N;TKkQsQsPrPrPrPrPrPrPrPrOqPrNnIgDa=W9R4 &f1 -T:TMmQsQsQsOqLnNpPrPrPrPrOqNoOpOqQsQsQsKl=Y>ZLnQsQsPrPrPrPrQsQsPrPrOpJk@[5K;T#2[*h?  .%5bKkQsQsQsPrOpOqPrPrPrPrPrOqNpOqQsQsQsLk>W@ZLmQsPrPrPrPrQsPrPrPrNoJi@^9S)J   B_,"0[:RQsQrQrPrQsPrPrPrPrPrPrPrPrOqQsQsKkY9REcMoPrOqNpNpOm"2[~;1D88POqOqOqOqPrPqOpQsNn@\;TIhOqOqOqQsNp-@w Xu)JOoPrOqOqPrNpMmQsOpD`>XJjQsQsQsPrNn"A ? $*-E{PqQsOqOqOqPrQsOpC`>YJjQsQsQsMm@Z#A ??_" _ .U;VQsQsQsPrPrQsQsMm=W;TIiQsQsQsFe+(I-BxFcHhGfFfCbDbCaDb>Y-@w+>s=WEbEbGe;T.U $1/ !9(L,@t.C{/Cz.By2G/Cz/D|-@u-@u,>t!/V,Q,?t1F2G7O1F(J !3/1 "-R0F5L7P8P9R7N8P5L4J4J0D0F9Q;SXHgKkKkKkKkLlJjJjJiJkKkMmMmMnKl9Q#1[ 3:  ;;U>YJiPqQsPrPrPrPrPrQsQsQsQsQsQsOqA],@t*N3 *(:i=WGfPpPrPrPrOqOqOqOqOqPrQsQsQsMoA\,>t&6c8/5 *LZ*XJkPqPrPrPrPrPrPrPrPrOqPrQsIi>Y-Av$3_, S_ #3^B_MmNpPrPrPrPrPrPrPrOqNpPqNnEb2G"? .?H-;THdNoNpOqPrPrPrPrOqNpOpMnJgC`,@v/?$B@\KkNpNoOqPqOqOqNoNoLlHhC^5M"1Z& D_|[ 9RNoOqNpNoNpLlIhJhDa>Y:R 0Y,? /#3\NpPrPrNpMmIhB^7O-@v%D $ n /A]QsQsNoGe=V0E%6c- b"q ?YPrMmD`6N/D| /V  s PrJi@Z6M0E}%6c T&_M7Fd=X;T;T'8f  u0_^55M.D|.Bz5L+>s(E % &F*=r'8f -T+Q ; 0_4 +&8h0E-Ax'8j"0Y. ;_ S  .V8P2F,?u*=n*P  ?7 7#3^3H(9j$3_(8h#A 42B, :Q:crack-attack-1.1.14/data/garbage_flavor_005.tga0000644000175000001440000020007410132356545020624 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2~uJ/_rb^E/b/;;|{URU;/;/V;Vr/ur|_ U: *Frh,/hj,bbR?;:?UVi;,r;:;/g,|{;:rr;u,VV;:r;__r~Hbr$;:Rz;|;/kb,{ ri/:H;vnnnbHMqrVrr;t/,/w_/ V?/UnV/?suL4yVV?|Sa?_V[ /hb.)/?V?3"b|` n?::U?p|/?,h?/;/?b?/U;%UV/UUrri //?H;;;;;;;;;rH/5/bU_zrrrrrrrrr]rr?) ?d?pnb|/P/H$Q(%*;;:?t s;;:`hi;Q:U/;/|;b/|;/_/V|bb/;:U/?Vnnnnb?V/H|nnnn??;R??`b/?n|:;nRrH_|;;;;bH;H^Uz;bU{;ip;|b^H;::/;|;;HH^/;/z;;/^:;HbHkb|n_?VUVV;??/_U/bVucrack-attack-1.1.14/data/font0_sl.tga0000644000175000001440000001007410132356545017022 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2q8qqUU8qqUq8UqqqqqqqU8qU8qqcrack-attack-1.1.14/data/font0_td.tga0000644000175000001440000001007410132356545017013 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUq8qUUUUqqUq8UqUq8qUqUU8crack-attack-1.1.14/data/crack-attack.desktop0000644000175000001440000000025410223357573020526 0ustar webbsterusers[Desktop Entry] Encoding=UTF-8 Name=Crack Attack! Exec=crack-attack Icon=crack-attack.xpm Terminal=false Type=Application Categories=Application;Games; StartupNotify=false crack-attack-1.1.14/data/flavor_1.tga0000644000175000001440000020007410132356544017007 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2:m:m:m,:mI:me:m#:m:m:m:m/:mo:mר:mި:m:mҨ:m:mv:mE:m:mx:m:m:m:m:m:m:m:m:m:mJ:m:m8:m:m٨:m:m:m:m:m:m:m:m:m:m:mi:m$:mQ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mQ:m:mh:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mڨ:mR:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mn:m:m:ms:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m:ma:mK:m:my:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:m":m:m:m:m:mE:m:mR:mƨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mg:m:m:m:m:m:m:m :m:m:m:m:m:m&:m:m?:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mw:m:m:m&:m/:mq:mz:m:mǨ:m:m):mm:mӨ:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m;:m^:m:m¨:m:m:m:m:m:m:m:m0:m|:m:m:m:m:m:m:m:mب:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mƨ:m?:m8:m:m:m:m:m:m:m:m:m:m:mѨ:mx:m$:m:m٨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mب:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m]:m :m:m::m:m:m:m:m:m:m:m:m:m:m:m:mɨ:mi:m:m:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:ma:mp:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mY:m:mB:mԨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mʨ:mL:m:m3:mʨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mJ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mب:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m9:m3:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mҨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mL:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mT:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:mڨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mx:m:mc:mƨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m֨:m:m*:mŨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mҨ:mM:m:m:m]:mۨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mD:mr:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mȨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mè:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mc:m:m:m֨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mn:m:m:m:mݨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mΨ:mѨ:m:mW:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m+:m!:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m|:mQ:mL:m:m:m":m7:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mT:m0:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mF:mA:m:m :m:m:m:m:m-:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m[:m:m?:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mK:m%:ml:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:my:m :m:m9:m#:m:m6:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m1:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mϨ:mB:m :m>:m:m:m¨:mQ:m:m/:m:m:m:mШ:mf:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:mF:m!:m:mH:mW:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mè:m:m:m:m:mI:m :m6:m:m:mI:m6:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:mD:m :m:mŨ:mè:m\:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mʨ:m::m:m,:m:mۨ:m:m:m:m:m:m:mB:m:m4:m>:m!:m):m}:m:m:m:m:m:m:m:m:m:m:m:m:m:mo:m9:m :mw:m:m:m:m;:m :mͨ:m:m:m:m:m:m:m:m:m:m:m:m:m:mͨ:m:m:m:m:m:m:m:m:m:m:m:m::m1:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m :m:m:m:m:mh:m:m$:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m1:m-:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:m:ml:m:m:m:m:mب:m%:m;:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mI:m:m:mq:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mR:mܨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mި:m>:mW:m:m:m:m:m:m:m:m:m:m:mj:m :m=:m:m:m:m:m:m:m:mp:mM:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m):m:m/:mv:m:m:m:m:m:m:m:m:mv:m:mX:m:m:m:m:m:m:m:m:mM:mU:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mX:m:m:m:m|:m`:m:m:m:m:m:m:m:m}:m:m:m:m:m:m:m:m:m:m:mu:m#:m\:m:m;:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m˨:mm:m3:mq:m:m:m:m:m:m:m:m :mǨ:m:m:m:m:m:m:m:m:m:mJ:m :m:m:mO:mɨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:m֨:m:m:m:mĨ:m^:mJ:m:m:m:m:m:m:m:mH:mߨ:m:m:m:m:m:m:m:m:m̨:m?:m:m:m[:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:mŨ:m:m:m:m:m:m:mO:m:mK:m:mۨ:m:m+:mv:m:m:m:m:m:m:m:m:m:m:m:m/:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m[:m:mǨ:m:m:m:m:m:m:m:m:m@:m!:m):mY:m:m:m:m:m:m:m:m:m:m:m9:m:mM:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mܨ:mߨ:m:m:m:m:m:m:m:m:m:m:m0:m:m:m:m:m:m:m:m:m:m:m:m3:m\:mԨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mר:m_:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mΨ:m#:m :m\:m:m:m:m:m:m:m:m:m:m[:m:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m9:mӨ:m:m:m:m:m:m:m:m:m̨:mN:m:m:m&:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mH:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mj:ma:m_:m9:m*:m:m=:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m":m:mE:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mߨ:mܨ:m:me:m:mH:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mY:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mY:mG:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m':mK:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mҨ:ms:m:mS:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m):m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m8:m>:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mI:m:mj:m٨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m9:m:m:m:m:m:m:m:m:m:m:m:m:m:m¨:m :m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m@:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m :m :m:m٨:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:m:m:m:m:m:m:m:m:m:m4:m :m':mh:m:m:m:m:mZ:mC:m :m:m/:mŨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m,:m:mx:m:m:m:m:m:m:m:m:mè:m&:m6:mj:mڨ:m:m:m:m:m:m:mۨ:m:m_:m:m*:m]:m:m:mҨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mr:m:mR:m:m:m:m:m:m:m:mz:m:m:m.:m:m:m:m:m:m:m:m:m:m:m:m:m:mJ:m:m:m :m:m):mF:mS:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m#:m:m:m:m:m:m:mW:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:mڨ:m:m:m:m%:m#:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mר:m:m :m:m:m:m:m:m:m:m:m:m:m:m:m:mϨ:m4:m :mx:m:m:m:m:mN:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m :mM:m:m^:m:m!:m:m:m:m:m:m:m:mߨ:m:m٨:mܨ:m:m:m:m:m:m:m:m:m:m :m:m4:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m0:m:m :m:m:m4:mب:m:m:m:m:m:m:mf:m:m):m;:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mD:m :ma:m:m:m:m:m:m:mɨ:m:m:m&:m:m:m:m:m:m:m:m:mb:m9:mר:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mN:m}:m:m:m:m:m:m:m:mL:mƨ:m:m:m:m:m:m:m:m.:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mQ:m:m:m:m:m:m:m:m:m:m_:m:m :mb:m:m:m:m:m:m:m:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m\:m:m:m:m:m:m:m:m:m:m¨:m:m?:mը:m:m:m:m:m:m:m:m-:m:mf:mΨ:m:m:m:m:m:m:m:m:m:m:m:m:m:mܨ:m0:m:m:m:m:m:m:m:m:m:m٨:m]:m:m:m:m:m:m:m:m:m:mw:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m֨:m$:m:m:m:m:m:m:m:m:m:m:m:m=:m;:m٨:m:m:m:m:m:m:m:m:m$:m:mڨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:m:m:m:ml:m0:m :mQ:m:m:m:m:m:m:m:m:m:mר:m:m2:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mK:m{:mk:mH:m5:m:m:m:m:m:m:m:m:m:m:m:m:mר:mӨ:mܨ:m:m:m:m:m:m:m:m:m:m:mj:mI:m:m:m:m:m:m:m:m:m:m:m:m|:m:m:m1:m:m:m:m:m:me:m:m:mY:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m`:m:m:m:m:m:m:m:m:m:mܨ:m3:m:m:m:m:m:m:mը:m:m8:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m:m:m:m:m:m:m:mӨ:m#:mS:m:m:m:m:m:m:m:m:m):m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:m:m:m :m:m:m:m:m:m:m:m:mƨ:mP:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m":m:m:m:m:m:m:m:mT:mq:m:m:m:m:m:m:m:m:m:m:m:m:m[:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mڨ:m):m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m4:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m˨:m:m:mҨ:m:m:m:m5:m:m:m:m:m:m:m:m:m:m:m:m:m:mԨ:m:m:m{:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m!:m):mӨ:m:mJ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m4:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mu:m :m%:m5:m:mƨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mɨ:m`:mO:m1:m":m:m:mۨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m^:m:mȨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m3:m:m:m:m:m6:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m}:m:md:m:m:m:m˨:m<:m :m+:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:md:m:m:mF:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m>:m):m:m:m:m:m:m:m\:m!:m,:ma:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mM:mҨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mӨ:m:m:mX:m:m:m:m:m:m:m:mp:m(:m:m@:m¨:mި:m:m:m:m:m:m:m:m:m:m:m:m:m:m!:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m%:m:m:m:m:m:m:m:m:mި:m:m':m':mK:m:m̨:m:m:m:m:m:m:m:mب:m:mr:m::m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m~:m:mH:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m6:m:m:m̨:mӨ:mި:m:m:m:m#:mI:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mƨ:m_:m:m:m:m:m:m:m:m:m:m:m:m:m:mè:m :m:m:m,:m :m(:m/:m:mX:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:m:m*:mѨ:m:m:m:m:m:m:m:m:m:m:m:m:m:mg:mɨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mw:mŨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mA:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mC:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mǨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m>:m :mK:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mv:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mߨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m3:m:m:mר:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mP:m!:md:mШ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mT:m:mA:mը:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mr:m:m:m#:m:mۨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m-:m%:ml:mШ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mo:m:m:m:mܨ:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mb:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:mp:m:m :m:mu:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m{:m:m:m:m:m:m:m:m:m:m:m:m:m :m:me:m:m:m:m:m:m:m:m:mϨ:m:m :mN:m:mި:m:m:m:m:m:m:m:m::m:mè:m:m:m\:m:m:m:mW:mc:m8:m:m crack-attack-1.1.14/data/flavor_2.tga0000644000175000001440000015103010132356544017005 0ustar webbsterusers*yo (CREATOR: The GIMP's TGA Filter Version 1.2%{V%L>Le>%;Vbu/%u>Vy&%ELiL|%{%op>eb>wV/iQM2d%oE/yL `RY(`V(j:/V(Iy`(M;O>NNO 1UyoLLN.mL S>e.T:v&vt~P @GAL "EC"En"FC$%{`(ILg/.mLAg"%E.vL..V2I/w2u;.tRt..&vn"uIPmV@ G% U%vLLOWu;]L%{"F^%;,L`%RYd=Ww(>"-0+ gxH"b,}^RnV: a]?, .LW;9Luy/yb U|,1{=f.]=y +0-"\R.\v}nLM/^},vo%:}>"L ,n:- L}La0r";+-%g0]> ^/+g`R{%`  Ly/LmWw.g=>aI;;%orzzmwy@zz!m/v ;;,L`d%`%oV/yL IuW.\Pu(V/ u%yy>ezze>kL/&yy&WL&&%{{%.yys>>Lee 8zz?zz^},ee +0-">>yy&&&yy&>ezze>crack-attack-1.1.14/data/font0_za.tga0000644000175000001440000001007410132356545017016 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2qq8q8UUUU88qU8q8qUUU8qqq8q8UUqUqUUqUU8crack-attack-1.1.14/data/font0_zb.tga0000644000175000001440000001007410132356545017017 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUU8qU8qU8qUUUU8888UqUU88UUUU8UU88UUUq8UqqUUqq8UUq88UUUq8crack-attack-1.1.14/data/font0_zc.tga0000644000175000001440000001007410132356545017020 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UU8UqUqqUUqq8q8q8UUUqUqq88q8qUq8Uqcrack-attack-1.1.14/data/font0_zd.tga0000644000175000001440000001007410132356545017021 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2q8qU8Uq88qUU8U8U8UqqUU8U8UUUUqUUqUUU8UUqUq88qq8U8q8qUUUq8crack-attack-1.1.14/data/font0_and.tga0000644000175000001440000001007410132356544017145 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.288UUUqqUU8UU8888U8qUUUq88Uq88UU8q8q8UUUq8UUUUU88U8UqUUUcrack-attack-1.1.14/data/message_game_over.tga0000644000175000001440000100007410132356545020746 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUUUUUUUUUUqq88U8qUqUq8qUUUUUUUUUUU8q88q8UU8UUUqU8UqUq8qUUUqqUUUqU8q8q88UUqqUUq888U888qU8UUUU888qUqUU8U8UqUUq88qUUU8UU8qUU888UUUUqU8qUU88q8UqUUqUUqqUU8q8U8Uq88UUqU88U888q88Uq8U88UUUqUqUq8UU8UU888UqU8qqUqUUqUU8UUUqqUUq8UUUUUU8qUU8UUqUUqUUU8UUU8UUUUUqqUUU8UUUUUU8UUUUUUq8qUUUUU8UUqq8UUUqq8q88qq8U8Uq8UqUq8UUqU8Uq8UUUUqUqU8q8qq8qUUqqU8Uqqqq8q8qUUUUUUUUU8UUqUUUq8UUUUUUUUUqqUUU88UUq8Uq8UUU8UUUUUUUUUUUUUUUUqUqU8qqqU8UU8UUUUUU8UqUUUUUUUUUUUUqU8888UUqqUUUU8U88UUqUU8UUU8Uq8qUU8qqUq888UqU88Uq8UqUUUUUUU8Uq888UqU88UqUU8qUU8UUqqqUUqqUUUUUUqUUqUUUUUUU88UU888qUq88qU8qUU88UUU8UUqqqU8qU88888qU888qUUUUUUUUUUU8UUqU8888Uqqq88qU8qUUUUU8888qUq8q8qUU8qUq8qqqUUUU8q8qUUUUUUUUUU88UUUU8Uq8UUUUU8UqUUqUcrack-attack-1.1.14/data/garbage_flavor_logo_x.tga0000644000175000001440000020007410132356545021607 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2     !"#$$$$$$$$$$$$$%%%%%%%%%%%$$$$$$$$$$$$##"    "##$$$$$$$$$$$$$$$$$$$$$$$##"   "&),./012233333333333333333333333333333332210/-+(%!  !%(+-/012233333333333333333332210/-+(%!  "(-26:=?@ABCCDDDEEEEEEEEEDDDDDDDDDDDDDDDDDDCCB@><951+&   !',159<>@ABCCDDEEEEEEEEEEEEEDDDCBA@><951+&   $+29?DIMPRSUVVWXXXYYYYYYYXXXXWWWWWWWXXXXXXWWVUTROLHC=70(!  ")07>CHLNQSTUVWXXYYYYYYYYYYYXXWWVUTROLHC=70(! "+4" F k (($k$ **;;HHXVgfu u 1D_a]XSNJE@<840,($ {zuso njib`CCPBPm !,7CO[fq|p6 ??????JValwu@???!T|xmbWJ>3( '1;FQ[enw}{b:6H6w ; \ } ""$$00??MMZYihv uw vCW/E[XTOKFB>950-($!||w vpo^^UUpo<=MLYYhgs roo?\O+EVPKGC>:62.*&!~}y xsqedWVrq} {<;cbc6 '0:DNYdpzn<-TqztkbXND:0'  #*2:BJRZbjrws];{{^ E Z {  )()##00<%BH@<84/+&"||v tnm_^u tz y87\\\5  (09CN[iul7 ??? $Jitqh^UMD<5.&  #).4:AHPXbks_ X y  )3)00//;;KJXXb aUTgg 5TQLF5$@@840+'#~}x wrqddw vz z..VVV4  '/9EQ`psJ/VoskaWME=6/)#  "',28?GPZeԃo W w q &?&;;..::IIXXTTTTff| |2RNID@."<:0,($ z xsrhgxw#z y  VVV4??????  (2=KZktU8_qpeZOF>6/)#   %*18@ITuuZ r ^ &b&II..::HGV VGFTSfez z/NKFB=8'!:2)%!{ {uslkzy)$x xNNN3??? $-9GWitZ?erl`TI?7/(#  $*1:D_%|% i a U } !`!NN55::HHLK> B j DDooHH! ##55IGZYpo!A?;61-(#{{,CG>6,$r r$ $YXY &2@O`pnB???BiqeVH;0&  @_@ } V > f ??t tUU22EDWVll><73.*%!wv| {+COG>5,#}qq# #YXY??? #.;JZkt[%????hrgWH;/% ?????? WmWs i kBa 88nnJJ  00DDVVii~;;61,'#||u ski{ y)@TPG>5+#}|po# #YXY  +7EUfsh9??????9eshXI5+"||ml" "hgh (4BQapoJ 1`rkZK=0& ???T^T^ G _ m Y ..VVBB10--@?SRffzz561,'#x won !4HF=5,"||kk" "vuv %1>M]msY%??? )Yrl]M?2' ??????nrn? 7 Tsb { ++GG=???JnqbRC6*  ??????kkk- " Ab | u   .-33CABB));;NN``q q,/*&    #" ~24*"xwii! !ј )5CRcqoJ??????AjrfVF8,! ?????? - 7Y y ~ &##//>=IG2277JJ]]p o}|),'" "" ut.*!uuhh Ѡ '2@O_orT#???6esiYI:.# ???UWU?:N p 8**97GF@@44FFZZl ly x&*% " zzji'!ttff Ѩ $0=L[ks^- ,,, ,]sl\L=0% pop&6 a 7 %$44CALL88FFYYjiw u#'"! lla` ttdd Ұ! "-:IYlxrJ8fef4DCDPBBD\/01z@@B[WVX5)Urn_O@3' =I=r_ 5!!/.>=LKDCEEYXgfs r%! ^ ^XWwvttbb  );Jg{yzzssvUVYJKO&(.#       &ABM|}x\F6) -,--,--,--,--,-ZYZgfgecd#dab3d^_>D=:6 s n+*97IHMMBBUUddon"| {w vN MONkk``TUWz==@56:$%+&      ! " # # $ $ & & & ' ' ) * .612KPQdttyL, ,,,CBC YXYXWW#XVW)KEEDOEFIL::eO44vW10U#"a#"bhg ] U L C 3?$$53CBPOGGQQaall { {w wt snl@ ?G G]]  ! # % ( * , - / / / 0 0 1 2 3 3 4 4 5 5 6 7 8 8 8 9 : ; < >E./QBC\ua`lG"???SRS$+'&  # ) . ( ) , 0 > \ A = N [ c j f c X 0  //?>MLQPQQ__hh }}{ {w vs ronkjcb00;;( 6 8 9 : : ; < = = > > ? @ A B A B C D D E F G G H H I J K K K L L J I HJJXMWVWXXX733+ / 1 3 4 6 8 9 ; > = 6 4 6 8 : ; > C O W a b ! $#98JHTSSR\\fe| |~ }{ yw vr rnmjhcb^\AA+ G G H I J J K K K L M N N P O P Q R R S T T U U V U U T R Q O M K I G E CCPPV,,,, 1#!# FV U W Y [ \ _ ] Y X Z [ ] _ ` b d e S S > ? -  @?RQUUZYcb{ z o ng gTTHH99-,   T V V W X X Y Y Z [ [ \ \ ] ^ _ _ ` _ ` ^ ^ \ [ X W T R Q O M L K L M P T X ^88]k,,,,,,5D Y~{ { }  { { q o W U > > & %        ! $ %!78WVYX``} |} |{{o n` `POGF11,+$#  $2 \ d e e f f g h i i j j j i i g f d b ` ^ \ Z Y X X X Y \ _c h m t y   ')|,,,-,- :[ r  9 /         " % ' ) , / 1 4 6 9 < > A ; 0CAZXkjs rv vj iVVMM>=:922--((!!,1; G M ` d p q r r t t t u u u u t r p n l j h f e e edegkmrw}  67st,,,,,,@('_  #";  % ( * - 0 3 4 7 : < ? B D G I L N Q T V Y [ ^G.7<==>6600*)#,+<>O \ b w z { | | } } ~     } } | y x v u s s r sssuwy~ 99ph,,,-,-F((\  &% 0< @ B E G K L O Q T V Y [ ^ a d f h k n p s v x s q gc m z  "!#"$#$!$ "    DDgL-,-H99oX    '>R X Z ] _ b d g i l o r t w y | ~    !  ! "!##%&'()*,,.-.--,-*+')&'#%!#! $"! !( JJb=,,,T9:iU  H ) 3Lcp s u w z |    !""#"$"$#$#%$%$&%'()*+-.013456576757453301./,-*+()'($%"$!!$-/2627&( %04)0',%+ "!($  NN_3SCDOR j 5 BSp!"  ""$$%%&&''(((())**+,-./134588<<>??@@A?@>?=>:;9:AB563401//-.+,)*'($%"$ "$';@HOJQCI@/0./+,)*')%&"$!# */JPLSFL?F:?29!& "($+%+&+"* $)!)!)$YXY`NN4O r  4 X i$%,-"# !"#$$&'()*+,-..//00123445678:;>?AADEHILMOPRRTTTUTURSQRNOMMKKIIFGEEBB@A>?<=;;89679:z{eh-.*+()%&#%!#!.2MSEL@H:B4=/4(/ %,%+%+&+$ $)$)")")yBBB YXYP b  / T u ././!# !"#$%&'()*+,-..001234556789:;?<=:;89674534eg~9:&'$%"#!&*HLBH=D4<06(.'-(.%)$)$*%* ' ' ' ' w,,, YXY[R  * Q v ))5601023445679::<=>@ABCFGJJMMPQUUXY[\^_bcdefgghghfgcdbc_a^_\]Z[XYVWSTRSPPNNLLJJHHEFCDAB?@=>;<8:67562412JK}w{Y]#$ " ?E?E5=/7*1(.(.(.(.%*$+%+%+$!("( ( -.m,,,ZXZsC z  & L r "$34BCGHJKNORSUVXY\^`acdghkknnoppqqqppopmmjliifgdecc`a__\]Z[XYVWUVVWQQNNMLJJHHFFDDBC@@=><<9:78673412/134ruy}vyosek-0,19@29-3*1)0'-(.)0(.&,%+%+&+!)$)$)") ~/0k,,,-,- s 9 p  # H m .1HIdekkoossuvxxzz{{zzyyxwvvssqropmnklijfgefcdab_`]^^_dehirswxijOOEF@A=><=9:8867352301..,-Z\z~wzqtindj\c@C3:-4+2,2(.(.(.(.(.(.&+$*%+&+"' ("("($  z88gm,,,-,-X.-2 g  , C h ,.DEij~~||zzxxvvttrrpqmnklijghop|~~fg[[YZxyJK:;8978452301./,-*+@Auxptjoej`dZ_U\IN"&+2*2+1)0'-'-)0(.'-'- %*$*$*%*#( ' ' ' z y@@bV-,-^99l3 ^  ? > e --@Aee}}{{xxwwttssqqnostxyXXVWIJ553412./-.+,)*+,eilqhlae]bW\OVIQDK"& *0,2+2+3'-)0)0'-(.)0&+ &,%+%+&+#* )#)"' y uFE`HYAAQE V  M : ` *+<=``}~}}{{yyxwuussqqnossz{UUXX:;/0..+,)*'($&JMhmah]cW^RWKSDL=D8?/4  ,3,2+3*2'-)0)0'-(.)0!& "&,%+%+%*#) )$)! w u tRQ[/WRR2L N  V 5 [ ')8:Z[yyyyxxuussqqnonn~PQXX_`+,)*'(%&#$/0bf^dW_QWMSEK@F;A29-4-3 +2*2*2)0)0'-'-)0(.&- %$)$)$*!) ' ' '&  s oSRZ(XVWSI z j 1 V | $'57UVuvvvttrrppnnopNNXXuw)*&'#%!#!MRZ_SYLUGN@F1807070706-4', "*-4-2*1(.'-)0)0'-  &+&,%+$+$)$) )$)$)!( zhYXY,,,?+*X j  ( M t ##11KLlmoolmjkikGGPP{~vzns58 IOKREK@F6=18/5-5-505-5-5+2+1#),2+2(.(.(.(.(." %+%+$*"("(!( ("("( j !dBBB PLL=T b ~ # I n !./FGghjkiifg}~BBUV~w{qukoei/237EM@E8@3:/704.4-4-404-4*2+1+2!"'+2)0'-(.)0'-'- $*$*#( '# ' ' '# p h%%a,,,YXYPb    E j  ,-ABbcgheekl>?UV~x|rvlqhlagX_%'?F:A4=2929/807&+.7/707.6+3+4,2#) %,3*1)0(.'-)0)0!( $)&,!)")" )"( g d./_,,,,,,UDDRc    @ d  +,=>^_dede};3:2:2929.7&+,4/707-4+3+4-2!,3)0)0(.'-)0)0%,%+$)  &+&+($( f c TFE[D,,,XVWcx /  ; `  **88Z[_`rtwy78SUz~uynshodj^cZ`SXLS9=6:39082738/6,3  &-404*2*2+1%+  &+(.'-(.)0'-'-$*$*$*   w m j { @ ) &QPQ1BBB-,-`<_QQQ.BBB ZUU!rA  2 U v %&/0QRde`b01HK~w{rvnrhmbgUZFJNTJPDJ?E6;4;6<4:292:28/6)/,3-4+2+4    $*&-'-(/'-" } q Z A, !(558rMMO9YXY,,,,,,CBCf87mB . O q #%,-LMvwPQ,-@Ax|z|sxnrimbg]bV\#%:@?E:@:?.3#5;5<3:292916#)&/4/5 $),2+2")      ~ g N 7,66=QQTOvuv! ,,,CBCBAD` ( J j !#()HIBD(*9;nqptjmci^cX\SYOS#8>:A:?:>7< ,26;39082704%+04.4$!+2&-     s [ C4<=Hhhmm: DDFK $ D f !%&EE79%&35chej`eZ`UZOUGOCG%(5<:?:>:?:A:?04174:2919*/#)07-3*1      gP!#EDFTtu|qK/  ???PPP4  @ a "$>?mo]`-/ ",/Z^\aX\QVINCJ>D:?:A9?4:!%/52908" #!&    s Z >2ABNׂwbQA2& XWX! : [ } !9:]_.0$%%'!$(PUQVIPDI=E:?:A:?:>5;-3+1,2    f J5'(9??G\XXY-zyz %Xsm[K<.# -,-01: 5 W x 45~hk)*"# "#EJGMAE,2   s Y ;"#:77CpJJM=XWX,,,,,, 5ftgVF7* ???TSU+ 2 Q r /0|~txOS"$ 8?=E>DD=D:> !18:?:>9>17   f F:./@FEKIVUW!BBB ,,,???GoqaPA3' CBC()A K m ++df}wzquloY^(*/627-3%) w N?23EQQWL"???GoqbQA3' -,-AATV ] },-ABy|{vzqvindi^eZ_TZMSGMBG?FAF?F)/ } [E()BAAK[^^`+ "+,% ???#Xsm\KE>E>E>E8>!%  jJ !B78EqMMQ:ZYZ*H]ghbP2??? 3etgVF8+  -,-88Zl s $%'('(;=Z_fjbg\bW[QVIPDIBH@E?E=E4:%) x]23ZOOb]]cTkjl! :^rvvvwteC??????EnqbQA3' ???VVZ"n  "$%!# "%(7;GLMSELEKBG>DAF8<-1" e*+ZWXoĘC???AgurlhgkqvkG"Vsm\L????99~rr?DmrbQB?' ???x?99???x?:HYjt`, ~pp*!Urm]e ?88ݣ5>N^oqP?77ݪ 1g  ٪~ll1ۦ+ݵ]CSdsk>????66*B(ܮ???٪?44Ԭ#?HYjt`, ?44*xގ0$չ ~hh???ߙ>N^oqP9aѲ~hh~eej~ee1???s]CSdsk>˸xsXo???~eeU?22~ddU~ddFƿYJ9HYjt`,\qg U@ e>N^oqP~aaU؄ @ NՁ5 5CSds}^^U, +>..E 9}\\y/ b9HYj}\\Uҗ' }\\c}ZZ?⼇ҔK???ـgI @⼇0>N^}ZZFG/$ >--}XXqp%WIX???k~>jޢj }XXq}5Cf𼄄>,,>,,}XX*G9,! >**???+/;IWf~jj /atۜƎ ???>**3:Ծ}UU*ځ6* }UUMG@{;HVeq}SS1Rrnٕ ???}SSF}RR?t1ҝ,???u( Z>**}QQ*IWeqj}QQ\=krc֍}QQ*)myy}NNjxfqjGuu#[siXӆ }NNjNa*???qiG =np`Oр4???WgZ???kCSsjXG|]?Nooƻoo6&Ww&bseSCy>##|HH*|HH\|HHF>$$<1(!zBL-grbP@x???|EE?|EEq|EE1>""???xjJ>4,*C n0Aw0irbPAx|CCjeet>""|CCF???kgZMB90)#<- }}}}}}}}}}}}}}}}NW}}}}}}}}}}}}}}~~???}}}}}}}}}}}}}}}}#_ujYK^}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}/2m}}}}}}}}}}}}}}}}}}}}|>>*^^}}}}}}}}}}^^x???k}}}}EhtnbWM}}}}}}}}}}) yyyyyyyyyyyyyyyyyy_iyyyyyyyyyyyyyy>yyyyyyyyyyyyyyNupbTG}}yyyyyyyyyyyyxyyyyyyyyyyyyyyyyyy&yyyyyyyyyyyy{{;1;Fyyyyyyyyyyyyyyyyyy|<ctqhbzzyyyyyyyyyyyyttttttttttttttttوwttttttttttt9|::?tttttttttttt 6lwl^QEEtttttttttt8WWtttttttttttttttt+yyttttttttttX1;EQbtttttttttttttttt|::x>ttttttWW???5]tvهtttttttttttttttt/$DqqppppppppppϜrSbppppppppU???TTcppppppppWxuh[OC8Eppppppp???>TTppppppppppppAEppppppppo0:EP\hppppppppppppppppTTppTT???-Wtppppppppppppppppe )4?TuukkkkkkàL! llkkkkPP>PPjkkkk ;p{qdXL@4*E~~kk>PPxkkkkkkkkV qqkkkk,7BNZfr|vkkkkkkkkkkkkkk>#kk (Vxkkkkkkkkkkkkkko#.9ER^jɜhh"@ffMM{44T'e~xk_RF:.$.C {44Fffffk Jff'1=IUamye)"ffffffffff .e֜ffffffffffffffO#&0=IVcozhddq='d{ocVJ=1& 3 ~&*4@MYfq}b&qq*{11*{11#Xbbbbbbbbbboo0%&2>JWdpzY) Cs{pdXK>2'   *6BN[fr|rB  2eӗjjiiM1&&0CHKNPQRSTUUUUUUUUUUUUUUUUTSRQPNKHC?82+$  &-4:@DHKNPQRSTTUUUUTTTTTTTTUUUUUUUUUUTTSRQPMKGC>81*# !',158:=>?@AAAABBBBBBBBBBBBBBAA@?>=;851-'"  $).269;=>?@@AAAAAAAAAAAAAAAAABBBBBBAAA@@?><:841,'! !%'*,-./0011111111111111111100/.-,*(%! ??? #&(+-.//001111111111111111111111111000/.-,*'$!   !""""""""""""""""""""""""!!   !!"""""""""""""#######""""""""""""!    ???    ???  crack-attack-1.1.14/data/sign_x2.tga0000644000175000001440000002007410132356545016650 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2qUUqq8UUqq8UUUU8UUUqU8q8q8Uq8U8qqU8U8U8UUq88UqqqU8qU8UU8crack-attack-1.1.14/data/sign_x3.tga0000644000175000001440000002007410132356545016651 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2qU8qqUUqU888qq8UUUqUUUq8qU8Uqq8UUqUUUq8UU888U8qUqUq8U8q8qqUcrack-attack-1.1.14/data/sign_x4.tga0000644000175000001440000002007410132356545016652 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.28UqUqq8U8UU8U8qUU8qqUqq8UUUq8UUUU8U88U8UUUq8qqUUq888qcrack-attack-1.1.14/data/sign_x5.tga0000644000175000001440000002007410132356545016653 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.28888qqq8q8U8UUUqUUqU88UqUUUUqqUqqU8U8U8qUq8UU8UUUUU8crack-attack-1.1.14/data/sign_x6.tga0000644000175000001440000002007410132356545016654 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.28UU8Uqqqq8q8U8UU88qUq8qUUqqUUqqq8U8U8U8q8qUq8Uq8qU8UUcrack-attack-1.1.14/data/sign_x7.tga0000644000175000001440000002007410132356545016655 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2UqUqU8qUUqq88UU8UUqqU8Uq8UUUqUU8U8U8Uq8qqUcrack-attack-1.1.14/data/sign_x8.tga0000644000175000001440000002007410132356545016656 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2888UU8UU88qq8UU8UqqU8UqUUqU8qUU8U8U8Uq8U88888Uqq8Ucrack-attack-1.1.14/data/sign_x9.tga0000644000175000001440000002007410132356545016657 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2888UUqq88qq8UUUUUqq88UUqqUq8q8UUUq8U88U88Uq8UUUUqUqUq8crack-attack-1.1.14/data/sign_10.tga0000644000175000001440000002007410132356545016537 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2UU8888U8888Uqqq888qUqqUUUU8UU8qUUUqUU88UUU8UUUqqqqq88UqqUUUUUqUUqcrack-attack-1.1.14/data/sign_11.tga0000644000175000001440000002007410132356545016540 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2UU888U8U8888qq88qqUUqq8888UUUUqq88qqqqUUUUqUqUcrack-attack-1.1.14/data/sign_12.tga0000644000175000001440000002007410132356545016541 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2Uq8U8UU88qqq8U8UqUUU8UUUqqU8q888888qUUUUq8Uqq8qqqU8qUUUqU8UU8crack-attack-1.1.14/data/sign_x10.tga0000644000175000001440000002007410132356545016727 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2UU8888U8888Uqqq888qUqq"qqUUUUUU8UU8qUUqUqUUUq88UUUU8UqUUqU8q8U8Uq8qqq88UqqUUUUUqUUqcrack-attack-1.1.14/data/sign_x11.tga0000644000175000001440000002007410132356545016730 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2UU888U8U8888qq88qq"qqUUUUqqqUq8888UqUUUUU88U8Uq8qq88qqqqUUUUqUqUcrack-attack-1.1.14/data/sign_x12.tga0000644000175000001440000002007410132356545016731 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2Uq8U8UU88qqq8U8Uqq"qUUUU8UUUUqqU8q8q8Uq888U8qqUUU8U8U8UUq8q8Uqq8qqqU8qUUUqU8UU8crack-attack-1.1.14/data/message_anykey.tga0000644000175000001440000040007410132356545020305 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UUUUUUUUqUUUqU8U8UUq8UUUUUUUUUUqqUUUUUq888U8UqUUUUUq8UUUq8UUUUqqUUUUUUUUU8UqUUUUq8UU888U8UqqUUUUqqUUqUqqUqUqU8qU8UUqU8UUqU88UqUUUqUUUUU8U8qUUUUUUqUUUq8UqUU88UUqUU8UqUq88UUqUUUqUqUUU8UqUUUUU8Uqq8qU8U8UU8UU8qUqUUqq8qUUUU8UUUqUUqq8UU8q8U88UqUUUU8qUqqqUqUUUUqqU8Uq88UUqUUqU8UUqU8UqUUU8UUqUUqUUUq8qUUUUU8qU888UU8UqUq8UUUUUUUUUU88UUUqUUUUUU8qU88UUUU8UU88U8qUqqqqUqq88Uq88UUUUUUqqUUUUUUUq8U8q8UUq8UqqUqU8UUUU8UUq888qUqUUUUUUUUUqU8UUqqUUUUUUqq88q8UUUU8UU8UU8qUUU88UUUq8UqUU8qUqUUUUUUUUqq88UUUU8UUUU8UUUUUUUUUqU8UqUqUq8U8qU8UUq8qUUUUU8UUUUUU8qUU88qUUU8qU888qqqUqqU88qUqqUU8UU8UUUUUUUUUUqqUU8UqUUUU8qUqUUUqU88Uq8crack-attack-1.1.14/data/default_record0000644000175000001440000000045710132356544017511 0ustar webbsterusersAluminumAngel *********** Fish Person SidekickSeven ~5Moon Mellon Mr. Twinkles Cup ~9Shadow enoyaw [ Book ~8Plum Stankpants Food Mrs. Hidges ~3Banana 1337 h/|x0R Ladle Head ~2Apple ScrollLock ] Tater-Tot ~6Orange Sen-TR++ Happy Puppy Mr. Muddle Tony the Tortoise Rap Master B ~1A~2B~3C Tod Tortellini crack-attack-1.1.14/data/preview_normal.tga0000644000175000001440000100005410234254331020316 0ustar webbsterusers                        #+-,+*)++.137<<,')''()&'%'$%$'%&&()+,+/02223+, !"#"46431/./-.14563   155230.,++,//.-             '                      $                          !" !# 12 77 :: >>BB FG IK NO RR UV ZZ ]] WW32"")*  78 >> @B CD EE GH JK KL NN QQ RS UW UW :;##//C CD DD DE EF FF FG GG GH HI II II ID D$$  &&F FLLK KH HI II IH HHHF FF FD DD DB B. .6$Q 5h3f2a 1_ /] .Y -V,T+O )L 'K 'G #>! '(9; bc eh`a \] XYTUOP KK GG CD >= ;< 66## #$ --<>TUYZ[]`acfhilnpqsuxzmq DFCF11>>45 55WY^`aaceehhijklnopqsqrQQ:<8;22--GGcccccceeeeffffhhhhhh``::11##887 7ddk kj jiihhg gf fe ed dcca aGG**$$ &[>5fMMK~JzIuHsFpElDjCg>] !;1 (*:<JJFHz}~z|vxqqmphjdf`a\]WWBC##,- AACEXX#wx${}!~#$##$$RTEE QS ?A?@12DD HGJJ&uv++,,,*++fgFGHH EG() >>EE< [EH HL L..44[[T TJJ[[:GGGGGFw0wKKEEC C: :#*;w8o/i )X%WACDB~C|D|>=5npHI PQ]_ll[[NPGH ,, ZYcdkonovvAJLLI/ YZPQ Y[cfbeBC+*S S]]````__3SUVVJn nMMO OSSXX66? ?hhbb\ \S SnnKZZYW8XXP PN NM MD D %5GC};v0j2i-fRUUUJ K6s 0i -^ (S/;<;=`d w{ji \^JLop=IIIH0cd_`QQ CD23 FE^_mo}} 0HJ;xzJJ OP^_kk#y}ikXXPQ 13ddnowz&NZY5bdST ]^ghrqopML/. __iijjllnnpp?ehT|#|T TV VZZ``ggB BK Kuuppkkee``$[mh?kk\ \[[ZZYYMM%% $BSOF7.%rthkdg! tvfi QRgk$**{|?@ EE#"wx*1;B$y|DF UV "%'& \^>?ac!'/53xz45  22!&%%$&A A< <}} #'-kk22//xx30+&$(``66LLyy;;D4{>=}6s.j(a(b!Y *VDBVXTQLH&] (=?ik$H?6.')mn 8: CD ~os YYqs!&'z{ JJ KMTTce*0:AI%79 ]_ "%'$fg NPTVYZ~/5=8;< 88&+*)+QQKKLLSS$(-2uu99 66:61..kkOOLLH H__ "#??N:EE=7u4t$b65|TWKL BA PQxy `a||#$ww UW]^cdkm!ru'0$AIT)<< gh%%("oqdfikoptuz{(#-> ==@;81||lliiff``^^nn%'#CC"X AMKE@%hO!J|Ew?q7l3hGR\XS,j IK-YRIC=>a.CDy{+  %&)-0368)IG CDMM46"''&((((()&'A==II K5"31/,)%#!*&KK (f O\W/|:{?{:t2n.f*_%ZSKGLT!a2uXY=kM6IC=5/'!|sujljk{}tvZY//D)*z{#(,17;AGMSBQ/IJ#'),/1699=AA0E ?@ VV2+00000001122&2;;KK"9-?=:742/-)'$"$PP)i W[6GKGB<8y3q,j(d$]VQLX6}abATFYSLG>9/*"xy st xx xy PN|$UTy')+ tw!&*/39)NPvw"%(+-236::=AC?' 9;ZZ+///0111111112" 88QQ,?=:97420-+)&#II*j\6NPJGB=84{0t+n'h"a\U J/vhh 1H_XRKE@:4,'  xzij =<^sr2@?ZY[uu{{ PR MN ./22xx66uu(b Tlj hfe c ` ^ [ Y VSOKHD5np {{FF((>`^2>>@"!mowxVY RR66LL99 1{TTTROMLKIIGJKLJ2|./uuefccr2ZZZ%%45EFlmwysuoquvbcefmn{|vzACAB*+/089KLuwz|qrvx}~prrsxzuyBCAB! --44TTllkkggeeppggllooooSS9966 2255XXjjddeeffrrggqqppnnOO7722/F P7:32}5;8;=8!RG;//;=EEoqrt`b\]ccuwps}z}ln@A67!!2yyy...         >>>2GGG % * . 169<?DGLPS>) " $579<@C E!I"K#O%P&S'U#K) --11113333444444665566777788 5!K"J"H!H!G H FDBCBB@5 ( EJFCA?=;9732/, $ 6 B @ = 9 7 4 0. + (%! ]]]%%4LL^& ,DM R W!#\"#a$&e%'j'(n))s+,x-,z-.`##M?F : 'N7c9g:jr?vAxB}DEGBz (O!O) 7777YY__aabbcccceeddgggghhggGG880G 3hHHGF|F|FyExDxDwCtCt=e "@:QHy/0|34x13t01r00n./k-.h,,d+,a*,])*Y()@.( 9 =Uifc^[WRPKGD; ***2FCc++m//q02w24{44678798:<;?Z/0C=(+AU = f.~'+|%+w%+s$*p"'l!'g"'d!&` $W5 ,9S_&'Z&(;;@@BCCEDFFGHJIK76^ Yj(*V"!MI, 1j 8v6l!O2h2j2l2n4p4q5r2h@u/k 7q 7jG- RR\ \W W``3;;;;;;;t+tVVSSY Y,,  G > 9} 0e([>~?@~@}>|>|>|;pCq 2n /i&U "( s**o')\i**RS[\Y[Y[XYWXUWTUs>>W""PE 1.J bR A (t ;2;3938181514~.2q,H@5  ?Z##m,+x44s22IJPRRTTUUVTU@A] !Ye')u35c))VP3 7w?EE-a@BBBA;yL3t 8tA{Av#U9\ \ggkkffx!xBLLLLK6dd\ \aacc55 &RGC ?=}2oQQQRPI$Q; 8z 6v -b# % 1 45}13s()^|56benqmplnknikNNm,,e%%Z O$ 33U&m]N K 1*H>H@G?E=F?>7#YRJ: ' Fa&'v12:;?@=>Y[accdabGHe"$Ud&&q24<@p02]T :<ELT S7vOPPG$X5x 8yCLK*`= e essuuzzxx)R^_\>ssd dhhkkrr??  .^PLHBH@bedW,`E@>=4o+$ ;<<:=}13r)(e"">@uv݃ځZ\56{./p))e%%Z + 39_.{)'kZK Q;2SKVLUKLE,l&#f\O? , Ml((~33=?HHLLGIhilmNOg&$Rb%'o12<=HJ|56eG CCKS Z%a(aD^O%^ 7} :zDN"X"U.mG pp3ajD~~l loouu||II& 5j [WSMITLtb.kNIHGE<}4, DFFDC;>}23s))m%%IJ䄅de>@8823y-.p((d$&1 )?j8/.w%$gWG VB:aVVM2~++z$'p! cUG 3  ;[&&S#%  6[%&S$$ 7Z%&V$%!F<>=> Uu,,77BBKMUWVXSUTWn((Q]$#o/0};?CCj-.i,.GHi24AB J##v78 \!|00:=EDOOYY^aNN==[\#"l..y::EDPQ[Z@@u!3 &UPW!^'g*o.v1x,lS =FP!Z)d/m-j99%%!!"""$.,#'^ ^**5C-n(j%f"a\X"b-o'jZYXWUTIC2 WYZVVMNDG=>43~--BDKLHKCD??:<6722u--? 'J(~ JB?74+)o!`QY,z&5,8.1(+{##oaS< =>f)* Z+)(HHW--8:n,. W(*-DEa1257u/1 W))-ABg57 HH ORb#!44>?HIRSZ\KLg%%k)*??m,,w98DCOOZYfhDFz!#D  *`U!^%e)m-u/w"] 2n#^UQ!\)e.n7y5t>A ++%%%&'-rrff%!$)-i i00 >J2x-s+o'j$h)n(g 3s"X d__!^!]![QI:ebc`bWWNOFG?@JL}10]! EFEFDE>@::66~12F /P,"PHJA@72|,)m!)p .{%A _0)/'-%%u fYA  DE YZ\\UV'de BD  TV^_UW.]` BC QR_aVU0_b 5XZ WZk&%77@BKKSUFGc#$PY!":~ 2m 5s \a#e"e#d$cWN ?p!lnimabWWPQVW24\##Rh$&@ABBCE>@9956L 2W/&ZOOGC;9580.&RA :^+#-%(z"m^F 09;,oq |@B?"#fh(=>$lm#p:;L),Y\+'=>#ij+k8:P,-[\(:bc=> [\t)*; 3p#a%i*q,uV :~<AG Q/qc6z@FBFM <<(//0.zziillmmoo "%049~~;; PYA<96$iKGCA?!^`'k(k'j#]!U  H|$&turvimac`b:?9:Q 9 _5-cZWOLDI@3)&i!#`!TI@ \'x(!$scJ 4@B+wze56ijL,,\^1 +DE#vwq;FF<78w00o()|-.87AACD>=U ? f=3lcbZYO7/6.7~11s+)h!]RG [!p&xkO  ST hj㇉gi1## PQ  df牌$Z]C01 NN ^_牊-Y[G13DC  _a/1@@67l#%w,.}33;76/10045ACABY D lD8tih`?5G?MEB;<34|,)p#"eZP \j pSed"".II8*LL@')BCB!"'{HKF+-wy3%'>?K$$%|HIG,.xz2&'IH acNO ef!2323n%%10::@AGIOPWV]aeglnswz|deZ\)*IB&nQV!`&e*j.p2u5z9=?D:?OQLQQ4),--../00112!E::(g!mL$u7<:6~2{0v.s+o'j&g#ec!l&o&dW/0uw^_stloff_bWZQTKKDE><694422BC_ IuJ?vlD:YQ`UWOMDH=?64+/y&&maWW eXGEf)`_[]/VX8   VW;!" DE!sump rt$ v'(y)*78??GGNOUT\^celmruz{₄艋qrYZ++M  ?P"b'k+p.u3{6;>BFJNP=:UGUU#$566777899:;;9%;;,ml,EHED@=<740|.y+t(qdc)hX33wyqs눈䁃{{stlmeg__XZPRJLDD==8900` MF?CFIJOOUUZ[`b_`JK'(H (c INRTY]aehmq!v"z&'xJ7@@ "" P Xt"v utqpolkheb_^ZH;M22PR]^[\XZUWRTOQLNIIED@A:;5712--&'9 M ,!B6D:C7A5=2:/6-4+/'+"$xnc[ P5&USz2om42DUVlm }SW~nq  vPR~rr Z23Z]aABkly{*!#2 amimvz ! #$$%'(**++//1203c 6@?@ACEGILNPRVYZ#VXX++&^RRQPPPPONNNMLNM#ZU.-./..,-,-+,*+)*))((&&%'#%#%"$a I~zwtq k g b ^ Z \L >=Z2iil        % 3 . MV?INMS:3 1 .  !3BI(g-q!T!R)g+k-pKC@9  ))3399NNRRHH??XXTTUU8855..'' 0:CP*j,o-s"W+m0y/vMG;.( - 4 >RRNFM`U=7 + !$+99<48F9'( 2262)))VVV2AAA ! % + . 479>BDGB. !#%&)*,- %&&(*++-/.1223( ",*(&$! $B&X&V$R!LG@;5/+&#   ***vvv2CBR# 6GMTZ` !h#$l%'q('x++~--00230/d "PW'A H K O R UX[_beijR <&D/e = ? @ @ A CCDFFHIC (R%! ;`ecba`_^]\ ZYW: # F _pmjgc_]YVSO M B $ 4#[0p ;UVQOJFC>;z 8s 3m 0b +\="AAB:CRc%&i()p*+u--|/02245679;<;89q'(u'']^9 ?<\c e i"l"o#s#v&y%}(} bP O,1u -^CUWWYZ [[ ] ^"_ X9i64 0Q L'z *~"+}#)|"(z"(y!(w )w"&u 'u!&r!TA5$dN "p-%+#)")} &y!&v#r%o$k"h ]; : R&b <FB!b!c _[XTPLGE@v0W #K4@b$&^))k+-4368::<=>?@BCEEF@B|/.r&&0/f%%[PN QQ*v#-~%-&0'0(1)2*4+4**r"Z\ Z3! 8 A:s#X.n.p.q/r1s.t1u2v0mI = ?@ 7hX ^80=5;5=4=4=3;2;1:1.k&T P =  *nhQ.$:1907.7.6-3-5,3,/x)QM C %^&c AWCJ*o+p+m)i(e'b%]#Z#VBr5i /c;Gi()56u568:CCEFHJJKMMOOIJ45p$&y-/::q,,a[ U b"f'h!80<3=4?6?6?8@83,b\ he;+ >ILH/n>?BB@C>#Y D DI#K" ? ql^)s"G=ODNFNCMENCNC<5f\ Y F  %0"ytg\7-I?H?G>F=E=E;?7&f#`UI )h*lG#`Q >S2{6~4z3w2r1o/k%SEB 4kB Kp**87EFACEFPSSUVVXYQQ=>m#$s*+78CE|22fW %[h%u,x'1~+D=;/e"U TF 6p!I Sv,,;;HJUUNORS_abc[\ABj!#m''|54AAMO89nW )b!o&| /'5-=4SJZOYNELMY[dfYZ^_bdFFe!"h$&w11==JJVX;=uH-h#u*#1(:2A7G=]SOD%y^ h#t+"4+0( M'$Q]b!e#i%m5{Wa;XSW\_"c 3m1 V/',$( %"'KBui^V6-%#"z!v r^ 'C8/7..&&|qe,%XMe[G;6,.%( #ti\&-H4\5|.n!^P@ =.pJ?2u5x-j#\M>(Y ]34@BNO\]ijrtbbLNc a!"q./;=GGST`c@Az >  3n&|-%4+=1D:I?K@+#^ h"t+#4+:17/ S$+Y d"g%l'p's+y=B`X[`"e%g(l 7v7_5-2).&*"'$1'QG?7*"( &&%$zf#) J?4>36-,$$|ph6-K@?56.1)+#&{ob*M6b>3x(h YK <|A3x<>6~-m$`QA +_ c!"57CDQS^`kojlHIEF35l**|7:DHQR]]ikDD"#B 8"u) 0&8-@4H5 Y( 3_%k&p(s*w,|54~/u'o_ d#h&m*q-v =?#g;39/4,2)-$-$?52)@50(,$+$+!)!&!o&- PF4:17.5+A9&Xp90-&0&-&-$+#&w* 2 XMCKAF<;24,7.8/_P-$7-5+1'+"%|p4 #Z?#qLB7|,l$a.qW6r <*i4{/t'gXH 0kq&';;GGVXYZ;Y[BBWYcgps}~KL$%DB '.$6,>3;0i[ bj3+6+2)C;J?RIMCd0 C$m,y,}04+tMIJS/{"o-z369 HL,wG>E:A6>4E:#~iea "z2*.&2)0(0'(!, 7 ^SJSJLBC:C99-pe[X )!1'2*.$("v 6 *iC'xSI@7x9\KB} 7t ?'c-q(i [M 3q w)*<=KKOP24l"%y+-~43;=DGPQbcKLmnz~ڇPR&'KI )!2)9.6,ign#u)}!-%=57+B7SI\OSHh1 M)t026#kSWXZ[ a1~!o6;? M!T2!NCJ@G?E9%'&}"x tn&/$0'5,5++#/;f]Q\OSJPE5,+"/''w"ne_&}+#/'+#$} 9 -uF+YPH@#g(d&]RG <|?Y'g!_P 7w |,,?@FG|/0r%%~//89@AHHPRY[dekm^_ӂ䑔ST''LM .%4*/$jq$y( ,$1)7.<3H=7-REcWYNn/"U-|37!i]e!f#g#h#j&k(p0(y@EQL6#RHOEE8* 5+3+/',$*!&#}*!) 6+9--$1?mcYbX]P8,:1?5:11),$$wmg#z',$' < 2K3dYD*u>6v/k(`UJ??P ^T 8| ^]   ..=@t)*x)*45<;DELOUV]]ehmnwwsvpr횜VW(*MR 0$* k#~( .&2)6-;1@5F4A7F=KAQETKYN]PB5[Pv) +i/f+x013456589:;-8YM=)B9:/QHNDLAH=E9A7>5;08.2)/&0%#-%6A} f\B5`RbX]RUKOEG>B9905+,$&xo!| B 6U=PHdZULB<3s)i$^RH @> ; --=ih2|z;9J  8!# ^-.79>@FFNOUV\]dglotu|}ㄆ싍vwPQ))C  Cq( .#3)6,;/@5C9G3dZh\`W\OSKODI?D:<37./'+#$xd 5 0xV(MibYSLC>7{-p'f![QG <+fSQn2ca} *-2   D*,E)) 7 LSY`fnv~!#%$'(+*-.12458855HLOSVZ] a f j n rw|,:BCDEFGHIJKLMOOQ15 w v u u s s r p o n m kj hgI8~{wsp l h d _YTQ(^ _ e b _ [ X V R M IE@:5~/s)h9:9Nyw2}}}*** M01W78,  "T46zRS8"#>/ 4 9>@IM4 4 - ).+-139=&&% 54=%^ S!T"W"W$[,p<>D%"(=43332=! # %%);7530/6':>E%]$[#V!RMHIN('/NNN2JJJ0|RSWXbAA[;:rLOno]]*nnn2jjj  gDE˖]], ""$$&%)*++.-...//.$$  !!#%$$$%$%##                  *#       ===2sq S68ۯקjk?)) ;;FFNP VW ^`fhnovy~psgj,,<>TU[\`b fh ln rtwy| loMN !H 6y : < = > @BDDFGHIK 7xA?n$%,.+,*+**}*+}(({'*x'(w&'u&&t&$q$$p$&_ 1-#X ?TTQMJG C @ = : 6}4v0p-i? /./=<=USU`^`ZXZUSUONOHHHECEA?A<:<6663130-0)))&$& ZZZ ]=>ỼtNO7"# >? @@ ^^ hkpry| !|~wyFG'' MN ff}~ TT// ;9nTXY[\^_abdeeNE$P Zx((89BBBB@B@@?@>?=>=><<;:;=55]#$\ @%_WO#m#m!j fc_\XUQOI4b,a %#%333KKKRQRigisqsmkmigieae\\\XVXTRTNNNIHIDCD>>>545""" 6!#ZYʙأ~}UVN24% KMabYZvy $$ tvZ]--{|ef "$%'%YZ58 IJI"h$k$l%n'o'p(r(s)u)u#^RS'Y b99/0HHPQPQOONPNMMMLMKMJJEFr35,,h C(edWY,z+y*u(r'n%l#g!d`]Gx>| 9  +*+333RQRhghOMOpopxwxtstomohghdbda^aXXXTSTONOEEE424989 3vNP{}ƒԥ͟zz[]mIJX8?"!" 4 \;>mGGoJLxPQkkÓҟqt]==1    TWx{&1(!#%'**&(z|de 56&.-/22463*ghAC P]d!a2s=>?@@@:#i\]a/h0"o$$DEBB=@CDdgnomplmlmkldfRT@A8955x''E-q#q#ncR+r==<;972m&c]O B, +*+878[X[wuwhfhWVWSSS~~~{z{xuxspshfhWVWa`aVTVA@A$#$ (+" &K01aapJL"YY}&6?0)*--+".gh 9;&1689<=<2&!mpEF Tbi#p*o?IKKLE,u^aeh3q1$ v''IKGHDF@BNNtv|~{}{tuacKJAC<=78|,+ J1y(w't j`U5GEDC>2u(naT F3,+,9:9^^^~|~mlm_]_NNNVVVwuwhfhwuwmjmXWXCCC&&&   S67bdM12 \^(8EJ8122 |~ +6PQ=>)3>BDEE:%+'rt;;%Zg"m%t+{3KVWP3ceh!l$o7y6 * |)*NOKNHIFGDDZ[npSUIJFFAC<HLL@"*1-y}77)_!l$q)x-0 "!"?=?hfh{y{mkm\[\OLO@?@dcdqoq_\_HGH***K/.* ce)9FV_H2 uwvw$.9COP GH"-8BLPL+")/72~:;.c%q(v+|/28QP&tm"o$s(v*z,}>@3 ./XYVVRSQQNPJM]^ttZ[VXRRMOHIDE77+  T;67/'t!j_W8KG@5+z%l_PB%$%@@@nknrprdbdTTTFDFNNN~sqsa_aJKJ---. ij+:GTB"%+#*4?IHH LN#.:DJ<>% (.6>7>? 4g&u*|.27H1}*uB$t&w)z,~.1 CD9 13]_Z[WYUVRS^anqEFgiegY[UWRSMMHI:;.  #[==<4.z&p h7+ub@?7/~'qbUH &%&BCBqoqxwxkik[Z[\\\xvxSQSjjjvtvdadOMO... mn*;G;/*!1>0 'bAA@:2,y;'pYP`960(s fX!L /./EEEutu~qoqomozwzUUUIIICDCdadywyedePPP101  rs-91 %9.2AMU UU WY)28+ )>$:DI@DF B"q)03<#kadfh03,49= JL B78fhcfacfi]_EEDC@A==??\\SVXYTVQRBB3 (fCFE>8=#p!hc[R_0y/)x!j\!O 313IHI{y{xxxccc^^^TUTHIHABAZYZuuuzxzhfhTRT323 vx ,&~ $.5D0BS^ XZ ]^(1"#(-4>,GQFBDH$v-25 gj m o#q#r%t3.5>? MLG::kmijkkVZKLPQLMIJEFBCBCVXOPXYTUDE6  +mGKJC>$v0|-w&n!f]V]'k)u$n`#R 777LKL~|z|uruvuvkkk```VTVIJIBBBRQRfefihiUUU545;:S z| tw (-5;4.y'q!h`W[ ^#mc%W 878OMOvuvlkl`_`VUVKKKBBBJJJWWWXWX65664B65A~ pr!(.5L:;#W*(wg+}+~,,/.01148%zD SCL?@osNOaagjdf`b^`Z\WWSUPQLNKLIJJKJJ; +lOU=5NIA;5.|)s#kc[YSd%Z 888TRTxvxljl`a`VVVLKLBAB@?@JHJ777#"*`^v2vt"!)ac os")/6>FKSXa_< <= be"&*04:=CGLOU<423&^i m-02255677::;<$| Q@L;;(eQ;@ZVOJD>70+w$of^WI$W ///YVYxvxmlmcacXVXNLNCBC353,-,GEV2\[l56PSXZ `a ik rs||#JK78ll vx {~ CD DPRSTVWXYZ\]^_a[#V c:;=?=><=;=:<8:78685645341300,.q  +kl w splhc_[VRMIB =4y+)&)heh}{}|||vwvrrrolohehb_b[Y[QRQMMMHFHB?B;8;101(&(..6sq¾2¾BAD #$((-.1166EHDFKKNPNOVV[[`aXW)* 3467:9>=?@EGLNQSVWTTVXYZ]`bc33  P"T"V#X#Z(f(e)h+l(e(e(f)h*jMBRRQPUVUTULKJH? K.t.p,n+l+k+p*j(f&\#W!SOJE#///101...-,-***,,,)*)('()()! ! ZYZ2^]b                &%&zxz2|{   !%*,1388<2       "#')*)               )     ) 4 . ' #   FDF2wv,+.&1<G#R(]-h0p 6z ; ? D GK H>5K 2@H!P%Y(`-i0m4v8 : ? A D G9,n- . : < > @ B E F H J LN PP Q I4 $%\5~876}4z3x2t1q0n/l-j,g,e+d*aA. \t!")({''t%&o##h !a\UNGC=95% <i!#,--.*)w'&m$$f!!] VMC94-%  ecf)()<+_6{ ; CJPW^!d%l(r+x/,|b OC'c 7 /^ CIOTY_di"o%t(y*~,i[5B[s!!#%&() *!-!-$/%,!t G5 >X!t!u!s!r qommkiigdL < @k>@PPYYUWRROOKMGIDE@A>>9;6823~*+R U~ 77EG`a]]XXRSMNHJCC=>8932-.y')n""E-   /f9\ 8u @FMTZb"h&n)u-|)we)u SA-u FKBuQU[_d!i"n&t(y+-kni5I}m&'(* *",#-#0%0&2'3)1&( ' M4 Gkc('|'{&y%x$v$v"s"s"q nYYJ ClVXA@WZ[[WXTTQQLNJKEGCC>@<>45i**,-# ^ >?OQFG_bZ\UWPRKLEE?@<<7811+,[!"] !B##33@@BBAABBCCAABBBBAABBCCAABBBBAAAACCAABBBBAAAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBC>B>OO[[__]]]]]]]]]]__]]]]]]]]]]__]]]]]]]]]]__]]]]\\]]^^__]]]]\\]]^^__]]]]\\]]^^__^^]]\\]]^^__^^]]\\]]^^__^^]]\\]]^^^^^Y`T`QbLiH{Sb"b/2lR+h/aSU[a!i$o(v$r#n f$n0Y@3 JW#i,m,i!j l%r&v){,-*w)x o%x!q8#[!).%5,>55*8-8.:/<0=1:0?60%+ +!Q$<J&{%ym7711///.0w0|!neN HrY[VXMNDDdf`b[\XZUVQRNOHJIJJM>@00( c"@A]]RT==OP]_WYRSMMGIBB>>78BBCDx//E@@UUmm{ {~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| |{ {| |} }~ ~~ ~| |{ {| |} }~ ~~ ~| |{ {| |} }~ ~~ ~| |{ {} }} } w s o ifo3~B%T  2nT,k>:r!`_f#l's$o+u_d's1[@1}!LW#i.{97{'v'x*}-01/|i#r*}#u9#Y"*!1%5*C8I?>2?4B4A4B5LC4'+-!.% S"=K(}%{%y$p@;7776<;'y"phP #Gs[^XXOPFGKLlnad^`Z\WXSTXZZ[NP@A22) ] "@B__SSHG66ST]^UVPPJLEFADPRVXEFz00H%%QQll)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/D[`C| 3pT,l>ND)n!h#p&t.xVY#i,w2^A&b!OY"j.}>EB../=1cl&w-)y9 U"+!1'7,<0OETGE9G;L?VL5*+!-#/%0%V# AM('}%{$y+zNC<>JF-&{"skS $Ft]\Z[RTIJ?@QSqsef`b]_hjkl^_QPAD32* # I!!BD_bTVIH=;22Y[[\RSNOOQ`cjmXZEF{11H))]]0LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTuP 4qV-m>O^K-y,y1{NN_%l.{:_A'e#P[#l0~>KSJ8E4_g!q){/)}<F","2(8,>2D:]T\RVJbV8.-!.#/%1'4)Y$DN))'}%{#y0YJUQ6.)~$umU$Fz_^[]SVKKCD;<]_uvlnxzy{np`bQQCE54, ) M""CDadUWJK>>3121^`[[[[prmoY[FH~22J--ccFkooppooooppooooopooooopooooopoooooppooooppooooppooooppooooppuBr  5sV-o@PamT7G DT!c(p1;bC U $S\#m/>KW_Y8Y` j&u-4,<G#-"3*:.?3E:OBnbnb=2.".%0%1'3)4*Z$FP+*('}%{#yKVXHD`e"n(y.6.=J#-!3(:/@4E;WKi\eYJ?/%2'2(4(7+9,\% HR-+)'&}'~OR^?61+'z rY(I~ ad^`WUNPFG??IKstst~ptbcTVFE670 !P""EFdeXXMNAB57++IJVXmp⃅op[[GH34N==@chhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghmp7X  7vX,p@QS6{b#k;]['k/z8CcD'c&Y]%p2?KN4#r9;f%s-~2:2>!T $.#4);0A5NC[S:/6,]QC53(5*7+9-;/^& LS,,*)*HA&y9Q81.)}$u\*O!cd`aXYPPHIOOjmOPGGhhuurtceUWFH773  ["#EHefZ[MNBC8:OQNP::@Abc{}pr\]II45O'']]x0xw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yx3xw2wx2xx2xy3yy3yx3xv2vx2xx2xy3yy3yy3xy2tz2s{2m{3k|6it6_9* 8yY,rAE-jZ` i,v9_*p26?!S!%/&5*<0I>PE3(.#/%7,VK909-:-;0<0` ' OU--,,E5&{$x#t5D3/*$w]*R !dfbbZ[QRUXabLOHICEBD\^gjddVXGH9:5g$$EGfh[[OPEETWIJBC<=45::WZln]_JL56Q 8{Z-r5}"XQ[d$l)u2:e6?IgE+m (]`'r36"dg o$t){-@3.:?7?P#(/&7*A6A8,#/$1&2%1(9-NC3)=0=1@4c ( QW0/.=.''}${#w!s0:-+%y`- T!!ggcd\][[X[PPRRMNHHAC=?QSXZWXIK:;5m$$GIgk\]RQUVGHKLGHAA882245KMXZJM66RGE]  :|[(hKKW`"i(q-z3<:(uBJiE+k *`b&r)oZf m"r'x+~/3?,7E7@K$)0';.4,,"/%1&2'4(4)5):-F:3(@5B6e "NX1/5'y-*)&}%z#v!t+~-y)({b.W!"giegbcTUVV\]VVOPIKDE>?;55..-/>?HH77T%%*?>G ;S?==8j&'JKjmXZPPcf^`VWOQHI@A9;11)+y()j1266U TR]##4mky)(. 5s .d BOW`#i*r/z5;?DK99kIF ,dLLah!n%s(y-038;@A(5A7(' }-#0&2'4'5)5*7+9,9-9.:/;04)2)g ""TZ({%y631.-+(~&{#x"u q#q]_.J##dfOOilnohicd]^VWQPJLEF?@9933/0249 ]'(KJZ[XZprjkbc[\SULMDE=>67/.w&'n!"U!#N 77>2POZ F 9DMU^#e'n,v28>CHK0 \,oD@X^ch$n&u){/258?7824-/h!!+ e::^`rumoeg_aXZQRJKCD<<66..r'(h!X.2:9@   *2;DK!V&`*i0t49<$[ ,15=AGP!U$[(d*l.s0y360z%/124579:<=?@CEF &.r-r-r+o+m*k*h)g(g&d&a&^$\#Y!V5ookhc_ZVQLGA; 7 . ( Wz vqkd^VOF?6/ '   ifr2RPZ         "          # %           !"%      $ (            98>2mly#"' "&*/00+ $$&&**//22446633* * ( % % $ % % ( ' * , . . /  3300,,))''$$$$!! - @>94 0 + ' #  ###"!"      VU^2ki=>==;;883 gy pid\UPKD>9 5 / * % $ &$&979DCD?=?;8;5450/0,+,('($"$ ml|$) AN Xc"l&x.%3,:1=5A8D;H>I@1& r@11f f||"'-1258:1||551 ,-<>3 AB;>GHIJLMNOQRSTUVXY[\]^`cadLNRS&'- 77 -/.-,*))(&%$ Q"%giTUoqjmgibe]^XYSVNNIIGGAA<<../04 212KJK|||zxzqoqhgha^aVVVNNN@>@202*)*P !gW] ep$z( -%6,<2@8E:1%;1J? kNJJ!&)0570)9-vvEE4 HJIKGGKLJLMNOPRRUVWYZ[[]]_OQ\^]^&'0 994"2-,+)((&%$ ##S!#tv^aUWlndf`b[]VWQQMNHJCD>>55?A;<4 444JHJ|{|xvx}tttmkmeceZ[ZRRRFEF?>?PPP.-.O &v2~+'kel v&,"1(7-:1.%;1?5I?hNJJ$(#(,1-.46,ttII3 GIRSNPTUNPKLNOPQSUVWXXYYSUce[]\^%'7==31%7+*('&%%#0+" T!#qsmpTY]^gj]_XYTVOPJLFH@B=71,& I !ad]`UVMNDE<=66hjtvdfUWFG78) ('(HFHpppqnqd`dSRSDBDNMNlklQQQ+)+I o1(C;UKeYULA6A75-d s) 3(<0D9_7??!.:EPNBL&%+1(ii<<+ =?GJNPUW]_dfRSPRRRSUTUVVt"", 66&&%#!0WK[J71+%M}_`ZZRSHJAA;<]]oqjl{}~tvdeUWEG66) )))GFGono}z}nln^]^ONOQOQ}|y|lilQPQ*(* H!n2*C:SKI?6.2(6,B83*r( 1&;.B9^A>>!-:CC43:F"$+1'ff99) =;FHMOTU\]turvjlkm{|prNPQRRRSTUUp!!* 55%#"!,K=8;O>1*$L|[^WXNNFI@A[\cdZ]WW__lmnqcdUUEF57'  424FEFmlmywyihiZYZWVWywyrrromojijvuvkikPOP)()F l1+A9:3-|%+#0$3*9.C80'(/&:/D:]?== ,76--027?#)0'ff33) :;DFLKTSfiad`bbdceefqsffLOQRRSTUn!!* 66#" )>64314C2+%KyYZSVKLEFWYXZXZVXRSMOSV^`_aTUDE54$ 434EDEljlssseceb_bspsrortqtljlece`_`hfh~khkNON&'&@?H Fl/(-y&$j%) -#2'5,4{ `#55}}dd!#&),.1+!&aa " 56:9==JJKMLMMPNOPQPQQSSTSTVX@BMNj--y y&)'&$#"!>tPQGGIJZZWWRTMOJJFFAB>?:;5434i-,01# )()FDFbabvuvgdg}|}~}~ywyrprjijdbd^[^UTUOLOGFG@?@989>=>%&%6572?>A( =Y aiq#z',!0'4+:.>3B7C6(w G,,N N~~#%'*.0#^^ ! {))35BCDEEFEFGGHIHJJKKJLMMNNOML89b&&m m"%$"!k k!s@?IKY\WVRTMOJJFHAC>AAJJOOTTZ Z_ _e el lq qWW9IMNORRTWY[]_ad]) 00XX]]\\ZZYYVVTTRRPPNNKKIIFFEEAA++n|''y&&t##n!"j! d]WPJB>70 ! 232HGHIHIEDE@@@<<<8785450.0***&&&  qp¿2rp !+7>6+/ $$))11**'',,$$**./,-'(01"!          !    #"##" !!9 - 1 4 - & && %' #!    $#,-3334,-## IGV2'&. -CMG?8:;AIQ#X%^&_'c&`A/$$::BB??;;//----2255::>>BBFFGGGG)) **QPUVTUMOAB<>9::;<<??GGKLPQOPMO%%$>@?:5.)(&)+053/K+o+o*j'c#YOE?::;IKKD  LM``\^VWPQGIAA9823,+)*&&113469,-bav2BAN)GJ S$[)c+m0u3}58;=@CEE?*j HHHHJJMMRRVV\\__ccffiillppssvvww__((^_kmhjikjjlmnnoqpqqrqsrtuvuwwy{|ab!"K[VTRQOMLJIGEDDE:A7F@<9741~/w.q*l'f%a#Z!T"VL RTyy{}rtklceZ\STMNFF@@9824-.-.#"*yw"      C)Z 2e:nAzHOV]c#j%p'w+},#|gR-q::``h hrrxx "##66BB:<4 o~}{ywu]''aNm wrmhd_\WSOK F B >6~Ceh''#~uy kn adZZPP24   987677?=PP2#$T**`)*W 2)(gH&'P.-^88k !!I/.b;9s//Y6,+j&'U0/`-11z4z|<|  BB7}7>~>EE " @B?ADDs>@    /h 9 DNY#c,n1x9AIPW`W7vQ/w UUww$+38=CHNTX71AAOP"'*--168:>@CF>( ;;:-$H:G:F:F:B8D7C6@6A2?3>1;09.(#()jP6ITOLFA<830*w'r!k\K#Tjl-=b_XQJE=4.(! klVW U'%DD-TVZ67 11{)TTRR+-[""O ;KKABr('^ZZAA//V 45dCBt&&G00j2DCz-.Q""Q6/ :9f_+_((H'H: :99 7NN??-!]42F)(PO JJI&&R01WW  AC? EOY"e+n2y;AHPF3YtM1| [ [$*08=CHK1CBCCNO)$#$'+./488<4)D <=9%F:1%B6A4>4=1<0;0:/9,7+8,3*(5),!$+nOZ0DHE?:41*{'u#mgZS g#Smn5S5WQJB<4.'! qr ii C#%n<yJJTV5d55JJNN`>@ ?Z RE EOZ#d+o1z;A:1MVoI2} Y Y #(.4;>+DM>}}EEKN)-!&"&'+,12/-BC BC:#OCY)i(^J EPZ$d,o2y-x2CIQjF.q TT&'$"(/1&ACI:wwBB HK&,-'* "%&+(4=<> ==8"J>G<5*=25*1%.$.#,",!)*B8=09-& *jJTPB&y>0-{)t"ng`Y'k.%tdFfh0XO16A3/%!~'*abI..z{K33 56hVUABqVV{((M4IIg=<[LKn)(A99d WVz4'?>a+HEcrH!!  ++H1H1ֆPsPNMgiZZ]CD=-. gidd  <V(j5z/lPFPZ$ee37:AMfD)h QQ#-0+ &(?7>D6rr>> DE$*--0-""=:79;:;6F9C7A60'A60&)'%$0&K>A3:.6)% (eHMIA5(z=%p!jc]X/v8/$p_B\].TJ@#54&!07+ ]^^anqce  DDxNKo ;9ZEEd",)(C87V75Q11D)&%6++F=.2@2o@B=&& C,. fh%X9;ehjlK77  :~T'h2|?8zTFPZ0}-p+q6>IaB&c LL!+583-=,29?4mm66 @A#'),,9-A8/156 }46&2zB5@3<08-3&I>+ !8/OEB5;17,3(" &aEHA=3'q,z7`YX9C;0}$n^:#$WX-JB:14(;E8*XZ ֤͐ SR.[Z j=jY9YlL;L=3=N|N4@41;1 X\Y<> %lnnKMaKL  7yR&e1z@I=VT1y _])k0{:D^?I JJ (2:?7/8"%.4<0hh11=>!$').0C, H7+,/01 xx/10t<1:.7-3)0&5*OD'>4VKD8?18.4)/%|$]CD=7-z'oa3~.y]@HB8.y#iY7PR,D=2' 3#DSF6)TW.!"mRT3()FDdBA\N1NX4%4_e +JiJRlRL^Lbub ^DDpqyz& ]FF[FH  6tP&c1w>NSB1vNIV"e,u6AZ=$ZEE'1:BJE5#)08,bb--:: $'*/4NM2$'(*,.qr++-n7,4)1'/$-"(=1ZPYPF:?3:05+0',!v#Y@;7.})r!h]W7IPI?6*w hW2''QR(>6-"tv4N_SE5(QS  ! 4pM"`1u>KOA<O BP `(o3};W:!T??%/8AJQ<$,2'[[3346 $(,8Y]3"&'(+jl'(*h1(0$-#* '&I;h]`SD9=29,3),%) p#Y=7/*t#i^TZDNOI>4(rbR-&'NP&:/$ qr:G\SE4'NP2kL#^0s=C9};?9MK[$h,v6S9(e;;#-6?HNL3 '-%XX66/0!%/MX\O, !"'&ef""'c-%)!&%$A7^QdXbUQH:/5*/%*"(k "Y:0~+w"mbWY:FEDE>2(p`P( bc!2+ |}234>OC3%~JL/fH"[/p6z1j5y5:;2{LSb(q1 P7&_77zz!+4=CEFD,")!TT(()) (@MOPPG% !$^a %](%#!91QFWLXKVKTIE<3).$(!%f  O7)v$odYY4{;=;989}0{'l\L%ab," ,-/*+5B3%z{FG% -bF"Y*d&X)h,r-x2}47.uK\%l/z L5'a 11ww)268:;=<%%OO++$%"8BCCECC;"XZ!W "!2(E9KAKAKAK@J?E<91+!&"a #Y4&og\Z*p47420.y.m,g&hZ J hi(&,*)'$#,1$uwDD rpr *]CPF W#a&f'l*q-u/{1(nQ d)s I2N..q q&*,.02353 JJ$$ ,56888888.SUQ |)!7/A7A7?5?4>3>3=3:/+v%#|[  P2yf^Y$e-y/.{,x+t(p'm%h#["VU E \^} ((%$!#su$ps@A :::""3QQQ'X;q5dGQV[ a$f%k(p,v,z"iW#m E52))k kffuu "$&')+-+FF uw')(+)++++-"MOK ws-$5*4+3)3)1(0'/'/%.&,$ _qW ;-r]XX'q)v&q%n$j"g c_\WHDy C GH{}&$! uuXYhk=@"""mmm2000!J %J 8vAFKPU[ `"e#k&p'tb\ B0x ##K K^^ "$"BB ptbd !FG Db!t+!) ( &&%%##"~!|qLM -*iSN g!k!hd_\XUQLJE4e 1g  su $! {}sv kl ]] >>55MMM2BBQ'&\.j3r 8| =BGLQV\a f#iU2u/BBcch hl lq quu{{g g)( GJ  tu./ -`wvusqomkihec b V *I B\^ZWSPKH D A = 96|1tG8;jlyz ps ik `aX[PRAAll{2}|$#-"#'*',!%- 3$:&?3?*+ ' %   #&).0  !        '()+,+ %"* ($%!!!$ $ " "#"   R*J0E0C/A/>-<*;")%2+E(B"6, LJbÿ287F 56RR`cce_`KM;;;;@AHHQS[[`aefjmlnGH@@ Լ`!">>?EQ[cefe>)KQTPE7/-1&U!MwH$ EGsuxzz|uwdfWZEF?@AAMOYZhjjldeZ[+-=UTSPG;/))-;HFA751q9741~-s&bKB=:!U*j+k'e!R*##.ba¿2QOf"(*^a`a^`[^`cfgloqsvy| ]` popz36psw{ ~! !""##%'%'p 1  Pb\ZVWXXYYLiHMuJ&(vx~|}z}xzuytvx{|~bd& X u o ha\YWRPLIGGHJB (f@QKFA<:731|-t*j(e%_&b'f%\ ;;Nus!!2 BCUW_bjkuw  egquv`..b&'d((w''%&&')*++,-/.0.11223455++;+beg ij l n o p r redd*e%J[IFF788v~ y t n j e a\ YURNK)0yQl f a \ VOIE@<72}0u+l'c$YC]^ ss~"*38AHOV]aeD q@B9:?@FINMUV[]cdilqqxz}烄툊}Y[,,CB,"/%3(6*:/<1?5B7D;H>L@MBOCPD@;GFGY[ (6645222210/0-'JL@;0VKVKRFNCI?E:A6<27-3)/&-!(%l8 1{X(N^WPJC=6.y*p!g^VO @-h ! z{ pq z{$.5 1{W?EXdYTKG>5}0s'j"`WH>= }} vx|~#-1DGLKSUZ\bdilprikaa{|&'GA9.3('+"+$/&3(6+:.=2@5C9E;3(L@[Ns `o]QH%110./,-,+*"#4&;=C{ mbUJ;2QHJAG>A7<28.3)/') #~q,$.% :0vS?l8QNJA<3x-n%d[Q ED\> {{ rsvx#)1<>.NXc*OQ+ g!!BBGI==770289@AFHNOVY]][]`d~先tu##E>6-8/-#,"&%),#/&3*7-8.,#KBPGUIl o~nQD@!/'&&%$##'74#65@vh]aWC9=2E;=48.2)-$)!$~ tn1(2(+" 5.rQ :3*6-8-,#-$!x u#z&)!+#'K?K@MANDe o|nQ@<3#/ .620!/1 =oaX[PSI3*;180/&)!%z skm8.8/0()! 0,kO9^UD(r@/n(d![PG?V-q)kZ 6w pp (,gi knuv";:AITGIltu\;;CCJLNNKL78s&({.-6789[]cbcdlouxegt8  6/&1(3(4*.#2(lilq*!H>?4C8E:H>^ HWG]]]2df961)&*060-,)) :jZORHI@C;,#91)!phb!s>3;25,,$$,%(fK5VKA/p"i4wVLC >"^6~3y(gU 3p il )31"dc hj"2)1?Y78?AGGNPRSSS42k!#/0XYUVRS[[ddlo^`j4 3+#.#/$0&1(0%6.b] .$D<9.8/=3A4C;V"#))GI40.(!*# 36.+*)##5 dRII@D;;24+&:1lY #wA9A8:01(+##z' !&bI1{LC9{0m X"d&c > ;'e=4PA?,*'$ 2#76-*)'%2^IAD;;23*,$ u!|:0*~"G3t(cVG 8u <1vDOC8~-m#\J)] Y\wx'.67BD" ooy|$.9iiRT  B{,.44<>DDKLSUcegj79129;BCKKTVIKS7 %k v#z%'';1bWl_>6#$(*!.&2* @32rt!@bL0%#"/ Q;23),$"vj` ) OFXNE7|@A6{+h!XF&V STpt%,-:HK< tv (1 bdY\ <u()118:@BHITW{}[_1313;;CDKLADK% cmq w#|4+WNshuj_T5,x"}&( *" :HJJ,.ii9Yc^>(!{}( K2),$#wj` $xI>ZO^PME;35-0((} n` *m<%_.l$^OA 9&a7>9/k7u6v+f!SB$Q$$,LMjl"#/<>?@6 {} + ~W{}6m%%|--56<=JLjltuvwxzsuRS--23;;DE::E"[ein,~#NEbUbWcWbXQF-~&qw"|%2Xwv ^^1LSSQN5! qp *D+""vk` !r?8ODODMCKBA8/z)*"%vhY)j8W%bRC > Z0v43{2x0q'\.c*a Q>|!I ]]] FGdgz|yz)023468/$ uw+AB#/ e!"t)*11?>YYa`ccdeeghkdeGGw*)23;>34;!S \ b#i@8QFPFQFQFRHQFB:$jiq!u-opnNbc UU *BDCDCB?( gi *>#sj_ g5/C:C8B8B7?6?43-$d kbS &b4MWI@T*l-t,p+m(i*e&`M#PL>> @B^_^^ss$&'(),-.'~km(;< ' _i%%f00HHMOOPQQRSTTVWXYVV=m7l?yyy2qqq)))9: DEXZtw{} "$% uvdd&99423! OK!"s5689::;<=?@?BBCDEFGHGH33r&(w'(3  CD #\ *y#){#+|"+}$,~#*"+#-$.%-%&vG ] pppJUV?@lmbd#%""##!! ij ]^UV-\ T #k( *"'} '{&w%t$o"m"ieX: C #.t :| @CZ]ZUROJGC@~;u+W +Q9YYY2RRT#">> WY ^_ egklqsx{ nrXZ$$=./4Z "f%%j&'m()s**w,-{.-0/1233557777q')]& *D ]_`abcefghjj_ ;P_Psrs*23./ OP}~|}z|x{wxuwrtLM68$G\pmigc`\YUR O K @& !R/n ;QQOKGD?<~ 8w 4o 1g ,`)X9%2ro10@!"%%(*-/2368<=ABEGBD!#4'' ! " & * , .256# O^Mmjm$%))((()'(&&%&$%#$"" !  99* )(&$#" a;"Q$U!O MIE@=82.' ! UTz2FF^EEE999999888999999XWXigi(c3+j+m,l(b OGEEF$X(e(c&_"X;WWooNNLLLLHH883300..,,;;DDFF@@99##;s ! !WOLJ@31 . * 4CH@7"lj2]]~'fef-:PPLFBA@?>>=>BFG2~ 00mm}}uussookkggccddllrrqq\\ T()*,()'&$%!! wsmha`ckn_ ..B~|0 :::  LLXUTRRQOONMLKJII@8AA ~~{{xxuurrnn00 ^-.=;6511--*)()&&$%"# zwqlffD DHIQQ11*k [mpnnmkkihgfdcba O&bMM )&$!z zKK]13RTceba[]VWPPKKEE@A<>7934/0*,w&(n!"X ]&'KMAJPP J! N !39:CCNN^''!78XZ\^~33 *_ahihifh .si&x<=<<:::999887#n"k%^QQ ?FQNJFB>;73/+(QQ[10hjqs늎჆{~swlmeh]_VWOQGG@@78{*,n$# 9;cfoqln:STorJJ K!"WYjm.i-/`d]^ G RTmooqKLHnqhj@N"$dfoqorors11I UW ;44x-.n'';=:|~ce _a}~1kl_` OQk67-qq~tvD!" )f`@;&p#m$_[Z YXWUS0}64#iDJJ TMB!2+&#zztt*'#AA P+,bdׅyzZ[XYXZMNFD??}67u0/m')k%$@?FH=>i%& D$%O++} mpnn TTikLMXYa`z} HIUVtv B!`11"&\Z760ze#iPJHHFP2{/}0z0x!a< EE MF>2 .}}wwoollii!-)$ ==N)*]]z{opceGGPPEFy99q11i**b!!h&'EFMOCE89d"   su]^ o>=SU{}WWK**ꄇL++fhl=>ij=####WW1  //  UU[["VS3y1t+o'j^$e@ 9v 8yO1x-w+u*r+oZ4 >>{ {F>80"#bbY Y\ \"/+&!66G'(WXppeeYZNN;80)" uuOO%0,'$00! F&%PQef[ZOODDy99|./BCX l(*MNYZRRHJ>?25SabK/.̀U54 *xzTU8#$\ác=>^`%"".\SK  UUR-&&ii\aWEE'e$a!]YTQ\+g/u&m%j$g$e#c#aK%  88hh7/)!~~qqnn!)1/)$!||++& >~#%IM[[PRED{:9m/.]!"r(*>ARS`cZZNODD:;z//OeCCퟡ<((ڑ͈̇"ӎ  ؎[_zQQV79cABWZqsʆ_>@xOP**:: :F FYYvv    z$z[[; ;<>y"\XTOKH#_I1v!e b_][YD 44]]/(!wwmmb be e/>/+'"tt""Gu!"EFQQFF|;:p0.^$#Sr++VXRR\^VWKLAC79r,-F6%%ߛcEG_BBdGG ̌뤤 >+,F12z{x|}VWӑ . km@--9')#~oq Ώ **  ""  37mSOKFDVJmT)eYXUSQ< ,,UU' xxllb b^ ^)OX5'# xxmmOk>>GH=>p11d%%Tp))RRmn^_HIPQHH=>45j)*@  詮 /!"⣧ۡ7(' `FI{}*tUVM79  לprǑࣧ;,,4&'/ 0aIFA >ND`ccG#XONKJ 5v%%JJ~ ~wwmmb b^ ^&IRRL-!yymmbb Gcv79=?s21e''Wk''MMceefcdQQ<CDCB=$ooppffW WEZk01w35f''[f$%DDXXXYVVTVRTDDp11}55n,,Z""4!!!iii%%0yyy%%%&|㶻/#$添B22w]^D66 ݱҦ౶dORԨ eMNrw "E 6t 3q8p3a=~==?>>~=~-d:t : :|)^ 55aaY YTTjj25554330ggZZZZP P/ S]()j(*[^ ";=JKJKIJGIEGDEBCx55Y'&b((S.III2YYYXGJ2)*)""ṽC56ڳ`MNĠ!jl.%%u`cx{8-g.]&Ou,d-e-d,d+c,c*b*b+bO +Z0l#S))V VOOZZ%&%%%$$#~#~x!xQQH HHHOR _!Y x33=>=>;;9;7:67|46v33p13\'(AH) 1112GGTjZ]vcdЯK?@gVWB78y|G<= >45|~qq(06;ADGJLLKHEB") EMV\cfhjljhb[PFFUV__ghlnpqststsvsupqklbdXY@B )"J9_KKJJIIH~H{GzFzFy9jBB CCHHoovvssqqnnjjhhffbb``]]WW: :22  >FQh'(12}//y-/t++n**j()e&&`%&Z##T!#P!C*! 244J rt YLMQFG4..9246/0701*%$ >JUZf k n ubWNNMPTDcox ##%&)*-+%% upnppA %&vx}}{|vxstrt%# "J0i0j0f/f.e.d-d-b,`,`+^+]*Z!P  @''U UY YW WT TRROOMMIIFFCCBB@@==77""ZK9 Vh"#f!!a!]WRNGD?950% '`_2KJjν!VLNwyòdZZǸeZ]~QIJ|~/++HAE1,.5U _ i oj^GIT X Y] ` d g Q?@}!"$$%'$% lht!#!" !!"""""\- PS}}hjGG18!T9888/*(&&+451* !AAuuol5-.).'.(,$#$!"*%($$!('@SMO 400C>?:67C>?<89    ]f hbZWY\_b f mr u w xj C~%%%'$%"" ! !!!!"$%&')))()()x$%7kk#$FCXVUPHDA@><<@EFE3  LL {{uuqqkkffddhhssxxuubb;:Z- MJLHEG D   J ! (&(cab6 e e e i k o q u x {   y?2 %&&'''&'''()())*****++++,,./0112,-9..12#W Oc^YVTSQONLJHGFGC? PP {{ttrrrrrr55 4   n =  H V_e l sz !$&%'(w : `#%&()*,,./113356779;;<<>=??@?A@C01CWZ  ?@(g [nk g d ` ] YVSPNJHECA(i RR  ||ttooggbbQQ  a ! $"' &  W /  P[g$q*{"3+90?7E=METJZQaVf\j^PF5*r5 o//9:??EFJJOQUUZ\`befknpruwz{ru\^..E ln!%'*-.1569;=?@*FG+l _.AB=;8620|-w+r(n%k$f!bT1u MM /GQLGB=940*% vv``  "#&)6:W\^bRZHPBG:B.7!  w C   `V Yb%m.x&4+;3B9KCQHYP`Ve]QDj^8- j3 {((233499>?DEKKQPVU[\bchinqttoqeez}+,C ln($'),/148:<@A-AJK-n[K.DB><;~6z4w/r-n*j&f"`T e3vII?BLRMFA<82-'"vvssqq @ (+DF}~svim]dRXHNAGAF&.  d 9  aiY QY$b(m"2x*7/@8H@NFTLD:aWyo0' b. t&'BB0100}2078<=CEIJNOUW[\`a\^\]녇vy&&? gh0$!$'(,.046&>OFG +j UVB*x=|7v2s0m-i*f'a$\!YTL$h+n/k FF<^5CC?94-(#~~uullrroo W 45y}oseg\_JQ@E!(.619,2! z N ' [ kj[H PZ'd -o)5z->8A:61XNe\og-# [)m"$>??@01w,-m**u12~77=>CCHKNONMWZux|~mox""< ac,*!$&)) ;DHAB (e QPJ/x)q/i+b(]%X UQLGF%f)n'h+a DD:XN*:50+%y yqqff__ww!ii " a MLwxcg(,5=;F:D;B')$(7;"   c >  Ue$p mZ? FP'[ *e&2n+*|!MDVN^Tf[( T) d!!9:==<=22o(*^"&f*)l0/u56{<;>>RRfhkmsteem4 \\()&rrprtvy{~7#e%h&UNHDA<{?%f(m'h$b&\BB6QI<#2|&|s slldd[[R Ruu" __  1 p"$bbrt+-! HLBH=D:B7;9>;@7;   s S 2O_j%u$pY 5 <F Q&nA:B;KCUM^T M, _ 579:;=;<66f&&KU!#\(*j,-JJWZZYacim]^e. TV'%$!\]Y]^`de2059; xy34  U GB=|6t.jW!_Bv8j4h 0c='f)l&g%`!Z$Q??||2HA:+(^^TTJ JJ Jxx'$~~W W  9 w'*nlsrPQ.1(*X^SZHP@G:A;?;>:A37*2%   a > "IXc"n(y %uV ,4 !_5-0x)52A:KCVMtF" X~124577;<:;:9X ?OBCIJHIPQXX`bTTX%  NO!!  JJ GGy{+()-17 mo,- J B"$55nn+:2*u!udd[[vvSSxx,-'"||mmH H 4  N 47acab==~|}qrdjEM.4CJ KVa#l'x!+%.~&)q"C K Y(h 0v*91A;^9% Gi'(r,-y//225787==HH12k%'t..~54=?DEMMCFD-  @Ay}#*&( VW C6y.c(\#TKA~9u2nN+g'g&d"^YSLF622ee'1*u!uddXXG GJ J$+0*$ssee@@J 2  W <<__srFIwzlo_cU\LR/608,6-5%+ *0)/# !*)-$- )  z f N /  8 D O["f'q*s"G?JCZ ?L[(i 2y*<3T2. >^#%i''o))w./0054KL{}ORi%'i#&r++{35<>CD;=99:mprttxwyy{|~GU!{~ #JI 5/j'Y"QI?x 7p/i@<{K(^!\ WQKE@.CC]]v#v*v"veeXXJ JBBzzA.(("zzjj[[;;g )  a !"EEfe}|¾LL~twin_eMS*30:.7+5#*)4*0)/$()-$-(-!+!' # } P 1 >IT_#bC:d[e[D:R @M](k 2z*J - 5S^""f&&l)*v./AB|퓕ڀDD^!"d!"l)*v33::v23- 00bbfhijjkmo|EnqI~ rsvxy|}?@()^"NF{>u 5m,c:y9t[^AQOJE?9v' 88UUjjv"vggXXI IAAqq>KF'" rrccTT22666, s " ' k #%LMljljSS~~qteh'* %AH8?-6*1)1+2(/*/"(.&-(-$-" %& #  s $ *7 BMS;6VLVOUNTL91K AN\(l! ? ( -IS\!"c$(x<>lo{~|~}~or;=R` k()r13h**' &(UV Y] \^ ^akmA^`a^?mo ghlopssv447!NCv

    E?G?E>.z'A AP^ 5" % >HRf35[^cfegegfhgi\]q02J[d')]!! IJ NO QSXZ8KLKLLJ1Z\ \_ begi+,  A8h 1d(Z /_/\>z@|@{?z@y@w,\5k6s 1k +] &&AANNXXK KBB``043323/\\VVSSC C'' 1112NNN G  6 { +/\^{ywuusutXY./"$()W[TYHN=E09*3#+ (/(.'-%-&-' %!*&%% = )2 )X$4o-4q,4v.5x.5|.6.8/80%k 8 @Q,# 2=Q*)}HILMNONNNNOQQPQQKK]&&CXP==BDFG.ll88988988%{} JKSS Z["#/ -Y&S 'Q$Nu-c,d.c.b/a._-_,^ Gu*Q *Y$M;;B BJ J==TT&'''%{%{x%xu$um"mFF@@: :  2HHTH  = 12gg}{zxxuur[Z``-/)+&'@Bfi^aSWGN8B % %*+0'.)-#-),#"+!)( & K ! ?"O!Q$U#X$\%^%b%e 'i 'j Y 1B#"+ ;]22e56i56j66n78p78r89v99y9;|::w66L>A 11 43SV#ln#mo$oq$oq#pr#rs#rt#su$tw$uwcf88HG #L !F >< <8 84 4- -&&ARQ2XW##45 c m O :9NMUU[[`ahgnjnopopnmnlljieecacdljvu}ihRRDE>@;=7833.09;yzyympNQ19+2)-$-*- !+%)$"(  k    jg||[_ `0 / f          8h 6   76\a`2nl54N 5 t _ V %%+-$&(*-/.25579>>ABHHMMRRVWZ\^]`^\]\\WZUVQRMNJKFGCB>>794604XY7;!,1?D09*0$-%#*")%$  {~\_ u%'''&(#$  !!#"#'(()((('(){%%6;''//./-/+,&(!! ! z~ "#$#$"$` >m ~ { x q c^[XUS] efaN  GFyom2"= Q V}&'   "$&'**-0013679;?ADEHILKMMLLLKIHDFAA<=9:7:xxrt+-&'!#;@FM;B/6")"*$,%( DGWX& )+(*((''&''(()(*(*)+*+**,,/2110/,-?F,.776710,,++)*)*()''&'%'$'$%%%&(##, Aq     { w s q l j fdcgi' C  B ! Bj           ! %#''*(,-/0325676:7:89@A@D.1+.'+#% "!4:GMEJ17#,#)% su  OPU%%()+*,-//0/112233545466767789;<01BO22==68553110//..--++)(((''&&&'%$##N ?w #  } y t p l ida_EG  s *O ] b e k p u y ~          !"#$%#''($)')%'"$" #%)#%'+#)# +-pp z| !$)+.04685#HJ n))//2378:;==BCEGHJLMOPPQTVWYYZMM01BT67MOQTOOMMIKGGDEBC??==:989563400)+b =z 3%=2=3:.5+1'-#) %#!~vqkd] OM  9 */6;>DIM S V [ ` d[*R,N"JNW^ k x        { | }   ,03 zzxx}!(/4A67g ;x B5F=ZPWMRINFJBD<@:<38/2+,}'(u %n`\C } W I <1 &     $ * / 0!;JJkk p p^^LL98(005 9AM\npppqllk g h c d h l p x ~      802 } nqmnwv $,09>CLG@i)== w((:<+*|1055:;?ACFHJNPTSZY^_abWYrtsv((@S34prQRVXUWTTQRMNJKGHEGBD@B<=7756LM` 8tE6PHH@C<@9<56-2|,-u&(o"$h`V"pa E M QTXTSSTRPM C ++PO[Zz zz zddSSBB10% JTVUVTY[]]]ZYYVTR Q O O S V/2{~ } de_agjqr#z|)06>:;Yb$z|67 o%$=?55,.m++p//v34~89==CDGHLLOQKKikwzkl{$%:P00kndfFFLMGHEDAC?@<=99~67z33x/045IJIJV6mB9[SG<8/B:<37|03u+-o''h##bZRO$p(z [   % ) 4G L KV[W < &%BAQQ]]  }xwomMK'33879>??A??CGHIIHHGF @ +/2rt| X[PPY[bd"kn'ux./5KS\ qr9: h""9;;;24},,[#"^'&e,-l11u57}:=>@;>_ahjoqccp2 I-/dg^_SU=4ULNF603)4s-,h)(b#%[!SNFG #p*|"'rS    & 9 J00GEKKbb~ ~f eT RDD         "&()( ( $   ..ijzy} QQ ABKKTU]^!lp.>AISfh9:a557799/0s*+IK S$%Z)(a..}45UUYY__fi[]d- B*+]^VXOPCB9798^)*Z&&T##Q R32FGDEAB?>H2a91MFE>?8(v ,z$%X!MF?9 A %r*}"%u #jK T B98FFJJgg#{zml|{HH      *-bapt| DE 24;=OP#01;AI\_//Zx11}234566//m))78Cn.-IKHHNOUU]^RV[& 9z()UVNOGG@B4443g-.A;@|12BBAB?@<=9;A-\5-E@@85}0.p*c$k @2 + = $o+#*w"%l bD D{B''CB;;JJml(~~"KK(*YZgkrv 67 34!}~"yz(1=EFMOTSJLO 1 n#&MPFG?@88w22l''01N -x00@@?@<>:;78569) V2{(@86|0.o*(c!VS ] &5 'o -%(y"'o"eZ>   Zy 450AA//QQp o!-$ !$2$TT%& PS]`ikturteh^`jj#wy(0;wzII)*Jd'(h)+p++u--}/.1134q//~32l((p--z46<@}78t02k()a!#Zt-,z21=><>9<7854y22r//2! P-p$6{0/n*(b"VJ> G S'p"-&+|$'r #g\S 5  / fo *3*??--//RRv v%1( ! %=4$SS"# HJSU_`klwz*) RU QQ]_jk#vv)1jk@A9: ?X"#^$'f&'l()s*+x,-54STx21Z d##m+-v32:;BD::9# W=>y67n/.d')[ !NL9:KN898955|22w0/o,.g)+*  / I(d".n*(a"UI= 1B 4.)r#,{$)t"%i _UK 1 E eo5%5MM 44YY| |*4,$z x{ {'FG4$XX ?@ JJVVacnrvy$RT KM PQ]`ik"vw+ \^89)(7NS ![!"`#%j%&p-.[[팏bch))U]""g),r20|9:u231  Lt46l..c&)X MHw55mn}~ADz11{/1r,-l**d&)\$%" ) A#W(a# UI< 1< 6|/XPB9#b &k "bXMB *uuu+++ ^ Ow@#@UU55ZZ~~0;1( ~z w.NH6%[Z54 @? LMYXae!tuKVXHxzFEOP[^hj"uu NN0/#$.DHPU `''UVՂ݆܃UV\#$Q[ "b((k00e**& " Ac--[%'PEBl23giz|z|mn}99h))f&'`$%Y"#M $ 8LSH; /9 5v.NFRIQI83SYPF< $]]]227UUU  w ?FFQQ#!=;_^6?5-$0E7%]]*) 89 CD MNee@GIGH=im>> NN[]gk@A&&% 8>FP""LLklnpnpoplnHIOKS ^&%W!" 3V$%NB?e.0Z\egfgegegZ[h..T!#S!NE 0?G; .3 .g)C3 ===2555 DGG@@66>>cc:C:2( yy/7&\\!#.. 79PQ58888890XZ89 NM[]35"$  .3>sBBVVVWWXXYXYYZXZ{<;@FQK ' G>6V**KLRSQRQRQRPQPQHHP$%DC:)3: .. +[$5{.5|/5z/5x/5u/5s/5p/%R 46 + qqq2PPRpVAA66GGDBed@G>6(%) xx*&`^  "$=>&bd%jl&mn'pr'tv'xy'{}%&"~ LM47 LL'(### .X21l=>o>?p?@t?Bv@AxAB{AC~BBBCe-.4><   81G!!t::|<=y<>w:34  9 H%&L&%N')O((S((T))V)*[*+\*)^+,_++M) , ( & 1U%%\&(Z&(W&(U%&S%&R%%Q$%N$$L#$J#$E !( !Q#9JHFDA?<;953%   %%8nm2db+*B ! [ ,,:9UT``nmJQ@0A8/&{ znmii   !$%'),-/123779<>@ABEFIJIJ$$  &',-.1369:=>@6 ?%X7<97541/.,*('$ 'c= 1/ - +(& #!10Snl2yx@@cX %%77TSkkttPO7MF=6/'wwdd~ {mj  IH2x7681.-,++*+02/4)h NH<462.,*)('&,/-)%A@out2  Y $$::VVoo} |N?UTLD<5-%sr]\dc  !S Nhfc\VTSQPNLKLPRG2*j N k g f^WTROMKHGFILJ=   M ####88TQnn6/'w tff>>&^ T nhba_]\ZYWUSRQOL"Y*j Qt nfc_]ZXVTROMKIH-t  H  o 8 8W Wtt|wvl lc c[ZTSLKEE=<:933--&cYqnjgca ] [ X USONKIG0w &c S{zupjea] Y T PLGEA>4   1076;:977733//++(($$   (eZ*{685{1y0v/t+q+o(k'i%f$d#a"^R4| &^ R- ! )eW?(q7u6r5o1m0j.h-e*c(`']&["XN$a5~ %Y O6:>B?};w7r3l/g,b)]&X!SNIHH  (_RE5x$g.d+_*]([(X$U#S!PMJE"`,h2q%UK6L+t6t6l3g/b,\'W$R!LGD?~G [F $YL@+f;q5h0^$QNDy,N&G!B B>!X WRJ 3o < =1b+[%TLE>? 5 * 'PP WUQOK I3B;(]6g0^(T#K?wF0Z .-;wU WQJD .c 9 7y+W&Q!JC=w4l8y7m "DLRQMKHDA)66x$U/](S#JAs8h /a} )Y . 2i&N GBz9o3e +Y%U;wMNMIFC@=x6 K1n L(R"I}@r7c-U #J$OFOWRKD>|8m %L  *\ D{>r8i0`(X!N -]3gA{GDB?~9n2aA]]]'#N;k5b.X%PG (T4cZ_:o=v:y8r5k2e/\'/%U:e>j4_*Q!E=;p?wTJ!J?}>{9o2c*T:333%===  A1Z+S #I? %N1[MQQO1_2a /d.\+U&O ( H1U3\)M B<8e;lEEF=q>m5f2c*U $J/2 2&J C8 !B-Q}?r?t?t@sAq@o(Mz&M $O "J C  ='E(LA84]2_8k8j8h8g7f1[.W(O $J =&eee2;:F# ;4 7&Fl/Y/Y/Z/X/X/W/V/U};^ <;4 5 7 <2-P'N+T)S*Q+Q)O*M~+Mz%Dn"@ :/ po2OOx!!.*.4R@hAh@e?e>c>a=^<[;[:W(B'$!&,";:f=nF@FR<5PNP1ZYZZYZZYZ -,- -,--,--,--,--,--,--,--,-ZYZZYZRUR*RXR3AJAQAGA]141:;:~<-<<99774422//-,++**((544366?*?=*=F7FhI=IWI=IQTOT4VRV!BBBCBCMOM5:G:g7S7u)W)'p'y ~  &%6 6C CQ P^ ^lkwuttvuq pl lh gc b^^ZYUURPMLIIFECC??==::9966553210//--++))/ .VRV&-,-UUU'!Go  3 3GFYYml~ !}}xxssnniie d` _[ ZV VRQMKHGCC??<<88662200?$?YWY-,-HNH5">" F k (($k$ **;;HHXVgfu u 1D_a]XSNJE@<840,($ {zuso njib`CCE6EiBBB-,-:F:h < ] ~ %%$$11@?MM[ZihvuB3Ea_[VRNJEA=940,'#{zt somUTRR65RQR#-,-4G4w ; \ } ""$$00??MMZYihv uw vCW/E[XTOKFB>950-($!||w vpo^^UUpo<=MLYYhgs roo?\O+EVPKGC>:62.*&!~}y xsqedWVrq} {;;NMN3FTFK E Z {  )()##00<%BH@<84/+&"||v tnm_^u tz y87NMN3LPL; [ X y  )3)00//;;KJXXb aUTgg 5TQLF5$@@840+'#~}x wrqddw vz z..NMN3WXW$ f W w q &?&;;..::IIXXTTTTff| |2RNID@."<:0,($ z xsrhgxw#z y  NMN3WWW# l Z r ^ &b&II..::HGV VGFTSfez z/NKFB=8'!:2)%!{ {uslkzy)$x xNMN3XXXn i a U } !`!NN55::HHLK> B j DDooHH! ##55IGZYpo!A?;61-(#{{,CG>6,$r r$ $YXY-,-,L, } V > f ??t tUU22EDWVll><73.*%!wv| {+COG>5,#}qq# #YXY-,-5+#}|po# #YXY-,-5+"||ml" "YXY-,-?I?X G _ m Y ..VVBB10--@?SRffzz561,'#x won !4HF=5,"||kk" "YXYNRN9 7 Tsb { ++GG==IG2277JJ]]p o}|),'" "" ut.*!uuhh YXY-,-JLJ=9N p 8**97GF@@44FFZZl ly x&*% " zzji'!ttff YXY,,,,,,,,,-,-VUV#4 a 7 %$44CALL88FFYYjiw u#'"! lla` ttdd YXY,,,,,,,,,,,, YXYYXYRQR)RQR2@@AO@@A[/01z??A[ONP4XWX,,,,,,YXY8C8o ^ 5!!/.>=LKDCEEYXgfs r%! ^ ^XWwvttbbYXY,,,,,,,,, YXYYXYXWX%HHI>FFGJ668k447z%&)"#(       ""#/66?rFEKFYXY!YXY,,,,,,-,--,--,--,--,-ZYZZYZVUV"SOP2UOP;@965 s n+*97IHMMBBUUddon"| {w vN MONkk``::>L^QPU0YXY,,,,,,,,,CBC YXYXWW#XVW)KEEDOEFIL::eO44vW10U#"a#"bhg ] U L C 3?$$53CBPOGGQQaall { {w wt snl@ ?G G]]   ! # % ( * , - / / / 0 0 1 2 3 3 4 4 5 5 6 7 8 8 8 9 : ; ; <A&&I56OpIIUBWVYBBBSRS$+'&  # ) . ( ) , 0 > \ A = N [ c j f c X 0  //?>MLQPQQ__hh }}{ {w vs ronkjcb00;;( 6 8 9 : : ; < = = > > ? @ A B A B C D D E F G G H H I J K K K L L J I HFFUMBBBXXX733+ / 1 3 4 6 8 9 ; > = 6 4 6 8 : ; > C O W a b ! $#98JHTSSR\\fe| |~ }{ yw vr rnmjhcb^\AA+ G G H I J J K K K L M N N P O P Q R R S T T U U V U U T R Q O M K I G E CCPPV,,,, 1#!# FV U W Y [ \ _ ] Y X Z [ ] _ ` b d e S S > ? -  @?RQUUZYcb{ z o ng gTTHH99-,   T V V W X X Y Y Z [ [ \ \ ] ^ _ _ ` _ ` ^ ^ \ [ X W T R Q O M L K L M P T X ^88]k,,,,,,5D Y~{ { }  { { q o W U > > & %        ! $ %!78WVYX``} |} |{{o n` `POGF11,+$#  $2 \ d e e f f g h i i j j j i i g f d b ` ^ \ Z Y X X X Y \ _c h m t y   ')|,,,-,- :[ r  9 /         " % ' ) , / 1 4 6 9 < > A ; 0CAZXkjs rv vj iVVMM>=:922--((!!,1; G M ` d p q r r t t t u u u u t r p n l j h f e e edegkmrw}  67st,,,,,,@('_  #";  % ( * - 0 3 4 7 : < ? B D G I L N Q T V Y [ ^G.7<==>6600*)#,+<>O \ b w z { | | } } ~     } } | y x v u s s r sssuwy~ 99ph,,,-,-F((\  &% 0< @ B E G K L O Q T V Y [ ^ a d f h k n p s v x s q gc m z  "!#"$#$!$ "   DDgL-,-H99oX    '>R X Z ] _ b d g i l o r t w y | ~    !  ! "!##%&'()*,,.-.--,-*+')&'#%!#! !)/16+3%,!& ") ' JJb=,,,T9:iU  H ) 3Lcp s u w z |    !""#"$"$#$#%$%$&%'()*+-.013456577857453301./,-*+()'($%"$! .1BEJNIO?C/3)0',%+" !(!(# NN_3SCDOR j 5 BSp!"  ""$$%%&&''(((())**+,-./134588<<>??@@A?@>?=>:;9:LNKN3401//-.+,)*'($%"$ "(,INPWJQCI&,$*%)$) $ ' ' 'YXYZJK=P  m 8 Q ]z&'#%   !!""$%&'((*)++,,--.-/001234679:<=@ADEGGHIJJJJIIHHFFDEAB?@=?;<9;78=>y|45./+,)*')%&"$!# 04OULSFL?F:?29-3$+%+&+%-$)!)!)$)YXY`NN4O r  4 X i$%,-"# !"#$$&'()*+,-..//00123445678:;>?AADEHILMOPRRTTTUTURSQRNOMMKKIIFGEEBB@A>?<=;;896778uwQS*+()%&#%!#!,0LQEL@H:B4=/4(/'-  %+%+&+&- $)")")#zBBB YXYP b  / T u ././!# !"#$%&'()*+,-..001234556789:;?<=:;89674523XZrt*+$%"#!!%GLBH=D4<06(.'-(.'. !$)$*%*$) & ' ' 'w,,, YXY[R  * Q v ))5601023445679::<=>@ABCFGJJMMPQUUXY[\^_bcdefgghghfgcdbc_a^_\]Z[XYVWSTRSPPNNLLJJHHEFCDAB?@=>;<8:67562412;=}w{swBE " 9>?E5=/7*1(.(.(.(.#) "&$+%+%+"&!("( (' -.m,,,ZXZsC z  & L r "$34BCGHJKNORSUVXY\^`acdghkknnoppqqqppopmmjliifgdecc`a__\]Z[\]_`bchibbdd`_KKKKFFDDBC@@=><<9:78673412/1/0giy}vyoshoW[!##&9@29-3*1)0'-(.)0(. % &,%+%+&+ & '$)$)") ~/0k,,,-,- s 9 p  # H m .1HIdekkoossuvxxzz{{zzyyxwvvssqropmnklijfgefdefg_`]^^_{|hjHI=><=9:8867352301..,-NPz~wzqtindj\cX],..4-4+2,2(.(.(.(.(.(." &+$*%+&+%) ("("(!(  z88gm,,,-,-X.-2 g  , C h ,.DEij~~||zzxxvvttrrpqmnnnz{[[YZiiNO8978452301./,-*+34ruptjoej`dZ_U\MS9?+2*2+1)0'-'-)0(.'-'- %*$*$*%*#( ' ' ' z y@@bV-,-^99l3 ^  ? > e --@Aee}}{{xxwwttssqqnouvXXVWopEF3412./-.+,)*)*Z]lqhlae]bW\OVIQDKhmah]cW^RWKSDL=D8?39"  (.,2+3*2'-)0)0'-(.)0&,&,%+%+%*#) )$)$) u tRQ[/WRR2L N  V 5 [ ')8:Z[yyyyxxuussqqnomm``NN~~AC)*'(%&#$'(\`^dW_QWMSEK@F;A29-4-4%+ +2*2*2)0)0'-'-)0(.&-$' $)$)$*!) ' ' ' '$ } oSRZ(XVWSI z j 1 V | $'57UVuvvvttrrppnnlm``KKUV&'#%!#!AEZ_SYLUGN@F1807070706-4,2!-4-2*1(.'-)0)0'- &,%+$+$)$) )$)$)")hYXY,,,?+*X j  ( M t ##11KLlmoolmjkhjMMDD{~vzpuX\ ?DKREK@F6=18/5-5-505-5-5+2,2&,,2+2(.(.(.(.(.(. %+$*"("( ' ("("(  k !dBBB PLL=T b ~ # I n !./FGghjkiifgyzIIDE~w{qukogkMS&)EL@E8@3:/704.4,3-404-4*2+1+2)1*1)0'-(.)0'-'-)0 $*#( '& ' '$ x h%%a,,,YXYPb    E j  ,-ABbcgheehiGH@A~x|rvlqhlagZa^_deacGH<=}~{}txnrimci^dZ^QW+/!$7>3:2:2929.7+2/707-4+3+4-2!' "')0)0(.'-)0)0%,%+&+! {#(# n f c TFE[D,,,XVWcx /  ; `  **88Z[_`efCD79}z~uynshodj^cZ`SXLSEJ2639082738/6-4 (/04*2*2+1(. &,'-(.)0'-'-$*$*$* y   t o m j \ B ) &QPQ1BBB-,-`<?35vw}wzpukpek]cX^VZNTHNAH16!5<3:092729.6'/!!'.3+2*2+2   %,(.(.(.'-$+#(  u t q g M 5"()-<<>_QQQ.BBB ZUU!rA  2 U v %&/0QRZ[:;./ln~w{rvnrhmbgRW/18/76<4:292:2807"!.4*0-4+2+4%    #!'!  w q Z A, !(558rMMO9YXY,,,,,,CBCf87mB . O q #%,-LMVWvx23*+bdz|sxnrimbg]bV\9>*/?E:@:?8>$'*.5<3:292916)105/5*2*0+2%+    } y g N 6)/06DDHLWVW BBB ,,,CBCBAD` ( J j !#()GHffil)+&'WYptjmci^cX\SYOS38"6;:A:?:>:?4:1539082704#/3.4,2'.'-     s Z ?+&(3@@E\RQS,YXY,,,DDFK $ D f !%&CChhZ\%&"$LQej`eZ`UZOUGOCG8>7>:?:>:?:A:?5;*0172919/6/6*1 "(      f M4 066?rLLN;XWX,,,,,,PPP4  @ a "$>?kkloKM>@24 "!CF\aX\QVINCJ>D:?:A9?5<+1/508(.     s Z >201=DCHPVUV!BBB ,,,XWX! : [ } !9:`a`b+,#$!#!:>QVIPDI=E:?:A:?:>4:-2'+      f J5'(9??G\RQR-YXY,,,-,-01: 5 W x 45UV~tx79"# "04GMAE/5    s Y ;"#:77CpJJM=XWX,,,,,,TSU+ 2 Q r /0IJ|~txkp57 #'=E>DD=D:>,.49:>:?07   f F:./@FEKIVUW!BBB ,,,CBC()A K m ++>>}wzquloekOR/1 #"!12D~EEKJYXYCBC-,--,-AATV ] },-/0FGy|{vzqvindi^eZ_TZMSGMBG?FAF?F>F } [E()B??H[TSU*ZYZ-,-ZYZZ x()+,+,CEilpuknejaeY_UZOUGNBF>E>E=D9?.3   iI!B56DqMMP9ZYZ-,--,--,-88Zl s $%'(%'$&03NR[`\aVZQVIPDIBH@E?E9@+0  v SB00DEELMWVW CBC -,-VVZ"n  "$%!#! &)47596<6;05.3(,  aG'(BAAK[RRT,ZYZ-,-CBC./e !   nM!"D88GmLLP//}^^*>..}\\?}]]8}\\b>..>..}\\?}\\U>..}\\c}ZZ?⼇q}ZZ>--#}ZZU}ZZ1}ZZ?⼇}ZZF>-->--}XXqc>,,#}XXjq}XXU}XX\}XXqc}XX𼄄>,,>,,}XX*>**>**>**}UUU>**>**}UUM>++}UU*}UUT}UUM}SSF}RR?}SS[}SS1}SSU}SSF}RR?}SS[}SS}SS*}RRT}SST>**}QQ*}QQ\}QQU}QQ*}PPT>((yy}NNj}NN1uu}NNU>''}NNj}NN1}NNM}NN*rr}LLU}LL1rr}LL?}LLM}LLM>$$|JJU|JJ\|II8>$$|IIMooƻoo>%%|JJT>##|HHM>##|HHUkk>##|HH*|HH\|HHF>$$ll|HHj|EE?hh|EEF|EEU|EE?|EEq|EE1>""hhx>##>##hhhh>##8|CCjee|CC?|CCq|CCU|CCjee[>""|CCFeejee|BB#|BBU|BB8|AA> aa|AA|AAM|AA> aaaajaaj> > > }}}}}}}}}}}}}}}}}}}}^^}}}}}}}}}}}}}}}}>}}}}}}}}}}}}}}}}|>>|>>*}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}^^}}}}}}}}}}}}}}}}>|>>?}}}}}}}}}}}}}}}}}}}}|>>*^^}}}}}}}}}}^^x^^j}}}}^^]]}}}}}}}}}}}}>[[xyyyyyyyyyyyyyyyyyy|<<#yyyyyyyyyyyyyy>>yyyyyyyyyyyyyyZZ[[[yyyyyyyyyyyyyy>[[xyyyyyyyyyyyyyyyyyy|<<#yyyyyyyyyyyyyy>yyyyyyyyyyyyyyyyyyyy|<>yyyyyyyyyyyyyyZZWWtttttttttttttttt|::*tttttttttttt|::8|::?tttttttttttt>WWtttttttttt|::1WWtttttttttttttttt|::*tttttttttttt|::8>tttttttttttttttttt|::x>ttttttWW>|::*tttttttttttttttt>>TTpppppppppppp|88?|88?ppppppppTTTTTcpppppppp>pppppppp|88j>TTpppppppppppp|88?|88?ppppppppTTT>ppppppppppppppppppTTppTT>pppppppppppppppp|88M>PPxkkkkkkkk{55UkkkkkkPP>PPjkkkk>|66*kkkkPP>PPxkkkkkkkk{55UkkkkkkPP>PPkkkkkkkkkkkkkk>#kkkkkkkkkkkkkkkkkk{55U{44Fffff{33j{33?ffMM{44T==8{44Fffff{33j{33?ffMM=MMffffffffff{338ffffffffffffff{33*==1bbq===1bbq={11{11*{11*{11#IIjbbbbbbbbbbbb{//8]]]]]]]]=crack-attack-1.1.14/data/default_multiplier0000644000175000001440000000016710230226514020407 0ustar webbsterusersAluminumAngel 10 Fish Person 9 SidekickSeven 8 ~5Moon Mellon 7 Mr. Twinkles 6 Cup 5 ~9Shadow 4 enoyaw 3 Book 2 Herro 1 crack-attack-1.1.14/data/message_paused.tga0000644000175000001440000020007410132356545020264 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2UUU88UUqUUq8UUU8UU8UUUUqU8UUU88UU8UqUqq8qqU8UU8UUUU8UqUq88qUUUUUqq88UUUqUUqUqUUqU8U88UU8UUUUqUUU8qqUUUU8UUUq88UUqUUUqU8Uq8U8UUUUqUqUq8U8qUUqqUq8U8UU8UUUU8888qU8UUqUU8qUUU8UUqU8UqqqUU8qUUUU8qq8UUqq8UUUq88UqUUUUUUU8UUcrack-attack-1.1.14/data/message_waiting.tga0000644000175000001440000020007410132356545020445 0ustar webbsterusers*@ (CREATOR: The GIMP's TGA Filter Version 1.2U88UUUUUUq8UUU8UUUq8qqqU8UU888UUU8U8UUUUUqUqU8UUUUUq8U8U88UUUUUUUUUUUUU8UUUUUUUUUUqU8UUqqqUUqU8UUUUUq8UUqqU8U8U88U8qq8qqUUUUUUUUUUUUUq8qUUUUUUUqUUUqqU8UUUUUUqqqq8UUUUqUUqUq8qqU8qUUUUUU8UU8qUUUUUUU8UUU8q88U8Uq8qUU8U8888UU88UqqUqUUUUUUUq8qU8qUUU8UUUUUUUUU8qUqUUUUUUUUqqUU8UqUUUU88UUUU8UU8U8qUqqUq8UqUcrack-attack-1.1.14/data/logo_x.tga0000644000175000001440000100007410132356545016565 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2          !!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    !"#$%%&&''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((''''&&%%$#"!   !"##$%%&&''''((((((((((((((((((((((((((((((((((((((((((('''&&%%$##"   !#$&'()*+,,--...///////////////////////////////////////////////////////////////////....--,+**)'&%#!    "#%&')**+,,--..../////////////////////////////////////////....--,++*)'&%#!    "$&(*,-/012344556666777777777777777777777777777777777777777777777777777777777777777766655443210/.,*)'%"   !#%')+,./01234455666677777777777777777777777777777777777777766655543210/.,+)'%#   "$'),.024678:;;<==>>?????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@????>>==<;:986531/-*(%"    #&(+-/135689:;<<==>>????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@????>>==<;:986531/-*(%"    #&),/2479;=?@BCDEEFFGGHHHIIIIIIJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHGGFEDCBA?><:8530-*'$!  "%(+.0368:<>?ABCDEFFGGHHHIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIIIIHHGGFFEDCBA?><:8530-*'$!   $'+.258;>@BEFHJKLMNOOPQQQRRRSSSSSSTTTTTTTTTTTTTTTTSSSSSSSSSSSRRRSSSSSSSSSSSSSSSSSSSSSRRRQQPPONMLKIGECA?<963/,(%!  "&)-0369AEGJLNPRTUVWXYYZ[[[\\\]]]]]^^^^^^^^^^^^^^^]]]]]]]]\\\\\\\\\\\\\\]]]]]]]]]]]]]\\\[[ZZYXWVUSQOMKHFC?<851-)%!  "&*.159<@CFHKMOQRTUVWXYZZ[[\\]]]]^^^^^^^^^^^^^^^^^^^^^^^^]]]]\\\[[ZZYXWVTSQOMKHFC?<851-)%!  #',048<@DHKNQTVYZ\^_`abcddeeffggghhhhhiiiiiiiiiiihhhhhhgggggggfffffffgggggggghhhhhhggggffeedcba`_]\ZWURPLIFB>:51-)%!  "&*.26:>BFILORUWY[]^_abccdeefggghhhhiiiiiiiiiiiiiiiiiiiihhhhgggffeedcba`_]\ZXUSPMIFB>:61-)%! "&+/49=BFJNRUY[^`cefhijklmnooppqqrrqrrrrrrrrrrrrrrrqrrrqrrrqqqqqqpppqqqqqqrrrrrsttttsstttsqponmkjhfdb`]ZWSPLHC?:61,($   %)-26;?DHLPSWZ\_aceghjklmnopqqrqrrrrqqrrrrrrrrrrrrrrqqrrrrrqrrqqponnmljihfdb`]ZWSPLHC?:61,($  %).38=BGKPTX\_cfhkmoprstuvwwwxwwxwxwvvuuuttttttttttuuvvwxwwxwwwwvvvvvwxxyy{}Ջ͏̏̏̏̏ˎˏēˎˎ͎ъ}zyvrmifc_[VRMHD?:50+&"  #',16:?DIMRVZ]`dfikmoqstuvwwwwwwwvuttssrrrqqqqqqqqrrrssttuvvwwxwxwwwwvusrpnljgda^ZVRMHD?:50+&" "',16;AFKPUZ^bfilortvxz{||{zyxwutrrrpomkkihhhhhhhhhikkmoprstvtuwvwwx|~~݁̊yULUFGH>HE?EMGM}x}Äwmhd^ULGA;5.*$   %*/49>CHMRW[_cgjmpsuwyz{{zywusrqpnljhgeddcbbaaaabbcddeghjlmoprsttvxyz|{{zxvtqnkhd`\WRMHC=83.)$  $).49?DJOUZ_chlosvy{}~}zxuqlhd`^\ZYWTRQONMLLLMMNPSVW\ejms}qgqvevu_uS6SI%IJ"JNMED? >< :? <=<99877766443310//,,-,++****)), ,//-,,,--98@)@>)>=(=A.AgZeqgqpfondmnenxtn^KB>90$  "',16>>><<;;:::888877655555555555 5334 36699665433>>Q;QQ;QL8LJ5JO;Of_frgageg_g[zwz7  #(-38>DJOUZ_dimquy|~xof^UNGA<9631.,*)'&%$######$%&')*,.02468;>CIPX_how|}zvrnje`ZUOIC=82,'" "',17=CIOU[`fkptx|wj]PE<5/)$(6@B|{|H^a^^R`RoRjRqOnOz1[1%a%&q&%u%h j ;  !!**1155>=ECIIRQW W^ ]f fl jm li gi in mj jj hg fddba``^]ZZYXWVTTRRQQNMKKKJJHHEEEDDCCBA@@@@@@<<<<<<;;:99988777744443331100///0//...,,,,******,+L3K~}~1  $)/4:@FLRW]bglquy}}seVH=4,&  #(.5>IUcp|{wrmhc]WRKE?93.(# "'-28>DKQW]chmrw{udP>/% VWVH=E=z%7%;IT[i{  + (1 1; ;D CI IQQXW^]ddllspyy}|zzywwvtsqq pn mk ji hf fe cb `` `^ \[YYXVVSSPPPPMLJJHHGGCCBBBB>><<<<;;::888888664444442111000/00--,,,,++((//\O\g   %*/5;AGMSY_djotx}~q^J7)  )5G[o}~zupke_YSMG@:4/)$ #(-39?EKRX^dioty}{hN6" `_`0 % :N`s ] # #- -6 6A?KIUU\\hhnnxx~}{zzxwwvrrppnnkkiiggeeb b_ _] ][ [Y YW UU SRQONMMKJIHFDDBA@?=<<;;::666655553311111100------<# {z{babKKKY  , AVk !!""""!! )  ''1 19 9C CMMVV__jhvr~{ #&)*('&&$#" ~}zzzxvvssroomlliihfeebba _^ \\ \Y XW UT TQQNNLLJJHHDDCC@@>=<<;;7755552211F-Fnln6  %*05;AHNTZ`fkqv{~mQ2  1Ol~}xrmga[TNGA;5/)$ "',28>DKQW]cinsx}tY9 gfg ]\].HJH]-8- & ; Ody$$++--%}%,((1188@?GGOOVV__i ip py y %,5DS^^]ZXVTQOLJGEB@>;86420.-*)'%$!~||yyvvtsr on lk jh gf ecb`_[[YYQQ88;,;tst$  $*/5;AGMSY_ejpuz{fG'*Ji}|wqlf`ZSMG@:4.)$ !&+17=CIOU[aglqv{w_@$ZYZ. 5 C T e u ##//'j'  **//55>>EEJJRR[X`]ffnlsqz z $7,3FYghfdb_][YVTROMLIGECA@=;97520.,)'%#!~}{zyw vt tq onjfd@@DD0 0b`bN $).39?EKQW]cinty~{fE& /Ol~zupjd^XRLE?93-(#  %*/5;AGMSY^dinsx}|kP4ZYZ%*<* 4 D U f v !!++$W$  ))..55>>CBIIRRYY^^eeomtrzz$9E)3FXeda_][YVURPNLJGFDA@=<97420.,)(%#! ~}{zv vt tqqnmkiQQDDRR@@) )bab2 "',27=CIOU[`flqw||jK*!=[t}xrmgb\VOIC=71,'" #(-38>DIOU[`ejoty}vdK2]\]1 + 4 D U f v  ))  **..55<<97430.,*(%$" ~}{x wu trqpnmjSRFETR``he  JIJV  !%*/5:@FLQW]bhnsx~pV5 5Qj{~ytnid^XRLF@:5/*%  !&+05;@FKQV[afjotx|}tcM6# ]\]623 C T e v ))  ((,,55>>AAIIRRYV]\eemmqqz z{ {xu!7Q`C&4EY_\ZXVSROMKHGDC@>;97530/-*)'$"!}}y xw utsppll^^FFWTbaqpmm  IHI` #(-27=BHMSY^diotz~waC%4Mew~ytojd_ZTNHC=72-(# #(-27+ ]\]68 4 C T e t &&!!''--55<%4EW]XVUSPNLIGDC@?<:7531/.+)'%#"}}yyx wu trpllddKKWWccsrzynn  JHJ`~  !%*/49>DIOTY_djpu{~{lR3  "7Nct}}xsnid_ZUOJD?94/*%! !%*.38=BGLPUZ^cgkotx{|{uj[H5$ `_`68 4 C S d u  &&!!'',,55<;@@IIRRVV]]felkr qxvlltt  3M^\Y8$4EVZUSPNKIGECA?<:86520.,*(&#" ~}{zy xw usrnmfdKKVVccss~ || znm  IHI`~  #',05:?DIOTZ_ejpv{{u`D& )<::6521.-+)&$" ~|{y yw vs ronlkVUXVectr  { ynm  FFF_~   $(,16:?DIOTY_ekqw{ylT5  0DYityzxtojfa\XSNID?:61,($   #'+/37;@DHLPTX\`dhlquxyxtj[I6%*:W: @ A Q c s  ##%6%++""$$,,55::??IIQQUU]]edk ksqj ijitr~ }0J]ZXVQ.#2ESQLIGECA?=;96531/-*)&$" ~|z yw vs sppmlYXXXfftt z wljFFF_tst   $(-15:?DINTY_ekrxztaD' %7K_mvyyvqlhc^ZUQLGC>:51-($   #&*.26:=AEIMQTX\`dhlqtxxvocR?CHNSY_fmtxwlT4 ,?Tdpwxurnid`[WRNIEA=840,($!  "%),037;>BEILPTX\`dhlquwwsi[VThTZ A Q b r   'e'11((##,,5599??IIPNTS\\eel lh f^\iero} },FYWTROLF&"2DPJEB@><:86410-+('$" ||y wu trqppeeYYf ft t~ ~w ujhEEE^tst  !$(,059>CHNTZahouxs`A# !3GZjrwvsoje`\WSOJFB>:63/+'$   !$'*-147:>ADHKOSW[_dhmruvunmbsba F P b r  !!"d"44,,$$,,43:8??HHNNSS\\e dom[Z\\dbpl| |+EXVTQOLJB"2DMFA?<;8642/-+)'$# ||y yw utsqpeeXWh fv s~ ~v ujgEEE^tst   $(,049>CIOU\cjrwviM- &:Oantvtqkfa]XSOKGC?;740-)&#  "%(+.036:=@CGJNRV[_dinruvzr}ri N P a r  c55::$$,,4376@@IIMMTT]]f fd bTQYYbbnl| z*DVUTPNLIF=!2CIB=;87420.+)'%#"~|{ yx wuusqmk]]j jv u v vgfEEE^hgh   $'+049>DJPW^fnuwnW6 ,AUfquurmhc^YTPKGC?<841.*'$!   "%(*-0358>$$,,3388@@IGNKTT] ]f fY YPPYYbblly x(ATTQOLJGEC8!2BE?97430.+*'&$"}| {x xuusrnm``i iv v! vvJJEEE^hgh   #'+05:@FLS[bkrwr^> 2G[jrusoje_ZUPLGC?<851.+(%"   "$'),/147;>BFJNRW\bgmt%p% n O a p  i ~ b22BB00,,2266@@IHMMTT] ]eeLLPPYYbbllv v&?SRPMKHFCB?5!1AB<520.,*)&$" ~ {z xvvsspm__i hxv"# ~vv>>EEE^hgh   $(,16<0 0@?82.-*)&%#!~ }z zw vtrroiik iyy"'# |vv>>EEE^hgh  !%).39?FMU]foutfJ) %:Pcotspjd^YSNID@<841.*(%"    "%'*,/36:>BFKPV[c%e% U _ p { _ e y "",,HHGG,,1166??GFLJSS\ \NNFFPPYYbbkku u#=OPMLIFDA@=;8*1?;4.*)'%#!~ ~{ {x vvsspihk jzy#*'"} }uu==EEE^YXY  #',17=DLT\enuthL+ (>Tfqtrmhb\VPKFA=951.*'%"  !#&),/26:>CHMS[#\#X _ n r S c w !!**JJKK++0066??DDLJS SY YCCFCPOYVbakiu u~";MNLIGDC@><974& 1=70*(%#!} }{ {x xvusqnmi izz#,+'"| {uu;;CCC]YXY  !%*06:51.*'$!   #%(,/37;@EJS|&X& i ^ l a M a u ((JJSS99//66??EEJJS SMM::EDMLXU_^ifut~!9LMKIFDA?=:7530! 1:3-%#!}| |y xxvusonjjzz#-0+'"{ zus==CCC]YXY   $)/5CIgMpM ] h P K ^ s %%FFVV==//66?>EDMMS S><87B>LKUR]]eeur8KLIGEBA><97520.071)$} }| zxxuuqpki{{$.40,'"z xt t::CCC]YXY  $)/5950,)%"   #&*.26;BZNmN [ b > I ] p !!EE\\OO..66?>ECKJQQ..66A>IHTQ\Zdcqp~~7JKHFDB?=;8642/-)/3-& ~} |y xttqqoo{{#.750,'"y xrq;:CCCZYXY   %*06=EMU^gpur_@  /G\lrsnhaZSMGA<72.*&#   !$(,05:SKfK f T 2 F Y n   BB[[TT--66>>FFKK??,,55>>HHQQZZccnn||5HIGEB@>;97420-+)& .0)" ~ }z ywutrnmyy!-9850,'"w wqq:8LLLGYXY !&+18?GOW`irvoY9  0H]msrmg`YRLE@:50,($!  "&*.3MH_H C / D X k   $ ==^^^^8866??CCJJ//,,55>>HHQQZZccmm{ {3FIFDA?=:7530.+*&%",-%~ ~z ywvtsqpy y"-9<930*'"w wpm87YXY1YXY "'-3:AIRZcltujQ0 0H]lrrmf_XQJD>94/*&"  !$(-FGYG} C . A T i |  B <<__gg??66==AA>>##++44==GGQQZZccmmy x1DHECA><97530.*)&$",)# ~ }z zwwvurrz x"-8@=84.+&"v von77YXY+YXY $)/6=EMU^gpuscF& /H]lrqmf^WPIC=82-)%!  #'C@><:7530.+)&%" yy| z" {y!-8DLJE@<93/+&"|w wmm55YXY+YXY  %+18?FNV_houseK, *BZkssmf^WOHB;50+&!  momfS s i 3 5 I ] q >00RRr rt tddLL%%//66CAJIUR][get t*Wjrsoh_XPIB;5/*%!  @)X) | a j m 7 D X l ((MMm mt tff''##,,55??IIRR[[ddp p~&:@=;8641.,*'%"!zzx vs qm ligy w!,7COWSNIE@<73.*%!yyu smm44YXY+YXY !&,28?GNV_goushQ4 ";Thstph`XQIB<50*%!  5)S) p W h n M B V k ~ &&HHjjmm^^>>##,,55??IIRR[[ddo n{z$7=<97420-+(&$" ~~yyx vq omliggf} z&2>IVWSNIE@<73.)%!yxs rll44YXY+YXY  %*07=ELT\ensumZ>" 8QfrtqiaYRJC<60*%!  2'J' e S d o n @ T g } ##GGffddUUDD##--66??IIRR[[ddn nyy#6<:7530.+*'%# }|y yt tookkfdnn(3@LURMIE@<73.)% xxr rji44\[\,YXY $)/5>IIRP[Ydbn nxx!5;9752/.*)&$!{{y ws pomjhkk (4@LRMIE@<73.*% xxo nki22\[\, "(-3:AHPX`ipusfO3  .Iaptrld[TLE>71+&!  {z{-$=$ O H Zi t \ O c x BB__VVFFBA?>"!*)33;;FFOOXXbannxx~} 3:8642.-)(%# ~{zx wr pnmnl!")4@KMID@<73.*% xxo ohg33\[\, !&,28?GNV_goutlW;! *E^nurme]UMF?82,'" ~#4D4 B C U e s r S a u ??XXNN@@BACB,+)(11;;DCNMWU__k kxx}{28742/-+(&$"}|z xt tppll "$!)4@JHD?;73.*% xxn nhh00\[\,  %+07>ELT\emtun^C(&@Yktsmf^VNG@93-'" JVJn 8 > O _ p x \ _ s #==PPEE;;A@CB;:%%1177CCKJUS^]kkv vzy/6530.+*&%"{ {x vsqqo "%&$(4@GD?;62.)% wwn nee11`_`- $)/5?;62-)% }}wvn ndd//`_`- "',39@GOW_gotukV:! 3MdquqjbZRJC<5/*$  GKGf  0 @ Q b s ~ p l #44>>1155;9B@EEFD$$$$..77@@JJSS\\ffq qx v{ z+22/-+(&#!} |x w{ {!#%###"!)3=:62-)# ~{wwn nee//`_`- !&+18>FMU]fnsun[B& .Iapurld[SLD=70+%  }|}GHG_  , ; L \ n { | j } "2266..0/88A@GEGF99$$..77@@JJSS]]ffo ov vz z)01.,*'&" ~ ~| z{ {!#$$""!! ~})4962-(%|{uun nee..cbc.  %*06=DLS\dlsupaH- )D]nusne]UMF>81+&!  XXX@ ' 6 G X i x t { "----(&..87?>EBGGDC((,,77??IIRR[[eeo os sy x(00-+)&%!~ }| y #$#"! yxyx)462-)$ {{ttn nee00gfg/ $)/5;CJRZbjruseN2 $?Ylttng_WOG@93-'" ihi 5:5" 2 C R e t } y  " **&&$$..44<:BBIGJH44,+44< M ` o  { p$$  ##**1198A@GEJJA?**33<$ 3NesurjbZRJC;5/)$ ~}~ TTT7*5* ) 8 H Z j {  p  '&//87>EMT]emtuo^D)  .Iaqvrld[SLD=60*%  xwx _^_-CLCj>C V e v n%%//32;9BBKJKK==//88AAKKTT__hhp pr r~~!*+(&$!!""  zy^]gdw&v&$yyo ohgddsrs3  $*/681+&! mlmNNN[+M a o  m %%)(1099B@JFLKLL0088AAKKTT^^g gn lr r}z(*'$# !"" qqVTbas$s#yyo oh haaxwx5 #).4;BIQYajqutgQ7" ede `_`_^_^]^]\]%VUV9VUV:YXY'_^_cbcmlm#=Xkttng_WOG@92,'" ihi >?>f" J j } l  ''0087>;DDMMML@@88BBKKUU^^ggm kr q{ y')%#  "!!i iQO^]o!oyyp pffaa}}}6 "'-39AIPYcov}~oWJfefSTSTWNMNVMMNc))*())()+'(* #$'()+A@BmNMPOdcd7/1@Ujuupi`XPIA:4.(# nmn]]]C-6- 2 l k  ''..52;;DCLJMMLK88BBKKUU^^ffjhp ox v%(%# "!!~~a aLKYYkk||yyp pf f^^(((.!%+3=DMZku~uuuIJK;==003%&*               )*,5ZZ_ʊۄzod[SJC<5/)$  gfg%VWVV7 P i  ##**11:9@@JHONOM????JJSS^\eehhonw v#&$"! w wW UFDVThgxwwwppff``JJJ&'*0AQW]nghheefggh[[[79:67856:./3!"                     #,34DACPjjr~kYKA81*%  ZYZZYZZYZ{z{nmnxwx  {z{onoa`aN;EENMOOJJ==GGQQ\[ccggllu t!$"!~~|{z zt tLK@@RPbbtro oe e\\  KIKB~EmlmVlklZjij_SSTw?@A>>@>?B))+                 "  " " " " " " $ # $ # % & & ' )-1!;%&?JK[``mnUA2' ZYZZYZZYZZYZZYZZYZZYZ ZYZ ZYZZYZZYZZYZZYZ)ZYZ*ZYZ+]\]4NLLLLHH[NHH\RII_UIIl9(':&&1 ! G k p  '',,52;;EDMJOOON@@FFPPYYaagejis q #! ~ ~{ {{ zy xu ul lB@< = > = @ ? @ ? @ @ A @ A DDI66RGGXf\[_I]\_2jijZYZWVWLKLK>= B 4 0 1 4 6 8 : = @ j ~ m b [ ] i k m l l i g b ` \ [ X T ?  '',+44< > = > ? > @ @ A @ A A B A B A B D C D F D E E F F F F G G H G H H J I J J J J J I IKMLXPdcdZYZCAA_                ! " # # & ' ) A 3    # 1 4 = W Y _ p q o o m m j e c +!!++32:9C@HHQOTSSRMMVV^]``fejjz x~~ {{ {y xx wt ts rr ponmkkjjhfffeNM++// 2 : < < = > = > > > > ? ? ? A @ A A B A B B C B C C D D E E F F E F F F G G I H I H J J K J K K K K L M L M L N O N O O P O O O O N N N K J J H H F LZZ[8YXYYXYZYZZYZZYZ)/**! & % & ( ' + ) + , , - / / 0 1 1 3 4 5 7 9 5 , + + , - . . 0 1 2 1 3 6 > > O \ \ i t t s ^))0/75>>HFOMUSTTNNVVZZ``dbjj~v v~ {{ {y xx wu us rqponmjjjjgfffccb``C@. B C D C E F F E F F F G G G H G H H J I J J K K K K L L L K M N M O O O O O O O Q O Q Q R R R R S S S S S U S T S U S Q R P O N N L L K J I H F E E B()JYXY,YXYZXZYYYVUV5?=={ -8 9 : : ; < = > > @ @ @ B B D D E G H G > < > > ? @ A A C D D E F H H H J J J L M O O W c W +(44< I ^vwp p r s t t u v x y t q r r t u u v v x x x s t t v F B B C                    !!CBSSYVXWWWYX`_cbu ssq| y|z` _` ^] \<<443300''&&""    @ a ` a a b a b c c b c d d e e e f e f f g f g g i h i i i i h h g g d d c a a ` _ ^ ] [ [ [ X W W W T T T R R R T T TV VZ [ ]a d g j m q s u y } ~ GGfOYXYYXY!7#"7 K P V i n n p b 8 9 9 +                " # $ & ' ( ) - - - / "77SRZZZYZZ^^bboorry x{{b b` `^ ^??::774422210.-****&&$" !!   BAA X g g h g h i j i j j k k k k k m l m o m n n o o n n l k k j i g g f f d c c ` ` _ _ \ \ \ Z Z Y Z Z ZZ [\^^bcgilnsuxz~           EFiTYXY ZYZ:#"3 R _ d t   l h h E * + , &               ! ! $ $ & ( * * * . . . 0 2 3 3 6 7 8 : : < :"!!@@OM^]_^aannonx xm mccb`YYGGEDCA@@<<;988553300--))''$$  - * ' G T R X l l n m n o n o o q o q p q r r r s s t t t t t r r r p o o o m m k i i h f e d b c a a a ` ` ` ` `abccefikmqtvx|    TT]>YXYZXZJAAp3 S k r !!|              ! # # ' ' ' ) + , , / / / 1 3 4 4 7 8 9 ; ; > @ @ B B D D F H H J A$#;:KI]Yfdjimj`_a___ZZOOJJHGFECC@@<<97654411,,((%%##!!; 9 7 Z c e h s r s s t t t t t u u v v w v x x x x x x x x x x w v w u u s r r q o n n j j j h f h h e e g igiiiiklmpsvwy|   YXY.YXYZXZ LEE^2 Q p   $#      ! ! $ $ % ( ) ) + - - - 0 1 2 5 5 7 7 8 ; ; = = ? A A C D F F H J J M N O P P S T V V W Z7 %11DDLLKKIIFFCC??<<997633//--**'&##  #!,K I H k v v w x w y y y y y z y { y { | | } } } } } } ~ } ~ | } } z z z z w v v v t r r p o o o m m o m ooooqossttvxz}   YXY+YXYYXY NEF]4 O m  $!''"! <  !* + , - / / 1 3 3 6 6 8 : : < < ? ? @ B C D E H H I L L N O P S S T U X X X \ \ \ ] ` ` ` d d e [:--11+.3931.,**''%%! $20-T \ Z f | | } } } } ~ } ~ ~ ~ ~ ~ ~ | | z y y x v w v t u t u u uuvxxyyyz{~}  YXY*YXYZYZ UEF\6 O k # ***)  )37 7 9 ; ; = = @ A A E E E H I J J M M P P Q T T U V Y Y Y ] ] ^ ` a b b e f g h i k l n o q r r q [T k e2A?@ g n l t } } } { { { { {{|{~}~~! ""#"$"$!$"$!#!!    &'~YXYYXYZXZXGGP5 L k  " )*!"  $.9@ C G G I I K M M O O S S S U W W W [ [ [ ^ _ ` a c d e g h i l l l o p p q u u u x y z { } ~       "#"$%&&'((()()()&'&'$'$%"$"$!#!      ;HR[] _ ` a b c f f g h j k k p p p r t u u x y y | |       " "!# "!" "!""""" !!!"!""$"$%&%'&(*+*,.../01010213220202/1./-.,-+,*+**')&(%'%&"%"$!# "!  $+'0/407)3")$&!) !  %)$) )$ ;@:=!%*4-0)0'-$-'-$)')$) ! ' ' ' ' ' LLaOYXY ZXZZXZ!Q#!D c   ! 2 6 ; AJZg !t"#    ! "!#!#"$#%$%&''('('(&('((('(&'&('('(')())++,,-,./02234667889;;;<=>>?@A?@>@?@?@=?<=;<<<9;89<=785655442322010000./,-,-,,)*(*()&'$%$%#$"$!"!  !26BFDLNVJQGNBJBG>D;D#-0'-'-$)$)$)')$)$) ') ' ' ' ' '$ YXY9YXYYXYI<=u@ b    1 > C I N\l!#z#$#%            "!#"$"$#%%&%&&(()())))*)*)**+)))))))*)+*++,-..//1024445789::;<==>?@AADDCDEEFFFEBDCDCC@A@A>@>>=><<:;::9:78DELO5835342301/1.0..-.+,*,*+(*'('(&'#%$%"$ #!!"&48JPTYNVNTJQGNBGBG>D4>4=  $-')$-$)'-$)')$)')  ) ' ' ' ' ' ' YXY5YXYZYZK<;l? ` |    0 B K P Uaq""%&'(&&            ! "!#"$$%$&$&&'&(())**++,,-,-+-+-+,--+,+,-.-.///012233566789:;<=>>?AAABCDGFGGJJIJIJKJIJIIHHGGEFEECDBCBB?@>@>@>?;=;<:;8:8968ABqslnD>D>B7>4;/6  "'-$-$)'-$)'-$)'- )  &,$)$) ) ) ) )$) % YXY5YXYZXZi>=lE ] w    0 A R W ]ct$%)))*$&           !!!#"$#%%&&'&('(())**+,-,--.-.-.././/0-/./././0102454567899::<=>?AABCCEEEFIIJJMMMNMNPPOOOONNMNLLKKKJHIIHGGGGCEEECDAB@A?@>?=>=>;<;;:;8:8878:;acVZ45/0./-...+,*+*+()()&(&&$%#$!#!"!" "'GOTYNVJTJNGJBG>D;B;>4;07-4-4  "%$-')$-$)'-$))-$- % $)$)$)$) ) )$)$) YXY*YXYZYZj==hE [ sx  Z , > Q ^ c hv"#(),-)+#$        " "!##%%&&''(')())**++,,--..//0.0011111/00212033345577889:;;<=??@ABBDFFGGGHKKLLNOPPRSSSTSTUTTRSRSRSPQOPPONNMMLLJJJJHIGGFFEFCDCCCCAB@A?@>?=>==;<9:9:78675656MNx{>?./-.--*+)*)*'(%'%'%&"%"$ #"! -2MRQVJQDNDNDJ;D;D7B4>4;04)0'0'- !))-$-')'-$))-$))- !%$)$)$)$) ) )$)$) 13nYXYYXYZYZ dIISB [ on  n * = P a i py!()././(* # !!!#!#"$$&&'&'()(*)**+,,,--..///11122323232313333445667899;<;<==?@@BDDDEHHHHJKLLNNOPRRTUUUWXWYXXYYYYYYXYVWVWUURSRRQRPPNNNNNMKKKKJJIIIHGGEFEEDDABAB@A??=?=><=:<;<9:8:79775645IJ[^/1+,*+)*()'(%&$&$%!# " "! *0FLNTJQDJDJDG7B;B7>4;4;04)0)0'-'-  )-$-')$-$)'-$))-$- '-$)$)$)$) ) )$)" 13n~YXYZYZZYZ:=V gg j ( 9 M ^ q w|%&./1300(* # ! " ""$#$#%%''('()*)+*++,---..//00012232334343456455767998:;;>>>?AABBBDFFHHJJKKMMOOQPQRTUWWWYYZZ[Z\^_^_]^]^]^Z\ZZYZXYVWVWUVSTSSQRQQQQPPMMMMMLJJJJIIGHEFEFDECDBC@BAA@A>?<=<=;<8:8:896746454534@Arswx<=**()((%'%&#%#%!#!! #%INNQJNDJBGBG7B4;4;07)0'-'-'-'-)0)0  $)')$)$)'-$)'-$)')  ' ' ' ' ' ' ' ' 13n~YXYYXYZXZ6ZS \ a } i % 8 J ^ p }  ")+02340/')!$#$$%$&&'')()***,+,,-.../.0011123343545576778898989:;;<<>?@@ABCDDEEHHJJKLNNOOPQRRTUUVXYYZ\]]^]_`aabacbcbcab`a__^_]^\][\[\XYXYWYVWUVUUSTRRQROPOONNMMKLKLJKJIHIGHFFEEDDACAA@A?@>?<><<<<;<8:8989674545442366]^|Y['(&'$%$%"$!#!"   !AJGJDJBG;D;B7B4;4;07-0)0'-'-'-'-)0)0  ')$)$)$)$)$)$)')$) #( ' ' ' ' ' ' ' ' 13ntYXYZXZYXY5lN Q Z w  " 6 I \ o   &'0/7767..+,,-,.///0/00222344556677878799:::9;;<=>=@AABCCDGFGHIILKMNOPRRRSTTVVWYZZ[\]___ababdeeffhghghegefdececd`bab`a_`]^]^\]Z[YZXYWXUWUVTUTUSTRQQQOPONNNMLKKJJJJHHHHFGEECECDBCAA?A?@>>=>;<:;::897878773535341202GHy~y|sv68"%"$"$"" 4;GNBGBG;B4>4;-7-4)0)0)0)0'-'-'-'-)0$*  ')$)')$-$)'-$)'-$) $) ' ' ' ' ' ' ' ~ON_WYXY ZYZZXZ4nG E X u  2 E Z k  %%*,24893545566778899::;:<;==??@?@?BCDEEGHIIKKKLNNPPQRTTTUVXXYZ[\]___aabcddffghiiklllmjklllljkjjhihhfgffdebcbb`a``^`_`\]\][\Z[ZZXYWXVWVVSTSTSSPPOPOPOOLMLLKKJJIIGHGGEFDDBCBCBB?@>@>?=>;=;<:;8:79686646342323020178z{~|y~vyuyrvLQ&'"# "! $*FH>D>D;B4;4;07-4)0)0'-'-'-)0)0)0)0'-" "$)'-$-$)'-$)'-$)!& #% ) )$)$)$) ) ) )  UT[EYXYZYZZXZ*I < Q n   1 D X j } "(*129:===??@ABABDDEFHHIJKLMMMNPPRRSUVWXYXZ\\\]]_aaacdefgghijkkkmnoppqqqqsqqqppoonnlmkljkijhhghgheededdbdbb`a``^_]^\][\[[XZXXWXWXTVTUSTRSRRPPOONNNMKKKKKJHIGGGGGGCECDBCABAA?@>?=><=:;:;:;897878664544230201/001SW|~y|yyuvrulrae24!8:>D;B;>07-407-4)0)0)0'-'-'-)0)0)0)0'-" %)-$-')$-$)'-$))-" ) )$)$)$)$)$) )(   |UT[CYXYZXZZYZ54y 3 N k   / A V g z  ''./77BCMMOOPQQRTTUVWYZ[[\]^^__abcdeeghiijkllloopqssttuvwvuvvvvvstsssspqopopoolmlljljkijhhfgefeebdbcbc`a^`__]^[]\]Z[Z[XZXXVWUWTUWW]]VXQQOOOOLMNMKKJJJIHHGGEFEFCCCCBCABA@?@=>=>==:;9:9:786756563423120101/0-.ABvv~~~v|uyuyrvlrlogoahCH"#$*>D7>4>0;04-4-0)0)0)0)0'-'-'-)0)0)0)0'- )-$))-$-')'-$))-$)%') )$)$)$)$)$) )   | {UT[CYXYZXZ54~ . I e    - ? S e x #%*-67@ASS]_aaabdeffgijjmmmmnnqqqruuvvyyzyzzzzzzzzyyxxwxwwuvuustssrrqqoononnjljkjkhifhfhfgdfeebcbcab_`^_^_]]Z[[\Z[YZ]^abefijmnopstxynnmmwxyy{zggLLKKPPKKEFEECDABAB?A>?=>=>;<;<::9:8978565655231212/0./-/-.03jl~||~y|uvrvrugoglglag\dOR+.6;7>4;-4-4)4-0-4)0)0)0)0'-'-'-)0)0)0)0'- $))-$-')$-$)'-$))-'- ) )$)$)$)$)$) ) ~ | { zUU[:YXYZXZ~43vH ) F ` |  R + = Q b w #(+35?@PQcdqqsstuwwzyz{||}~~~~}}|}||{zzzxyxwwwvvttsrrrpqqqnonnmnmnjljjijhifgefefcdccababaa_`]^]^]][]fgnopqstxy||[\QRMNBC@A?@>><=<=;<9:89786756453424230101/0..-.,-,-TV{}v|y|vyruouorgldjdjag\aY`VY35 '4;-4'0-4)0-0-4)0'-'-'-'-)0)0)0'-'-'-'-)0 '-$)')$)$)'-$)'-$)&($) ' ' ' ' ' ' ' ~ | z z()nYXY$YXYZYZ eKKZB % A ] y Q ( : N ` s !(+13<=NObcuu~~~}}{{|{yyyywxxwuvuuttsrrrpqponomnlllkjkhihihhfgdfdecdbbghlmgg^_]][\[\Y[eekmSTEG<=;<:<;<998978674545341222/0/0./..+-+,*+BDstv|vvrvoulollglagdgad\aV`Y\QY=A!0404'0-4'0-0)4)0)0'-'-'-'-)0)0)0'-'-'-'-)0 $)')$)$)$)$)$)$)')$)$) ' ' ' ' ' ' ' } z z y()mYXYYXYZYZ\UUF` # @ V r O ' 8 L ^ q  !(*13;  -4-4-0-4)0-4)4-0'-'-)0)0)0)0'-'-'-)0)0)0)0#%  $))-$-')$-$)'-$))-$)$) ) )$)$)$)"  z y x u u>>cnYXYZYZZYZZ)(P 0 K g  1 F Y k ~ ''1068DEXXkk}~~~||||{{{zzyyxwwvvuustssrrppoooommlmllWXVWVVST]]ii67231211/0//-.,-+,)*)*()&'%&-.TWlrlogldlag`d\aY`V\TVTVJTGNDNDJ>G>D;B7>&*    -4-4-0-4)4-4)4)0'-'-)0)0)0)0'-'-'-)0)0)0'-# )-$))-$-')'-$))-$)$)$) ) )$)$)$) y w w u u tKK^XYXY ZYZW**` 5 E b |   / D U h z$&./57ABUVii||~~~{|{{{{yywwwwwwuuttssrrrrppnonnssVVUVSTRR_`RS12/0-.-.-.*,*+)*()()&'$&$%BDglgldj`g\d\aY`T\T\QVNTJTGNDJBJ>D7>7>0;47,1    "')4-0-4)0-4)0-4)0'-'-)0)0)0)0'-'-'-)0)0)0)- $)'-$-')$-$)'-$)$)$) ) ) )$)$)$) w v u t t sLK^TYXYZYZ WKKb] 6 C _ w    , A T f y $%-.46@@RSefyy|}{{zzzzyywwvvvustssrrpqnpnomnlmmm|}ddSSQQQPabxz56-.,-,,)*)*()&(&'$&#%"$+,]cdjdj`dY`Y`Y\NVTVNTNQDNGJBGBG>D4;4;07-4-4*0    %--0-4)0-4'0-4'0)0)0)0'-'-'-'-)0)0)0'-'-'-') '-$)')$)$)$-$)'- ' ' ' ' ' ' ' '$  u t t q pKK]RYXYZYZTKKSS M > Z t  ) * ? Q c w $+-35<=OOcdvvzzxyyywxwvuuuustsrqqpqoonommppmmPQOOMNaaKL+,+,)+))'(&(%&$%#$"#&&IMdgdg`dV`V`V\QVNVNTGNBGBG>D;D;>4;0707-4-4-404    -0)4)0-4'0-4'0-0)0)0)0'-'-'-'-)0)0)0'-'-$-$( !$)$)$)$)$)$)$) ) ' ' ' ' ' ' ' ' ' r t q pmPO\CYXYZYZUPQ@Hb = V m 6 ) < N a t  #),35;G>G>D7>4>0704-4-4-4-4-4-0%*  )0-0-4)0-4'0-4'-)0)0)0'-'-'-'-)0)0)0'-'-'-!% #($)'-$)')$-$)'- ' ' ' ' ' ' ' ' ' '& q p n iYXY-YXYZYZYXY+B a C P k 5 ' ; L ` q   #*,2479IJ_`qrxxuvuuttssrrpqppnonnklklyzrrPPLLLKccrt./&(&'$&#$!#!#!#  LQ\aV`V\TYNVJTGQGNBJ>D;B>B7B4;07070707-7-7-7-4)4&-  -4)4-0-4)0-4)0)0'-'-'-)0)0)0)0'-'-'-)0)-$) % $)'-$)'-$-')'-$)$)$)$) ) ) ) )$)$)$) )! x n ngYXY&YXYZYZYXY"7X N M f 4 # 7 J ] q   !*+2267HH\]ppuuutttssrqpqopnonnkljknnooOOKJIIaayy8<%'$&$%!# " ! >@Y`T\TYTYNTNQJQGJBGBD;B7>7>07070707070707070704-4-4   )4-4-4-0-4)4-0)0'-'-'-)0)0)0)0'-'-'-& '-$))-$-')$-$)$-$)$)$)$) ) )$)$)$)$)$) ) n lfYXY%YXYYXYC::yH _ H b  J " 6 H [ n    !**2246EEZ[mmssssqrppnooolmllkljkrrnoPPIIGGee|y|otEF"$"#!# " ! %(UXTYQVQVJQGNDNDJ>G;B7B4>4;07070707070707070704-4-4-4&)   )4-4-4-0-4)0)0)0'-'-'-)0)0)0)0'-'-  $))-$))-$-')'-$)$)$)$)$) ) )$)$)$)$)$)% n l jeYXY$YXYYXY GAAa7 c L _ z t  3 D Y k   ((1144CCWXklqrqrppnonnlmjkjkhjqsiiKLGGEF``|y|tyqtMQ " "!:>TYQVNTJQGJDJBG;B7>7>070707-7-7-707070707-7-7-7-4)4-0,3 -4)4-0-4)0)0)0)0'-'-'-)0)0)0)0'- '-$)'-$-')$-$)$)$)$)$) ) ) )$)$)$)$)$) m j i./bYXYYXYYXYPOOC.] U [ u r  1 D V i |  ((/012@@UUghnonnmnkmkljjijhimnVVGGDECCZY|y|tytwqwmtinJL!  NTJQJQDNDJBGBG;B4;4;070404-4-4-4-4-40404-4-4-4-4)0-0-4)0$ #)0-0-4)0-4'-'-'-)0)0)0'-'-'-'-)0  $)'-$)')$)$) ' ' ' ' ' ' ' ' ' ' ' '! q i i hBA]hYXYYXYYXY<--O b U p  o  / A T h x   $&./01=>SRefmmmmjkkkijhifhiiOPDDBCCC]_|y|twtwqtjnmnciEJ@EJQGNBGBG>D;B;>4;4;-7040404-4-4-4-4-40404-4-4-4'0-0)4)0-4#*-0)4)0-4'-'-'-'-)0)0)0'-'-'-'-)0   $)$)$)$)$)$) ' ' '& ' ' ' ' ' ' ' '  i i h gAA]cYXY YXY USTL? c V m  ~  , ? R c w   #%,./0;G>D>D4>4>070;07-4040404-4-4-4-4-40404-4-4'0-4)0-0-4)0,3 )0-0-4)0'0'-'-'-)0)0)0'-'-'-'-)0 '-$)'-$)') ' ' ' & ' ' ' ' ' ' ' j i h g dBA]bYXY YXYYXY'?` W g    * = P b u   !%+-./89MM_`hihihighefdfjkQQ?@>?GHjj|y|wytwntnqnqgndjdjbgU_:>8ADJ>D>B;B4>4;074;070;-7070707/6-7-7-707070707-7-4)0-4)4-0-4)/ ,3)4-0-4)0)0)0)0'-'-'-)0)0)0)0'- !%'-$)'- ) ) )$)#& ) ) ) )$) i h h g d dCC]UYXY YXYYXYODEaS e e ~   ' < M ` q   !$+,..78JK]^ghghegeecdff{|PR>?=>EEac||w|wynwqtmqjngmdgbg\dY_RW)*'+EJ>D7B7>0;4;074;074;07070707%)07070707070707-4)4-4)4-4-4)0-4#(0-4-4)0)0)0)0)0'-'-'-)0)0)0)0'-#)  ~&,$))-$-') ) )$)$) {$) ) )$)#( y h g e d dbYXY:YXYYXYYWX.Oj a {   & 8 K ] n   !#++-.56II[[effgefbdbctuRS;===@B^_|wytytwntnqjnjmgmdg_d_d\_T\NR!#7@>E7>4>0;4;074;074;07070707%*07070707070707-4)4-4)4-4-4-0-4(0-4-4)0)0)0)0)0'-'-'-)0)0)0)0'-$)'-$)&*!% | |$))-$))- ) ) )$)#( p }" ) )$) h f e e c daYXY(YXYYXYYXYUDDje _ w   # 7 I [ l }  !"++,,24EFXYbdcdbdacklST;;:;?@]^|wytwtwmqjnjndj_d_g_dYbY\TYQVFM$+:A:A074;470;4;074;074;-7-7.4%--7-707070707)0-4)0-4)4-0-4!& #)4-0)0)0)0)0)0'-'-'-)0)0)0)0'-$-$)'-$)'- | {'-$)'-$) )%" n n % ) g f f d ` FDSRZFYXYYXYYXYWQR=]i r W 3 E X k z  ! **+,11CCVWabab`a_`y{RT8979>?fgyy|tytwntntjqgmgmdj_d_d\bW\TWPWMTJN37587>3:4;070;47074;074;-4-4-4 #  -4-4-40404)0-4'0-4)0-0-4(.  -0)0)0'-'-'-'-)0)0)0'-'-'-'-'-$)'-$)'-$) z z$)#)"  r n n m l g ] S 5 # ;;;uYXY.YXY YXYYXYZYZY33zm m  T   2 D W f w   ))*+./?@SS``_a__deSS7867;=nqyy|tytwntjngmdjdj_g_bY_Y_W\TWPWJTJMCI$(&+7:7:7:0707070747474707-4-4)0 )0-4-40404-4'0-4'0-0)4)0    )0)0'-'-'-'-)0)0)0'-'-'-'-$)$)$)$)$)$) y y  } r q p m m m j h [ I (  ##$GGGWYXYYXYYXYZYZYTUAkm ~ R   / A S e u   '()*--==RR\]__\^uvLM46348:op||y|yynwntntjmgmdjbg\b\bY_W\WYMTMTJPJMAJ<@/67>3:7>070;070747074;07-4-4  $-4-40404)0-4'0-4)0-0!'     "))0'-'-'-'-)0)0)0'-'-'-'-')$-$)'-$)&, x w w t t s r q p m l d I 1   )*+CCCgRQRAYXY"YXY YXYZYZZYZc33n w N  - ? P a t  %'))+,:;NO[\\][\~~IJ342366fk|y|tytwntnqmndjdjbjbgYbY_W\TYTWMTJPFMFJ>F;B15"(7>3:7>3:4;070;47074;0707-7)3-70707)0-4)0-4)0-4(1      #()0)0)0)0'-'-'-)0)0)0'-$-$)'-#(" x v v t u s p o i U >   $%&;<>jWVWGXWX.YXYYXYYXYYXYZYZ \JJSs v o  + > N _ o  #&'(*+89MMYYZ[ffw{IL231215eeyy|y|qwtwntjqjndmdg_dY`PVRVW\TYPTMTJPFMFJ>E:A6:353>:>3::>074;470;4;07470707$!*0$-407-4-4)0-4)4-4)4        &)0)0)0'-'-'-)0)0)-$-')$-  z w v t t m \ D 0  #>>BtFFHUYXY8YXY"YXYYXYYXYYXYZYZZXY'k##t }  ( : M \ m }  #%'(')56JKVX[\wyxyIJ/0/0/1^a{y|wytyqtnqnqjnjmdjdg_dV\FJ8<>BCMMPFMFMAFAE>E:A:A03#)3>7>3::>3:4;070;4;074;0707-3)-0707#)%*07-4-4)0-4)4-4#        (.%-&,'-'-(/)0)0&* y w w v d Q 1 %   "))).HGJcONOFYXY(YXYYXY YXYYXYZYZZYZ `IJ^v x   ' 8 H Y j {  "$%''(34HHSUZ\hi>?-.-.,-Y[wzy|tytwqtjnjnjmbg_d_d\bW_6:!#$6;FMEJAF:A:A:A:A6=!$3:7:3>7>3:7>074;470;4;070707%$,1070707#,%-4-4)0-4)0-4")         { z z x r W C &   ./788F>E:A:A:>:>:>7;-1).3:7:3:7>3:4;070;47074704)0"'-4040404-4&,,1-0-4)0-4&/               | | { p d F 2  &&@@E|ZY[Tgfg9lkl"srs}}} ZYZZYZZYZZYZ<%&+ " 2 C T c t ""#%$&./BCPPYYZ[36*,)+()OQmpwytyqtmqjmgmbjdg_d\_W_Y_T\TWPT#"%4>>A:A:A:A:>:>:>7;4;#.43:7:7:7:07070707470704&!&-4040404-4)0)-)4)0-4'0             ~ z f T ; (#"()4BCIVUZimlmK|{|4 ZYZZYZ//4  / A Q a r  !"$#%+,?AQQlmOR-.()&(&'GLiintntmqjmgjbjbd_dY_W\WYTWMTMTMP.47;:A:A:A:A:>:>:>:>7>03 3:7>3:7>070;0707470404 !,3040404-4)/$--0-4)/!            u Z C 1)*)>>F_`dvvxfH/  ZYZ.03  / > N _ o  !!#"$*+=>PPyyLN))&(&'$&GH`cmqmndjbgbgbgYbY_W\TYPWJTJPEJEF .47=:A:>:>:>:>:A:A:A:A:>7;&*#'3:7>3:4;070;4;0707)-  ,607070707-7 %)-4)0$          z g P 4./$'8DEPddjfM7,# ZYZ//1  + : M ] m ~   #!#'(<E,1147>:A:A:>:>:>:>:A:A:A:A:>0747'*3::>074;470;0707$/60707/6%* &-4&,           p T C/3)*>FGUggmo[LA80)$ ZYZ;<E:A:>:A:A:A:>:>:>:>:A:A:A:A:>:>07-3-0074;070;0707-4/607-4$ )0        u b E 9 , ) 2EFQvuzɎۂtg[SJB;4-(" ZYZRRSO  % 7 G X h y  !"$%78DEtwbcTUNOEI34"$ " "!69PU_dY_Y\W\TYPWMTJMEJEJ>E>A:E>E:A:A:>:A:A:A:>:>:>:>:A:A:A:A7>3:4;-3*.064;470;07%* '         g S : 1 , '*45<|]]_Y~LLZkuvqi`XOG@82+&  ZYZTST;  $ 3 D U e v  !!#33BCx{^aCD-/$%(),.*-#%!!!04MRY_TYPWMWJPEMEJAJ>F>E:A:E>A:A>A:A:A:>:>:>:A:A:A:A:>:>:>7>3:7>-4 $)./607-404           v Y D 1 - )+56???Aa[Z[B\[\*`_` !:Vktuof]UME=60)$ ZYZZYZ"%&, 1 B S b t  "01?A|}{dd;<(*#%$%#$ " "!,1HLTYTWMTJPEJEJAF:A>E:A>E:A:E>A:A:A:A:>:>:>:A:A:A:A:>:>:>7:3:47$#),/-4),        y d N ; 0 +1!!1BBHnHGIPYXY0YXYYXY pop(D^puslcZRJB;4-(" ZYZCCFa  . A P ` q  -.>>tux}gk36$&#$"$"$ # ! +,?GMTMTJPAFAFAF:A>E:A>E:A:E>A:A:A:A:A:>:>:>:A:A:A:A:>:>:>0717! %*"#     n S B 8 - &$%5+,5MMPXVUV5YXY YXYYXY YXYYXY 0Mfsvqi`XOG@92+&  ZYZYXY. - , < N ^ p  +,<=kk|~pvQQ*+#$!#"" " $+>AJMEJAFAEAE:E>E:A>E:A>E>A:E>A:>1414:A:A:A:>:>:>:>:A:A3>38$    x a C : 4/)00;GGJ[XWX=YXY%YXYYXY YXYYXY :Vktuof]UME=60*$ ZYZYXYEEKb * : J \ k } ()9:ab|uyw|km8=&(!# "! "%7=AJAF>E>E>E>E:E>E:A>E>E>E>E:A:>'($%18:A:A:>:>:>:>:A:A7;"(   e T = 8 /0))7>>EiPOQJYXY0YXYYXY YXYYXYYXY(D^puslcZRJB;4-(" YXYZYZ5. 7 H W h z %'89WZ|wyrvtwdi7;&(   -3>E:E>E>A>E>E:E>E:A>E>A>E:A:>:>&+6=:A:>:>:>:>7>5;%  t X J ; 3.%&855>zHHLXTSU:YXYYXYYXYYXYYXY 0Mfsvqi`XOG@92,&! YXYZYZ44By 6 E V f w #$56MMw|wytwrumqeiFL)+'-:A>E:A>E>A:E>E:A>E:A>E>A:A:>:>(.:A:>:>:>:>7>#(y d M C 9 2./0;AAEdTTU>YXY$YXYYXY YXYYXY :Vktuof^UME=60*$ ZYZXWY?5 @ S c t ""23BCzz|y|twtwntmqjlgmdgV]9:"% %>E:A>E:A:E>A:A>E:A>E:A:E:>:A:A#-1:A:A:A6=#%  l W C ; 33!"1::@iYXYCYXY,YXYYXY YXYYXY(D^puslc[RJB;4.(" ZYZZYZ*+C ? O a r  019D8;&+#&%*(+(,!%"&:A>E:A>E>A:A>A:A>E:A>E:>7;07)/!6<7>38!%  v a L C 6 /!"5>>GsEEISYXY6YXY"YXYYXYYXYYXY 0Mfsvqi`XPH@92,&! ZYZ IIRY < M ] o ~ ./45IMss|y|w|tyntntnqjnjmdj`d\b\bY_TYNSDJAGFPAD7<48%+#>E:A>E:A:E>A:A>E:A8?18)."$)6 0 !8++9LKPbRQSD^]^(babihi zyz :Vktuof^UME>60*$ ZYZYXY(%&G K \ k | ,-12<>`b|||wytwntmqmndmdgbgbgV\Y_Y\TYTWMTMPFMFJAFAF:A.6!:A>E:A>E>A6?6;04.4(.$(  r V I A9.,-;56>nZYZH`_`*mlm}|}(C^pvslc[RJB;4.(" ZYZIITZ J X i z (*./44NPyw|w|tyntntmqjndmdg_d\bY_TYWYPWMTJPJPAJAJAFAFAF;D7?>E6=18*/%)%)$)# x g S D :60:9ByNNQP]\]3ihi!{z{  0MesvqiaXPH@92,&! ZYZZYZ/K V f x '(-../?@[]zzywytytwjqjnjndj_g_g_dYbY_TYNVPWMPFMEMAF>FAFAFAFAF>F;D%)  j [ J ? 2411>JJO]UTV?^]^(a`a   9Ukuuof^UME>70*$ ZYZZYZ99Sp T d t $%*+,-01::eg~||t|tytwtwjqjmgmdj_d_d\bY\W\TYPWNQJPFMEJEF>F>FAFAFAFAF>F>F u ] P E 9/00@=>EiSSUIZYZ/`_`gfg utu ",49<=;71( &B^ovslc[RJC;4.(" ZYZZYZ8S a q "$()++,-,-NOdgzz{}ywytyqwnqnnjngmgjdg\b\b\_T\TWPWMTFMBGEJ>F>E>E>E>E>E>E>E>E>E>E  e R H =3 3;;EvHHKTZYZ1ZYZZYZqpq $2@LU[^^\YRI;,  .KdsvqiaXPH@92,&! ZYZZYZ;;Wt ^ p  '()*+,*+22=>dentyyqwqtmqjmgmbjbd_d\bW_W\TYPWMTMTFMEJ>DEF>E>E>E>E>E>E>E>E7=-2#  p [ N B 5#$<*+:EEJeQQSF^]^'ZYZZYZ ZYZZYZ.@Q^hnqrssqmeYJ8&  8Ujutng^UME>70*$ ZYZTSYE \ m | $%'()*)*'(-.:=WZbfmtmqjmgjbjbg_d\_W\TYPWJTJPFMEFAJAFBGAF>E>E>E>E;B7>17(-  w e UMD888I?@GxSRUN]\]-`_`edenmnZYZ #7J]irvxxyyxywuodUA, &B]ovsld[SJC;4.(" ZYZYXY *+\ j { "#$&&''(&'$&)+25AE[^^ddg_gbdY_Y_W\TWTTMTJPFMEJAJAFEJ>DAFAFAF>F;D3:+0"$  e XQK/1ODEVhhpoG({z{nmn '=Rcouxwvtttuuwxwsk[F/  .JcruqjaXPH@92,&! ZYZ MMZR g y !#"$%&&'"$"$"##&)+04HLLQUXV\W\TVMTJPJPJPAJFJAJEFEJAFBGAFAF=C.6%*  v ]UL!"FFG]uu}kF% *AWhswwuromlllnptvxum^H/  7Tittng^UME>70*$ ZYZZYZ*e v  "#%#$ " "!  "!#*.9>;@DIGQCJ=DAHAFFJ;@;@7@:?EJ59+- " { h WNE67QWXeȎqZ<" *BZktwurmjgdccdfhlptwvn^G- %A\ovsld[SKC;4.(" ZYZZYZ??_h q  " "!!"&"'%'%)+.+/+.(+&*'-&( %   j ^ OF!"DABTbck~wwxwn[A& )BZluwtojeb_\[[\^adinsvvm]D*  -JcruqjaXPH@92,&! ZYZZYZ3m       t ^ SGB,-FPP[||oeabfmsuo`G, &?Xkuvsnhb^ZWUSSTVY]aflrvulZ?& 7Tittng^VME>70*$ ZYZZYZBAai ~       g V J>!?>>NggmkYQLNS[bkrurdM2 #>?ADGLRX^fmsvqaH+  8Tittog^VMF>70*$ ZYZRQ]F    g Y I :=%&:JJQoihjL~}~7' !&+17>EMU]ensuo^D) 0Jbqusmf^WQKFA=;9889;=AFKQX_gotunZ?$%A\ovsmd[SKC;5.(# ZYZZYZGFc]   t ` N A 3&(>BBLtRRVUhhh;{z{( $*06=DKS[clrvqbJ.  *E^pvsng_WQJD?;75322358;@EKRY`hputjS7  -JcrurjaXPH@92,&! 8qZYZZYZUU\B12n   v f T E ::12@~MLQ^YX[Bede( #).5;BJQYbjqvsfO3 %@Zmuuoh`XQJD>952/-,Z6:?ELSZbjrurcK.  8Tjttog^VMF>70*$ ZYZZYZZYZTS\D11o   g X J ?:**<<83/,AK:?FMT\dmsvo]B&%A\ovsmd[SKC<5.(# UZYZZYZ ZYZ#HG`Y!"W C:#$;67DwKJOOZYZ1_^_cbc{z{  !&,28?FNV^fotum[A& 3OfsurkbZSKD>83.*'n4:@GNV^gouujU8  -JcrurjaYPH@92,&! UZYZZYZXWY)OOTCSRU;ZYZ%ZYZZYZ   %+07>ELT\dmsvo_F+  .Iaqvrld\TLE>83.)&#j5;BIPXaiqvseM0  8Tjttog^VNF>70*% U8 $@txckqvqcK1 "bpne]i93-)%!56EMU^foutkV:  -JcrurjaYPH@92,&! UU:XtttkW<"=VrXQI9@HPX`iqusfM0 (iTjttog^VNF>70*% qUrVvRJ5;CJR[clsup^C'V@[nutmd[SKC<5.(# qpLE6=EMU]foutkV: U}-IbqurjaYPHA9`,&! 8U8eF?_9@GOX`iqusfM0 q]6Rjttog^VNZY% US@94;BJRZclsup^C'Y$?[nutmd\ Uߪߪ9h;46=EMU]foutkV: qW,Ibqu! ߪqUVp߾6/v8@GOX`iqusfM0 8V 6Rz޸%  qUUrݺݼ1+nJ;BJRZclsup^C'q$ݺ)#)ڭUڪUتثڴخۻ,'kۺ6=EMU]foutkV: ت#ٱw-'!ٰحUUի֯լع("7v8@GOX`iquseM0 ժrd1+% ח"8ӫӬӫָ$J;BJRZclsup^C'Ӫ<5/)#i"ѪѫԶ Ժ6=EMU]foutkV: ѪѪUA:3-?=UϪѵv8@GOX`iquseM0 VϪUG?81А̪δJ;BJRZclsup^C'̍UڠLD=м#̪ʪʪʪ̳ˮκ6=EMU]foutkV: UʪߑRJז˒ ʪUȪȪȍȍ8Ȫʲ \ȭȬɐȏ_8@GOX`iqusfM0 sUȪqW݊( ȪU ŪDZ W4;BJRZclsup^C'Ūeoȕ Ūq9 êŰ r]6=EMU]foutkV:ʂê{0 ê ¯ 28@GOX`iqusfM V: q8zB [4;BJRZclsupQ VU Vd. 06=EMU]fout$ V= Vk Z28@GOX`iquU[(" :8 n z?" 9-4;BJR[cl٢U2,&! Uw DKVOfl V06=EMU]fh70*%  U!hDKRr[Iaq +28@GOX`qC<5/)$ {!&71+%  <q=*05;BIPW_gn*F`qvrk* q@.4;CVU<5/*$ qU05;BHOW^fmrU!4.(# 6lG+&"zYC, *Jfttne[SJB;<q860+'#dtA* 2SluskbYPH@888V<61,($ W( :8Ypvqi_VNF>7:UqIC=72-)%"w X s <]qupg^UME=6sUqPJD>94/+'#8 @? ?_rupf]TLD=6U8V_XQKE?:51-)%"jhfedb +._ A`suof]TLD=68oUVg`YSLGA<83/+(%" t259: @`rupg^UME>8UU@UVsnha[TNID?:62.*'$9d 9=Anr =^ruqh_WOG@99',UVtsoic\VQKFA=951Dc  AEIM :[qvrjaYQJC<&*/aqUV_mttqke_YSNID@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx)-2694/qqqqqqqqqqqqqqqqtt qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrVrrqqqqqqqqqqqqqqqqss?,16;@EKQW]cipqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq8qqqqqqqqqqqqq.DZkvzzqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq #(-27ssoooooooooooooooooooooo|teQ<(LooooooooooooooooppVoooooooooooooooooo#A`t{zunga[UOIC=82-@}}oooooooooooooo ooqoooooooooooooooooooooooooo?oooooooooooooooon+05:?EJPV\bhouzvvooooooooooooooooooooooooooooooooUoooooooo *@Wkw||ooooooooooooooooooooooooooooooooyy#!&+05;AFsxxlllllllllllllllllludN6" llllllllllllllmmVllllllllllllllmmV2Rlz|yrlf_YSMGA;60+&:xxllllllllllww\ ll8llllllllllllllllllllll nnllllllllllllm).38>CIOU[agmsy}|llllllllllllllllllllllllllllllqllllll '>Vky~~~llllllllllllllllllllllllllllllww%!#(.39>DJPVnqqjjjjjjjjjjjjfM4oo:jjjjjjjjjjjjjjjjjjjjjj%Edw~|wpjd]WQKE?93.)$4ssjjjjjj jjjjjjjjjjjjjjjjjjjj Bjjjjjjjjjjss'+16DJQW]djouznneeeeA$gg9eeeeee2Ur~|wpjd^WQKD>82-(# eeeeeeeeee Eeeeegg!%+06;AHNTZ`flrx~qU3ffVeeeeeeeeeeeeeeeeeeee 3Rneeeeeeeeeeeeeeeeeeeeeeeeeeee^,&!#(.39@FLSY`flrw}qq7 cccccc2Tq~xrlf`YSMF@:4.)$ ddVcc iiee6"',17=CJPV\bhntzpR1ccccUccUccUccUccUccUcc8)Ih}ccccccccccccccccccccccccgg3-(#$).4:AGNT[agmsy~sX7 ffff 8Ysysmga[TNHA;5/*$   03#(-38>EKQW^djpu{rW6 (Hg|aaaaaaaaaaaaaaaaaaaaaa|4.(#$)/5;AHNU[ahnsy~x`B'  +Gdy~ytnhb[UOHB<60*%   #(-39?ELRX^djpv{xbE* 3Qmފrr________________:4.)$$)/5;AGNT[agmrw|~mV>*  -B[q~}xrmga[UNHB;50*%   #(-39?EKRX^dioty~~pYA,  "2Hav{vwwuuttssZ@:4.)$$).4:@FMSY_ekpuz~zkYG8,#  ",9J]n{zupke_YSMGA;5/*%   #(-38>DJPW\bhmrw||n\J:-$    (2?Oar~}xtoid^XRLF?93.(##(-39?EKQW]bhmrv{~zpeXMD;4/*&"$*08ALYfrz{vrmhc]WQKE?:4.)$  "',17=CIOTZ`ejotx|{rfZND<5/*&# !#%&'()****)('&$"#',28@HS^ku}}yuplga\VPJD>82-'""',17=BHNTY_dimrvy}|xqjc]VQLGB><:998876533210/00/00012456799:<:::<>?ACEGHJKKKKKKJHGDB?<:99999999999999::DINSX]bfjnquxz|}|{yvsolifb`_]\\\]^_abdefghhhhhhgfecb_]\[[[\[[[[[[[[\\\]^`bfjnrtx{|}}}{xurokgc^ZUOJE?94/*% #(-2794/+&"   %).27951,(#  "&*/38<@EILPSVY\^`bdfghijklmmnnnooooooonnnnnnmmmmmmmmnnnnnooooopooooooooppoooonnmmlkjjhgfeca_]ZWTQMIEA=84/+&" #(,048<@DGJMPSUWY[\]^_`abbccdddeeeeefffffffffffffffffffffeeeeddccbaa`_]\[YWUSPNKGD@=951,($   #'+/37;?BFILORTVXZ[]^_`aabcccdddddddddddddccccccccccccddddddeeeeeeeeeeeeeeedddcccbaa`_^]\ZXWURPMJGC?<84/+'# $(+/36:=@CFIKMOPRSTUVWWXXYYYZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[ZZZYYYXWWVUTSRPOMKIFDA>:730,(%!   #'+.269@BDEGHIJKLMMNNNOOOOOPPPPPPPPOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPOOOONNNMLLKJIHFDCA><9741-*'#  "%(+.1358:;=>?ABBCDDEEEFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFFEEDDCBBA@>=;:8641/,)&#   "%(+.03579;<>?@ABCCDDEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGFFFFFEEEDDCCBA@?>=;97530.+(%" !#&(+-/12456889:;;;<<<======================================<<<;;;:98875431/-+)&$!   #%(*,.02356789::;;;<<<<====================================================<<<<;;::98765420/-*(&#! !#%')*,-./0122333444455555555555555555555555555555555555554444332210/.-,*)'%#!  !#%'(*+-./011223344445555555555555555555555555555555555555555555555555555444443322110/.-+*('%#!   !#$%'(()**++,,,,----------------------------------------,,,,++**))('&$#"   !#$%&'()**++,,,,---------------------------------------------------------,,,,++**)('&%$#!    !!"##$$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$#""!    !!"##$$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$##"!!                       crack-attack-1.1.14/data/crack-attack.xpm0000644000175000001440000000734110223354152017653 0ustar webbsterusers/* XPM */ static char * crack_attack_logoicon_xpm[] = { "48 48 83 1", " g None", ". g #333333", "+ g #000000", "@ g #000033", "# g #003333", "$ g #003300", "% g #330033", "& g #006600", "* g #339900", "= g #660066", "- g #990099", "; g #993399", "> g #CC33CC", ", g #663366", "' g #00CC00", ") g #009933", "! g #CC33FF", "~ g #FF66CC", "{ g #CC66CC", "] g #009900", "^ g #006633", "/ g #339933", "( g #000066", "_ g #9933CC", ": g #CC3399", "< g #9900CC", "[ g #330000", "} g #660033", "| g #660099", "1 g #990066", "2 g #330066", "3 g #660000", "4 g #000099", "5 g #990000", "6 g #663300", "7 g #990033", "8 g #993300", "9 g #993333", "0 g #CC3333", "a g #CC0033", "b g #CC3300", "c g #CC0000", "d g #FF3333", "e g #CC3366", "f g #CC6633", "g g #FF6666", "h g #FF0000", "i g #FF3300", "j g #CC6666", "k g #FF9966", "l g #FF9999", "m g #FFCCCC", "n g #FF99CC", "o g #FF3366", "p g #CC9999", "q g #FF6633", "r g #FFCC99", "s g #9999CC", "t g #666666", "u g #003366", "v g #333366", "w g #333399", "x g #CCCCCC", "y g #CCCCFF", "z g #669999", "A g #CC99CC", "B g #FFFFFF", "C g #999999", "D g #99CCCC", "E g #FFCCFF", "F g #CCFFFF", "G g #666699", "H g #996699", "I g #CC99FF", "J g #99CCFF", "K g #9999FF", "L g #6666CC", "M g #9966CC", "N g #6699FF", "O g #6666FF", "P g #663399", "Q g #9966FF", "R g #336699", " ", " .+++++++++++++++++++++++++++++++++++. ", " ++++@++@+@++@+@++@+@++@+@++@+@++@+@++@+++ ", " +++@++@@+@+@@+@+@@+@+@@+@+@@+@+@@+@+@@++@++ ", " ++@+@+@+@@+@@+@+@+@+@+@+@+@+@+@+@+@+@+@+@++++ ", " +@+@+@@@+@@#$@%%%@+@+@+@@@@@@@@@@@@@@+@@+@+@+ ", " .++@+@+@@@#&*.=-;>;;;=,=%@@@+@@@+@@@@@@@+@@++++", " +@+@+@@@@@$')%=;!~{>;;-==@@@@@@@@@@@@@@@@@+@+@+", " ++@+@@+@@@#]*%=={>>>;-=;=@@@@@@@@@@@@@@@@+@@+@+", " +@+@+@@@@@^&/%%;>>;;-=-;=@(@(@(@(@(@@@@@@@@+@++", " ++@+@@@@@@^&/%%=>>;-;;>;=@@(@(@(@(@(@@@@@@@+@++", " +@+@@@@@(@#&),%=_>;=->>;=(((@(@(@(@(@(@@@@@@+@+", " ++@+@@@@@(@&*%%=:;--;;>;=@((((((((@(@(@@@@+@@++", " ++@+@@@@(@@#].%=-;-;<-,-=(((@(@(@((((@(@@@@+@++", " +@+@@@@@@@(###%=;--;-;-=%@%%+%[[%%%@@(@@@@@@+@+", " +@+@+@@@(@(@(@%}|;-;1==2}[3[3[3[3[33%@(@@@@+@++", " ++@+@@(42%%%[[3%==}}}3333535678}5855}(@@@@@@+@+", " +@+@@+(463335555555859090909080000ab7@(@@@+@@++", " ++@+@@(230cba0000de0f00000g070ddbhbi}(@@@@@@+@+", " ++@+@@@(50gggggggjkllj000jk0c0ddcddc%@(@@@@+@++", " +@+@@@@(30ggglmmmjmnllj00go0bdidc0h82@@@@@@@+@+", " ++@+@@@(30ggpmmmmgmlllgaqdddcdab7i0c@((@@@@+@++", " ++@+@@@(}cjlmmmmljllkg00dd0dbdiabcc3(@@@@@@@+@+", " ++@+@@@@}50rmmlllglgoq0ddcid5cbb3%2@(@(@@@@+@++", " +@+@@@@@[5jnrlllj0gqddd0d0b53}%((((((@@@@@@@+@+", " +@+@+@@@%5jllllgb0ddddbc5}}2(((((((@(@(@@@@+@++", " ++@+@@@@@30klggdd0d0b9}2((4(4(4((((((@(@@@@@+@+", " +@+@@@@@(370ggqd057}2((4(4((4(((((((@(@@@@@+@++", " ++@+@@+@@}5bcb772((4(4((4(4((4((((((@(@@@@@@+@+", " ++@+..st@@}5}(uu(((vvwtsw(((4(((((@(@(@@@+++@++", " +@+@xxyxv(@zAxyxsxyysxxBs(4(((wCC(tv(@@CyxC.+@+", " ++++DyEyC@vyFyyxyyyBsyyyyC(4(CyyssyCGt@syyyG+++", " +@@+HyyyyG.IyyyyyyyysCyyyyv(GyyyxyysyC+CyyyG+@+", " +++@+syJysvJsysCKxKsGvKyyKs@syyKsyKxKv@Gyyyt+++", " +@@+vKssKKGvsKG(vKyv@GKssKKvKKGtGKKKsG+GKKs@+@+", " ++++GKKKKKs@sKL@(sKL@LKsKKKsKs((vKKKKKLvKKG+@++", " +@@+GKKsKKMvLKs((sKL@sKKKKKMNKLvvKKGsKs@Gsv+@++", " ++++LKOPONL@LKL(@LQL(LNOPLNLLQKL@LKwvLw+vLw@+@+", " +@+@vLORGOv@vwOv@vLL@wLOvLL@vLOL@Gw@@(@+LOO.+++", " +@+@+@vv2v@@@@v@(@@v(@@wvwv@@vww@(@@@@@@vLL.+@+", " ++@+@++@@@@@(@@@@@@@@@@@@@@@(@@@@@@(@@@@@@@@+++", " +@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+@+@+", " .++@+@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+@+++", " ++@+@@+@+@@+@@@@@@@@@@@@@@@+@@+@@@@@+@@++@+@+ ", " +++@+@+@@+@@+@+@+@+@+@+@+@+@@+@@+@+@@+@+@+@++ ", " ++@++@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+++ ", " +++@++@+@+@+@+@+@++@+@+@+@+@++@++@++@++++ ", " .++++++++++++++++++++++++++++++++++++ "}; crack-attack-1.1.14/data/logo.tga0000644000175000001440000100007410132356545016236 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2ZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZ ZYZZYZZYZZYZ#ZYZ+ZYZ,ZYZ,ZYZ,ZYZ,ZYZ,ZYZ-WVW9HHHBZYZ4ZYZ,ZYZ,ZYZ+ZYZ&ZYZZYZZYZZYZZYZ ZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZZYZYXYZYZZYZZYZZYZZYZZYZZYZZYZZYZ*ZYZ5ZYZ7ZYZ@@=@[A8AlE8DnB8By""  ,,-,"""">6>}>8>n>8>m<8TUTETSTEUSUEVSVEWSWN?8?j;-;~D-DJ-J220044;:98765396987765554422110/..,,,+))((((%%$$$$"!! ! !!9(7;-;;-::-99-9zKDK_VSVIVSVEUSUEUSUCWUW4ZYZ!ZYZZYZZYZYXYYXY YXY YXYYXYYXYZYZZYZZYZZYZZYZZYZ ZYZ ZYZ ZYZZYZZYZ&ZYZ'ZYZ0MOMGJSJUJXJWJVJb,?,&9&)8)*5* "."# #''30::FEPOWVYXSRPOXVZXWVVTUSRQQOQNNMLLLJIHHHHHEEDCECBBAA??>>>><<;;:::88876654444330000//---,****(('&&&- -;";;";8"88!8;%;OGOcOHOWQGPOVRV+YXYYXYZYZZYZ ZYZZYZ$ZYZ0ZYZ2ZYZ9GJGR@O@d@[@f@b@p&R&[lqe h 9!!**1155>=ECIIRQW W^ ]f fl jm li gi in mj jj hg fddba``^]ZZYXWVTTRRQQNMKKKJJHHEEEDDCCBA@@@@@@<<<<<<;;:99988777744443331100////..-,,++++((''''('A'@YXY&YXYZYZZYZJKJC7?7v!4!9GS[ i {  + (1 1; ;D CI IQQXW^]ddllspyy}|zzywwvtsqq pn mk ji hf fe cb `` `^ \[YYXVVSSPPPPMLJJHHGGCCBBBB>><<<<;;::888888664444442111000/00--,,,,++((,,OAO_YXYYXYZYZZYZ. % :N`s ] # #- -6 6A?KIUU\\hhnnxx~}{zzxwwvrrppnnkkiiggeeb b_ _] ][ [Y YW UU SRQONMMKJIHFDDBA@?=<<;;::666655553311111100------77XVX9YXYYXYZYZZYZZYZIIIX  , AVk !!""""!! )  ''1 19 9C CMMVV__jhvr~{ #&)*('&&$#" ~}zzzxvvssroomlliihfeebba _^ \\ \Y XW UT TQQNNLLJJHHDDCC@@>=<<;;7755552200@&@YWY/YXYZYZZYZ ZYZ-GIG\-8- & ; Ody$$++--%}%,((1188@?GGOOVV__i ip py y %,5DS^^]ZXVTQOLJGEB@>;86420.-*)'%$!~||yyvvtsr on lk jh gf ecb`_[[YYQQ885&5~YXYYXYZYZZYZ. 5 C T e u ##//'j'  **//55>>EEJJRR[X`]ffnlsqz z $7,3FYghfdb_][YVTROMLIGECA@=;97520.,)'%#!~}{zyw vt tq onjfd@@DD..XVXIYXY YXYZYZZYZ%*<* 4 D U f v !!++$W$  ))..55>>CBIIRRYY^^eeomtrzz$9E)3FXeda_][YVURPNLJGFDA@=<97420.,)(%#! ~}{zv vt tqqnmkiQQDDRR@@%%UTU.YXYZYZZYZ0 + 4 D U f v  ))  **..55<<97430.,*(%$" ~}{x wu trqpnmjSRFETR``he  DCDSYXY ZYZZYZ523 C T e v ))  ((,,55>>AAIIRRYV]\eemmqqz z{ {xu!7Q`C&4EY_\ZXVSROMKHGDC@>;97530/-*)'$"!}}y xw utsppll^^FFWTbaqpmm  DCD]YXY ZYZZYZ58 4 C T e t &&!!''--55<%4EW]XVUSPNLIGDC@?<:7531/.+)'%#"}}yyx wu trpllddKKWWccsrzynn  ECE]YXY ZYZZYZ48 4 C S d u  &&!!'',,55<;@@IIRRVV]]felkr qxvlltt  3M^\Y8$4EVZUSPNKIGECA?<:86520.,*(&#" ~}{zy xw usrnmfdKKVVccss~ || znm  DCD]YXY ZYZZYZ'B < B T d t  $$!!##!!&&,,55;;AAIIROWT]]eekit sp pkktt~ ~2L^[ZT3#4EVUPNLJGFCA><::6521.-+)&$" ~|{y yw vs ronlkVUXVectr  { ynm  CCC]YXY ZYZZYZ3Q3 @ A Q c s  ##%6%++""$$,,55::??IIQQUU]]edk ksqj ijitr~ }0J]ZXVQ.#2ESQLIGECA?=;96531/-*)&$" ~|z yw vs sppmlYXXXfftt z wljCCC]YXY ZYZ1N1~ Q B R c s  !!(f(..##&&,,33:9??IIOOTS\\dco krqa`hhtr} }.H[YVTQK+"2DQMHEDA@=;98541/-+(&$" ~}| zw vs sppom\[WWggt t ~ ~x xmkCCC]YXY ZYZ1J1~ X A Q b r   'e'11((##,,5599??IIPNTS\\eel lh f^\iero} },FYWTROLF&"2DPJEB@><:86410-+('$" ||y wu trqppeeYYf ft t~ ~w ujhCCC]YXY ZYZ1G1~ ^ F P b r  !!"d"44,,$$,,43:8??HHNNSS\\e dom[Z\\dbpl| |+EXVTQOLJB"2DMFA?<;8642/-+)'$# ||y yw utsqpeeXWh fv s~ ~v ujgCCC]YXY ZYZ1A1v d N P a r  c55::$$,,4376@@IIMMTT]]f fd bTQYYbbnl| z*DVUTPNLIF=!2CIB=;87420.+)'%#"~|{ yx wuusqmk]]j jv u v vgfCCC]YXY ZYZ KPKZ e V P a q  m b33>>$$,,3388@@IGNKTT] ]f fY YPPYYbblly x(ATTQOLJGEC8!2BE?97430.+*'&$"}| {x xuusrnm``i iv v! vvJJCCC]YXY ZYZUWUF ` m O a p  i ~ b22BB00,,2266@@IHMMTT] ]eeLLPPYYbbllv v&?SRPMKHFCB?5!1AB<520.,*)&$" ~ {z xvvsspm__i hxv"# ~vv>>CCC]YXY ZYZUWUC Z r N _ o ~ r h { ..FF66++1066??FFKKSS] ]Z ZFFPPYYbbkkv v$?RROMJGEBA><0 0@?82.-*)&%#!~ }z zw vtrroiik iyy"'# |vv>>CCC]YXY ZYZUVUC S U _ p { _ e y "",,HHGG,,1166??GFLJSS\ \NNFFPPYYbbkku u#=OPMLIFDA@=;8*1?;4.*)'%#!~ ~{ {x vvsspihk jzy#*'"} }uu==CCC]YXY ZYZUVUC K X _ n r S c w !!**JJKK++0066??DDLJS SY YCCFCPOYVbakiu u~";MNLIGDC@><974& 1=70*(%#!} }{ {x xvusqnmi izz#,+'"| {uu;;CCC]YXY ZYZUUU9 B i ^ l a M a u ((JJSS99//66??EEJJS SMM::EDMLXU_^ifut~!9LMKIFDA?=:7530! 1:3-%#!}| |y xxvusonjjzz#-0+'"{ zus==CCC]YXY ZYZZYZ$)S) ] h P K ^ s %%FFVV==//66?>EDMMS S><87B>LKUR]]eeur8KLIGEBA><97520.071)$} }| zxxuuqpki{{$.40,'"z xt t::CCC]YXY ZYZZYZ(M( [ b > I ] p !!EE\\OO..66?>ECKJQQ..66A>IHTQ\Zdcqp~~7JKHFDB?=;8642/-)/3-& ~} |y xttqqoo{{#.750,'"y xrq;:CCCZYXY ZYZ(H( f T 2 F Y n   BB[[TT--66>>FFKK??,,55>>HHQQZZccnn||5HIGEB@>;97420-+)& .0)" ~ }z ywutrnmyy!-9850,'"w wqq:8LLLGYXYZYZ(C( C / D X k   $ ==^^^^8866??CCJJ//,,55>>HHQQZZccmm{ {3FIFDA?=:7530.+*&%",-%~ ~z ywvtsqpy y"-9<930*'"w wpm87YXY1YXYZYZ(=({ C . A T i |  B <<__gg??66==AA>>##++44==GGQQZZccmmy x1DHECA><97530.*)&$",)# ~ }z zwwvurrz x"-8@=84.+&"v von77YXY+YXYZYZ4B4x r  ! + ? S f { A::\\jjRR66==AA00!!++44==GGQQZZccmmx v0BFDA?<:8641/,*(%# )% ~{ yyxwvtqxw"-8BA=83/*&!v vnm66YXY+YXYZYZ LSL\ j  ) ) < P d x A66YYp pUU6688@@!!!!++44==HFQPZWcamkw v.BEBA=;8642/-+(&$"} |'! yywwttvv!-8CEB<84/+%"w wmm75YXY+YXYZYZLRLT a  N ' : M b v ?33WWp piiGG8844 ))33::FFNMXV`_miw w,@DA?=:8631/,*'&"!~| {%}}ttww!-9DIEA=84/*'!~}w wmm66YXY+YXYZYZLPLT X  | \) 7 L ` s @11VVt too``BB##''0099C@MLVT]]hgv v+>C@><:7530.+)&%" yy| z" {y!-8DLJE@<93/+&"|w wmm55YXY+YXYZYZLOLS O  s i 3 5 I ] q >00RRr rt tddLL%%//66CAJIUR][get t*>##,,55??IIRR[[ddo n{z$7=<97420-+(&$" ~~yyx vq omliggf} z&2>IVWSNIE@<73.)%!yxs rll44YXY+YXYZYZZYZ%C e S d o n @ T g } ##GGffddUUDD##--66??IIRR[[ddn nyy#6<:7530.+*'%# }|y yt tookkfdnn(3@LURMIE@<73.)% xxr rji44YXY+YXYZYZZYZ%= Y M ^ m r L Q f y !!CCaa\\KKA@44##,,66>>IIRP[Ydbn nxx!5;9752/.*)&$!{{y ws pomjhkk (4@LRMIE@<73.*% xxo nki22YXY+YXYZYZZYZ$7 O H Zi t \ O c x BB__VVFFBA?>"!*)33;;FFOOXXbannxx~} 3:8642.-)(%# ~{zx wr pnmnl!")4@KMID@<73.*% xxo ohg33YXY+YXYZYZZYZ->- B C U e s r S a u ??XXNN@@BACB,+)(11;;DCNMWU__k kxx}{28742/-+(&$"}|z xt tppll "$!)4@JHD?;73.*% xxn nhh00YXY+YXYZYZBNBi 8 > O _ p x \ _ s #==PPEE;;A@CB;:%%1177CCKJUS^]kkv vzy/6530.+*&%"{ {x vsqqo "%&$(4@GD?;62.)% wwn nee11YXY+YXYZYZ BKBc , : J [ l xq ] p $88MM==96@?DCEC%$$$--77@@JJSS\\hhu uyy~.652/-*)&$!~~{ zv vsr  #%%$"(4?C?:61-)% wwn nee1/YXY+YXYZYZ BHBc" 5 E V f v |b n #66FF5566??EAED44$$--77@@JJSS\\ggs sx x|{-430.,)(%# } |z ws s| {!$%$## )4>?;62-)% }}wvn ndd//YXY+YXYZYZ BFBc  0 @ Q b s ~ p l #44>>1155;9B@EEFD$$$$..77@@JJSS\\ffq qx v{ z+22/-+(&#!} |x w{ {!#%###"!)3=:62-)# ~{wwn nee//YXY+YXYZYZ BCB\  , ; L \ n { | j } "2266..0/88A@GEGF99$$..77@@JJSS]]ffo ov vz z)01.,*'&" ~ ~| z{ {!#$$""!! ~})4962-(%|{uun nee..YXY+YXYZYZSSS> ' 6 G X i x t { "----(&..87?>EBGGDC((,,77??IIRR[[eeo os sy x(00-+)&%!~ }| y #$#"! yxyx)462-)$ {{ttn nee00YXY+YXYZYZZYZ383" 2 C R e t } y  " **&&$$..44<:BBIGJH44,+44< M ` o  { p$$  ##**1198A@GEJJA?**33<;DDMMML@@88BBKKUU^^ggm kr q{ y')%#  "!!i iQO^]o!oyyp pffaaYXY*YXYYXYYXYYXYYXYYXYYXY YXY YXYYXYYXY"YXY%YXY&YXY/MLMGLKLSLKLULLMb))*())()+'(* #$'()+@?AlLKNNXWX3YXY#YXYYXY YXYYXYYXYZYZZYZVVV@*3* 1 l k  ''..52;;DCLJMMLK88BBKKUU^^ffjhp ox v%(%# "!!~~a aLKYYkk||yyp pf f^^YXY YXYYXYYXYYXYYXYYXYYXYYXYYXYYXYYXYYXY*YXY/YXY2TSTCBBC\BBBcABBf778|  "#              &(88>zAAG[XWX=YXY,YXYYXYYXYYXYYXYYXYZYZZYZ ZYZ"PQPS4 P i  ##**11:9@@JHONOM????JJSS^\eehhonw v#&$"! w wW UFDVThgxwwwppff``999uYXYYXYYXYYXYYXYYXY YXYYXYYXYYXY)YXY7YXY:YXY;EENMOOJJ==GGQQ\[ccggllu t!$"!~~|{z zt tLK@@RPbbtro oe e\\:8:YXY0VUV4QPQHQPQLQPQQ??@j./0..0-.1                        "  " " " " " " $ # $ # % & & & & ' & ( (&';01BzQPUYQPUEXWY-YXYYXYYXYYXYYXYZYZZYZZYZZYZZYZZYZZYZ ZYZ ZYZZYZZYZZYZZYZ)ZYZ*ZYZ+ZYZ3LJJKKFFZMFF[OFF]RFFj7%$8$$1! G k p  '',,52;;EDMJOOON@@FFPPYYaagejis q #! ~ ~{ {{ zy xu ul lB@< = > = @ ? @ ? @ @ A @ A CCG22OBBScVUYFWVY0YXYYXYZYZWVWLKLK>= B 4 0 1 4 6 8 : = @ j ~ m b [ ] i k m l l i g b ` \ [ X T ?  '',+44< > = > ? > @ @ A @ A A B A B A B D C D F D E E F F F F G G H G H H J I J J J J J I IJKJVOYXYYXYZYZCAA_                ! " # # & ' ) A 3    # 1 4 = W Y _ p q o o m m j e c +!!++32:9C@HHQOTSSRMMVV^]``fejjz x~~ {{ {y xx wt ts rr ponmkkjjhfffeNM++// 2 : < < = > = > > > > ? ? ? A @ A A B A B B C B C C D D E E F F E F F F G G I H I H J J K J K K K K L M L M L N O N O O P O O O O N N N K J J H H F LXWY7YXYYXYZYZZYZZYZ)/**! & % & ( ' + ) + , , - / / 0 1 1 3 4 5 7 9 5 , + + , - . . 0 1 2 1 3 6 > > O \ \ i t t s ^))0/75>>HFOMUSTTNNVVZZ``dbjj~v v~ {{ {y xx wu us rqponmjjjjgfffccb``C@. B C D C E F F E F F F G G G H G H H J I J J K K K K L L L K M N M O O O O O O O Q O Q Q R R R R S S S S S U S T S U S Q R P O N N L L K J I H F E E B()JYXY,YXYZXZYYYVUV5?=={ -8 9 : : ; < = > > @ @ @ B B D D E G H G > < > > ? @ A A C D D E F H H H J J J L M O O W c W +(44< I ^vwp p r s t t u v x y t q r r t u u v v x x x s t t v F B B C                    !!CBSSYVXWWWYX`_cbu ssq| y|z` _` ^] \<<443300''&&""    @ a ` a a b a b c c b c d d e e e f e f f g f g g i h i i i i h h g g d d c a a ` _ ^ ] [ [ [ X W W W T T T R R R T T TV VZ [ ]a d g j m q s u y } ~ GGfOYXYYXY!7#"7 K P V i n n p b 8 9 9 +                " # $ & ' ( ) - - - / "77SRZZZYZZ^^bboorry x{{b b` `^ ^??::774422210.-****&&$" !!   BAA X g g h g h i j i j j k k k k k m l m o m n n o o n n l k k j i g g f f d c c ` ` _ _ \ \ \ Z Z Y Z Z ZZ [\^^bcgilnsuxz~           EFiTYXY ZYZ:#"3 R _ d t   l h h E * + , &               ! ! $ $ & ( * * * . . . 0 2 3 3 6 7 8 : : < :"!!@@OM^]_^aannonx xm mccb`YYGGEDCA@@<<;988553300--))''$$  - * ' G T R X l l n m n o n o o q o q p q r r r s s t t t t t r r r p o o o m m k i i h f e d b c a a a ` ` ` ` `abccefikmqtvx|    TT]>YXYZXZJAAp3 S k r !!|              ! # # ' ' ' ) + , , / / / 1 3 4 4 7 8 9 ; ; > @ @ B B D D F H H J A$#;:KI]Yfdjimj`_a___ZZOOJJHGFECC@@<<97654411,,((%%##!!; 9 7 Z c e h s r s s t t t t t u u v v w v x x x x x x x x x x w v w u u s r r q o n n j j j h f h h e e g igiiiiklmpsvwy|   YXY.YXYZXZ LEE^2 Q p   $#      ! ! $ $ % ( ) ) + - - - 0 1 2 5 5 7 7 8 ; ; = = ? A A C D F F H J J M N O P P S T V V W Z7 %11DDLLKKIIFFCC??<<997633//--**'&##  #!,K I H k v v w x w y y y y y z y { y { | | } } } } } } ~ } ~ | } } z z z z w v v v t r r p o o o m m o m ooooqossttvxz}   YXY+YXYYXY NEF]4 O m  $!''"! <  !* + , - / / 1 3 3 6 6 8 : : < < ? ? @ B C D E H H I L L N O P S S T U X X X \ \ \ ] ` ` ` d d e [:--11+.3931.,**''%%! $20-T \ Z f | | } } } } ~ } ~ ~ ~ ~ ~ ~ | | z y y x v w v t u t u u uuvxxyyyz{~}  YXY*YXYZYZ UEF\6 O k # ***)  )37 7 9 ; ; = = @ A A E E E H I J J M M P P Q T T U V Y Y Y ] ] ^ ` a b b e f g h i k l n o q r r q [T k e2A?@ g n l t } } } { { { { {{|{~}~~! ""#"$"$!$"$!#!!     &'~YXYYXYZXZXGGP5 L k  " )*!"  $.9@ C G G I I K M M O O S S S U W W W [ [ [ ^ _ ` a c d e g h i l l l o p p q u u u x y z { } ~       "#"$%&&'((()()()&'&'$'$%"$"$!#!     ' ;HR[] _ ` a b c f f g h j k k p p p r t u u x y y | |       " "!# "!" "!""""" !!!"!""$"$%&%'&(*+*,.../01010213220202/1./-.,-+,*+**')&(%'%&"%"$!# "! !$'$)%).74>4;07)4)0)-$-') % $) ) )$)  ;ADFKONVJP>@<@"&474707)0)0)-$-'-$- !$) ) )$)$) ;>?@A?@>@?@?@=?<=;<<<9;89EFMO5855442322010000./,-,-,,)*(*()&'$%$%#$"$!"!  %'59NSV\NVNVJQGNBJBG>D;D:A'-'-$)$)$)')$)$)$)  ' ' ' ' ' ' ' YXY9YXYYXYI<=u@ b    1 > C I N\l!#z#$#%            "!#"$"$#%%&%&&(()())))*)*)**+)))))))*)+*++,-..//1024445789::;<==>?@AADDCDEEFFFEBDCDCC@A@A>@>>=><<:;::9:78BCsvnq>@342301/1.0..-.+,*,*+(*'('(&'#%$%"$ #!!&):@MUTYNVNTJQGNBGBG>D4>4>/6  ')$-$)'-$)')$)') )  ( ' ' ' ' ' ' '#YXY5YXYZYZK<;l? ` |    0 B K P Uaq""%&'(&&            ! "!#"$$%$&$&&'&(())**++,,-,-+-+-+,--+,+,-.-.///012233566789:;<=>>?AAABCDGFGGJJIJIJKJIJIIHHGGEFEECDBCBB?@>@>@>?;=;<:;8:8968:;acZ[67/0/0.0..,-+,*+(*')&(&'$&#$"$"$!#! &(HOTYTVJTJQGNGN>D>D>B7>4;0704  !%$-$)'-$)'-$)'-$- ! $)$) ) ) ) )$)$)YXY5YXYZXZi>=lE ] w    0 A R W ]ct$%)))*$&           !!!#"$#%%&&'&('(())**+,-,--.-.-.././/0-/./././0102454567899::<=>?AABCCEEEFIIJJMMMNMNPPOOOONNMNLLKKKJHIIHGGGGCEEECDAB@A?@>?=>=>;<;;:;8:887867OQx{>?./-...+,*+*+()()&(&&$%#$!#!"!" 03QXTYNVJTJNGJBG>D;B;>4;07-4-4)0 !)')$-$)'-$))-$-'- !%$)$)$) ) )$)$)$)YXY*YXYZYZj==hE [ sx  Z , > Q ^ c hv"#(),-)+#$        " "!##%%&&''(')())**++,,--..//0.0011111/00212033345577889:;;<=??@ABBDFFGGGHKKLLNOPPRSSSTSTUTTRSRSRSPQOPPONNMMLLJJJJHIGGFFEFCDCCCCAB@A?@>?=>==;<9:9:78675656IJ^_12--*+)*)*'(%'%'%&"%"$ #"! *0HLQVJQDNDNDJ;D;D7B4>4;04)0'0'-'-  )-$-')'-$))-$))-$- $)$)$)$) ) )$)$)" 13nYXYYXYZYZ dIISB [ on  n * = P a i py!()././(* # !!!#!#"$$&&'&'()(*)**+,,,--..///11122323232313333445667899;<;<==?@@BDDDEHHHHJKLLNNOPRRTUUUWXWYXXYYYYYYXYVWVWUURSRRQRPPNNNNNMKKKKJJIIIHGGEFEEDDABAB@A??=?=><=:<;<9:8:79775645@Astw{>@*+)*()'(%&$&$%!# " "! #&IPNTJQDJDJDG7B;B7>4;4;04)0)0'-'-'-  $-')$-$)'-$))-$-'- $)$)$)$) ) )$)$) 13n~YXYZYZZYZ:=V gg j ( 9 M ^ q w|%&./1300(* # ! " ""$#$#%%''('()*)+*++,---..//00012232334343456455767998:;;>>>?AABBBDFFHHJJKKMMOOQPQRTUWWWYYZZ[Z\^_^_]^]^]^Z\ZZYZXYVWVWUVSTSSQRQQQQPPMMMMMLJJJJIIGHEFEFDECDBC@BAA@A>?<=<=;<8:8:89674645453479]^~\\()((%'%&#%#%!#!!  "FMNQJNDJBGBG7B4;4;07)0'-'-'-'-)0)0)0 ')$)$)'-$)'-$)')$) & ' ' ' ' ' ' ' ' 13n~YXYYXYZXZ6ZS \ a } i % 8 J ^ p }  ")+02340/')!$#$$%$&&'')()***,+,,-.../.0011123343545576778898989:;;<<>?@@ABCDDEEHHJJKLNNOOPQRRTUUVXYYZ\]]^]_`aabacbcbcab`a__^_]^\][\[\XYXYWYVWUVUUSTRRQROPOONNMMKLKLJKJIHIGHFFEEDDACAA@A?@>?<><<<<;<8:8989674545442322HI||~sv68$%$%"$!#!"   4;GJDJBG;D;B7B4;4;07-0)0'-'-'-'-)0)0$* $)$)$)$)$)$)')$)$)  ' ' ' ' ' ' ' ' 13ntYXYZXZYXY5lN Q Z w  " 6 I \ o   &'0/7767..+,,-,.///0/00222344556677878799:::9;;<=>=@AABCCDGFGHIILKMNOPRRRSTTVVWYZZ[\]___ababdeeffhghghegefdececd`bab`a_`]^]^\]Z[YZXYWXUWUVTUTUSTRQQQOPONNNMLKKJJJJHHHHFGEECECDBCAA?A?@>>=>;<:;::89787877353534120278{{y~y|y|vyLS&("$"" &,FKBGBG;B4>4;-7-4)0)0)0)0'-'-'-'-)0)0 & $)')$-$)'-$)'-$)!" % ' ' ' ' ' ' ' ' ~ON_WYXY ZYZZXZ4nG E X u  2 E Z k  %%*,24893545566778899::;:<;==??@?@?BCDEEGHIIKKKLNNPPQRTTTUVXXYZ[\]___aabcddffghiiklllmjklllljkjjhihhfgffdebcbb`a``^`_`\]\][\Z[ZZXYWXVWVVSTSTSSPPOPOPOOLMLLKKJJIIGHGGEFDDBCBCBB?@>@>?=>;=;<:;8:79686646342323020112WX~|y~vyuyrvlrbe45 "! :>>D>D;B4;4;07-4)0)0'-'-'-)0)0)0)0'-'-" %'-$-$)'-$)'-$)'-" ) )$)$)$) ) ) )(  UT[EYXYZYZZXZ*I < Q n   1 D X j } "(*129:===??@ABABDDEFHHIJKLMMMNPPRRSUVWXYXZ\\\]]_aaacdefgghijkkkmnoppqqqqsqqqppoonnlmkljkijhhghgheededdbdbb`a``^_]^\][\[[XZXXWXWXTVXY]^XYRRPPOONNNMKKKKKJHIGGGGGGCECDBCABAA?@>?=><=:;:;:;897878664544230201/0./?Bvv|~y|yyuvrulrjodhCH"#*+>D;B;>07-407-4)0)0)0'-'-'-)0)0)0)0'-'- )-$-')$-$)'-$))-$-! )$)$)$)$)$) ) )   |UT[CYXYZXZZYZ54y 3 N k   / A V g z  ''./77BCMMOOPQQRTTUVWYZ[[\]^^__abcdeeghiijkllloopqssttuvwvuvvvvvstsssspqopopoolmlljljkijhhfgefeebdbcbc`a^`__]^[]\]Z[Z[^`bbefikmnppuuxzppnnyyyz}|ggLLLKPPKKEFEFCCCCBCABA@?@=>=>==:;9:9:786756563423120101/0-.34ll~~~v|uyuyrvlrlogodldjRT+.:=7>4>0;04-4-0)0)0)0)0'-'-'-)0)0)0)0'-'- $))-$-')'-$))-$))-') )$)$)$)$)$) ) )  | {UT[CYXYZXZ54~ . I e    - ? S e x #%*-67@ASS]_aaabdeffgijjmmmmnnqqqruuvvyyzyzzzzzzzzyyxxwxwwuvuustssrrqqoononnjljkjkhifhfhfgdfeebcbcab_`^_^_]]\]ghoprsuwz{\_UUNPCDAB?A>?=>=>;<;<::9:8978565655231212/0./-/-.-/Y[}||~y|uvrvrugoglglag\d\aY^49%)7>4;-4-4)4-0-4)0)0)0)0'-'-'-)0)0)0)0'-'- )-$-')$-$)'-$))-$)&, ) )$)$)$)$)$) ) ~ | { zUU[:YXYZXZ~43vH ) F ` |  R + = Q b w #(+35?@PQcdqqsstuwwzyz{||}~~~~}}|}||{zzzxyxwwwvvttsrrrpqqqnonnmnmnjljjijhifgefefcdccghmnii_`]^]^]]Y[fgkmVWGH>><=<=;<9:89786756453424230101/0..-.,-*+BDstv|y|vyruouorgldjdjag\aY`Y\TYAC!07-4'0-4)0-0-4)0'-'-'-'-)0)0)0'-'-'-'-)0'- $)')$)$)'-$)'-$)')$) ' ' ' ' ' ' ' ' | z z()nYXY$YXYZYZ eKKZB % A ] y Q ( : N ` s !(+13<=NObcuu~~~}}{{|{yyyywxxwuvuuttsrrrpqponomnlllkjkhihihhstyz]][\[\Y[YYxx^`IJ:<;<998978674545341222/0/0./..+-+,*+01hiv|vvrvoulollglagdgad\aV`Y\QYNTMS$'04'0-4'0-0)4)0)0'-'-'-'-)0)0)0'-'-'-'-)0'- ')$)$)$)$)$)$)')$)$) ' ' ' ' ' ' ' } z z y()mYXYYXYZYZ\UUF` # @ V r O ' 8 L ^ q  !(*13;>cnYXYZYZZYZZ)(P 0 K g  1 F Y k ~ ''1068DEXXkk}~~~||||{{{zzyyxwwvvuustssrrppoooossVWVVSTSS`aST1211/0//-.,-+,)*)*()&'%&%&BDlrlogldlag`d\aY`V\TVTVJTGNDNDJ>G>D;B7>4;,1    "'-4-0-4)4-4)4)0'-'-)0)0)0)0'-'-'-)0)0)0'-$- $))-$-')'-$))-$)$)$) ) )$)$)$)$) w w u u tKK^XYXY ZYZW**` 5 E b |   / D U h z$&./57ABUVii||~~~{|{{{{yywwwwwwuuttssrrrrppnonnmm|}fgSTRRQRbcz{56-.-.-.*,*+)*()()&'$&$%+,_cgldj`g\d\aY`T\T\QVNTJTGNDJBJ>D7>7>0;4707*.    %0-0-4)0-4)0-4)0'-'-)0)0)0)0'-'-'-)0)0)0)-') '-$-')$-$)'-$)$)$) ) ) )$)$)$)$)!&  u t t sLK^TYXYZYZ WKKb] 6 C _ w    , A T f y $%-.46@@RSefyy|}{{zzzzyywwvvvustssrrpqnpnomnpqnnQQQPOPcbLO,-,,)*)*()&(&'$&#%"$'(INdjdj`dY`Y`Y\NVTVNTNQDNGJBGBG>D4;4;07-4-4-4-4   -0-4)0-4'0-4'0)0)0)0'-'-'-'-)0)0)0'-'-'-')$( %$)')$)$)$-$)'- ' ' ' ' ' ' ' ' ' ' t t q pKK]RYXYZYZTKKSS M > Z t  ) * ? Q c w $+-35<=OOcdvvzzxyyywxwvuuuustsrqqpqoonommllzyrsQQMNMMeede+,)+))'(&(%&$%#$"#""15addg`dV`V`V\QVNVNTGNBGBG>D;D;>4;0707-4-4-404)0%*  )4)0-4'0-4'0-0)0)0)0'-'-'-'-)0)0)0'-'-$-$)!%  %$)$)$)$)$)$) ) ' ' ' ' ' ' ' ' ' '& q pmPO\CYXYZYZUPQ@Hb = V m 6 ) < N a t  #),35;G>G>D7>4>0704-4-4-4-4-4-0-4&-  -0-4)0-4'0-4'-)0)0)0'-'-'-'-)0)0)0'-'-'-$) ! $)'-$)')$-$)'- ' ' ' ' ' ' ' ' ' ' ' ' x n iYXY-YXYZYZYXY+B a C P k 5 ' ; L ` q   #*,2479IJ_`qrxxuvuuttssrrpqppnonnklklopooPPLKJJedyz8<&'$&#$!#!#!#  ?C\aV`V\TYNVJTGQGNBJ>D;B>B7B4;07070707-7-7-7-4)4)0-4   )4-0-4)0-4)0)0'-'-'-)0)0)0)0'-'-'-)0" '-$)'-$-')'-$)$)$)$) ) ) ) )$)$)$) ) ) ' ngYXY&YXYZYZYXY"7X N M f 4 # 7 J ] q   !*+2267HH\]ppuuutttssrqpqopnonnkljkrrooQPIIGGfftyEG$&$%!# " ! %(SXT\TYTYNTNQJQGJBGBD;B7>7>07070707070707070704-4-4)0&,   -4-4-0-4)4-0)0'-'-'-)0)0)0)0'-'-'- $))-$-')$-$)$-$)$)$)$) ) )$)$)$)$)$) )# n lfYXY%YXYYXYC::yH _ H b  J " 6 H [ n    !**2246EEZ[mmssssqrppnooolmllkljkttjjMMGGFF`a|y|tytuMQ"#!# " ! >@TYQVQVJQGNDNDJ>G;B7B4>4;07070707070707070704-4-4-4-0,3 #-4-4-0-4)0)0)0'-'-'-)0)0)0)0'-'-  )-$))-$-')'-$)$)$)$)$) ) )$)$)$)$)$) ) l jeYXY$YXYYXY GAAa7 c L _ z t  3 D Y k   ((1144CCWXklqrqrppnonnlmjkjkhjmoXYIIEFEE[[|y|tytwkqJM "! #TYQVNTJQGJDJBG;B7>7>070707-7-7-707070707-7-7-7-4)4-0-4)0$ #)4-0-4)0)0)0)0'-'-'-)0)0)0)0'-'-  $)'-$-')$-$)$)$)$)$) ) ) )$)$)$)$)$)! q j i./bYXYYXYYXYPOOC.] U [ u r  1 D V i |  ((/012@@UUghnonnmnkmkljjijhiijPPDECCED]_|y|tytwqwmtmqfiHL @EJQJQDNDJBGBG;B4;4;070404-4-4-4-4-40404-4-4-4-4)0-0-4)0-4#*-0-4)0-4'-'-'-)0)0)0'-'-'-'-)0)0  '-$)')$)$) ' ' ' '& ' ' ' ' ' ' ' '  i i hBA]hYXYYXYYXY<--O b U p  o  / A T h x   $&./01=>SRefmmmmjkkkijhifhggprPPBCAAJKmn|y|twtwqtjnmngm`fAH*-IPGNBGBG>D;B;>4;4;-7040404-4-4-4-4-40404-4-4-4'0-0)4)0-4'0,3)4)0-4'-'-'-'-)0)0)0'-'-'-'-)0)0 $)$)$)$)$) ' ' ' & ' ' ' ' ' ' ' i i h gAA]cYXY YXY USTL? c V m  ~  , ? R c w   #%,./0;>CGN>G>D>D4>4>070;07-4040404-4,3-4-4-40404-4-4'0-4)0-0-4)0-4'/ ,/-4)0'0'-'-'-)0)0)0'-'-'-'-)0)0 !%'-$)') ' ' ' '$  ' ' ' ' ' j i h g dBA]bYXY YXYYXY'?` W g    * = P b u   !%+-./89MM_`hihihighefdffgz|PR>?>?FFcd|y|wytwntnqnqgndjdjbgYbW]),'-DJ>D>B;B4>4;074;070;-7070707")-7-707070707-7-4)0-4)4-0-4)0-4 (0-0-4)0)0)0)0'-'-'-)0)0)0)0'-$-#)  ~&,$)'- ) ) )$)$)$) { ) ) )$)#( y h h g d dCC]UYXY YXYYXYODEaS e e ~   ' < M ` q   !$+,..78JK]^ghghegeecddduvST=>==@B_`||w|wynwqtmqjngmdgbg\dY_W\RV!&>C>D7B7>0;4;074;074;07070707%*070707070707-4)4-4)4-4-4)0-4)4*0-4)0)0)0)0)0'-'-'-)0)0)0)0'-'-$)'-$)&*!) ~ }$))-$-') ) )$)$)#( p }" )$)$) h g e d dbYXY:YXYYXYYWX.Oj a {   & 8 K ] n   !#++-.56II[[effgefbdbclmSU==:;?@^^|wytytwntnqjnjmgmdg_d_d\_T\QVJO',>E7>4>0;4;074;074;07070707.4)-0707070707-4)4-4)4-4-4-0-4!) #-4)0)0)0)0)0'-'-'-)0)0)0)0'-$)'-$))-$)'- | {)-$))- ) )%" o n %$) h f e e c daYXY(YXYYXYYXYUDDje _ w   # 7 I [ l }  !"++,,24EFXYbdcdbdacab|}UU:;9:@Akl|wytwtwmqjnjndj_d_g_dYbY\TYTYNT6>5;:A074;470;4;074;074;-7-707 ' #-707070707)0-4)0-4)4-0-4(.  -0)0)0)0)0)0'-'-'-)0)0)0)0'-$-$)'-$)'-$- { z$)#)" r n n m l g f f d ` FDSRZFYXYYXYYXYWQR=]i r W 3 E X k z  ! **+,11CCVWabab`a_`deRS7967<=nqyy|tytwntntjqgmgmdj_d_d\bW\TWPWMTMPCI$()+7>3:4;070;47074;074;-4-4-4-0  )0-40404)0-4'0-4)0-0-4)0    )0'-'-'-'-)0)0)0'-'-'-'-'-$)'-$)'-$)') z z  } r r p n n m j i o m ] S 5 # ;;;uYXY.YXY YXYYXYZYZY33zm m  T   2 D W f w   ))*+./?@SS``_a__^_vwMO6735:;opyy|tytwntjngmdjdj_g_bY_Y_W\TWPWJTJMFM?C367:7:0707070747474707-4-4-4   $-40404-4'0-4'0-0)4)0!'     ")'-'-'-'-)0)0)0'-'-'-'-$)$)$)$)$)$)#( y x x t t s r q p m m m j h U E (  ##$GGGWYXYYXYYXYZYZYTUAkm ~ R   / A S e u   '()*--==RR\]__\^\]~IL342479hl||y|yynwntntjmgmdjbg\b\bY_W\WYMTMTJPJMAJ>D15"'7>3:7>070;070747074;07-4-4)0-40404)0-4'0-4)0-0,1      #('-'-'-)0)0)0'-'-'-'-')$-$)'-#(" x w u t t s r q p m l d I 1   )*+CCCgRQRAYXY"YXY YXYZYZZYZc33n w N  - ? P a t  %'))+,:;NO[\\][\gh{}KL232215ef|y|tytwntnqmndjdjbj_cPYRYW\TYTWMTJPFMFJ>F>E:A 383:7>3:4;070;47074;0707-7-7$!&0$-407)0-4)0-4)0-4)4       &)0)0'-'-'-)0)0)0'-$-$)'-  z v v t u s p o i U >   $%&;<>jWVWGXWX.YXYYXYYXYYXYZYZ \JJSs v o  + > N _ o  #&'(*+89MMYYZ[\\wxy}JL12/111aa|yy|y|qwtwntjqjndmdg_dV^FJ<=@DJOPTMTJPFMFJ>E:A:>03&)3>:>3::>074;470;4;07470707-3)-0707#)%*-4-4)0-4)4-4)4#       (.#)&,'-)0(/)-$-&( y x w v t t m \ D 0  #>>BtFFHUYXY8YXY"YXYYXYYXYYXYZYZZXY'k##t }  ( : M \ m }  #%'(')56JKVXYZ\^ik>?/0-/-.Y]{{y|wytyqtnqnqjnjmdjdg_d\b7;!#$9;FMFMAFAE>E:A:A6:!$/:7>3::>3:4;070;4;074;070707 %$,1070707&, %-4-4)0-4)4-4",         { z z y w w v d Q 1 %   "))).HGJcONOFYXY(YXYYXY YXYYXYZYZZYZ `IJ^v x   ' 8 H Y j {  "$%''(34HHSUVXVW`a:;-.,-+,VWtwy|tytwqtjnjnjmbg_d_d\bW_W\"%27EJAF:A:A:A:A:A7;-0,.3>7>3:7>074;470;4;070707)4"*07070707-7&0,1)0-4)0-4(/             } ~ { z z x r W C &   ,-5559rRQSKYXY,YXYYXY YXYYXYYXYZYZ\TT&g98iw  $ 5 D W h w "#$&&'01EFRRSU[[[^67,-)+))QRmpwytyqwntnqgnjmgmbg\b\b\_TYTYPW!#(7@>E:A:A:>:>:>:>7>4;"143:7>3:4;070;47074704-4&!&040404-4-4)0)--4)0-4'0               | | { p d F 2  #!89>wPOQOYXY4YXYYXYYXYYXYYXYZYZZYZZYZZYZ<%&+ " 2 C T c t ""#%$&./BCPPWWpqOS.0)+()'(KOijtyqtmqjmgmbjdg_d\_W_Y_T\TWPTMT!,4;>:A:A:A:>:>:>:>:A7>-3 7:7:7:07070707470704-4 !/30404-4-4)/$-)0-4'/!             ~ z f T ; '  *23:CBG^TSU@YXY)YXYYXY YXYYXYZYZZYZ//4  / A Q a r  !"$#%+,?AMMUV||LN()&(&'$'HHafntmqjmgjbjbd_dY_W\WYTWMTMTMPEJ# .47;:A:A:A:A:>:>:>:>:A:>4;&*#'3:7>070;0707470404%, /30404-4-4-4 %)-4)0$            u Z C / $ ! ((1>?DmMLONXWX1YXYYXY YXYYXYYXYZYZ.03  / > N _ o  !!#"$*+=>JJRRz}II&(&'$&$%?C^cmndjbgbgbgYbY_W\TYPWJTJPEJEF>E.44:7>:A:>:>:>:>:A:A:A:A:>:>0717$*3:4;070;4;070707$  /60707/6"*  &)0&,          z g O 1 ' # # !.44;xLLMWWVX;YXY"YXYYXYYXYYXYZYZ//1  + : M ] m ~   #!#'(<E:A:>:A:A:A:>:>:>:>:A:A:A:A:>3::>07-3-0074;470;0707-4/607-4$  )0           p T B + ( %---5>>BfRQREYXY'YXYYXY YXYYXYZYZ;<E:A:>:A:A:A:>:>:>:>:A:A:A:A:>:>3:4;-3*.060;070707%*"'          u b E 9 , &&%&398>sMLNLYXY.YXYYXYYXYYXYYXYZYZRRSO  % 7 G X h y  !"$%78DEII{}adDG01'(*+.0-/$& " "!35PTY_Y\W\TYPWMTJMEJEJ>E>A:E>E:A:A:>:A:A:A:>:>:>:>:A:A:A:A7>3:7>-4 $).360;0707!              g S : 1 , '*129zRRTSUTU9YXY"YXYYXYYXYYXYZYZTST;  $ 3 D U e v  !!#33BCEE}df<=(*$%$%#$!$!#!!!03IOTYPWMWJPEMEJAJ>F>E:A:E>A:A>A:A:A:>:>:>:A:A:A:A:>:>:>7>3:7>07!&#))/04),            v Y D 1 - )+56?==@`YXYAYXY)YXYYXYYXYYXYZYZZYZ"%&, 1 B S b t  "01?ACDxx{ll67&'#%$%#$ " "!+.DHTWMTJPEJEJAF:A>E:A>E:A:E>A:A:A:A:>:>:>:A:A:A:A:>:>:>7:0714! )*"#        y d N ; 0 +1!!1BBHnHGIPYXY0YXYYXY YXYYXYYXYZYZCCFa  . A P ` q  -.>>BCnp|pvQS*,#$"$"$ # ! $+>CMTJPAFAFAF:A>E:A>E:A:E>A:A:A:A1714:>:>:A:A:A:A:>:>:>3:38$      n S B 8 - &$%5+,5MMPXVUV5YXY YXYYXY YXYYXYZYZYXY. - , < N ^ p  +,<=@@fg|~ymm<='(!#"" " $%:=EJAFAEAE:E>E:A>E:A>E>A:E>A:>:>'($(18:A:>:>:>:>:A:A3>4;"'     x a C : 4/)00;GGJ[XWX=YXY%YXYYXY YXYYXYZYZYXYEEKb * : J \ k } ()9:>?^^|uyw|wyfn;=') "! !06AF>E>E>E>E:E>E:A>E>E>E>E:A:>:>&+6=:>:>:>:>:A7>58%   e T = 8 /0))7>>EiPOQJYXY0YXYYXY YXYYXYYXYYXYZYZ5. 7 H W h z %'89;=PQ|wyrvtwmqeiJM)+ ',:E>E>A>E>E:E>E:A>E>A>E:A:>:>:>(.:>:>:>:>:A7> (  t X J ; 3.%&855>zHHLXTSU:YXYYXYYXYYXYYXYYXYZYZ44By 6 E V f w #$56::GI{}w|wytwrumqjndjW]9:$& !%>E:A>E>A:E>E:A>E:A>E>A:A:>:>:>!-1:>:>:>6= %y d M C 9 2./0;AAEdTTU>YXY$YXYYXY YXYYXYZYZXWY?5 @ S c t ""2378@@hi|y|twtwntmqjlgmgjbjbdJPCG8;(+#&%*(+(,!%"&:A>E:A:E>A:A>E:A>E:A:E:>7>07)/#6<7>38!$  l W C ; 33!"1::@iYXYCYXY,YXYYXY YXYYXYZYZZYZ*+C ? O a r  01369:OPuv|||y|qwqtntjnjnagbg\d\bY_W_RWDMGMJTAD<@7<%+#>E:A>E>A:A>A:A>E:A8?14)+#$)6>GsEEISYXY6YXY"YXYYXYYXYYXYZYZ IIRY < M ] o ~ ./2336@@be|y|w|tyntntnqjnjmdj`d\b\bY_TYTYMTJPFPJMAFAF:?.4!:A>E:A:E>A6<6;04.4(.!%  e U G > 0 !8++9KJOaPOQCZYZ'ZYZYXY YXYYXYZYZYXY(%&G K \ k | ,-122457PQ|||wytwntmqmndmdgbgbgV\Y_Y\TYTWMTMPFMFJAFAF>F;D7?>E6=18*.$)%)$(#  r V I A9.,-;45=mXWXGYXY(ZYZZYZ ZYZZYZZYZIITZ J X i z (*./2223@B^^}yw|w|tyntntmqjndmdg_d\bY_TYWYPWMTJPJPAJAJAFAFAF>F>F;D"'# x g O D :6098AxLLOOZYZ2ZYZZYZZYZZYZZYZZYZZYZ/K V f x '(-../1213::ehywytytwjqjnjndj_g_g_dYbY_TYNVPWMPFMEMAF>FAFAFAFAF>F>F>F j [ J ? 2411>IIN\SRT>ZYZ'ZYZZYZ ZYZZYZZYZZYZ99Sp T d t $%*+,-./..-.NOdgz}}||t|tytwtwjqjmgmdj_d_d\bY\W\TYPWNQJPFMEJEF>F>FAFAFAFAF>F>F>F u ] P E 9/00@=>EiSSUIWVW.ZYZZYZ ZYZZYZZYZZYZZYZ8S a q "$()++,-,-,-23??egntwytyqwnqnnjngmgjdg\b\b\_T\TWPWMTFMBGEJ>F>E>E>E>E>E>E>E>E7=-2#  e R H =3 3::DuHHKTZYZ1ZYZZYZZYZZYZZYZZYZZYZ;;Wt ^ p  '()*+,*+**'(.0=@\\eiqtmqjmgmbjbd_d\bW_W\TYPWMTMTFMEJ>DEF>E>E>E>E>E;B7>17(-   p Z M A 3"#;*+:DDIdOOQEZYZ&ZYZZYZ ZYZZYZZYZTSYE \ m | $%'()*)*'(&'$&)+25DI^bdggjbjbg_d\_W\TYPWJTJPFMEFAJAFBGAF>E>E>E>E;B39*.# w d S G 9 +,,>78@sONQLZYZ,ZYZZYZZYZZYZZYZZYZYXY *+\ j { "#$&&''(&'$&$%"$#&)+04ILLTXZV\Y_TYTWTTMTJPFMEJAJAFEJ>DAFAFAF:C.6%*  e V J =5/66AwTSUOYXY3ZYZZYZZYZZYZZYZZYZ MMZR g y !#"$%&&'"$"$"# " ! !#"$./9>?CHIGMCJAGDKAJFJ;C;=:@:?BG59+- "  v \ Q B 2855B??F_XWX@ZYZ(ZYZZYZ ZYZZYZZYZZYZ*e v  "#%#$ " "! %'&+%'%)+1+/,.(+&*'-%(!% { h U I 97&'9AAImJIMOZYZ/ZYZZYZ ZYZZYZZYZZYZZYZ??_h q  " "!!   j ] M ? 4!"701;{MMQWWVW3ZYZZYZZYZZYZZYZZYZZYZ3m       t ^ R C 95.. LM##$$<<666666666666666677776677667777II SV>?=>===?=>>?=>=?===?=>=?=>=?== IJ2D:9;9:9:99999999B 545  4 5r .f -c -c -c -e .d .f .f .e .f .f .f /f /hM&_1su bc Y[ Y[ Z[ ZZ Z[ Z[ Z[ Z\ [\ [\ \] [\ \]oq%;:3 3ttW WR RQ QR RR RS SR RR RQ QR RS SS ST TS Snn{{ qs ]_ ]_ ]_ ^_ ^_ ]_ ]_ ]_ ]_ ^_ ^_ ]_ ]_hjV! ?@b##XY XWWXVUVVWVVd$$g&&jfjDCD0.0////./...................-.---,-,,-,///7575 7w9z4p 3o3m4n 4o 4o 4n 4p4o4p 5p 5rN,f&` Ptwx{kldecfdfcecfdfdfefegegehux%&NM3 3{{zz``\\]]\\\\]]\\\\\\\\\\]]tt }} x{gihjhjhihjgighhigigigipsc$$DE?@k')c#%b#%b#$a!#a"#a"#`"#`"#a!#`!#`"#k('u-+h&& )))jgjfdfGFG646545545444545545545545333333434555;;;7675 8w<~>:y:x:x:x:z:z:z:y:z;{P)d+g&a$Y "uw{|tumpmomonpnpoporoqoq|%&'RR3 3}}~~jjffggggggggffffggggzz! ~~ !!rururtqtrtrsrsqtqsy{ f%%EEDF@Bq+-k(*l))k((j((l'(j'(k'(j'(i'(t,-y0/v-,i&&+++jijifidcdLIL;:;;:;<:<:::;:;:::;:;:::<9<=;=@?@=;=88857x<AD@@@@@A@AR)c*e-h'b,n&uy{|}xzxzx{x{xzx|y{&'('TU4 4}}ssppppppppppppqq#!!  !!"#$||~|||~|| g%&EGEFDFAB{11v/.u..v..u..t-.u-.t-.|1234{01v--j'(0/0kjkigigegebeOLOCACC@CCACCACB@BB@BC@CCACECEB?B=;=78757y<AFHFGGGGJ#U(b)d*f,i'c,n3wx||%&&((UV5 5~~ !||zzzzxx{{zz $#"" !#!#"%% "!$ g%%FHFGEFEFBB65~4433~43~33~33666834}10w--j()/0/lkljhjgfgfcfcacTSTIGIHGHHGHHGHHGHIGIJIJFDFA@A=<=88858{=AEIMMLMN$[(a)c+e+g-i'c-oIwy}~ !('((((VY('5 5 "#! !#$$##"##""#%&'##"! $# !. h&%GHFFFGEFEECE:;8989889;:=6634}11w.-j')"!"000mlmlilhghgegcbca_aZYZNMNNLNNMNNMNNNNJJJEDEC@C=;=88859{>BEJN!RSS$['^(a*d*f-h.k(d,o"Zwz}!##%$(()()))VW/06 6 "$%$$'&%%$#"$$"#$%%''(%''$#!3 h&'GHGHFFFGEGEFCE??>???CGLO"U'_*`'`(a)c+e+g-j.m)f-r%a{|!"'+*())))**XY34 6 6!"$'//)'&&%##$%#%%&&)'+/.'%%!  !6 k''IJHIHIGHFHFFFFIJJLBC=@;<885522z./l)( '''232qnqmlmkikhhhfefecea`a`_`b`b_]_TTTPOPLJLHFHA@A===:8:7;}>BGLR+c.g.h,h)c*d,f,h-k/n*f,r&cz}!'144-)*****XZ45 6 6 "$1665)&%%$#$&$$$&(),667.%$!! 5 l&(JKIJHJHIGIGILMQRRROQAC;<895522{/.o(* (((434rorololjlkhkhfhgcgedekhkjhjigic`cRPRKJKGFGBBB?=?:8:6;|?CHO-g2m2n1o3p2o+g,g-j.l0o*g-t&d{~'79:;=>>;9;8;|?CH)b5s6t8u7v8w9x7w/j.k0m0o*h.u(d|'<>?@AA@2+,*+Z\778 8!4CCDDDDA*&$$%&$$&%/CEECDDD.! !! 6 l(*KMJKJJIJVWad`b`b`b_`^aY[>>6533|0/p)* )()444sqsqoqnlnmjmmlmxxxzxzywyxuxwtwwtwusu[Z[HHHECE???:::9;~?D,d:y:z<|=}=}=>?>~1o0n0p,i/u)h}&CDEDFFGIH5,,+ Z[0/8 8 7IIIJJKKKF+%$ $&%%&0JKLMLLJJI1!!!5 m('KNKLJJ[^ikhihkgjgifiefdf_a=?21~0/p)* ,+,535trtrprpmprqr~}~~|~}{}|z|zxz]Z]DCD@?@:::9<@+d?@@BBBCDCEB2s1q,j0w$Y&FIJJKLKMOMN8,- [[*,9 98OPOPPQQQQQL+$%'$&2QSRQRRPPQRO2!!5 n(*LMLM]^qqptoroqnqmpmmloknjlcg::11q)+*+*545urusqsvtv~][]A?A;;;)(A8</gCEEEFGFHIIIKG5v,k1z"T&KOOOOPQQSRSUT:-[]-.9 9\ZTS,+u%;/hGGJJJKKJNNNNOOM0p4~#W%QTTVVVVVWYYZZZY= ``+,; ;>\\\]]]]]^^^___W) 5_```__________]5""7 q)*ii~~~}{{|z}y{y{x{wzop78-,-878~\[\ U87KJDC ,-.XW\\][[ZHH W"?,o,w-x,y.y.z.z.|.|/|0}0}0~001)t7#\ (3455555577887886 ttMM999999:::;;;;;;;0  8=<<;;;:::::::::8 *+% //bcbbbbab`b`a``^`^`^`^_^]\^\][]Y\9:/./===~}~}}|}|}{{{}z}|z|{y{zxzywyxvxjhj8--DCPOQOOO32 ,+*WV{y{yzyyyyxwvZY//@"0|?DIMNNNONOONMMNJ(cxy{{ , $$&&(((((**+*,)))*)(()()'(%'$%!!b454KLKNMNMMMOMOONONONPOPPNPONOPNPNMNOMOLLLIIICBC>=>*)* LKnedxvwvwwwwyv^\,, ,++GEZ 3HL R:<<=2#X#W#X#X3  34BCEGHHopmpLMKLKLJL)* <<==??BBff{{||{{__CCAA@@?? IJJLJLLMy{hjKKHHGHCD 2 HGHHs  !^DA@& #######"####878>=>===<<<545 55 ,FE^\y##.$ $ & % % % $ % & & & & & ' ' ( & 310000/1111111312  B6676676676676677   %%########$$""####""""##!!!!!!""!!   44>ro ,qout76G1c""c!"b!!a!!b!"c!#d""e""d""d"$e"$d"#f""g""f"$~12MN+  H=;; < < <;<< < < <==>!Z $O'''LJLDBDDBDCBCBABBABCBCDBDDBDCBCBBBCBCCCCBBBBBBNMNaaa 'kIDCCCCBCCCBBBBAQ,OjTTT T TSSRR R RQQRU\882kk] ]] ]] ]] ]] ][ [Z Z\ \[ [Z Z\ \Y YY YY Y\ \ PO]01/X 1n&(m'(k&&k&(l&'l&'m')l')n')m')o')n')o')o')36UVPR> KLDBCCCCCCCCCDE$\1t +`('(b`bRQRKJKLJLLKLKKKLKLLKLKKKLKLLKLKKKLKLLKLTTTqoqhfh%+r)nQLKKKKKKKKKKKX!a,V90$p]]\[[[[[[[[Z]h^!!HH70rrggggeeggffeeeeddddccccccffee##*1o&(v,+u-.t-,t,-t,-v,-t,,v--u.-v--w-/v..79TTYZRSR! LPRJIIJJKKKKKK%^1t2v 1n)()cacgdgZXZSSSTSTTSTSSSTSTTSTSSSTSTTSTSSS[[[rqrtstigi%-s-u+qYUTTTTSSSST]%g!b, \<391'ueedccccccc f#n j^))ZZ861vvnnnnnnmmmmmmmmmmllllmmllff1o')v-,}0112~21~222122~22233334;>QRUVWYZ[STe.  LQV!Y"]!Y!X"X!X!Y!X"Y)f2t3u1v2x 3t#*)*fcfhghljlonogfgecefcfedefdfgdgfdflhlxwxxwxyvywuwkik 3-v.w/y1y/w(h'f'f'e&e%e&e*k+p&l%i"e-]=3;2:1;2-''u!'t!)u!(u!'t!'t"(v#*z%'v %q!l_<<><=@ADABBBEEOORRTTWXY[\^UVfR OSX![%`'e)h+h+g+h0o2t4v3w4x4y4z 4u@*)*fefkhknmnrorvsvywywuwvtvvtvxvx|~|~|{||z|zxzzxzmlm 5/y0z1{3}3~563w0w/w2y2y.u*q)n&k$f.+`=4>4>4<3;2;26/2+3*2*2+.&*|$'v &r!maOOdd;97531.%#%$"}}uunnhh;[&&S#%  6[%&S$$ .;=FGIIEDV(( 0['':1s)*z--2277;<>@CEFGGGMNPQRRUVXZZ[]^VXfV MSX!\%`(d*i.n/n1r3t3v3w5x4y5z5{ 4vE,*,hehljlolosqsvtvzxz~|~}~~~~|~}{}{z{{x{pmp 60z1{3}4~5787655~2z.w,r)o%k$g. ,`>5>5>5=4>4<3;2:1906-3*/(+~$(x!%s"naQQee<:75420-)(&"}}vvoohh EDAAg+-i./JJ^.. ABABh,-i./HHb/-i)*[&'  #BD" BC=@;5>6=4=4<3=4<36.4,.&,%(z"$u!ocQQhh<;97520/.)&!~~vvppkk=>f)* Z+)(HHW--8:n,. W(*-DEa12 AD ;>?QR@A7T%'mnMONP;2s*){..3366;6?7>5>4=5@7D;B:?54,1',$(z"%u"obSSgg><97632220'"}}wwppjj DE YZ\\UV'de BD  TV^_UW.]` |78F !y:;rs5-57=uutvT++DE3s)({./4477<6A9JAJBH?H@<4/'-%)z"%u pcTTii>=:86467663%wwqqii09;,oq |@B?"#fh(=>$lm#p:;L),Y\+.JKef"V$%K "P'(c12J**zGG3v)+|//4378CEXZZ[[]\]]_^`Y[Y[[^_^acY\iZ OUY"]'b7yEFFHHG:9|8~99 6zI,+,kikomosqsxtx~trt 824569HTUTSSO5-v*s(n&j0 -c@7B8@9@6C;QGPGOGNGLEMD;2,%*z"&v!reUUjj>=;979<<;:96"~~xxrrjj4@B+wze56ijL,,\^1 +DE#vwq;AA@?>>=9!yyppll ST hj㇉gi1## PQ  df牌$Z]C01 ~>@yz*\^  DDg:FH"썎rs 5u*+?>deghhjiljmklmomoopoqprqrgide\^mI RW;STSUVWWYZZ\W>; 78---nlnxwx  166Rommmlklkihha1{'n1,fD=LCdYe\dZdXcZbW`W`W`U\U_T[R81#sgUUkkA?ELKJIIHGFEDD?||mm $$a'B@ecVT43 []/VX8  c12U*,$ H55YCC.ST `cuMO5<WYXZ[[]^_aabc]A 83---ywy*7Zvuuusturqrqoqg1{2)fOEkbmblalak^i^i]f\g\f[d[dZbXaX80gUUjjBIQQOONMLKJIIHG@||C76YXJI ,22dbhfhf`_JI('b 1lmb??  fhYGG1ghfAC {`abNOA!#IK.  ef*!"M,-ef1!!_b8egikjkkmlompnpoqprqrrsstttuvvwvy_`oM 4vTVVXZXZ[Z[]^`aaZ < ?=?¿&Qsssrpqrpnonnnnla 3#pi^jai^h`h^h]g\f\cZeZcYbWaXaV_U]R0'YYkkEONNMLLJJIHGGFED9%-+vRP[[\[[Z43 ,,+[ZihZX=;DUVlm }SW~nq "hBC_b__lmWEF4"$jk{} 6 Qy "###$#%####$&#%$&$$$$$%"%"# D%/zDFLLMMMMNNNMKJH> A?AKIKQPQTTTWUWXVXWVWXWXXWXYWYZWZZWZXWXUTUSQSLML;9; ED"L!L!M=ZYXXXXXUQI7 b l o q u u t s t s ss K(''/SSyyxxiiGG'' WII][|yXU,, ,+*KJl       1 7afhge6 6 5 )AL46673IF@!!!<;<=<==<==<=888bbe$O>>>7 RJ% )*/PRQQFI`G 111188]]]]]]^^OO22++'&5ji// ,FDfe)                                                  ^\^ldd                      sw~EDVVU ,on}{/.A79z}{|{|}}}|~%-. 21100101121112232322232322233333@ALC('&''((((''* )) + )5+_^_ܔIJIJHJHIHJGGGGGHGHGHFFFHFFFGJL/I^UTUTTSRRRRQQPP11$uuttssttssqqrrqqppppppoooommmmmm"!*_]v ,('L 890=LL*+9;886778788889888999989;9::;::EFgi[ !I:,0%/%0$0$/&0'0'/'0)2(0(2(1'3'E9OC $cccacTUSUSSSTRSRSRSRSRSQQQRQQPRTU]^2VA#e]\\\[[[ZZZYYY \E EF&{{{{{{{{zzzzzzyywwyywwvvvvvvqq42A890G?_`..:;??>?>=>@>>>@>?>A??@??A??@@IJgikmn$%J=1?49.7.8-7.9-;-:0<0;/:0;0:/J=ZNQC|{~ik^`]^]^]`\^\^\^\]\\\\[]^^eh_`3 ]IC&l$e"c"c"c b"c"b#a"b a a"baWQQHC(~~zzss99  ! 1BH@hk12;;@ADEEEDFDEEEEGEGEGFFFFFGNOgjjmmnp%%J>1D7G:@7B5B6B7C6C8B9C:C9C7PD_P]OTF}{lnrshjgkgighgjgjfhfhghhjnpgi`a36]KJE+s(l)l&k&j'k(j(j'i'i(j&h bUQQQQQIFB*{{rr99"########4CFHAuw68;3C8I?OBJ@I>K?L=J>KAL@K@UJaR_Q`RTG~npz{rtrtrtrsqrqsqsrsvwprhkba3L_KJHC0x-t-t+s-s-q-q,r-r)o&h aUQQQRRJFD@,#""""""" {{tt99"&''((((3@DFJAwxRS;=AAFFKMPPQSQRRRRRRSRUWYgijmlmmooqt&'2 L>2E8J?PEVHRHSFSGQGSHSHZNcXcVcT`RUIwvz[]|||~|~|}|~xxqsikbd3$\`LKJHD62|2{4z1z1z1z.w*o&i cUNMNs=sKGEA>.'&'&&'$||uu9:!&*++,,5?ADHJCwz^^;>ABFFKMQRVVXYXXX[XZ]_hjjllnmpnqprv&(>L>4E9K>PFWJ[P\O[O\O\PaThYfYeXdVcTWIDAA<y{rtklbc4(daOLKIHD<99886~/w*p%i!cVSwwLHFC@=1,+++)${{uu:; &*.018=@CEILCxzbe;=ABGGMNQQVY[\_`_a`chkjllomonpqrrtu'(CL?5F9K@SEXL]QdUeWfVgYi[h[hYgYdXdWZM<y}rtklcf5 )e aONLKJJE?><95/x*r&i"cV\\ssMJGCA>:500.*$}}tt:;!&).26:?@DFILDxzeg;>ABGIMMQQVX[^`bdghiilkmmoopqrrsstw((C M?4F9M@RFXK^RfVi\n`l_k_j^iZiZgYgX[N;{|svlneh5 #)i cQPNLJHHEB@:7/y+r%k"dW^^ssNKHEB?<952.*%!~~uu;<#&+.89;?BEIKMDy}fh=>CDHIMOQSVX[^cfknkllnmmnopsqtsvtww))E NA6G|}tvmneh5 !)j cRQOLKKGII@95/y+r&l!fW\\uuNLIEB?=:86.*%!}}vv;<"&+6:=>@BEGLNFz|gi=>CCHIMNSTXXacopqrrtopnopqqtsutvvxw))FN@5F;MBSGYNaSn`wkzkzlqdn`l_l]j\j[]P >|uvnofi6 *i dSQQNLLNMLI<40z,s(l!eYZZttPMJGDA><;:3*%!~~uu;="&3>>?AABGJLOG|}gg>?CEHJMOSS_`rutvvxwzxzruqrsutuvwwxy()EOB6H=LBUHZOk_{n~pqrqqdnan`m^j]_R5H4vtvX68}uwoqfh7 *i!fTRRPOQTRQPL80{+s'm"fX$$K;K] ]QNKHDCA?>><0$ uu ;=#3@@BBDFGHJNQH|~``>?DCHJMO[]vvyzz|{}}~wytvuxwyxzz(*8 OC6I=NCVHm_ttuxxyysepaoal^`Sy~vxosgj7'b!fVTSQTZZWWVSN6-t&m"gYQQQTTQPLIFEDBBA?>, ww <=4BDDDFFGIKKNRI|MN?@EDIJYZy|}~~|~vxxzz|{)*1 QC7I>PClawxy{~~}sinfnbcWoނ苤ʄՠwzprij7&_#gVVTZ_]_\ZYXVQ2}&m"gZQQQV!VSPMJJHGFEDBA@+xx10{$ <=1BEFGFIIMMMOORI{}NN?ADFWY}z{||z*,/ QE7J>k]|{~~kucyUr}pkcpcprjk8$\#hXW^efec`_]\\ZS,v"hZQQQW"WTQNMMLKIHGFEDB)yy&%Z ECspTR..j 6" ==0FHHJJKKNOPQRRUJy{OQ?@UV}{*+ QE9l_jMKNhhponbo߶jk8D#iYcljjihfddaa`_W+s0hl5lVSRQONNMLJIHHFF'xx=<;^]\Z ,32nlsqsqhfGF!!JN00 >>/HIKLLMNNPRTTUUWKxzPRQSw)*Sk\hm TTS95#igqpommmjiggfebbayzzWVUTSQPPNMMKJIHF& /.nSQjjljmj>> ,,*^]sqsqsqsqsq\Z98}*4!"mFF';;-//01233355577871JJ24 RTXYcefgfhhihjikjljmkmmonooqprprgiJ >]T`VaVdWdXfYfYh[h[i\i]k^k^m`n`la[R66|zkWוؕדؒؒאא׎׌׋׋xz$ "FpJIIGGGEDDCCB@?S~}~DDGG7766553322100/..,!!NFDkjlkmkmkmk`^,- ,++VU}*_?@ab?'(')*+EFQRSUceSUQR,-*, - <UYgWS. -  %1EIRGB%#,""UT~lhecwlhmyuwv89`r`_<3 ;@+m,n4+l+l4\rxDBDB@BYXY|||%%,,HHHHXXIIFF66%%;:Nzx0/ ,98ki21J    J1/egdCC       )-4     ABAzxzSQnUT ,YW}GFj C(*V76Z<<] <=DE?????AA?@ABABBBBB (;e;e=h>j?l@kAkAkBkBmClDmEmFmEjDhCX=9EoFpFpEoEoDoCoCmBmBmAmAm?i=g>@BBBDEFGHHQZ SEMJKIIFFCDBAAA?> #9-%C95*4)4)4'3(2(2(0)0'0(1'.'.&/&.&'" ":7:nlnbabc`c`_``_`a^a_^_]]]]\]\[\\[\\[\[Z[ZYZZXZQRQBAZ E+,ab͚ѡ}xPQC*,?@ !###"#$###%%0XPhi99 DEKLNONPOOOPOPPPPPPRQRQQQRRTSTlnx++El?DDEGGHIIJLLMNUh\ 2^WSPPNNNLLJJHGFC> #9-&j]I=:/:.:.8.7/8.7-5-6-6,5+5+5+/''#"#?=?rprhfhgeggeggdgfcfecedbddadcacc`cb`ba_a[Z[MMM\>>༿tLL0  ?@$'''(((((()3TZRsu;= EFLMTSVUVXVWVXXXXYXYXYXYYYZZnp}-.ElBHMLMNPQQQSSUZjj]  2a_eXVUURRQQQOMLD? #9"/&j^g[L@?4?4?4=4=4=4=3=2=3<1;27-0%&$#$DCDurunknmkmmjmkjkjijjhjjhjjgjifigfgcacVVVNNN P32{}ۮ⽿֩mnC)*  ?A$)*,++-,.-7SX[T?? EGMMTUZ]]_^_^_^`_`_a`a`c`bsu/.( FmBIQTTWWXXY[\`mlk\+ %Bbcgi`][[YYWWVRME@ #91.&mak_h]PDF;C;F;D;C;C;C:C7B:>36-0('+)+JFJzxztqtspsrprpoppnppnppmpplpkhk_^_WVWOOO \::~˗df0?A#(-//01117OUY]T\^FGMMTV[_bddgegefehfifigiux..7 FlCIRX\^]``bdfpomj\, &Cbchkkedb`_^][TMF? #97/&oam`k]fZRIJ@J@J@I@I?J>G>D:>47-2(' 212JGJ~|~yvywuwvuvwtwvsvusuqoqgfg`^`XWXPNP#pIJ`bpIJa>@nJLijbd5!" ?@#(-44455;LRUZ`VfgGGMMTV\]cejklolpmnnnmnx{/1EFmCIQY`dfgihkrpmmi\7 'Gbdglmnihggfb[TOG? $9 >/'ocl`j^i\fYVLOFPEMEPDOCJ@D9?36-0'( 444IHI|{|}z}|z||y|xwxpnpifi`^`WWWQNQ =')^<=;$# G,-yOQF,, @A"(,4889=JORXZ`WnoGHMPUU]_dejmqstwtvtx|}/2KGlELQXagmoosvsqooi]8 &Icghknoqnomkd]UOF@ $9@/(qdocl`i]g[eY[OWKUKTJRFKBE:?58.1''979KHK~}~yvyqnqhfh`_`YWYPOP9#$" 8"$J00 @A#)-39=@FLPVW]bWprGHOQUU]_dfjmrsyz|}~02LHmFKS[bjpvwxwtrooj]8 &Hdgikmotvtqke]UMH@ $9A0(qfodkak_h]fZdW^QZQXMRGLBD;?58-1'(!989KHK~~~zwzpopifib_bWWWQPQ $  1! @@!'-28>CHLPVZ^cXqsGHOPUV^_dgkmrtz{02MHlEMSZakoxzyvtronj^7 'Ibfhkmprvxrle[WNG@ $9@1)rgpcock^j^f[eYcW`TYLQHMBC;?59.2()888JIJ¾zwzpnpigib_bWWWQPQ     @A$).4?>757 "#"!"!   = ,VUPO,,                 _bL"$                              prr??@AACCU{{ u35ᢣPQ  !QHFEEEEEDDCDBBB@?$9 %a=8977544444TA{ttބۑvvPPOQOOMONMLMLMKMKLIJJIEE'CBf)= =)**+,,,-.../00Obaa88-=ABCCEEEFGGIIIZ[(*" $=<<::::B]^p ñ瑒氯XZSSRSRRRRPRPROPNNNNJJ9;#   = ="-.//00122233Lmboo<<-7EIKKLLMMOPPP\&&  (Eqq\UVTUTRSSSRQPKA#9=+qofHAAAA@@?>FB=84})j ®ddWXWXVVUVTVTUSSSSOP@@69$ ##33@@BBAABBCCAABBBBAABBCCAABBBBAAAACCAABBBBAAAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAACCBBBBBBBBAABBBBDDUN_P-&= = '2334444566Lhncvv==,6ANRRTTUVVVXc22 /Vsuve]^_[[ZZZZXTJC$9J-rrmgKGGGEDDCCC=3+v"euvcd\][[Z[Z\XYXXXXTUFH??7:$ ..>>OO[[__]]]]]]]]]]__]]]]]]]]]]__]]]]]]]]]]__]]]]\\]]^^__]]]]\\]]^^__]]]]\\]]^^__^^]]\\]]^^__^^]]\\]]^^__^^]]\\]]^^^^^^]]\\]]a^sk{"|.$= =&-5677799:Kcioc{{WW$$,6@KXZZ\\]^^fEE 2^twyxkgfdedddb\TJC$9"V-rpnlfPLLJJIHIC:3,v#fq((őꏒ`c_c_`^a^_]_\_YZOOFH?@78$ @@UUmm{ {~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| || || |~ ~~ ~~ ~| |{ {| |} }~ ~~ ~| |{ {| |} }~ ~~ ~| |{ {| |} }~ ~~ ~| |{ {} }} } } }} }{ {~3B{%h= =%*39:;<<?89$ %%QQll)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/D[`C= = %+28>??@JZ_djpezzee&&-8AKT^hkklqaa 3= 6jvyz|~xttssne_UJC$9(h-srpnkidVUTUQKB;4,v$ft**nqgifhfgef\^UVMMFH>>88$ ))]]0LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTuP= =%+28@BBITY_ekqf}}gg''-8AKU_hqsvcc%O)*l10egH  7ky{{}~~||xnf^UKD$9#*g-trqnmihc[ZXQIC;5+w#f v*+}psjkjkee\^UVMNGH>?89% --ccFkooppooooppooooopooooopooooopoooooppooooppooooppooooppooooppuB  = ='-38?DHPUY`flqf||hh''-8BKU_iryee40 # HI__  7ky{}yne]UME$9&)h.ttronkhgc_YQJC<5+w"f  v*+w|orknce\^UWMMFG?@79%  ddMvz{zyzzzzzyzzzzzyzzzzzyzzzzzyzzzzzzzzzzzyzzzzzyzzzzzyzzzz{yz܁K@= = &-28>EIQV[afkrf||gg''-7ALV_ht{cc 'w545d}~xnh]UND$9 )g.usqpmjjfc^XQJB;4,x#g  v+*y|qskncd\]UVNOFG?@7:% ==@chhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghhhhgghmۛn7e = =&-29@DELV\afmsg}}gg''-8BKV_kwx|bb~ Q _$";YGi}zqg]ULE$9(g.uusqmkjc_^]SJC;5+x#gu*+wyloeg\^UVNOFH?A78$ '']]x0xw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yw3ww2ww2wx2xy3yy3yx3xw2wx2xx2xy3yy3yx3xv2vx2xx2xy3yy3yx3xv2vx2xx2xy3yy6xq6n63= =&,3=BCDDK\bhnsg}}YY##.8BKVbrujy}QU [[=;C@j\P'  4e~}}rh^ULE%9&c.uvtromg^]Z[WLD<6.x#gr*+rtͅkmjm_bUWNOGH?@89% = = %,8@AABCDJahnsh}}FF.8BLZkgvyvz} AI/Uy00qn21CA3 5b}~}}|zzzl`ULG%9!W0uvssog\ZYYWWTD;5,x$ge+*psmnkmkmikhjghZZMNFI??88% %%W= = %3=??@AACCJfnuh||DD/8BRimm톩juz~ << M$"TRig~ l,/禨fg<  4_}zzyxxuuteUMF%9 P.wwusfZXXXWVTTP>5,y$h`*+qsmnklklikgigiegdeSUGH??8:% *YW|zUT('G= = 0<<=>?@AABBKluittCC.8Jdhkmfmrtxz~  U^^a\B:1  >~<>8 (Azxvuwtssro]NG%9..wwwiYYVWVSTSQPK7,x$h])*qrlnknilhkhifgehdgbdacNP?@88& 65]vu0<;rqDCy.= =,9:;<<=>?@AABJqjll88.B`egikhortvx{~! ''HGYWsqgOzA$nE5  )BitssqppommlVG%9+0vzhWVUVTSQROPNMG0}#hE/1~::ʩsvkmjljjhigiehegcfbdbc`c^aHJ88% $#>jhVT ,+*|z``22Z = ='7889:;<<=>?@@BMeQQ8\abegilmprtvyz~!+%8,-.-92H9m7CH&/3xppnnmljkhfO%9 0qiWVURSPPOONMNLKD(m Q}~~jmhihifiegdgcebdac`c_a]`[\CC%XW11 ,++hg_^$$@EEFFHHIIJJPPRRQQRRSSTTTTUUOOOOPPLL  __aaaabbbbmmooooqqqqr rr!rr!re"ed"df#fe&e# #  Y i  EvSxRxQwQwPwLmJgIgIgFg  "6>a=bl>l=l=l=k;g7`7`7a6a-W:zHGWWT"#[$%[#%Z#$Y"#W"!W"#X""W"#ON MLIDCrsrig-, ,0/rp32Z     h f**  % ! ...;;X'!!   $$;<""99 $$>UT~}== ,SRDCy' &&::  +0233464.' ! !& 5 φw{6G8;~|~```13R==+$# "  99iSU"#  76^gfnn ,88'&DMMRRWWVVYY[[[[[[[[]]]]^^__aaaa____YY@@ HjTu[ [!]"]"_#a#b$b%c&d&e&g(h)i)e4k  JJKKLOMOMWW ŭ{z{CDGH͸de{?@x??y>>x=?x=>x<>t;;j88 >@_`cekljllmjljkhkhighffegefcebcbcabY[ST DC{"= =%566899:;<==??@Mgee@@!9\`cdhjlmortuxy{"cA ?   5qQQ,z{9;=_avIB?@>=<:;:97664 &'= =1899:;;==>?@ALtkqqBB!1Aafhjknprvwy{~"mG; Y[m~7HIII5xzxy9bbTWbdpHB???>=<<:9:7,&&= ="4:;<=>??@@BLmwjwwBB!/:Kglnoqstxz{#oO S*sY}Z, [Z%'&dooDrtwy9 ./tP DF df|xlGCA@@>>=><<3&'= = &8==>??ABCKhpwj}}ZZ*-9DSmpsuvy{}!p,o VPMOLG:H4  DEDpLttdhg&&& XWXuuuc+,wx:./ EGF/pp}urfHCCAAA>?>6(&'= = %.;@@ABCDJbjpvj}}aa+-9DN]qvwz{~!o64k65`\e>hY&9 /R AD `#%쓕wx935 !xy|uqk_GDCBAA?;+%&&= =!'-4?BCDEJ\cipui}}gg+.:DOZhxy}"o9 C.+b\d>X372401 b#&wy9 ~~|uqeXV;=E8A>1+% &'= = '-4:BDEIV^ciouh}}gg,-9DNYds~~!o9dDGL[76  14~-uva$$vx9+-ztpjRvLcBCI2./F &'= = '-4:?FHPW^bhoth}}ii,-9DNYdo| n9 {"j8h/GH<<b$$׵vx9 +,7 345{uojVNFo4,+' &&= = ',39?EKQV]agmsg||gg,.:DOZep{!n9 +AEa<_##vy9_`@ xungQOH?9<;Y9+&&&= = %,3:@DDMV[agmsg}}ee+-9DNYeoy} n699 `#%uy9 yungb[WKDC;M(&&&= = %,3;?AABP[ahnsg||WW '-9DNYdosuu n,n  \#%vx9,,svxtngb[PCAA>5/*%&&$:Z= ='-4;==>>?S`flqf||EE!.:DOZeklmnovn$ZV!#uy9imxtmgaP??>><:2+$ &&'&F= =&/789::;;=Xfkqf||<<!-9DN[bedefehomK T 뼾~uy9bcwsmgR<;;;:::7,% &&# mk~|NM.= = )355566777;\kqerr<<!-9DRYZ[[\]`_ak l" ik5?~uw9ssxqlH886675463& &&55Rlj/DCnm;;a= =#/10122324458^pejj00!.:HPQRRTTVWVYYecIKB"$#   :tx9$#;qnZXC644423201.&&%$7YW[Y ,.-\Z((A = =+,-..../000015VcMM!-=FHJJKJMMPONRSj:9 (~tw9()/2hK51111//.---,-)&&DCf56 ,++fffd&%DC C%((())++++----./>!3=@@@ADCDDEGGHQ~a`` ~~}|}|}{}z|z{xzx{xywxvyvwuwst8$ HJD/...+,+++*+))('$))GFxv{y,, ,00ywkhDC    !! " % % ' ( ) (  !((-../,-,,,-,-::4<<80//(((+i35XZ**++++.220-'%# " +C$ -0Lb8gx"" +*VUSuq~|~{vt11 ,CAusTS. - 5 =?@?AB??@ACMI!!%&01@@IJTVXZYYZZ[[Z[XYSTSS lmlWXۓS"# GHIM#Y&`(c'd&c&d&b%_ TE;6-STCD=,]=9f9<99;;==::;;;;9977//&&  99vbaxvTQ ,MK'&N  7 ?LMNPPOOQRQTROMdJ#"GJ\^gikmlnmonpnppqprqsrtsuqt[ !"Q!) !U(g.u2|2~22}2|1|1|1|1|0z0y,p%\O YYYYGGHHIIMMKKIIJJIIHHHHHHFFEEEE;;,,*GE       Q!!cehijlknlnnooqpqrtsutvuwwyxyz|{~{~sK@`ddfhilmopqtvwRoo bcb!o{{z{xwyvvvsttrh&9YYuuYONMLKLIHGEECBB@9) )   987677?=PP2#$T**`)*W 2)(gH&'P.-^88k !!I/.b;9s//Y6,+j&'U0/`-11z4z|<|  BB7}7>~>EE " @B?ADDs>@  @@BdghjjkkmlnmooqorrssutvuwwywzyK(L_cdegikkoprsuv4[yzwwyxuussrqqfC 9YY{{mVMLK[XGGFEDCAA:!!U'%DD-TVZ67 11{)TTRR+-[""O ;KKABr('^ZZAA//V 45dCBt&&G00j2DCz-.Q""Q6/ :9f_+_((H'H: :99 7NN??-!]42F)(PO JJI&&R01WW @77FFefijjkllmnnqoqqrrsttuvvy}J&1S`bcefiklnoqqs===7X\|uu~rrqrpohE< 9ZZmhTQ\qGFEDCBA< !!C#%n<yJJTV5d55JJNN`>@?77==JJehikjkkmmnnoprqsrssu!d',6S`adegijknooqtuxzx!!!!AVY\msuӜ|pongIB< 9aamhd`xiHDCBB<$!!B##3hAB*H12%54nZY;;b$#D;4GHh;a+HEcrH!!  ++H1H1ֆPsPNMgiZZ]CD=-. gidd ?56=>CDIKVWhiikkllnmoopwy !m&.39BX_`bdfghiknp2xx999 ?dVY\_mrplkhSKF?: 9ggje`\YdFEDCBA/'"!!^anqce  DDxNKo ;9ZEEd",)(C87V75Q11D)&%6++F=.2@2o@B=&& C,. fh%X9;ehjlK77=55<>CDJKPR^`hjikkllosu}!n&-39AHX_`acdghjmmVX;FFqqqyyy/0/  :WXZ]`itkigXOKEA: 9hhiea\XRHDCAA7-'"!! ֤͐ SR.[Z j=jY9YlL;L=3=N|N4@41;1 X\Y<> %lnnKMaKL>55<=BBJJPQVWbchkiknqvx| !l%+39@GNZ^_bccghknTW(W`媱kZ\_chig_VPKD@: 9hhhd_ZVRMEBA;3-'"!!.!"mRT3()FDdBA\N1NX4%4_e +JiJRlRL^Lbub ^DDpqyz& ]FF[FH =66==BDJIQQVW]_fgikoruvz| !l%+28AENRZ^^acfghkTV M0EˆeVX[\`cfbZUQIE@9 9ggfb^YTPLHC>83-'"    !=55<OviTWXSRRQQQOJC>7 9XXc^ZVQM=66663-'"  "=55;=BCHJPQTSTUUWUVUXVX]_wy~9%*27?FBCDCDEW`ace$#=NPRUTJIIJJHHLHD=8 9LL~~b^YTK5222111-'"~~   ljKJr =47;=ACIJNNNONQOQOPQSPRQRZ\|~x5 #)26@U_cd6MNPPDDDBBCBBCEC=8 9EEzza\WN2..--,,,,(" )):fe.FFqo66Q=43<?>?????@@@B@@AAAAABBCBCCCSUvy( #&&&'7w((((('(()B\]{|a00D0},x+x+x+x+w+x+w*w*w*w*w,v,v+w2 8CCT'!  HG{,, ,+*b_vsustsjgHG-/2!2-303335485;5?7@6A7B8C8C8E9F>N 5' ;<'BC9FGl=l@k>h>c;_9[8X8T7P69 /,,  )(bLJkikikj`].- ,>>tqnlWU F &*/6?FHIJJJJIKLNO9DHKS\fmmnmnkhgghgegfifhghmosvx{xzxzx{wyqsef_a\^Z[JLdkhfddceccd`]RF?:. .65YWkiLK ,IG.-f"/>KPQRRRSTTTTSQRR8' K_nwz{ z{}~!~ ~ |ypoa jmor{~vwfiZ\dponsqtrrppnonlbS<  N==/191;1;3<4>3=5>6?6?7@8B8B8C9D;F;G<>4S8 \^hkijjlkmlmlonpoppqqrrrsutuuuuwuxk&', RWUWTTUTTSTQQQRQN*+cy cdbcab`a^a^^]^\][\Z[Y[XXXXVXUVTVMN! .6-PGSISJUKVLWMYMZNZQ\R\R`T`TaVcXYOT8NPs(*, +,Mwz|yyyxwxxuuutqC /0b~"$~}|~{}y|wyvxuwtvsuqtoqnoklDD! -h>5QFPFRISJSKUKVLXNXN[O\P\S]R`XXMV? ?@ST||x**- ./CMrutttqqqrpppnT1 ./ a$&{~y{xxvyvwtusuqspqnqnolmkmMM22! -g%sC;NCMEOFQIRGTJTJVKWMWNZO\QaUVKXH?ADFUW|y{y{w))8 13BCMlnnmmkkkljiW4/ ./g$&}~xzuxtwsvqspsopmplolnjlhkXY7621! -g"n'z!E:KCLCMDNEQGPHSITIVJYM]Q_TVJYI?ADFIKWYy{}uxwyxzv()@34ACDLfihghfeeeS83/ ..g$&{~x{twqroqnpmolojmijgifhXX>=6601! ,f#n&v,$B:KAJBNBNDOEOGRGTJWNZQ]SSJXJ>@CDHKMO[_uxy{z|{}{}svtwuwwzw'(@34@BDFLacbaa__S;63/ -.h$&~z}wyruoqlmjlikgjghehdeXZBC;<5601! ,g!n&v*}"2*C9G=I@J@JALBOERHTLWO[RRHXI>?CDHJNOSTbdtvuvwyxzy{vwqsrtsuuwvwt'(B33?@BDEL[]ZYYP>:52. -.h$%~x|vwqsmojlgiegdfcfbdYYFF@A;;6600! ,f"n%u*}#0'6,B9DKAMDQGTKWOZRRHXI??DDHHMNSSXZfhpsruruqtnoorprqtsuuwt')A23>@ADDGOUVUNB<941. -.g$$|~xyutpqlohjefbeab`bYYKKEF@B;<550/! ,f"m%t+}$/'5,;1A9E:G=I@MCPFRJWL[ORHWH=>CDHHMORSXY\_gjmomnklmompoqqrqtstt''?23=?ACEFILRNC@=961. --e~$%z}vxsuorjlgjce`b^_Y[PPJKEG@@;<550/ ,e"m%t)|#.&5+8.>7A9D=H?KBPETGVLYPQFVF>>BDHGNNPRVW[]`bghikikklmnmpoqqsrts'&@22=>@BCDFIKGCB>:60, ,-f$#yzuvqrmnjkfgbd^`Z\UVPQKKFG@A:;44.. ,d l&t*{".&3*:.;1<2C9G=JANEOITJWNOFV: <>BCHHMMQRVX[^`b`bdehjjkklmomoorprq&&/ 22==?ABDFEDEB@=940, ,, ^}$$wztvpslohjdgaaZ[TVTUPRKKDF>A9;46~0. ,d!k%s*{#.&3+7-7-7.8/C9J@NDPFSIVMNDU/;=CBHGMNQSVXYZZ[Z[Z[achkikknlomoorr&'* /1;==@BEB???@><840, +,U}#$uxruoqjmgiceY\OQOQNOMOJKDF>?9:44~00 ) +c!l&r)z!.&0(0(0(0(0(2*C;KBODRGUKMCT$==ABFFKMPQTTSUSTSTTUTU]_gijlkmmonoo&&./:;=?A=987978:730, +,F|#"uxptnoikegYZJIIIIIIIHIHHFF@@;966}0/  xv~|BA] +c!j%r(y!,~%+~$,&+#-%,$.'/(D;MDQFUILCR;92/21201152., +,=z""tvpqmlhiXZEEDDDDCDCDCDCDBD@?9;45}./ !xv3YVgg,,> *b j&r'v(w )w"(x!)x &y(y!'y"*z"+~$E?>?>?>?=?<><>9;32~./ a^y ,76QPq) *aj"m"n$n#p!o#p#q"q$r$r#s'w E=QHKA8;;@@AB?@?A?????@??@A@@@A@A@AHIfhjld!"#$693%$$$$$$$$$$&-) ** aqrmnWY:<9;9999898989888978777732|./ HFYRQ ,+*~};:T *aegfghhiijjjkk"o70I@  ;<;<88898:9:9;899:9999999::;:=@ *^^__```aabbbcccd0z+f fLL56131212221212222222242435333544?@D2[ "&'eeu ^BD/0/0/.....-.}-.~-.},-|-.|-.z,.{++y+-x++y++ ++tIH\Z\Z\ZPN-- ,33echgHH&&^JJOOTTYYbbjjpprrqpssrrqpssssuuxwwwDD 2}457;?CCDCCAAAAA? svrusvsvtw{~~~vypsmoknjmX[__yyzxxvvtussqsquttrsqrpkjbaYWUSRPFD  67OO[Z?? ,;:43~'55SSYYjjuu{{||||}}}}}}||}}ppDD547>DHHIIIJJJIFDD8)xxyy{{uuppjjXXuu~~{{||~~}}||||||zzssffWWOO%%?>> ,aawwkkCC2DLMNONNOOOPPPPOK89~~WWnnqqZZ DHIQQ11GGDHIJKKLMNOPQQRSTCffCC 5zYZZ]\^_`aabdfeg^=7$$Jmmlllkkkjjjiiih],,TTkkOSRRQQONNMLKKJHH>% % ]&'KMAJPP J! N !39:CCNN^''!78XZ\^~33 *_ahihifh 11DHHIJKLLMNOPQRL;bbII S;XX[Z[]]___cad^@ 97&&2Ujjjiiihhhgggf\,$$ VVkkDNRQOONMLLKJIHG?zz 9;cfoqln:STorJJ K!"WYjm.i-/`d]^ G RTmooqKLHnqhj@N"$dfoqorors11I UW ; 9D''15Ydccbbbbaa``X,$$$WWkkBBJLLKJIIHFFED>nn.mox{x{x{qt'B uxx{wzCE+VWvyx{hkH""dewzx{STJKvxx{x{x{FGWYx{x{mo%<svx{x{x{wzM$%HFxz_` m44 @Ax{xzx{dg11mmvv">ABCDDEFGHD>@9bbRR RW$`DMQRQQSTUUQ=;< 8~I''025S]\\\[[ZZZR.&$##WWjjB@?FHGFEDDBAA;ttmmb12tu Y[}]/.\]lm ssSToq|>=:|~ce _a}~1kl_` OQk67-qq~tvD!"00mmuu}}$<>?@ABCC@<>@8aaRR SW \&dAIKLMMOPM;::< 8|J''/126OVVUUUTTN1)&$##WWjjB@=9 zzttllD$%O++} mpnn TTikLMXYa`z} HIUVtv B!`11"00mmtt{{+:;<<>><9;=?8``SS QV [$_)h@EGGHHG899:: 8|I ''/1236JOOONNL2,)%$##TTkk@?=:9<>=<<::&zzttkk  su]^ o>=SU{}WWK**ꄇL++fhl=>ij=##00lluu{{!.7789868:<>7^^PP QUZ#_'d,j<:7689876*zzrrkkhiy{~JL <$#X66npUW tDF폒ru4 cf00llsszz $.3443679;=6^^PP PU Z#]&c)h/m9~<<8~7z7|8}7~99 6zG%%./12346?BA91.+'%"""SSii>=;8753443+"xxqqkkabK/.̀U54 *xzTU8#$\ác=>^`%//mmss{{$'-/12578:=5^^NN OUY#](b+f-k0q6y6x6x6y5z7{7}9~: 6zF''-/012356;72/-*'%"""QQhh><:86420/+&"zzpplleCCퟡ<((ڑ͈̇"ӎ  ؎[_zQQV79cABWZqsʆ_>@xOP..kkssyy $&+,01468:<4^^<< OT X"]%c)g,k/o0r2t5w4x5y6z5|7}6~ 5y5%%-./123455520-)'$"!!LLgg=;:7531/,)'" ~~xxppkk6%%ߛcEG_BBdGG ̌뤤 >+,F12z{x|}VWӑ . km@--9')#~oq Ώ..kkqqxx $&&&+13579;4]]22 OUX!]&b(f,k-l,k+k1s4w5x4y5z6{7} 5x2%%-./112310010,*'%!!!CCee<;87521)&&%" }}vvppkk  詮 /!"⣧ۡ7(' `FI{}*tUVM79  לprǑࣧ;,,4&'..llssyy~~"!"""*2478:4^^&& OTX"]%b(e)e'd'c(c(d0q3v4x4y4z6{ 4v ##,-/012-++**-,)&%!!!99dd<:8542'""""!~~xxqqhh}sr43E ȘK8:-"#ݨϞ* K89“fiÔʘkRRR==tWY..iippww)25793]] OSX"\#_$\"["\"\#]"\%]/o2w5x4y4{ 3t ""+-./.&$%%$%%*(&$!!!''dd:9751%}}wwnnii!XVi-XW\[y%&|㶻/#$添B22w]^D66 ݱҦ౶dORԨ eMNrw..iirrwwzzxxxxxxzzzzzzyyzz 3782OO  MSW!ZTTTTU UUUX.n3w3w4y 2r*,-,!   &&#!!![[:861{{{{yyzz{{yyyyxx{{wwnngg>45|~qq..iihhffffffgggghhgghhhhiiiijjzz50M /1  MNFEEEEEEFGGGGJ%b2v C])'zzuuvvuuttuuuuttuuuuttuuvv  0><81ttiijjiihhhhhhhhggggggffffkkeeZY33 ,*+VUustsa`\ZFFHrt YLMQFG4..9246/0701*%$..cc[ []]]]] ]] ]]]]]` `_____ _aa__a auu/.U I?===>>>????@@@?Z QM%qqkkkkkklljjllkkjjjjkkjjjjjjjj{{V+C%2kkaa` `__aa_ _^^^^^ ^]]^ ^\ \] ]]]ZZcc #--GGXWnmnm\[,, ,32[Z]\NN'&f ν!VLNwyòdZZǸeZ]~QIJ|~/++HAE1,.)!c/h1k1l1t5y57~7~7988998#C$%J. P+ Q+ S- T, V, \+ ^+ _- _- `- _- ^- ]- ]- ]. ^- a**##$$##$$##%%####################K o/R*'L!&L %K &K %K %J &J %J#J%F$A#>$<#:"0  787KKPO88 ,A@314 0,,&$%B>@SMO 400C>?:67C>?<89    : qu~ #$&&%%%%%&&'&&&(&(&'%&&&&&!!I(^afo v x y y y y z y w s s t d Ek s r q r s s s r r q q od\VSR== ) MJLHEG D   J ! (&(cabi $%'('('('(()(('()())()()(*(('(vHG h r } ~ ~   } wZ!C_ v w z z y x x x w v v v v tj ^C 4   n =  HSUUWUVVXWXWXXZXZY[Y[Y[Z\[]\]\]]_PQfE <3D9C9C9E9D;F:F:F4<4<4<3<2<2;1:2:091906-  a ! $"' &  W / 0HIjkkmlnlomonooporqsqsrssvtwtwoqQReP ,x$[R^V^V^V`V`VcWcYcYcZcZgZeZgZe]D; F B PC;XPZPYQXNWNVNVNVNVJTJRJRJRJRGOF)s"  "#&)6:W\^bRZHPBG:B.7!  w C  .k&'IJehffgihjhiikjmkllmmmmnnojkWVMM`W a,{&UNYQXPZP\RZR\T]R]U]UaT^V`VNE7. E'BN<3A8SISKSKRIQIPHPGOEPHOELDMDKC(r"R @ (+DF}~svim]dRXHNAGAF&.  d 9  /l%%w./UX`badbdcecedeefegfighdfSTSTLM^S _e.{%PGTKTKUKWMUMXMWOWNYNYPJC5-6- D (@ M<3<4=5MDMDLDMCLDLCIAIAJAH@G?:1WR  W 45y}oseg\_JQ@E!(.619,2! z N ' .j%'p)+{11RT[]\^]]]`^`_a`aac^aPRPQSTLM^Q _e!h.|&JCNDOFPGQGPGQHQHSHH>6-5-6- C&? L:2:2:1<3G?IAIAH@G?F>D=F>D<71]VR " a MLwxcg(,5=;F:D;B')$(7;"   c >  .h$&o)*u,.33PPVYWWXYY[YY[[YZNMNNOQQRLL]O _c!h#m0(G?I?I@IAJAJCKBD;4,3+4,4, B&>L:1909/7/71C;B;D;@7;   s S 2.i$'p)+s,-|0167LNQRQSSTTTRUKKKMMNORQRJL^P _c!h$l(p70B:D63+4,4,3+5- B % < K;2:1705-6-5.?6=4>6<4<34-!e`[UP  9 w'*nlsrPQ.1(*X^SZHP@G:A;?;>:A37*2%   a > ".h%%n()u-,{014499HJLNMNNNIJIIJLLMNPPRJJ^M ]c!h#k%o)t!6.>6>6>6;22*2*2*4+3+4+ A$< J:18/6/5.4+2+5-:17/602)%l!e`[UP  D -/ljLN03kngk\aPW4<-6;@;?,3,4-6'.)2! (    m M 0  .i$%m()u,-{004577=>FGHHFEFGHIIJLKMOOOIK\H ^bf#j&o(s!+w#3+7.7.1)1)2*2*3+1)3+ A$ ;J:18/5-4,2,2*0)1)2*0()p!$k!f`ZTO 4  N 47acab==~|}qrdjEM.4CJ D7/4,4+2)(s#ZYYYYYYY[WQL +*1 ,AB?>N G  6 { +/\^{ywuusutXY./"$()W[TYHN=E09*3#+ (/(.'-%-&-' %!*&%% =,c#$k''n**h'&h&'g&(h&'g&'h&&g''i'(i'(m*)ABIJKLEFA [^c_UVVVVVUWW`,$/'/' <?6-4+2*)r!SQRQQQQQQRWSNwvji ,,+22QH  = 12gg}{zxxuur[Z``-/)+&'@Bfi^aSWGN8B % %*+0'.)-#-),#"+!)( & K+c#$h%&^!!]!!^ "_ #^!"`"#_""_"#`"#`!"`"#e%%==JKEE,& * Y]XMMMMMNMMMNNY.}&.&< 14,1)%nKJIIIHHIIIIJPLlk¿33 ,++lilkjhhgII! \  R| G 76kl}~{{wutvt}}[]st<<2602,-,.`coreg[^MR !)/*.$-'-$-"*"*%%  Z*`"!VTSUUTVUUUVUVW45DF[@ XOD D E E D E E E E E F F E S-}%N;#3+YB C B A B B B A A A A A A C J 9yBBMKKJtr,, ,.-QPUTOO+*z05 c m O :9NMUU[[`ahgnjnopopnmnlljieecacdljvu}ihRRDE>@;=7833.09;yzyympNQ19+2)-$-*- !+%)$"(  k' KJJIKJLLLMMLLNMNh4)n4  B < < < < < < < < < < < < = = >LK7S : : : : 9 : : : 9 9 9 98 8 8 ;Q! ,,,+,, ,:866I 5 t _ V %%+-$&(*-/.25579>>ABHHMMRRVWZ\^]`^\]\\WZUVQRMNJKFGCB>>794604XY7;!,1?D09*0$-%#*")%$ 3 \ ^ b h rtuuuu vuuuvw j32 %#%#&%('*',(-)-*-*-+-),(+(*(+)+*$#, j$% , = Q V}&'   "$&'**-0013679;?ADEHILKMMLLLKIHDFAA<=9:7:xxrt+-&'!#;@FM;B/6")"*$,%( Pc p { ~      Z1c$%'(+,---.-.---.-.---.-.---.+++, !- C  B ! Bj           ! %#''*(,-/0325676:7:89@A@D.1+.'+#% "!4:GMEJ17#,#)%% p  N1 "-,.////.///./././//./././-/./.-- * G  s *O ] b e k p u y ~          !"#$%#''($)')%'"$" #%)#%'+#)#  ) G=KAKBLBKCMCLDLFMDODNFNFOGRGQGNH1*G7 GHnpnononporoqprprptqrrsrtrustsvkm] + M  9 */6;>DIM S V [ ` d[*R,N"JNW^ k x        { | }   , #aI?LCLCMDMDLDLENEOFOGOGRIPGQI>6+y$C< l'(NNlmlpmnnonqororpqprqrqrqrrtklGHN5 C } W I <1 &     $ * / 0!;JJkk p p^^LL98(005 9AM\npppqllk g h c d h l p x ~      8 I "cEG?G?G?H@IAJAIAKCKB@:/)+x$@: m&'q*,XXfhggfhghgjhkijikikjnkmegEF@AM3  E M QTXTSSTRPM C ++PO[Zz zz zddSSBB10% JTVUVTY[]]]ZYYVTR Q O O S V IM"c?8@8C;B:B:DG?;5.|)/~(*x#>7 l&)p**|02VW_b`daaacbdbececece^_CE@B@AL.    % ) 4G L KV[W < &%BAQQ]]  }xwomMK'33879>??A??CGHIIHHGF @ +G LQ$e;4?6?6?6?6?6?:@8:2,y'.z'/}(+w#>5 k&'p**t,,~22RTZ[Z[Z\[[\]\^\_X\BD?@?A?@L-    & 9 J00GEKKbb~ ~f eT RDD         "&()( ( $   G LQU,t%90809191:1:45-+v%,x%.z%-}((v#=4 j&'n))s--v//~54MLSTTTTUUUUUTTAB>>>??@??L-  T B98FFJJgg#{zml|{HH      G KPUZ*p$3~+3~,4,5.0{)+r$+u$-w%-y&.|'(t"=4 j&)m))r,+w..{1156IIMOMNNPNOCE=>>?=?>?>?L* D{B''CB;;JJml(~~"KKG K PUY^*m#.w'/w(-t%)p")q#*t#+v%,x&-{&'t"=1 j&'m((q,-v./z103587FIGHGHAA=>=>=>=?>?>?J*   Zy 450AA//QQp o!-$ !$2$TTF JOSY^!a'k*m#(l!(n")q!*r$,u$-w&-y'(s!<' i&%m')o,,u..x01~3566;=>=>=>=>I%  / fo *3*??--//RRv v%1( ! %=4$SSE JOSX]!a%e%g'k (m!)o")q$*t$,v%-y%)r!< i%%l()q++u..x11|356589:;;<;<<><=<=<>===>J E eo5%5MM 44YY| |*4,$z x{ {'FG4$XXF JNSX] _!^ ^%e(l!(n"*q#*s$+u%-x&'r!; i%'l(*p+,s-/x00|3356~57}5767:<;=;<<><=;=<>I~}`_u$#+ ^ Ow@#@UU55ZZ~~0;1( ~z w.NH6%[ZF JOSXYVWWW"c(n!)p#)s!*u$+w%(q!; h%&j((o**s-,w//z31u00r/.s//s/0s0088;;;;;<<<<=GTR]((6qnGFU  w ?FFQQ#!=;_^6?5-$0E7%]]E JOSRNNNOOO!`'n!*r"+t#+v%&p 8 f$%k')o)+s--t..k**j))i))i)*i)+i)+k++67:;;=;<;>cc:C:2( yy/7&\\E JNMGFGG GGGFQ(o"*s#+v$'p , e$%j')o)+n+,a$$_#%_##_#%_$%`#&_$#_$#b%&66:;:<;;Efeqih ,+*DAQpVAA66GGDBed@G>6(%) xx*&`^  E JG> > > ? ? ? ? ? @ ? K)o#,t%&nCU1| d$&i&(i'(WSSTTTT TTUZ "46;::;E#a_{99 ,,*^]QO/.p c p 8877PPQQkkELC3,5)  ~ut ``  D A 7 6 6 7 7 7 7 8 8 87 7E)q"&mB)i e$%d$%MKJKJKKKKKJKNk)+:;6? 277A@sr+, ,/-KJNMHG//< ! [ ,,:9UT``nmJQ@0A8/&{ znmii   3 .. . .0 0 0 0 0 0 0 0 0 0B %k)S!U ]!"EA@AA@AAABBABBAg'(5DH%$,+-,,+ ,6698YX %%77TSkkttPO7MF=6/'wwdd~ {mj  %4tA{EEFFFFFEFFFJI!R"MNOQWYYZZZZZWWWX_ !`'( ,  Y $$::VVoo} |N?UTLD<5-%sr]\dc  4HKSXXXXYYYZZYXXYB O@ t w b  M ####88TQnn6/'w tff>>'JSYZZ[\\\\\\\\\ZY9MX b  H  o 8 8W Wtt|wvl lc c[ZTSLKEE=<:933--+W)s)t*t)t)u)v)v+v*w+w,x,x+x,x,x+y"i-r"X-#8.8.7.8.8.7.8.8.7.8.909/:0:0:16- O  1076;:977733//++(($$  /)[B}B~AADCCCDDDEFF?~"V)h$^ #cNFPHPHPHPHPHPHPHPHRISKQIRJRLRJ3, 6&. /f'Yx=x?x?y?z?z?z?|?|?}@|E>E=E?E>H@F>;4#h#h 3 - /d 3k;x,a3j3j4k4l6l6m4m6n1j#U S!TN$^P JMP$b>6?8?8@9@9@8@:A|G"N"P LJLM O P QL#[: HKMQSWY'f*k"(g #a"b"b"c"d"d"e 1, .c 2h5n8s;x>}AFHIJKMNO QL$Z1 H JMQSWY \$a!`"`!a"c"c#c!d"d 1, .c 1h4l8r:x>{ABCHIJLN O PK$Y ! GIMPSVX ZZ!]"`#`!a"b!b"c"d 0}OO]* -c 1g4m7q:x={=yGXmxnbYRLMOTZclq|**,0:CL[m|vodYMJIIQZbiy.028AJR]o{~~|uobXNFDIT[gr~06:?HOT^l}wstrrtx~yo`TIDCN]jv08>DJOTZczoeccchmxraRGBKZl}zz.7=CJQRW\s{dUPOW`p}jWKJUjwtv+49?HMTW\pz_OHHS_vwbUSevsw#-6>GPX\cmxaQEDOdn^\o}*2>FR\fqw~iWIMSiva]p&1;GT`mwp_TQVks^Wi%0>JWes}yh\VXjeMGRov&6CQao|~maYUe}mJ4.7S|}W(XrgRDFTop^ !/>Tdv^2"(/Eh}gbjx{} +P]tI'7G\wueZTf %7LZbkuwd@##5H\v|vg\NIJ[y /Qr}skkh[F/&,A^xpbTF=9>Qh ?|obc`UI@F\|lZG8,,4CTlJv]_glmmt{bK8+).8BRf} Ht\`q}bI:2-28AOav8pdYezoWD957eo&Cdf,Ff}a.Ikv[0KmmQ/KkcE*DcsP7crack-attack-1.1.14/data/font0_cu.tga0000644000175000001440000001007410132356544017012 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2UqqUUU8U88qU8UUUUUUqUUUUUUUqU888Uqqqq8q88UUqqUUUUcrack-attack-1.1.14/data/garbage_lightmap_1.tga0000644000175000001440000004007410132356545020776 0ustar webbsterusers*@@ (CREATOR: The GIMP's TGA Filter Version 1.2 $0=J]weP=0#  %2>MapYD4% &2>Rfz`I8' %1=Rh~dL9' #0=Ri}dL9'!.=RhyaJ6%  *9NerZE4#  &4J`zjR@/!  ".BWpycL;,  (6MenXF6' ".DYpv`N?0%  %6Lbz~gUD9.$  +;Rfm]MF?840-& &1AWnqaWONLJIHF@;63/) $06632+('*6FWpsd[[[_`a`_[SPOKFA '7BFFDB?92019HWk}td[^ckqrutple``]`[%8BHKIIIHFA=99?IWjxpbZ]dpzwrqqtq2BHIMNNOONMHDA>@IUap{{fZOTaoz%:FMMOSUVVSRROJD@AENYcny~qaTJKSfx,?JOPTZ^aca][YUOG@>AHRY`ipx~uk^RH@EThx2FPSUY`lrusngb]YRI?;<@HMRW^bfjptvxyxwutrlbYOD=CSgy9JSY]_l{zogaZSI=568APfy=MX`grznf^VD6/,/26:>>>ACIOV`jqvxxtngVDBMarAS_jxsi_UF1&$&*-/1349BKYgox|}xq`MGM[k}AUcuvh_Q>)!$')+3>PbowzgVPS\ftAWg}uh\L6 #/@Vgszpd\^`bk{=Tg~sdWB,,CYjvvnkhfjx7Pd}n^K7 +E[kxyspjn}0J_wyeT?( )D\lz{vuw&@VllYI0$AVhz~{z~7Lbso\N9  :Rfx}~mgmz,DXfrp^Q?#1K`s|p_W[k~!:MZdp|l]QB&(BXl{{lZOO^q /ER^gpw}hZQB' 8Octuoryp[OMWhx%;LYemntqaWN@& ,CXhuriehpzwcWRWco 9IXepqpuueZRK:% "6K[jsx|zwoc\VW^n{j]VYag$:O]ix|{|sd[UQI8$ +>>ACEFFEDB?;84/,'!*DYj}o]LB92+(&+4>BCHMPNKB5! ";P_n}vfWKHJRY`ipx~zodWME<2016?KOQXbie`WB) 2GWcpxl_TPPYcny}paTH=76# '6COZ`fifb^XUW]jxp`LB=:47DZujM0  ,8AHMPNLKNU]k}t`MC:31;Tpx`>" %-379Rfz`I8' %2>MapYD4% $0=J]weP=0# crack-attack-1.1.14/data/font0_cv.tga0000644000175000001440000001007410132356544017013 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2qU8UUqUqqUUUqqqUqUqU8UqUU8qUqUq8888q8qqU8U888UUUcrack-attack-1.1.14/data/garbage_lightmap_2.tga0000644000175000001440000004007410132356545020777 0ustar webbsterusers*@@ (CREATOR: The GIMP's TGA Filter Version 1.28XrkG"  =\thD!  ;Xnb?  4Si}zY8  /KbxqS5  (7G[sgJ5,(#,?EHWmw^HA=;861. ;JGDOe{lXTNSVVQMH-.-2?Tpvd^^dmnpoie '5H^tofhs|~|y $3@Qcv|z *6DSaqr "-:CMWbo{w  )4>FOW`nyy #.7AHR[gv %/;DR_n #.:FWgx !-QknM@WtqP?\xrTB^zsS@Ywt{pS;QnvsrR1D`{}pS'4LknT'7PmoT#4I]ltzysiqnS(6@HOSROXo}hK '.9?BJ]yw_@ '3@GQWXVW\d   ,HgwT:/06CKSXai ('"",A^yeE0$$.7DMSW 8E?9BXpyW6& &/48<+- #%vhZ[[^ekonjbaafrveTC5( kWJEBFLPTRNLRYf{~kZJ9/'"z`K@::<@BDCGMVcyp]I<4-'#jWF<77:>>CEPYinYI<5/+&x^PE=:;>BIOWbrxcQB930+$jYOHDDGJQXcqjVE;62-&luoaXRMMPT[do~lWF;51,%S[bnzzph_\XVZ_dlykTC91-("CGNSYakuxtokhceefimuzeN>2+*&!8FOZbksy~n[H5%  *29ALXgvtfSC1# (6@KZl|pbRD8,  #;HVjvfWLC8," ?Nbx{ocYSI>4( CTk|rmdXNA6+!G]tuiZNC7-#!KczveXNC;0,Og}qcXPF?9TjnaYQJDXn|mc[SOZtznd]Zbx{oihlxxw~xvzocrack-attack-1.1.14/data/font0_cx.tga0000644000175000001440000001007410132356544017015 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2q8qU88q8UU8U8UUU8qUUUUqUUU8UqU8qUUUUUqUqqUq88UU888Uqq8UqU8U88Ucrack-attack-1.1.14/data/garbage_lightmap_4.tga0000644000175000001440000004007410132356545021001 0ustar webbsterusers*@@ (CREATOR: The GIMP's TGA Filter Version 1.2Octk]PM/.."_qwnlbT?440i{ynnnfP>A@mznosumMQOkynqv~^a\awos{ok`N|tqwwlZ;nqt{{fQ5Xvwx}ZH0Hiw}rNC)0 'Jhzlk\A4# 3Tk|k^I:)  7Xkz~\LB3" :Yn~|gUNA0 >c~tdZPC1!  )Opsw|i`TE7(!  &Ef|lam{|rdVH=2(:92)*Gdzse_ZWcbdl~~wj\QF>1 STNC3+4G`pwutmgff]Z^]aly~si`WM;(lnkaOBAIXbeijfbZUTRZcktzsmeXE-{|m^SSV[]][YWQKHHMZhx}yvl^J.vjb_b\UTROMIEDEL[nysl^H+}~xvn_VQQOOMJHHOYjwogY@"tk]VUTTTRQSYcsymaO6f{|ld```b``bgryjZF+Vi{~vttvwvvzxgW@$EWiz{{ziW@$9DUduuklvn[F+-6AO]jpfhrtdO4"*2;EPupjko~~mZB'#)18W||ojloyziT9 5dujgkowvcJ Npcbfmvs]=znb_emyp=o|k`]cmz !Hqykbben{ (O{tjdejp +T{y{rlhcfox~yz~ *S|zso|wvzqhfehimxslku )Ow}p{ve]^dinrqe`fmty{s+V{{~o`[_gp|{v`ZY[]chf ?goc]cp}q`VPNKOQN :Yotifn|{fUPIC?<4 7Xkz~tr}~^OH>5)  3Tk|k`L@2" 'Jhzll]C7';^u}klgU>0+Jj~qmkeI;* 4Yp|ukWB4)A@_qwnlbT?440Octk]PM/.."crack-attack-1.1.14/data/font0_cy.tga0000644000175000001440000001007410132356544017016 0ustar webbsterusers* (CREATOR: The GIMP's TGA Filter Version 1.2q8qUUUUUU8Uq8UUUUUUqU8q8UqqU8UqUUcrack-attack-1.1.14/data/garbage_lightmap_5.tga0000644000175000001440000004007410132356545021002 0ustar webbsterusers*@@ (CREATOR: The GIMP's TGA Filter Version 1.26Rr{R23NoxQ0 /Eb{X9* &6OhnUC;3*"(/+A[~{hT 2Mw 'Ep ">j9e,R-S)M}zw!BqjYU`w :bqTB=Jc 2PqhK83@[}0Kf|{dM=9F^}o ":Rl}yhVJHRgypfWH 1Iksd[Y`n~vdTD8+ *Be|snr}wqr|eJ9)3Xsd[]j~rR9%!0"4Vux{qE )..)! @jzynC  2Zzv}hA *Pzvqta\bq_: $DmngwnN;5BZxwQ0   9^{_[ewsR3$Dib@&    ,MukNHQ`oraC$ 6alK/ *6;80'" ;b~X?8R_aVKA2$  +Q{qP>759IPOE3KnvX?) /KkwfU?+ &JwjSE;75BJNHA;=H]wr[D7+#0Pv}dL5"  .QwpdWLJJHMPPLJLVduui[SIA;5+ ,LstZC2&".Ge{tnicZXWSOOR[eloqkda[Y[ZZ[ZTP #Agn[K?<VqwR2 (R4444444444444444444444444444444401 c   4444554444454444554444454444564444( ggggggggggggggggg>Q4645434644444645434644444545434501 b    4436444445444445444445444445444445( ggggggggggggggggg>Q4444454445454444454445444444454401    c 4444444434444444444434444444444444' ggggggggggggggggg>R4444443444444444444444444444444401    c 3446444446443445444446443445444445( ggggggggggggggggg>Q4445344445444445344445444445344402 b      4454454444454454454444454454554444( ggggggggggggggggg>Q5644444554445644444554445544444510    c    4434544444344444444444344444444444' ggggggggggggggggg>R4444444444444444444444444444444401 c   4444554444454444554444454444554444( ggggggggggggggggg>Q4645434644444545434644444545434501 b    4436444445444446444445444445444445( ggggggggggggggggg>Q4444454445454444454445444444454402    c 4444444434444444444434444444444444' ggggggggggggggggg>R4444443444444444444444444444444400    c 4445444446444445444445444445444445( ggggggggggggggggg>Q4445454445444445444445444445444402 b      4454454444454454454444454454554444( ggggggggggggggggg>Q5644444554445644444554445544444510    b    4434544444344444444444344444444444' ggggggggggggggggg>R4444444444444444444444444444444400 c   4444554444454444554444454444554444( ggggggggggggggggg>Q4545434644444545434644444545434501 c    4436444445444446444445444445444445( ggggggggggggggggg>Q4444454445444444454445444444454402    b 4444444434444444444434444444444444' ggggggggggggggggg>R4444443444444444444444444444444400    c 4445444446444445444445444445444445( ggggggggggggggggg>Q4445454445444445444445444445444402 c!!!!!!!!!!!!!!!!, - , , - - , - - , - - , - - , - %&.0././.0././.0././.0././.0././.0)*66666666666666666 - , , - , , - - , - - , - - , - ) !!!!!!!!!!!!!!!!!4?>>>>>?>>>>>?>>>5 )f)f)f)f)f)f)f)f)f)f)f)f)f)f)f)f)fCTTTTTTTTTTTTTTTTK*)*)))*)*+)++)+*)**)*)))*)*+)++)+*)**)*)))*)*+)++)+MMMMLLLLLLMMMMMMLLLLLLMMMMMMLLLLFFLLLLLLMMMMMMLLLLLLMMMMMMLLLLLLMMMM11 !ggggggggggggggggg0**44444444444444443444444444443444// jgjigihghhghigijgjjgjigihghhghigijgjjgjigihghhghigi@>@II yy !ggggggggggggggggg0*)44454444454444454444454444454444./ igijgjigiigiigijgjigijgjigiigiigijgjigijgjigiigiigi?>?II yy      !ggggggggggggggggg0*+34444644545634444644545634444644/. igihghhghhghjgjjgjigihghhghhghjgjjgjigihghhghhghjgj?>?II yy    !ggggggggggggggggg0**44443444444444443444444444444444.. jgjigiigihghigiigiigiigiigihghigiigiigiigiigihghigi>>>KK yy   !ggggggggggggggggg0**44444544445544434544445544434644/. igiigiigihghigiigiigiigiigihghigiigiigiigiigihghigi@>@KK yy    !ggggggggggggggggg0*)34464444454434464444454434454444./ igihghigiigijgjigiigihghigiigijgjigiigihghigiigijgj@>@KK yy !ggggggggggggggggg0*)44444444444444443444444444443444// jgjigihghhghigijgjjgjigihghhghigijgjjgjigihghhghigi@>@II yy !ggggggggggggggggg0*)44454444454444454444454444454444./ igijgjigihghigijgjigijgjigihghigijgjigijgjigihghigi?>?II yy      !ggggggggggggggggg0*+34444644545634444644445634444644/. igihghhghhghjgjjgjigihghhghhghjgjjgjigihghhghhghjgj?>?II yy    !ggggggggggggggggg0**44443444444444443444444444444444.. jgjigiigihghigiigijgjigiigihghigiigiigiigiigihghigi>>>KK yy   !ggggggggggggggggg0**44434544444544434544444544434544/. igiigiigihghigiigiigiigiigihghigiigiigiigiigihghigi@>@KK yy    !ggggggggggggggggg0*)34464444454434464444454434454444./ igihghigiigijgjigiigihghigiigijgjigiigihghigiigijgj@>@KK yy !ggggggggggggggggg0*)44444444454444444544444444444544// jgjigihghhghigijgjjgjigihghhghigijgjjgjigihghhghigi@>@II yy !ggggggggggggggggg0*)44454444454444454444444444454444./ igijgjigihghigijgjigijgjigihghigijgjigijgjigihghigi?>?II yy      !ggggggggggggggggg0*+34444644445634444644445634444644/. igihghhghhghjgjjgjigihghhghhghjgjjgjigihghhghhghjgj?>?II yy    !ggggggggggggggggg0**44443444444544443444444544444444/. jgjigiigihghigiigijgjigiigihghigiigiigiigiigihghigi>>>KK yy w z _^__^__^^_^^_^^_^,''000/0100/000000//1000000000//100++ a^a`_`a_a`^``_``_`a^a`_``_``^``_``_`a^aa_a`_``^``_`:9:EE oo     hghhghigijgjigiigihghhghhghjgjigiigihghhghhghjgjigiRgggggggggggggggg\ssII 3445444445443445544445443445544445!! igijgjhghigihghjgjigijgjhghigihghjgjigijgjhghigihghRgggggggggggggggg\ssKK 4444444445454444444444454444444444!! igijgjhghigiigiigiigijgjhghigiigiigiigijgjhghigiigiRgggggggggggggggg\qqKK 4345444445454345444444454345444444!! hghjgjigijgjigiigihghjgjigijgjigiigihghjgjigijgjigiRgggggggggggggggg\qqKK 4544464444444544464444444544464444!! igihghigiigijgjigiigihghigiigijgjigiigihghigiigijgjRgggggggggggggggg\qqII 4445444544454445445544454444445544!! jgjhghigiigiigiigijgjhghigiigiigiigijgjhghhghigiigiRgggggggggggggggg\ssII 4543454344454544454344454444454344!! hghhghigijgjigiigihghhghigijgjigiigihghhghhghjgjigiRgggggggggggggggg\ssII 3445444445443445444445443445544445!! igijgjhghigihghjgjigijgjhghigihghjgjigiigihghigiigiRgggggggggggggggg\ssKK 4444444445454444444445454444444445!! igijgjhghigiigiigiigijgjhghigiigiigiigijgjhghigiigiRgggggggggggggggg\qqKK 4345444444454345444444454345444444!! hghjgjigijgjigiigihghjgjigijgjigiigihghjgjigijgjigiRgggggggggggggggg\qqKK 4544464444444544464444444544464444!! igihghigiigijgjigiigihghigiigijgjigiigihghigiigijgjRgggggggggggggggg\qqII 4345444544454345444544454345445544!" jgjhghigiigiigiigijgjhghhghigiigiigijgjhghhghigiigiRgggggggggggggggg\ssII 4543454344444543454344454443454344!! igihghigijgjigiigiigihghigijgjigiigiigihghigijgjigiRgggggggggggggggg\ssII 3445444445443445444445443445444445!! igijgjhghigihghjgjigiigihghigiigijgjigiigihghigiigiRgggggggggggggggg\ssKK 4444444445454444444445454444444445!" igijgjhghigiigiigiigijgjhghigiigiigiigijgjhghigiigiRgggggggggggggggg\qqKK 4345444444444345444444444345344444!! hghjgjigijgjigiigihghjgjigijgjigiigihghjgjigijgjigiRgggggggggggggggg\qqKK 4544464444444544464444444544464444!! igihghigiigijgjigiigihghigiigijgjigiigihghigiigijgjRgggggggggggggggg\qqII 4345444544454345444544454345445544!"rtvx  C@CA@AB@BB@BC@CC@CC@CB@BB@BB@BC@CC@CC@CB@BB@BB@BC@C 3@@@@@@@@@@@@@@@@9 xxxxxxxxwwxxxxxxxxxxwwxxxxxxxxxxwwHH..xxwwxxxxxxwwxxwwxxxxxxxxxxwwxxxxpp ! ! ! ! ! ! ! ! ! ! ! ! " !S'%''&''&''%'&&&&&&'%''&''&''%'&&&&&&'%''&''&''%' 88898888898888898 J&]&]%]&]&]%]&]&]%]&]&]%]&]&]%]&]"SPQPQPQPQQQPQPQPQPQPQQQPQPQPQPQPQQQ01LMMLMMLMMLMMLLMLGMLLMLLMMLMMLMMLMM1 XVXigihghhghjgjigijgjigihghhghjgjigijgjigihghhghjgjZYZ    Rgggggggggggggggg\Q4444454445444444454445444444454402 4544454444444544464444444544464444!!XVXigiigihghigiigijgjigiigihghigiigijgjigiigihghigiZXZ Rgggggggggggggggg\Q4445434544454445434544454445434500 4345444544454345444544454345444544!"WVWigijgjjgjhghigiigiigijgjjgjhghigiigiigijgjjgjhghYXY Rgggggggggggggggg\R4444454345434444454345434444454302 4543454344444543454344444543454344!!XVXigiigiigihghigijgjigiigiigihghigijgjigiigiigihghZYZ    Rgggggggggggggggg\Q4644444644444644444644444544444511 4445444445444445444445444445444445!!XVXigijgjigiigihghigiigijgjigiigihghigiigijgjhghigiYXY Rgggggggggggggggg\Q4545444444444545444444444545444400 4444444445454444444445454444444445!"WVWhghigiigijgjhghigihghigiigijgjhghigihghigiigijgjYXY Rgggggggggggggggg\R4444434544444444434544444444434500 4345444444444345444444444345344444!!XVXigihghhghjgjigijgjigihghhghjgjigijgjigiigihghjgjZXZ    Rgggggggggggggggg\Q4444454445444444454445444444454402 4544454444444544454444444544464444!!XVXigiigihghigiigijgjigiigihghigiigijgjigiigihghigiZXZ Rgggggggggggggggg\Q4445434544454445434544454445434501 4345444544454345444544454345444544!"WVWigijgjjgjhghigiigiigijgjjgjhghigiigiigijgjjgjhghYXY Rgggggggggggggggg\R4444454345434444454345434444454302 4543454344444543454344444543454344!!XVXigiigiigihghigijgjigiigiigihghigijgjigiigiigihghZXZ    Rgggggggggggggggg\Q4644444644444544444544444544444511 4445444445444445444445444445444445!!XVXigijgjigiigihghigiigijgjhghigihghjgjigijgjhghigiYXY Rgggggggggggggggg\Q4545444444444545444444444545444401 4444444445454444444445454444444445!"WVWhghigiigijgjhghigihghigiigijgjhghigihghigiigijgjYXY Rgggggggggggggggg\R4444434544444444434544444444434500 4345444444444345444444444345344444!!XVXigihghigijgjigijgjigiigihghjgjigijgjigiigihghjgjYXY    Rgggggggggggggggg\Q4444454445444444454445444444454402 4544454444444544454444444544454444!!XVXigihghhghigiigijgjigiigihghigiigijgjigiigihghigiZXZ Rgggggggggggggggg\Q4445434544454445434544454445434501 4345444544454345444544454345444544!"WVWigijgjjgjhghigiigiigijgjjgjhghigiigiigijgjjgjhghYXY Rgggggggggggggggg\R4444454345434444454345434444454302 4543454344444543454344444543454344!!XVXigiigiigihghigiigiigiigiigihghigijgjigiigiigihghZXZ    Rgggggggggggggggg\Q4544444544444544444544444544444511 4445444445444445444445444445444445!!TRTdbdebecbcdbdcbcebedbdebecbcdbdcbcebedbdebecbcdbdUTU ObbbbbbbbbbbbbbbbX~M23131212222223131212222223131212.. 1212222223231212222223231212222223 $$= $$=       $$<  %: F#J KJLLMNP PPPPPPPPPPPPOPPPPPOPPPPPOPPPPPOPPPPPOPPPPPOPPPPPOPPShn6$$<  2!B'V/f4j1i,j&l"moopq prqqqqprqqqqpqqqqqpqpqqqpqpqqqpqpqqqpqpqqqpqpqqqpqt"#2$$<      F.[6uB K F A < 6 0 + #            31BC%( $$<    'W:uK])k+g+a+Z+U+P+J+D+@+8+4+-+++++*+*+*+,+++++*+*+*+,+++++*+*+*+,+++,+*+*+*+,+*+,+*+*+*+,+*+,+*+*+*+,+*+,+*+*+*+,+*+,+*+*+*+,/.DF[\`aCE$$= +eCY0xLOOO~OxOrOmOhObO\OXOROQOPOPOROQOQOQOPOPOROQOQOQOPOPOROQOQOQOPOPOROQOQOQOPOPOROQOQOQOPOPOROQOQOQOPOPOROQOQOQOPOPOROQOQTUuw쌎PQ$$=   /"kHdFkooppoooop{pvosooopoposprorooopoposprorooopoposprosooopooosprpsooopooosprpsooopooosprpsooopooosprpsooopooosprpsuvBB%%< "kGgMvz{zyzzzzzyz~z~z|z|zzy}z~z~z|z}zzy}z~z~z|z}zzy}z~z~z|z}zzz}z~z~z|z}zzy}z~z}z|z}zzy}z~z}z|z}zzy}z~z}z|z}{zy}z~ꁃ嗘R$$< @+^@chhgghhhhygsgohmhihihjgjghhjhihihjgjghhjhihihjgjghhjhihihjgjghhjhihihjgjghhjhihihjgjghhjhihjhjgjghhjhihjhjgjghhjmo㛞v77 $$<      +eE0Y3W2T2O2M3J3F3A2?2:283232312423243132312423243132312323243132312323243132312323243132312323243132312323243132312323243266{67;$$<    $$= $$= %%< $$< $$<      yz|~~~~~~~}}~~~~~~~~~~}}~~~~~~~~~~}}~~tvWX(f ff ff ff ff ff ff ff f_ \^*3334333334333334, IIIJHIHJHJIJIIIJHIHJHJIKIIIJHIHJHJC"T"T"T"T"T"T"T"T"T"T"T"T"T"T"T"TKFEEFEEFEEFEEFEEFE* 33333333333333330????>>>>??@@????>>>>??@@????>>>>??((   **Rgggggggggggggggg\4544444444434544444444434544444444~ < yy **Rgggggggggggggggg\4444444444454444444444454444444444~ <     yy **Rgggggggggggggggg\4644454445444644454445434644454445~ < yy )*Rgggggggggggggggg\3335434544353335434544353335434544~ =  yy )*Rgggggggggggggggg\4544444544444544444544444544444544~ = yy )*Rgggggggggggggggg\4444445645454444445645454444444645~ < yy    **Rgggggggggggggggg\4544444444434544444444434544444444~ < yy **Rgggggggggggggggg\4444444444454444444444454444444444~ <    yy **Rgggggggggggggggg\4644454445444644454445434644454445~ < yy )*Rgggggggggggggggg\3435434544353435434544353435434544~ =   yy )*Rgggggggggggggggg\4544444544444544444544444544444544~ = yy )*Rgggggggggggggggg\4444445645454444445645454444444645~ < yy      **Rgggggggggggggggg\4544444444434544444444434544444444~ < yy **Rgggggggggggggggg\4444444444444444444444444444444444~ <    yy **Rgggggggggggggggg\4644454445444644454445434644454445~ <   yy )*Rgggggggggggggggg\3435434544353435434544353435434544~ =    yy )*Qffffffffffffffff[4433434443434443434443434443334443|< ww      6@@@@@@@@@@@@@@@@7 !!!! ! !!!! ! !!!! Maaa`aaaaa`aaaaa`V wwxxwwwwwwwwwwxxwwwwwwwwwwwwwwwwwwGG  ! !"! !!  ! !"! !!  ! !"! S   987677?=PP2#$T**`)*W 2)(gH&'P.-^88k !!I/.b;9s//Y6,+j&'U0/`-11z4z|<|  BB7}7>~>EE " @B?ADDs>@  VggggggggggggggggX3444454435343444454435343444454435( |     ss 3534354345443534354345443534364345!!U'%DD-TVZ67 11{)TTRR+-[""O ;KKABr('^ZZAA//V 45dCBt&&G00j2DCz-.Q""Q6/ :9f_+_((H'H: :99 7NN??-!]42F)(PO JJI&&R01WW VggggggggggggggggX4444444444444444444444444444444444' | ss 4444444444444444444444444444444444!!C#%n<yJJTV5d55JJNN`>@VggggggggggggggggY4444553446444444563446444444563445( { ss 3444444445463444444445463444444445!"B##3hAB*H12%54nZY;;b$#D;4GHh;a+HEcrH!!  ++H1H1ֆPsPNMgiZZ]CD=-. gidd VggggggggggggggggX4434544434444444444434444444444444' {  qq 4444444444444444444444444444344444!!^anqce  DDxNKo ;9ZEEd",)(C87V75Q11D)&%6++F=.2@2o@B=&& C,. fh%X9;ehjlK77VggggggggggggggggY4446444444454446444444454446444444( | qq 4345444544454345444544464345444544!" ֤͐ SR.[Z j=jY9YlL;L=3=N|N4@41;1 X\Y<> %lnnKMaKLVggggggggggggggggX3444454436343444454436343444454435( |     ss 3534354345443534354345443534364345!!.!"mRT3()FDdBA\N1NX4%4_e +JiJRlRL^Lbub ^DDpqyz& ]FF[FH VggggggggggggggggX4444444444444444444444444444444444' | ss 4444444444444444444444444444444444!!  !VggggggggggggggggX4444554446444444564445444444564445( { ss 4444444445454444444445464444444445!"VggggggggggggggggX4445544454454445544444454445544444( {    rr 4445454444444445454444444445454444!!VggggggggggggggggX4434544434444444444434444444444444' {  qq 4444444444444444444444444444344444!!VggggggggggggggggX4446444444454446444444454446444444( | qq 4345444544454345444544454345444544!"VggggggggggggggggX3444454436343444454436343444454436( |      ss 3534354345443534364345443534364345!!VggggggggggggggggX4444444444444444444444444444444444' | ss 4444444444444444444444444444444444!!VggggggggggggggggX4444554445444444554445444444564445( { ss 4444444445454444444445454444444445!"VggggggggggggggggX4445544454454445544444464445544444( {    rr 4445454444444445454444444445454444!!<HGGHGGHGGHGGHGGH=$$$$$%$$$$$%$$$$$%$$$$$%$$$$$%$$$$V l ll k lk l ll k lk l ll k ` OO $#$%$$$$$%$%$#$%$$$$$%$%$#$%$$$$$%]3 =>>=>>=>>=>>=>>=5 1 >>>>>>>>>>>=>>=>7 KKKKKKKKKKKKKKKKK-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA))++45434544554445434544554445444544-.*+44454444445644454444445644454444/. ggggggggggggggggg> +-54454446434554454446444554454446--]]nn*)44444644455444444644455444444644// ggggggggggggggggg> ++34444434544434444434544434444434--FF**44444444444444443444444444443444.. ggggggggggggggggg> ++44444546444444454446444444454446-,TT^^*)44444544454444444544454444444544.0 ggggggggggggggggg> +-36344444454536344444454536344444-.??)+44363434444644363434444644353434.. ggggggggggggggggg> ,+44444444444444444444444444444444--88**44444444444444444444444444444444// ggggggggggggggggg> ++45434544554445434544554445444444-.vv*+44454444445644454444445644454444/. ggggggggggggggggg> +-54454446434554454446444554454446--**aa*)34444644455434444644455434444644// ggggggggggggggggg> ++34444434544434444434544434444434--@@**44444444444444443444444444443444.. ggggggggggggggggg> ++44444446444444444446444444454446-,IIdd*)44444544454444444544454444444544.0 ggggggggggggggggg> +-36344444454536344444453536344444-.)+34363434444634363434444634353434.. ggggggggggggggggg> ,+44444444444444444444444444444444--*)44444444444444444444444444444444// ggggggggggggggggg> ,+45434544554445434544554445444444-.*+44454444445544454444445544454444/. ggggggggggggggggg> +-54454446434554454446444554454446--*)34444644455434444644455434444644// ggggggggggggggggg> ++34444434544434444434544434444434--**44444444444444444444444444443444.. ggggggggggggggggg> ++44444445444444444445444444454445-,*)44444544454444444544454444444544.0 ggggggggggggggggg> +-46444444454546444444453546444444-.)+34364444444634364444444634354444.. ggggggggggggggggg> FTTTTTTTTTTTTTTTTH$$$999999999CTTTTTTTTTT[NMNNNNNMj++K )f)f)f)f)f)f)f)f)f)f)f)f)f)f)f)f)f=YYXYXYYYXYXYYYXYXYYYXYXYYYXYXYYYXY88666 888111 DHIQQ11^^ppppppppqqppppppppppqqppppppppppaa;;; I[[[[[[[ [\[[bd d 3, \[[[[ [\[[[[ [\[[[[7 =================&_ ]&'KMAJPP J! N !39:CCNN^''!78XZ\^~33 *_ahihifh 666WW$$ | ;0(    ^gggggggggggggggggA 9;cfoqln:STorJJ K!"WYjm.i-/`d]^ G RTmooqKLHnqhj@N"$dfoqorors11I UW ;=:|~ce _a}~1kl_` OQk67-qq~tvD!"KK | ]gggggggggggggggggAD$%O++} mpnn TTikLMXYa`z} HIUVtv B!`11" {       ]gggggggggggggggggA  su]^ o>=SU{}WWK**ꄇL++fhl=>ij=##222 "" {  ---%   ^gggggggggggggggggAhiy{~JL <$#X66npUW tDF폒ru4 cfVVaa |     ^gggggggggggggggggAabK/.̀U54 *xzTU8#$\ác=>^`%<<__88 |            ]gggggggggggggggggAeCCퟡ<((ڑ͈̇"ӎ  ؎[_zQQV79cABWZqsʆ_>@xOPCC |  ]gggggggggggggggggA6%%ߛcEG_BBdGG ̌뤤 >+,F12z{x|}VWӑ . km@--9')#~oq Ώ |  ]gggggggggggggggggA  詮 /!"⣧ۡ7(' `FI{}*tUVM79  לprǑࣧ;,,4&' {         ]gggggggggggggggggAȘK8:-"#ݨϞ* K89“fiÔʘkRRR==tWY {     ^gggggggggggggggggA&|㶻/#$添B22w]^D66 ݱҦ౶dORԨ eMNrw |    ^gggggggggggggggggAXGJ2)*)""ṽC56ڳ`MNĠ!jl.%%u`cx{ |           ]gggggggggggggggggAjZ]vcdЯK?@gVWB78y|G<= >45|~qq``` | ( ]gggggggggggggggggArt YLMQFG4..9246/0701*%$RRRZZZ | &.;- ]gggggggggggggggggAν!VLNwyòdZZǸeZ]~QIJ|~/++HAE1,.ttyyRRRXXXZ q q q q q q q q q q q q q q#&&& q q q q q q q q q q q q q q q q qD KKKKKKKKKKKKKKKKK0v0,,&$%B>@SMO 400C>?:67C>?<89    UUUzzz +++ MJLHEG D   J ! (&(cabQQQhhh--- 4   n =  :::]]]]]]]]]SSS&& ]]]]]]]]]]]]$$$ a ! $"' &  W / L[[[[[[[[[[[[[[[[N%%%$................................))tv ...../...../...../...../...../....v  "#&)6:W\^bRZHPBG:B.7!  w C  VggggggggggggggggXWW*+44444444435544444444435544444444/. 4444434445444444434445444444434445!! @ (+DF}~svim]dRXHNAGAF&.  d 9  VggggggggggggggggY00ee*)34444644455434444644455434444644// 4445464444444445464444444445464444!! W 45y}oseg\_JQ@E!(.619,2! z N ' VggggggggggggggggX**44444544445544444544445544444544/. 4345444445454345444445454345444445!" " a MLwxcg(,5=;F:D;B')$(7;"   c >  VggggggggggggggggXBB*)44444444454344443444454344443444.0 4444444543444444444543444444344543!! 1 p"$bbrt+-! HLBH=D:B7;9>;@7;   s S 2VggggggggggggggggY{{ )+34464444444634454444444634454444.. 3544454345443544464345443544464345!!  9 w'*nlsrPQ.1(*X^SZHP@G:A;?;>:A37*2%   a > "VggggggggggggggggX KK*)44454444454444454444454444454444./ 4444454444454444454444454444454444!"  D -/ljLN03kngk\aPW4<-6;@;?,3,4-6'.)2! (    m M 0  VggggggggggggggggX>>oo*+44444444435544444444435544444444/. 4444434445444444434445444444434445!! 4  N 47acab==~|}qrdjEM.4CJ@;=7833.09;yzyympNQ19+2)-$-*- !+%)$"(  kVggggggggggggggggX*)44444444454344443444454344443444.0 4444444543444444444543444444344543!!5 t _ V %%+-$&(*-/.25579>>ABHHMMRRVWZ\^]`^\]\\WZUVQRMNJKFGCB>>794604XY7;!,1?D09*0$-%#*")%$ &]-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o'_I[\\[[\[[\[[\[[\[R `b`a_a_b_b`b`b`a_a_b_b`b`b`a_a_b_b:;[\\[\\[[\[[\[[\[[:= Q V}&'   "$&'**-0013679;?ADEHILKMMLLLKIHDFAA<=9:7:xxrt+-&'!#;@FM;B/6")"*$,%( C  B ! Bj           ! %#''*(,-/0325676:7:89@A@D.1+.'+#% "!4:GMEJ17#,#)%G  s *O ] b e k p u y ~          !"#$%#''($)')%'"$" #%)#%'+#)# XXiiiijjjjjjiiiiiijjjjjjiiiiiijjjj[[""KKii .q99999999999999993~ tttttttttttttttttFVVVUUVVVVUUVVVVUU7M  9 */6;>DIM S V [ ` d[*R,N"JNW^ k x        { | }   ,rrRgggggggggggggggg\4644445645444644444645434644444645~    bC } W I <1 &     $ * / 0!;JJkk p p^^LL98(005 9AM\npppqllk g h c d h l p x ~      8Rgggggggggggggggg\3444454344443444454344443444454344~    c E M QTXTSSTRPM C ++PO[Zz zz zddSSBB10% JTVUVTY[]]]ZYYVTR Q O O S VRgggggggggggggggg\4444444544454445444544454445434544~        c   % ) 4G L KV[W < &%BAQQ]]  }xwomMK'33879>??A??CGHIIHHGF @ + Rgggggggggggggggg\4445454445454445454445454445454445~ b   & 9 J00GEKKbb~ ~f eT RDD         "&()( ( $   Rgggggggggggggggg\4454435544444454545544444443545544~ c T B98FFJJgg#{zml|{HH      KKPPRgggggggggggggggg\4544454444444545454444444545444444~     cD{B''CB;;JJml(~~"KKBBrrss66**Rgggggggggggggggg\4644445645444644444645434644444645~    b  Zy 450AA//QQp o!-$ !$2$TTRgggggggggggggggg\3444454344443444454344443444454344~    c / fo *3*??--//RRv v%1( ! %=4$SSRgggggggggggggggg\4444444544454444444544454445434544~        c E eo5%5MM 44YY| |*4,$z x{ {'FG4$XXRgggggggggggggggg\4445454445454445454445454445454445~ b ^ Ow@#@UU55ZZ~~0;1( ~z w.NH6%[ZRgggggggggggggggg\4454535544444454545544444453545544~ c  w ?FFQQ#!=;_^6?5-$0E7%]]Rgggggggggggggggg\4544454444444544444444444545444444~     c DGG@@66>>cc:C:2( yy/7&\\Rgggggggggggggggg\4644445645444644445645434644444645~     bpVAA66GGDBed@G>6(%) xx*&`^  Rgggggggggggggggg\3444454344443444454344443444454344~    cc p 8877PPQQkkELC3,5)  ~ut ``  Rgggggggggggggggg\4444444544454444444544454445444544~     c ! [ ,,:9UT``nmJQ@0A8/&{ znmii  Rgggggggggggggggg\4445454445454445454445454445454445~  bX %%77TSkkttPO7MF=6/'wwdd~ {mj  Rgggggggggggggggg\4454545544444454545544444454545544~ c  Y $$::VVoo} |N?UTLD<5-%sr]\dc   $$$$$$$$$$$$$$$$   M ####88TQnn6/'w tff>>  H  o 8 8W Wtt|wvl lc c[ZTSLKEE=<:933--  1076;:977733//++(($$  ,,,,,-,,,-,,,,,,,-,,,-,,,,,,,-,,,-" FWWWWWWWWWWWWWWWWN3446443446443446443446443446443445( Rgggggggggggggggg\5443554444445443554444445443554444' Rgggggggggggggggg\4445544444454445444444454445444444' Rgggggggggggggggg\4444563444454444563444454444563444( Rgggggggggggggggg\4435434445444445434445444445434445' Rgggggggggggggggg\4444444445444444454445444444454445' Rgggggggggggggggg\3446443446443446443446443446443445( Rgggggggggggggggg\5443554444445443554444445443554444' Rgggggggggggggggg\4445544444454445444444454445444444' Rgggggggggggggggg\4444563444454444563444454444563444( Rgggggggggggggggg\4435434445444445434445444445434445' Rgggggggggggggggg\4444444435444444444445444444454445' Rgggggggggggggggg\3446443446443446443446443446443445( Rgggggggggggggggg\5444554444445444554444455444554444' Rgggggggggggggggg\4445544444454445444444454445444444' Rgggggggggggggggg\4444563444454444563444454444563444( Rgggggggggggggggg\ ccccccccccccccccc'`1x0x0x1x0x0x1x0x0x1x0x0x1x0x0x1x+kTRUEVISION-XFILE.crack-attack-1.1.14/depcomp0000755000175000001440000003541010241200007015224 0ustar webbsterusers#! /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: crack-attack-1.1.14/aclocal.m40000644000175000001440000012514510241200003015510 0ustar webbsterusers# generated automatically by aclocal 1.8.5 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 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. dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page dnl also defines GSTUFF_PKG_ERRORS on error AC_DEFUN(PKG_CHECK_MODULES, [ succeeded=no if test -z "$PKG_CONFIG"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi if test "$PKG_CONFIG" = "no" ; then echo "*** The pkg-config script could not be found. Make sure it is" echo "*** in your path, or set the PKG_CONFIG environment variable" echo "*** to the full path to pkg-config." echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then AC_MSG_CHECKING(for $2) if $PKG_CONFIG --exists "$2" ; then AC_MSG_RESULT(yes) succeeded=yes AC_MSG_CHECKING($1_CFLAGS) $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` AC_MSG_RESULT($$1_CFLAGS) AC_MSG_CHECKING($1_LIBS) $1_LIBS=`$PKG_CONFIG --libs "$2"` AC_MSG_RESULT($$1_LIBS) else $1_CFLAGS="" $1_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` ifelse([$4], ,echo $$1_PKG_ERRORS,) fi AC_SUBST($1_CFLAGS) AC_SUBST($1_LIBS) else echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." echo "*** See http://www.freedesktop.org/software/pkgconfig" fi fi if test $succeeded = yes; then ifelse([$3], , :, [$3]) else ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) fi ]) # Configure paths for SDL # Sam Lantinga 9/21/99 # stolen from Manish Singh # stolen back from Frank Belew # stolen from Manish Singh # Shamelessly stolen from Owen Taylor dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS dnl AC_DEFUN([AM_PATH_SDL], [dnl dnl Get the cflags and libraries from the sdl-config script dnl AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], sdl_prefix="$withval", sdl_prefix="") AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], sdl_exec_prefix="$withval", sdl_exec_prefix="") AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], , enable_sdltest=yes) if test x$sdl_exec_prefix != x ; then sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_args="$sdl_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi AC_REQUIRE([AC_CANONICAL_TARGET]) PATH="$prefix/bin:$prefix/usr/bin:$PATH" AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) min_sdl_version=ifelse([$1], ,0.11.0,$1) AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" dnl dnl Now check if the installed SDL is sufficiently new. (Also sanity dnl checks the results of sdl-config to some extent dnl rm -f conf.sdltest AC_TRY_RUN([ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" AC_TRY_LINK([ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) rm -f conf.sdltest ]) # -*- Autoconf -*- # Copyright (C) 2002, 2003 Free Software Foundation, Inc. # Generated from amversion.in; do not edit by hand. # This program is free software; you can redistribute 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 # 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. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.8.5])]) # AM_AUX_DIR_EXPAND # Copyright (C) 2001, 2003 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. # 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 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. # serial 6 # 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]) AC_SUBST([$1_FALSE]) 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])]) # serial 7 -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 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. # 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], 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'. 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 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 case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 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. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # 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 ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //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"]) ]) # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003 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. # serial 7 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # 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. # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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. # serial 11 # 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.58])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 # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) 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 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) AM_MISSING_PROG(AMTAR, tar) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP 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([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 ]) ]) # 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_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright (C) 2001, 2003 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. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # -*- Autoconf -*- # Copyright (C) 2003 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. # serial 1 # 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 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. # serial 2 # 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 done .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 # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003 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. # serial 3 # 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 test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # 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 ]) # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # Copyright (C) 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. # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # Keeping the `.' argument allows $(mkdir_p) to be used without # argument. Indeed, we sometimes output rules like # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more # expensive solution, as it forces Make to start a sub-shell.) mkdir_p='mkdir -p -- .' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 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. # serial 2 # _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], [AC_FOREACH([_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. # # Copyright (C) 1996, 1997, 2000, 2001, 2003 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. # serial 3 # 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 # 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)]) # AM_PROG_INSTALL_STRIP # Copyright (C) 2001, 2003 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. # 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="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) m4_include([acinclude.m4]) crack-attack-1.1.14/README0000644000175000001440000000040210221442402014525 0ustar webbsterusersCrack Attack! For information on how to compile and run Crack Attack!, you are refered to the file 'INSTALL' and 'doc/index.html'. To find more information about Crack Attack!, check out the project page at http://savannah.nongnu.org/projects/crack-attack crack-attack-1.1.14/configure0000755000175000001440000104204010241200005015552 0ustar webbsterusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for crack-attack 1.1.14. # # Report bugs to . # # Copyright (C) 2003 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 Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # 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 as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='crack-attack' PACKAGE_TARNAME='crack-attack' PACKAGE_VERSION='1.1.14' PACKAGE_STRING='crack-attack 1.1.14' PACKAGE_BUGREPORT='lorien420@myrealbox.com' ac_unique_file="src/Attack.cxx" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE RANLIB ac_ct_RANLIB build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CPP EGREP BINRELOC_CFLAGS BINRELOC_LIBS WANT_BINRELOC_TRUE WANT_BINRELOC_FALSE PKG_CONFIG PACKAGE_CFLAGS PACKAGE_LIBS WANT_GTK_TRUE WANT_GTK_FALSE SDL_CONFIG SDL_CFLAGS SDL_LIBS AUDIO_CFLAGS AUDIO_LIBS AUDIO_ENABLED_TRUE AUDIO_ENABLED_FALSE DEBUG_INCLUDES DEBUG_CFLAGS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # 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 crack-attack 1.1.14 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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 X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of crack-attack 1.1.14:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-binreloc compile with binary relocation support (default=enable when available) --enable-binreloc-threads compile binary relocation with threads support (default=yes) --enable-gtk=yes/no Use gtk front-end default=yes --enable-sound=yes/no Play sounds and music during game default=yes --disable-sdltest Do not try to compile and run a test SDL program --enable-debug=no/yes Compile extra debugging info default=no Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) --with-x use the X Window System Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF crack-attack configure 1.1.14 generated by GNU Autoconf 2.59 Copyright (C) 2003 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 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by crack-attack $as_me 1.1.14, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 am__api_version="1.8" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # Keeping the `.' argument allows $(mkdir_p) to be used without # argument. Indeed, we sometimes output rules like # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more # expensive solution, as it forces Make to start a sub-shell.) mkdir_p='mkdir -p -- .' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='crack-attack' VERSION='1.1.14' 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"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. ac_config_headers="$ac_config_headers src/config.h" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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 echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 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 done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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=cc 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 -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$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 for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h 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="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking target system type" >&5 echo $ECHO_N "checking target system type... $ECHO_C" >&6 if test "${ac_cv_target+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_target_alias=$target_alias test "x$ac_cv_target_alias" = "x" && ac_cv_target_alias=$ac_cv_host_alias ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_target" >&5 echo "${ECHO_T}$ac_cv_target" >&6 target=$ac_cv_target target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # FIXME: Replace `main' with a function in `-lGL': echo "$as_me:$LINENO: checking for glBegin in -lGL" >&5 echo $ECHO_N "checking for glBegin in -lGL... $ECHO_C" >&6 if test "${ac_cv_lib_GL_glBegin+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lGL $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char glBegin (); int main () { glBegin (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_GL_glBegin=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_GL_glBegin=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_GL_glBegin" >&5 echo "${ECHO_T}$ac_cv_lib_GL_glBegin" >&6 if test $ac_cv_lib_GL_glBegin = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGL 1 _ACEOF LIBS="-lGL $LIBS" fi # FIXME: Replace `main' with a function in `-lGLU': echo "$as_me:$LINENO: checking for gluLookAt in -lGLU" >&5 echo $ECHO_N "checking for gluLookAt in -lGLU... $ECHO_C" >&6 if test "${ac_cv_lib_GLU_gluLookAt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lGLU $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gluLookAt (); int main () { gluLookAt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_GLU_gluLookAt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_GLU_gluLookAt=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_GLU_gluLookAt" >&5 echo "${ECHO_T}$ac_cv_lib_GLU_gluLookAt" >&6 if test $ac_cv_lib_GLU_gluLookAt = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGLU 1 _ACEOF LIBS="-lGLU $LIBS" fi # I don't know how to check these. # FIXME: Replace `main' with a function in `-lX11': #AC_CHECK_LIB([X11], [main]) # FIXME: Replace `main' with a function in `-lXi': #AC_CHECK_LIB([Xi], [main]) # FIXME: Replace `main' with a function in `-lXmu': #AC_CHECK_LIB([Xmu], [main]) # FIXME: Replace `main' with a function in `-lglut': echo "$as_me:$LINENO: checking for glutInit in -lglut" >&5 echo $ECHO_N "checking for glutInit in -lglut... $ECHO_C" >&6 if test "${ac_cv_lib_glut_glutInit+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lglut $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char glutInit (); int main () { glutInit (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_glut_glutInit=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_glut_glutInit=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_glut_glutInit" >&5 echo "${ECHO_T}$ac_cv_lib_glut_glutInit" >&6 if test $ac_cv_lib_glut_glutInit = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBGLUT 1 _ACEOF LIBS="-lglut $LIBS" 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 if test "${ac_cv_header_sys_wait_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_sys_wait_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_sys_wait_h=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 if test $ac_cv_header_sys_wait_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SYS_WAIT_H 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in arpa/inet.h netdb.h netinet/in.h string.h sys/socket.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------------- ## ## Report this to lorien420@myrealbox.com ## ## -------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check whether --enable-binreloc or --disable-binreloc was given. if test "${enable_binreloc+set}" = set; then enableval="$enable_binreloc" enable_binreloc=$enableval else enable_binreloc=auto fi; # Check whether --enable-binreloc-threads or --disable-binreloc-threads was given. if test "${enable_binreloc_threads+set}" = set; then enableval="$enable_binreloc_threads" enable_binreloc_threads=$enableval else enable_binreloc_threads=yes fi; BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then echo "$as_me:$LINENO: checking for /proc/self/maps" >&5 echo $ECHO_N "checking for /proc/self/maps... $ECHO_C" >&6 if test "${ac_cv_file__proc_self_maps+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "/proc/self/maps"; then ac_cv_file__proc_self_maps=yes else ac_cv_file__proc_self_maps=no fi fi echo "$as_me:$LINENO: result: $ac_cv_file__proc_self_maps" >&5 echo "${ECHO_T}$ac_cv_file__proc_self_maps" >&6 echo "$as_me:$LINENO: checking whether everything is installed to the same prefix" >&5 echo $ECHO_N "checking whether everything is installed to the same prefix... $ECHO_C" >&6 if test "${br_cv_valid_prefixes+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi fi echo "$as_me:$LINENO: result: $br_cv_valid_prefixes" >&5 echo "${ECHO_T}$br_cv_valid_prefixes" >&6 fi echo "$as_me:$LINENO: checking whether binary relocation support should be enabled" >&5 echo $ECHO_N "checking whether binary relocation support should be enabled... $ECHO_C" >&6 if test "${br_cv_binreloc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi fi echo "$as_me:$LINENO: result: $br_cv_binreloc" >&5 echo "${ECHO_T}$br_cv_binreloc" >&6 if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" cat >>confdefs.h <<\_ACEOF #define ENABLE_BINRELOC _ACEOF if test "x$enable_binreloc_threads" = "xyes"; then echo "$as_me:$LINENO: checking for pthread_getspecific in -lpthread" >&5 echo $ECHO_N "checking for pthread_getspecific in -lpthread... $ECHO_C" >&6 if test "${ac_cv_lib_pthread_pthread_getspecific+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_getspecific (); int main () { pthread_getspecific (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pthread_pthread_getspecific=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pthread_pthread_getspecific=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_getspecific" >&5 echo "${ECHO_T}$ac_cv_lib_pthread_pthread_getspecific" >&6 if test $ac_cv_lib_pthread_pthread_getspecific = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPTHREAD 1 _ACEOF LIBS="-lpthread $LIBS" fi fi echo "$as_me:$LINENO: checking whether binary relocation should use threads" >&5 echo $ECHO_N "checking whether binary relocation should use threads... $ECHO_C" >&6 if test "${br_cv_binreloc_threads+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$enable_binreloc_threads" = "xyes"; then if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then br_cv_binreloc_threads=yes else br_cv_binreloc_threads=no fi else br_cv_binreloc_threads=no fi fi echo "$as_me:$LINENO: result: $br_cv_binreloc_threads" >&5 echo "${ECHO_T}$br_cv_binreloc_threads" >&6 if test "x$br_cv_binreloc_threads" = "xyes"; then BINRELOC_LIBS="-lpthread" cat >>confdefs.h <<\_ACEOF #define BR_PTHREAD 1 _ACEOF else BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0" cat >>confdefs.h <<\_ACEOF #define BR_PTHREAD 0 _ACEOF fi fi if test "$br_cv_binreloc" = "yes"; then WANT_BINRELOC_TRUE= WANT_BINRELOC_FALSE='#' else WANT_BINRELOC_TRUE='#' WANT_BINRELOC_FALSE= fi # Check whether --enable-gtk or --disable-gtk was given. if test "${enable_gtk+set}" = set; then enableval="$enable_gtk" enable_gtk="$enableval" else enable_gtk=yes fi; if test "$enable_gtk" = "yes"; then pkg_modules="gtk+-2.0 >= 2.0.0" succeeded=no if test -z "$PKG_CONFIG"; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test "$PKG_CONFIG" = "no" ; then echo "*** The pkg-config script could not be found. Make sure it is" echo "*** in your path, or set the PKG_CONFIG environment variable" echo "*** to the full path to pkg-config." echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then echo "$as_me:$LINENO: checking for $pkg_modules" >&5 echo $ECHO_N "checking for $pkg_modules... $ECHO_C" >&6 if $PKG_CONFIG --exists "$pkg_modules" ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 succeeded=yes echo "$as_me:$LINENO: checking PACKAGE_CFLAGS" >&5 echo $ECHO_N "checking PACKAGE_CFLAGS... $ECHO_C" >&6 PACKAGE_CFLAGS=`$PKG_CONFIG --cflags "$pkg_modules"` echo "$as_me:$LINENO: result: $PACKAGE_CFLAGS" >&5 echo "${ECHO_T}$PACKAGE_CFLAGS" >&6 echo "$as_me:$LINENO: checking PACKAGE_LIBS" >&5 echo $ECHO_N "checking PACKAGE_LIBS... $ECHO_C" >&6 PACKAGE_LIBS=`$PKG_CONFIG --libs "$pkg_modules"` echo "$as_me:$LINENO: result: $PACKAGE_LIBS" >&5 echo "${ECHO_T}$PACKAGE_LIBS" >&6 else PACKAGE_CFLAGS="" PACKAGE_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. PACKAGE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$pkg_modules"` echo $PACKAGE_PKG_ERRORS fi else echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." echo "*** See http://www.freedesktop.org/software/pkgconfig" fi fi if test $succeeded = yes; then : else { { echo "$as_me:$LINENO: error: Library requirements ($pkg_modules) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 echo "$as_me: error: Library requirements ($pkg_modules) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<\_ACEOF #define WANT_GTK _ACEOF else PACKAGE_CFLAGS="" PACKAGE_LIBS="" fi if test "$enable_gtk" = yes; then WANT_GTK_TRUE= WANT_GTK_FALSE='#' else WANT_GTK_TRUE='#' WANT_GTK_FALSE= fi # Check whether --enable-sound or --disable-sound was given. if test "${enable_sound+set}" = set; then enableval="$enable_sound" enable_sound="$enableval" else enable_sound="no" fi; AUDIO_CFLAGS="" AUDIO_LIBS="" if test "$enable_sound" != "no"; then found_sound="no" # Check whether --with-sdl-prefix or --without-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then withval="$with_sdl_prefix" sdl_prefix="$withval" else sdl_prefix="" fi; # Check whether --with-sdl-exec-prefix or --without-sdl-exec-prefix was given. if test "${with_sdl_exec_prefix+set}" = set; then withval="$with_sdl_exec_prefix" sdl_exec_prefix="$withval" else sdl_exec_prefix="" fi; # Check whether --enable-sdltest or --disable-sdltest was given. if test "${enable_sdltest+set}" = set; then enableval="$enable_sdltest" else enable_sdltest=yes fi; if test x$sdl_exec_prefix != x ; then sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_args="$sdl_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi PATH="$prefix/bin:$prefix/usr/bin:$PATH" # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_SDL_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SDL_CONFIG="$SDL_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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 echo "${ECHO_T}$SDL_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi min_sdl_version=1.2.0 echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 echo $ECHO_N "checking for SDL - version >= $min_sdl_version... $ECHO_C" >&6 no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_sdl=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 echo "$as_me:$LINENO: checking for Mix_OpenAudio in -lSDL_mixer" >&5 echo $ECHO_N "checking for Mix_OpenAudio in -lSDL_mixer... $ECHO_C" >&6 if test "${ac_cv_lib_SDL_mixer_Mix_OpenAudio+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_mixer $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Mix_OpenAudio (); int main () { Mix_OpenAudio (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_SDL_mixer_Mix_OpenAudio=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_SDL_mixer_Mix_OpenAudio=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_mixer_Mix_OpenAudio" >&5 echo "${ECHO_T}$ac_cv_lib_SDL_mixer_Mix_OpenAudio" >&6 if test $ac_cv_lib_SDL_mixer_Mix_OpenAudio = yes; then found_sound=yes else found_sound=no fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main int main () { return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" found_sound=no fi rm -f conf.sdltest if test "$enable_sound" == "yes" -a "$found_sound" == "no"; then { { echo "$as_me:$LINENO: error: libSDL and SDL_mixer are required for sound" >&5 echo "$as_me: error: libSDL and SDL_mixer are required for sound" >&2;} { (exit 1); exit 1; }; } fi if test "$found_sound" == "yes"; then AUDIO_CFLAGS="$SDL_CFLAGS" AUDIO_LIBS="$SDL_LIBS -lSDL_mixer" cat >>confdefs.h <<\_ACEOF #define AUDIO_ENABLED 1 _ACEOF fi fi if test "$found_sound" = "yes"; then AUDIO_ENABLED_TRUE= AUDIO_ENABLED_FALSE='#' else AUDIO_ENABLED_TRUE='#' AUDIO_ENABLED_FALSE= fi # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" enable_debug="$enableval" else enable_debug=no fi; if test "$enable_debug" = "yes"; then DEBUG_INCLUDES=-DDEVELOPMENT DEBUG_CFLAGS="-g -Wall -pedantic" else DEBUG_INCLUDES=-DNDEBUG DEBUG_CFLAGS= fi echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5 echo $ECHO_N "checking for stdbool.h that conforms to C99... $ECHO_C" >&6 if test "${ac_cv_header_stdbool_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifndef bool # error bool is not defined #endif #ifndef false # error false is not defined #endif #if false # error false is not 0 #endif #ifndef true # error true is not defined #endif #if true != 1 # error true is not 1 #endif #ifndef __bool_true_false_are_defined # error __bool_true_false_are_defined is not defined #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) -0.5 == true ? 1 : -1]; bool e = &s; char f[(_Bool) -0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; int main () { return !a + !b + !c + !d + !e + !f + !g + !h + !i; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdbool_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdbool_h=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5 echo "${ECHO_T}$ac_cv_header_stdbool_h" >&6 echo "$as_me:$LINENO: checking for _Bool" >&5 echo $ECHO_N "checking for _Bool... $ECHO_C" >&6 if test "${ac_cv_type__Bool+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((_Bool *) 0) return 0; if (sizeof (_Bool)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type__Bool=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type__Bool=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5 echo "${ECHO_T}$ac_cv_type__Bool" >&6 if test $ac_cv_type__Bool = yes; then cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STDBOOL_H 1 _ACEOF fi echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* 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"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 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 saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6 if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_inline=$ac_kw; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6 case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((pid_t *) 0) return 0; if (sizeof (pid_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_pid_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6 if test $ac_cv_type_pid_t = yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" fi; # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -fr conftest.dir if mkdir conftest.dir; then cd conftest.dir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat >Imakefile <<'_ACEOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' _ACEOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -fr conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { XtMalloc (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. cat >>confdefs.h <<\_ACEOF #define X_DISPLAY_MISSING 1 _ACEOF X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_nospace=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_space=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$as_me:$LINENO: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi LIBS=$ac_xsave_LIBS esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define gethostbyname to an innocuous variant, in case declares gethostbyname. For example, HP-UX 11i declares gettimeofday. */ #define gethostbyname innocuous_gethostbyname /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef gethostbyname /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); /* 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_gethostbyname) || defined (__stub___gethostbyname) choke me #else char (*f) () = gethostbyname; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyname; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. echo "$as_me:$LINENO: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define connect to an innocuous variant, in case declares connect. For example, HP-UX 11i declares gettimeofday. */ #define connect innocuous_connect /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef connect /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); /* 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_connect) || defined (__stub___connect) choke me #else char (*f) () = connect; #endif #ifdef __cplusplus } #endif int main () { return f != connect; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. echo "$as_me:$LINENO: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define remove to an innocuous variant, in case declares remove. For example, HP-UX 11i declares gettimeofday. */ #define remove innocuous_remove /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef remove /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); /* 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_remove) || defined (__stub___remove) choke me #else char (*f) () = remove; #endif #ifdef __cplusplus } #endif int main () { return f != remove; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then echo "$as_me:$LINENO: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); int main () { remove (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_posix_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo "$as_me:$LINENO: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shmat to an innocuous variant, in case declares shmat. For example, HP-UX 11i declares gettimeofday. */ #define shmat innocuous_shmat /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shmat /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); /* 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_shmat) || defined (__stub___shmat) choke me #else char (*f) () = shmat; #endif #ifdef __cplusplus } #endif int main () { return f != shmat; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); int main () { shmat (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ipc_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); int main () { IceConnectionNumber (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi for ac_header in unistd.h vfork.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------------- ## ## Report this to lorien420@myrealbox.com ## ## -------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fork vfork do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* 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_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then echo "$as_me:$LINENO: checking for working fork" >&5 echo $ECHO_N "checking for working fork... $ECHO_C" >&6 if test "${ac_cv_func_fork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* By Ruediger Kuhlmann. */ #include #if HAVE_UNISTD_H # include #endif /* Some systems only have a dummy stub for fork() */ int main () { if (fork() < 0) exit (1); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 echo "${ECHO_T}$ac_cv_func_fork_works" >&6 else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then echo "$as_me:$LINENO: checking for working vfork" >&5 echo $ECHO_N "checking for working vfork... $ECHO_C" >&6 if test "${ac_cv_func_vfork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ #include #include #include #include #include #if HAVE_UNISTD_H # include #endif #if HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; exit( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 echo "${ECHO_T}$ac_cv_func_vfork_works" >&6 fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_VFORK 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define vfork fork _ACEOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_FORK 1 _ACEOF fi echo "$as_me:$LINENO: checking for working memcmp" >&5 echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6 if test "${ac_cv_func_memcmp_working+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_memcmp_working=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* Some versions of memcmp are not 8-bit clean. */ char c0 = 0x40, c1 = 0x80, c2 = 0x81; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) exit (1); /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) exit (1); } exit (0); } ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_memcmp_working=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_memcmp_working=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6 test $ac_cv_func_memcmp_working = no && case $LIBOBJS in "memcmp.$ac_objext" | \ *" memcmp.$ac_objext" | \ "memcmp.$ac_objext "* | \ *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6 if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_dereferences_slashed_symlink=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext 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 echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 echo "${ECHO_T}$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 $ac_cv_func_lstat_dereferences_slashed_symlink = no; then case $LIBOBJS in "lstat.$ac_objext" | \ *" lstat.$ac_objext" | \ "lstat.$ac_objext "* | \ *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5 echo $ECHO_N "checking whether stat accepts an empty string... $ECHO_C" >&6 if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_stat_empty_string_bug=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; exit (stat ("", &sbuf) ? 1 : 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_stat_empty_string_bug=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_stat_empty_string_bug=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5 echo "${ECHO_T}$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" | \ *" stat.$ac_objext" | \ "stat.$ac_objext "* | \ *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi for ac_func in atexit gethostbyname inet_ntoa mkdir pow socket sqrt strchr strcspn strstr poll do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* 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_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile src/Makefile src/gtk-gui/Makefile data/Makefile doc/Makefile autopackage/default.apspec" 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${WANT_BINRELOC_TRUE}" && test -z "${WANT_BINRELOC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"WANT_BINRELOC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"WANT_BINRELOC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${WANT_GTK_TRUE}" && test -z "${WANT_GTK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"WANT_GTK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"WANT_GTK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AUDIO_ENABLED_TRUE}" && test -z "${AUDIO_ENABLED_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AUDIO_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AUDIO_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # 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 as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by crack-attack $as_me 1.1.14, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet 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_cs_version="\\ crack-attack config.status 1.1.14 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/gtk-gui/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gtk-gui/Makefile" ;; "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "autopackage/default.apspec" ) CONFIG_FILES="$CONFIG_FILES autopackage/default.apspec" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@target@,$target,;t t s,@target_cpu@,$target_cpu,;t t s,@target_vendor@,$target_vendor,;t t s,@target_os@,$target_os,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@BINRELOC_CFLAGS@,$BINRELOC_CFLAGS,;t t s,@BINRELOC_LIBS@,$BINRELOC_LIBS,;t t s,@WANT_BINRELOC_TRUE@,$WANT_BINRELOC_TRUE,;t t s,@WANT_BINRELOC_FALSE@,$WANT_BINRELOC_FALSE,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@PACKAGE_CFLAGS@,$PACKAGE_CFLAGS,;t t s,@PACKAGE_LIBS@,$PACKAGE_LIBS,;t t s,@WANT_GTK_TRUE@,$WANT_GTK_TRUE,;t t s,@WANT_GTK_FALSE@,$WANT_GTK_FALSE,;t t s,@SDL_CONFIG@,$SDL_CONFIG,;t t s,@SDL_CFLAGS@,$SDL_CFLAGS,;t t s,@SDL_LIBS@,$SDL_LIBS,;t t s,@AUDIO_CFLAGS@,$AUDIO_CFLAGS,;t t s,@AUDIO_LIBS@,$AUDIO_LIBS,;t t s,@AUDIO_ENABLED_TRUE@,$AUDIO_ENABLED_TRUE,;t t s,@AUDIO_ENABLED_FALSE@,$AUDIO_ENABLED_FALSE,;t t s,@DEBUG_INCLUDES@,$DEBUG_INCLUDES,;t t s,@DEBUG_CFLAGS@,$DEBUG_CFLAGS,;t t s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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 grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # 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 ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //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=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi crack-attack-1.1.14/configure.ac0000644000175000001440000000642210236016055016152 0ustar webbsterusersdnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(crack-attack,1.1.14,lorien420@myrealbox.com) AC_CONFIG_SRCDIR(src/Attack.cxx) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(src/config.h) dnl Checks for programs. AC_PROG_CC AC_PROG_CXX AC_PROG_INSTALL AC_PROG_RANLIB AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl Checks for libraries. # FIXME: Replace `main' with a function in `-lGL': AC_CHECK_LIB([GL], [glBegin]) # FIXME: Replace `main' with a function in `-lGLU': AC_CHECK_LIB([GLU], [gluLookAt]) # I don't know how to check these. # FIXME: Replace `main' with a function in `-lX11': #AC_CHECK_LIB([X11], [main]) # FIXME: Replace `main' with a function in `-lXi': #AC_CHECK_LIB([Xi], [main]) # FIXME: Replace `main' with a function in `-lXmu': #AC_CHECK_LIB([Xmu], [main]) # FIXME: Replace `main' with a function in `-lglut': AC_CHECK_LIB([glut], [glutInit]) dnl Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h string.h sys/socket.h unistd.h]) dnl BinReloc source additions AM_BINRELOC AM_CONDITIONAL([WANT_BINRELOC], [test "$br_cv_binreloc" = "yes"]) dnl Check for gtk AC_ARG_ENABLE(gtk, AC_HELP_STRING([--enable-gtk=[yes/no]],[Use gtk front-end [default=yes]]), enable_gtk="$enableval", enable_gtk=yes) if test "$enable_gtk" = "yes"; then pkg_modules="gtk+-2.0 >= 2.0.0" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_DEFINE([WANT_GTK], [], [Wants to compile gtk front-end]) else PACKAGE_CFLAGS="" PACKAGE_LIBS="" fi AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) AM_CONDITIONAL([WANT_GTK], [test "$enable_gtk" = yes]) dnl Check for sound support AC_ARG_ENABLE(sound, AC_HELP_STRING([--enable-sound=[yes/no]], [Play sounds and music during game [default=yes]]), enable_sound="$enableval", enable_sound="no") AUDIO_CFLAGS="" AUDIO_LIBS="" if test "$enable_sound" != "no"; then found_sound="no" AM_PATH_SDL(1.2.0, [ AC_CHECK_LIB([SDL_mixer], [Mix_OpenAudio], [found_sound=yes], [found_sound=no] ) ],[found_sound=no] ) if test "$enable_sound" == "yes" -a "$found_sound" == "no"; then AC_MSG_ERROR(libSDL and SDL_mixer are required for sound) fi if test "$found_sound" == "yes"; then AUDIO_CFLAGS="$SDL_CFLAGS" AUDIO_LIBS="$SDL_LIBS -lSDL_mixer" AC_DEFINE(AUDIO_ENABLED, 1, [Has audio support]) fi fi AC_SUBST(AUDIO_CFLAGS) AC_SUBST(AUDIO_LIBS) AM_CONDITIONAL([AUDIO_ENABLED], [test "$found_sound" = "yes"]) dnl Check for debugging AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug=[no/yes]],[Compile extra debugging info [default=no]]), enable_debug="$enableval", enable_debug=no) if test "$enable_debug" = "yes"; then DEBUG_INCLUDES=-DDEVELOPMENT DEBUG_CFLAGS="-g -Wall -pedantic" else DEBUG_INCLUDES=-DNDEBUG DEBUG_CFLAGS= fi AC_SUBST(DEBUG_INCLUDES) AC_SUBST(DEBUG_CFLAGS) dnl Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_C_CONST AC_C_INLINE AC_TYPE_PID_T AC_PATH_XTRA dnl Checks for library functions. AC_FUNC_FORK AC_FUNC_MEMCMP AC_FUNC_STAT AC_CHECK_FUNCS([atexit gethostbyname inet_ntoa mkdir pow socket sqrt strchr strcspn strstr poll]) AC_CONFIG_FILES( Makefile src/Makefile src/gtk-gui/Makefile data/Makefile doc/Makefile autopackage/default.apspec) AC_OUTPUT crack-attack-1.1.14/config.guess0000755000175000001440000012633410241200006016174 0ustar webbsterusers#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2005-03-24' # 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, 2002, 2003, 2004, 2005 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 if [ "${UNAME_SYSTEM}" = "Linux" ] ; then eval $set_cc_for_build cat << EOF > $dummy.c #include #ifdef __UCLIBC__ # ifdef __UCLIBC_CONFIG_VERSION__ LIBC=uclibc __UCLIBC_CONFIG_VERSION__ # else LIBC=uclibc # endif #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'` fi # 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 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-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 ;; sgi:OpenBSD:*:*) echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-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\ *: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 ;; *:z/VM:*:*) echo s390-ibm-zvmoe 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* | DRS?6000:isis: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 craynv-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:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` 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 ;; amd64:CYGWIN*:*:*) echo x86_64-unknown-cygwin 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-${LIBC} exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-${LIBC} exit 0 ;; crisv32:Linux:*:*) echo crisv32-axis-linux-${LIBC} exit 0 ;; frv:Linux:*:*) echo frv-unknown-linux-${LIBC} exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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-${LIBC}" && 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-${LIBC}" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} 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="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${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-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-${LIBC} 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-${LIBC}" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff" 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-${LIBC}oldld" exit 0 ;; esac if [ "`echo $LIBC | sed -e 's:uclibc::'`" != "$LIBC" ] ; then echo "$TENTATIVE" && exit 0 ; fi # 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[5678]*:*) 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 | S7501*:*: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:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; unknown) 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 ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} 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 ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms && exit 0 ;; I*) echo ia64-dec-vms && exit 0 ;; V*) echo vax-dec-vms && exit 0 ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix 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: crack-attack-1.1.14/install-sh0000755000175000001440000001273610132356544015702 0ustar webbsterusers#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # 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="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir 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 [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -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 [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # 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. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 crack-attack-1.1.14/autogen.sh0000755000175000001440000000023210232470141015652 0ustar webbsterusers#!/bin/sh aclocal-1.8 $ACLOCAL_FLAGS || exit; autoheader-2.59 || exit; autoconf-2.59 || exit; automake-1.8 --add-missing --copy || exit; ./configure $@ crack-attack-1.1.14/cracksplash.glade0000644000175000001440000010250510217424614017162 0ustar webbsterusers True Crack-Attack! GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True True True False 0 True False 0 True logo.tga 0.5 0.5 0 0 0 True True True False 0 True Player Name: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True True True 0 NamelessPlayer True * False 0 False False True True Reduced Graphics Mode True GTK_RELIEF_NORMAL False False True 0 False False True True Reduced Graphics Mode True GTK_RELIEF_NORMAL False False True 0 False False 0 True True 0 True True True 0.5 0.5 1 1 True True 0 5 True False 5 True Resolution: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True 0 True 640 x 480 True True 800 x 600 True True 1024 x 768 True True 1280 x 1024 True True 1600 x 1200 True 0 False False 5 False False True True 0 True True Single Player True GTK_RELIEF_NORMAL True False True 0 False True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True True 0 True False 0 True Computer AI: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 5 False False True True 0 True None True True gtk-no 1 0.5 0.5 0 0 True Easy True True gtk-yes 1 0.5 0.5 0 0 True Medium True True gtk-dialog-warning 1 0.5 0.5 0 0 True Hard True True gtk-quit 1 0.5 0.5 0 0 5 False False 0 False False True True X-treme True GTK_RELIEF_NORMAL False False True 0 False False 0 True True GTK_PACK_END 0 True True True True 0 True True Two Player - Server True GTK_RELIEF_NORMAL False False True rbtnSingle 0 False True 2 True False 0 0.5 GTK_SHADOW_ETCHED_IN True True 0 True True X-treme True GTK_RELIEF_NORMAL False False True 0 False False True Server Address: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True Port: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True True True 0 True * False 0 True True 0 True True 0 True True 0 True True True True 0 True True Two Player - Client True GTK_RELIEF_NORMAL False False True rbtnSingle 0 False True True False 0 0.5 GTK_SHADOW_ETCHED_IN True True 0 True Server Address: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True True True 0 True * False 0 False False True False 0 True Port: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True True True 0 True * False 0 True True 0 True True 0 True True 0 True True True False 0 True True 0 True True Start Game True GTK_RELIEF_NORMAL 0 False True True True Exit True GTK_RELIEF_NORMAL 0 False True True True Help True GTK_RELIEF_NORMAL 0 False True 0 True True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT True True True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 0 True True 4 False False 0 True True crack-attack-1.1.14/config.sub0000755000175000001440000007607310241200006015643 0ustar webbsterusers#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2005-02-10' # 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, 2002, 2003, 2004, 2005 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 | -knuth | -cray) 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 | m32rle | m68000 | m68k | m88k | maxq | 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 \ | mips64r5900 | mips64r5900el \ | 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 | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | dvp | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | 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-* | craynv-* | 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-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | 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-* \ | mips64r5900-* | mips64r5900el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | 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-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | 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 ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; 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 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; 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 ;; mipsEE* | ee | ps2) basic_machine=mips64r5900el-scei case $os in -linux*) ;; *) os=-elf ;; esac ;; iop) basic_machine=mipsel-scei os=-irx ;; dvp) basic_machine=dvp-scei os=-elf ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; 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 ;; 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 ;; xbox) basic_machine=i686-pc os=-mingw32 ;; 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 ;; mmix) basic_machine=mmix-knuth ;; 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 | sparcv8 | 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* | -irx*) # 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 ;; -zvmoe) os=-zvmoe ;; -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 ;; *-knuth) os=-mmixware ;; *-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: crack-attack-1.1.14/missing0000755000175000001440000001637510132356544015300 0ustar webbsterusers#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; 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 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]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.2 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. 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.in` 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) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. 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 ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. 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 missing on your system. 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 ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. 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 gnutar ${1+"$@"} && exit 0 gtar ${1+"$@"} && exit 0 firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" ${1+"$@"} && 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 you do not seem to have it handy on your system. 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 prerequirements 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 crack-attack-1.1.14/mkinstalldirs0000755000175000001440000000132710132356544016476 0ustar webbsterusers#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2004/10/11 01:09:56 lorien420 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 crack-attack-1.1.14/Makefile.am0000644000175000001440000000002710132356544015720 0ustar webbsterusersSUBDIRS = src data doc crack-attack-1.1.14/Makefile.in0000644000175000001440000004446010241200007015721 0ustar webbsterusers# Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in \ $(top_srcdir)/autopackage/default.apspec.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ config.guess config.sub depcomp install-sh missing \ mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(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 configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = autopackage/default.apspec SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUDIO_CFLAGS = @AUDIO_CFLAGS@ AUDIO_ENABLED_FALSE = @AUDIO_ENABLED_FALSE@ AUDIO_ENABLED_TRUE = @AUDIO_ENABLED_TRUE@ AUDIO_LIBS = @AUDIO_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUG_CFLAGS = @DEBUG_CFLAGS@ DEBUG_INCLUDES = @DEBUG_INCLUDES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WANT_BINRELOC_FALSE = @WANT_BINRELOC_FALSE@ WANT_BINRELOC_TRUE = @WANT_BINRELOC_TRUE@ WANT_GTK_FALSE = @WANT_GTK_FALSE@ WANT_GTK_TRUE = @WANT_GTK_TRUE@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ SUBDIRS = src data doc all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ 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: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) autopackage/default.apspec: $(top_builddir)/config.status $(top_srcdir)/autopackage/default.apspec.in cd $(top_builddir) && $(SHELL) ./config.status $@ uninstall-info-am: # 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): @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$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; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/autopackage @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || mkdir "$(distdir)/$$subdir" \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="../$(top_distdir)" \ distdir="../$(distdir)/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir $(AMTAR) chof - $(distdir) | 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 $(AMTAR) chof - $(distdir) | 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) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_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-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-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: 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: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-recursive ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ dist-tarZ dist-zip distcheck distclean distclean-generic \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-info-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: crack-attack-1.1.14/autopackage/0000755000175000001440000000000010241200035016131 5ustar webbsteruserscrack-attack-1.1.14/autopackage/default.apspec.in0000644000175000001440000000275410235745436021415 0ustar webbsterusers# -*-shell-script-*- [Meta] RootName: @nongnu.org/crack-attack/:$SOFTWAREVERSION DisplayName: Crack Attack! Arcade Game ShortName: crack-attack Maintainer: Andrew Sayman Packager: Andrew Sayman Summary: Crack Attack! is a fast paced 3D puzzle game URL: http://savannah.nongnu.org/projects/crack-attack License: GNU General Public License, Version 2 SoftwareVersion: @VERSION@ AutopackageTarget: 1.0 # Only uncomment InterfaceVersion if your package exposes interfaces to other software, # for instance if it includes DSOs or python/perl modules. See the developer guide for more info, # or ask on autopackage-dev if you don't understand interface versioning in autopackage. # # InterfaceVersion: 0.0 [Description] Crack-Attack! is a fast-paced puzzle game inspired by the classic Super NES title Tetris Attack! [BuildPrepare] prepareBuild --enable-gtk --enable-binreloc --disable-sound [BuildUnprepare] unprepareBuild [Imports] echo '*' | import [Prepare] # Dependency checking require @gtk.org/gtk 2.2 require @opengl.org/opengl 1.4 require @opengl.org/glu 1.3 require @opengl.org/glut 3 [Install] # Put your installation script here installExe bin/* copyFiles share/crack-attack "$PREFIX/share" installMan 6 man/man6/crack-attack.6 installDesktop "Applications/Games" share/crack-attack/crack-attack.desktop installIcon share/crack-attack/crack-attack.xpm [Uninstall] # Usually just the following line is enough to uninstall everything uninstallFromLog crack-attack-1.1.14/crack-attack-fe-ng-00.glade0000644000175000001440000012615110235067534020432 0ustar webbsterusers True Crack Attack! GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True True crack-attack.xpm True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False 0 True False 0 True 0.5 0.5 1 1 0 0 3 3 True 0 0.5 GTK_SHADOW_IN True 0.5 0.5 1 1 0 0 0 0 True False 0 0 False False True <b>Graphics Preview</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 label_item 3 True True 0 True True True 0.5 0.5 1 1 0 0 3 3 True False 0 True True True True GTK_POS_TOP False False True False 0 True Computer _AI True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 cmbAI 0 False False True None Easy Medium Hard 3 False True False True True S_olo True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True False 0 True False 0 True Server Address: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 127.0.0.1 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 True True True Do not quit waiting for somebody to connect True No _Timeout True GTK_RELIEF_NORMAL True False False True 0 False False 0 False False True False 0 True _Port: True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entPort 0 False False True Port to listen for connections on True True True 0 8080 True * False 3 False False 0 True True False True True _Server True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True Server _Address: True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entServerAddressClient 0 False False True Address of the server to connect to True True True 0 True * False 0 False False True False 0 True _Port: True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entPortClient 0 False False True 0.5 0.5 1 1 3 3 3 0 True Port to connect to on the remote server True True True 0 8080 True * False 0 True True 0 True True False True True _Client True False GTK_JUSTIFY_LEFT False False 0.490000009537 0.5 0 0 tab 3 False False True 0 0.5 GTK_SHADOW_IN True 0.5 0.5 1 1 0 0 12 0 True 2 2 False 0 0 True _Resolution: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 cmbResolution 0 1 0 1 fill True _Quality: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 cmbQuality 0 1 1 2 fill True 0.5 0.5 1 1 0 0 0 0 True 640x480 800x600 1024x768 1 2 0 1 3 3 fill True 0.5 0.5 1 1 0 0 0 0 True Normal Reduced Extremely Reduced 1 2 1 2 3 3 fill fill True <b>Graphics Settings</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 label_item 3 False True True False 0 True False 0 True _Player name: True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 entPlayerName 0 False False True 0.5 0.5 1 1 0 0 0 0 True True True True 0 *~1Lorien~44~22~00 True * False 0 True True 3 False True True 0 0.5 GTK_SHADOW_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 True False 0 True False 0 True True _Normal True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True True True _X-treme True GTK_RELIEF_NORMAL True False False True rbtnNormal 0 False False 0 True True True <b>Game Mode</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 label_item 3 True True True False 0 True 0 1 1 1 0 0 0 0 True False 0 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-media-forward 4 0.5 0.5 0 0 0 False False True Start _Game True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True True 3 True True True True gtk-quit True GTK_RELIEF_NORMAL True 3 True True 0 True True 3 False True 0 True True 3 True True 310 195 True Crack Attack Server GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True True True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False 0 57 True 0.5 0.5 1 1 5 5 5 5 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 0 True True True 0.5 0.5 0 1 5 5 5 5 True True gtk-cancel True GTK_RELIEF_NORMAL True 0 False False crack-attack-1.1.14/acinclude.m40000644000175000001440000000502310223333570016051 0ustar webbsterusers# Check for binary relocation support # Hongli Lai # http://autopackage.org/ AC_DEFUN([AM_BINRELOC], [ AC_ARG_ENABLE(binreloc, [ --enable-binreloc compile with binary relocation support (default=enable when available)], enable_binreloc=$enableval,enable_binreloc=auto) AC_ARG_ENABLE(binreloc-threads, [ --enable-binreloc-threads compile binary relocation with threads support (default=yes)], enable_binreloc_threads=$enableval,enable_binreloc_threads=yes) BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then AC_CHECK_FILE([/proc/self/maps]) AC_CACHE_CHECK([whether everything is installed to the same prefix], [br_cv_valid_prefixes], [ if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi ]) fi AC_CACHE_CHECK([whether binary relocation support should be enabled], [br_cv_binreloc], [if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi]) if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?]) if test "x$enable_binreloc_threads" = "xyes"; then AC_CHECK_LIB([pthread], [pthread_getspecific]) fi AC_CACHE_CHECK([whether binary relocation should use threads], [br_cv_binreloc_threads], [if test "x$enable_binreloc_threads" = "xyes"; then if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then br_cv_binreloc_threads=yes else br_cv_binreloc_threads=no fi else br_cv_binreloc_threads=no fi]) if test "x$br_cv_binreloc_threads" = "xyes"; then BINRELOC_LIBS="-lpthread" AC_DEFINE(BR_PTHREAD,1,[Include pthread support for binary relocation?]) else BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0" AC_DEFINE(BR_PTHREAD,0,[Include pthread support for binary relocation?]) fi fi AC_SUBST(BINRELOC_CFLAGS) AC_SUBST(BINRELOC_LIBS) ]) crack-attack-1.1.14/AUTHORS0000644000175000001440000000073310223304551014730 0ustar webbsterusers--- Current Maintainer --- R. Andrew Sayman I am the primary contact for this project. --- Playtester, developer, and Crack Attack! master --- Kevin Webb --- Original Creator --- Daniel R. Nelson Daniel Nelson is no longer involved in the project, but he was the driving force that made this all possible. The base gameplay is likely to remain largely unchanged from what he originally created. crack-attack-1.1.14/INSTALL0000644000175000001440000001564110132356544014725 0ustar webbsterusersBasic 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, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). 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 at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' 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 a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Type `make install' to install the programs and any data files and documentation. 4. You can remove the program binaries and object files from the source code directory by typing `make clean'. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure 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 supports 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 binary file in `/usr/local/bin', `/usr/local/battlebots/', '/usr/local/battlebots/doc' etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. But then you'll have to edit /etc/battlebots.conf afterwards. 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. 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' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM 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 host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. 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. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. crack-attack-1.1.14/windows/0000755000175000001440000000000010241177710015354 5ustar webbsteruserscrack-attack-1.1.14/windows/package_script.nsi0000644000175000001440000007210610241161616021052 0ustar webbsterusers; Script generated with the Venis Install Wizard ; Define your application name !define APPNAME "Crack-Attack!" !define APPNAMEANDVERSION "Crack-Attack! 1.1.14" ; Main Install settings Name "${APPNAMEANDVERSION}" InstallDir "$PROGRAMFILES\Crack-Attack" InstallDirRegKey HKLM "Software\${APPNAME}" "" OutFile "${APPNAMEANDVERSION} Setup.exe" ; Use compression SetCompressor BZip2 ; Modern interface settings !include "MUI.nsh" !define MUI_ICON "cube_icon.ico" !define MUI_UNICON "cube_icon.ico" !define MUI_ABORTWARNING !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "Crack-Attack\COPYING.txt" !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; Set languages (first is default language) !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_RESERVEFILE_LANGDLL Section "Crack-Attack!" Section1 ; Set Section properties SetOverwrite on Delete "$INSTDIR\uninst.exe" ; Set Section Files and Shortcuts SetOutPath "$INSTDIR\" File "Crack-Attack\COPYING.LIB-2" File "Crack-Attack\README.libiconv" File "Crack-Attack\README.txt" File "Crack-Attack\COPYING.txt" SetOutPath "$INSTDIR\bin\" File "Crack-Attack\bin\gettext.sh" File "Crack-Attack\bin\crack-attack.exe" File "Crack-Attack\bin\crack-attack-gui.exe" File "Crack-Attack\bin\envsubst.exe" File "Crack-Attack\bin\gettext.exe" File "Crack-Attack\bin\iconv.exe" File "Crack-Attack\bin\ngettext.exe" File "Crack-Attack\bin\asprintf.dll" File "Crack-Attack\bin\charset.dll" File "Crack-Attack\bin\freetype6.dll" File "Crack-Attack\bin\gspawn-win32-helper.exe" File "Crack-Attack\bin\iconv.dll" File "Crack-Attack\bin\intl.dll" File "Crack-Attack\bin\jpeg62.dll" File "Crack-Attack\bin\libatk-1.0-0.dll" File "Crack-Attack\bin\libexpat-0.dll" File "Crack-Attack\bin\libfontconfig-1.dll" File "Crack-Attack\bin\libgdk-win32-2.0-0.dll" File "Crack-Attack\bin\libgdk_pixbuf-2.0-0.dll" File "Crack-Attack\bin\libglib-2.0-0.dll" File "Crack-Attack\bin\libgmodule-2.0-0.dll" File "Crack-Attack\bin\libgobject-2.0-0.dll" File "Crack-Attack\bin\libgthread-2.0-0.dll" File "Crack-Attack\bin\libgtk-win32-2.0-0.dll" File "Crack-Attack\bin\libpango-1.0-0.dll" File "Crack-Attack\bin\libpangoft2-1.0-0.dll" File "Crack-Attack\bin\libpangowin32-1.0-0.dll" File "Crack-Attack\bin\libpng12.dll" File "Crack-Attack\bin\libpng13.dll" File "Crack-Attack\bin\libtiff3.dll" File "Crack-Attack\bin\pango-querymodules.exe" File "Crack-Attack\bin\xmlparse.dll" File "Crack-Attack\bin\xmltok.dll" File "Crack-Attack\bin\zlib1.dll" SetOutPath "$INSTDIR\data\" File "Crack-Attack\data\default_multiplier" File "Crack-Attack\data\default_record" File "Crack-Attack\data\Makefile.am" File "Crack-Attack\data\clock_0.tga" File "Crack-Attack\data\clock_1.tga" File "Crack-Attack\data\clock_2.tga" File "Crack-Attack\data\clock_3.tga" File "Crack-Attack\data\clock_4.tga" File "Crack-Attack\data\clock_5.tga" File "Crack-Attack\data\clock_6.tga" File "Crack-Attack\data\clock_7.tga" File "Crack-Attack\data\clock_8.tga" File "Crack-Attack\data\clock_9.tga" File "Crack-Attack\data\clock_extra.tga" File "Crack-Attack\data\count_down_1.tga" File "Crack-Attack\data\count_down_2.tga" File "Crack-Attack\data\count_down_3.tga" File "Crack-Attack\data\count_down_go.tga" File "Crack-Attack\data\flavor_1.tga" File "Crack-Attack\data\flavor_2.tga" File "Crack-Attack\data\font0_0.tga" File "Crack-Attack\data\font0_1.tga" File "Crack-Attack\data\font0_2.tga" File "Crack-Attack\data\font0_3.tga" File "Crack-Attack\data\font0_4.tga" File "Crack-Attack\data\font0_5.tga" File "Crack-Attack\data\font0_6.tga" File "Crack-Attack\data\font0_7.tga" File "Crack-Attack\data\font0_8.tga" File "Crack-Attack\data\font0_9.tga" File "Crack-Attack\data\font0_a.tga" File "Crack-Attack\data\font0_and.tga" File "Crack-Attack\data\font0_at.tga" File "Crack-Attack\data\font0_b.tga" File "Crack-Attack\data\font0_br.tga" File "Crack-Attack\data\font0_c.tga" File "Crack-Attack\data\font0_ca.tga" File "Crack-Attack\data\font0_cb.tga" File "Crack-Attack\data\font0_cc.tga" File "Crack-Attack\data\font0_cd.tga" File "Crack-Attack\data\font0_ce.tga" File "Crack-Attack\data\font0_cf.tga" File "Crack-Attack\data\font0_cg.tga" File "Crack-Attack\data\font0_ch.tga" File "Crack-Attack\data\font0_ci.tga" File "Crack-Attack\data\font0_cj.tga" File "Crack-Attack\data\font0_ck.tga" File "Crack-Attack\data\font0_cl.tga" File "Crack-Attack\data\font0_cln.tga" File "Crack-Attack\data\font0_cm.tga" File "Crack-Attack\data\font0_cma.tga" File "Crack-Attack\data\font0_cn.tga" File "Crack-Attack\data\font0_co.tga" File "Crack-Attack\data\font0_cp.tga" File "Crack-Attack\data\font0_cq.tga" File "Crack-Attack\data\font0_cr.tga" File "Crack-Attack\data\font0_cs.tga" File "Crack-Attack\data\font0_ct.tga" File "Crack-Attack\data\font0_cu.tga" File "Crack-Attack\data\font0_cv.tga" File "Crack-Attack\data\font0_cw.tga" File "Crack-Attack\data\font0_cx.tga" File "Crack-Attack\data\font0_cy.tga" File "Crack-Attack\data\font0_cz.tga" File "Crack-Attack\data\font0_d.tga" File "Crack-Attack\data\font0_ds.tga" File "Crack-Attack\data\font0_e.tga" File "Crack-Attack\data\font0_ep.tga" File "Crack-Attack\data\font0_eq.tga" File "Crack-Attack\data\font0_f.tga" File "Crack-Attack\data\font0_g.tga" File "Crack-Attack\data\font0_gt.tga" File "Crack-Attack\data\font0_h.tga" File "Crack-Attack\data\font0_i.tga" File "Crack-Attack\data\font0_j.tga" File "Crack-Attack\data\font0_k.tga" File "Crack-Attack\data\font0_l.tga" File "Crack-Attack\data\font0_lt.tga" File "Crack-Attack\data\font0_m.tga" File "Crack-Attack\data\font0_mn.tga" File "Crack-Attack\data\font0_n.tga" File "Crack-Attack\data\font0_o.tga" File "Crack-Attack\data\font0_p.tga" File "Crack-Attack\data\font0_pd.tga" File "Crack-Attack\data\font0_pe.tga" File "Crack-Attack\data\font0_pl.tga" File "Crack-Attack\data\font0_pr.tga" File "Crack-Attack\data\font0_ps.tga" File "Crack-Attack\data\font0_pu.tga" File "Crack-Attack\data\font0_q.tga" File "Crack-Attack\data\font0_qm.tga" File "Crack-Attack\data\font0_r.tga" File "Crack-Attack\data\font0_s.tga" File "Crack-Attack\data\font0_sl.tga" File "Crack-Attack\data\font0_t.tga" File "Crack-Attack\data\font0_td.tga" File "Crack-Attack\data\font0_u.tga" File "Crack-Attack\data\font0_v.tga" File "Crack-Attack\data\font0_w.tga" File "Crack-Attack\data\font0_x.tga" File "Crack-Attack\data\font0_y.tga" File "Crack-Attack\data\font0_z.tga" File "Crack-Attack\data\font0_za.tga" File "Crack-Attack\data\font0_zb.tga" File "Crack-Attack\data\font0_zc.tga" File "Crack-Attack\data\font0_zd.tga" File "Crack-Attack\data\garbage_flavor_000.tga" File "Crack-Attack\data\garbage_flavor_001.tga" File "Crack-Attack\data\garbage_flavor_002.tga" File "Crack-Attack\data\garbage_flavor_003.tga" File "Crack-Attack\data\garbage_flavor_004.tga" File "Crack-Attack\data\garbage_flavor_005.tga" File "Crack-Attack\data\garbage_flavor_logo.tga" File "Crack-Attack\data\garbage_flavor_logo_x.tga" File "Crack-Attack\data\garbage_lightmap_0.tga" File "Crack-Attack\data\garbage_lightmap_1.tga" File "Crack-Attack\data\garbage_lightmap_2.tga" File "Crack-Attack\data\garbage_lightmap_3.tga" File "Crack-Attack\data\garbage_lightmap_4.tga" File "Crack-Attack\data\garbage_lightmap_5.tga" File "Crack-Attack\data\logo.tga" File "Crack-Attack\data\logo_x.tga" File "Crack-Attack\data\message_anykey.tga" File "Crack-Attack\data\message_game_over.tga" File "Crack-Attack\data\message_loser.tga" File "Crack-Attack\data\message_paused.tga" File "Crack-Attack\data\message_waiting.tga" File "Crack-Attack\data\message_winner.tga" File "Crack-Attack\data\sign_10.tga" File "Crack-Attack\data\sign_11.tga" File "Crack-Attack\data\sign_12.tga" File "Crack-Attack\data\sign_4.tga" File "Crack-Attack\data\sign_5.tga" File "Crack-Attack\data\sign_6.tga" File "Crack-Attack\data\sign_7.tga" File "Crack-Attack\data\sign_8.tga" File "Crack-Attack\data\sign_9.tga" File "Crack-Attack\data\sign_bonus.tga" File "Crack-Attack\data\sign_x10.tga" File "Crack-Attack\data\sign_x11.tga" File "Crack-Attack\data\sign_x12.tga" File "Crack-Attack\data\sign_x2.tga" File "Crack-Attack\data\sign_x3.tga" File "Crack-Attack\data\sign_x4.tga" File "Crack-Attack\data\sign_x5.tga" File "Crack-Attack\data\sign_x6.tga" File "Crack-Attack\data\sign_x7.tga" File "Crack-Attack\data\sign_x8.tga" File "Crack-Attack\data\sign_x9.tga" File "Crack-Attack\data\preview_reduced.tga" File "Crack-Attack\data\preview_normal.tga" File "Crack-Attack\data\preview_extremely_reduced.tga" File "Crack-Attack\data\crack-attack.xpm" SetOutPath "$INSTDIR\etc\pango\" File "Crack-Attack\etc\pango\pango.aliases" File "Crack-Attack\etc\pango\pango.modules" SetOutPath "$INSTDIR\etc\gtk-2.0\" File "Crack-Attack\etc\gtk-2.0\gdk-pixbuf.loaders" File "Crack-Attack\etc\gtk-2.0\gtk.immodules" File "Crack-Attack\etc\gtk-2.0\gtkrc" SetOutPath "$INSTDIR\etc\fonts\" File "Crack-Attack\etc\fonts\fonts.conf" File "Crack-Attack\etc\fonts\local.conf" SetOutPath "$INSTDIR\include\" File "Crack-Attack\include\autosprintf.h" File "Crack-Attack\include\iconv.h" File "Crack-Attack\include\libcharset.h" File "Crack-Attack\include\libintl.h" File "Crack-Attack\include\localcharset.h" SetOutPath "$INSTDIR\lib\" File "Crack-Attack\lib\libiconv.a" File "Crack-Attack\lib\libintl.a" File "Crack-Attack\lib\asprintf.lib" File "Crack-Attack\lib\charset.lib" File "Crack-Attack\lib\iconv.lib" File "Crack-Attack\lib\intl.lib" SetOutPath "$INSTDIR\lib\pango\1.4.0\modules\" File "Crack-Attack\lib\pango\1.4.0\modules\pango-arabic-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-basic-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-basic-win32.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-hangul-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-hebrew-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-indic-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-syriac-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-thai-fc.dll" File "Crack-Attack\lib\pango\1.4.0\modules\pango-tibetan-fc.dll" SetOutPath "$INSTDIR\lib\locale\en_GB\LC_MESSAGES\" File "Crack-Attack\lib\locale\en_GB\LC_MESSAGES\atk10.mo" File "Crack-Attack\lib\locale\en_GB\LC_MESSAGES\glib20.mo" File "Crack-Attack\lib\locale\en_GB\LC_MESSAGES\gtk20.mo" SetOutPath "$INSTDIR\lib\locale\en_CA\LC_MESSAGES\" File "Crack-Attack\lib\locale\en_CA\LC_MESSAGES\atk10.mo" File "Crack-Attack\lib\locale\en_CA\LC_MESSAGES\glib20.mo" File "Crack-Attack\lib\locale\en_CA\LC_MESSAGES\gtk20.mo" SetOutPath "$INSTDIR\lib\locale\en@IPA\LC_MESSAGES\" File "Crack-Attack\lib\locale\en@IPA\LC_MESSAGES\gtk20.mo" SetOutPath "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ani.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-bmp.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-gif.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ico.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-jpeg.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pcx.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-png.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pnm.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ras.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tga.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tiff.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-wbmp.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xbm.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xpm.dll" SetOutPath "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-am-et.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-cedilla.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-cyrillic-translit.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-ime.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-inuktitut.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-ipa.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-thai-broken.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-ti-er.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-ti-et.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\immodules\im-viqr.dll" SetOutPath "$INSTDIR\lib\gtk-2.0\2.4.0\engines\" File "Crack-Attack\lib\gtk-2.0\2.4.0\engines\libbluecurve.dll" File "Crack-Attack\lib\gtk-2.0\2.4.0\engines\libwimp.dll" SetOutPath "$INSTDIR\localdata\" File "Crack-Attack\localdata\garbage_flavor_000.tga" File "Crack-Attack\localdata\garbage_flavor_001.tga" File "Crack-Attack\localdata\garbage_flavor_002.tga" File "Crack-Attack\localdata\garbage_flavor_003.tga" File "Crack-Attack\localdata\garbage_flavor_004.tga" File "Crack-Attack\localdata\garbage_flavor_005.tga" SetOutPath "$INSTDIR\share\themes\Default\gtk-2.0-key\" File "Crack-Attack\share\themes\Default\gtk-2.0-key\gtkrc" SetOutPath "$INSTDIR\share\themes\Default\gtk-2.0\" File "Crack-Attack\share\themes\Default\gtk-2.0\gtkrc.old" File "Crack-Attack\share\themes\Default\gtk-2.0\gtkrc.bluecurve" File "Crack-Attack\share\themes\Default\gtk-2.0\gtkrc" SetOutPath "$INSTDIR\share\themes\Emacs\gtk-2.0-key\" File "Crack-Attack\share\themes\Emacs\gtk-2.0-key\gtkrc" SetOutPath "$INSTDIR\share\man\man3\" File "Crack-Attack\share\man\man3\bind_textdomain_codeset.3" File "Crack-Attack\share\man\man3\bindtextdomain.3" File "Crack-Attack\share\man\man3\dcgettext.3" File "Crack-Attack\share\man\man3\dcngettext.3" File "Crack-Attack\share\man\man3\dgettext.3" File "Crack-Attack\share\man\man3\dngettext.3" File "Crack-Attack\share\man\man3\gettext.3" File "Crack-Attack\share\man\man3\iconv.3" File "Crack-Attack\share\man\man3\iconv_close.3" File "Crack-Attack\share\man\man3\iconv_open.3" File "Crack-Attack\share\man\man3\ngettext.3" File "Crack-Attack\share\man\man3\textdomain.3" SetOutPath "$INSTDIR\share\man\man1\" File "Crack-Attack\share\man\man1\envsubst.1" File "Crack-Attack\share\man\man1\gettext.1" File "Crack-Attack\share\man\man1\iconv.1" File "Crack-Attack\share\man\man1\ngettext.1" SetOutPath "$INSTDIR\share\locale\en@quot\LC_MESSAGES\" File "Crack-Attack\share\locale\en@quot\LC_MESSAGES\gettext-runtime.mo" SetOutPath "$INSTDIR\share\locale\en@boldquot\LC_MESSAGES\" File "Crack-Attack\share\locale\en@boldquot\LC_MESSAGES\gettext-runtime.mo" SetOutPath "$INSTDIR\bin" CreateShortCut "$DESKTOP\Crack-Attack!.lnk" "$INSTDIR\bin\crack-attack-gui.exe" CreateDirectory "$SMPROGRAMS\Crack-Attack!" CreateShortCut "$SMPROGRAMS\Crack-Attack!\Crack-Attack!.lnk" "$INSTDIR\bin\crack-attack-gui.exe" CreateShortCut "$SMPROGRAMS\Crack-Attack!\Uninstall.lnk" "$INSTDIR\uninstall.exe" SectionEnd Section -FinishSection WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$INSTDIR\uninstall.exe" WriteUninstaller "$INSTDIR\uninstall.exe" SectionEnd ; Modern install component descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${Section1} "" !insertmacro MUI_FUNCTION_DESCRIPTION_END ;Uninstall section Section Uninstall ;Remove from registry... DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" DeleteRegKey HKLM "SOFTWARE\${APPNAME}" ; Delete self Delete "$INSTDIR\uninstall.exe" ; Delete Shortcuts Delete "$DESKTOP\Crack-Attack!.lnk" Delete "$SMPROGRAMS\Crack-Attack!\Crack-Attack!.lnk" Delete "$SMPROGRAMS\Crack-Attack!\Uninstall.lnk" Delete "$SMPROGRAMS\Crack-Attack!\Website.lnk" ; Clean up Crack-Attack! Delete "$INSTDIR\COPYING.LIB-2" Delete "$INSTDIR\README.libiconv" Delete "$INSTDIR\README.txt" Delete "$INSTDIR\COPYING.txt" Delete "$INSTDIR\bin\gettext.sh" Delete "$INSTDIR\bin\crack-attack.exe" Delete "$INSTDIR\bin\crack-attack-gui.exe" Delete "$INSTDIR\bin\envsubst.exe" Delete "$INSTDIR\bin\gettext.exe" Delete "$INSTDIR\bin\iconv.exe" Delete "$INSTDIR\bin\ngettext.exe" Delete "$INSTDIR\bin\asprintf.dll" Delete "$INSTDIR\bin\charset.dll" Delete "$INSTDIR\bin\freetype6.dll" Delete "$INSTDIR\bin\gspawn-win32-helper.exe" Delete "$INSTDIR\bin\iconv.dll" Delete "$INSTDIR\bin\intl.dll" Delete "$INSTDIR\bin\jpeg62.dll" Delete "$INSTDIR\bin\libatk-1.0-0.dll" Delete "$INSTDIR\bin\libexpat-0.dll" Delete "$INSTDIR\bin\libfontconfig-1.dll" Delete "$INSTDIR\bin\libgdk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libgdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\bin\libglib-2.0-0.dll" Delete "$INSTDIR\bin\libgmodule-2.0-0.dll" Delete "$INSTDIR\bin\libgobject-2.0-0.dll" Delete "$INSTDIR\bin\libgthread-2.0-0.dll" Delete "$INSTDIR\bin\libgtk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libpango-1.0-0.dll" Delete "$INSTDIR\bin\libpangoft2-1.0-0.dll" Delete "$INSTDIR\bin\libpangowin32-1.0-0.dll" Delete "$INSTDIR\bin\libpng12.dll" Delete "$INSTDIR\bin\libpng13.dll" Delete "$INSTDIR\bin\libtiff3.dll" Delete "$INSTDIR\bin\pango-querymodules.exe" Delete "$INSTDIR\bin\xmlparse.dll" Delete "$INSTDIR\bin\xmltok.dll" Delete "$INSTDIR\bin\zlib1.dll" Delete "$INSTDIR\data\default_multiplier" Delete "$INSTDIR\data\default_record" Delete "$INSTDIR\data\Makefile.am" Delete "$INSTDIR\data\clock_0.tga" Delete "$INSTDIR\data\clock_1.tga" Delete "$INSTDIR\data\clock_2.tga" Delete "$INSTDIR\data\clock_3.tga" Delete "$INSTDIR\data\clock_4.tga" Delete "$INSTDIR\data\clock_5.tga" Delete "$INSTDIR\data\clock_6.tga" Delete "$INSTDIR\data\clock_7.tga" Delete "$INSTDIR\data\clock_8.tga" Delete "$INSTDIR\data\clock_9.tga" Delete "$INSTDIR\data\clock_extra.tga" Delete "$INSTDIR\data\count_down_1.tga" Delete "$INSTDIR\data\count_down_2.tga" Delete "$INSTDIR\data\count_down_3.tga" Delete "$INSTDIR\data\count_down_go.tga" Delete "$INSTDIR\data\flavor_1.tga" Delete "$INSTDIR\data\flavor_2.tga" Delete "$INSTDIR\data\font0_0.tga" Delete "$INSTDIR\data\font0_1.tga" Delete "$INSTDIR\data\font0_2.tga" Delete "$INSTDIR\data\font0_3.tga" Delete "$INSTDIR\data\font0_4.tga" Delete "$INSTDIR\data\font0_5.tga" Delete "$INSTDIR\data\font0_6.tga" Delete "$INSTDIR\data\font0_7.tga" Delete "$INSTDIR\data\font0_8.tga" Delete "$INSTDIR\data\font0_9.tga" Delete "$INSTDIR\data\font0_a.tga" Delete "$INSTDIR\data\font0_and.tga" Delete "$INSTDIR\data\font0_at.tga" Delete "$INSTDIR\data\font0_b.tga" Delete "$INSTDIR\data\font0_br.tga" Delete "$INSTDIR\data\font0_c.tga" Delete "$INSTDIR\data\font0_ca.tga" Delete "$INSTDIR\data\font0_cb.tga" Delete "$INSTDIR\data\font0_cc.tga" Delete "$INSTDIR\data\font0_cd.tga" Delete "$INSTDIR\data\font0_ce.tga" Delete "$INSTDIR\data\font0_cf.tga" Delete "$INSTDIR\data\font0_cg.tga" Delete "$INSTDIR\data\font0_ch.tga" Delete "$INSTDIR\data\font0_ci.tga" Delete "$INSTDIR\data\font0_cj.tga" Delete "$INSTDIR\data\font0_ck.tga" Delete "$INSTDIR\data\font0_cl.tga" Delete "$INSTDIR\data\font0_cln.tga" Delete "$INSTDIR\data\font0_cm.tga" Delete "$INSTDIR\data\font0_cma.tga" Delete "$INSTDIR\data\font0_cn.tga" Delete "$INSTDIR\data\font0_co.tga" Delete "$INSTDIR\data\font0_cp.tga" Delete "$INSTDIR\data\font0_cq.tga" Delete "$INSTDIR\data\font0_cr.tga" Delete "$INSTDIR\data\font0_cs.tga" Delete "$INSTDIR\data\font0_ct.tga" Delete "$INSTDIR\data\font0_cu.tga" Delete "$INSTDIR\data\font0_cv.tga" Delete "$INSTDIR\data\font0_cw.tga" Delete "$INSTDIR\data\font0_cx.tga" Delete "$INSTDIR\data\font0_cy.tga" Delete "$INSTDIR\data\font0_cz.tga" Delete "$INSTDIR\data\font0_d.tga" Delete "$INSTDIR\data\font0_ds.tga" Delete "$INSTDIR\data\font0_e.tga" Delete "$INSTDIR\data\font0_ep.tga" Delete "$INSTDIR\data\font0_eq.tga" Delete "$INSTDIR\data\font0_f.tga" Delete "$INSTDIR\data\font0_g.tga" Delete "$INSTDIR\data\font0_gt.tga" Delete "$INSTDIR\data\font0_h.tga" Delete "$INSTDIR\data\font0_i.tga" Delete "$INSTDIR\data\font0_j.tga" Delete "$INSTDIR\data\font0_k.tga" Delete "$INSTDIR\data\font0_l.tga" Delete "$INSTDIR\data\font0_lt.tga" Delete "$INSTDIR\data\font0_m.tga" Delete "$INSTDIR\data\font0_mn.tga" Delete "$INSTDIR\data\font0_n.tga" Delete "$INSTDIR\data\font0_o.tga" Delete "$INSTDIR\data\font0_p.tga" Delete "$INSTDIR\data\font0_pd.tga" Delete "$INSTDIR\data\font0_pe.tga" Delete "$INSTDIR\data\font0_pl.tga" Delete "$INSTDIR\data\font0_pr.tga" Delete "$INSTDIR\data\font0_ps.tga" Delete "$INSTDIR\data\font0_pu.tga" Delete "$INSTDIR\data\font0_q.tga" Delete "$INSTDIR\data\font0_qm.tga" Delete "$INSTDIR\data\font0_r.tga" Delete "$INSTDIR\data\font0_s.tga" Delete "$INSTDIR\data\font0_sl.tga" Delete "$INSTDIR\data\font0_t.tga" Delete "$INSTDIR\data\font0_td.tga" Delete "$INSTDIR\data\font0_u.tga" Delete "$INSTDIR\data\font0_v.tga" Delete "$INSTDIR\data\font0_w.tga" Delete "$INSTDIR\data\font0_x.tga" Delete "$INSTDIR\data\font0_y.tga" Delete "$INSTDIR\data\font0_z.tga" Delete "$INSTDIR\data\font0_za.tga" Delete "$INSTDIR\data\font0_zb.tga" Delete "$INSTDIR\data\font0_zc.tga" Delete "$INSTDIR\data\font0_zd.tga" Delete "$INSTDIR\data\garbage_flavor_000.tga" Delete "$INSTDIR\data\garbage_flavor_001.tga" Delete "$INSTDIR\data\garbage_flavor_002.tga" Delete "$INSTDIR\data\garbage_flavor_003.tga" Delete "$INSTDIR\data\garbage_flavor_004.tga" Delete "$INSTDIR\data\garbage_flavor_005.tga" Delete "$INSTDIR\data\garbage_flavor_logo.tga" Delete "$INSTDIR\data\garbage_flavor_logo_x.tga" Delete "$INSTDIR\data\garbage_lightmap_0.tga" Delete "$INSTDIR\data\garbage_lightmap_1.tga" Delete "$INSTDIR\data\garbage_lightmap_2.tga" Delete "$INSTDIR\data\garbage_lightmap_3.tga" Delete "$INSTDIR\data\garbage_lightmap_4.tga" Delete "$INSTDIR\data\garbage_lightmap_5.tga" Delete "$INSTDIR\data\logo.tga" Delete "$INSTDIR\data\logo_x.tga" Delete "$INSTDIR\data\message_anykey.tga" Delete "$INSTDIR\data\message_game_over.tga" Delete "$INSTDIR\data\message_loser.tga" Delete "$INSTDIR\data\message_paused.tga" Delete "$INSTDIR\data\message_waiting.tga" Delete "$INSTDIR\data\message_winner.tga" Delete "$INSTDIR\data\sign_10.tga" Delete "$INSTDIR\data\sign_11.tga" Delete "$INSTDIR\data\sign_12.tga" Delete "$INSTDIR\data\sign_4.tga" Delete "$INSTDIR\data\sign_5.tga" Delete "$INSTDIR\data\sign_6.tga" Delete "$INSTDIR\data\sign_7.tga" Delete "$INSTDIR\data\sign_8.tga" Delete "$INSTDIR\data\sign_9.tga" Delete "$INSTDIR\data\sign_bonus.tga" Delete "$INSTDIR\data\sign_x10.tga" Delete "$INSTDIR\data\sign_x11.tga" Delete "$INSTDIR\data\sign_x12.tga" Delete "$INSTDIR\data\sign_x2.tga" Delete "$INSTDIR\data\sign_x3.tga" Delete "$INSTDIR\data\sign_x4.tga" Delete "$INSTDIR\data\sign_x5.tga" Delete "$INSTDIR\data\sign_x6.tga" Delete "$INSTDIR\data\sign_x7.tga" Delete "$INSTDIR\data\sign_x8.tga" Delete "$INSTDIR\data\sign_x9.tga" Delete "$INSTDIR\data\preview_reduced.tga" Delete "$INSTDIR\data\preview_normal.tga" Delete "$INSTDIR\data\preview_extremely_reduced.tga" Delete "$INSTDIR\data\crack-attack.xpm" Delete "$INSTDIR\etc\pango\pango.aliases" Delete "$INSTDIR\etc\pango\pango.modules" Delete "$INSTDIR\etc\gtk-2.0\gdk-pixbuf.loaders" Delete "$INSTDIR\etc\gtk-2.0\gtk.immodules" Delete "$INSTDIR\etc\gtk-2.0\gtkrc" Delete "$INSTDIR\etc\fonts\fonts.conf" Delete "$INSTDIR\etc\fonts\local.conf" Delete "$INSTDIR\include\autosprintf.h" Delete "$INSTDIR\include\iconv.h" Delete "$INSTDIR\include\libcharset.h" Delete "$INSTDIR\include\libintl.h" Delete "$INSTDIR\include\localcharset.h" Delete "$INSTDIR\lib\libiconv.a" Delete "$INSTDIR\lib\libintl.a" Delete "$INSTDIR\lib\asprintf.lib" Delete "$INSTDIR\lib\charset.lib" Delete "$INSTDIR\lib\iconv.lib" Delete "$INSTDIR\lib\intl.lib" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-arabic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-basic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-basic-win32.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-hangul-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-hebrew-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-indic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-syriac-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-thai-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-tibetan-fc.dll" Delete "$INSTDIR\lib\locale\en_GB\LC_MESSAGES\atk10.mo" Delete "$INSTDIR\lib\locale\en_GB\LC_MESSAGES\glib20.mo" Delete "$INSTDIR\lib\locale\en_GB\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\lib\locale\en_CA\LC_MESSAGES\atk10.mo" Delete "$INSTDIR\lib\locale\en_CA\LC_MESSAGES\glib20.mo" Delete "$INSTDIR\lib\locale\en_CA\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\lib\locale\en@IPA\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ani.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-bmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-gif.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ico.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-jpeg.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pcx.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-png.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pnm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ras.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tga.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tiff.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-wbmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xbm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xpm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-am-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-cedilla.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-cyrillic-translit.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ime.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-inuktitut.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ipa.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-thai-broken.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ti-er.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ti-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-viqr.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\libbluecurve.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\libwimp.dll" Delete "$INSTDIR\localdata\garbage_flavor_000.tga" Delete "$INSTDIR\localdata\garbage_flavor_001.tga" Delete "$INSTDIR\localdata\garbage_flavor_002.tga" Delete "$INSTDIR\localdata\garbage_flavor_003.tga" Delete "$INSTDIR\localdata\garbage_flavor_004.tga" Delete "$INSTDIR\localdata\garbage_flavor_005.tga" Delete "$INSTDIR\share\themes\Default\gtk-2.0-key\gtkrc" Delete "$INSTDIR\share\themes\Default\gtk-2.0\gtkrc.old" Delete "$INSTDIR\share\themes\Default\gtk-2.0\gtkrc.bluecurve" Delete "$INSTDIR\share\themes\Default\gtk-2.0\gtkrc" Delete "$INSTDIR\share\themes\Emacs\gtk-2.0-key\gtkrc" Delete "$INSTDIR\share\man\man3\bind_textdomain_codeset.3" Delete "$INSTDIR\share\man\man3\bindtextdomain.3" Delete "$INSTDIR\share\man\man3\dcgettext.3" Delete "$INSTDIR\share\man\man3\dcngettext.3" Delete "$INSTDIR\share\man\man3\dgettext.3" Delete "$INSTDIR\share\man\man3\dngettext.3" Delete "$INSTDIR\share\man\man3\gettext.3" Delete "$INSTDIR\share\man\man3\iconv.3" Delete "$INSTDIR\share\man\man3\iconv_close.3" Delete "$INSTDIR\share\man\man3\iconv_open.3" Delete "$INSTDIR\share\man\man3\ngettext.3" Delete "$INSTDIR\share\man\man3\textdomain.3" Delete "$INSTDIR\share\man\man1\envsubst.1" Delete "$INSTDIR\share\man\man1\gettext.1" Delete "$INSTDIR\share\man\man1\iconv.1" Delete "$INSTDIR\share\man\man1\ngettext.1" Delete "$INSTDIR\share\locale\en@quot\LC_MESSAGES\gettext-runtime.mo" Delete "$INSTDIR\share\locale\en@boldquot\LC_MESSAGES\gettext-runtime.mo" ; Remove remaining directories RMDir "$SMPROGRAMS\Crack-Attack!" RMDir "$INSTDIR\share\themes\Emacs\gtk-2.0-key\" RMDir "$INSTDIR\share\themes\Emacs\" RMDir "$INSTDIR\share\themes\Default\gtk-2.0\" RMDir "$INSTDIR\share\themes\Default\gtk-2.0-key\" RMDir "$INSTDIR\share\themes\Default\" RMDir "$INSTDIR\share\themes\" RMDir "$INSTDIR\share\man\man3\" RMDir "$INSTDIR\share\man\man1\" RMDir "$INSTDIR\share\man\" RMDir "$INSTDIR\share\locale\en@quot\LC_MESSAGES\" RMDir "$INSTDIR\share\locale\en@quot\" RMDir "$INSTDIR\share\locale\en@boldquot\LC_MESSAGES\" RMDir "$INSTDIR\share\locale\en@boldquot\" RMDir "$INSTDIR\share\locale\" RMDir "$INSTDIR\share\" RMDir "$INSTDIR\lib\pango\1.4.0\modules\" RMDir "$INSTDIR\lib\pango\1.4.0\" RMDir "$INSTDIR\lib\pango\" RMDir "$INSTDIR\lib\locale\en_GB\LC_MESSAGES\" RMDir "$INSTDIR\lib\locale\en_GB\" RMDir "$INSTDIR\lib\locale\en_CA\LC_MESSAGES\" RMDir "$INSTDIR\lib\locale\en_CA\" RMDir "$INSTDIR\lib\locale\en@IPA\LC_MESSAGES\" RMDir "$INSTDIR\lib\locale\en@IPA\" RMDir "$INSTDIR\lib\locale\" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\engines\" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\" RMDir "$INSTDIR\lib\gtk-2.0\" RMDir "$INSTDIR\lib\" RMDir "$INSTDIR\include\" RMDir "$INSTDIR\etc\pango\" RMDir "$INSTDIR\etc\gtk-2.0\" RMDir "$INSTDIR\etc\fonts\" RMDir "$INSTDIR\etc\" RMDir "$INSTDIR\data\" RMDir "$INSTDIR\bin\" SectionEnd ; eofcrack-attack-1.1.14/windows/CA.dev0000644000175000001440000004507210235745437016361 0ustar webbsterusers[Project] FileName=CA.dev Name=crack-attack UnitCount=122 Type=1 Ver=1 ObjFiles= Includes= Libs= PrivateResource=CA_private.rc ResourceIncludes= MakeIncludes= Compiler= CppCompiler=-I"\gtk-2.0" _@@_-I"\..\lib\gtk-2.0\include" _@@_-I"\atk-1.0" _@@_-I"\pango-1.0" _@@_-I"\glib-2.0" _@@_-I"\..\lib\glib-2.0\include" _@@_-mms-bitfields_@@_-mno-cygwin_@@_-DNO_MULTITEXTURING_@@_-DWANT_GTK_@@_-DNDEBUG_@@_-march=i586_@@_-O2_@@_-mtune=i686_@@_-fomit-frame-pointer_@@_-ftracer_@@_-pipe_@@_-ffast-math_@@_-mmmx_@@_ Linker=-lglut32 -lglu32 -lopengl32 -lwinmm_@@_-lgtk-win32-2.0 -lgdk-win32-2.0 -lgthread-2.0 -lgdi32 -lole32 -luuid -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv_@@_-lws2_32_@@_ IsCpp=1 Icon=..\doc\cube_icon.ico ExeOutput=..\bin\ ObjectOutput= OverrideOutput=1 OverrideOutputName=crack-attack.exe HostApplication= Folders=src,src/gtk-gui CommandLine= UseCustomMakefile=0 CustomMakefile= IncludeVersionInfo=0 SupportXPThemes=0 CompilerSet=0 CompilerSettings=0000000000000000000000 [Unit1] FileName=..\src\ActionRecorder.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit2] FileName=..\src\Attack.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit3] FileName=..\src\Block.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit4] FileName=..\src\BlockManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit5] FileName=..\src\CelebrationManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit6] FileName=..\src\Clock.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit7] FileName=..\src\ComboManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit8] FileName=..\src\ComboTabulator.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit9] FileName=..\src\Communicator.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit10] FileName=..\src\ComputerPlayer.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit11] FileName=..\src\ComputerPlayerAI.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit12] FileName=..\src\Controller.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit13] FileName=..\src\CountDownManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit14] FileName=..\src\Creep.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit15] FileName=..\src\Displayer.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit16] FileName=..\src\Game.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit17] FileName=..\src\Garbage.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit18] FileName=..\src\GarbageFlavorImage.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit19] FileName=..\src\GarbageGenerator.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit20] FileName=..\src\GarbageManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit21] FileName=..\src\GarbageQueue.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit22] FileName=..\src\GarbageQueueElement.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit23] FileName=..\src\glext.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit24] FileName=..\src\Grid.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit25] FileName=..\src\LevelLights.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit26] FileName=..\src\LightManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit27] FileName=..\src\LoseBar.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit28] FileName=..\src\MessageManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit29] FileName=..\src\MetaState.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit30] FileName=..\src\Mode.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit32] FileName=..\src\Score.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit33] FileName=..\src\ScoreRecordManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit34] FileName=..\src\SignManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit35] FileName=..\src\Sine.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit36] FileName=..\src\SparkleManager.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit37] FileName=..\src\Spring.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit39] FileName=..\src\String.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit40] FileName=..\src\Swapper.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit41] FileName=..\src\TextureLoader.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit42] FileName=..\src\WinRecord.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit43] FileName=..\src\X.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit45] FileName=..\src\Attack.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit46] FileName=..\src\Block.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit47] FileName=..\src\BlockManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit48] FileName=..\src\CelebrationManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit49] FileName=..\src\Clock.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit50] FileName=..\src\ComboManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit51] FileName=..\src\ComboTabulator.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit52] FileName=..\src\Communicator.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit53] FileName=..\src\ComputerPlayer.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit54] FileName=..\src\ComputerPlayerAI.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit55] FileName=..\src\Controller.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit56] FileName=..\src\CountDownManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit57] FileName=..\src\Creep.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit58] FileName=..\src\Displayer.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit59] FileName=..\src\DrawBlocks.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit60] FileName=..\src\DrawCandy.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit61] FileName=..\src\DrawCountDown.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit62] FileName=..\src\DrawExternalCandy.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit63] FileName=..\src\DrawGarbage.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit64] FileName=..\src\DrawLevelLights.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit65] FileName=..\src\DrawMessages.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit66] FileName=..\src\DrawScoreRecord.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit67] FileName=..\src\DrawSwapper.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit68] FileName=..\src\DrawWinRecord.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit69] FileName=..\src\Game.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit70] FileName=..\src\Garbage.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit71] FileName=..\src\GarbageFlavorImage.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit72] FileName=..\src\GarbageGenerator.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit73] FileName=..\src\GarbageManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit74] FileName=..\src\GarbageQueue.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit75] FileName=..\src\Grid.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit76] FileName=..\src\LevelLights.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit77] FileName=..\src\LightManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit78] FileName=..\src\LoseBar.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit79] FileName=..\src\MessageManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit80] FileName=..\src\MetaState.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit81] FileName=..\src\obj_block.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit82] FileName=..\src\obj_clock.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit83] FileName=..\src\obj_external_candy.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit85] FileName=..\src\obj_garbage_small.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit86] FileName=..\src\obj_garbage_thick_corner.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit87] FileName=..\src\obj_garbage_thick_edge.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit88] FileName=..\src\obj_garbage_thick_middle.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit89] FileName=..\src\obj_garbage_thin_cap.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit90] FileName=..\src\obj_garbage_thin_middle.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit91] FileName=..\src\obj_level_lights.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit92] FileName=..\src\obj_messages.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit93] FileName=..\src\obj_name.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit94] FileName=..\src\obj_score_record.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit95] FileName=..\src\obj_sign.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit96] FileName=..\src\obj_sparkle.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit97] FileName=..\src\obj_swapper.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit98] FileName=..\src\Random.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit99] FileName=..\src\Score.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit100] FileName=..\src\ScoreRecordManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit101] FileName=..\src\SignManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit102] FileName=..\src\Sine.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit103] FileName=..\src\SparkleManager.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit104] FileName=..\src\Spring.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit105] FileName=..\src\String.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit106] FileName=..\src\Swapper.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit108] FileName=..\src\WinRecord.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit109] FileName=..\src\X.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit110] FileName=..\src\gtk-gui\callbacks.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit111] FileName=..\src\gtk-gui\callbacks.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit112] FileName=..\src\gtk-gui\gui_main.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit113] FileName=..\src\gtk-gui\gui_main.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit114] FileName=..\src\gtk-gui\interface.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit115] FileName=..\src\gtk-gui\interface.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit116] FileName=..\src\gtk-gui\modeparser.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit117] FileName=..\src\gtk-gui\modeparser.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit118] FileName=..\src\gtk-gui\persist.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit119] FileName=..\src\gtk-gui\persist.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit120] FileName=..\src\gtk-gui\prefs.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit121] FileName=..\src\gtk-gui\support.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit122] FileName=..\src\gtk-gui\support.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit123] FileName=..\src\gtk-gui\modeparser.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit124] FileName=..\src\gtk-gui\persist.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit125] FileName=..\src\gtk-gui\persist.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit126] FileName=..\src\gtk-gui\prefs.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit127] FileName=..\src\gtk-gui\support.cxx CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit128] FileName=..\src\gtk-gui\support.h CompileCpp=1 Folder=src/gtk-gui Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [VersionInfo] Major=0 Minor=1 Release=1 Build=1 LanguageID=1033 CharsetID=1252 CompanyName= FileVersion= FileDescription=Developed using the Dev-C++ IDE InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion= AutoIncBuildNr=0 [Unit31] FileName=..\src\Random.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit38] FileName=..\src\sstream.h CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit44] FileName=..\src\ActionRecorder.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit84] FileName=..\src\obj_garbage.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit107] FileName=..\src\TextureLoader.cxx CompileCpp=1 Folder=src Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= crack-attack-1.1.14/ChangeLog0000644000175000001440000001163710241162174015442 0ustar webbsterusersv 1.1.0 - Fixed a bug which caused the loading of the logo as a garbage texture to fail. - Player name now defaults to username (thanks to Colin Walters). - Fixed big/little-endian bug in communication code (thanks to Colin Walters). - Moved dynamic data files to .crack-attack directory. v 1.1.1 - Added point system to solo play. - Switched solo play to single game. - Added score record storage and display. - Improved creep speed algorithm. v 1.1.2 - Restructured and started using automake/autoconf. v 1.1.3 - Removed use of deprecated members of strstream. Now compiles under libstdc++-v3. v 1.1.4 - Compiles under Visual C++ 6.0 and runs under Windows. - Created a Visual Basic front end for Windows. - Created a Windows installation script using NSIS. - Fixed several misuses of GL_BLEND texture blend mode, which caused wrongly colored signs under certain drivers. - Turned off lightmap texturing when rendering waking garbage, which caused waking garbage to be dark under certain drivers. v 1.1.5 - Fixed a small combo management bug. - Changed the point system of solo play to a more fun and intuitive algorithm. - Changed the way arrays were being deleted, which was causing crashes under Windows. v 1.1.6 - Fixed a bug which caused the tens and higher score digits to fade improperly. - Fixed a variable type problem which caused a compilation error with some compilers. - Modified the distribution of special blocks in X-treme mode. - Improved communication and game code so that players know as soon as possible that they have lost. - Improved communication code, halving turn around time on state messages. - Added a status bar which displays how close the player is to losing. v 1.1.7 - Some debug switches left on in 1.1.6. Poor quality control! - Added check for version compatibility in communication code. v 1.1.8 - Reduced network load by reducing garbage queue length and communication frequency. - Added workaround to GLUT bug which caused a crash when the Del-key was pressed after the game in solo play (thanks to Stephen Thorne). - Added a low resolution graphics mode (thanks to Stephen Thorne). - Improved the window size algorithm. - Improved the socket closing procedures. - Modified the idle callback's behavior when behind in time steps. v 1.1.9 - Removed uses of deprecated ostrstream. - Updated old C-style header file names. - Defined GL_GLEXT_LEGACY to make multitexturing code compatable with modern OpenGL (thanks to Mark Wilde). v 1.1.10 - Patch to prevent crash on Voodoo3 cards (thanks to Olivier Blin). - Fix of busy-port bug after net games (thanks to Guillaume Cottenceau). v 1.1.11 - Networking component sends a different version number now. This version numb will only increase when we change the networking code. - gtk+-2.0 front-end - gcc-3.4 build fixes - NVidia OpenGL build fixes. The error was in how we used deprecated extensions. I'm sure this bug would come up other places, but NVidia seemed to be the driver that was causing the most problems v 1.1.12 - idlePlay now sleeps to prevent 100% CPU usage. (Thanks Dennis Lubert) - Something about the way this works irks me. I'd like to see a way for this to work by using glut calls to get the elapsed time. My attempts at this were incorrect, so I'll stick with what Dennis wrote. - Fixes Debian bug #159241 - Really Low Graphics (Thanks Stephan Beyer) - FIXME: Displayer.cxx needs to unmask drawWinRecord and just make the win record less graphics intensive. - Fix for a crasher when using high quality graphics on certain boards. This fix has been in some distros for a while, but is new to this patchset. - Fixes Gentoo bug #53320 - Fixes Debian bug #245157 - Change protocol numbering to make this release compatible with Windows version which is still 1.1.8. - Name, resolution, and graphics settings are now remembered by the GUI. v 1.1.13 - Implemented binary relocatability - Many changes to the source code to make it compatible with Windows using dev-cpp. - Many code cleanups to take care of warnings. - Fixed stones hanging in mid-air (Thanks Wolfgang Klier ) - Fixes Savannah bug #10988 - Added a command-line switch to change the resolution --res. v 1.1.14 - Some fixes to the build system. (Thanks Mike Frysinger) - Sound and music patches. (Thanks Mike Frysinger and Miguel Ángel Vilela García). These are currently unsupported, so good luck figuring out how to use them. - Totally redesigned GUI. - Fixes Savannah bugs #12832, #12915 - Fixes the level lights when playing against the AI on Windows - Bumped the networking version to 1.1.14. Essentially, we messed up compatibility somewhere. Considering that we're planning on redoing networking in the next release, a bumb seemed the most appropriate. Please update to the latest version. crack-attack-1.1.14/COPYING0000644000175000001440000004313110132356544014722 0ustar webbsterusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. crack-attack-1.1.14/COPYRIGHT0000644000175000001440000000057310231274170015157 0ustar webbsterusersCrack Attack! Copyright (C) 2000-2005 by the following: If you have contributed to Crack Attack!, then you deserve to be on this list. Contact me at and I'll add you. Daniel R. Nelson R. Andrew Sayman Kevin Webb Stephan Beyer Dennis Lubert Wolfgang Klier crack-attack-1.1.14/mkbuildtests.sh0000755000175000001440000000322710235743143016741 0ustar webbsterusers#!/bin/bash MAKE='make clean && make && make install' echo "Running autogen.sh" ./autogen.sh --prefix=`pwd`/inst &> /dev/null # Default build test echo "Testing default build" (./configure --prefix=`pwd`/inst \ && make clean && make && make install) &> /dev/null echo "Game should start with GUI" ./inst/bin/crack-attack > /dev/null echo "Ensuring relocatable..." mv ./inst ./moved_inst echo "Game should start with GUI" ./moved_inst/bin/crack-attack > /dev/null echo "Game should start in a solo game" ./moved_inst/bin/crack-attack --solo > /dev/null mv ./moved_inst ./inst echo "Testing no gui" (./configure --prefix=`pwd`/inst --disable-gtk \ && make clean && make && make install) &> /dev/null echo "Game should fail to start [and show usage]" ./inst/bin/crack-attack > /dev/null echo "Game should start with solo low extreme game" ./inst/bin/crack-attack -1 -X > /dev/null echo "Testing no relocatable" (./configure --prefix=`pwd`/inst --disable-binreloc \ && make clean && make && make install) &> /dev/null echo "Game should start with solo low extreme game" ./inst/bin/crack-attack -1 -X > /dev/null mv ./inst ./moved_inst echo "Game should fail to start [due to missing shared files]" ./moved_inst/bin/crack-attack -1 -X > /dev/null mv ./moved_inst ./inst echo "Testing for Gentoo \"bump\" ability" rm -rf ./inst (./configure --prefix=`pwd`/inst --bindir=`pwd`/inst/mybin \ --datadir=`pwd`/inst/sharingiscaring --disable-binreloc \ && make clean && make && make install) &> /dev/null echo "Game should start with solo low extreme game" ./inst/mybin/crack-attack -1 -X > /dev/null echo "GUI should start. Make sure to start a solo game" ./inst/mybin/crack-attack > /dev/null