FindMine

A MineSweeper clone A simple MineSweeper clone written using the Illumination GUI library.
Section:
user/games
Maintainers:

Releases

RepositoryLatest version
Diablo Extras free armelfindmine 0.3.20090520-1
Diablo Extras free i386findmine 0.3.20090520-1
Diablo Extras-devel free armelfindmine 0.3.20091110-2
Diablo Extras-devel free i386findmine 0.3.20091110-2
Fremantle Extras free armelfindmine 0.5.20100243-2
Fremantle Extras free i386findmine 0.5.20100243-2
Fremantle Extras-devel free armelfindmine 0.5.20101220-1
Fremantle Extras-devel free i386findmine 0.5.20101220-1
Fremantle Extras-testing free armelfindmine 0.5.20100243-2
Fremantle Extras-testing free i386findmine 0.5.20100243-2

Changes

VersionChangesAuthorDate
0.5.20101220-1 * Rebuild against current Illumination.tim@teulings.org2010-12-20 18:01 UTC
0.5.20101005-2 * * Increase version to force rebuild against current Illumination
   package.
tim@teulings.org2010-10-07 06:33 UTC
0.5.20101005-1 * Build against new Illumination version.tim@teulings.org2010-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">
     id="defs2820">
      id="linearGradient3625">
      style="stop-color:#969696;stop-opacity:1;"
   offset="0"
   id="stop3627" />
      style="stop-color:#1e1e1e;stop-opacity:1;"
   offset="1"
   id="stop3629" />
  
      sodipodi:type="inkscape:persp3d"
   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" />
      inkscape:collect="always"
   xlink:href="#linearGradient3625"
   id="radialGradient3643"
   cx="29.929907"
   cy="32.878506"
   fx="29.929907"
   fy="32.878506"
   r="22.5"
   gradientUnits="userSpaceOnUse" />
      id="perspective3653"
   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:collect="always"
   xlink:href="#linearGradient3625-2"
   id="radialGradient3643-8"
   cx="29.929907"
   cy="32.878506"
   fx="29.929907"
   fy="32.878506"
   r="22.5"
   gradientUnits="userSpaceOnUse" />
      id="linearGradient3625-2">
      style="stop-color:#969696;stop-opacity:1;"
   offset="0"
   id="stop3627-8" />
      style="stop-color:#000000;stop-opacity:1;"
   offset="1"
   id="stop3629-8" />
  
      inkscape:collect="always"
   id="filter3714"
   x="-0.12"
   width="1.24"
   y="-0.12"
   height="1.24">
      inkscape:collect="always"
   stdDeviation="2.25"
   id="feGaussianBlur3716" />
  
  
     id="base"
   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">
      type="xygrid"
   id="grid2828"
   empspacing="5"
   visible="true"
   enabled="true"
   snapvisiblegridlinesonly="true" />
  
     id="metadata2823">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  
  

  
     id="layer1"
   inkscape:label="Layer 1"
   inkscape:groupmode="layer">
      sodipodi:type="arc"
   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)" />
      sodipodi:type="arc"
   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="defs4456">
      effect="envelope"
   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" />
      effect="envelope"
   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" />
      sodipodi:type="inkscape:persp3d"
   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" />
      id="perspective5027"
   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" />
      id="perspective5077"
   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" />
      id="perspective5135"
   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" />
  
     id="base"
   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">
      type="xygrid"
   id="grid4464"
   empspacing="5"
   visible="true"
   enabled="true"
   snapvisiblegridlinesonly="true" />
  
     id="metadata4459">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  
  

  
     id="layer1"
   inkscape:label="Layer 1"
   inkscape:groupmode="layer">
      style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
   d="m 18.372743,8.283438 c 0,48.245614 0,48.245614 0,48.245614"
   id="path4487" />
      transform="matrix(1.0000074,0,0,1,-8.7636817e-5,0)"
   id="g5115">
      id="g5059">
      style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   d="m 63.5,0 0,63.857936"
   id="path3763-1" />
      id="g5011">
      id="path3763"
   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" />
      inkscape:transform-center-x="12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-x="12.500001"
   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" />
      id="path3763-3"
   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" />
  
  
      id="path3763-1-8"
   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" />
  
      style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
   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">
     id="defs3730">
      sodipodi:type="inkscape:persp3d"
   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" />
      id="perspective3773"
   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" />
      id="perspective3795"
   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" />
      id="perspective4327"
   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" />
      id="perspective4349"
   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" />
      id="perspective4374"
   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" />
      id="perspective4396"
   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" />
      id="perspective4418"
   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" />
      id="perspective4440"
   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" />
  
     id="base"
   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">
      type="xygrid"
   id="grid3738"
   empspacing="5"
   visible="true"
   enabled="true"
   snapvisiblegridlinesonly="true" />
  
     id="metadata3733">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  
  

  
     id="layer1"
   inkscape:label="Layer 1"
   inkscape:groupmode="layer">
      style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   d="m 0.5,0 0,63.857936"
   id="path3763-1-5" />
      id="g5115">
      id="g5059">
      style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   d="m 63.5,0 0,63.857936"
   id="path3763-1" />
      id="g5011">
      id="path3763"
   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" />
      inkscape:transform-center-x="12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-x="12.500001"
   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" />
      id="path3763-3"
   d="M 1.9924826,63 63,63"
   style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  
  
      id="path3763-1-8"
   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">
     id="defs4">
      id="linearGradient14044">
      style="stop-color:#000000;stop-opacity:1;"
   offset="0"
   id="stop14046" />
      style="stop-color:#000000;stop-opacity:0.53157896;"
   offset="1"
   id="stop14048" />
  
      id="linearGradient12041">
      style="stop-color:#fb0e00;stop-opacity:1;"
   offset="0"
   id="stop12043" />
      style="stop-color:#fbf900;stop-opacity:1;"
   offset="1"
   id="stop12045" />
  
      id="linearGradient3160">
      style="stop-color:#ffffff;stop-opacity:1;"
   offset="0"
   id="stop3162" />
      style="stop-color:#000000;stop-opacity:1;"
   offset="1"
   id="stop3164" />
  
      inkscape:collect="always"
   xlink:href="#linearGradient3160"
   id="radialGradient4137"
   cx="21.910675"
   cy="23.936594"
   fx="21.910675"
   fy="23.936594"
   r="15.00025"
   gradientUnits="userSpaceOnUse" />
      inkscape:collect="always"
   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" />
      inkscape:collect="always"
   xlink:href="#linearGradient14044"
   id="linearGradient14054"
   x1="41"
   y1="41.5"
   x2="48"
   y2="41.5"
   gradientUnits="userSpaceOnUse" />
  
     id="base"
   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" />
     id="metadata7">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  

  
     inkscape:label="Ebene 1"
   inkscape:groupmode="layer"
   id="layer1"
   style="display:inline">
      sodipodi:type="arc"
   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)" />
      style="fill:none;fill-rule:evenodd;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1;stroke:#000000;marker-start:none;marker-mid:none;"
   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" />
      sodipodi:type="star"
   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)" />
      style="fill:#000000;fill-rule:evenodd;stroke:#e70000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#f7f200;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#e80000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#f5f900;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#f8e700;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:#ff0000;fill-rule:evenodd;stroke:#fff700;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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 list;
  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*>::const_iterator iter;
  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*>::iterator iter;
  iter=hiscores.begin();
  while (iter!=hiscores.end()) {
   delete (*iter);
   ++iter;
  }
  hiscores.clear();
  std::list*>::const_iterator iter;
  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& actions)
  {
   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 (xlist.size() && (x+1==pos|| x+2==pos || x==pos+1 || x==pos+2)) {
   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& actions)
  {
   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& actions)
  {
   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& actions)
  {
   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 (poslist.size() && sweeper->GetElapsedTime()>=score->list[pos].time) {
   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::iterator iter;
   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  bool changed,notFound;
  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)   if (area[x][y].bomb) {
   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.org2010-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">
     id="defs2820">
      id="linearGradient3625">
      style="stop-color:#969696;stop-opacity:1;"
   offset="0"
   id="stop3627" />
      style="stop-color:#1e1e1e;stop-opacity:1;"
   offset="1"
   id="stop3629" />
  
      sodipodi:type="inkscape:persp3d"
   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" />
      inkscape:collect="always"
   xlink:href="#linearGradient3625"
   id="radialGradient3643"
   cx="29.929907"
   cy="32.878506"
   fx="29.929907"
   fy="32.878506"
   r="22.5"
   gradientUnits="userSpaceOnUse" />
      id="perspective3653"
   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:collect="always"
   xlink:href="#linearGradient3625-2"
   id="radialGradient3643-8"
   cx="29.929907"
   cy="32.878506"
   fx="29.929907"
   fy="32.878506"
   r="22.5"
   gradientUnits="userSpaceOnUse" />
      id="linearGradient3625-2">
      style="stop-color:#969696;stop-opacity:1;"
   offset="0"
   id="stop3627-8" />
      style="stop-color:#000000;stop-opacity:1;"
   offset="1"
   id="stop3629-8" />
  
      inkscape:collect="always"
   id="filter3714"
   x="-0.12"
   width="1.24"
   y="-0.12"
   height="1.24">
      inkscape:collect="always"
   stdDeviation="2.25"
   id="feGaussianBlur3716" />
  
  
     id="base"
   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">
      type="xygrid"
   id="grid2828"
   empspacing="5"
   visible="true"
   enabled="true"
   snapvisiblegridlinesonly="true" />
  
     id="metadata2823">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  
  

  
     id="layer1"
   inkscape:label="Layer 1"
   inkscape:groupmode="layer">
      sodipodi:type="arc"
   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)" />
      sodipodi:type="arc"
   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="defs4456">
      effect="envelope"
   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" />
      effect="envelope"
   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" />
      sodipodi:type="inkscape:persp3d"
   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" />
      id="perspective5027"
   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" />
      id="perspective5077"
   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" />
      id="perspective5135"
   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" />
  
     id="base"
   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">
      type="xygrid"
   id="grid4464"
   empspacing="5"
   visible="true"
   enabled="true"
   snapvisiblegridlinesonly="true" />
  
     id="metadata4459">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  
  

  
     id="layer1"
   inkscape:label="Layer 1"
   inkscape:groupmode="layer">
      style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
   d="m 18.372743,8.283438 c 0,48.245614 0,48.245614 0,48.245614"
   id="path4487" />
      transform="matrix(1.0000074,0,0,1,-8.7636817e-5,0)"
   id="g5115">
      id="g5059">
      style="fill:none;stroke:#000000;stroke-width:0.9999963px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   d="m 63.5,0 0,63.857936"
   id="path3763-1" />
      id="g5011">
      id="path3763"
   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" />
      inkscape:transform-center-x="12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-x="12.500001"
   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" />
      id="path3763-3"
   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" />
  
  
      id="path3763-1-8"
   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" />
  
      style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
   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">
     id="defs3730">
      sodipodi:type="inkscape:persp3d"
   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" />
      id="perspective3773"
   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" />
      id="perspective3795"
   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" />
      id="perspective4327"
   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" />
      id="perspective4349"
   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" />
      id="perspective4374"
   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" />
      id="perspective4396"
   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" />
      id="perspective4418"
   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" />
      id="perspective4440"
   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" />
  
     id="base"
   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">
      type="xygrid"
   id="grid3738"
   empspacing="5"
   visible="true"
   enabled="true"
   snapvisiblegridlinesonly="true" />
  
     id="metadata3733">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  
  

  
     id="layer1"
   inkscape:label="Layer 1"
   inkscape:groupmode="layer">
      style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   d="m 0.5,0 0,63.857936"
   id="path3763-1-5" />
      id="g5115">
      id="g5059">
      style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   d="m 63.5,0 0,63.857936"
   id="path3763-1" />
      id="g5011">
      id="path3763"
   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" />
      inkscape:transform-center-x="12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-y="-12.5"
   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" />
      inkscape:transform-center-x="12.500001"
   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" />
      id="path3763-3"
   d="M 1.9924826,63 63,63"
   style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  
  
      id="path3763-1-8"
   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">
     id="defs4">
      id="linearGradient14044">
      style="stop-color:#000000;stop-opacity:1;"
   offset="0"
   id="stop14046" />
      style="stop-color:#000000;stop-opacity:0.53157896;"
   offset="1"
   id="stop14048" />
  
      id="linearGradient12041">
      style="stop-color:#fb0e00;stop-opacity:1;"
   offset="0"
   id="stop12043" />
      style="stop-color:#fbf900;stop-opacity:1;"
   offset="1"
   id="stop12045" />
  
      id="linearGradient3160">
      style="stop-color:#ffffff;stop-opacity:1;"
   offset="0"
   id="stop3162" />
      style="stop-color:#000000;stop-opacity:1;"
   offset="1"
   id="stop3164" />
  
      inkscape:collect="always"
   xlink:href="#linearGradient3160"
   id="radialGradient4137"
   cx="21.910675"
   cy="23.936594"
   fx="21.910675"
   fy="23.936594"
   r="15.00025"
   gradientUnits="userSpaceOnUse" />
      inkscape:collect="always"
   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" />
      inkscape:collect="always"
   xlink:href="#linearGradient14044"
   id="linearGradient14054"
   x1="41"
   y1="41.5"
   x2="48"
   y2="41.5"
   gradientUnits="userSpaceOnUse" />
  
     id="base"
   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" />
     id="metadata7">
  
      rdf:about="">
   image/svg+xml
      rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  
  

  
     inkscape:label="Ebene 1"
   inkscape:groupmode="layer"
   id="layer1"
   style="display:inline">
      sodipodi:type="arc"
   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)" />
      style="fill:none;fill-rule:evenodd;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1;stroke:#000000;marker-start:none;marker-mid:none;"
   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" />
      sodipodi:type="star"
   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)" />
      style="fill:#000000;fill-rule:evenodd;stroke:#e70000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#f7f200;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#e80000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#f5f900;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:none;fill-rule:evenodd;stroke:#f8e700;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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" />
      style="fill:#ff0000;fill-rule:evenodd;stroke:#fff700;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
   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 list;
  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*>::const_iterator iter;
  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*>::iterator iter;
  iter=hiscores.begin();
  while (iter!=hiscores.end()) {
   delete (*iter);
   ++iter;
  }
  hiscores.clear();
  std::list*>::const_iterator iter;
  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& actions)
  {
   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 (xlist.size() && (x+1==pos|| x+2==pos || x==pos+1 || x==pos+2)) {
   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& actions)
  {
   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& actions)
  {
   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& actions)
  {
   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 (poslist.size() && sweeper->GetElapsedTime()>=score->list[pos].time) {
   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::iterator iter;
   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  bool changed,notFound;
  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)   if (area[x][y].bomb) {
   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.org2010-02-22 21:43 UTC

Package events

PackageRepositoryEvent typeUserTimestamp
findmine 0.3.20090322-1Diablo Extras-devel free armelPackage importedSystem2021-02-10 06:14 UTC
findmine 0.3.20090322-1Fremantle Extras-devel free i386Package has been removedPaul sixwheeledbeast2013-07-09 21:18 UTC
findmine 0.3.20090322-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2013-06-16 03:47 UTC
findmine 0.3.20090322-1Fremantle Extras-devel free i386Package importedSystem2013-06-16 03:36 UTC
findmine 0.3.20090520-1Diablo Extras-devel free armelPackage importedSystem2012-12-29 23:22 UTC
findmine 0.3.20090520-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2012-12-29 22:04 UTC
findmine 0.3.20090520-1Fremantle Extras-devel free i386Package importedSystem2012-12-29 21:41 UTC
findmine Fremantle Extras-testing free armelOld version cleaned by repository managementSystem2011-12-03 01:18 UTC
findmine Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2011-12-02 22:28 UTC
findmine Fremantle Extras-testing free armelPackage is in testingSystem2011-12-02 14:46 UTC
findmine Fremantle Extras-devel free armelPackage importedSystem2011-12-02 14:43 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-12-20 23:47 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-12-20 23:45 UTC
findmine 0.5.20101220-1Fremantle Extras-devel free i386Package importedSystem2010-12-20 19:42 UTC
findmine 0.5.20101220-1Fremantle Extras-devel free armelPackage importedSystem2010-12-20 19:40 UTC
findmine 0.5.20101220-1Fremantle Extras-devel free i386Build succeededSystem2010-12-20 19:22 UTC
findmine 0.5.20101220-1Fremantle Extras-devel free i386BuildingSystem2010-12-20 19:21 UTC
findmine 0.5.20101220-1Fremantle Extras-devel free armelBuild succeededSystem2010-12-20 19:21 UTC
findmine 0.5.20101220-1Fremantle Extras-devel free armelBuildingSystem2010-12-20 19:20 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-10-07 11:18 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-10-07 11:16 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free i386Package importedSystem2010-10-07 07:12 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free armelPackage importedSystem2010-10-07 07:10 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free i386Build succeededSystem2010-10-07 06:56 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free i386BuildingSystem2010-10-07 06:55 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free armelBuild succeededSystem2010-10-07 06:55 UTC
findmine 0.5.20101005-2Fremantle Extras-devel free armelBuildingSystem2010-10-07 06:54 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-10-07 01:48 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-10-07 01:47 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free i386Package importedSystem2010-10-06 21:43 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free armelPackage importedSystem2010-10-06 21:40 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free i386Build succeededSystem2010-10-06 21:27 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free i386BuildingSystem2010-10-06 21:27 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free armelBuild succeededSystem2010-10-06 21:27 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free armelBuild failedSystem2010-10-06 20:32 UTC
findmine 0.5.20101005-1Fremantle Extras-devel free armelBuildingSystem2010-10-06 20:32 UTC
findmine 0.5.20100243-2Fremantle Extras free i386Package is stableSystem2010-04-12 19:55 UTC
findmine 0.5.20100243-2Fremantle Extras free armelPackage is stableSystem2010-04-12 19:55 UTC
findmine 0.5.20100243-2Fremantle Extras-testing free armelPackage promotedTim Teulings2010-04-12 19:37 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-04-07 14:13 UTC
findmine 0.4.20100104-4Fremantle Extras-testing free armelOld version cleaned by repository managementSystem2010-04-07 12:59 UTC
findmine 0.4.20100104-4Fremantle Extras-testing free i386Old version cleaned by repository managementSystem2010-04-07 12:59 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free i386Package promotedTim Teulings2010-02-24 07:16 UTC
findmine 0.5.20100243-2Fremantle Extras-testing free i386Package is in testingSystem2010-02-24 07:15 UTC
findmine 0.5.20100243-2Fremantle Extras-testing free armelPackage is in testingSystem2010-02-24 07:15 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free i386Package importedSystem2010-02-23 21:09 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free armelPackage importedSystem2010-02-23 21:08 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-23 20:42 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-23 20:42 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free i386Build succeededSystem2010-02-23 20:41 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free i386BuildingSystem2010-02-23 20:40 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free armelBuild succeededSystem2010-02-23 20:40 UTC
findmine 0.5.20100243-2Fremantle Extras-devel free armelBuildingSystem2010-02-23 20:40 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free i386Package importedSystem2010-02-22 22:39 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free armelPackage importedSystem2010-02-22 22:38 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-22 22:28 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-22 22:28 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free i386Build succeededSystem2010-02-22 22:27 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free i386BuildingSystem2010-02-22 22:26 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free armelBuild succeededSystem2010-02-22 22:26 UTC
findmine 0.5.20100243-1Fremantle Extras-devel free armelBuildingSystem2010-02-22 22:26 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-09 15:46 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-09 15:43 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-09 13:06 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-09 13:06 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-09 13:01 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-09 13:01 UTC
findmine 0.3.20090910-1Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-09 12:13 UTC
findmine 0.3.20090520-2Fremantle Extras-devel free i386Old version cleaned by repository managementSystem2010-02-09 12:12 UTC
findmine 0.3.20090910-1Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-09 11:14 UTC
findmine 0.3.20090520-2Fremantle Extras-devel free armelOld version cleaned by repository managementSystem2010-02-09 11:14 UTC
findmine 0.3.20091110-2Diablo Extras-devel free i386Package importedSystem2010-01-27 13:22 UTC
findmine 0.3.20090520-1Diablo Extras free i386Package is stableSystem2010-01-27 12:46 UTC
findmine 0.3.20090520-1Diablo Extras free armelPackage is stableSystem2010-01-27 12:45 UTC
findmine 0.3.20091110-2Diablo Extras-devel free armelPackage importedSystem2010-01-27 09:20 UTC
findmine 0.4.20100104-4Fremantle Extras-testing free i386Package is in testingSystem2010-01-21 15:16 UTC
findmine 0.4.20100104-4Fremantle Extras-testing free armelPackage is in testingSystem2010-01-21 15:16 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free armelPackage promotedTim Teulings2010-01-21 14:52 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free i386Package importedSystem2010-01-21 08:43 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free armelPackage importedSystem2010-01-21 08:41 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free i386Build succeededSystem2010-01-21 08:19 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free i386BuildingSystem2010-01-21 08:18 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free armelBuild succeededSystem2010-01-21 08:18 UTC
findmine 0.4.20100104-4Fremantle Extras-devel free armelBuildingSystem2010-01-21 08:18 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free i386Package importedSystem2010-01-06 11:46 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free armelPackage importedSystem2010-01-06 11:46 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free i386Build succeededSystem2010-01-06 10:56 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free i386BuildingSystem2010-01-06 10:56 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free armelBuild succeededSystem2010-01-06 10:56 UTC
findmine 0.4.20100104-3Fremantle Extras-devel free armelBuildingSystem2010-01-06 10:55 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free i386Package importedSystem2010-01-05 13:47 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free armelPackage importedSystem2010-01-05 13:47 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free i386Build succeededSystem2010-01-05 13:21 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free i386BuildingSystem2010-01-05 13:20 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free armelBuild succeededSystem2010-01-05 13:20 UTC
findmine 0.4.20100104-2Fremantle Extras-devel free armelBuildingSystem2010-01-05 13:20 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free i386Package importedSystem2010-01-04 23:23 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free armelPackage importedSystem2010-01-04 22:50 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free i386Build succeededSystem2010-01-04 21:53 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free i386BuildingSystem2010-01-04 21:52 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free armelBuild succeededSystem2010-01-04 21:52 UTC
findmine 0.4.20100104-1Fremantle Extras-devel free armelBuildingSystem2010-01-04 21:50 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free i386Package importedSystem2009-12-03 16:23 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free armelPackage importedSystem2009-12-03 16:22 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free i386Build succeededSystem2009-12-03 15:05 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free i386BuildingSystem2009-12-03 14:46 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free armelBuild succeededSystem2009-12-03 14:46 UTC
findmine 0.3.20091202-1Fremantle Extras-devel free armelBuildingSystem2009-12-03 14:25 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free i386Package importedSystem2009-11-12 19:23 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free armelPackage importedSystem2009-11-12 19:22 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free i386Build succeededSystem2009-11-12 18:50 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free i386BuildingSystem2009-11-12 18:40 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free armelBuild succeededSystem2009-11-12 18:39 UTC
findmine 0.3.20091110-2Fremantle Extras-devel free armelBuildingSystem2009-11-12 18:35 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free i386Package importedSystem2009-11-12 08:23 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free armelPackage importedSystem2009-11-12 08:22 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free i386Build succeededSystem2009-11-12 07:57 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free i386BuildingSystem2009-11-12 07:52 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free armelBuild succeededSystem2009-11-12 07:52 UTC
findmine 0.3.20091110-1Fremantle Extras-devel free armelBuildingSystem2009-11-12 07:45 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free i386Package importedSystem2009-10-10 14:22 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free armelPackage importedSystem2009-10-10 14:22 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free i386Build succeededSystem2009-10-10 13:48 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free i386BuildingSystem2009-10-10 13:44 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free armelBuild succeededSystem2009-10-10 13:44 UTC
findmine 0.3.20091009-2Fremantle Extras-devel free armelBuildingSystem2009-10-10 13:40 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free i386Package importedSystem2009-10-10 11:22 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free armelPackage importedSystem2009-10-10 11:22 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free i386Build succeededSystem2009-10-10 10:44 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free i386BuildingSystem2009-10-10 10:38 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free armelBuild succeededSystem2009-10-10 10:38 UTC
findmine 0.3.20091009-1Fremantle Extras-devel free armelBuildingSystem2009-10-10 10:30 UTC
findmine 0.3.20090910-1Fremantle Extras-devel free i386Package importedSystem2009-09-11 19:56 UTC
findmine 0.3.20090910-1Fremantle Extras-devel free armelPackage importedSystem2009-09-11 19:55 UTC
findmine 0.3.20090520-2Fremantle Extras-devel free i386Package importedSystem2009-07-14 07:59 UTC
findmine 0.3.20090520-2Fremantle Extras-devel free armelPackage importedSystem2009-07-14 07:58 UTC