FindMine
A MineSweeper clone
A simple MineSweeper clone written using the Illumination GUI library.
Section:
user/games
Bugtracker:
Releases
| Repository | Latest version |
| Diablo Extras free armel | findmine 0.3.20090520-1 |
| Diablo Extras free i386 | findmine 0.3.20090520-1 |
| Diablo Extras-devel free armel | findmine 0.3.20091110-2 |
| Diablo Extras-devel free i386 | findmine 0.3.20091110-2 |
| Fremantle Extras free armel | findmine 0.5.20100243-2 |
| Fremantle Extras free i386 | findmine 0.5.20100243-2 |
| Fremantle Extras-devel free armel | findmine 0.5.20101220-1 |
| Fremantle Extras-devel free i386 | findmine 0.5.20101220-1 |
| Fremantle Extras-testing free armel | findmine 0.5.20100243-2 |
| Fremantle Extras-testing free i386 | findmine 0.5.20100243-2 |
Changes
| Version | Changes | Author | Date |
| 0.5.20101220-1 | * Rebuild against current Illumination. | tim@teulings.org | 2010-12-20 18:01 UTC |
| 0.5.20101005-2 | * * Increase version to force rebuild against current Illumination package. | tim@teulings.org | 2010-10-07 06:33 UTC |
| 0.5.20101005-1 | * Build against new Illumination version. | tim@teulings.org | 2010-10-06 19:25 UTC |
| 0.5.20100243-2 | $0 [OPTION] ALIAS -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit 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 exit 1;; exit 1;; 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 ;; abacus) # First match some system type aliases # that might get confused with valid system types. -os400*) -tpf*) c4x-* | tic4x-*) os=-coff ;; data/themes/default/bomb.svg \ data/themes/default/marked.svg \ data/themes/default/hidden.svg \ themes/Normal/marked.png\ themes/Normal/hidden.png\ themes/Big/marked.png\ themes/Big/hidden.png\ themes/Huge/bomb.png\ themes/Huge/marked.png\ themes/Huge/hidden.png xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg2818" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="bomb.svg" inkscape:export-filename="/home/tim/projects/FindMine/themes/Huge/hidden.png" inkscape:export-xdpi="67.5" inkscape:export-ydpi="67.5"> offset="0" id="stop3627" /> offset="1" id="stop3629" /> inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1" id="perspective2826" /> xlink:href="#linearGradient3625" id="radialGradient3643" cx="29.929907" cy="32.878506" fx="29.929907" fy="32.878506" r="22.5" gradientUnits="userSpaceOnUse" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> xlink:href="#linearGradient3625-2" id="radialGradient3643-8" cx="29.929907" cy="32.878506" fx="29.929907" fy="32.878506" r="22.5" gradientUnits="userSpaceOnUse" /> offset="0" id="stop3627-8" /> offset="1" id="stop3629-8" /> id="filter3714" x="-0.12" width="1.24" y="-0.12" height="1.24"> stdDeviation="2.25" id="feGaussianBlur3716" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.042366" inkscape:cx="34.75" inkscape:cy="31.317812" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="1154" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1"> id="grid2828" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> inkscape:label="Layer 1" inkscape:groupmode="layer"> style="fill:#1e1e1e;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3714)" id="path2851-7" sodipodi:cx="37.5" sodipodi:cy="41.5" sodipodi:rx="22.5" sodipodi:ry="22.5" d="m 60,41.5 a 22.5,22.5 0 1 1 -45,0 22.5,22.5 0 1 1 45,0 z" transform="matrix(1.0666667,0,0,1.0666667,-6.0000012,-10.266667)" /> style="fill:url(#radialGradient3643);fill-opacity:1;fill-rule:evenodd;stroke:none" id="path2851" sodipodi:cx="37.5" sodipodi:cy="41.5" sodipodi:rx="22.5" sodipodi:ry="22.5" d="m 60,41.5 a 22.5,22.5 0 1 1 -45,0 22.5,22.5 0 1 1 45,0 z" transform="matrix(1.0666667,0,0,1.0666667,-8.0000013,-12.266668)" /> xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg4454" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="marked.svg" inkscape:export-filename="/home/tim/projects/FindMine/themes/Small/marked.png" inkscape:export-xdpi="22.5" inkscape:export-ydpi="22.5"> id="path-effect5196" is_visible="true" yy="true" xx="true" bendpath1="m 19.019,9.528312 27.999998,0" bendpath2="m 47.018998,9.528312 0,24.971047" bendpath3="m 19.019,34.499359 27.999998,0" bendpath4="m 19.019,9.528312 0,24.971047" /> id="path-effect5194" is_visible="true" yy="true" xx="true" bendpath1="m 46.981017,5.0289471 -27.999998,0" bendpath2="m 18.981019,5.0289471 0,19.9999999" bendpath3="m 46.981017,25.028947 -27.999998,0" bendpath4="m 46.981017,5.0289471 0,19.9999999" /> inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1" id="perspective4462" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.078125" inkscape:cx="32" inkscape:cy="31.786903" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="1154" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1"> id="grid4464" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> inkscape:label="Layer 1" inkscape:groupmode="layer"> d="m 18.372743,8.283438 c 0,48.245614 0,48.245614 0,48.245614" id="path4487" /> id="g5115"> d="m 63.5,0 0,63.857936" id="path3763-1" /> d="M 8.7638414e-5,64 64.007605,64" style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8" d="M 0.5,0.00772912 0.5,64.5" style="fill:none;stroke:#ffffff;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2" d="M 64,0.5 0.99624173,0.5" style="fill:none;stroke:#ffffff;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2-5" d="M 63.00781,1.5 0.98818985,1.5" style="fill:none;stroke:#ffffff;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-3" d="m 1.5,2 0,61.522506" style="fill:none;stroke:#ffffff;stroke-width:0.99999624px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="M 1.9924826,63 63,63" style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="m 62.5,2.0000001 0,61.0000019" style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="M 46.999979,34.499661 C 38.00257,34.06949 27.242576,36.109014 18.999981,28.737112 c 0,-6.402833 0,-12.805665 0,-19.208498 11.146925,6.618917 18.673196,6.42667 27.999996,6.402833 10e-7,6.189404 10e-7,12.378809 2e-6,18.568214 0,0 0,0 0,0 z" id="rect5179" sodipodi:nodetypes="ccccc" inkscape:path-effect="#path-effect5196" inkscape:original-d="m 47.019,38.528312 c -8.99741,-0.671845 -19.757404,2.513501 -28,-9 l 0,-29.99999999 C 30.165926,9.865795 37.692197,9.565542 47.018998,9.528312 l 2e-6,29 z" /> xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg3728" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="hidden.svg" inkscape:export-filename="/home/tim/projects/FindMine/themes/Small/hidden.png" inkscape:export-xdpi="22.5" inkscape:export-ydpi="22.5"> inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1" id="perspective3736" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.078125" inkscape:cx="32" inkscape:cy="32" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="1154" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1"> id="grid3738" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> inkscape:label="Layer 1" inkscape:groupmode="layer"> d="m 0.5,0 0,63.857936" id="path3763-1-5" /> d="m 63.5,0 0,63.857936" id="path3763-1" /> d="M 8.7638414e-5,64 64.007605,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8" d="M 0.5,0.00772912 0.5,64.5" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2" d="M 64,0.5 0.99624173,0.5" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2-5" d="M 63.00781,1.5 0.98818985,1.5" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-3" d="m 1.5,2 0,61.522506" style="fill:none;stroke:#ffffff;stroke-width:0.99999994000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="M 1.9924826,63 63,63" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="m 62.5,2.0000001 0,61.0000019" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" id="svg2" sodipodi:version="0.32" inkscape:version="0.45.1" version="1.0" sodipodi:docbase="/home/tim/projects/FindMine/data/icons" sodipodi:docname="icon.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:export-filename="/home/tim/projects/FindMine/data/Icon64x64.png" inkscape:export-xdpi="120" inkscape:export-ydpi="120"> offset="0" id="stop14046" /> offset="1" id="stop14048" /> offset="0" id="stop12043" /> offset="1" id="stop12045" /> offset="0" id="stop3162" /> offset="1" id="stop3164" /> xlink:href="#linearGradient3160" id="radialGradient4137" cx="21.910675" cy="23.936594" fx="21.910675" fy="23.936594" r="15.00025" gradientUnits="userSpaceOnUse" /> xlink:href="#linearGradient12041" id="radialGradient12051" cx="19.897091" cy="9.1132717" fx="19.897091" fy="9.1132717" r="2.1029098" gradientTransform="matrix(1,0,0,0.9975982,0,2.1888639e-2)" gradientUnits="userSpaceOnUse" /> xlink:href="#linearGradient14044" id="linearGradient14054" x1="41" y1="41.5" x2="48" y2="41.5" gradientUnits="userSpaceOnUse" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="19.291667" inkscape:cx="24" inkscape:cy="24" inkscape:document-units="px" inkscape:current-layer="layer1" width="48px" height="48px" borderlayer="true" showgrid="true" inkscape:object-bbox="true" inkscape:object-points="true" inkscape:object-nodes="true" inkscape:grid-points="true" inkscape:guide-points="true" inkscape:window-width="1600" inkscape:window-height="1153" inkscape:window-x="0" inkscape:window-y="46" /> inkscape:groupmode="layer" id="layer1" style="display:inline"> style="fill:url(#radialGradient4137);fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;stroke-width:0.48264288;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2162" sodipodi:cx="24.970842" sodipodi:cy="28.5" sodipodi:rx="14.5" sodipodi:ry="14.5" d="M 39.470842 28.5 A 14.5 14.5 0 1 1 10.470842,28.5 A 14.5 14.5 0 1 1 39.470842 28.5 z" transform="matrix(0.9655172,0,0,0.9655172,-0.1097772,3.4827592)" /> d="M 24.518359,16 C 20.518359,10 20.518359,10 20.518359,10 L 25.518359,7 L 20.518359,3" id="path6081" /> style="fill:url(#radialGradient12051);fill-opacity:1;fill-rule:evenodd;stroke:#fff700;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path8155" sodipodi:sides="5" sodipodi:cx="20" sodipodi:cy="9" sodipodi:r1="2.236068" sodipodi:r2="1.118034" sodipodi:arg1="0.46364761" sodipodi:arg2="1.0919661" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="M 22,10 L 20.515124,9.9922937 L 19.666977,11.21113 L 19.215455,9.7965481 L 17.794181,9.3665535 L 19,8.5 L 18.969751,7.0154125 L 20.166511,7.894435 L 21.569091,7.4069039 L 21.10291,8.8167232 L 22,10 z " transform="matrix(2.3776582,0,0,2.1450442,-26.30848,-9.0483699)" /> d="M 16.535637,8 C 14.875131,8.3931633 15.228178,7.5434439 14.565875,7.4643629 C 14.097078,7.4083871 13.979359,7 13,7 C 12.631872,7 12.333333,6.687545 12,6.5313175 C 10.917793,6.0241061 12.042589,6 10.419006,6 C 9.786144,6 10.22569,5.5982721 9,5.5982721 C 8.9723936,5.5982721 9.2196872,5 8.5529158,5 C 8.3686105,5 8.1843053,5 8,5" id="path12054" /> d="M 16,13.477322 C 15.350001,13.477322 14,14.217097 14,15 C 14,15.786965 13,15.962416 13,16.431965 C 13,17.697838 12,16.075942 12,18 C 12,18.1714 11,17.615601 11,18.453564" id="path12056" /> d="M 28,9 C 28,9.5659547 29,8.6773705 29,8 C 29,7.6297053 29.666667,7.6774658 30,7.5161987 C 31.532461,6.7747919 30.648579,6 32,6 C 32.450511,6 32.759208,5 33.485961,5" id="path12058" /> d="M 28,13 C 29.640864,13 28.825528,14 31,14 C 31.457468,14 32,14.64726 32,15 C 32,15.402275 34,14.373723 34,15.550756 C 34,16.156866 33.894347,16 34.470842,16" id="path12060" /> d="M 27,4 C 27,4.2944781 26.717569,3 27.524838,3 C 27.751618,3 27.186227,2 28,2" id="path12062" /> d="M 14.565875,3 C 14.7545,3 14.188625,3 14,3 C 13.629534,3 14.565352,2 13.425486,2 C 13.283657,2 13.141829,2 13,2" id="path12064" /> '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF 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). exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 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" # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; 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 sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" tr ' ' ' sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; # 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 ;; 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 ' ' ' | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' | 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" ;; # 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" ;; # 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" ;; # 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" ;; # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. # 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 ' ' ' sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; "$@" || 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 ' ' ' sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; # 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" ;; # 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") *) 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" ;; exec "$@" ;; echo "Unknown depmode $depmode" 1>&2 exit 1 ;; Configuration.cpp\ Control.h\ Control.cpp\ FindMine.cpp This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class Entry { public: std::wstring name; time_t time; }; size_t width; size_t height; size_t bombs; std::vector hiddenImage = 0, bombImage = 1, markedImage = 2, countImage = 3 std::wstring name; Lum::Images::ImageRef images[countImage]; size_t boxSize; This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA static const int areaWidth=100; static const int areaHeight=100; enum Status { waiting, playing, won, lost }; struct Cell { bool active; //< The cell is part of the game area and thus visible bool bomb; //< Has a bomb bool open; //< The cell has been uncovered bool marked; //< The cell is hidden but marked to have a bomb size_t count; //< Number of bombs in neigbourhood }; size_t sWidth; size_t sHeight; size_t sMaxWidth; size_t sMaxHeight; Lum::OS::FontRef font; Lum::OS::ColorRef emptyColor; Lum::OS::ColorRef cellColor; Lum::OS::ColorRef lightColor; Lum::OS::ColorRef darkColor; Lum::OS::ColorRef textColor; Lum::OS::ColorRef bombColor; Lum::OS::ColorRef markColor; Lum::Model::ULongRef status; Lum::Model::LongRef marks; size_t bombs; Cell area[areaWidth][areaHeight]; Lum::Base::Timer timer; int mbdx; //< Position of mouse on button down int mbdy; //< Position of mouse on button down bool oneButtonMode; Lum::OS::Bitmap *game; size_t themeIndex; // Base class void UpdateDimensions(); // Drawing size_t GetBoxSize() const; Lum::Images::Image* GetImage(Image image) const; void DrawEmptyCellBackground(Lum::OS::DrawInfo* draw, int x, int y, size_t w, size_t h); void DrawHiddenCellBackground(Lum::OS::DrawInfo* draw, int x, int y, size_t w, size_t h); void DrawHiddenCellInternal(Lum::OS::DrawInfo* draw, int x, int y, size_t w, size_t h); void DrawCell(size_t row, size_t column); void RedrawArea(); // Game logic bool GetNeighbour(size_t n, size_t column, size_t row, size_t& x, size_t& y); void RecalcArea(); void OpenField(size_t x, size_t y); void ToggleMark(size_t x, size_t y); Sweeper(); ~Sweeper(); bool RequiresKnobs() const; void SetThemeName(const std::wstring& themeName); void CalcSize(); void Draw(int x, int y, size_t w, size_t h); bool HandleMouseEvent(const Lum::OS::MouseEvent& event); bool SetSize(size_t width, size_t height, size_t bombs); void SetOneButtonMode(bool set); size_t GetAreaWidth() const; size_t GetAreaHeight() const; size_t GetMines() const; size_t GetMinesPercent() const; Lum::Model::ULong* GetStatusModel() const; Lum::Model::Long* GetMarksModel() const; void Run(); Status GetStatus() const; time_t GetElapsedTime() const; void SetStatusToWaiting(); void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg); This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA userName=name; areaWidth=width; areaHeight=height; areaBombs=bombs; return userName; width=areaWidth; height=areaHeight; bombs=areaBombs; oneButtonMode=use; return oneButtonMode; Lum::Config::Node *top; Lum::Config::ErrorList errors; Lum::Base::Path path(Lum::Base::Path::GetApplicationConfigPath()); const char* tmp; tmp=getenv("LOGNAME"); if (tmp!=NULL && tmp[0]!='\0') { userName=Lum::Base::StringToWString(tmp); } oneButtonMode=Lum::OS::display->GetTheme()->RequestFingerFriendlyControls(); size_t boxSize=0; // Find the biggest theme available, prefer external themes theme!=themes.end(); ++theme) { if (theme->boxSize>=boxSize) { if (theme->name.find(L"Internal")==std::wstring::npos) { boxSize=theme->boxSize; themeName=theme->name; } if (theme->name.find(L"Internal")!=std::wstring::npos) { boxSize=theme->boxSize; themeName=theme->name; } } } size_t zoomBoxSize=boxSize; zoomThemeName=themeName; // Find the biggest theme available, prefer external themes theme!=themes.end(); ++theme) { if (theme->boxSize<=zoomBoxSize) { if (theme->name.find(L"Internal")==std::wstring::npos) { zoomBoxSize=theme->boxSize; zoomThemeName=theme->name; } if (theme->name.find(L"Internal")!=std::wstring::npos) { zoomBoxSize=theme->boxSize; zoomThemeName=theme->name; } } } std::cout << "Theme: " << Lum::Base::WStringToString(themeName) << std::endl; // TODO: Find matching theme top=Lum::Config::LoadConfigFromXMLFile(path.GetPath(),errors); if (top==NULL) { return false; } if (top->GetName()!=L"FindMine") { std::cerr << "'" << Lum::Base::WStringToString(path.GetPath()) << "' is a valid config file!" << std::endl; delete top; return false; } bool obm; size_t w,h,b; std::wstring user,tn; if (top->GetAttribute(L"width",w) && top->GetAttribute(L"height",h) && top->GetAttribute(L"bombs",b)) { areaWidth=w; areaHeight=h; areaBombs=b; } if (top->GetAttribute(L"user",user)) { SetUserName(user); } if (top->GetAttribute(L"oneButtonMode",obm)) { SetOneButtonMode(obm); } top->GetAttribute(L"theme",themeName); iter!=top->GetChildren().end(); ++iter) { Lum::Config::Node *node=*iter; if (node->GetName()==L"Hiscore") { if (node->GetAttribute(L"width",w) && node->GetAttribute(L"height",h) && node->GetAttribute(L"bombs",b)) { Hiscore *score=new Hiscore(); score->width=w; score->height=h; score->bombs=b; hiscores.push_back(score); iter!=node->GetChildren().end(); ++iter) { Lum::Config::Node *sub=*iter; if (sub->GetName()==L"Entry") { std::wstring name; size_t time; if (sub->GetAttribute(L"name",name) && sub->GetAttribute(L"time",time)) { Hiscore::Entry entry; entry.name=name; entry.time=time; score->list.push_back(entry); } } } } } } delete top; return true; std::list Lum::Config::Node *top; Lum::Base::Path path(Lum::Base::Path::GetApplicationConfigPath()); std::wstring config; bool res; top=new Lum::Config::Node(); top->SetName(L"FindMine"); top->SetAttribute(L"width",areaWidth); top->SetAttribute(L"height",areaHeight); top->SetAttribute(L"bombs",areaBombs); top->SetAttribute(L"user",userName); top->SetAttribute(L"oneButtonMode",oneButtonMode); top->SetAttribute(L"theme",themeName); iter=hiscores.begin(); while (iter!=hiscores.end()) { Lum::Config::Node *node,*sub; if ((*iter)->list.size()>10) { (*iter)->list.resize(10); } node=new Lum::Config::Node(); node->SetName(L"Hiscore"); node->SetAttribute(L"width",(*iter)->width); node->SetAttribute(L"height",(*iter)->height); node->SetAttribute(L"bombs",(*iter)->bombs); sub=new Lum::Config::Node(); sub->SetName(L"Entry"); sub->SetAttribute(L"name",(*iter)->list[x].name); sub->SetAttribute(L"time",(*iter)->list[x].time); node->Add(sub); } top->Add(node); ++iter; } Lum::Base::Status status; status=path.CreateDirRecursive(); if (!status) { std::cerr << "Cannot create config directory '" << Lum::Base::WStringToString(path.GetDir()) << "': " << Lum::Base::WStringToString(status.GetDescription()) << std::endl; return false; } res=Lum::Config::SaveConfigToXMLFile(path.GetPath(),top); delete top; return res; std::list iter=hiscores.begin(); while (iter!=hiscores.end()) { delete (*iter); ++iter; } hiscores.clear(); std::list Hiscore *hiscore; iter=hiscores.begin(); while (iter!=hiscores.end()) { if ((*iter)->width==width && (*iter)->height==height && (*iter)->bombs==bombs) { return (*iter); } ++iter; } hiscore=new Hiscore; hiscore->width=width; hiscore->height=height; hiscore->bombs=bombs; hiscores.push_back(hiscore); return hiscore; L"hidden.png", L"bomb.png", L"marked.png" Theme theme; theme.name=L"Internal small"; theme.boxSize=16; themes.push_back(theme); theme.name=L"Internal Normal"; theme.boxSize=24; themes.push_back(theme); theme.name=L"Internal Big"; theme.boxSize=32; themes.push_back(theme); theme.name=L"Internal Huge"; theme.boxSize=48; themes.push_back(theme); // Find sub directories in the global or local theme directory that contain // at least one of the required images if (Lum::OS::display->GetType()==Lum::OS::Display::typeGraphical) { DIR *dir; struct dirent *dirEnt; Lum::Base::Path path; Lum::Base::Path appPath; Lum::Base::Path locPath; appPath.SetNativeDir(Lum::Base::StringToWString(APP_DATADIR)); appPath.AppendDir(L"themes"); path=appPath; dir=opendir(Lum::Base::WStringToString(appPath.GetPath()).c_str()); if (dir==NULL) { locPath.SetNativeDir(L"themes"); path=locPath; dir=opendir(Lum::Base::WStringToString(locPath.GetPath()).c_str()); if (dir==NULL) { std::cerr << "Cannot open theme directory as directory '" << Lum::Base::WStringToString(appPath.GetPath()) << "' or '" << Lum::Base::WStringToString(locPath.GetPath()) << "'" << std::endl; return false; } } while ((dirEnt=readdir(dir))!=NULL) { std::wstring dirname=Lum::Base::StringToWString(dirEnt->d_name); Lum::Base::Path dirPath(path); dirPath.AppendDir(dirname); if (strcmp(dirEnt->d_name,".")!=0 && strcmp(dirEnt->d_name,"..")!=0 && dirEnt->d_name[0]!='.' && dirPath.IsDir()) { Theme theme; size_t imageCount=0; theme.name=Lum::Base::StringToWString(dirEnt->d_name); theme.boxSize=0; Lum::Base::Path path; dirPath.SetBaseName(imageNames[i]); theme.images[i]=Lum::Images::Factory::factory->CreateImage(); if (Lum::Images::loader->Load(dirPath.GetPath(),theme.images[i])) { imageCount++; theme.boxSize=std::max(theme.boxSize,theme.images[i]->GetWidth()); theme.boxSize=std::max(theme.boxSize,theme.images[i]->GetHeight()); } else { std::cerr << "Cannot load image '" << Lum::Base::WStringToString(dirPath.GetPath()) << "'" << std::endl; theme.images[i]=NULL; } } if (imageCount!=countImage) { std::cerr << "Not all theming images found => Skipping theme" << std::endl; continue; } themes.push_back(theme); } } } return true; This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Lum::OS::FontRef font; Hiscore::Entry entry; HiscoreEntryObject() : font(Lum::OS::display->GetFont()) { // no code } void SetEntry(const Hiscore::Entry& entry) { this->entry=entry; } void CalcSize() { minWidth=0; minHeight=font->height; width=minWidth; height=minHeight; Object::CalcSize(); } void Draw(int x, int y, size_t w, size_t h) { Object::Draw(x,y,w,h); if (!OIntersect(x,y,w,h)) { return; } /* --- */ Lum::OS::DrawInfo *draw=GetDrawInfo(); draw->PushFont(font); draw->PushForeground(parent->GetTextColor(draw)); // // Name of User // draw->DrawString(this->x, this->y+font->ascent, entry.name); // // // Time in seconds std::wstring time=Lum::Base::NumberToWString(entry.time); if (entry.time==1) { time+=L" second"; } else { time+=L" seconds"; } draw->DrawString(this->x+width-font->StringWidth(time), this->y+font->ascent, time); draw->PopFont(); draw->PopForeground(); } static HiscoreEntryObject* Create(bool horizFlex, bool vertFlex) { HiscoreEntryObject *object=new HiscoreEntryObject(); object->SetFlex(horizFlex,vertFlex); return object; } HiscoreEntryObject *object; HiscoreEntryDataProvider() : object(HiscoreEntryObject::Create(true,false)) { // no code } ~HiscoreEntryDataProvider() { delete object; } Lum::Object* GetObject(const HiscoreEntriesModel::Iterator& iter, size_t column) const { object->SetEntry(*iter); return object; } HiscoreEntriesModelRef list; ScoreView(Sweeper* sweeper) { Hiscore *score; score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); list=new HiscoreEntriesModel(score->list,new HiscoreEntryDataProvider()); list->SetEmptyText(L"(No hiscores)"); } Lum::Object* GetContent() { Lum::Panel *panel; Lum::Table *table; Lum::Model::HeaderRef headerModel; panel=Lum::VPanel::Create(true,true); headerModel=new Lum::Model::HeaderImpl(); headerModel->AddColumn(L"Score",Lum::Base::Size::stdCharWidth,26,true); table=new Lum::Table(); table->SetFlex(true,true); table->SetMinWidth(Lum::Base::Size::stdCharWidth,30); table->SetMinHeight(Lum::Base::Size::stdCharHeight,10); table->SetShowHeader(false); table->GetTableView()->SetAutoFitColumns(true); table->GetTableView()->SetAutoVSize(true); table->SetModel(list); table->SetHeaderModel(headerModel); panel->Add(table); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosClose(actions,GetClosedAction()); } Lum::Model::ActionRef closeAction; Lum::Model::StringRef name; size_t pos; Hiscore *score; ScoreEdit(Sweeper* sweeper, size_t pos) : closeAction(new Lum::Model::Action()), name(new Lum::Model::String()), pos(pos) { score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); Observe(closeAction); name->Set(score->list[pos].name); Observe(name); } Lum::Object* GetContent() { Lum::Grid *grid; Lum::Panel *panel; Lum::Text *text; panel=Lum::VPanel::Create(true,true); grid=new Lum::Grid(); grid->SetSpace(true,true); if (x==pos) { text=new Lum::Text(); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)x+1)+L":"); grid->SetObject(0,x,text); grid->SetObject(1,x,Lum::String::Create(name,10,true,true)); text=new Lum::Text(); text->SetAlignment(Lum::Text::left); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)score->list[x].time)+L" second(s)"); grid->SetObject(2,x,text); } else if (x text=new Lum::Text(); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)x+1)+L":"); grid->SetObject(0,x,text); text=new Lum::Text(); text->SetFlex(true,true); text->SetAlignment(Lum::Text::left); text->SetText(score->list[x].name); grid->SetObject(1,x,text); text=new Lum::Text(); text->SetAlignment(Lum::Text::left); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)score->list[x].time)+L" second(s)"); grid->SetObject(2,x,text); } } panel->Add(grid); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosClose(actions,GetClosedAction()); } void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg) { if (model==closeAction && closeAction->IsFinished()) { Exit(); } else if (model==name) { score->list[pos].name=name->Get(); SetUserName(name->Get()); } else { Dialog::Resync(model,msg); } } Lum::OS::FontRef font; Theme theme; ThemeObject() : font(Lum::OS::display->GetFont()) { // no code } void SetTheme(const Theme& theme) { this->theme=theme; } void CalcSize() { minWidth=0; minHeight=font->height; width=minWidth; height=minHeight; Object::CalcSize(); } void Draw(int x, int y, size_t w, size_t h) { Object::Draw(x,y,w,h); if (!OIntersect(x,y,w,h)) { return; } /* --- */ Lum::OS::DrawInfo *draw=GetDrawInfo(); draw->PushFont(font); draw->PushForeground(parent->GetTextColor(draw)); // // Name of theme // draw->DrawString(this->x, this->y+font->ascent, theme.name); // // // Size of theme std::wstring size=Lum::Base::NumberToWString(theme.boxSize)+L" pixel"; draw->DrawString(this->x+width-font->StringWidth(size), this->y+font->ascent, size); draw->PopFont(); draw->PopForeground(); } static ThemeObject* Create(bool horizFlex, bool vertFlex) { ThemeObject *object=new ThemeObject(); object->SetFlex(horizFlex,vertFlex); return object; } ThemeObject *object; ThemeDataProvider() : object(ThemeObject::Create(true,false)) { // no code } ~ThemeDataProvider() { delete object; } Lum::Object* GetObject(const ThemesModel::Iterator& iter, size_t column) const { object->SetTheme(*iter); return object; } Lum::Model::ActionRef okAction; ThemesModelRef list; Lum::Model::SingleLineSelectionRef selection; std::wstring result; SelectTheme() : okAction(new Lum::Model::Action), list(new ThemesModel(themes,new ThemeDataProvider())), selection(new Lum::Model::SingleLineSelection), result(L"") { list->SetEmptyText(L"(No themes found)"); okAction->Disable(); Observe(okAction); Observe(selection); } Lum::Object* GetContent() { Lum::Panel *panel; Lum::Table *table; Lum::Model::HeaderRef headerModel; panel=Lum::VPanel::Create(true,true); panel->SetWidth(Lum::Base::Size::pixel,(GetWindow()->GetParent()->GetWidth()*80)/100); panel->SetHeight(Lum::Base::Size::pixel,(GetWindow()->GetParent()->GetHeight()*80)/100); headerModel=new Lum::Model::HeaderImpl(); headerModel->AddColumn(L"Theme",Lum::Base::Size::stdCharWidth,20,true); table=new Lum::Table(); table->SetFlex(true,true); table->SetShowHeader(false); table->GetTableView()->SetAutoFitColumns(true); table->SetModel(list); table->SetHeaderModel(headerModel); table->SetSelection(selection); table->SetDoubleClickAction(okAction); panel->Add(table); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosOkCancel(actions,okAction,GetClosedAction()); } void Resync(Lum::Base::Model *model, const Lum::Base::ResyncMsg& msg) { if (model==okAction && okAction->IsFinished()) { if (selection->HasSelection()) { result=themes[selection->GetLine()-1].name; } Exit(); } else if (model==selection) { if (selection->HasSelection()) { okAction->Enable(); } else { okAction->Disable(); } } Dialog::Resync(model,msg); } std::wstring GetResult() const { return result; } Lum::Model::ActionRef smallAction; Lum::Model::ActionRef mediumAction; Lum::Model::ActionRef bigAction; Lum::Model::ActionRef themeAction; Lum::Model::IntRef horiz; Lum::Model::IntRef vert; Lum::Model::IntRef mines; Lum::Model::BooleanRef oneButtonMode; Lum::Model::StringRef themeName; Settings(Sweeper* sweeper) : smallAction(new Lum::Model::Action()), mediumAction(new Lum::Model::Action()), bigAction(new Lum::Model::Action()), themeAction(new Lum::Model::Action()), horiz(new Lum::Model::Int(sweeper->GetAreaWidth())), vert(new Lum::Model::Int(sweeper->GetAreaHeight())), mines(new Lum::Model::Int(sweeper->GetMinesPercent())), oneButtonMode(new Lum::Model::Boolean(GetOneButtonMode())), themeName(new Lum::Model::String()) { Observe(smallAction); Observe(mediumAction); Observe(bigAction); Observe(themeAction); horiz->SetRange(1,30); vert->SetRange(1,30); mines->SetRange(0,100); themeName->Set(::themeName); } Lum::Object* GetContent() { Lum::Label *label; Lum::Panel *panel,*hPanel,*vPanel; Lum::Slider *slider; Lum::TextValue *textValue; /*Lum::Def::Boolean oneButtonModeDef(Lum::Def::Desc(L"One button mode"), oneButtonMode);*/ panel=Lum::HPanel::Create(true,false); label=Lum::Label::Create(true,false); slider=new Lum::HSlider(); slider->SetFlex(true,false); slider->SetScale(true); slider->SetModel(horiz); label->AddLabel(L"Horizontal:",slider); slider=new Lum::HSlider(); slider->SetFlex(true,false); slider->SetScale(true); slider->SetModel(vert); label->AddLabel(L"Vertical:",slider); slider=new Lum::HSlider(); slider->SetFlex(true,false); slider->SetModel(mines); label->AddLabel(L"Mines (in %):",slider); if (!Lum::OS::display->GetTheme()->RequestFingerFriendlyControls()) { label->AddLabel(L"One button mode:",Lum::Boolean::Create(oneButtonMode)); } label->AddLabel(L"One button mode:", Lum::OS::display->GetBehaviour()->GetBooleanControl(oneButtonModeDef));*/ hPanel=Lum::HPanel::Create(true,false); textValue=new Lum::TextValue(); textValue->SetFlex(true,false); textValue->SetModel(themeName); hPanel->Add(textValue); hPanel->Add(Lum::Button::Create(L"...",themeAction,false,true)); label->AddLabel(L"Theme:",hPanel); panel->Add(label); panel->AddSpace(); vPanel=Lum::VPanel::Create(false,true); vPanel->Add(Lum::Button::Create(L"_Small",smallAction,true)); vPanel->Add(Lum::Button::Create(L"_Medium",mediumAction,true)); vPanel->Add(Lum::Button::Create(L"_Big",bigAction,true)); vPanel->AddSpace(true); panel->Add(vPanel); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosClose(actions,GetClosedAction()); } void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg) { if (model==smallAction && smallAction->IsFinished()) { horiz->Set(8); vert->Set(8); mines->Set(Lum::Base::RoundDiv(10*100,8*8)); } else if (model==mediumAction && mediumAction->IsFinished()) { horiz->Set(16); vert->Set(16); mines->Set(Lum::Base::RoundDiv(40*100,16*16)); } else if (model==bigAction && bigAction->IsFinished()) { horiz->Set(30); vert->Set(16); mines->Set(Lum::Base::RoundDiv(99*100,30*16)); } else if (model==themeAction && themeAction->IsFinished()) { SelectTheme *dialog=new SelectTheme(); dialog->SetParent(this); if (dialog->Open()) { dialog->SetExitAction(dialog->GetClosedAction()); dialog->EventLoop(); dialog->Close(); } if (!dialog->GetResult().empty()) { ::themeName=dialog->GetResult(); themeName->Set(dialog->GetResult()); } delete dialog; } else { Dialog::Resync(model,msg); } } Sweeper *sweeper; Lum::Model::ActionRef newGameAction; Lum::Model::BooleanRef zoom; Lum::Model::ActionRef hiscoreAction; Lum::Model::ActionRef settingsAction; Lum::Model::ActionRef helpAction; Lum::Model::ActionRef aboutAction; Lum::Model::ActionRef timerAction; Lum::Text *marks; Lum::Text *time; size_t unzoomX; size_t unzoomY; MyWindow() : sweeper(NULL), newGameAction(new Lum::Model::Action), zoom(new Lum::Model::Boolean(false)), hiscoreAction(new Lum::Model::Action), settingsAction(new Lum::Model::Action), helpAction(new Lum::Model::Action), aboutAction(new Lum::Model::Action), timerAction(new Lum::Model::Action) { Observe(newGameAction); Observe(zoom); Observe(hiscoreAction); Observe(settingsAction); Observe(helpAction); Observe(aboutAction); Observe(timerAction); Observe(GetOpenedAction()); } void PreInit() { Lum::Panel *vPanel,*hPanel; size_t digitWidth,widestDigit; std::wstring timeFormat,marksFormat; Lum::OS::FontRef font; vPanel=Lum::VPanel::Create(true,true); hPanel=Lum::HPanel::Create(true,false); hPanel->Add(Lum::Toggle::Create(L"Zoom out",zoom)); hPanel->Add(Lum::Button::Create(L"_New",newGameAction)); hPanel->Add(new Lum::HSpace(Lum::Space::sizeNormal,true)); font=Lum::OS::display->GetFont(Lum::OS::Display::fontTypeFixed,210); digitWidth=0; widestDigit=0; size_t width; width=font->StringWidth(Lum::Base::NumberToWString(d)); if (width>digitWidth) { digitWidth=width; widestDigit=d; } } marksFormat=L"-"; marksFormat.append(Lum::Base::NumberToWString(widestDigit)); } marks=new Lum::Text(); marks->SetFont(font); marks->SetStyle(Lum::OS::Font::bold); marks->SetAlignment(Lum::Text::right); marks->SetMinWidth(Lum::Base::Size::pixel,font->StringWidth(marksFormat)); marks->SetText(L"0"); hPanel->Add(marks); hPanel->Add(new Lum::HSpace(Lum::Space::sizeNormal,true)); timeFormat.append(Lum::Base::NumberToWString(widestDigit)); } time=new Lum::Text(); time->SetFont(font); time->SetStyle(Lum::OS::Font::bold); time->SetAlignment(Lum::Text::centered); time->SetMinWidth(Lum::Base::Size::pixel,font->StringWidth(timeFormat)); time->SetText(L"0000"); hPanel->Add(time); vPanel->Add(hPanel); vPanel->AddSpace(); sweeper=new Sweeper(); sweeper->SetFlex(true,true); Observe(sweeper->GetStatusModel()); Observe(sweeper->GetMarksModel()); vPanel->Add(Lum::View::Create(sweeper,true,true)); SetMain(vPanel); Lum::Def::Menu *menu=Lum::Def::Menu::Create(); menu ->GroupProject() ->Action(Lum::Def::Action(Lum::Def::Desc(L"_New Game") .SetShortcut(Lum::OS::qualifierControl,L"n"), newGameAction)) ->Separator() ->Action(Lum::Def::Action(Lum::Def::Desc(L"_Hiscore"),hiscoreAction) .SetOpensDialog()) ->Separator() ->ActionQuit(GetClosedAction()) ->End() ->GroupEdit() ->ActionSettings(settingsAction) ->End() ->GroupHelp() ->ActionHelp(helpAction) ->ActionAbout(aboutAction) ->End(); SetMenu(menu); Dialog::PreInit(); } size_t GetHiscorePos() const { Hiscore *score; size_t pos; score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); pos=0; while (pos pos++; } return pos; } void ShowSettings() { Settings* settings; settings=new Settings(sweeper); settings->SetParent(this); if (settings->Open()) { settings->SetExitAction(settings->GetClosedAction()); settings->EventLoop(); settings->Close(); if (sweeper->SetSize(settings->horiz->Get(), settings->vert->Get(), Lum::Base::RoundDiv(settings->horiz->Get()*settings->vert->Get()*settings->mines->Get(),100))) { SetCurrentGame(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); SetOneButtonMode(settings->oneButtonMode->Get()); sweeper->SetOneButtonMode(settings->oneButtonMode->Get()); sweeper->SetThemeName(themeName); sweeper->Run(); } } delete settings; } void ShowHiscore() { ScoreView* score; score=new ScoreView(sweeper); score->SetTitle(L"Hiscore"); score->SetParent(this); if (score->Open()) { score->SetExitAction(score->GetClosedAction()); score->EventLoop(); score->Close(); } delete score; } void ShowHiscoreEdit(size_t pos) { Hiscore::Entry entry; ScoreEdit *scoreDlg; Hiscore* score; std::vector score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); entry.time=sweeper->GetElapsedTime(); entry.name=GetUserName(); iter=score->list.begin(); iter+=pos; score->list.insert(iter,entry); scoreDlg=new ScoreEdit(sweeper,pos); scoreDlg->SetTitle(L"Hiscore"); scoreDlg->SetParent(this); if (scoreDlg->Open()) { scoreDlg->SetExitAction(scoreDlg->GetClosedAction()); scoreDlg->EventLoop(); scoreDlg->Close(); } delete scoreDlg; } void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg) { if (model==GetOpenedAction() && GetOpenedAction()->IsFinished()) { LoadThemes(); if (!LoadConfig()) { std::cout << "Did not find a configuration, use default..." << std::endl; } size_t width,height,mines; GetCurrentGame(width,height,mines); sweeper->SetThemeName(themeName); sweeper->SetSize(width,height,mines); sweeper->SetOneButtonMode(GetOneButtonMode()); } if (model==newGameAction && newGameAction->IsFinished()) { sweeper->SetThemeName(themeName); zoom->Set(false); sweeper->Run(); } else if (model==zoom && sweeper!=NULL) { if (zoom->Get()) { sweeper->SetThemeName(zoomThemeName); } else { sweeper->SetThemeName(themeName); } } else if (model==hiscoreAction && hiscoreAction->IsFinished()) { ShowHiscore(); } else if (model==settingsAction && settingsAction->IsFinished()) { ShowSettings(); } else if (model==aboutAction && aboutAction->IsFinished()) { Lum::Dlg::About::Show(this,info); } else if (model==helpAction && helpAction->IsFinished()) { Lum::Dlg::Help::Show(this, L"This application has a two button mode, for devices\n" L"that have a mouse with at least two buttons and a one\n" L"button mode in case your mouse only has one button or\n" L"you are using a touch screen (in this case you just\n" L"touch instead of click) or similar. In case your device\n" L"has two buttons, you can toggle between both modes using\n" L"a setting in the settings dialog.\n" L"\n" L"In one button mode you mark squares as containing a\n" L"bomb with a simple click, and unmark them with another\n" L"single click. You can open a square by doing a double\n" L"click. Make sure, that you do not click too fast so that\n" L"single clicks are interpreted as double clicks.\n" L"\n" L"In two button mode, you just open a square by pressing\n" L"the left button on it. You mark a square as containing\n" L"a bomb by pressing the right mouse button on it and\n" L"unmark it clicking with the right button on it again\n" L"\n" L"The game is won, if you have opened all squares that\n" L"do not contain a bomb! There is no need to mark all\n" L"squares as containg a bombto finish!\n" L"\n" L"Have fun :-)"); } else if (sweeper!=NULL && model==sweeper->GetStatusModel()) { if (sweeper->GetStatus()==Sweeper::won) { sweeper->SetStatusToWaiting(); size_t pos; pos=GetHiscorePos(); if (pos<10) { ShowHiscoreEdit(pos); } else { if (Lum::Dlg::Msg::Ask(this, L"You have won!", L"You have won.\n" L"\n" L"...but sadly you did not make it into the hiscore.", L"Play one more!*|No, enough!^")==0) { sweeper->Run(); } } } else if (sweeper->GetStatus()==Sweeper::lost) { sweeper->SetStatusToWaiting(); if (Lum::Dlg::Msg::Ask(this, L"Sorry, you have lost.", L"Sorry, you have lost. Please try again.", L"Play one more!*|No, enough!^")==0) { sweeper->Run(); } } else if (sweeper->GetStatus()==Sweeper::playing) { Lum::OS::display->AddTimer(1,0,timerAction); } } else if (model==timerAction && timerAction->IsFinished()) { if (sweeper->GetStatus()==Sweeper::playing) { time_t time=sweeper->GetElapsedTime(); std::wstring value; if (time>9999) { time=9999; } value=Lum::Base::NumberToWString(time); while (value.length()<4) { value.insert(0,L"0"); } this->time->SetText(value); } Lum::OS::display->AddTimer(1,0,timerAction); } else if (sweeper!=NULL && model==sweeper->GetMarksModel()) { this->marks->SetText(Lum::Base::NumberToWString(sweeper->GetMarksModel()->Get())); } else if (model==GetWindow()->GetMapedAction() && GetWindow()->GetMapedAction()->IsFinished()) { Lum::OS::display->AddTimer(1,0,timerAction); } else if (model==GetWindow()->GetUnmapedAction() && GetWindow()->GetMapedAction()->IsFinished()) { Lum::OS::display->RemoveTimer(timerAction); } Dialog::Resync(model,msg); } info.SetProgram(Lum::Base::StringToWString(PACKAGE_NAME)); info.SetVersion(Lum::Base::StringToWString(PACKAGE_VERSION)); info.SetDescription(L"Mark all the hidden mines..."); info.SetAuthor(L"Tim Teulings"); info.SetContact(L"Tim Teulings info.SetCopyright(L"(c) 2004, Tim Teulings"); info.SetLicense(L"GNU Public License"); if (Lum::OS::prober->Open(L"FindMine",argc,argv)) { MyWindow* window; window=new MyWindow; if (window->Open()) { window->SetExitAction(window->GetClosedAction()); window->EventLoop(); window->Close(); } delete window; Lum::OS::display->Close(); } SaveConfig(); FreeConfig(); This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA emptyColor(0.6,0.6,0.6,Lum::OS::Display::blackColor), cellColor(0.7,0.7,0.7,Lum::OS::Display::blackColor), lightColor(0.95,0.95,0.95,Lum::OS::Display::blackColor), darkColor(0.2,0.2,0.2,Lum::OS::Display::blackColor), textColor(1,1,1,Lum::OS::Display::whiteColor), bombColor(0,0,0,Lum::OS::Display::whiteColor), markColor(1,0,0,Lum::OS::Display::whiteColor), status(new Lum::Model::ULong()), marks(new Lum::Model::Long()), bombs(0), oneButtonMode(false), game(NULL), themeIndex(0) sMaxWidth=areaWidth; sMaxHeight=areaHeight; status->Set(waiting); marks->Set(0); font=Lum::OS::display->GetFont(Lum::OS::Display::fontTypeFixed, Lum::OS::Display::fontScaleFootnote); delete game; return false; if (themes[i].name==themeName) { themeIndex=i; if (game!=NULL) { delete game; game=Lum::OS::driver->CreateBitmap(GetAreaWidth()*GetBoxSize(), GetAreaHeight()*GetBoxSize()); RedrawArea(); Redraw(); } return; } } assert(false); width=16*24; height=16*24; minWidth=10*24; minHeight=10*24; Lum::Scrollable::CalcSize(); if (game!=NULL) { hAdjustment->SetDimension(width,game->GetWidth()); vAdjustment->SetDimension(height,game->GetHeight()); } else { hAdjustment->SetInvalid(); vAdjustment->SetInvalid(); } int x, int y, size_t w, size_t h) draw->PushForeground(emptyColor); draw->FillRectangle(x,y,w,h); draw->PopForeground(); int x, int y, size_t w, size_t h) draw->PushForeground(cellColor); draw->FillRectangle(x,y,w,h); draw->PopForeground(); int x, int y, size_t w, size_t h) draw->PushForeground(lightColor); draw->DrawLine(x,y+h-1,x,y); draw->DrawLine(x,y,x+w-1,y); draw->PopForeground(); draw->PushForeground(lightColor); draw->DrawLine(x+1,y+h-2,x+1,y); draw->DrawLine(x,y+1,x+w-2,y+1); draw->PopForeground(); draw->PushForeground(darkColor); draw->DrawLine(x+1,y+h-1,x+w-1,y+h-1); draw->DrawLine(x+w-1,y+h-1,x+w-1,y); draw->PopForeground(); draw->PushForeground(darkColor); draw->DrawLine(x+2,y+h-2,x+w-2,y+h-2); draw->DrawLine(x+w-2,y+h-2,x+w-2,y+1); draw->PopForeground(); size_t x,y,frameA,frameB,frameSize; Lum::OS::DrawInfo *draw=game->GetDrawInfo(); x=row*GetBoxSize(); y=column*GetBoxSize(); frameA=4; frameB=4; frameSize=frameA+frameB; DrawEmptyCellBackground(draw,x,y,GetBoxSize(),GetBoxSize()); // Check if we have a filled gaming area if (area[row][column].active) { // if the given cell is already unrevealed... if (area[row][column].open) { // if there is a bomb... if (area[row][column].bomb) { if (GetImage(bombImage)!=NULL) { GetImage(bombImage)->Draw(draw,x,y); } else { draw->PushForeground(bombColor); draw->FillArc(x+frameA, y+frameA, GetBoxSize()-frameSize, GetBoxSize()-frameSize, 0,360*64); draw->PopForeground(); } } // no bomb... else { // paint the number of hidden neighbours... if (area[row][column].count!=0) { std::wstring string=Lum::Base::NumberToWString((unsigned long)area[row][column].count); draw->PushFont(font); draw->PushForeground(textColor); draw->DrawString(x+(GetBoxSize()-font->StringWidth(string,Lum::OS::Font::normal)) / 2, y+(GetBoxSize()-font->height) / 2+font->ascent, string); draw->PopForeground(); draw->PopFont(); } } } // Cell is still hidden else { // if we are finished playing, draw hidden bomb cells as unhidden and having a bomb... if ((status->Get()!=playing) && (area[row][column].bomb)) { if (GetImage(bombImage)!=NULL) { GetImage(bombImage)->Draw(draw,x,y); } else { draw->PushForeground(bombColor); draw->FillArc(x+frameA, y+frameA, GetBoxSize()-frameSize, GetBoxSize()-frameSize, 0,360*64); draw->PopForeground(); } } // if the cell is marked as having a bomb, do special drawing... else if (area[row][column].marked) { DrawHiddenCellBackground(draw,x,y,GetBoxSize(),GetBoxSize()); if (GetImage(markedImage)!=NULL) { GetImage(markedImage)->Draw(draw,x,y); } else { DrawHiddenCellInternal(draw,x,y,GetBoxSize(),GetBoxSize()); draw->PushForeground(markColor); draw->FillRectangle(x+frameA, y+frameA, GetBoxSize()-frameSize, GetBoxSize()-frameSize); draw->PopForeground(); } } // draw the cell as normal hidden cell... else { DrawHiddenCellBackground(draw,x,y,GetBoxSize(),GetBoxSize()); if (GetImage(hiddenImage)!=NULL) { GetImage(hiddenImage)->Draw(draw,x,y); } else { DrawHiddenCellInternal(draw,x,y,GetBoxSize(),GetBoxSize()); } } } } size_t column, size_t row, size_t& x, size_t& y) /* 012 345 678 */ switch (n) { case 0: x=column-1; y=row-1; break; case 1: x=column; y=row-1; break; case 2: x=column+1; y=row-1; break; case 3: x=column-1; y=row; break; case 4: x=column; y=row; break; case 5: x=column+1; y=row; break; case 6: x=column-1; y=row+1; break; case 7: x=column; y=row+1; break; case 8: x=column+1; y=row+1; break; } return x size_t x,y; /* automatically open cells which have 0 neighbours */ do { long marks=bombs; changed=false; notFound=false; /* calculate neighbourhood */ size_t oldBombs,bombs; oldBombs=area[column][row].count; bombs=0; if (GetNeighbour(n,column,row,x,y)) { if (area[x][y].bomb) { bombs++; } } } if (bombs!=oldBombs) { area[column][row].count=bombs; if (area[column][row].open) { DrawCell(column,row); } } // check if you have opened a bomb if (area[column][row].open && area[column][row].bomb && (status->Get()!=lost)) { timer.Pause(); status->Set(lost); RedrawArea(); // We redraw the complete area to show all bombs Redraw(); } // still unopened areas without bombs if (!area[column][row].bomb && !area[column][row].open) { notFound=true; } } } /* open automatically when neighbour has count 0 and is opened */ if (area[column][row].open && (area[column][row].count==0)) { if (GetNeighbour(n,column,row,x,y)) { if (!area[x][y].open) { area[x][y].open=true; DrawCell(x,y); changed=true; } } } } } } if (area[column][row].marked) { marks--; } } } this->marks->Set(marks); if ((status->Get()==playing) && !notFound) { timer.Pause(); status->Set(won); } } while (changed); return themes[themeIndex].boxSize; return themes[themeIndex].images[image]; DrawCell(x,y); } } if (area[x][y].active) { if (!area[x][y].open) { if (status->Get()==playing && (timer.IsStoped() || timer.IsPausing())) { timer.Start(); } area[x][y].open=true; area[x][y].marked=false; DrawCell(x,y); RecalcArea(); Redraw(); } } if (area[x][y].active) { if (!area[x][y].open) { if (status->Get()==playing && (timer.IsStoped() || timer.IsPausing())) { timer.Start(); } area[x][y].marked=!area[x][y].marked; DrawCell(x,y); RecalcArea(); Redraw(); } } Scrollable::Draw(x,y,w,h); if (!OIntersect(x,y,w,h)) { return; } /* --- */ if (game==NULL) { return; } Lum::OS::DrawInfo *draw=GetDrawInfo(); draw->CopyFromBitmap(game, hAdjustment->GetTop()-1,vAdjustment->GetTop()-1, this->width,this->height, this->x,this->y); if (!visible || status->Get()!=playing) { return false; } if (event.type==Lum::OS::MouseEvent::down && PointIsIn(event)) { mbdx=event.x; mbdy=event.y; return true; } else if (event.type==Lum::OS::MouseEvent::up && PointIsIn(event) && event.button==Lum::OS::MouseEvent::button1 && event.qualifier==Lum::OS::qualifierButton1) { size_t x,y; x=(event.x-this->x+hAdjustment->GetTop()-1)/GetBoxSize(); y=(event.y-this->y+vAdjustment->GetTop()-1)/GetBoxSize(); if (oneButtonMode) { if (GetWindow()->IsDoubleClicked()) { OpenField(x,y); } else { ToggleMark(x,y); } } else { OpenField(x,y); } return true; } else if (event.type==Lum::OS::MouseEvent::up && PointIsIn(event) && event.button==Lum::OS::MouseEvent::button3 && event.qualifier==Lum::OS::qualifierButton3) { if (oneButtonMode) { return true; } size_t x,y; x=(event.x-this->x+hAdjustment->GetTop()-1)/GetBoxSize(); y=(event.y-this->y+vAdjustment->GetTop()-1)/GetBoxSize(); ToggleMark(x,y); return true; } return false; if (width>sMaxWidth || height>sMaxHeight || bombs>width*height) { return false; } sWidth=width; sHeight=height; this->bombs=bombs; delete game; game=Lum::OS::driver->CreateBitmap(GetAreaWidth()*GetBoxSize(), GetAreaHeight()*GetBoxSize()); Run(); RedrawArea(); UpdateDimensions(); Redraw(); return true; oneButtonMode=set; return sWidth; return sHeight; return bombs; return Lum::Base::RoundDiv(bombs*100,sWidth*sHeight); return status.Get(); return marks.Get(); size_t cells,bombs; /* Set a more random seed */ srand(time(NULL)); /* initialize */ area[x][y].bomb=false; area[x][y].open=false; area[x][y].marked=false; area[x][y].count=0; area[x][y].active=false; } } cells=sWidth*sHeight; bombs=this->bombs; area[x][y].active=true; area[x][y].bomb=((float)cells*rand()/RAND_MAX) bombs--; } cells--; } } status->Set(playing); marks->Set(this->bombs); RedrawArea(); Redraw(); timer.Reset(); return (Status)status->Get(); return timer.GetTime(); status->Set(waiting); if (visible) { Redraw(); } if (model==hAdjustment->GetTopModel() || model==vAdjustment->GetTopModel()) { Redraw(); } Lum::Scrollable::Resync(model,msg); Configuration.cpp\ Control.h\ Control.cpp\ FindMine.cpp\ or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 -d DIRECTORIES... CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # Otherwise, the last argument is the destination. Remove it from $@. if test -n "$dstarg"; then esac if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" || lasterr=$? fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { } fi || { (exit 1); exit; } (exit 0); exit The `configure' shell script attempts to guess correct values for It can also use an optional file (typically called `config.cache' If you need to do unusual things to compile the package, please try The file `configure.ac' (or `configure.in') is used to create 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. You can give `configure' initial values for configuration parameters ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. If you have to use a `make' that does not support the `VPATH' You can specify separate installation prefixes for In addition, if you use an unusual directory layout you can give If the package supports it, you can cause programs to be installed For packages that use the X Window System, `configure' can usually CPU-COMPANY-SYSTEM OS KERNEL-OS See the file `config.sub' for the possible values of each field. If If you are _building_ compiler tools for cross-compiling, you should If you want to _use_ a cross compiler, that generates code for a ./configure CC=/usr/local2/bin/gcc /bin/bash ./configure CONFIG_SHELL=/bin/bash Print a summary of the options to `configure', and exit. Print the version of Autoconf used to generate the `configure' script, and exit. Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. Alias for `--cache-file=config.cache'. Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. if [ -f $MAEMO_SELECT_MENU ] then maemo-select-menu-location findmine.desktop tana_fi_games fi * Fixe dbutton label and version in version dialog | tim@teulings.org | 2010-02-23 18:46 UTC |
| 0.5.20100243-1 | $0 [OPTION] ALIAS -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit 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 exit 1;; exit 1;; 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 ;; abacus) # First match some system type aliases # that might get confused with valid system types. -os400*) -tpf*) c4x-* | tic4x-*) os=-coff ;; data/themes/default/bomb.svg \ data/themes/default/marked.svg \ data/themes/default/hidden.svg \ themes/Normal/marked.png\ themes/Normal/hidden.png\ themes/Big/marked.png\ themes/Big/hidden.png\ themes/Huge/bomb.png\ themes/Huge/marked.png\ themes/Huge/hidden.png xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg2818" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="bomb.svg" inkscape:export-filename="/home/tim/projects/FindMine/themes/Huge/hidden.png" inkscape:export-xdpi="67.5" inkscape:export-ydpi="67.5"> offset="0" id="stop3627" /> offset="1" id="stop3629" /> inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1" id="perspective2826" /> xlink:href="#linearGradient3625" id="radialGradient3643" cx="29.929907" cy="32.878506" fx="29.929907" fy="32.878506" r="22.5" gradientUnits="userSpaceOnUse" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> xlink:href="#linearGradient3625-2" id="radialGradient3643-8" cx="29.929907" cy="32.878506" fx="29.929907" fy="32.878506" r="22.5" gradientUnits="userSpaceOnUse" /> offset="0" id="stop3627-8" /> offset="1" id="stop3629-8" /> id="filter3714" x="-0.12" width="1.24" y="-0.12" height="1.24"> stdDeviation="2.25" id="feGaussianBlur3716" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.042366" inkscape:cx="34.75" inkscape:cy="31.317812" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="1154" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1"> id="grid2828" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> inkscape:label="Layer 1" inkscape:groupmode="layer"> style="fill:#1e1e1e;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3714)" id="path2851-7" sodipodi:cx="37.5" sodipodi:cy="41.5" sodipodi:rx="22.5" sodipodi:ry="22.5" d="m 60,41.5 a 22.5,22.5 0 1 1 -45,0 22.5,22.5 0 1 1 45,0 z" transform="matrix(1.0666667,0,0,1.0666667,-6.0000012,-10.266667)" /> style="fill:url(#radialGradient3643);fill-opacity:1;fill-rule:evenodd;stroke:none" id="path2851" sodipodi:cx="37.5" sodipodi:cy="41.5" sodipodi:rx="22.5" sodipodi:ry="22.5" d="m 60,41.5 a 22.5,22.5 0 1 1 -45,0 22.5,22.5 0 1 1 45,0 z" transform="matrix(1.0666667,0,0,1.0666667,-8.0000013,-12.266668)" /> xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg4454" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="marked.svg" inkscape:export-filename="/home/tim/projects/FindMine/themes/Small/marked.png" inkscape:export-xdpi="22.5" inkscape:export-ydpi="22.5"> id="path-effect5196" is_visible="true" yy="true" xx="true" bendpath1="m 19.019,9.528312 27.999998,0" bendpath2="m 47.018998,9.528312 0,24.971047" bendpath3="m 19.019,34.499359 27.999998,0" bendpath4="m 19.019,9.528312 0,24.971047" /> id="path-effect5194" is_visible="true" yy="true" xx="true" bendpath1="m 46.981017,5.0289471 -27.999998,0" bendpath2="m 18.981019,5.0289471 0,19.9999999" bendpath3="m 46.981017,25.028947 -27.999998,0" bendpath4="m 46.981017,5.0289471 0,19.9999999" /> inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1" id="perspective4462" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.078125" inkscape:cx="32" inkscape:cy="31.786903" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="1154" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1"> id="grid4464" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> inkscape:label="Layer 1" inkscape:groupmode="layer"> d="m 18.372743,8.283438 c 0,48.245614 0,48.245614 0,48.245614" id="path4487" /> id="g5115"> d="m 63.5,0 0,63.857936" id="path3763-1" /> d="M 8.7638414e-5,64 64.007605,64" style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8" d="M 0.5,0.00772912 0.5,64.5" style="fill:none;stroke:#ffffff;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2" d="M 64,0.5 0.99624173,0.5" style="fill:none;stroke:#ffffff;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2-5" d="M 63.00781,1.5 0.98818985,1.5" style="fill:none;stroke:#ffffff;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-3" d="m 1.5,2 0,61.522506" style="fill:none;stroke:#ffffff;stroke-width:0.99999624px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="M 1.9924826,63 63,63" style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="m 62.5,2.0000001 0,61.0000019" style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="M 46.999979,34.499661 C 38.00257,34.06949 27.242576,36.109014 18.999981,28.737112 c 0,-6.402833 0,-12.805665 0,-19.208498 11.146925,6.618917 18.673196,6.42667 27.999996,6.402833 10e-7,6.189404 10e-7,12.378809 2e-6,18.568214 0,0 0,0 0,0 z" id="rect5179" sodipodi:nodetypes="ccccc" inkscape:path-effect="#path-effect5196" inkscape:original-d="m 47.019,38.528312 c -8.99741,-0.671845 -19.757404,2.513501 -28,-9 l 0,-29.99999999 C 30.165926,9.865795 37.692197,9.565542 47.018998,9.528312 l 2e-6,29 z" /> xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg3728" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="hidden.svg" inkscape:export-filename="/home/tim/projects/FindMine/themes/Small/hidden.png" inkscape:export-xdpi="22.5" inkscape:export-ydpi="22.5"> inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" inkscape:persp3d-origin="32 : 21.333333 : 1" id="perspective3736" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.078125" inkscape:cx="32" inkscape:cy="32" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="1154" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1"> id="grid3738" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> inkscape:label="Layer 1" inkscape:groupmode="layer"> d="m 0.5,0 0,63.857936" id="path3763-1-5" /> d="m 63.5,0 0,63.857936" id="path3763-1" /> d="M 8.7638414e-5,64 64.007605,64" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8" d="M 0.5,0.00772912 0.5,64.5" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2" d="M 64,0.5 0.99624173,0.5" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-2-5" d="M 63.00781,1.5 0.98818985,1.5" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> id="path3763-1-5-8-3" d="m 1.5,2 0,61.522506" style="fill:none;stroke:#ffffff;stroke-width:0.99999994000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="M 1.9924826,63 63,63" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> d="m 62.5,2.0000001 0,61.0000019" style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" id="svg2" sodipodi:version="0.32" inkscape:version="0.45.1" version="1.0" sodipodi:docbase="/home/tim/projects/FindMine/data/icons" sodipodi:docname="icon.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:export-filename="/home/tim/projects/FindMine/data/Icon64x64.png" inkscape:export-xdpi="120" inkscape:export-ydpi="120"> offset="0" id="stop14046" /> offset="1" id="stop14048" /> offset="0" id="stop12043" /> offset="1" id="stop12045" /> offset="0" id="stop3162" /> offset="1" id="stop3164" /> xlink:href="#linearGradient3160" id="radialGradient4137" cx="21.910675" cy="23.936594" fx="21.910675" fy="23.936594" r="15.00025" gradientUnits="userSpaceOnUse" /> xlink:href="#linearGradient12041" id="radialGradient12051" cx="19.897091" cy="9.1132717" fx="19.897091" fy="9.1132717" r="2.1029098" gradientTransform="matrix(1,0,0,0.9975982,0,2.1888639e-2)" gradientUnits="userSpaceOnUse" /> xlink:href="#linearGradient14044" id="linearGradient14054" x1="41" y1="41.5" x2="48" y2="41.5" gradientUnits="userSpaceOnUse" /> pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="19.291667" inkscape:cx="24" inkscape:cy="24" inkscape:document-units="px" inkscape:current-layer="layer1" width="48px" height="48px" borderlayer="true" showgrid="true" inkscape:object-bbox="true" inkscape:object-points="true" inkscape:object-nodes="true" inkscape:grid-points="true" inkscape:guide-points="true" inkscape:window-width="1600" inkscape:window-height="1153" inkscape:window-x="0" inkscape:window-y="46" /> inkscape:groupmode="layer" id="layer1" style="display:inline"> style="fill:url(#radialGradient4137);fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;stroke-width:0.48264288;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2162" sodipodi:cx="24.970842" sodipodi:cy="28.5" sodipodi:rx="14.5" sodipodi:ry="14.5" d="M 39.470842 28.5 A 14.5 14.5 0 1 1 10.470842,28.5 A 14.5 14.5 0 1 1 39.470842 28.5 z" transform="matrix(0.9655172,0,0,0.9655172,-0.1097772,3.4827592)" /> d="M 24.518359,16 C 20.518359,10 20.518359,10 20.518359,10 L 25.518359,7 L 20.518359,3" id="path6081" /> style="fill:url(#radialGradient12051);fill-opacity:1;fill-rule:evenodd;stroke:#fff700;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path8155" sodipodi:sides="5" sodipodi:cx="20" sodipodi:cy="9" sodipodi:r1="2.236068" sodipodi:r2="1.118034" sodipodi:arg1="0.46364761" sodipodi:arg2="1.0919661" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="M 22,10 L 20.515124,9.9922937 L 19.666977,11.21113 L 19.215455,9.7965481 L 17.794181,9.3665535 L 19,8.5 L 18.969751,7.0154125 L 20.166511,7.894435 L 21.569091,7.4069039 L 21.10291,8.8167232 L 22,10 z " transform="matrix(2.3776582,0,0,2.1450442,-26.30848,-9.0483699)" /> d="M 16.535637,8 C 14.875131,8.3931633 15.228178,7.5434439 14.565875,7.4643629 C 14.097078,7.4083871 13.979359,7 13,7 C 12.631872,7 12.333333,6.687545 12,6.5313175 C 10.917793,6.0241061 12.042589,6 10.419006,6 C 9.786144,6 10.22569,5.5982721 9,5.5982721 C 8.9723936,5.5982721 9.2196872,5 8.5529158,5 C 8.3686105,5 8.1843053,5 8,5" id="path12054" /> d="M 16,13.477322 C 15.350001,13.477322 14,14.217097 14,15 C 14,15.786965 13,15.962416 13,16.431965 C 13,17.697838 12,16.075942 12,18 C 12,18.1714 11,17.615601 11,18.453564" id="path12056" /> d="M 28,9 C 28,9.5659547 29,8.6773705 29,8 C 29,7.6297053 29.666667,7.6774658 30,7.5161987 C 31.532461,6.7747919 30.648579,6 32,6 C 32.450511,6 32.759208,5 33.485961,5" id="path12058" /> d="M 28,13 C 29.640864,13 28.825528,14 31,14 C 31.457468,14 32,14.64726 32,15 C 32,15.402275 34,14.373723 34,15.550756 C 34,16.156866 33.894347,16 34.470842,16" id="path12060" /> d="M 27,4 C 27,4.2944781 26.717569,3 27.524838,3 C 27.751618,3 27.186227,2 28,2" id="path12062" /> d="M 14.565875,3 C 14.7545,3 14.188625,3 14,3 C 13.629534,3 14.565352,2 13.425486,2 C 13.283657,2 13.141829,2 13,2" id="path12064" /> '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF 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). exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 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" # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; 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 sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" tr ' ' ' sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; # 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 ;; 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 ' ' ' | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' | 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" ;; # 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" ;; # 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" ;; # 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" ;; # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. # 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 ' ' ' sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; "$@" || 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 ' ' ' sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; # 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" ;; # 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") *) 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" ;; exec "$@" ;; echo "Unknown depmode $depmode" 1>&2 exit 1 ;; Configuration.cpp\ Control.h\ Control.cpp\ FindMine.cpp This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class Entry { public: std::wstring name; time_t time; }; size_t width; size_t height; size_t bombs; std::vector hiddenImage = 0, bombImage = 1, markedImage = 2, countImage = 3 std::wstring name; Lum::Images::ImageRef images[countImage]; size_t boxSize; This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA static const int areaWidth=100; static const int areaHeight=100; enum Status { waiting, playing, won, lost }; struct Cell { bool active; //< The cell is part of the game area and thus visible bool bomb; //< Has a bomb bool open; //< The cell has been uncovered bool marked; //< The cell is hidden but marked to have a bomb size_t count; //< Number of bombs in neigbourhood }; size_t sWidth; size_t sHeight; size_t sMaxWidth; size_t sMaxHeight; Lum::OS::FontRef font; Lum::OS::ColorRef emptyColor; Lum::OS::ColorRef cellColor; Lum::OS::ColorRef lightColor; Lum::OS::ColorRef darkColor; Lum::OS::ColorRef textColor; Lum::OS::ColorRef bombColor; Lum::OS::ColorRef markColor; Lum::Model::ULongRef status; Lum::Model::LongRef marks; size_t bombs; Cell area[areaWidth][areaHeight]; Lum::Base::Timer timer; int mbdx; //< Position of mouse on button down int mbdy; //< Position of mouse on button down bool oneButtonMode; Lum::OS::Bitmap *game; size_t themeIndex; // Base class void UpdateDimensions(); // Drawing size_t GetBoxSize() const; Lum::Images::Image* GetImage(Image image) const; void DrawEmptyCellBackground(Lum::OS::DrawInfo* draw, int x, int y, size_t w, size_t h); void DrawHiddenCellBackground(Lum::OS::DrawInfo* draw, int x, int y, size_t w, size_t h); void DrawHiddenCellInternal(Lum::OS::DrawInfo* draw, int x, int y, size_t w, size_t h); void DrawCell(size_t row, size_t column); void RedrawArea(); // Game logic bool GetNeighbour(size_t n, size_t column, size_t row, size_t& x, size_t& y); void RecalcArea(); void OpenField(size_t x, size_t y); void ToggleMark(size_t x, size_t y); Sweeper(); ~Sweeper(); bool RequiresKnobs() const; void SetThemeName(const std::wstring& themeName); void CalcSize(); void Draw(int x, int y, size_t w, size_t h); bool HandleMouseEvent(const Lum::OS::MouseEvent& event); bool SetSize(size_t width, size_t height, size_t bombs); void SetOneButtonMode(bool set); size_t GetAreaWidth() const; size_t GetAreaHeight() const; size_t GetMines() const; size_t GetMinesPercent() const; Lum::Model::ULong* GetStatusModel() const; Lum::Model::Long* GetMarksModel() const; void Run(); Status GetStatus() const; time_t GetElapsedTime() const; void SetStatusToWaiting(); void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg); This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA userName=name; areaWidth=width; areaHeight=height; areaBombs=bombs; return userName; width=areaWidth; height=areaHeight; bombs=areaBombs; oneButtonMode=use; return oneButtonMode; Lum::Config::Node *top; Lum::Config::ErrorList errors; Lum::Base::Path path(Lum::Base::Path::GetApplicationConfigPath()); const char* tmp; tmp=getenv("LOGNAME"); if (tmp!=NULL && tmp[0]!='\0') { userName=Lum::Base::StringToWString(tmp); } oneButtonMode=Lum::OS::display->GetTheme()->RequestFingerFriendlyControls(); size_t boxSize=0; // Find the biggest theme available, prefer external themes theme!=themes.end(); ++theme) { if (theme->boxSize>=boxSize) { if (theme->name.find(L"Internal")==std::wstring::npos) { boxSize=theme->boxSize; themeName=theme->name; } if (theme->name.find(L"Internal")!=std::wstring::npos) { boxSize=theme->boxSize; themeName=theme->name; } } } size_t zoomBoxSize=boxSize; zoomThemeName=themeName; // Find the biggest theme available, prefer external themes theme!=themes.end(); ++theme) { if (theme->boxSize<=zoomBoxSize) { if (theme->name.find(L"Internal")==std::wstring::npos) { zoomBoxSize=theme->boxSize; zoomThemeName=theme->name; } if (theme->name.find(L"Internal")!=std::wstring::npos) { zoomBoxSize=theme->boxSize; zoomThemeName=theme->name; } } } std::cout << "Theme: " << Lum::Base::WStringToString(themeName) << std::endl; // TODO: Find matching theme top=Lum::Config::LoadConfigFromXMLFile(path.GetPath(),errors); if (top==NULL) { return false; } if (top->GetName()!=L"FindMine") { std::cerr << "'" << Lum::Base::WStringToString(path.GetPath()) << "' is a valid config file!" << std::endl; delete top; return false; } bool obm; size_t w,h,b; std::wstring user,tn; if (top->GetAttribute(L"width",w) && top->GetAttribute(L"height",h) && top->GetAttribute(L"bombs",b)) { areaWidth=w; areaHeight=h; areaBombs=b; } if (top->GetAttribute(L"user",user)) { SetUserName(user); } if (top->GetAttribute(L"oneButtonMode",obm)) { SetOneButtonMode(obm); } top->GetAttribute(L"theme",themeName); iter!=top->GetChildren().end(); ++iter) { Lum::Config::Node *node=*iter; if (node->GetName()==L"Hiscore") { if (node->GetAttribute(L"width",w) && node->GetAttribute(L"height",h) && node->GetAttribute(L"bombs",b)) { Hiscore *score=new Hiscore(); score->width=w; score->height=h; score->bombs=b; hiscores.push_back(score); iter!=node->GetChildren().end(); ++iter) { Lum::Config::Node *sub=*iter; if (sub->GetName()==L"Entry") { std::wstring name; size_t time; if (sub->GetAttribute(L"name",name) && sub->GetAttribute(L"time",time)) { Hiscore::Entry entry; entry.name=name; entry.time=time; score->list.push_back(entry); } } } } } } delete top; return true; std::list Lum::Config::Node *top; Lum::Base::Path path(Lum::Base::Path::GetApplicationConfigPath()); std::wstring config; bool res; top=new Lum::Config::Node(); top->SetName(L"FindMine"); top->SetAttribute(L"width",areaWidth); top->SetAttribute(L"height",areaHeight); top->SetAttribute(L"bombs",areaBombs); top->SetAttribute(L"user",userName); top->SetAttribute(L"oneButtonMode",oneButtonMode); top->SetAttribute(L"theme",themeName); iter=hiscores.begin(); while (iter!=hiscores.end()) { Lum::Config::Node *node,*sub; if ((*iter)->list.size()>10) { (*iter)->list.resize(10); } node=new Lum::Config::Node(); node->SetName(L"Hiscore"); node->SetAttribute(L"width",(*iter)->width); node->SetAttribute(L"height",(*iter)->height); node->SetAttribute(L"bombs",(*iter)->bombs); sub=new Lum::Config::Node(); sub->SetName(L"Entry"); sub->SetAttribute(L"name",(*iter)->list[x].name); sub->SetAttribute(L"time",(*iter)->list[x].time); node->Add(sub); } top->Add(node); ++iter; } Lum::Base::Status status; status=path.CreateDirRecursive(); if (!status) { std::cerr << "Cannot create config directory '" << Lum::Base::WStringToString(path.GetDir()) << "': " << Lum::Base::WStringToString(status.GetDescription()) << std::endl; return false; } res=Lum::Config::SaveConfigToXMLFile(path.GetPath(),top); delete top; return res; std::list iter=hiscores.begin(); while (iter!=hiscores.end()) { delete (*iter); ++iter; } hiscores.clear(); std::list Hiscore *hiscore; iter=hiscores.begin(); while (iter!=hiscores.end()) { if ((*iter)->width==width && (*iter)->height==height && (*iter)->bombs==bombs) { return (*iter); } ++iter; } hiscore=new Hiscore; hiscore->width=width; hiscore->height=height; hiscore->bombs=bombs; hiscores.push_back(hiscore); return hiscore; L"hidden.png", L"bomb.png", L"marked.png" Theme theme; theme.name=L"Internal small"; theme.boxSize=16; themes.push_back(theme); theme.name=L"Internal Normal"; theme.boxSize=24; themes.push_back(theme); theme.name=L"Internal Big"; theme.boxSize=32; themes.push_back(theme); theme.name=L"Internal Huge"; theme.boxSize=48; themes.push_back(theme); // Find sub directories in the global or local theme directory that contain // at least one of the required images if (Lum::OS::display->GetType()==Lum::OS::Display::typeGraphical) { DIR *dir; struct dirent *dirEnt; Lum::Base::Path path; Lum::Base::Path appPath; Lum::Base::Path locPath; appPath.SetNativeDir(Lum::Base::StringToWString(APP_DATADIR)); appPath.AppendDir(L"themes"); path=appPath; dir=opendir(Lum::Base::WStringToString(appPath.GetPath()).c_str()); if (dir==NULL) { locPath.SetNativeDir(L"themes"); path=locPath; dir=opendir(Lum::Base::WStringToString(locPath.GetPath()).c_str()); if (dir==NULL) { std::cerr << "Cannot open theme directory as directory '" << Lum::Base::WStringToString(appPath.GetPath()) << "' or '" << Lum::Base::WStringToString(locPath.GetPath()) << "'" << std::endl; return false; } } while ((dirEnt=readdir(dir))!=NULL) { std::wstring dirname=Lum::Base::StringToWString(dirEnt->d_name); Lum::Base::Path dirPath(path); dirPath.AppendDir(dirname); if (strcmp(dirEnt->d_name,".")!=0 && strcmp(dirEnt->d_name,"..")!=0 && dirEnt->d_name[0]!='.' && dirPath.IsDir()) { Theme theme; size_t imageCount=0; theme.name=Lum::Base::StringToWString(dirEnt->d_name); theme.boxSize=0; Lum::Base::Path path; dirPath.SetBaseName(imageNames[i]); theme.images[i]=Lum::Images::Factory::factory->CreateImage(); if (Lum::Images::loader->Load(dirPath.GetPath(),theme.images[i])) { imageCount++; theme.boxSize=std::max(theme.boxSize,theme.images[i]->GetWidth()); theme.boxSize=std::max(theme.boxSize,theme.images[i]->GetHeight()); } else { std::cerr << "Cannot load image '" << Lum::Base::WStringToString(dirPath.GetPath()) << "'" << std::endl; theme.images[i]=NULL; } } if (imageCount!=countImage) { std::cerr << "Not all theming images found => Skipping theme" << std::endl; continue; } themes.push_back(theme); } } } return true; This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Lum::OS::FontRef font; Hiscore::Entry entry; HiscoreEntryObject() : font(Lum::OS::display->GetFont()) { // no code } void SetEntry(const Hiscore::Entry& entry) { this->entry=entry; } void CalcSize() { minWidth=0; minHeight=font->height; width=minWidth; height=minHeight; Object::CalcSize(); } void Draw(int x, int y, size_t w, size_t h) { Object::Draw(x,y,w,h); if (!OIntersect(x,y,w,h)) { return; } /* --- */ Lum::OS::DrawInfo *draw=GetDrawInfo(); draw->PushFont(font); draw->PushForeground(parent->GetTextColor(draw)); // // Name of User // draw->DrawString(this->x, this->y+font->ascent, entry.name); // // // Time in seconds std::wstring time=Lum::Base::NumberToWString(entry.time); if (entry.time==1) { time+=L" second"; } else { time+=L" seconds"; } draw->DrawString(this->x+width-font->StringWidth(time), this->y+font->ascent, time); draw->PopFont(); draw->PopForeground(); } static HiscoreEntryObject* Create(bool horizFlex, bool vertFlex) { HiscoreEntryObject *object=new HiscoreEntryObject(); object->SetFlex(horizFlex,vertFlex); return object; } HiscoreEntryObject *object; HiscoreEntryDataProvider() : object(HiscoreEntryObject::Create(true,false)) { // no code } ~HiscoreEntryDataProvider() { delete object; } Lum::Object* GetObject(const HiscoreEntriesModel::Iterator& iter, size_t column) const { object->SetEntry(*iter); return object; } HiscoreEntriesModelRef list; ScoreView(Sweeper* sweeper) { Hiscore *score; score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); list=new HiscoreEntriesModel(score->list,new HiscoreEntryDataProvider()); list->SetEmptyText(L"(No hiscores)"); } Lum::Object* GetContent() { Lum::Panel *panel; Lum::Table *table; Lum::Model::HeaderRef headerModel; panel=Lum::VPanel::Create(true,true); headerModel=new Lum::Model::HeaderImpl(); headerModel->AddColumn(L"Score",Lum::Base::Size::stdCharWidth,26,true); table=new Lum::Table(); table->SetFlex(true,true); table->SetMinWidth(Lum::Base::Size::stdCharWidth,30); table->SetMinHeight(Lum::Base::Size::stdCharHeight,10); table->SetShowHeader(false); table->GetTableView()->SetAutoFitColumns(true); table->GetTableView()->SetAutoVSize(true); table->SetModel(list); table->SetHeaderModel(headerModel); panel->Add(table); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosClose(actions,GetClosedAction()); } Lum::Model::ActionRef closeAction; Lum::Model::StringRef name; size_t pos; Hiscore *score; ScoreEdit(Sweeper* sweeper, size_t pos) : closeAction(new Lum::Model::Action()), name(new Lum::Model::String()), pos(pos) { score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); Observe(closeAction); name->Set(score->list[pos].name); Observe(name); } Lum::Object* GetContent() { Lum::Grid *grid; Lum::Panel *panel; Lum::Text *text; panel=Lum::VPanel::Create(true,true); grid=new Lum::Grid(); grid->SetSpace(true,true); if (x==pos) { text=new Lum::Text(); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)x+1)+L":"); grid->SetObject(0,x,text); grid->SetObject(1,x,Lum::String::Create(name,10,true,true)); text=new Lum::Text(); text->SetAlignment(Lum::Text::left); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)score->list[x].time)+L" second(s)"); grid->SetObject(2,x,text); } else if (x text=new Lum::Text(); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)x+1)+L":"); grid->SetObject(0,x,text); text=new Lum::Text(); text->SetFlex(true,true); text->SetAlignment(Lum::Text::left); text->SetText(score->list[x].name); grid->SetObject(1,x,text); text=new Lum::Text(); text->SetAlignment(Lum::Text::left); text->SetFlex(true,true); text->SetText(Lum::Base::NumberToWString((unsigned long)score->list[x].time)+L" second(s)"); grid->SetObject(2,x,text); } } panel->Add(grid); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosClose(actions,GetClosedAction()); } void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg) { if (model==closeAction && closeAction->IsFinished()) { Exit(); } else if (model==name) { score->list[pos].name=name->Get(); SetUserName(name->Get()); } else { Dialog::Resync(model,msg); } } Lum::OS::FontRef font; Theme theme; ThemeObject() : font(Lum::OS::display->GetFont()) { // no code } void SetTheme(const Theme& theme) { this->theme=theme; } void CalcSize() { minWidth=0; minHeight=font->height; width=minWidth; height=minHeight; Object::CalcSize(); } void Draw(int x, int y, size_t w, size_t h) { Object::Draw(x,y,w,h); if (!OIntersect(x,y,w,h)) { return; } /* --- */ Lum::OS::DrawInfo *draw=GetDrawInfo(); draw->PushFont(font); draw->PushForeground(parent->GetTextColor(draw)); // // Name of theme // draw->DrawString(this->x, this->y+font->ascent, theme.name); // // // Size of theme std::wstring size=Lum::Base::NumberToWString(theme.boxSize)+L" pixel"; draw->DrawString(this->x+width-font->StringWidth(size), this->y+font->ascent, size); draw->PopFont(); draw->PopForeground(); } static ThemeObject* Create(bool horizFlex, bool vertFlex) { ThemeObject *object=new ThemeObject(); object->SetFlex(horizFlex,vertFlex); return object; } ThemeObject *object; ThemeDataProvider() : object(ThemeObject::Create(true,false)) { // no code } ~ThemeDataProvider() { delete object; } Lum::Object* GetObject(const ThemesModel::Iterator& iter, size_t column) const { object->SetTheme(*iter); return object; } Lum::Model::ActionRef okAction; ThemesModelRef list; Lum::Model::SingleLineSelectionRef selection; std::wstring result; SelectTheme() : okAction(new Lum::Model::Action), list(new ThemesModel(themes,new ThemeDataProvider())), selection(new Lum::Model::SingleLineSelection), result(L"") { list->SetEmptyText(L"(No themes found)"); okAction->Disable(); Observe(okAction); Observe(selection); } Lum::Object* GetContent() { Lum::Panel *panel; Lum::Table *table; Lum::Model::HeaderRef headerModel; panel=Lum::VPanel::Create(true,true); panel->SetWidth(Lum::Base::Size::pixel,(GetWindow()->GetParent()->GetWidth()*80)/100); panel->SetHeight(Lum::Base::Size::pixel,(GetWindow()->GetParent()->GetHeight()*80)/100); headerModel=new Lum::Model::HeaderImpl(); headerModel->AddColumn(L"Theme",Lum::Base::Size::stdCharWidth,20,true); table=new Lum::Table(); table->SetFlex(true,true); table->SetShowHeader(false); table->GetTableView()->SetAutoFitColumns(true); table->SetModel(list); table->SetHeaderModel(headerModel); table->SetSelection(selection); table->SetDoubleClickAction(okAction); panel->Add(table); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosOkCancel(actions,okAction,GetClosedAction()); } void Resync(Lum::Base::Model *model, const Lum::Base::ResyncMsg& msg) { if (model==okAction && okAction->IsFinished()) { if (selection->HasSelection()) { result=themes[selection->GetLine()-1].name; } Exit(); } else if (model==selection) { if (selection->HasSelection()) { okAction->Enable(); } else { okAction->Disable(); } } Dialog::Resync(model,msg); } std::wstring GetResult() const { return result; } Lum::Model::ActionRef smallAction; Lum::Model::ActionRef mediumAction; Lum::Model::ActionRef bigAction; Lum::Model::ActionRef themeAction; Lum::Model::IntRef horiz; Lum::Model::IntRef vert; Lum::Model::IntRef mines; Lum::Model::BooleanRef oneButtonMode; Lum::Model::StringRef themeName; Settings(Sweeper* sweeper) : smallAction(new Lum::Model::Action()), mediumAction(new Lum::Model::Action()), bigAction(new Lum::Model::Action()), themeAction(new Lum::Model::Action()), horiz(new Lum::Model::Int(sweeper->GetAreaWidth())), vert(new Lum::Model::Int(sweeper->GetAreaHeight())), mines(new Lum::Model::Int(sweeper->GetMinesPercent())), oneButtonMode(new Lum::Model::Boolean(GetOneButtonMode())), themeName(new Lum::Model::String()) { Observe(smallAction); Observe(mediumAction); Observe(bigAction); Observe(themeAction); horiz->SetRange(1,30); vert->SetRange(1,30); mines->SetRange(0,100); themeName->Set(::themeName); } Lum::Object* GetContent() { Lum::Label *label; Lum::Panel *panel,*hPanel,*vPanel; Lum::Slider *slider; Lum::TextValue *textValue; /*Lum::Def::Boolean oneButtonModeDef(Lum::Def::Desc(L"One button mode"), oneButtonMode);*/ panel=Lum::HPanel::Create(true,false); label=Lum::Label::Create(true,false); slider=new Lum::HSlider(); slider->SetFlex(true,false); slider->SetScale(true); slider->SetModel(horiz); label->AddLabel(L"Horizontal:",slider); slider=new Lum::HSlider(); slider->SetFlex(true,false); slider->SetScale(true); slider->SetModel(vert); label->AddLabel(L"Vertical:",slider); slider=new Lum::HSlider(); slider->SetFlex(true,false); slider->SetModel(mines); label->AddLabel(L"Mines (in %):",slider); if (!Lum::OS::display->GetTheme()->RequestFingerFriendlyControls()) { label->AddLabel(L"One button mode:",Lum::Boolean::Create(oneButtonMode)); } label->AddLabel(L"One button mode:", Lum::OS::display->GetBehaviour()->GetBooleanControl(oneButtonModeDef));*/ hPanel=Lum::HPanel::Create(true,false); textValue=new Lum::TextValue(); textValue->SetFlex(true,false); textValue->SetModel(themeName); hPanel->Add(textValue); hPanel->Add(Lum::Button::Create(L"...",themeAction,false,true)); label->AddLabel(L"Theme:",hPanel); panel->Add(label); panel->AddSpace(); vPanel=Lum::VPanel::Create(false,true); vPanel->Add(Lum::Button::Create(L"_Small",smallAction,true)); vPanel->Add(Lum::Button::Create(L"_Medium",mediumAction,true)); vPanel->Add(Lum::Button::Create(L"_Big",bigAction,true)); vPanel->AddSpace(true); panel->Add(vPanel); return panel; } void GetActions(std::vector { Lum::Dlg::ActionDialog::CreateActionInfosClose(actions,GetClosedAction()); } void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg) { if (model==smallAction && smallAction->IsFinished()) { horiz->Set(8); vert->Set(8); mines->Set(Lum::Base::RoundDiv(10*100,8*8)); } else if (model==mediumAction && mediumAction->IsFinished()) { horiz->Set(16); vert->Set(16); mines->Set(Lum::Base::RoundDiv(40*100,16*16)); } else if (model==bigAction && bigAction->IsFinished()) { horiz->Set(30); vert->Set(16); mines->Set(Lum::Base::RoundDiv(99*100,30*16)); } else if (model==themeAction && themeAction->IsFinished()) { SelectTheme *dialog=new SelectTheme(); dialog->SetParent(this); if (dialog->Open()) { dialog->SetExitAction(dialog->GetClosedAction()); dialog->EventLoop(); dialog->Close(); } if (!dialog->GetResult().empty()) { ::themeName=dialog->GetResult(); themeName->Set(dialog->GetResult()); } delete dialog; } else { Dialog::Resync(model,msg); } } Sweeper *sweeper; Lum::Model::ActionRef newGameAction; Lum::Model::BooleanRef zoom; Lum::Model::ActionRef hiscoreAction; Lum::Model::ActionRef settingsAction; Lum::Model::ActionRef helpAction; Lum::Model::ActionRef aboutAction; Lum::Model::ActionRef timerAction; Lum::Text *marks; Lum::Text *time; size_t unzoomX; size_t unzoomY; MyWindow() : sweeper(NULL), newGameAction(new Lum::Model::Action), zoom(new Lum::Model::Boolean(false)), hiscoreAction(new Lum::Model::Action), settingsAction(new Lum::Model::Action), helpAction(new Lum::Model::Action), aboutAction(new Lum::Model::Action), timerAction(new Lum::Model::Action) { Observe(newGameAction); Observe(zoom); Observe(hiscoreAction); Observe(settingsAction); Observe(helpAction); Observe(aboutAction); Observe(timerAction); Observe(GetOpenedAction()); } void PreInit() { Lum::Panel *vPanel,*hPanel; size_t digitWidth,widestDigit; std::wstring timeFormat,marksFormat; Lum::OS::FontRef font; vPanel=Lum::VPanel::Create(true,true); hPanel=Lum::HPanel::Create(true,false); hPanel->Add(Lum::Toggle::Create(L"Zoom",zoom)); hPanel->Add(Lum::Button::Create(L"_New",newGameAction)); hPanel->Add(new Lum::HSpace(Lum::Space::sizeNormal,true)); font=Lum::OS::display->GetFont(Lum::OS::Display::fontTypeFixed,210); digitWidth=0; widestDigit=0; size_t width; width=font->StringWidth(Lum::Base::NumberToWString(d)); if (width>digitWidth) { digitWidth=width; widestDigit=d; } } marksFormat=L"-"; marksFormat.append(Lum::Base::NumberToWString(widestDigit)); } marks=new Lum::Text(); marks->SetFont(font); marks->SetStyle(Lum::OS::Font::bold); marks->SetAlignment(Lum::Text::right); marks->SetMinWidth(Lum::Base::Size::pixel,font->StringWidth(marksFormat)); marks->SetText(L"0"); hPanel->Add(marks); hPanel->Add(new Lum::HSpace(Lum::Space::sizeNormal,true)); timeFormat.append(Lum::Base::NumberToWString(widestDigit)); } time=new Lum::Text(); time->SetFont(font); time->SetStyle(Lum::OS::Font::bold); time->SetAlignment(Lum::Text::centered); time->SetMinWidth(Lum::Base::Size::pixel,font->StringWidth(timeFormat)); time->SetText(L"0000"); hPanel->Add(time); vPanel->Add(hPanel); vPanel->AddSpace(); sweeper=new Sweeper(); sweeper->SetFlex(true,true); Observe(sweeper->GetStatusModel()); Observe(sweeper->GetMarksModel()); vPanel->Add(Lum::View::Create(sweeper,true,true)); SetMain(vPanel); Lum::Def::Menu *menu=Lum::Def::Menu::Create(); menu ->GroupProject() ->Action(Lum::Def::Action(Lum::Def::Desc(L"_New Game") .SetShortcut(Lum::OS::qualifierControl,L"n"), newGameAction)) ->Separator() ->Action(Lum::Def::Action(Lum::Def::Desc(L"_Hiscore"),hiscoreAction) .SetOpensDialog()) ->Separator() ->ActionQuit(GetClosedAction()) ->End() ->GroupEdit() ->ActionSettings(settingsAction) ->End() ->GroupHelp() ->ActionHelp(helpAction) ->ActionAbout(aboutAction) ->End(); SetMenu(menu); Dialog::PreInit(); } size_t GetHiscorePos() const { Hiscore *score; size_t pos; score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); pos=0; while (pos pos++; } return pos; } void ShowSettings() { Settings* settings; settings=new Settings(sweeper); settings->SetParent(this); if (settings->Open()) { settings->SetExitAction(settings->GetClosedAction()); settings->EventLoop(); settings->Close(); if (sweeper->SetSize(settings->horiz->Get(), settings->vert->Get(), Lum::Base::RoundDiv(settings->horiz->Get()*settings->vert->Get()*settings->mines->Get(),100))) { SetCurrentGame(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); SetOneButtonMode(settings->oneButtonMode->Get()); sweeper->SetOneButtonMode(settings->oneButtonMode->Get()); sweeper->SetThemeName(themeName); sweeper->Run(); } } delete settings; } void ShowHiscore() { ScoreView* score; score=new ScoreView(sweeper); score->SetTitle(L"Hiscore"); score->SetParent(this); if (score->Open()) { score->SetExitAction(score->GetClosedAction()); score->EventLoop(); score->Close(); } delete score; } void ShowHiscoreEdit(size_t pos) { Hiscore::Entry entry; ScoreEdit *scoreDlg; Hiscore* score; std::vector score=GetConfig(sweeper->GetAreaWidth(), sweeper->GetAreaHeight(), sweeper->GetMines()); entry.time=sweeper->GetElapsedTime(); entry.name=GetUserName(); iter=score->list.begin(); iter+=pos; score->list.insert(iter,entry); scoreDlg=new ScoreEdit(sweeper,pos); scoreDlg->SetTitle(L"Hiscore"); scoreDlg->SetParent(this); if (scoreDlg->Open()) { scoreDlg->SetExitAction(scoreDlg->GetClosedAction()); scoreDlg->EventLoop(); scoreDlg->Close(); } delete scoreDlg; } void Resync(Lum::Base::Model* model, const Lum::Base::ResyncMsg& msg) { if (model==GetOpenedAction() && GetOpenedAction()->IsFinished()) { LoadThemes(); if (!LoadConfig()) { std::cout << "Did not find a configuration, use default..." << std::endl; } size_t width,height,mines; GetCurrentGame(width,height,mines); sweeper->SetThemeName(themeName); sweeper->SetSize(width,height,mines); sweeper->SetOneButtonMode(GetOneButtonMode()); } if (model==newGameAction && newGameAction->IsFinished()) { sweeper->SetThemeName(themeName); zoom->Set(false); sweeper->Run(); } else if (model==zoom && sweeper!=NULL) { if (zoom->Get()) { sweeper->SetThemeName(zoomThemeName); } else { sweeper->SetThemeName(themeName); } } else if (model==hiscoreAction && hiscoreAction->IsFinished()) { ShowHiscore(); } else if (model==settingsAction && settingsAction->IsFinished()) { ShowSettings(); } else if (model==aboutAction && aboutAction->IsFinished()) { Lum::Dlg::About::Show(this,info); } else if (model==helpAction && helpAction->IsFinished()) { Lum::Dlg::Help::Show(this, L"This application has a two button mode, for devices\n" L"that have a mouse with at least two buttons and a one\n" L"button mode in case your mouse only has one button or\n" L"you are using a touch screen (in this case you just\n" L"touch instead of click) or similar. In case your device\n" L"has two buttons, you can toggle between both modes using\n" L"a setting in the settings dialog.\n" L"\n" L"In one button mode you mark squares as containing a\n" L"bomb with a simple click, and unmark them with another\n" L"single click. You can open a square by doing a double\n" L"click. Make sure, that you do not click too fast so that\n" L"single clicks are interpreted as double clicks.\n" L"\n" L"In two button mode, you just open a square by pressing\n" L"the left button on it. You mark a square as containing\n" L"a bomb by pressing the right mouse button on it and\n" L"unmark it clicking with the right button on it again\n" L"\n" L"The game is won, if you have opened all squares that\n" L"do not contain a bomb! There is no need to mark all\n" L"squares as containg a bombto finish!\n" L"\n" L"Have fun :-)"); } else if (sweeper!=NULL && model==sweeper->GetStatusModel()) { if (sweeper->GetStatus()==Sweeper::won) { sweeper->SetStatusToWaiting(); size_t pos; pos=GetHiscorePos(); if (pos<10) { ShowHiscoreEdit(pos); } else { if (Lum::Dlg::Msg::Ask(this, L"You have won!", L"You have won.\n" L"\n" L"...but sadly you did not make it into the hiscore.", L"Play one more!*|No, enough!^")==0) { sweeper->Run(); } } } else if (sweeper->GetStatus()==Sweeper::lost) { sweeper->SetStatusToWaiting(); if (Lum::Dlg::Msg::Ask(this, L"Sorry, you have lost.", L"Sorry, you have lost. Please try again.", L"Play one more!*|No, enough!^")==0) { sweeper->Run(); } } else if (sweeper->GetStatus()==Sweeper::playing) { Lum::OS::display->AddTimer(1,0,timerAction); } } else if (model==timerAction && timerAction->IsFinished()) { if (sweeper->GetStatus()==Sweeper::playing) { time_t time=sweeper->GetElapsedTime(); std::wstring value; if (time>9999) { time=9999; } value=Lum::Base::NumberToWString(time); while (value.length()<4) { value.insert(0,L"0"); } this->time->SetText(value); } Lum::OS::display->AddTimer(1,0,timerAction); } else if (sweeper!=NULL && model==sweeper->GetMarksModel()) { this->marks->SetText(Lum::Base::NumberToWString(sweeper->GetMarksModel()->Get())); } else if (model==GetWindow()->GetMapedAction() && GetWindow()->GetMapedAction()->IsFinished()) { Lum::OS::display->AddTimer(1,0,timerAction); } else if (model==GetWindow()->GetUnmapedAction() && GetWindow()->GetMapedAction()->IsFinished()) { Lum::OS::display->RemoveTimer(timerAction); } Dialog::Resync(model,msg); } info.SetProgram(Lum::Base::StringToWString(PACKAGE_NAME)); info.SetVersion(Lum::Base::StringToWString(PACKAGE_VERSION)); info.SetDescription(L"Mark all the hidden mines..."); info.SetAuthor(L"Tim Teulings"); info.SetContact(L"Tim Teulings info.SetCopyright(L"(c) 2004, Tim Teulings"); info.SetLicense(L"GNU Public License"); if (Lum::OS::prober->Open(L"FindMine",argc,argv)) { MyWindow* window; window=new MyWindow; if (window->Open()) { window->SetExitAction(window->GetClosedAction()); window->EventLoop(); window->Close(); } delete window; Lum::OS::display->Close(); } SaveConfig(); FreeConfig(); This source is part of the FindMine program. Copyright (C) 2004 Tim Teulings This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA emptyColor(0.6,0.6,0.6,Lum::OS::Display::blackColor), cellColor(0.7,0.7,0.7,Lum::OS::Display::blackColor), lightColor(0.95,0.95,0.95,Lum::OS::Display::blackColor), darkColor(0.2,0.2,0.2,Lum::OS::Display::blackColor), textColor(1,1,1,Lum::OS::Display::whiteColor), bombColor(0,0,0,Lum::OS::Display::whiteColor), markColor(1,0,0,Lum::OS::Display::whiteColor), status(new Lum::Model::ULong()), marks(new Lum::Model::Long()), bombs(0), oneButtonMode(false), game(NULL), themeIndex(0) sMaxWidth=areaWidth; sMaxHeight=areaHeight; status->Set(waiting); marks->Set(0); font=Lum::OS::display->GetFont(Lum::OS::Display::fontTypeFixed, Lum::OS::Display::fontScaleFootnote); delete game; return false; if (themes[i].name==themeName) { themeIndex=i; if (game!=NULL) { delete game; game=Lum::OS::driver->CreateBitmap(GetAreaWidth()*GetBoxSize(), GetAreaHeight()*GetBoxSize()); RedrawArea(); Redraw(); } return; } } assert(false); width=16*24; height=16*24; minWidth=10*24; minHeight=10*24; Lum::Scrollable::CalcSize(); if (game!=NULL) { hAdjustment->SetDimension(width,game->GetWidth()); vAdjustment->SetDimension(height,game->GetHeight()); } else { hAdjustment->SetInvalid(); vAdjustment->SetInvalid(); } int x, int y, size_t w, size_t h) draw->PushForeground(emptyColor); draw->FillRectangle(x,y,w,h); draw->PopForeground(); int x, int y, size_t w, size_t h) draw->PushForeground(cellColor); draw->FillRectangle(x,y,w,h); draw->PopForeground(); int x, int y, size_t w, size_t h) draw->PushForeground(lightColor); draw->DrawLine(x,y+h-1,x,y); draw->DrawLine(x,y,x+w-1,y); draw->PopForeground(); draw->PushForeground(lightColor); draw->DrawLine(x+1,y+h-2,x+1,y); draw->DrawLine(x,y+1,x+w-2,y+1); draw->PopForeground(); draw->PushForeground(darkColor); draw->DrawLine(x+1,y+h-1,x+w-1,y+h-1); draw->DrawLine(x+w-1,y+h-1,x+w-1,y); draw->PopForeground(); draw->PushForeground(darkColor); draw->DrawLine(x+2,y+h-2,x+w-2,y+h-2); draw->DrawLine(x+w-2,y+h-2,x+w-2,y+1); draw->PopForeground(); size_t x,y,frameA,frameB,frameSize; Lum::OS::DrawInfo *draw=game->GetDrawInfo(); x=row*GetBoxSize(); y=column*GetBoxSize(); frameA=4; frameB=4; frameSize=frameA+frameB; DrawEmptyCellBackground(draw,x,y,GetBoxSize(),GetBoxSize()); // Check if we have a filled gaming area if (area[row][column].active) { // if the given cell is already unrevealed... if (area[row][column].open) { // if there is a bomb... if (area[row][column].bomb) { if (GetImage(bombImage)!=NULL) { GetImage(bombImage)->Draw(draw,x,y); } else { draw->PushForeground(bombColor); draw->FillArc(x+frameA, y+frameA, GetBoxSize()-frameSize, GetBoxSize()-frameSize, 0,360*64); draw->PopForeground(); } } // no bomb... else { // paint the number of hidden neighbours... if (area[row][column].count!=0) { std::wstring string=Lum::Base::NumberToWString((unsigned long)area[row][column].count); draw->PushFont(font); draw->PushForeground(textColor); draw->DrawString(x+(GetBoxSize()-font->StringWidth(string,Lum::OS::Font::normal)) / 2, y+(GetBoxSize()-font->height) / 2+font->ascent, string); draw->PopForeground(); draw->PopFont(); } } } // Cell is still hidden else { // if we are finished playing, draw hidden bomb cells as unhidden and having a bomb... if ((status->Get()!=playing) && (area[row][column].bomb)) { if (GetImage(bombImage)!=NULL) { GetImage(bombImage)->Draw(draw,x,y); } else { draw->PushForeground(bombColor); draw->FillArc(x+frameA, y+frameA, GetBoxSize()-frameSize, GetBoxSize()-frameSize, 0,360*64); draw->PopForeground(); } } // if the cell is marked as having a bomb, do special drawing... else if (area[row][column].marked) { DrawHiddenCellBackground(draw,x,y,GetBoxSize(),GetBoxSize()); if (GetImage(markedImage)!=NULL) { GetImage(markedImage)->Draw(draw,x,y); } else { DrawHiddenCellInternal(draw,x,y,GetBoxSize(),GetBoxSize()); draw->PushForeground(markColor); draw->FillRectangle(x+frameA, y+frameA, GetBoxSize()-frameSize, GetBoxSize()-frameSize); draw->PopForeground(); } } // draw the cell as normal hidden cell... else { DrawHiddenCellBackground(draw,x,y,GetBoxSize(),GetBoxSize()); if (GetImage(hiddenImage)!=NULL) { GetImage(hiddenImage)->Draw(draw,x,y); } else { DrawHiddenCellInternal(draw,x,y,GetBoxSize(),GetBoxSize()); } } } } size_t column, size_t row, size_t& x, size_t& y) /* 012 345 678 */ switch (n) { case 0: x=column-1; y=row-1; break; case 1: x=column; y=row-1; break; case 2: x=column+1; y=row-1; break; case 3: x=column-1; y=row; break; case 4: x=column; y=row; break; case 5: x=column+1; y=row; break; case 6: x=column-1; y=row+1; break; case 7: x=column; y=row+1; break; case 8: x=column+1; y=row+1; break; } return x size_t x,y; /* automatically open cells which have 0 neighbours */ do { long marks=bombs; changed=false; notFound=false; /* calculate neighbourhood */ size_t oldBombs,bombs; oldBombs=area[column][row].count; bombs=0; if (GetNeighbour(n,column,row,x,y)) { if (area[x][y].bomb) { bombs++; } } } if (bombs!=oldBombs) { area[column][row].count=bombs; if (area[column][row].open) { DrawCell(column,row); } } // check if you have opened a bomb if (area[column][row].open && area[column][row].bomb && (status->Get()!=lost)) { timer.Pause(); status->Set(lost); RedrawArea(); // We redraw the complete area to show all bombs Redraw(); } // still unopened areas without bombs if (!area[column][row].bomb && !area[column][row].open) { notFound=true; } } } /* open automatically when neighbour has count 0 and is opened */ if (area[column][row].open && (area[column][row].count==0)) { if (GetNeighbour(n,column,row,x,y)) { if (!area[x][y].open) { area[x][y].open=true; DrawCell(x,y); changed=true; } } } } } } if (area[column][row].marked) { marks--; } } } this->marks->Set(marks); if ((status->Get()==playing) && !notFound) { timer.Pause(); status->Set(won); } } while (changed); return themes[themeIndex].boxSize; return themes[themeIndex].images[image]; DrawCell(x,y); } } if (area[x][y].active) { if (!area[x][y].open) { if (status->Get()==playing && (timer.IsStoped() || timer.IsPausing())) { timer.Start(); } area[x][y].open=true; area[x][y].marked=false; DrawCell(x,y); RecalcArea(); Redraw(); } } if (area[x][y].active) { if (!area[x][y].open) { if (status->Get()==playing && (timer.IsStoped() || timer.IsPausing())) { timer.Start(); } area[x][y].marked=!area[x][y].marked; DrawCell(x,y); RecalcArea(); Redraw(); } } Scrollable::Draw(x,y,w,h); if (!OIntersect(x,y,w,h)) { return; } /* --- */ if (game==NULL) { return; } Lum::OS::DrawInfo *draw=GetDrawInfo(); draw->CopyFromBitmap(game, hAdjustment->GetTop()-1,vAdjustment->GetTop()-1, this->width,this->height, this->x,this->y); if (!visible || status->Get()!=playing) { return false; } if (event.type==Lum::OS::MouseEvent::down && PointIsIn(event)) { mbdx=event.x; mbdy=event.y; return true; } else if (event.type==Lum::OS::MouseEvent::up && PointIsIn(event) && event.button==Lum::OS::MouseEvent::button1 && event.qualifier==Lum::OS::qualifierButton1) { size_t x,y; x=(event.x-this->x+hAdjustment->GetTop()-1)/GetBoxSize(); y=(event.y-this->y+vAdjustment->GetTop()-1)/GetBoxSize(); if (oneButtonMode) { if (GetWindow()->IsDoubleClicked()) { OpenField(x,y); } else { ToggleMark(x,y); } } else { OpenField(x,y); } return true; } else if (event.type==Lum::OS::MouseEvent::up && PointIsIn(event) && event.button==Lum::OS::MouseEvent::button3 && event.qualifier==Lum::OS::qualifierButton3) { if (oneButtonMode) { return true; } size_t x,y; x=(event.x-this->x+hAdjustment->GetTop()-1)/GetBoxSize(); y=(event.y-this->y+vAdjustment->GetTop()-1)/GetBoxSize(); ToggleMark(x,y); return true; } return false; if (width>sMaxWidth || height>sMaxHeight || bombs>width*height) { return false; } sWidth=width; sHeight=height; this->bombs=bombs; delete game; game=Lum::OS::driver->CreateBitmap(GetAreaWidth()*GetBoxSize(), GetAreaHeight()*GetBoxSize()); Run(); RedrawArea(); UpdateDimensions(); Redraw(); return true; oneButtonMode=set; return sWidth; return sHeight; return bombs; return Lum::Base::RoundDiv(bombs*100,sWidth*sHeight); return status.Get(); return marks.Get(); size_t cells,bombs; /* Set a more random seed */ srand(time(NULL)); /* initialize */ area[x][y].bomb=false; area[x][y].open=false; area[x][y].marked=false; area[x][y].count=0; area[x][y].active=false; } } cells=sWidth*sHeight; bombs=this->bombs; area[x][y].active=true; area[x][y].bomb=((float)cells*rand()/RAND_MAX) bombs--; } cells--; } } status->Set(playing); marks->Set(this->bombs); RedrawArea(); Redraw(); timer.Reset(); return (Status)status->Get(); return timer.GetTime(); status->Set(waiting); if (visible) { Redraw(); } if (model==hAdjustment->GetTopModel() || model==vAdjustment->GetTopModel()) { Redraw(); } Lum::Scrollable::Resync(model,msg); Configuration.cpp\ Control.h\ Control.cpp\ FindMine.cpp\ or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 -d DIRECTORIES... CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # Otherwise, the last argument is the destination. Remove it from $@. if test -n "$dstarg"; then esac if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" || lasterr=$? fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { } fi || { (exit 1); exit; } (exit 0); exit The `configure' shell script attempts to guess correct values for It can also use an optional file (typically called `config.cache' If you need to do unusual things to compile the package, please try The file `configure.ac' (or `configure.in') is used to create 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. You can give `configure' initial values for configuration parameters ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. If you have to use a `make' that does not support the `VPATH' You can specify separate installation prefixes for In addition, if you use an unusual directory layout you can give If the package supports it, you can cause programs to be installed For packages that use the X Window System, `configure' can usually CPU-COMPANY-SYSTEM OS KERNEL-OS See the file `config.sub' for the possible values of each field. If If you are _building_ compiler tools for cross-compiling, you should If you want to _use_ a cross compiler, that generates code for a ./configure CC=/usr/local2/bin/gcc /bin/bash ./configure CONFIG_SHELL=/bin/bash Print a summary of the options to `configure', and exit. Print the version of Autoconf used to generate the `configure' script, and exit. Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. Alias for `--cache-file=config.cache'. Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. if [ -f $MAEMO_SELECT_MENU ] then maemo-select-menu-location findmine.desktop tana_fi_games fi * Improved help text, zoom button | tim@teulings.org | 2010-02-22 21:43 UTC |
Package events
| Package | Repository | Event type | User | Timestamp |
| findmine 0.3.20090322-1 | Diablo Extras-devel free armel | Package imported | System | 2021-02-10 06:14 UTC |
| findmine 0.3.20090322-1 | Fremantle Extras-devel free i386 | Package has been removed | Paul sixwheeledbeast | 2013-07-09 21:18 UTC |
| findmine 0.3.20090322-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2013-06-16 03:47 UTC |
| findmine 0.3.20090322-1 | Fremantle Extras-devel free i386 | Package imported | System | 2013-06-16 03:36 UTC |
| findmine 0.3.20090520-1 | Diablo Extras-devel free armel | Package imported | System | 2012-12-29 23:22 UTC |
| findmine 0.3.20090520-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2012-12-29 22:04 UTC |
| findmine 0.3.20090520-1 | Fremantle Extras-devel free i386 | Package imported | System | 2012-12-29 21:41 UTC |
| findmine | Fremantle Extras-testing free armel | Old version cleaned by repository management | System | 2011-12-03 01:18 UTC |
| findmine | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2011-12-02 22:28 UTC |
| findmine | Fremantle Extras-testing free armel | Package is in testing | System | 2011-12-02 14:46 UTC |
| findmine | Fremantle Extras-devel free armel | Package imported | System | 2011-12-02 14:43 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-12-20 23:47 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-12-20 23:45 UTC |
| findmine 0.5.20101220-1 | Fremantle Extras-devel free i386 | Package imported | System | 2010-12-20 19:42 UTC |
| findmine 0.5.20101220-1 | Fremantle Extras-devel free armel | Package imported | System | 2010-12-20 19:40 UTC |
| findmine 0.5.20101220-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-12-20 19:22 UTC |
| findmine 0.5.20101220-1 | Fremantle Extras-devel free i386 | Building | System | 2010-12-20 19:21 UTC |
| findmine 0.5.20101220-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-12-20 19:21 UTC |
| findmine 0.5.20101220-1 | Fremantle Extras-devel free armel | Building | System | 2010-12-20 19:20 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-10-07 11:18 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-10-07 11:16 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free i386 | Package imported | System | 2010-10-07 07:12 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free armel | Package imported | System | 2010-10-07 07:10 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-10-07 06:56 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free i386 | Building | System | 2010-10-07 06:55 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-10-07 06:55 UTC |
| findmine 0.5.20101005-2 | Fremantle Extras-devel free armel | Building | System | 2010-10-07 06:54 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-10-07 01:48 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-10-07 01:47 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free i386 | Package imported | System | 2010-10-06 21:43 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free armel | Package imported | System | 2010-10-06 21:40 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-10-06 21:27 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free i386 | Building | System | 2010-10-06 21:27 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-10-06 21:27 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free armel | Build failed | System | 2010-10-06 20:32 UTC |
| findmine 0.5.20101005-1 | Fremantle Extras-devel free armel | Building | System | 2010-10-06 20:32 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras free i386 | Package is stable | System | 2010-04-12 19:55 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras free armel | Package is stable | System | 2010-04-12 19:55 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-testing free armel | Package promoted | Tim Teulings | 2010-04-12 19:37 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-04-07 14:13 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-testing free armel | Old version cleaned by repository management | System | 2010-04-07 12:59 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-testing free i386 | Old version cleaned by repository management | System | 2010-04-07 12:59 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free i386 | Package promoted | Tim Teulings | 2010-02-24 07:16 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-testing free i386 | Package is in testing | System | 2010-02-24 07:15 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-testing free armel | Package is in testing | System | 2010-02-24 07:15 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free i386 | Package imported | System | 2010-02-23 21:09 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free armel | Package imported | System | 2010-02-23 21:08 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-23 20:42 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-23 20:42 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-02-23 20:41 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free i386 | Building | System | 2010-02-23 20:40 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-02-23 20:40 UTC |
| findmine 0.5.20100243-2 | Fremantle Extras-devel free armel | Building | System | 2010-02-23 20:40 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free i386 | Package imported | System | 2010-02-22 22:39 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free armel | Package imported | System | 2010-02-22 22:38 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-22 22:28 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-22 22:28 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-02-22 22:27 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free i386 | Building | System | 2010-02-22 22:26 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-02-22 22:26 UTC |
| findmine 0.5.20100243-1 | Fremantle Extras-devel free armel | Building | System | 2010-02-22 22:26 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-09 15:46 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-09 15:43 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-09 13:06 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-09 13:06 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-09 13:01 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-09 13:01 UTC |
| findmine 0.3.20090910-1 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-09 12:13 UTC |
| findmine 0.3.20090520-2 | Fremantle Extras-devel free i386 | Old version cleaned by repository management | System | 2010-02-09 12:12 UTC |
| findmine 0.3.20090910-1 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-09 11:14 UTC |
| findmine 0.3.20090520-2 | Fremantle Extras-devel free armel | Old version cleaned by repository management | System | 2010-02-09 11:14 UTC |
| findmine 0.3.20091110-2 | Diablo Extras-devel free i386 | Package imported | System | 2010-01-27 13:22 UTC |
| findmine 0.3.20090520-1 | Diablo Extras free i386 | Package is stable | System | 2010-01-27 12:46 UTC |
| findmine 0.3.20090520-1 | Diablo Extras free armel | Package is stable | System | 2010-01-27 12:45 UTC |
| findmine 0.3.20091110-2 | Diablo Extras-devel free armel | Package imported | System | 2010-01-27 09:20 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-testing free i386 | Package is in testing | System | 2010-01-21 15:16 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-testing free armel | Package is in testing | System | 2010-01-21 15:16 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free armel | Package promoted | Tim Teulings | 2010-01-21 14:52 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free i386 | Package imported | System | 2010-01-21 08:43 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free armel | Package imported | System | 2010-01-21 08:41 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-01-21 08:19 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free i386 | Building | System | 2010-01-21 08:18 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-01-21 08:18 UTC |
| findmine 0.4.20100104-4 | Fremantle Extras-devel free armel | Building | System | 2010-01-21 08:18 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free i386 | Package imported | System | 2010-01-06 11:46 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free armel | Package imported | System | 2010-01-06 11:46 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-01-06 10:56 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free i386 | Building | System | 2010-01-06 10:56 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-01-06 10:56 UTC |
| findmine 0.4.20100104-3 | Fremantle Extras-devel free armel | Building | System | 2010-01-06 10:55 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free i386 | Package imported | System | 2010-01-05 13:47 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free armel | Package imported | System | 2010-01-05 13:47 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-01-05 13:21 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free i386 | Building | System | 2010-01-05 13:20 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-01-05 13:20 UTC |
| findmine 0.4.20100104-2 | Fremantle Extras-devel free armel | Building | System | 2010-01-05 13:20 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free i386 | Package imported | System | 2010-01-04 23:23 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free armel | Package imported | System | 2010-01-04 22:50 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2010-01-04 21:53 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free i386 | Building | System | 2010-01-04 21:52 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2010-01-04 21:52 UTC |
| findmine 0.4.20100104-1 | Fremantle Extras-devel free armel | Building | System | 2010-01-04 21:50 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free i386 | Package imported | System | 2009-12-03 16:23 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free armel | Package imported | System | 2009-12-03 16:22 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2009-12-03 15:05 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free i386 | Building | System | 2009-12-03 14:46 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2009-12-03 14:46 UTC |
| findmine 0.3.20091202-1 | Fremantle Extras-devel free armel | Building | System | 2009-12-03 14:25 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free i386 | Package imported | System | 2009-11-12 19:23 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free armel | Package imported | System | 2009-11-12 19:22 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free i386 | Build succeeded | System | 2009-11-12 18:50 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free i386 | Building | System | 2009-11-12 18:40 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free armel | Build succeeded | System | 2009-11-12 18:39 UTC |
| findmine 0.3.20091110-2 | Fremantle Extras-devel free armel | Building | System | 2009-11-12 18:35 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free i386 | Package imported | System | 2009-11-12 08:23 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free armel | Package imported | System | 2009-11-12 08:22 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2009-11-12 07:57 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free i386 | Building | System | 2009-11-12 07:52 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2009-11-12 07:52 UTC |
| findmine 0.3.20091110-1 | Fremantle Extras-devel free armel | Building | System | 2009-11-12 07:45 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free i386 | Package imported | System | 2009-10-10 14:22 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free armel | Package imported | System | 2009-10-10 14:22 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free i386 | Build succeeded | System | 2009-10-10 13:48 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free i386 | Building | System | 2009-10-10 13:44 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free armel | Build succeeded | System | 2009-10-10 13:44 UTC |
| findmine 0.3.20091009-2 | Fremantle Extras-devel free armel | Building | System | 2009-10-10 13:40 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free i386 | Package imported | System | 2009-10-10 11:22 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free armel | Package imported | System | 2009-10-10 11:22 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free i386 | Build succeeded | System | 2009-10-10 10:44 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free i386 | Building | System | 2009-10-10 10:38 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free armel | Build succeeded | System | 2009-10-10 10:38 UTC |
| findmine 0.3.20091009-1 | Fremantle Extras-devel free armel | Building | System | 2009-10-10 10:30 UTC |
| findmine 0.3.20090910-1 | Fremantle Extras-devel free i386 | Package imported | System | 2009-09-11 19:56 UTC |
| findmine 0.3.20090910-1 | Fremantle Extras-devel free armel | Package imported | System | 2009-09-11 19:55 UTC |
| findmine 0.3.20090520-2 | Fremantle Extras-devel free i386 | Package imported | System | 2009-07-14 07:59 UTC |
| findmine 0.3.20090520-2 | Fremantle Extras-devel free armel | Package imported | System | 2009-07-14 07:58 UTC |
